package com.vci.client.omd.attribpool.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.Iterator;
|
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.omd.attribpool.toOutside.InterAP;
|
import com.vci.client.omd.attribpool.toOutside.InterAPManager;
|
import com.vci.client.omd.attribpool.wrapper.AttribItemWrapper;
|
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.atm.AttribItem;
|
|
/**
|
* 属性池界面
|
* @author Administrator
|
*
|
*/
|
public class AttribPoolPanel extends JPanel{
|
|
/**
|
*
|
*/
|
private static final long serialVersionUID = -9000684015694561133L;
|
private static AttribPoolPanel attribPoolPanel = null;
|
private JButton btnCreate, btnModify, btnDelete, btnUseTo;
|
private JTextField tfFilter;
|
private ApTableModel tableModel;
|
private JXTable apTable;
|
private JPanel northPanel, centerPanel, tablePanel, mainPanel;
|
private JScrollPane scrollPane;
|
private AttribItem[] abItemArray;
|
private final int TABLE_HEADER_HEIGHT = 25;
|
private final int ROW_HEIGHT = 30;
|
//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 AttribPoolPanel(){
|
initUI();
|
initTableData();
|
addListener();
|
}
|
|
public static void cleanInstance(){
|
attribPoolPanel = null;
|
}
|
|
public static AttribPoolPanel getInstance(){
|
if(attribPoolPanel == null){
|
attribPoolPanel = new AttribPoolPanel();
|
}
|
return attribPoolPanel;
|
}
|
|
|
/**
|
* 初始化界面
|
*/
|
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);
|
northPanel.add(new JLabel("属性名"));
|
northPanel.add(tfFilter);
|
|
|
//centerPanel
|
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;
|
|
//tablePanel位于左侧,显示属性项列表
|
tablePanel = new JPanel();
|
//占用空间的透明边框(间距)
|
tablePanel.setBorder(new EmptyBorder(5, 5, 0, 5));
|
tablePanel.setAutoscrolls(true);
|
|
tablePanel.setLayout(new BorderLayout(5, 5));
|
|
scrollPane = new JScrollPane();
|
tablePanel.add(scrollPane, BorderLayout.CENTER);
|
|
tableModel = new ApTableModel();
|
apTable = new JXTable(tableModel);
|
TableColumn column = apTable.getColumn(0);
|
column.setCellEditor(new CheckBoxEditor(new JCheckBox()));
|
column.setCellRenderer(new CheckBoxRenderer());
|
column.setMinWidth(30);
|
column.setMaxWidth(30);
|
column.setPreferredWidth(30);
|
|
apTable.setRowHeight(ROW_HEIGHT);
|
apTable.setHorizontalScrollEnabled(true);
|
apTable.setHighlighters(HighlighterFactory.createAlternateStriping());
|
//排序后,引起其他页面的数据不显示
|
apTable.setSortable(false);
|
//设置表头高度
|
JTableHeader tableHeader = apTable.getTableHeader();
|
Dimension size = tableHeader.getPreferredSize();
|
size.height = TABLE_HEADER_HEIGHT;
|
tableHeader.setPreferredSize(size);
|
scrollPane.setViewportView(apTable);
|
|
//mainPanel位于右侧,用于响应创建,修改,查看应用范围
|
mainPanel = new JPanel();
|
mainPanel.setLayout(new BorderLayout(0, 0));
|
setMainPanel(0);
|
|
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, tablePanel, mainPanel);
|
splitPane.setDividerLocation(Toolkit.getDefaultToolkit().getScreenSize().width/2);
|
splitPane.setOneTouchExpandable(true);
|
centerPanel.add(splitPane, gb);
|
}
|
|
/**
|
* 设置apTable的数据
|
*/
|
public void initTableData(){
|
try {
|
apTable.removeAll();
|
String filter = tfFilter.getText();
|
abItemArray = APClient.getService().getAttribItems(filter, 1, 1);
|
tableModel.setRowCount(abItemArray.length);
|
//重新设置table的Cell的可编辑性
|
tableModel.setInitFlag(false);
|
for(int i = 0; i < abItemArray.length; i++){
|
AttribItem abItem = abItemArray[i];
|
apTable.setValueAt(new JCheckBox(), i, 0);
|
apTable.setValueAt(new AttribItemWrapper(abItem), i, 1);
|
apTable.setValueAt(abItem.vtDataType, i, 2);
|
apTable.setValueAt(abItem.defValue, i, 3);
|
apTable.setValueAt(abItem.description, i, 4);
|
}
|
//重新设置table的Cell的可编辑性
|
tableModel.setInitFlag(true);
|
apTable.updateUI();
|
} catch (VCIError e) {
|
e.printStackTrace();
|
}
|
}
|
private void addListener(){
|
btnCreate.addActionListener(new ActionListener() {
|
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
flag = 1;
|
AttribPanel.getInstance().updateDataAndUI(null, flag);
|
}
|
});
|
|
btnModify.addActionListener(new ActionListener() {
|
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
|
flag = 2;
|
int row = apTable.getSelectedRow();
|
if(row >= 0){
|
AttribItem abItem = ((AttribItemWrapper)apTable.getValueAt(row, 1)).abItem;
|
AttribPanel.getInstance().updateDataAndUI(abItem, flag);
|
}else{
|
JOptionPane.showMessageDialog(null, "请选中数据", "无数据", JOptionPane.WARNING_MESSAGE);
|
}
|
|
}
|
});
|
|
btnDelete.addActionListener(new ActionListener() {
|
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
deleteAbItems();
|
}
|
});
|
|
//查看应用范围
|
btnUseTo.addActionListener(new ActionListener() {
|
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
int row = apTable.getSelectedRow();
|
AttribItem abItem;
|
if(row >= 0){
|
abItem = ((AttribItemWrapper)apTable.getValueAt(row, 1)).abItem;
|
UsedToDialog usedToDialog = new UsedToDialog(abItem);
|
usedToDialog.setVisible(true);
|
}else{
|
JOptionPane.showMessageDialog(null, "请选中数据", "无数据", JOptionPane.WARNING_MESSAGE);
|
return;
|
}
|
}
|
});
|
//过滤器
|
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();
|
}
|
});
|
apTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
|
|
@Override
|
public void valueChanged(ListSelectionEvent e) {
|
if(flag == 1){
|
return;
|
}
|
int row = apTable.getSelectedRow();
|
if(row >= 0){
|
AttribItem abItem = ((AttribItemWrapper)apTable.getValueAt(row, 1)).abItem;
|
AttribPanel.getInstance().updateDataAndUI(abItem, flag);
|
}else{
|
}
|
}
|
});
|
|
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;
|
AttribPanel attPanel = AttribPanel.getInstance();
|
attPanel.updateDataAndUI(null, this.flag);
|
attPanel.addCancelActionListener(new ActionListener() {
|
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
attribPoolPanel.flag = 0;
|
}
|
});
|
|
mainPanel.add(attPanel, BorderLayout.CENTER);
|
}
|
|
/**
|
* 删除checkBox选中的属性项,
|
* 没有选中项时,提示
|
*/
|
private void deleteAbItems(){
|
ArrayList<AttribItem> abItemList = new ArrayList<AttribItem>();
|
for(int i = 0; i < apTable.getRowCount(); i++){
|
if(((JCheckBox)apTable.getValueAt(i, 0)).isSelected()){
|
abItemList.add(((AttribItemWrapper)apTable.getValueAt(i, 1)).abItem);
|
}
|
}
|
|
if(abItemList.size() == 0){
|
JOptionPane.showMessageDialog(this, "请选中要删除的属性项", "未选属性", JOptionPane.WARNING_MESSAGE);
|
return;
|
}
|
/*Object[] options = { "Yes", "No" };
|
int option = JOptionPane
|
.showOptionDialog(getInstance(), "确认是否删除业务类型\""
|
+ abName + "\"", "业务类型删除",
|
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 < abItemList.size(); i++){
|
AttribItem abItem = abItemList.get(i);
|
String abName = abItem.name;
|
Object[] options = { "Yes", "No" };
|
int option = JOptionPane
|
.showOptionDialog(getInstance(), "确认是否删除属性\""
|
+ abName + "\"", "属性池属性删除",
|
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(isUsedByBtmOrLt(abName)){
|
usedFlag = true;
|
abItemList.remove(abItem);
|
}
|
}
|
if(usedFlag){
|
JOptionPane.showMessageDialog(this, "存在被使用的属性, 本次操作仅删除未被使用的属性", "存在被使用的属性", JOptionPane.WARNING_MESSAGE);
|
}
|
try {
|
boolean isSuccess = APClient.getService().deleteAbItems(abItemList.toArray(new AttribItem[0]));
|
if(isSuccess){
|
JOptionPane.showMessageDialog(this, "删除属性项成功", "删除成功", JOptionPane.INFORMATION_MESSAGE);
|
}else{
|
JOptionPane.showMessageDialog(this, "删除属性项失败", "删除失败", JOptionPane.WARNING_MESSAGE);
|
}
|
initTableData();
|
AttribPanel.getInstance().updateDataAndUI(getSelectedAb(), 0);
|
} catch (VCIError e) {
|
JOptionPane.showMessageDialog(this, "删除属性项失败", "删除失败", JOptionPane.WARNING_MESSAGE);
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* 检查属性是否被业务类型, 或链接类型使用
|
* @param abName
|
* @return
|
*/
|
private boolean isUsedByBtmOrLt(String abName){
|
ArrayList<InterAP> interAPList = InterAPManager.getInstance().getInterAPList();
|
|
for(Iterator<InterAP> i = interAPList.iterator(); i.hasNext();){
|
InterAP interAp = i.next();
|
ArrayList<String> usedNameList = interAp.getUsedNameList(abName);
|
if(usedNameList.size() > 0){
|
return true;
|
}
|
}
|
return false;
|
}
|
|
/**
|
* 获取AbTable中选择的属性
|
* @return
|
*/
|
public AttribItem getSelectedAb(){
|
AttribItem ab = null;
|
int row = apTable.getSelectedRow();
|
if(row >= 0){
|
ab = ((AttribItemWrapper)apTable.getValueAt(row, 1)).abItem;
|
}
|
return ab;
|
}
|
|
/**
|
* 获取AbTable中选择的属性
|
* @return
|
*/
|
public AttribItem[] getSelectedAbs(){
|
List<AttribItem> abs = new ArrayList<AttribItem>();
|
int[] rows = apTable.getSelectedRows();
|
for(int row : rows){
|
if(row >= 0){
|
AttribItem ab = ((AttribItemWrapper)apTable.getValueAt(row, 1)).abItem;
|
abs.add(ab);
|
}
|
}
|
return abs.toArray(new AttribItem[0]);
|
}
|
}
|