package com.vci.client.portal.UI; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Arrays; import java.util.Comparator; import java.util.List; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; import com.vci.corba.omd.btm.BtmItem; import com.vci.corba.portal.data.PLCommandParameter; import com.vci.corba.portal.data.PLPageDefination; import com.vci.corba.portal.data.PLUILayout; import com.vci.corba.portal.data.PLTabButton; import com.vci.corba.portal.data.PLTabPage; import com.vci.client.LogonApplication; import com.vci.client.common.VCIBasePanel; import com.vci.client.framework.rightConfig.object.FunctionObject; import com.vci.client.omd.provider.BtmProvider; import com.vci.client.portal.UI.dialog.VCIGrandUIDialog; import com.vci.client.portal.utility.UITools; import com.vci.client.ui.process.QANProcessBar; import com.vci.client.ui.process.QANProcessBarFrame; import com.vci.client.ui.swing.VCIOptionPane; import com.vci.client.ui.table.VCIBaseTableModel; import com.vci.client.ui.table.VCIBaseTableNode; import com.vci.client.ui.tree.VCIBaseTreeModel; import com.vci.client.ui.tree.VCIBaseTreeNode; import com.vci.client.ui.util.PostorderEnumeration; import com.vci.corba.common.VCIError; /** * This code was edited or generated using CloudGarden's Jigloo * SWT/Swing GUI Builder, which is free for non-commercial * use. If Jigloo is being used commercially (ie, by a corporation, * company or business for any purpose whatever) then you * should purchase a license for each developer using Jigloo. * Please visit www.cloudgarden.com for details. * Use of Jigloo implies acceptance of these licensing terms. * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR * THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED * LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE. */ /** * UI管理 * @author liudi * * 2013-7-23 */ public class UIFManager extends VCIBasePanel { /** * */ private static final long serialVersionUID = 7438323020031787177L; private JSplitPane jSplitPane; private JPanel btnPanel; private JScrollPane jScrollPane; private JPanel uifMangerTablePanel; private JTable uifMangerTabel; private TableRowSorter tableSorter; private boolean enableSort = true; private VCIBaseTableModel uiFMangerTableModel; private JPanel tablePanel; private JButton delBtn; private JButton editBtn; private JButton createBtn; private JPanel contentPanel; private JTree btTree; //================= private JPanel leftPanel; private JPanel topPanel; private JPanel rightPanel; private JPanel rightchaxunPanel; private JLabel Name; private JTextField chaxunByName; private JLabel shangxiawen; private JTextField chaxunByshangxiawen; private JButton chaxunbtn; private JTextField lefTtextField; private JButton leftBtnchaxun; private List usedList = null; JPopupMenu popupMenu = new JPopupMenu();//弹出式菜单 JMenuItem menuitem = new JMenuItem("刷新"); Object[][] strings = null; private static UIFManager uiFManager = null; String[] columnHeaders = new String[] { "名称", "UI上下文"}; Class types[] = new Class[] { String.class, String.class }; private JButton btntab; private JButton btnForm; private JButton btnTree; private String btname = ""; private JScrollPane jscrollPanel ; private JButton clonebtn; private JButton expBtn; private JButton impBtn; private JButton grandBtn; private JButton grandBtnBySelected; private JButton relatbutton; // public static UIFManager getInstance(){ // if(uiFManager == null){ // uiFManager = new UIFManager(); // } // return uiFManager; // } private JTree contextTree; private VCIBaseTreeModel contextTreeModel; private VCIBaseTreeNode contextTreerootNode; public UIFManager(FunctionObject funcObj){ super(funcObj); initGUI(); } private void initGUI() { try { { { this.setLayout(new BorderLayout()); jSplitPane = new JSplitPane(); this.add(jSplitPane); { leftPanel = new JPanel(); BorderLayout leftPanelLayout = new BorderLayout(); leftPanel.setLayout(leftPanelLayout); jSplitPane.add(leftPanel, JSplitPane.LEFT); { topPanel = new JPanel(); BorderLayout topPanelLayout = new BorderLayout(); leftPanel.add(topPanel,BorderLayout.NORTH); //搜索框的设置add by guo GridBagConstraints gb = new GridBagConstraints(); gb.gridx = 0; gb.gridy = 0; //占长度的百分之七十 gb.weightx = 0.7; gb.weighty = 0; gb.fill = GridBagConstraints.HORIZONTAL; topPanel.setLayout(new GridBagLayout()); { lefTtextField = new JTextField(); topPanel.add(lefTtextField,gb); leftBtnchaxun = new JButton("查询"); topPanel.add(leftBtnchaxun); leftBtnchaxun.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { chaxun2(); } }); lefTtextField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { chaxun2(); } }); } } { popupMenu.add(menuitem); btTree = new JTree(); jscrollPanel = new JScrollPane(); jscrollPanel.setViewportView(btTree); leftPanel.add(jscrollPanel,BorderLayout.CENTER); btTree.setModel(createTreeModel()); btTree.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { super.mouseClicked(e); initData(); } @Override public void mouseReleased(MouseEvent e) { super.mouseReleased(e); if(e.isPopupTrigger()){ popupMenu.show(btTree, e.getX(), e.getY()); } } }); menuitem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { try { btTree.setModel(createTreeModel()); } catch (VCIError e) { e.printStackTrace(); } } }); } } { contentPanel = new JPanel(); BorderLayout contentPanelLayout = new BorderLayout(); contentPanel.setLayout(contentPanelLayout); jSplitPane.add(contentPanel, JSplitPane.RIGHT); { //add by guo GridBagConstraints gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 0; gbc.weighty = 0; gbc.gridx = 0; gbc.gridy = 0; rightPanel = new JPanel(); contentPanel.add(rightPanel,BorderLayout.NORTH); rightPanel.setLayout(new GridBagLayout());{ rightchaxunPanel = new JPanel(); rightPanel.add(rightchaxunPanel,gbc);{ Name = new JLabel("名称"); rightchaxunPanel.add(Name); chaxunByName = new JTextField(40); rightchaxunPanel.add(chaxunByName); shangxiawen = new JLabel("UI上下文"); rightchaxunPanel.add(shangxiawen); chaxunByshangxiawen = new JTextField(40); rightchaxunPanel.add(chaxunByshangxiawen); chaxunbtn = new JButton("查询"); rightchaxunPanel.add(chaxunbtn); chaxunbtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { chaxun1(); } }); chaxunByshangxiawen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { chaxun1(); } }); chaxunByName.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { chaxun1(); } }); } } { gbc.gridx = 0; gbc.gridy = 1; btnPanel = new JPanel(); FlowLayout jPanel1Layout = new FlowLayout(); rightPanel.add(btnPanel, gbc); btnPanel.setLayout(jPanel1Layout); { createBtn = new JButton(); btnPanel.add(createBtn); createBtn.setText("创建"); createBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { TreePath path = btTree.getSelectionPath(); String message = "请选择业务类型!"; if(path ==null){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } VCIBaseTreeNode node = (VCIBaseTreeNode) path.getLastPathComponent(); if(node.getObj()==null){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } if(node.getObj() instanceof String){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } int row = uifMangerTabel.getSelectedRow(); //选中数据的索引 BtmItem obj = (BtmItem) node.getObj(); UIContextDialog dialog = new UIContextDialog(obj,false,null); initData(); //uifMangerTabel.setRowSelectionInterval(row, row); } }); } { editBtn = new JButton(); btnPanel.add(editBtn); editBtn.setText("修改"); editBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { TreePath path = btTree.getSelectionPath(); String message = "请选择业务类型!"; if(path ==null){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } VCIBaseTreeNode node = (VCIBaseTreeNode) path.getLastPathComponent(); if(node.getObj()==null){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } if(node.getObj() instanceof String){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } if(uiFMangerTableModel.list.size()==0){ VCIOptionPane.showMessage(LogonApplication.frame, "请选择数据!"); return ; } int row = uifMangerTabel.getSelectedRow(); //选中数据的索引 int selectedRowCount = uifMangerTabel.getSelectedRowCount();//选中的数据条数 if(selectedRowCount==0){ VCIOptionPane.showMessage(LogonApplication.frame, "请选择数据!"); return; } row=uifMangerTabel.convertRowIndexToModel(row); VCIBaseTableNode valueAt = uiFMangerTableModel.getValueAt(row);//获取选中行对象 BtmItem obj = (BtmItem) node.getObj(); PLUILayout plpagelayoutdefination = (PLUILayout) valueAt.getObj();//获取选中行的数据 UIContextDialog dialog = new UIContextDialog(obj,true,plpagelayoutdefination); if(dialog.isSave() == true){ initData(); //将本已选中的行去掉了 } //加载完新窗体后,重新让原始数据被选中,选择从paramInt1到paramInt2之间的行 //uifMangerTabel.setRowSelectionInterval(row, row); } }); } { delBtn = new JButton(); btnPanel.add(delBtn); btntab = new JButton("操作区"); btntab.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { if(uiFMangerTableModel.list.size()==0){ VCIOptionPane.showMessage(LogonApplication.frame, "请选择数据!"); return ; } int selectedRowCount = uifMangerTabel.getSelectedRowCount(); int selectedRow = uifMangerTabel.getSelectedRow(); if(selectedRow>=uiFMangerTableModel.list.size()){ VCIOptionPane.showMessage(LogonApplication.frame, "请选择数据!"); return ; } if(selectedRowCount==0){ VCIOptionPane.showMessage(LogonApplication.frame, "请选择数据!"); return ; }else if(selectedRowCount >1){ VCIOptionPane.showMessage(LogonApplication.frame, "一次只能选择一条数据进行此操作!"); return ; } int[] selectedRows = uifMangerTabel.getSelectedRows(); for(int j=0;j1){ VCIOptionPane.showMessage(LogonApplication.frame, "一次只能选择一条数据进行此操作!"); return ; } int[] selectedRows = uifMangerTabel.getSelectedRows(); for(int j=0;j1){ VCIOptionPane.showMessage(LogonApplication.frame, "一次只能选择一条数据进行此操作!"); return ; } int[] selectedRows = uifMangerTabel.getSelectedRows(); for(int j=0;j 1){ VCIOptionPane.showMessage(LogonApplication.frame, "一次只能选择一条数据进行此操作!"); return; } // int aa = uifMangerTabel.convertRowIndexToModel(row); // PLUILayout plpagelayoutdefination = (PLUILayout) uiFMangerTableModel.getValueAt(aa).getObj(); // CloneDialog dialog = new CloneDialog(btTree,plpagelayoutdefination); if(enableSort && tableSorter != null){ row = tableSorter.convertRowIndexToModel(row); } VCIBaseTableNode rowNode = uiFMangerTableModel.getValueAt(row); PLUILayout pld = (PLUILayout) rowNode.getObj(); CloneDialog dialog = new CloneDialog(btTree, pld); dialog.setVisible(true); initData(); // initTreeNode(); //uifMangerTabel.setRowSelectionInterval(row, row); } }); btnPanel.add(clonebtn); } { expBtn = new JButton("导出"); expBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { TreePath path = btTree.getSelectionPath(); String message = "请选择业务类型!"; if(path ==null){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } VCIBaseTreeNode node = (VCIBaseTreeNode) path.getLastPathComponent(); if(node.getObj()==null){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } if(node.getObj() instanceof String){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } BtmItem obj = (BtmItem) node.getObj(); PLUILayout[] contexts = null; int[] rows = uifMangerTabel.getSelectedRows(); if(rows == null || rows.length <= 0){ VCIOptionPane.showMessage(LogonApplication.frame, "请选择上下文!"); return; } contexts = new PLUILayout[rows.length]; for (int i = 0; i < rows.length; i++) { int row = rows[i]; if(enableSort && tableSorter != null){ int modelRow = tableSorter.convertRowIndexToModel(row); if(modelRow < uiFMangerTableModel.getRowCount()){ row = modelRow; } } VCIBaseTableNode rowNode = uiFMangerTableModel.getValueAt(row); contexts[i] = (PLUILayout) rowNode.getObj(); } ExpDialog dialog = new ExpDialog(obj, contexts); dialog.setVisible(true); } }); btnPanel.add(expBtn); } { impBtn = new JButton("导入"); impBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { TreePath path = btTree.getSelectionPath(); String message = "请选择业务类型!"; if(path ==null){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } VCIBaseTreeNode node = (VCIBaseTreeNode) path.getLastPathComponent(); if(node.getObj()==null){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } if(node.getObj() instanceof String){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } BtmItem obj = (BtmItem) node.getObj(); ImportExcel imp = new ImportExcel(obj); if(imp.impExcel()){ VCIOptionPane.showMessage(LogonApplication.frame, "导入成功"); initData(); } } }); btnPanel.add(impBtn); } //add start by lmh20151229,在UI定义增加对单独业务类型的UI功能模块授权 { grandBtn = new JButton("授权"); grandBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { showGrantDialog(false); } }); btnPanel.add(grandBtn); } //add end { grandBtnBySelected = new JButton("授权(基于选定的上下文)"); grandBtnBySelected.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { showGrantDialog(true); } }); btnPanel.add(grandBtnBySelected); } delBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { if(uiFMangerTableModel.list.size()==0){ VCIOptionPane.showMessage(LogonApplication.frame, "请选择删除的数据!"); return ; } int selectedRow = uifMangerTabel.getSelectedRow(); int selectedRowCount = uifMangerTabel.getSelectedRowCount(); if(selectedRowCount==0){ VCIOptionPane.showMessage(LogonApplication.frame, "请选择删除的数据!"); return ; } /*if (VCIOptionPane.showQuestion(LogonApplication.frame, "确定要删除记录吗?") != 0) { return; }*/ selectedRow=uifMangerTabel.convertRowIndexToModel(selectedRow); PLUILayout plpagelayoutdefination = (PLUILayout) uiFMangerTableModel.getValueAt(selectedRow).getObj(); Object[] options = { "Yes", "No" }; int option = JOptionPane .showOptionDialog(LogonApplication.frame, "确认是否删除ui定义\"" + plpagelayoutdefination.plName + "\"", "ui定义删除", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]); if(option != JOptionPane.YES_OPTION){ return; } // if(check(plpagelayoutdefination)){ VCIOptionPane.showMessage(LogonApplication.frame, "包含子数据,不能删除!"); return; } try { boolean flag = UITools.getService().deletePLUILayout(plpagelayoutdefination); VCIOptionPane.showMessage(LogonApplication.frame, "删除成功"); } catch (VCIError e) { e.printStackTrace(); VCIOptionPane.showMessage(LogonApplication.frame, "删除失败"); } initData(); } }); } } } { tablePanel = new JPanel(); BorderLayout tablePanelLayout = new BorderLayout(); contentPanel.add(tablePanel, BorderLayout.CENTER); tablePanel.setLayout(tablePanelLayout); { initTable(); } } } } } } catch(Exception e) { e.printStackTrace(); } } private void showGrantDialog(boolean fromSelected){ TreePath path = btTree.getSelectionPath(); String message = "请选择业务类型!"; if(path ==null){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } VCIBaseTreeNode node = (VCIBaseTreeNode) path.getLastPathComponent(); if(node.getObj()==null){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } if(node.getObj() instanceof String){ VCIOptionPane.showMessage(LogonApplication.frame, message); return ; } final BtmItem obj = (BtmItem) node.getObj(); final PLUILayout[] allContexts = new PLUILayout[this.uifMangerTabel.getRowCount()]; for (int i = 0; i < allContexts.length; i++) { int row = i; if(this.enableSort && this.tableSorter != null){ int modelRow = this.tableSorter.convertRowIndexToModel(row); if(modelRow < this.uiFMangerTableModel.getRowCount()){ row = modelRow; } } VCIBaseTableNode rowNode = this.uiFMangerTableModel.getValueAt(row); allContexts[i] = (PLUILayout) rowNode.getObj(); } PLUILayout[] contexts = null; if(fromSelected){ int[] rows = this.uifMangerTabel.getSelectedRows(); if(rows == null || rows.length <= 0){ VCIOptionPane.showMessage(LogonApplication.frame, "请选择上下文!"); return; } contexts = new PLUILayout[rows.length]; for (int i = 0; i < rows.length; i++) { int row = rows[i]; if(this.enableSort && this.tableSorter != null){ int modelRow = this.tableSorter.convertRowIndexToModel(row); if(modelRow < this.uiFMangerTableModel.getRowCount()){ row = modelRow; } } VCIBaseTableNode rowNode = this.uiFMangerTableModel.getValueAt(row); contexts[i] = (PLUILayout) rowNode.getObj(); } } else { contexts = allContexts; } final PLUILayout[] contextsx = contexts; final QANProcessBarFrame frame = new QANProcessBarFrame(); final QANProcessBar bar = new QANProcessBar(new Thread(new Runnable() { @Override public void run() { try{ frame.setContent("正在构建UI授权界面,请稍等..."); VCIGrandUIDialog dialog = new VCIGrandUIDialog(obj, funcObj, contextsx, allContexts); frame.setContent(""); frame.setProcessBarCancel(true); dialog.setLocationAndSize(); } finally{ frame.setProcessBarCancel(true); } } }){}, (JFrame) LogonApplication.frame, frame, "", false); String title = "UI授权"; frame.setTitle(title); bar.setTitle(title); bar.setVisible(true); } private void initTable() { if(uifMangerTablePanel!=null){ tablePanel.remove(uifMangerTablePanel); } uifMangerTablePanel = new JPanel(); tablePanel.add(uifMangerTablePanel, BorderLayout.CENTER); { jScrollPane = new JScrollPane(); uifMangerTablePanel.setLayout(new BorderLayout()); uifMangerTablePanel.add(jScrollPane); { uiFMangerTableModel = new VCIBaseTableModel(columnHeaders,types); uifMangerTabel = new JTable(); jScrollPane.setViewportView(uifMangerTabel); uifMangerTabel.setModel(uiFMangerTableModel); if(this.enableSort){ tableSorter = new TableRowSorter(uiFMangerTableModel); uifMangerTabel.setRowSorter(tableSorter); } } } } //设置JTable斑马线效果 public void setBanMaXian(JTable table) { //斑马线设置 DefaultTableCellRenderer d = new DefaultTableCellRenderer() {//需要重写类中的getTableCellRendererComponent的方法 @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if(row % 2 == 0)//JTable中的奇数行 { setBackground(Color.WHITE); } else//JTable中的偶数行 { setBackground(Color.LIGHT_GRAY); } return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } }; for(int i = 0; i< table.getColumnCount();i++) { TableColumn col = table.getColumn(table.getColumnName(i)); col.setCellRenderer(d);//将斑马线对象放置到表格中 } } private PLUILayout[] getSortedContexts(PLUILayout[] contexts){ Arrays.sort(contexts, new Comparator(){ @Override public int compare(PLUILayout o1, PLUILayout o2) { return o1.plName.compareTo(o2.plName); } }); return contexts; } private void initData(){ uiFMangerTableModel.list.clear(); TreePath path = btTree.getSelectionPath(); if(path == null) return; VCIBaseTreeNode node = (VCIBaseTreeNode) path.getLastPathComponent(); if(node.getObj() instanceof BtmItem){ BtmItem obj = (BtmItem) node.getObj(); btname = obj.name; lefTtextField.setText(btname); uiFMangerTableModel= (VCIBaseTableModel) uifMangerTabel.getModel(); VCIBaseTableNode vciBaseTableNode = null; try { PLUILayout[] plpagelayoutdefinations = UITools.getService().getPLUILayoutsByRelatedType(btname); plpagelayoutdefinations = getSortedContexts(plpagelayoutdefinations); int length = plpagelayoutdefinations.length; for(int i =0;i0||pltabPage.length>0){ flag = true; } } catch (VCIError e) { e.printStackTrace(); } return flag; } //右边的业务类型的详细显示add by guo private void chaxun1() { uiFMangerTableModel.list.clear(); TreePath path = btTree.getSelectionPath(); if(path == null) return; VCIBaseTreeNode node = (VCIBaseTreeNode) path.getLastPathComponent(); if(node.getObj() instanceof BtmItem){ BtmItem obj = (BtmItem) node.getObj(); btname = obj.name; uiFMangerTableModel= (VCIBaseTableModel) uifMangerTabel.getModel(); VCIBaseTableNode vciBaseTableNode = null; try { PLUILayout[] plpagelayoutdefinations = UITools.getService().getPLUILayoutsByRelatedType(btname); int length = plpagelayoutdefinations.length; if(!chaxunByName.getText().equals("") && chaxunByshangxiawen.getText().equals("")){ for(int i =0;i