package com.vci.client.oq.ui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dialog; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.ArrayList; import java.util.List; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTextField; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.filechooser.FileFilter; import javax.swing.table.JTableHeader; import javax.swing.table.TableColumn; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.HighlighterFactory; import com.vci.corba.omd.btm.BtmItem; import com.vci.corba.omd.qtm.QTInfo; import com.vci.client.LogonApplication; import com.vci.client.common.oq.OQTool; import com.vci.client.omd.btm.ui.BtmClient; import com.vci.client.omd.btm.ui.BtmTree; import com.vci.client.omd.btm.wrapper.BtmItemWrapper; import com.vci.client.oq.QTClient; import com.vci.client.oq.QTDClient; import com.vci.client.oq.ui.export.QTExpQTStep1Panel; import com.vci.client.oq.ui.qtimport.QTImpQTStep1Panel; import com.vci.client.oq.wrapper.QTWrapper_; import com.vci.client.portal.UI.dialog.VCICommonGuideDialog; import com.vci.client.portal.platformPortal.CreateQueryModelDialog; import com.vci.client.portal.utility.PRM; import com.vci.client.ui.swing.VCIOptionPane; import com.vci.client.ui.table.CheckBoxEditor; import com.vci.client.ui.table.CheckBoxRenderer; import com.vci.client.ui.util.PostorderEnumeration; import com.vci.common.qt.object.OrderInfo; import com.vci.common.qt.object.QTConstants; import com.vci.common.qt.object.QueryTemplate; import com.vci.corba.common.VCIError; public class QTPanel extends JPanel{ /** * */ private static final long serialVersionUID = -3631099481818143802L; private static QTPanel qtPanel = null; /** * add by caill * 添加定位框和定位按钮,并添加left 和leftTopPanel容器 * */ private JTextField textField=new JTextField(20); private JButton sel=new JButton("定位"); private JPanel left=new JPanel(); private JPanel leftTopPanel=new JPanel(); private JPanel northPanel; private JButton btnSave, btnDelete; private JSplitPane centerPanel; private JPanel cp_treePanel, cp_mainPanel; private static BtmTree btmTree; private JPanel cpm_southPanel; private ConditionPanel cpm_centerPanel; private JXTable qtTable; private TableModelWithCheckBox tableModel; private final int TABLE_HEADER_HEIGHT = 25; private final int ROW_HEIGHT = 30; private JScrollPane scrollPane; private static BtmItem selectedBtm = null; private JPanel cpm_northPanel; private JComboBox orderInfoComb; private JButton orderSetBtn; private List tempOrderInfoList = null; private JButton btnUpdate; //add by guo 业务类型的表格在修改的时候,直接编辑查询模板 private JButton selectNode; private String selectedObjectName; private int type1; private boolean isDialog = false; private static Dialog parentDialog; public static void setParentDialog(Dialog parentDialog) { QTPanel.parentDialog = parentDialog; } public String getSelectedObjectName() { return selectedObjectName; } public void setSelectedObjectName(String selectedObjectName) { this.selectedObjectName = selectedObjectName; }//end private static final String[] tableHeader = {"", "查询方案", "创建人", "创建时间"}; private QTPanel(){ initUI(); selectNode.setVisible(false); addListener(); initQTTable(); initOrderInfoComb(null); } //add by guo private QTPanel(BtmItem selectedBtm){ this.selectedBtm = selectedBtm; initUI(); addListener(); initQTTable(); initOrderInfoComb(null); } public static QTPanel getInstance(Object selectNodeObject, boolean isDialog, CreateQueryModelDialog parentDialog, int type){ if (qtPanel == null){ try { new BtmClient(); BtmItem treeNode = BtmClient.getService().getBtmItemByName(selectNodeObject.toString()); selectedBtm = treeNode; } catch (VCIError e) { e.printStackTrace(); } qtPanel = new QTPanel(selectedBtm); } DefaultMutableTreeNode tree = (DefaultMutableTreeNode)btmTree.getModel().getRoot(); int length = tree.getChildCount(); for (int i = 0; i < length; ++i) { DefaultMutableTreeNode element = (DefaultMutableTreeNode)tree.getChildAt(i); if (selectNodeObject.toString().equals(element.toString())) { TreeNode[] path = element.getPath(); TreePath treepath = new TreePath(path); btmTree.setSelectionPath(treepath); break; } } setParentDialog(parentDialog); qtPanel.updateUI(); return qtPanel; } //end static void initVars(){ qtPanel = null; btmTree = null; selectedBtm = null; parentDialog = null; } public static void cleanInstance(){ initVars(); qtPanel = null; } public static QTPanel getInstance(){ if(qtPanel == null){ qtPanel = new QTPanel(); } btmTree.initOrUpdate(); qtPanel.updateUI(); return qtPanel; } private void initUI(){ this.setBackground(Color.WHITE); this.setLayout(new BorderLayout(0, 0)); northPanel = new JPanel(); this.add(northPanel, BorderLayout.NORTH); cp_treePanel = new JPanel(); cp_mainPanel = new JPanel(); //add by caill //为业务类型树和链接类型树添加公用定位框和定位按钮,并添加left和leftTopPanel容器 //搜索框的设置 GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.weightx = 0.7; gbc.weighty = 0; gbc.fill = GridBagConstraints.HORIZONTAL; leftTopPanel.setLayout(new GridBagLayout()); leftTopPanel.add(textField,gbc); leftTopPanel.add(sel); left.setLayout(new BorderLayout()); left.add(leftTopPanel,BorderLayout.NORTH); left.add(new JScrollPane(cp_treePanel),BorderLayout.CENTER); centerPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, cp_mainPanel); //add by caill end //centerPanel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(cp_treePanel), cp_mainPanel); centerPanel.setDividerLocation(Toolkit.getDefaultToolkit().getScreenSize().width/5); centerPanel.setOneTouchExpandable(true); this.add(centerPanel, BorderLayout.CENTER); //add by caill start //为定位按钮增添点击事件 sel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //e.getSource(); String test = textField.getText().trim(); DefaultTreeModel model = (DefaultTreeModel)btmTree.getModel(); //model.reload(); TreeNode root = (TreeNode) model.getRoot(); PostorderEnumeration enumeration = new PostorderEnumeration( root); while (enumeration.hasMoreElements()) { DefaultMutableTreeNode element = (DefaultMutableTreeNode) enumeration .nextElement(); if (element.getUserObject() instanceof BtmItemWrapper) { BtmItemWrapper wrapper = (BtmItemWrapper) element .getUserObject(); if (wrapper != null && wrapper.btmItem!=null && wrapper.btmItem.name.equals(test)) { TreeNode[] path = element.getPath(); TreePath treePath = new TreePath(path); btmTree.setSelectionPath(treePath); return; } ; } } if (test.equals("")) { JOptionPane.showMessageDialog( com.vci.client.LogonApplication.frame, "请输入业务类型", "提示", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog( com.vci.client.LogonApplication.frame, "{ " + test + " }业务类型不存在", "提示", JOptionPane.INFORMATION_MESSAGE); } } }); //为定位框增加键盘事件 textField.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JTextField text = (JTextField) e.getSource(); String test = text.getText().trim(); DefaultTreeModel model = (DefaultTreeModel)btmTree.getModel(); //model.reload(); TreeNode root = (TreeNode) model.getRoot(); PostorderEnumeration enumeration = new PostorderEnumeration( root); while (enumeration.hasMoreElements()) { DefaultMutableTreeNode element = (DefaultMutableTreeNode) enumeration .nextElement(); if (element.getUserObject() instanceof BtmItemWrapper) { BtmItemWrapper wrapper = (BtmItemWrapper) element .getUserObject(); if (wrapper != null && wrapper.btmItem!=null && wrapper.btmItem.name.equals(test)) { TreeNode[] path = element.getPath(); TreePath treePath = new TreePath(path); btmTree.setSelectionPath(treePath); return; } ; } } if (test.equals("")) { JOptionPane.showMessageDialog( com.vci.client.LogonApplication.frame, "请输入业务类型", "提示", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog( com.vci.client.LogonApplication.frame, "{ " + test + " }业务类型不存在", "提示", JOptionPane.INFORMATION_MESSAGE); } } }); //add by caill end btnSave = new JButton("保存"); btnDelete = new JButton("删除"); selectNode = new JButton("选择"); btnUpdate = new JButton("更新数据库结构"); JButton expBtn = new JButton("导出"); expBtn.addActionListener(new ActionListener() {/* private VCICommonGuideDialog dialog = null; public void actionPerformed(ActionEvent e) { ExpActionDialog dialog = new ExpActionDialog(); dialog.setVisible(true); //MOdify by ZhongGY,直接利用公共向导执行Action导出(测试向导窗口) if (dialog == null) { dialog = new VCICommonGuideDialog("查询模板导出",-1,-1); QTExpQTStep1Panel step1Panel = new QTExpQTStep1Panel(); dialog.addStepUI(step1Panel); } dialog.setVisible(true); } */ private VCICommonGuideDialog dialog = null; public void actionPerformed(ActionEvent e) { //MOdify by ZhongGY,直接利用公共向导执行Action导出(测试向导窗口) if (dialog == null) { dialog = new VCICommonGuideDialog("选择查询模板导出文件",-1,-1); QTExpQTStep1Panel step1Panel = new QTExpQTStep1Panel(); dialog.addStepUI(step1Panel); } dialog.setVisible(true); } }); JButton impBtn = new JButton("导入"); impBtn.addActionListener(new ActionListener() { private VCICommonGuideDialog dialog = null; private QTImpQTStep1Panel step1Panel = null; public void actionPerformed(ActionEvent e) { //MOdify by ZhongGY,直接利用公共向导执行Action导出(测试向导窗口) if (dialog == null) { dialog = new VCICommonGuideDialog("查询模板导入",-1,-1); step1Panel = new QTImpQTStep1Panel(); dialog.addStepUI(step1Panel); } JFileChooser jf = new JFileChooser(); jf.setFileSelectionMode(JFileChooser.FILES_ONLY); jf.removeChoosableFileFilter(jf.getFileFilter()); jf.setFileFilter(new FileFilter() { public String getDescription() { return "文件夹"; } public boolean accept(File f) { return (f.isDirectory() || f.getName().endsWith(".xls")); } }); jf.setDialogTitle("选择查询模板导出文件"); int showOpenDialog = jf.showOpenDialog(LogonApplication.frame); if (showOpenDialog == JFileChooser.CANCEL_OPTION) { return; } if (showOpenDialog == JFileChooser.APPROVE_OPTION) { File selectedFile = jf.getSelectedFile(); String filePath = selectedFile.getAbsolutePath(); step1Panel.setFilePath(filePath); } dialog.setVisible(true); } }); btnUpdate.setToolTipText("更新QT将qtUIText和qtText变更为CLOB字段"); northPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); northPanel.add(btnSave); northPanel.add(btnDelete); northPanel.add(btnUpdate); northPanel.add(selectNode); northPanel.add(expBtn); northPanel.add(impBtn); //设置cp_treePanel cp_treePanel.setLayout(new GridBagLayout()); GridBagConstraints g = new GridBagConstraints(); g.gridx = 0; g.gridy = 0; g.weightx = 1.0; g.weighty = 1.0; g.fill = GridBagConstraints.BOTH; btmTree = new BtmTree(); cp_treePanel.add(btmTree, g); cp_mainPanel.setLayout(new BorderLayout()); cpm_northPanel = new JPanel(); cpm_northPanel.setBorder(BorderFactory.createTitledBorder("基本设置")); cpm_northPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); cp_mainPanel.add(new JScrollPane(cpm_northPanel), BorderLayout.NORTH); cpm_northPanel.add(new JLabel("已有排序")); orderInfoComb = new JComboBox(); orderInfoComb.setPreferredSize(new Dimension(200, 23)); cpm_northPanel.add(orderInfoComb); orderSetBtn = new JButton("设置排序"); cpm_northPanel.add(orderSetBtn); cpm_southPanel = new JPanel(); cpm_centerPanel = new ConditionPanel(selectedBtm, false); //TODO NORTH <----> CENTER JSplitPane splitP = new JSplitPane(JSplitPane.VERTICAL_SPLIT, cpm_centerPanel, cpm_southPanel); splitP.setDividerLocation(Toolkit.getDefaultToolkit().getScreenSize().height / 3); splitP.setOneTouchExpandable(true); cp_mainPanel.add(splitP, BorderLayout.CENTER); cpm_southPanel.setBorder(BorderFactory.createTitledBorder("查询模板列表")); cpm_southPanel.setAutoscrolls(true); cpm_southPanel.setLayout(new BorderLayout(5, 5)); scrollPane = new JScrollPane(); cpm_southPanel.add(scrollPane, BorderLayout.CENTER); tableModel = new TableModelWithCheckBox(tableHeader); qtTable = new JXTable(tableModel); TableColumn column = qtTable.getColumn(0); column.setCellEditor(new CheckBoxEditor(new JCheckBox())); column.setCellRenderer(new CheckBoxRenderer()); column.setMaxWidth(30); column.setMinWidth(30); qtTable.setRowHeight(ROW_HEIGHT); qtTable.setHorizontalScrollEnabled(true); qtTable.setHighlighters(HighlighterFactory.createAlternateStriping()); //排序后,引起其他页面的数据不显示 qtTable.setSortable(true); //设置表头高度 JTableHeader tableHeader = qtTable.getTableHeader(); Dimension size = tableHeader.getPreferredSize(); size.height = TABLE_HEADER_HEIGHT; tableHeader.setPreferredSize(size); scrollPane.setViewportView(qtTable); } private void addListener(){ btmTree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() { @Override public void valueChanged(TreeSelectionEvent e) { DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) btmTree.getLastSelectedPathComponent(); if(selectedNode == null){ selectedBtm = null; } if(selectedNode.getUserObject() instanceof BtmItemWrapper){ selectedBtm = ((BtmItemWrapper)selectedNode.getUserObject()).btmItem; }else{ selectedBtm = null; } cpm_centerPanel.updateUI(selectedBtm); initQTTable(); initOrderInfoComb(null); } }); //保存查询模板 btnSave.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(selectedBtm == null){ JOptionPane.showMessageDialog(northPanel, "请选择业务类型和查询模板定义来创建查询模板", "请选择业务类型", JOptionPane.ERROR_MESSAGE); return; } //add by caill start 遍历普通查询模板输入框中的值做校验 // ArrayList list = cpm_centerPanel.getList(); // for(int i=0;i 1){ VCIOptionPane.showMessageDialog(null, "只能选择一个对象!"); return; } else { QTInfo qtWrapper = ((QTWrapper_)qtTable.getValueAt(i, 1)).qtWrapper; String selected = qtWrapper.qtName; setSelectedObjectName(selected); } } } if (num == 0){ VCIOptionPane.showMessageDialog(null, "请选择一个对象!"); return; } parentDialog.dispose(); } }); } private void initQTTable(){ qtTable.removeAll(); if(selectedBtm != null){ QTInfo[] qtWrappers = null; try { qtWrappers = QTDClient.getService().getObjTypeQTs(selectedBtm.name); } catch (VCIError e) { // TODO Auto-generated catch block e.printStackTrace(); } if(qtWrappers == null){ return; } tableModel.setRowCount(qtWrappers.length); //重新设置table的Cell的可编辑性 tableModel.setInitFlag(false); for(int i = 0; i < qtWrappers.length; i++){ QTInfo qtWrapper = qtWrappers[i]; JCheckBox chBox = new JCheckBox(); qtTable.setValueAt(chBox, i, 0); qtTable.setValueAt(new QTWrapper_(qtWrapper), i, 1); qtTable.setValueAt(qtWrapper.creator, i, 2); qtTable.setValueAt(qtWrapper.createTime, i, 3); } tableModel.setInitFlag(true); updateQTInfo(); } qtTable.updateUI(); } /** * 检查查询模板名字是否可用 * @param name * @return */ private boolean isExists(String name){ boolean flag = true; try { flag = QTDClient.getService().isExistsQT(name); } catch (VCIError e) { e.printStackTrace(); } return flag; } /** * 删除选择的查询模板 * @return */ private boolean deleteQTS(){ boolean flag = false; List list = new ArrayList(); int count = qtTable.getRowCount(); for(int i = 0; i < count; i++){ JCheckBox chb = (JCheckBox) qtTable.getValueAt(i, 0); if(chb.isSelected()){ QTInfo qtWrapper = ((QTWrapper_)qtTable.getValueAt(i, 1)).qtWrapper; list.add(qtWrapper.qtName); } } try { flag = QTDClient.getService().deleteQTs(list.toArray(new String[0])); } catch (VCIError e) { // TODO Auto-generated catch block e.printStackTrace(); } return flag; } /** * 更新查询模板的信息 */ private void updateQTInfo(){ int row = qtTable.getSelectedRow(); if(row < 0){ return; } QTInfo qtWrapper = ((QTWrapper_) qtTable.getValueAt(row, 1)).qtWrapper; cpm_centerPanel.setQTUI(qtWrapper); } /** * 展示排序信息 */ private void initOrderInfoComb(List orderInfoList) { orderInfoComb.removeAllItems(); if(orderInfoList == null){ QueryTemplate qt = getSelectedQT(); if(qt != null){ orderInfoList = qt.getOrderInfoList(); } } if(orderInfoList != null){ for(OrderInfo o : orderInfoList){ String orderMode = o.getOrderMode(); if(orderMode.equals(QTConstants.ORDERMODE_ASC)){ orderMode = "升序"; }else{ orderMode = "降序"; } String orderInfo = o.getOrderField() + ";" + orderMode + ";" + o.getLevel(); orderInfoComb.addItem(orderInfo); } } tempOrderInfoList = orderInfoList; orderInfoComb.updateUI(); } /** * 获取列表中选中的qt * @return * @throws DocumentException * @throws VCIError */ public QueryTemplate getSelectedQT(){ int row = qtTable.getSelectedRow(); if(row < 0){ return null; } QTInfo qtWrapper = ((QTWrapper_) qtTable.getValueAt(row, 1)).qtWrapper; try { return OQTool.getQTByDoc(DocumentHelper.parseText(qtWrapper.qtText), qtWrapper.qtName); } catch (VCIError e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } return null; } }