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<EnumItem> emItemList = new ArrayList<EnumItem>();
|
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<EnumItem> enums = new ArrayList<EnumItem>();
|
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<InterEM> 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;
|
}
|
}
|