package com.vci.client.portal.Formdesign; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.ButtonGroup; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.border.EmptyBorder; import com.vci.client.LogonApplication; import com.vci.client.common.FreeMarkerCommon; import com.vci.client.omd.btm.ui.BtmClient; import com.vci.client.omd.provider.ApProvider; import com.vci.client.omd.provider.EnumProvider; import com.vci.client.portal.Formdesign.object.CompnentGroup; import com.vci.client.portal.Formdesign.util.CompnentUtil; import com.vci.client.portal.utility.DataModelFactory; import com.vci.client.portal.utility.PRMItem; import com.vci.client.ui.swing.VCIOptionPane; import com.vci.common.portal.enums.ControlType; import com.vci.corba.omd.atm.AttribItem; import com.vci.corba.omd.etm.EnumChild; import com.vci.corba.omd.etm.EnumItem; import com.vci.corba.portal.data.PLUILayout; import com.vci.mw.ClientContextVariable; import com.vci.omd.constants.BusinessConstants; import com.vci.omd.objects.OtherInfo; public class WidgetPanel extends JPanel { private final JPanel contentPanel = new JPanel(); private JTextField jdFieldTxt; private JTextField jdNameTxt; private JTextField jdVlueTxt; private ButtonGroup bg; private JRadioButton fullDisRadio; private JRadioButton noDisRadio; private JButton okButton; private JTextField jdValueListName; private JTextField jdValueListVal; private JTextArea jdScriptTxt; private JTextArea jdTipsTxt; private JButton addJdvalueListBtn; private JComboBox jdTypeComBox; // private JComboBox jdListTable; // private JComboBox jdListTxt; // private JComboBox jdListVal; private JTextField jdListTableTxt; private JTextField jdListTxtTxt; private JTextField jdListValTxt; private JPanel panel; private JPanel dynamicPanel; private JPanel sourthPanel; //private String disPlayType = ""; private Map jdTypeComBoxListMap; private JButton delbutton; //private PortalVI pvi; private PRMItem prmItem; //private PRM prm; private String prmText = ""; private JPanel dynamicMainPal; private JPanel dynamicSourthPal; private JLabel label_1; private JScrollPane scrollPane_1; private JTextArea jdStyleTxt; private JList jdValuelist; private DefaultListModel jdValuelistModel; // private int itemListIndex; //private Object selectNodeObject; private JLabel label_2; private JTextArea jdaddfilter; private JCheckBox jdiseditable; private JCheckBox jdisrequired; private JLabel label_3; private JTextField jdctrldisplycond; private JLabel label_4; private JTextField jdctrldisplycol; private JLabel label_5; private JTextField jdcustomclass; private JLabel lblCombobox; private JTextField jdqueryrefields; private JCheckBox jdishttpsave; private JLabel label_6; private JTextField jdhttpvolumnpath; private JLabel label_7; private JTextField jdhttppathfield; private JScrollPane jsouth; private JScrollPane jdy; private JLabel lblShowExpression = null; private JTextField txtShowExpression = null; private JLabel lblDateFormat = null; private JTextField txtDateFormat = null; /** * 保存组件和属性的关系 */ //private Map comPRMItemMap = new HashMap(); /** * (注:后加的参数)保存附加属性 */ private HashMap refParamsMap = new HashMap(); /** * 存储lab与其后面关联的组件关系 */ //private Map configMap = new HashMap(); /** * 存储属性对应的控件 */ //private Map> attrNameAndCompMap = new HashMap>(); /** * 存储属性名称和属性对象 */ private AttribItem attribItem; /** * 存储组件 */ private ArrayList groupList = new ArrayList(); private FormDesignDialog formDesignDialog; private JLabel label_8; private JScrollPane scrollPane_2; private JTextArea JD_EditableProgramTxt; private JLabel label_9; private JTextField jd_rightTxt; private JButton rightBtn; public String getPrmText() { return prmText; } public void setPrmText(String prmText) { this.prmText = prmText; } /** * Create the dialog. */ public WidgetPanel(PRMItem prmItem, AttribItem attribItem, ArrayList groupList, FormDesignDialog formDesignDialog) { //this.pvi = pvi; this.prmItem = prmItem; //this.selectNodeObject = object; this.attribItem = attribItem; //this.comPRMItemMap = comPRMItemMap; //this.attrNameAndCompMap = attrNameAndCompMap; this.groupList = groupList; this.formDesignDialog = formDesignDialog; setBounds(100, 100, 679, 735); init(); initJdTypeComBoxList(); actionListener(); initData(); initDisControl(); } private void init() { setLayout(new BorderLayout()); { panel = new JPanel(); add(panel, BorderLayout.CENTER); JPanel buttonPane = new JPanel(); buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); add(buttonPane, BorderLayout.SOUTH); { okButton = new JButton("应用"); okButton.setPreferredSize(new Dimension(60, 23)); buttonPane.add(okButton); } panel.setLayout(new BorderLayout(0, 0)); JScrollPane conJsp = new JScrollPane(); conJsp.setViewportView(contentPanel); // panel.add(contentPanel, BorderLayout.NORTH); panel.add(conJsp, BorderLayout.NORTH); contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); GridBagLayout gbl_contentPanel = new GridBagLayout(); // gbl_contentPanel.columnWidths = new int[] { 80, 0, 0, 0, 0 }; // gbl_contentPanel.rowHeights = new int[] { 0, 0, 0, 0, 50, 52, 0, 0, // 0 }; // gbl_contentPanel.columnWeights = new double[] { 0.0, 1.0, 1.0, 1.0, // Double.MIN_VALUE }; // gbl_contentPanel.rowWeights = new double[] { 1.0, 0.0, 1.0, 0.0, // 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; contentPanel.setLayout(gbl_contentPanel); { JLabel jdField = new JLabel("使用字段"); jdField.setToolTipText("页面显示的属性"); GridBagConstraints gbc_lblNewLabel = new GridBagConstraints(); gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel.anchor = GridBagConstraints.EAST; gbc_lblNewLabel.gridx = 0; gbc_lblNewLabel.gridy = 0; contentPanel.add(jdField, gbc_lblNewLabel); } { jdFieldTxt = new JTextField() { @Override public void setText(String t) { super.setText(t); /** * 当为参照属性时,为附加属性对应的输入框添加tooltip * * @author Zylon at 2015-7-6 下午3:57:41 */ if (isRefAttr(t.trim())) { jdStyleTxt.setToolTipText( "附加定义包括\"context\"、\"dataregion\"、\"datafield\"" + "\r\n context为参照对象选择弹出窗口上下文;" + "\r\n dataregion为参照返回数据所在界面区域(导航区=1,控制区=2,操作区=3),省略此参数时默认为2-->3-->1顺序获取" + "\r\n datafield为所选参照对象属性,省略此参数时默认值为\"oid\"(该属性如果不是oid,那么必须为参照类型属性)" + "\r\n 示例:context=selectproducts;dataregion=2;datafield=ownproduct"); } } }; jdFieldTxt.setFont(new Font("宋体", Font.BOLD, 13)); jdFieldTxt.setEnabled(true); jdFieldTxt.setEditable(false); GridBagConstraints gbc_textField = new GridBagConstraints(); gbc_textField.insets = new Insets(0, 0, 1, 5); gbc_textField.fill = GridBagConstraints.HORIZONTAL; gbc_textField.gridx = 1; gbc_textField.gridy = 0; contentPanel.add(jdFieldTxt, gbc_textField); jdFieldTxt.setColumns(10); } { jdiseditable = new JCheckBox("只读"); jdiseditable.setToolTipText("设置是否可以编辑,选中则属性不可以编辑,不选则属性可以编辑"); GridBagConstraints gbc_checkBox = new GridBagConstraints(); gbc_checkBox.insets = new Insets(0, 0, 1, 5); gbc_checkBox.gridx = 2; gbc_checkBox.gridy = 0; contentPanel.add(jdiseditable, gbc_checkBox); } { jdisrequired = new JCheckBox("必填"); jdisrequired.setToolTipText("该属性字段是否是必填项"); GridBagConstraints gbc_checkBox_1 = new GridBagConstraints(); gbc_checkBox_1.anchor = GridBagConstraints.WEST; gbc_checkBox_1.insets = new Insets(0, 0, 1, 0); gbc_checkBox_1.gridx = 3; gbc_checkBox_1.gridy = 0; contentPanel.add(jdisrequired, gbc_checkBox_1); } { JLabel jdName = new JLabel("显示名称"); jdName.setToolTipText("页面属性显示的名称"); GridBagConstraints gbc_lblNewLabel = new GridBagConstraints(); gbc_lblNewLabel.anchor = GridBagConstraints.EAST; gbc_lblNewLabel.insets = new Insets(0, 0, 1, 5); gbc_lblNewLabel.gridx = 0; gbc_lblNewLabel.gridy = 1; contentPanel.add(jdName, gbc_lblNewLabel); } { jdNameTxt = new JTextField(); GridBagConstraints gbc_textField_1 = new GridBagConstraints(); gbc_textField_1.insets = new Insets(0, 0, 1, 5); gbc_textField_1.fill = GridBagConstraints.HORIZONTAL; gbc_textField_1.gridx = 1; gbc_textField_1.gridy = 1; contentPanel.add(jdNameTxt, gbc_textField_1); jdNameTxt.setColumns(10); } { JLabel jdType = new JLabel("显示类型"); jdType.setToolTipText("属性显示的控件类型"); GridBagConstraints gbc_lblNewLabel = new GridBagConstraints(); gbc_lblNewLabel.insets = new Insets(0, 0, 1, 5); gbc_lblNewLabel.gridx = 2; gbc_lblNewLabel.gridy = 1; contentPanel.add(jdType, gbc_lblNewLabel); } { jdTypeComBox = new JComboBox(); GridBagConstraints gbc_comboBox = new GridBagConstraints(); gbc_comboBox.insets = new Insets(0, 0, 1, 5); gbc_comboBox.fill = GridBagConstraints.HORIZONTAL; gbc_comboBox.gridx = 3; gbc_comboBox.gridy = 1; contentPanel.add(jdTypeComBox, gbc_comboBox); } { JLabel jdVlue = new JLabel("默认值表达式"); jdVlue.setToolTipText("属性的默认值"); GridBagConstraints gbc_lblNewLabel = new GridBagConstraints(); gbc_lblNewLabel.anchor = GridBagConstraints.EAST; gbc_lblNewLabel.insets = new Insets(0, 0, 1, 5); gbc_lblNewLabel.gridx = 0; gbc_lblNewLabel.gridy = 2; contentPanel.add(jdVlue, gbc_lblNewLabel); } { jdVlueTxt = new JTextField(); GridBagConstraints gbc_textField_2 = new GridBagConstraints(); gbc_textField_2.gridwidth = 3; gbc_textField_2.insets = new Insets(0, 0, 1, 5); gbc_textField_2.fill = GridBagConstraints.HORIZONTAL; gbc_textField_2.gridx = 1; gbc_textField_2.gridy = 2; contentPanel.add(jdVlueTxt, gbc_textField_2); jdVlueTxt.setToolTipText( "默认值表达式支持\"源对象属性\"、\"内置系统变量\"、\"内置系统函数\"与\"自定义类\",格式如:\"${description}_#CURRENTUSER.NAME#_#CURRENTDATETIME#_!com.vci.ui.form.defaultvalue.InitRevVer!\""); jdVlueTxt.setColumns(10); jdVlueTxt.addFocusListener(new FocusListener() { @Override public void focusLost(FocusEvent e) { jdVlueTxt.setForeground(Color.black); String rtnContent = isDefaultExpress(jdVlueTxt.getText()); if (!rtnContent.equals("")) { VCIOptionPane.showError(WidgetPanel.this, "默认值表达式校验:" + rtnContent); jdVlueTxt.setForeground(Color.red); } } @Override public void focusGained(FocusEvent e) { } }); } { lblShowExpression = new JLabel("显示表达式"); GridBagConstraints gbc_lblNewLabel = new GridBagConstraints(); gbc_lblNewLabel.anchor = GridBagConstraints.EAST; gbc_lblNewLabel.insets = new Insets(0, 0, 1, 5); gbc_lblNewLabel.gridx = 0; gbc_lblNewLabel.gridy = 3; contentPanel.add(lblShowExpression, gbc_lblNewLabel); } { txtShowExpression = new JTextField(); GridBagConstraints gbc_textField_2 = new GridBagConstraints(); gbc_textField_2.gridwidth = 3; gbc_textField_2.insets = new Insets(0, 0, 1, 5); gbc_textField_2.fill = GridBagConstraints.HORIZONTAL; gbc_textField_2.gridx = 1; gbc_textField_2.gridy = 3; contentPanel.add(txtShowExpression, gbc_textField_2); } { lblDateFormat = new JLabel("日期格式化字符串"); GridBagConstraints gbc_lblNewLabel = new GridBagConstraints(); gbc_lblNewLabel.anchor = GridBagConstraints.EAST; gbc_lblNewLabel.insets = new Insets(0, 0, 1, 5); gbc_lblNewLabel.gridx = 0; gbc_lblNewLabel.gridy = 4; contentPanel.add(lblDateFormat, gbc_lblNewLabel); } { txtDateFormat = new JTextField(); GridBagConstraints gbc_textField_2 = new GridBagConstraints(); gbc_textField_2.gridwidth = 3; gbc_textField_2.insets = new Insets(0, 0, 1, 5); gbc_textField_2.fill = GridBagConstraints.HORIZONTAL; gbc_textField_2.gridx = 1; gbc_textField_2.gridy = 4; contentPanel.add(txtDateFormat, gbc_textField_2); } { JLabel jdCols = new JLabel("占位方式"); jdCols.setToolTipText("属性在页面中是否显示"); GridBagConstraints gbc_lblNewLabel = new GridBagConstraints(); gbc_lblNewLabel.anchor = GridBagConstraints.EAST; gbc_lblNewLabel.insets = new Insets(0, 0, 1, 5); gbc_lblNewLabel.gridx = 0; gbc_lblNewLabel.gridy = 5; contentPanel.add(jdCols, gbc_lblNewLabel); } { bg = new ButtonGroup(); fullDisRadio = new JRadioButton("显示"); fullDisRadio.setSelected(true); noDisRadio = new JRadioButton("不显示"); bg.add(fullDisRadio); bg.add(noDisRadio); GridBagConstraints gbc_panel_1 = new GridBagConstraints(); gbc_panel_1.insets = new Insets(0, 0, 1, 5); gbc_panel_1.fill = GridBagConstraints.NONE; gbc_panel_1.gridx = 1; gbc_panel_1.gridy = 5; contentPanel.add(fullDisRadio, gbc_panel_1); gbc_panel_1 = new GridBagConstraints(); gbc_panel_1.insets = new Insets(0, 0, 1, 5); gbc_panel_1.fill = GridBagConstraints.NONE; gbc_panel_1.gridx = 2; gbc_panel_1.gridy = 5; contentPanel.add(noDisRadio, gbc_panel_1); } { label_2 = new JLabel("字段表达式"); label_2.setToolTipText("填入属性的控制条件(字符串形式)"); GridBagConstraints gbc_label_2 = new GridBagConstraints(); gbc_label_2.anchor = GridBagConstraints.EAST; gbc_label_2.insets = new Insets(0, 0, 1, 5); gbc_label_2.gridx = 0; gbc_label_2.gridy = 6; contentPanel.add(label_2, gbc_label_2); } { JScrollPane scrollPane = new JScrollPane(); jdaddfilter = new JTextArea("", 3, 2); scrollPane.setViewportView(jdaddfilter); GridBagConstraints gbc_textField = new GridBagConstraints(); gbc_textField.insets = new Insets(0, 0, 1, 0); gbc_textField.gridwidth = 3; gbc_textField.fill = GridBagConstraints.BOTH; gbc_textField.gridx = 1; gbc_textField.gridy = 6; contentPanel.add(scrollPane, gbc_textField); } { label_8 = new JLabel("只读选择条件"); label_8.setToolTipText("属性是否是可编辑状态的控制"); GridBagConstraints gbc_label_8 = new GridBagConstraints(); gbc_label_8.anchor = GridBagConstraints.EAST; gbc_label_8.insets = new Insets(0, 0, 1, 5); gbc_label_8.gridx = 0; gbc_label_8.gridy = 7; contentPanel.add(label_8, gbc_label_8); } { scrollPane_2 = new JScrollPane(); GridBagConstraints gbc_scrollPane_2 = new GridBagConstraints(); gbc_scrollPane_2.gridwidth = 3; gbc_scrollPane_2.insets = new Insets(0, 0, 1, 0); gbc_scrollPane_2.fill = GridBagConstraints.BOTH; gbc_scrollPane_2.gridx = 1; gbc_scrollPane_2.gridy = 7; contentPanel.add(scrollPane_2, gbc_scrollPane_2); { JD_EditableProgramTxt = new JTextArea("", 3, 2); JD_EditableProgramTxt.setColumns(10); scrollPane_2.setViewportView(JD_EditableProgramTxt); } } { label_4 = new JLabel("控制列"); label_4.setToolTipText("通过该属性控制要显示的列"); GridBagConstraints gbc_label_4 = new GridBagConstraints(); gbc_label_4.anchor = GridBagConstraints.EAST; gbc_label_4.insets = new Insets(0, 0, 1, 5); gbc_label_4.gridx = 0; gbc_label_4.gridy = 8; contentPanel.add(label_4, gbc_label_4); } { jdctrldisplycol = new JTextField(); GridBagConstraints gbc_textField_1 = new GridBagConstraints(); gbc_textField_1.insets = new Insets(0, 0, 1, 5); gbc_textField_1.fill = GridBagConstraints.HORIZONTAL; gbc_textField_1.gridx = 1; gbc_textField_1.gridy = 8; contentPanel.add(jdctrldisplycol, gbc_textField_1); jdctrldisplycol.setColumns(10); } { label_3 = new JLabel("显示列条件"); label_3.setToolTipText("属性控制显示列条件"); GridBagConstraints gbc_label_3 = new GridBagConstraints(); gbc_label_3.insets = new Insets(0, 0, 1, 5); gbc_label_3.gridx = 2; gbc_label_3.gridy = 8; contentPanel.add(label_3, gbc_label_3); } { jdctrldisplycond = new JTextField(); GridBagConstraints gbc_textField = new GridBagConstraints(); gbc_textField.insets = new Insets(0, 0, 1, 0); gbc_textField.fill = GridBagConstraints.HORIZONTAL; gbc_textField.gridx = 3; gbc_textField.gridy = 8; contentPanel.add(jdctrldisplycond, gbc_textField); jdctrldisplycond.setColumns(10); } { label_9 = new JLabel("权限控制"); label_9.setToolTipText( "设置属性权限,输入规则是user=user&&(或者||)role=role&&(或||)depart=depart,多个的用户,或者角色,或者部门,之间用逗号分隔"); GridBagConstraints gbc_label_9 = new GridBagConstraints(); gbc_label_9.anchor = GridBagConstraints.EAST; gbc_label_9.insets = new Insets(0, 0, 1, 5); gbc_label_9.gridx = 0; gbc_label_9.gridy = 9; contentPanel.add(label_9, gbc_label_9); } { jd_rightTxt = new JTextField(); GridBagConstraints gbc_jd_rightTxt = new GridBagConstraints(); gbc_jd_rightTxt.gridwidth = 2; gbc_jd_rightTxt.insets = new Insets(0, 0, 1, 5); gbc_jd_rightTxt.fill = GridBagConstraints.HORIZONTAL; gbc_jd_rightTxt.gridx = 1; gbc_jd_rightTxt.gridy = 9; contentPanel.add(jd_rightTxt, gbc_jd_rightTxt); jd_rightTxt.setColumns(10); } { rightBtn = new JButton("选择"); rightBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent paramActionEvent) { RightUserDialog dialog = new RightUserDialog(); dialog.setVisible(true); List resultList = dialog.getResultList(); List user = new ArrayList(); List role = new ArrayList(); List dept = new ArrayList(); if (dialog.isSaveFlag()) { for (String value : resultList) { String substring = value.substring(value.lastIndexOf("=") + 1); if (value.contains("user=")) { if (!user.contains(substring)) { user.add(substring); } } if (value.contains("role=")) { if (!role.contains(substring)) { role.add(substring); } } if (value.contains("department=")) { if (!dept.contains(substring)) { dept.add(substring); } } } Pattern p = Pattern.compile("\\b([\\w\\W])\\b"); String res = "user=" + p.matcher(user.toString().substring(1, user.toString().length() - 1)) .replaceAll("$1") + "&&role=" + p.matcher(role.toString().substring(1, role.toString().length() - 1)) .replaceAll("$1") + "&&department=" + p.matcher(dept.toString().substring(1, dept.toString().length() - 1)) .replaceAll("$1"); jd_rightTxt.setText(res); } } }); GridBagConstraints gbc_rightBtn = new GridBagConstraints(); gbc_rightBtn.anchor = GridBagConstraints.WEST; gbc_rightBtn.gridx = 3; gbc_rightBtn.gridy = 9; contentPanel.add(rightBtn, gbc_rightBtn); } { JLabel lblFill = new JLabel(""); GridBagConstraints gbc_label_9 = new GridBagConstraints(); gbc_label_9.insets = new Insets(0, 0, 0, 5); gbc_label_9.gridx = 1; gbc_label_9.gridy = 10; gbc_label_9.gridwidth = 4; gbc_label_9.weightx = 10.0; gbc_label_9.weighty = 10.0; gbc_label_9.fill = GridBagConstraints.BOTH; contentPanel.add(lblFill, gbc_label_9); } { jsouth = new JScrollPane(); sourthPanel = new JPanel(); jsouth.setViewportView(sourthPanel); panel.add(jsouth, BorderLayout.CENTER); GridBagLayout gbl_panel_1 = new GridBagLayout(); gbl_panel_1.columnWidths = new int[] { 76, 0, 0, 0, 0, 0 }; gbl_panel_1.rowHeights = new int[] { 57, 57, 0, 0, 0, 0 }; gbl_panel_1.columnWeights = new double[] { 0.0, 1.0, 1.0, 1.0, 1.0, Double.MIN_VALUE }; gbl_panel_1.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; sourthPanel.setLayout(gbl_panel_1); { JLabel jdScript = new JLabel("脚本验证"); jdScript.setToolTipText("脚本验证"); GridBagConstraints gbc_lblNewLabel_5 = new GridBagConstraints(); gbc_lblNewLabel_5.fill = GridBagConstraints.VERTICAL; gbc_lblNewLabel_5.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel_5.gridx = 0; gbc_lblNewLabel_5.gridy = 0; sourthPanel.add(jdScript, gbc_lblNewLabel_5); } { JScrollPane scrollPane = new JScrollPane(); GridBagConstraints gbc_scrollPane = new GridBagConstraints(); gbc_scrollPane.gridwidth = 4; gbc_scrollPane.insets = new Insets(0, 0, 5, 0); gbc_scrollPane.fill = GridBagConstraints.BOTH; gbc_scrollPane.gridx = 1; gbc_scrollPane.gridy = 0; sourthPanel.add(scrollPane, gbc_scrollPane); { jdScriptTxt = new JTextArea("", 3, 2); scrollPane.setViewportView(jdScriptTxt); } } { JLabel jdTips = new JLabel("提示文字"); jdTips.setToolTipText("属性提示"); GridBagConstraints gbc_lblF = new GridBagConstraints(); gbc_lblF.insets = new Insets(0, 0, 5, 5); gbc_lblF.gridx = 0; gbc_lblF.gridy = 1; sourthPanel.add(jdTips, gbc_lblF); } { JScrollPane scrollPane = new JScrollPane(); GridBagConstraints gbc_scrollPane = new GridBagConstraints(); gbc_scrollPane.insets = new Insets(0, 0, 5, 0); gbc_scrollPane.gridwidth = 4; gbc_scrollPane.fill = GridBagConstraints.BOTH; gbc_scrollPane.gridx = 1; gbc_scrollPane.gridy = 1; sourthPanel.add(scrollPane, gbc_scrollPane); { jdTipsTxt = new JTextArea("", 3, 2); scrollPane.setViewportView(jdTipsTxt); } } { lblCombobox = new JLabel("查询关联列"); lblCombobox.setToolTipText("填写sql语句,语句中查询出来的字段值,就是该属性显示的值"); GridBagConstraints gbc_lblCombobox = new GridBagConstraints(); gbc_lblCombobox.insets = new Insets(0, 0, 5, 5); gbc_lblCombobox.gridx = 0; gbc_lblCombobox.gridy = 2; sourthPanel.add(lblCombobox, gbc_lblCombobox); } { jdqueryrefields = new JTextField(); GridBagConstraints gbc_textField_1 = new GridBagConstraints(); gbc_textField_1.gridwidth = 4; gbc_textField_1.insets = new Insets(0, 0, 5, 0); gbc_textField_1.fill = GridBagConstraints.HORIZONTAL; gbc_textField_1.gridx = 1; gbc_textField_1.gridy = 2; sourthPanel.add(jdqueryrefields, gbc_textField_1); jdqueryrefields.setColumns(10); } { label_5 = new JLabel("自定义类"); label_5.setToolTipText("填写自定义的类名,用来自定义该属性"); GridBagConstraints gbc_label_5 = new GridBagConstraints(); gbc_label_5.insets = new Insets(0, 0, 5, 5); gbc_label_5.gridx = 0; gbc_label_5.gridy = 3; sourthPanel.add(label_5, gbc_label_5); } { jdcustomclass = new JTextField(); GridBagConstraints gbc_textField = new GridBagConstraints(); gbc_textField.insets = new Insets(0, 0, 5, 0); gbc_textField.gridwidth = 4; gbc_textField.fill = GridBagConstraints.HORIZONTAL; gbc_textField.gridx = 1; gbc_textField.gridy = 3; sourthPanel.add(jdcustomclass, gbc_textField); jdcustomclass.setColumns(10); } { jdishttpsave = new JCheckBox("http存储"); jdishttpsave.setToolTipText("控制http存储功能的开关"); GridBagConstraints gbc_chckbxHttp = new GridBagConstraints(); gbc_chckbxHttp.insets = new Insets(0, 0, 0, 5); gbc_chckbxHttp.gridx = 0; gbc_chckbxHttp.gridy = 4; sourthPanel.add(jdishttpsave, gbc_chckbxHttp); } { label_6 = new JLabel("存储路径"); label_6.setToolTipText("url的路径"); GridBagConstraints gbc_label_6 = new GridBagConstraints(); gbc_label_6.insets = new Insets(0, 0, 0, 5); gbc_label_6.gridx = 1; gbc_label_6.gridy = 4; sourthPanel.add(label_6, gbc_label_6); } { jdhttpvolumnpath = new JTextField(); GridBagConstraints gbc_textField = new GridBagConstraints(); gbc_textField.insets = new Insets(0, 0, 0, 5); gbc_textField.fill = GridBagConstraints.HORIZONTAL; gbc_textField.gridx = 2; gbc_textField.gridy = 4; sourthPanel.add(jdhttpvolumnpath, gbc_textField); jdhttpvolumnpath.setColumns(10); } { label_7 = new JLabel("存储路径字段"); label_7.setToolTipText("存储路径的字段"); GridBagConstraints gbc_label_7 = new GridBagConstraints(); gbc_label_7.insets = new Insets(0, 0, 0, 5); gbc_label_7.gridx = 3; gbc_label_7.gridy = 4; sourthPanel.add(label_7, gbc_label_7); } { jdhttppathfield = new JTextField(); GridBagConstraints gbc_textField = new GridBagConstraints(); gbc_textField.fill = GridBagConstraints.HORIZONTAL; gbc_textField.gridx = 4; gbc_textField.gridy = 4; sourthPanel.add(jdhttppathfield, gbc_textField); jdhttppathfield.setColumns(10); } } { dynamicMainPal = new JPanel(); dynamicMainPal.setPreferredSize(new Dimension(10, 300)); panel.add(dynamicMainPal, BorderLayout.SOUTH); dynamicMainPal.setLayout(new BorderLayout(0, 0)); { jdy = new JScrollPane(); dynamicPanel = new JPanel(); jdy.setViewportView(dynamicPanel); dynamicMainPal.add(jdy, BorderLayout.CENTER); GridBagLayout gbl_dynamicPanel = new GridBagLayout(); gbl_dynamicPanel.columnWidths = new int[] { 64, 0, 68, 37, 76, 0, 0, 0, 0, 0, 0, 0 }; gbl_dynamicPanel.rowHeights = new int[] { 0, 0, 34, 34, 0, 0, 0, 0, 0 }; gbl_dynamicPanel.columnWeights = new double[] { 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, Double.MIN_VALUE }; gbl_dynamicPanel.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; dynamicPanel.setLayout(gbl_dynamicPanel); { JLabel label = new JLabel("选项列表"); GridBagConstraints gbc_label = new GridBagConstraints(); gbc_label.insets = new Insets(0, 0, 5, 5); gbc_label.gridx = 0; gbc_label.gridy = 0; dynamicPanel.add(label, gbc_label); } { JLabel label = new JLabel("名称"); label.setToolTipText("选择下拉列表的时候,填写的显示字段"); GridBagConstraints gbc_label = new GridBagConstraints(); gbc_label.insets = new Insets(0, 0, 5, 5); gbc_label.gridx = 0; gbc_label.gridy = 1; dynamicPanel.add(label, gbc_label); } { jdValueListName = new JTextField(); GridBagConstraints gbc_textField = new GridBagConstraints(); gbc_textField.gridwidth = 2; gbc_textField.insets = new Insets(0, 0, 5, 5); gbc_textField.fill = GridBagConstraints.HORIZONTAL; gbc_textField.gridx = 1; gbc_textField.gridy = 1; dynamicPanel.add(jdValueListName, gbc_textField); jdValueListName.setColumns(10); } { JLabel label = new JLabel("值"); label.setToolTipText("选择下拉列表的时候,填写的显示的值"); GridBagConstraints gbc_label = new GridBagConstraints(); gbc_label.insets = new Insets(0, 0, 5, 5); gbc_label.gridx = 3; gbc_label.gridy = 1; dynamicPanel.add(label, gbc_label); } { jdValueListVal = new JTextField(); GridBagConstraints gbc_textField_1 = new GridBagConstraints(); gbc_textField_1.insets = new Insets(0, 0, 5, 5); gbc_textField_1.fill = GridBagConstraints.HORIZONTAL; gbc_textField_1.gridx = 4; gbc_textField_1.gridy = 1; dynamicPanel.add(jdValueListVal, gbc_textField_1); jdValueListVal.setColumns(10); } JScrollPane scrollPane = new JScrollPane(); scrollPane.setPreferredSize(new Dimension(2, 14)); GridBagConstraints gbc_scrollPane = new GridBagConstraints(); gbc_scrollPane.gridheight = 2; gbc_scrollPane.gridwidth = 5; gbc_scrollPane.insets = new Insets(0, 0, 5, 5); gbc_scrollPane.fill = GridBagConstraints.BOTH; gbc_scrollPane.gridx = 0; gbc_scrollPane.gridy = 2; dynamicPanel.add(scrollPane, gbc_scrollPane); jdValuelistModel = new DefaultListModel(); jdValuelist = new JList(jdValuelistModel); scrollPane.setViewportView(jdValuelist); { addJdvalueListBtn = new JButton("添加"); GridBagConstraints gbc_button = new GridBagConstraints(); gbc_button.insets = new Insets(0, 0, 5, 5); gbc_button.gridx = 1; gbc_button.gridy = 4; dynamicPanel.add(addJdvalueListBtn, gbc_button); } { delbutton = new JButton("删除"); GridBagConstraints gbc_button = new GridBagConstraints(); gbc_button.insets = new Insets(0, 0, 5, 5); gbc_button.gridx = 2; gbc_button.gridy = 4; dynamicPanel.add(delbutton, gbc_button); } { JLabel label = new JLabel("一级参照"); label.setToolTipText("填写参照的业务对象名称"); GridBagConstraints gbc_label = new GridBagConstraints(); gbc_label.insets = new Insets(0, 0, 5, 5); gbc_label.gridx = 0; gbc_label.gridy = 5; dynamicPanel.add(label, gbc_label); } { // jdListTable = new JComboBox(); jdListTableTxt = new JTextField(); GridBagConstraints gbc_comboBox = new GridBagConstraints(); gbc_comboBox.gridwidth = 4; gbc_comboBox.insets = new Insets(0, 0, 5, 5); gbc_comboBox.fill = GridBagConstraints.HORIZONTAL; gbc_comboBox.gridx = 1; gbc_comboBox.gridy = 5; // dynamicPanel.add(jdListTable, gbc_comboBox); dynamicPanel.add(jdListTableTxt, gbc_comboBox); } { JLabel label = new JLabel("二级参照"); label.setToolTipText("填写参照的业务对象名称"); GridBagConstraints gbc_label = new GridBagConstraints(); gbc_label.insets = new Insets(0, 0, 5, 5); gbc_label.gridx = 0; gbc_label.gridy = 6; dynamicPanel.add(label, gbc_label); } { // jdListTxt = new JComboBox(); jdListTxtTxt = new JTextField(); GridBagConstraints gbc_comboBox = new GridBagConstraints(); gbc_comboBox.gridwidth = 4; gbc_comboBox.insets = new Insets(0, 0, 5, 5); gbc_comboBox.fill = GridBagConstraints.HORIZONTAL; gbc_comboBox.gridx = 1; gbc_comboBox.gridy = 6; // dynamicPanel.add(jdListTxt, gbc_comboBox); dynamicPanel.add(jdListTxtTxt, gbc_comboBox); } { JLabel label = new JLabel("参照值"); label.setToolTipText("填写参照的业务对象的属性"); GridBagConstraints gbc_label = new GridBagConstraints(); gbc_label.insets = new Insets(0, 0, 0, 5); gbc_label.gridx = 0; gbc_label.gridy = 7; dynamicPanel.add(label, gbc_label); } { // jdListVal = new JComboBox(); jdListValTxt = new JTextField(); GridBagConstraints gbc_comboBox = new GridBagConstraints(); gbc_comboBox.insets = new Insets(0, 0, 0, 5); gbc_comboBox.gridwidth = 4; gbc_comboBox.fill = GridBagConstraints.HORIZONTAL; gbc_comboBox.gridx = 1; gbc_comboBox.gridy = 7; // dynamicPanel.add(jdListVal, gbc_comboBox); dynamicPanel.add(jdListValTxt, gbc_comboBox); } } { dynamicSourthPal = new JPanel(); dynamicSourthPal.setPreferredSize(new Dimension(10, 90)); dynamicMainPal.add(dynamicSourthPal, BorderLayout.SOUTH); dynamicSourthPal.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5)); { label_1 = new JLabel("附加属性"); label_1.setToolTipText("附加属性"); // label_1.setPreferredSize(new Dimension(70, 15)); label_1.setAlignmentX(Component.CENTER_ALIGNMENT); dynamicSourthPal.add(label_1); } { scrollPane_1 = new JScrollPane(); scrollPane_1.setPreferredSize(new Dimension(330, 60)); dynamicSourthPal.add(scrollPane_1); { jdStyleTxt = new JTextArea("", 3, 2); scrollPane_1.setViewportView(jdStyleTxt); } } } } } } private void actionListener() { jdishttpsave.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { initDisControl(); } }); addJdvalueListBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { String result = jdValueListName.getText().trim() + "{" + jdValueListVal.getText().trim() + "}"; jdValuelistModel.addElement(result); // @2015-06-16 by liupf String fieldStr = jdFieldTxt.getText().trim();// 字段域 // String mcValue=jdValueListName.getText().trim(); String zhiValue = jdValueListVal.getText().trim(); String selectedItem = jdTypeComBox.getSelectedItem() + "";// 类型域 if (selectedItem.equals("单选按钮") || selectedItem.equals("下拉菜单")) { AttribItem attribItem = ApProvider.getInstance().getAbItemByName(fieldStr); String attrOther = attribItem.other; // 判断字段是否为枚举类型 if (attrOther.indexOf("enumName") > 0) { String enumName = attrOther.substring(attrOther.indexOf("enumName") + 11); EnumItem enumItem = EnumProvider.getInstance().getEnumByName(enumName); EnumChild[] eChilds = enumItem.children; List enumList = new ArrayList(); for (EnumChild enumChild : eChilds) { String enumChildValue = enumChild.value; enumList.add(enumChildValue); } // 判断输入的值是否属于属性池中枚举值 if (!enumList.contains(zhiValue)) { jdValuelistModel.removeElement(result); JOptionPane.showMessageDialog(null, "该字段为枚举类型,所填枚举值" + zhiValue + "不正确,请重新添写!", "提示", JOptionPane.ERROR_MESSAGE); return; } } } } }); delbutton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { String selectedValue = (String) jdValuelist.getSelectedValue(); jdValuelistModel.removeElement(selectedValue); } }); jdTypeComBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent arg0) { jdValuelistModel.removeAllElements(); jdValueListName.setText(""); jdValueListVal.setText(""); jdStyleTxt.setText(""); jdListTableTxt.setText(""); jdListTxtTxt.setText(""); jdListValTxt.setText(""); String value = getTypeCobValue(); dynamicMainPal.remove(jdy); dynamicMainPal.remove(dynamicSourthPal); panel.remove(jsouth); if (value.equals("radio") || value.equals("checkbox")) { panel.add(dynamicMainPal, BorderLayout.SOUTH); dynamicMainPal.add(jdy, BorderLayout.CENTER); panel.add(jsouth, BorderLayout.CENTER); } else if (value.equals("select")) { panel.add(dynamicMainPal, BorderLayout.SOUTH); dynamicMainPal.add(jdy, BorderLayout.CENTER); dynamicMainPal.add(dynamicSourthPal, BorderLayout.SOUTH); panel.add(jsouth, BorderLayout.CENTER); } else if (value.equals("webeditor") || value.equals("hidden")) { panel.remove(dynamicMainPal); panel.add(jsouth, BorderLayout.CENTER); } else { panel.add(dynamicMainPal, BorderLayout.SOUTH); dynamicMainPal.add(dynamicSourthPal, BorderLayout.CENTER); panel.add(jsouth, BorderLayout.CENTER); } panel.updateUI(); if (prmItem == null) return; ControlType ctrlType = ControlType.Parse(value); if (ctrlType == null) return; String sField = prmItem.getItemField(); for (int g = 0; g < groupList.size(); g++) { CompnentGroup group = groupList.get(g); if (sField.equals(group.getField())) { Component compnent = null; CompnentUtil.CreateCompent(group, ctrlType); //configMap.put(group.getjLabel(), group.getjCompnent()); // // 下拉框类型 // if (vtDataType.equals("VTInteger") || vtDataType.equals("VTString") // || vtDataType.equals("VTDouble")) { // JTextField textField = new JTextField(); // textField.setEditable(false); // textField.setPreferredSize(new Dimension(90, 25)); // configMap.put(enter1.getKey(), textField); // group.setjCompnent(textField); // } // // textarea类型 // else if (vtDataType.equals("VTNote")) { // JTextArea textArea = new JTextArea("", 3, 2); // JScrollPane jsp = new JScrollPane(); // jsp.setViewportView(textArea); // configMap.put(enter1.getKey(), textArea); // group.setjCompnent(textArea); // } // // 日起类型 // else if (vtDataType.equals("VTDate") || vtDataType.equals("VTTime") // || vtDataType.equals("VTDateTime")) { // VCIJCalendarPanel calendarPanel = new VCIJCalendarPanel(); // configMap.put(enter1.getKey(), calendarPanel); // group.setjCompnent(calendarPanel); // } // // 参照类型 // else if (vtDataType.equals("canzhao")) { // CanzhaoJPanel cz = new CanzhaoJPanel(); // configMap.put(enter1.getKey(), cz); // group.setjCompnent(cz); // } // // boolean类型 // else if (vtDataType.equals("VTBoolean")) { // VCIJComboBox comboBox = new VCIJComboBox(); // configMap.put(enter1.getKey(), comboBox); // group.setjCompnent(comboBox); // } // // 文件选择组件 // else if (vtDataType.equals("VTFilePath")) { // FileChooserJPanel fileChooserJPanel = new FileChooserJPanel(); // configMap.put(enter1.getKey(), fileChooserJPanel); // group.setjCompnent(fileChooserJPanel); // } groupList.set(g, group); break; } } // for (Map.Entry> enter : attrNameAndCompMap.entrySet()) { // Map componetMap = enter.getValue(); // for (Map.Entry enter1 : componetMap.entrySet()) { // JLabel label = (JLabel) enter1.getKey(); // if (label != null && label.getText().equals(jdFieldTxt.getText())) { // Map> typeMap = TypeConstant.getTypeMap(); // String vtDataType = ""; // for (Map.Entry> entry : typeMap.entrySet()) { // List typeValue = entry.getValue(); // for (int i = 0; i < typeValue.size(); i++) { // if (value.equals(typeValue.get(i))) { // vtDataType = entry.getKey(); // } // } // } // for (int g = 0; g < groupList.size(); g++) { // CompnentGroup group = groupList.get(g); // if (label.equals(group.getjLabel())) { // // 下拉框类型 // if (vtDataType.equals("VTInteger") || vtDataType.equals("VTString") // || vtDataType.equals("VTDouble")) { // JTextField textField = new JTextField(); // textField.setEditable(false); // textField.setPreferredSize(new Dimension(90, 25)); // configMap.put(enter1.getKey(), textField); // group.setjCompnent(textField); // } // // textarea类型 // else if (vtDataType.equals("VTNote")) { // JTextArea textArea = new JTextArea("", 3, 2); // JScrollPane jsp = new JScrollPane(); // jsp.setViewportView(textArea); // configMap.put(enter1.getKey(), textArea); // group.setjCompnent(textArea); // } // // 日起类型 // else if (vtDataType.equals("VTDate") || vtDataType.equals("VTTime") // || vtDataType.equals("VTDateTime")) { // VCIJCalendarPanel calendarPanel = new VCIJCalendarPanel(); // configMap.put(enter1.getKey(), calendarPanel); // group.setjCompnent(calendarPanel); // } // // 参照类型 // else if (vtDataType.equals("canzhao")) { // CanzhaoJPanel cz = new CanzhaoJPanel(); // configMap.put(enter1.getKey(), cz); // group.setjCompnent(cz); // } // // boolean类型 // else if (vtDataType.equals("VTBoolean")) { // VCIJComboBox comboBox = new VCIJComboBox(); // configMap.put(enter1.getKey(), comboBox); // group.setjCompnent(comboBox); // } // // 文件选择组件 // else if (vtDataType.equals("VTFilePath")) { // FileChooserJPanel fileChooserJPanel = new FileChooserJPanel(); // configMap.put(enter1.getKey(), fileChooserJPanel); // group.setjCompnent(fileChooserJPanel); // } // groupList.set(g, group); // } // } // // } // } // } formDesignDialog.layoutComponent(); } }); okButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { String rtnContent = isDefaultExpress(jdVlueTxt.getText()); if (!rtnContent.equals("")) { VCIOptionPane.showError(WidgetPanel.this, "默认值表达式检验:" + rtnContent); return; } { String useField = jdFieldTxt.getText().trim(); /** * 检测是否为参照属性 * * @author Zylon at 2015-7-6 上午9:12:41 */ if (isRefAttr(useField)) { /** * 判断用户是否想要定义参照属性 * * @author Zylon at 2015-7-6 上午10:06:33 */ if (isWantDefinateRefAttr() && !jdiseditable.isSelected()) { /** * 判断参照属性是否有效定义 * * @author Zylon at 2015-7-6 上午10:06:33 */ if (!refIsOk()) { return; } } } } if (prmItem == null) { prmItem = new PRMItem(); } // prm = Tool.getPRM(pvi.prm); String nameText = jdNameTxt.getText(); if (nameText.isEmpty()) { VCIOptionPane.showMessage(LogonApplication.frame, "显示名称不能为空!"); return; } prmItem.setItemField(jdFieldTxt.getText().trim()); prmItem.setItemName(nameText.trim()); prmItem.setItemType(getTypeCobValue()); prmItem.setItemValue(jdVlueTxt.getText().trim()); prmItem.setItemShowExpression(txtShowExpression.getText().trim()); prmItem.setItemDateFormat(txtDateFormat.getText().trim()); if (fullDisRadio.isSelected()) { prmItem.setItemCols("1"); } else if (noDisRadio.isSelected()) { prmItem.setItemCols("0"); } List list = getValueList(); prmItem.setItemValueList(list); prmItem.setItemStyle(jdStyleTxt.getText().trim()); prmItem.setItemScript(jdScriptTxt.getText().trim()); prmItem.setItemTips(jdTipsTxt.getText().trim()); prmItem.setItemEditableProgram(JD_EditableProgramTxt.getText().trim()); if (jdiseditable.isSelected()) { prmItem.setItemIsEditable("1"); } else { prmItem.setItemIsEditable("0"); } if (jdisrequired.isSelected()) { prmItem.setItemIsRequired("1"); } else { prmItem.setItemIsRequired("0"); } prmItem.setItemCtrlDisplyCol(jdctrldisplycol.getText().trim()); prmItem.setItemCtrlDisplyCondition(jdctrldisplycond.getText().trim()); prmItem.setItemQueryRefFields(jdqueryrefields.getText().trim()); prmItem.setItemCustomClass(jdcustomclass.getText().trim()); prmItem.setItemListTable(jdListTableTxt.getText().trim()); prmItem.setItemListTxt(jdListTxtTxt.getText().trim()); prmItem.setItemListVal(jdListValTxt.getText().trim()); if (jdishttpsave.isSelected()) { prmItem.setItemIsHttpSave("1"); prmItem.setItemHttpVolumnPath(jdhttpvolumnpath.getText().trim()); prmItem.setItemHttpPathField(jdhttppathfield.getText().trim()); } else { prmItem.setItemIsHttpSave("0"); prmItem.setItemHttpVolumnPath(""); prmItem.setItemHttpPathField(""); } prmItem.setItemAddFilter(jdaddfilter.getText()); prmItem.setItemRight(jd_rightTxt.getText()); //comPRMItemMap.put(jdFieldTxt.getText(), prmItem); // 保存实质 VCIOptionPane.showMessage(LogonApplication.frame, "保存成功!"); // List prmItemList = new ArrayList(); // if(prm!=null){ // prmItemList = prm.getPrmItemList(); // }else{ // prm = new PRM(); // } // List res = new ArrayList(); // if(itemListIndex!=-1){ // // prmItemList.remove(itemListIndex); // for(int i=0;i contextRegion = new HashSet(); if (firstRef == null || firstRef.equals("")) { VCIOptionPane.showError(WidgetPanel.this, "定义参照属性时\"一级参照\"为必填项!"); return false; } if ("layuirefer".equalsIgnoreCase(firstRef)) { // weidy@2021-1-12 // 这个是自定义的js参照,所有不校验 return true; } if (refValue == null || refValue.equals("")) { VCIOptionPane.showError(WidgetPanel.this, "定义参照属性时\"参照值\"为必填项!"); return false; } if (attachAttr == null || attachAttr.equals("")) { VCIOptionPane.showError(WidgetPanel.this, "附加属性为空,请指定\"上下文\""); return false; } AttachAttrTipMessage tipObj = new AttachAttrTipMessage(attachAttr); // // if (refValue == null || refValue.equals("")) { // VCIOptionPane.showError(WidgetPanel.this,"参照值为空,请指定\"表单中回显的属性\""); // return false; // } refParamsMap.clear(); Byte[] flags = new Byte[tipObj.CONTANTS.length]; Arrays.fill(flags, new Byte("0")); String[] attrs = tipObj.CONTANTS; String[] paramItem = attachAttr.split(";"); if (paramItem.length == 1 && !paramItem[0].contains("=")) { // 兼容原context模式 context = attachAttr; // 找上下文属性 if (context == null || context.equals("")) { VCIOptionPane.showError(WidgetPanel.this, tipObj.setContent("未指定上下文,请指定\"上下文\"")); return false; } // 找上下文对应页面信息 try { contextRegion = getPLUILayoutRegion(firstRef, context); } catch (Exception e) { VCIOptionPane.showError(WidgetPanel.this, tipObj.setContent("根据" + firstRef + "->" + context + "无法确定参照页面!")); return false; } {// datafield未定义时做如下操作 // add by caill start 2016.3.25 判断是否是freemarker表达式(修改数据时) boolean is = FreeMarkerCommon.isFreemarkExpression(refValue); String[] str = new String[0]; if (is) { List keys = FreeMarkerCommon.getFreemarkExpressionKey(refValue); str = new String[keys.size()]; for (int n = 0; n < keys.size(); n++) { str[n] = keys.get(n); } } else { str = new String[1]; str[0] = refValue; } for (int i = 0; i < str.length; i++) { refValue = str[i].trim(); if (!isProperty(useFieldBtmName, refValue)) { VCIOptionPane.showError(WidgetPanel.this, tipObj.setContent("参照值\"" + refValue + "\"不是\"" + useField + "\"对应的业务类型的属性!")); return false; } } // add by caill end } } else { for (int i = 0; i < paramItem.length; i++) { String[] params = paramItem[i].split("=", 2); if (params.length < 2 || params[0] == null || params[0].equals("") || params[1].equals("")) { VCIOptionPane.showError(WidgetPanel.this, tipObj.setContent("参数格式填写错误,请重新填写!!")); return false; } // 去除空格 params[0] = params[0].trim(); params[1] = params[1].trim(); if (!params[0].equalsIgnoreCase(tipObj.CONTANT_1) && !params[0].equalsIgnoreCase(tipObj.CONTANT_2) && !params[0].equalsIgnoreCase(tipObj.CONTANT_3)) { tipObj.setContent("参数填写错误,包含无法解析的属性!!"); VCIOptionPane.showError(WidgetPanel.this, tipObj.setNotes( "可解析属性为:" + tipObj.CONTANT_1 + "," + tipObj.CONTANT_2 + "," + tipObj.CONTANT_3)); return false; } for (int j = 0; j < attrs.length; j++) { if (params[0].equalsIgnoreCase(attrs[j])) { if (flags[j] == 1) { VCIOptionPane.showError(WidgetPanel.this, tipObj.setContent("参数格式填写错误,\"" + tipObj.CONTANT_1 + "\"属性重复!!")); return false; } flags[j] = 1; refParamsMap.put(attrs[j], params[1]); } } } // context context = refParamsMap.get(attrs[0]); if (refParamsMap.get(attrs[0]) == null || refParamsMap.get(attrs[0]).equals("")) { VCIOptionPane.showError(WidgetPanel.this, tipObj.setContent("未指定上下文,请指定\"上下文\"")); return false; } try { contextRegion = getPLUILayoutRegion(firstRef, context); } catch (Exception e) { VCIOptionPane.showError(WidgetPanel.this, tipObj.setContent("根据" + firstRef + "->" + context + "无法确定参照页面!")); return false; } // dataregion if (!(refParamsMap.get(attrs[1]) == null || refParamsMap.get(attrs[1]).equals(""))) { String dataRegion = refParamsMap.get(attrs[1]); if (!(dataRegion.equals("1") || dataRegion.equals("2") || dataRegion.equals("3"))) { VCIOptionPane.showError(WidgetPanel.this, tipObj.setContent(tipObj.CONTANT_2 + "参数值只能为1/2/3中的一个值")); return false; } if (!contextRegion.contains(refParamsMap.get(attrs[1]))) { VCIOptionPane.showError(WidgetPanel.this, tipObj.setContent("根据" + firstRef + "->" + context + "确定的参照页面无现在所定义的区域" + attrs[1] + "=" + refParamsMap.get(attrs[1]))); return false; } } // datafield if (!(refParamsMap.get(attrs[2]) == null || refParamsMap.get(attrs[2]).equals(""))) {// datafield定义时做如下操作 String returnAttrName = refParamsMap.get(attrs[2]); String returnAttrNameBtmName = getBtmName(returnAttrName); // returnAttrNameBtmName为空时返回false if (returnAttrNameBtmName == null || returnAttrNameBtmName.equals("")) { VCIOptionPane.showError(WidgetPanel.this, tipObj.setContent(tipObj.CONTANT_3 + "对应的值,不是参照属性")); return false; } // 返回数据类型(returnAttrNameBtmName)与该字段所需数据类型(useFieldBtmName)不符 if (!returnAttrNameBtmName.equalsIgnoreCase(useFieldBtmName)) { tipObj.setContent("返回数据类型与该字段所需数据类型不符"); VCIOptionPane.showError(WidgetPanel.this, tipObj.setNotes(tipObj.CONTANT_3 + "=\"" + returnAttrName + "\"?")); return false; } // 用returnAttrNameBtmName属性获取其业务类型属性,并匹配 try { if (!isProperty(returnAttrNameBtmName, refValue)) { VCIOptionPane.showError(WidgetPanel.this, tipObj .setContent("参照值\"" + refValue + "\"不是\"" + returnAttrName + "\"对应的业务类型的属性!")); return false; } } catch (Throwable e) { VCIOptionPane.showError(WidgetPanel.this, tipObj.setContent(tipObj.CONTANT_3 + "对应的值,必须是参照属性")); return false; } } } return true; } /** * * @param type * @param context * @return * @throws Exception HashSet * @Description :获取页面定义区域的信息 * @author Zylon 2015-7-6 上午9:31:20 * */ private HashSet getPLUILayoutRegion(String type, String context) throws Exception { DataModelFactory factory = new DataModelFactory(); HashSet contextRegion = new HashSet(); PLUILayout contextDef = factory.getContextDefination(type, context); if (contextDef == null) { throw new Exception(); } if (contextDef.plIsShowTab == 1) {// 3 contextRegion.add(3 + ""); } if (contextDef.plIsShowForm == 1) { // 2 contextRegion.add(2 + ""); } ; if (contextDef.plIsShowNavigator == 1) {// 1 contextRegion.add(1 + ""); } ; return contextRegion; } /** * * @param BtmName * @param attrName * @return boolean * @Description :根据BtmName 和 传入的属性名 判断该属性名是否为BtmName的属性 * @author Zylon 2015-7-6 上午9:30:03 * */ private boolean isProperty(String BtmName, String attrName) { boolean isInPropertys = false; try { String[] typePropertys = BtmClient.getService().getBtmApNameArray(BtmName); String[] sysPropertys = BusinessConstants.SELECT_CONSTANTS; for (String property : typePropertys) { if (attrName.equalsIgnoreCase(property.trim())) { isInPropertys = true; } } for (String property : sysPropertys) { if (attrName.equalsIgnoreCase(property.trim())) { isInPropertys = true; } } } catch (Throwable e) { isInPropertys = false; } return isInPropertys; } }); } /** * 判断传入字段是否为库中保存的参照属性 * * @param attrName * @return */ private boolean isRefAttr(String attrName) { String useFieldBtmName = getBtmName(attrName); if (useFieldBtmName.equals("")) { return false; } return true; } /** * 根据参照属性名获得BtmName * * @param 参照属性名 * @return */ private String getBtmName(String attrName) { AttribItem attribItem = ApProvider.getAbItemByName(attrName); OtherInfo otherInfo = OtherInfo.getOtherInfoByText(attribItem.other); return otherInfo.getRefTypeName() == null ? "" : otherInfo.getRefTypeName(); } private List getValueList() { List list = new ArrayList(); for (int i = 0; i < jdValuelistModel.getSize(); i++) { String elementAt = (String) jdValuelistModel.getElementAt(i); list.add(elementAt); } return list; } private String getTypeCobValue() { String selectedItem = (String) jdTypeComBox.getSelectedItem(); Set keySet = jdTypeComBoxListMap.keySet(); Iterator iterator = keySet.iterator(); String value = ""; while (iterator.hasNext()) { value = iterator.next(); if (selectedItem == null) { return ""; } if (selectedItem.equals(jdTypeComBoxListMap.get(value))) { break; } } return value; } /** * "单行文本框","文本按钮框","多行文本框","富文本框","数字输入框", "密码框","单选按钮","多选按钮","下拉菜单","Web编辑器", * "日期输入框","时间输入框","日期时间输入框","隐藏或普通文字","自定义表单","文件上传","多文件上传" "自定义" * "text","textbtn","textarea" * ,"number","password","radio","checkbox","select","webeditor", "date", "time", * "datetime", "hidden","customform","file","multiFile","custom" */ private void initJdTypeComBoxList() { jdTypeComBoxListMap = new LinkedHashMap(); jdTypeComBoxListMap.put("text", "单行文本框"); jdTypeComBoxListMap.put("textbtn", "文本按钮框"); jdTypeComBoxListMap.put("textarea", "多行文本框"); jdTypeComBoxListMap.put("richtext", "富文本框"); jdTypeComBoxListMap.put("number", "数字输入框"); jdTypeComBoxListMap.put("password", "密码框"); jdTypeComBoxListMap.put("radio", "单选按钮"); jdTypeComBoxListMap.put("checkbox", "多选按钮"); jdTypeComBoxListMap.put("select", "下拉菜单"); jdTypeComBoxListMap.put("multiselect", "多选下拉菜单"); jdTypeComBoxListMap.put("date", "日期输入框"); jdTypeComBoxListMap.put("time", "时间输入框"); jdTypeComBoxListMap.put("datetime", "日期时间输入框"); jdTypeComBoxListMap.put("file", "文件上传"); jdTypeComBoxListMap.put("multiFile", "多文件上传"); jdTypeComBoxListMap.put("custom", "自定义"); jdTypeComBoxListMap.put("customform", "自定义表单"); jdTypeComBoxListMap.put("hidden", "隐藏或普通文字"); jdTypeComBoxListMap.put("webeditor", "Web编辑器"); jdTypeComBoxListMap.put("specialCharacter", "特殊字符"); jdTypeComBox.addItem(""); Set keySet = jdTypeComBoxListMap.keySet(); Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { String next = iterator.next(); jdTypeComBox.addItem(jdTypeComBoxListMap.get(next)); } } /** * 判断默认表达式是否正确 * * @param expression * @author LiuPengfei */ private String isDefaultExpress(String expression) { // ${description}_#CURRENTUSER.NAME#_#CURRENTDATE#_!com.vci.ui.form.defaultvalue.InitRevVer! if (expression == null || expression.trim().equals("")) { return ""; } if (expression.indexOf("!") != -1) { // !需要成对出现,判断!的个数是否为偶数 List chars = new ArrayList(); for (int i = 0; i < expression.length(); i++) { String c = expression.charAt(i) + ""; if (c.equals("!")) { chars.add(i); } } if ((chars.size()) % 2 != 0) { return "不符合情况,因为表达式的规则是!在自定义类的两端成对出现。"; } String regex = "!([^!]*)!"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(expression); while (m.find()) { String customClass = m.group(1); Class c; if (customClass.trim().equals("")) { return "两端!之间的值为空,不是自定义类,请修改!"; } try { c = Class.forName(customClass); String customInterfaceString = "com.vci.ui.form.defaultvalue.IFormFieldDefaultValue";// 自定义接口 if (!isImplementsInterface(c, customInterfaceString)) { return customClass + "类名不正确,没有实现自定义类!"; } ; } catch (ClassNotFoundException e) { e.printStackTrace(); return "系统找不到类" + customClass + ",请修改!"; } } } if (expression.indexOf("#") != -1) { // 内置的系统函数 List innerFunctions = new ArrayList(); innerFunctions.add("CURRENTTIME"); innerFunctions.add("CURRENTDATE"); innerFunctions.add("CURRENTDATETIME"); // #需要成对出现,判断#的个数是否为偶数 List chars = new ArrayList(); for (int i = 0; i < expression.length(); i++) { String c = expression.charAt(i) + ""; if (c.equals("#")) { chars.add(i); } } if ((chars.size()) % 2 != 0) { return "不符合情况,因为表达式的规则是#在内置系统变量或函数的两端成对出现。"; } // 偶数情况下,获取#内的变量判断是否属于内置系统变量或函数 Pattern p = Pattern.compile("#([^#]*)#"); Matcher m = p.matcher(expression); while (m.find()) { String innerSystem = m.group(1); if (innerSystem.trim().equals("")) { return "两端#之间的值为空,不属于内置的系统变量或函数,请修改!"; } if (!ClientContextVariable.isGlobalVarKey(innerSystem) && !innerFunctions.contains(innerSystem)) { return innerSystem + "不属于内置的系统变量或函数,请修改!"; } } } /* * if (expression.indexOf("${") != -1) { Pattern p = * Pattern.compile("\\$\\{([a-zA-Z0-9_]*|)\\}"); Matcher m = * p.matcher(expression); while (m.find()) { String sourceObjectAttr = * m.group(1); try { String[] btms = BtmClient.getService().getBTMNamesByAPName( * sourceObjectAttr); String[] sysPropertysArray = ClientCacheFacade * .getInstance().getSystemAttributes(false); List sysPropertys = Arrays * .asList(sysPropertysArray); if (btms == null || btms.length == 0 && * !sysPropertys.contains(sourceObjectAttr .toUpperCase())) { return * sourceObjectAttr + "不属于该业务的属性!"; } } catch (VCIError e) { * e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } catch * (Throwable e) { e.printStackTrace(); } } } */ /* * if(expression.indexOf("_")!=-1){ String[] keys = expression.split("_"); * //[${description}, #CURRENTUSER.NAME#, #CURRENTDATE#, * !com.vci.ui.form.defaultvalue.InitRevVer!] String keyVariable=null; for * (String key : keys) { if(key.startsWith("#")&&key.endsWith("#")){ * keyVariable=key.substring(1, key.lastIndexOf("#")); //内置的系统变量 List * innerVariables = new ArrayList(); * innerVariables.add("CURRENTUSER.ID"); innerVariables.add("CURRENTUSER.NAME"); * innerVariables.add("CURRENTUSER.SECRETGRADE"); * innerVariables.add("CURRENTUSER.EMAIL"); * innerVariables.add("CURRENTUSER.GROUPNUM"); * innerVariables.add("CURRENTUSER.SECRET"); * innerVariables.add("IPSECRETSWITCH"); //内置的系统函数 List innerFunctions = * new ArrayList(); innerFunctions.add("CURRENTTIME"); * innerFunctions.add("CURRENTDATE"); innerFunctions.add("IPSECRETDATETIME"); if * (!innerVariables.contains(keyVariable * )&&!innerFunctions.contains(keyVariable)) { * VCIOptionPane.showError(WidgetPanel.this, * keyVariable+"不是内置的系统函数也不是内置的系统变量,请修改!"); return false; } }else if * (key.startsWith("!")&&key.endsWith("!")) { keyVariable=key.substring(1, * key.lastIndexOf("!")); Class c; try { c = Class.forName(keyVariable); String * customInterfaceString = * "com.vci.ui.form.defaultvalue.IFormFieldDefaultValue";//自定义接口 * if(!isImplementsInterface(c,customInterfaceString)){ VCIOptionPane.showError * (WidgetPanel.this,keyVariable+"类名不正确,没有实现自定义类!"); return false; }; } catch * (ClassNotFoundException e) { VCIOptionPane.showError(WidgetPanel * .this,"系统找不到类"+keyVariable+"请修改!"); e.printStackTrace(); return false; } * * }else if(key.startsWith("${")&&key.endsWith("}")){ //不处理 }else if (key * .startsWith("#")&&!key.endsWith("#")||!key.startsWith("#")&&key.endsWith * ("#")) { VCIOptionPane.showError(WidgetPanel.this,"内置的系统变量或函数"+key+ * "必须以#开头,以#结尾,请修改!"); return false; }else if (key.startsWith("!")&&!key * .endsWith("!")||!key.startsWith("!")&&key.endsWith("!")) { VCIOptionPane * .showError(WidgetPanel.this,"自定义类"+key+"必须以!开头,以!结尾,请修改!"); return false; * }else{ VCIOptionPane.showError(WidgetPanel.this,"属性"+key+"格式有误,请修改!"); return * false; } } } */ return ""; } /** 判断类是否实现了自定义接口com.vci.ui.form.defaultvalue. IFormFieldDefaultValue */ private boolean isImplementsInterface(Class c, String customInterface) { Class[] face = c.getInterfaces(); for (int i = 0; i < face.length; i++) { if (face[i].getName().equals(customInterface)) { return true; } else { Class[] face1 = face[i].getInterfaces(); for (int j = 0; j < face1.length; j++) { if (face1[j].getName().equals(customInterface)) { return true; } else if (isImplementsInterface(face1[j], customInterface)) { return true; } } } } if (c.getSuperclass() != null) { return isImplementsInterface(c.getSuperclass(), customInterface); } return false; } private void initData() { if (prmItem != null) { jdFieldTxt.setText(prmItem.getItemField()); jdNameTxt.setText(prmItem.getItemName()); jdTypeComBox.setSelectedItem(jdTypeComBoxListMap.get(prmItem.getItemType())); //initLableInfo(); jdVlueTxt.setText(prmItem.getItemValue()); txtShowExpression.setText(prmItem.getItemShowExpression()); txtDateFormat.setText(prmItem.getItemDateFormat()); if (prmItem.getItemCols() != null && prmItem.getItemCols().equals("1")) { fullDisRadio.setSelected(true); } else if (prmItem.getItemCols() != null && prmItem.getItemCols().equals("0")) { noDisRadio.setSelected(true); } for (int j = 0; j < prmItem.getItemValueList().size(); j++) { String string = prmItem.getItemValueList().get(j); jdValuelistModel.addElement(string); } jdStyleTxt.setText(prmItem.getItemStyle()); jdScriptTxt.setText(prmItem.getItemScript()); jdTipsTxt.setText(prmItem.getItemTips()); JD_EditableProgramTxt.setText(prmItem.getItemEditableProgram()); if ("1".equals(prmItem.getItemIsEditable())) { jdiseditable.setSelected(true); } if ("1".equals(prmItem.getItemIsRequired())) { jdisrequired.setSelected(true); } jdctrldisplycol.setText(prmItem.getItemCtrlDisplyCol()); jdctrldisplycond.setText(prmItem.getItemCtrlDisplyCondition()); jdqueryrefields.setText(prmItem.getItemQueryRefFields()); jdcustomclass.setText(prmItem.getItemCustomClass()); jdListTableTxt.setText(prmItem.getItemListTable()); jdListTxtTxt.setText(prmItem.getItemListTxt()); jdListValTxt.setText(prmItem.getItemListVal()); if ("1".equals(prmItem.getItemIsHttpSave())) { jdishttpsave.setSelected(true); } jdhttpvolumnpath.setText(prmItem.getItemHttpVolumnPath()); jdhttppathfield.setText(prmItem.getItemHttpPathField()); jdaddfilter.setText(prmItem.getItemAddFilter()); jd_rightTxt.setText(prmItem.getItemRight()); } else { initLableInfo(); } } private void initDisControl() { if (jdishttpsave.isSelected()) { jdhttpvolumnpath.setEnabled(true); jdhttppathfield.setEnabled(true); } else { jdhttpvolumnpath.setEnabled(false); jdhttppathfield.setEnabled(false); } } private void initLableInfo() { if (attribItem == null) { if (prmItem != null) { // 设置属性当前类型 jdTypeComBox.setSelectedItem(jdTypeComBoxListMap.get(prmItem.getItemType())); } return; } else { jdTypeComBox.removeAllItems(); jdFieldTxt.setText(attribItem.name); jdNameTxt.setText(attribItem.label); jdVlueTxt.setText(attribItem.defValue); Map> typeMap = TypeConstant.getTypeMap(); List list = typeMap.get(attribItem.vtDataType); if (list != null) { for (String typeValue : list) { jdTypeComBox.addItem(jdTypeComBoxListMap.get(typeValue)); } } else { Set keySet = jdTypeComBoxListMap.keySet(); Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { String next = iterator.next(); jdTypeComBox.addItem(jdTypeComBoxListMap.get(next)); } } if (prmItem != null) { // 设置属性当前类型 jdTypeComBox.setSelectedItem(jdTypeComBoxListMap.get(prmItem.getItemType())); } } } }