package com.vci.client.omd.enumManager.ui; import java.awt.BorderLayout; import java.awt.Color; 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.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JCheckBox; 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.border.EmptyBorder; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.JTableHeader; import javax.swing.table.TableColumn; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.HighlighterFactory; import com.vci.client.common.providers.ServiceProvider; import com.vci.client.omd.enumManager.toOutside.InterEM; import com.vci.client.omd.enumManager.toOutside.InterEMManager; import com.vci.client.omd.enumManager.wrapper.EnumItemWrapper; import com.vci.client.ui.table.CheckBoxEditor; import com.vci.client.ui.table.CheckBoxRenderer; import com.vci.corba.common.VCIError; import com.vci.corba.omd.etm.EnumItem; public class EnumManagerPanel extends JPanel{ /** * */ private static final long serialVersionUID = -1796926574887612850L; private static EnumManagerPanel enumManagerPanel = null; private JPanel northPanel, centerPanel, tablePanel, mainPanel; private JButton btnCreate, btnModify, btnDelete, btnUseTo; private JSplitPane splitPane; private JScrollPane scrollPane; private EmTableModel tableModel; private JXTable emTable; private JTextField tfFilter; private final int TABLE_HEADER_HEIGHT = 25; private final int ROW_HEIGHT = 25; private EnumItem[] emItemArray; //0:显示; 1: 创建; 2: 修改 //保存当前状态 private int flag; private JButton btnExp; private JButton btnImp; public int getFlag() { return flag; } public void setFlag(int flag) { this.flag = flag; } private EnumManagerPanel(){ initUI(); initTableData(); addListener(); } public static void cleanInstance(){ enumManagerPanel = null; } public static EnumManagerPanel getInstance(){ if(enumManagerPanel == null){ enumManagerPanel = new EnumManagerPanel(); } return enumManagerPanel; } /** * 初始化界面 */ private void initUI(){ setBackground(Color.WHITE); setLayout(new BorderLayout(0, 0)); //northPanel northPanel = new JPanel(); //FlowLayout是panel的默认布局管理器 FlowLayout flowLayout = (FlowLayout) northPanel.getLayout(); flowLayout.setAlignment(FlowLayout.LEFT); this.add(northPanel, BorderLayout.NORTH); btnCreate = new JButton("创建"); btnModify = new JButton("修改"); btnDelete = new JButton("删除"); btnUseTo = new JButton("查看应用范围"); btnExp = new JButton("导出"); btnImp = new JButton("导入"); tfFilter = new JTextField(20); northPanel.add(btnCreate); northPanel.add(btnModify); northPanel.add(btnDelete); northPanel.add(btnUseTo); northPanel.add(btnExp); northPanel.add(btnImp); //add by caill 增加搜索框 northPanel.add(new JLabel("枚举名称")); northPanel.add(tfFilter); //centerPanel: 被splitPane占满 centerPanel = new JPanel(); this.add(centerPanel, BorderLayout.CENTER); centerPanel.setLayout(new GridBagLayout()); GridBagConstraints gb = new GridBagConstraints(); gb.gridx = 0; gb.gridy = 0; gb.weightx = 1.0; gb.weighty = 1.0; gb.fill = GridBagConstraints.BOTH; //splitPane: 左侧tablePanel, 右侧mainPanel splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); splitPane.setOneTouchExpandable(true); centerPanel.add(splitPane, gb); tablePanel = new JPanel(); //占用空间的透明边框(间距) tablePanel.setBorder(new EmptyBorder(5, 5, 0, 5)); tablePanel.setAutoscrolls(true); tablePanel.setLayout(new BorderLayout(5, 5)); tableModel = new EmTableModel(); emTable = new JXTable(tableModel); TableColumn column = emTable.getColumn(0); column.setCellEditor(new CheckBoxEditor(new JCheckBox())); column.setCellRenderer(new CheckBoxRenderer()); column.setMinWidth(30); column.setMaxWidth(30); column.setPreferredWidth(30); emTable.setRowHeight(ROW_HEIGHT); emTable.setHorizontalScrollEnabled(true); emTable.setHighlighters(HighlighterFactory.createAlternateStriping()); //排序后,引起其他页面的数据不显示 emTable.setSortable(true); //设置表头高度 JTableHeader tableHeader = emTable.getTableHeader(); Dimension size = tableHeader.getPreferredSize(); size.height = TABLE_HEADER_HEIGHT; tableHeader.setPreferredSize(size); //emTable.getTableHeader().getColumnModel().getColumn(0).setPreferredWidth(2); //emTable.getColumnModel().getColumn(0).setPreferredWidth(2); scrollPane = new JScrollPane(); tablePanel.add(scrollPane, BorderLayout.CENTER); scrollPane.setViewportView(emTable); //mainPanel位于右侧,用于响应创建,修改,查看应用范围 mainPanel = new JPanel(); mainPanel.setLayout(new BorderLayout(0, 0)); setMainPanel(0); splitPane.setLeftComponent(tablePanel); splitPane.setRightComponent(mainPanel); splitPane.setDividerLocation(Toolkit.getDefaultToolkit().getScreenSize().width/2); } /** * 设置emTable的数据 */ public void initTableData(){ try { //emTable.removeAll(); EnumItem emItem; //add by caill 使表格内容跟搜索框内容结合起来,并按照搜索框中的枚举名称显示相应的表格信息 String filter=tfFilter.getText(); emItemArray = ServiceProvider.getOMDService().getEnumService().getEmItems(filter, 1, 1); tableModel.setRowCount(emItemArray.length); //重新设置table的Cell的可编辑性 tableModel.setInitFlag(false); for(int i = 0; i < emItemArray.length; i++){ emItem = emItemArray[i]; emTable.setValueAt(new JCheckBox(), i, 0); emTable.setValueAt(new EnumItemWrapper(emItem), i, 1); emTable.setValueAt(emItem.label, i, 2); emTable.setValueAt(emItem.type, i, 3); } //重新设置table的Cell的可编辑性 tableModel.setInitFlag(true); emTable.updateUI(); emTable.getColumn(0).setWidth(30); } catch (VCIError e) { e.printStackTrace(); } } private void addListener(){ btnCreate.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { flag = 1; EnumItemPanel.getInstance().updateDataAndUI(null, flag); } }); btnModify.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { flag = 2; int row = emTable.getSelectedRow(); if(row >= 0){ EnumItem emItem = ((EnumItemWrapper)emTable.getValueAt(row, 1)).enumItem; EnumItemPanel.getInstance().updateDataAndUI(emItem, flag); }else{ JOptionPane.showMessageDialog(null, "请选中数据", "无数据", JOptionPane.WARNING_MESSAGE); } } }); btnDelete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { deleteEmItems(); } }); btnUseTo.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int row = emTable.getSelectedRow(); EnumItem emItem; if(row >= 0){ emItem = ((EnumItemWrapper)emTable.getValueAt(row, 1)).enumItem; UsedToDialog usedToDialog = new UsedToDialog(emItem); usedToDialog.setVisible(true); }else{ JOptionPane.showMessageDialog(null, "请选中数据", "无数据", JOptionPane.WARNING_MESSAGE); return; } } }); //add by caill start 为搜索框添加过滤器 //过滤器 tfFilter.getDocument().addDocumentListener(new DocumentListener() { @Override public void removeUpdate(DocumentEvent e) { initTableData(); } @Override public void insertUpdate(DocumentEvent e) { initTableData(); } @Override public void changedUpdate(DocumentEvent e) { initTableData(); } }); //add by caill end emTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { if(flag == 1){ return; } updateEnumItemInfo(); } }); btnExp.addActionListener(new ExpActionListener()); btnImp.addActionListener(new ImpActionListener()); } /** * flag 0:显示; 1: 创建; 2: 修改 * @param flag */ private void setMainPanel(int flag){ if(mainPanel == null){ return; } this.flag = flag; EnumItemPanel eItemPanel = EnumItemPanel.getInstance(); eItemPanel.addCancelActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { enumManagerPanel.flag = 0; } }); eItemPanel.updateDataAndUI(null, this.flag); mainPanel.add(eItemPanel, BorderLayout.CENTER); } /** * 删除checkBox选中的属性项, * 没有选中项时,提示 */ private void deleteEmItems(){ ArrayList emItemList = new ArrayList(); EnumItem enumItem; for(int i = 0; i < emTable.getRowCount(); i++){ if(((JCheckBox)emTable.getValueAt(i, 0)).isSelected()){ enumItem = ((EnumItemWrapper)emTable.getValueAt(i, 1)).enumItem; emItemList.add(enumItem); } } if(emItemList.size() == 0){ JOptionPane.showMessageDialog(this, "没有可删除的枚举", "未选枚举", JOptionPane.WARNING_MESSAGE); return; } Object[] options = { "Yes", "No" }; /*int option = JOptionPane .showOptionDialog(getInstance(), "确认是否删除业务类型\"" + btmName + "\"", "业务类型删除", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]); // int option = JOptionPane.showConfirmDialog(this, "是否确认删除", "删除确认", JOptionPane.YES_NO_CANCEL_OPTION); if(option != JOptionPane.YES_OPTION){ return; }*/ boolean usedFlag = false; for(int i = 0; i < emItemList.size(); i++){ EnumItem emItem = emItemList.get(i); String emName = emItem.name; int option = JOptionPane .showOptionDialog(getInstance(), "确认是否删除枚举类型\"" + emName + "\"", "枚举类型删除", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]); // int option = JOptionPane.showConfirmDialog(this, "是否确认删除", "删除确认", JOptionPane.YES_NO_CANCEL_OPTION); if(option != JOptionPane.YES_OPTION){ return; } if(isUsedByAttrib(emName)){ usedFlag = true; emItemList.remove(emItem); } } if(usedFlag){ JOptionPane.showMessageDialog(this, "存在被使用的枚举, 本次操作仅删除未被使用的枚举", "存在被使用的属性", JOptionPane.WARNING_MESSAGE); } try { boolean isSuccess = ServiceProvider.getOMDService().getEnumService().deleteEmItems(emItemList.toArray(new EnumItem[0])); if(isSuccess){ JOptionPane.showMessageDialog(this, "删除枚举成功", "删除成功", JOptionPane.INFORMATION_MESSAGE); }else{ JOptionPane.showMessageDialog(this, "删除枚举失败", "删除失败", JOptionPane.WARNING_MESSAGE); } initTableData(); updateEnumItemInfo(); } catch (VCIError e) { JOptionPane.showMessageDialog(this, "删除枚举失败", "删除失败", JOptionPane.WARNING_MESSAGE); e.printStackTrace(); } } /** * 更新枚举项的信息 */ private void updateEnumItemInfo(){ EnumItemPanel.getInstance().updateDataAndUI(getSelectedEnum(), flag); } public EnumItem getSelectedEnum(){ EnumItem enumItem = null; int row = emTable.getSelectedRow(); if(row >= 0){ enumItem = ((EnumItemWrapper)emTable.getValueAt(row, 1)).enumItem; } return enumItem; } public EnumItem[] getSelectedEnums(){ List enums = new ArrayList(); int[] rows = emTable.getSelectedRows(); for(int row : rows){ if(row >= 0){ EnumItem en = ((EnumItemWrapper)emTable.getValueAt(row, 1)).enumItem; enums.add(en); } } return enums.toArray(new EnumItem[0]); } private boolean isUsedByAttrib(String emName){ boolean flag = false; ArrayList iEMList = InterEMManager.getInstance().getInterEMList(); for(int i = 0; i < iEMList.size(); i++){ InterEM iEM = iEMList.get(i); if(iEM.isEnumItemUsed(emName)){ flag = true; break; } } return flag; } }