package com.vci.client.omd.btm.ui; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; 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.JDialog; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.table.JTableHeader; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.HighlighterFactory; import com.vci.corba.omd.atm.AttribItem; import com.vci.corba.omd.btm.BtmItem; import com.vci.corba.omd.etm.EnumItem; import com.vci.corba.omd.lcm.Bound; import com.vci.corba.omd.lcm.LifeCycle; import com.vci.corba.omd.ltm.LinkType; import com.vci.corba.omd.stm.StatePool; import com.vci.client.common.providers.ServiceProvider; import com.vci.client.omd.attribpool.ui.APClient; import com.vci.client.omd.lifecycle.LifeCycleStart; import com.vci.client.omd.statepool.StatePoolStart; import com.vci.client.omd.versionrule.VRClientStart; import com.vci.corba.common.VCIError; import com.vci.corba.omd.vrm.VersionRule; import com.vci.omd.objects.OtherInfo; public class DeleteTypeDialog extends JDialog{ /** * */ private static final long serialVersionUID = 2315167245802578900L; private List bts; private List ltNames; private List exceptBts, exceptAbs, exceptEnums, exceptRev, exceptLCs, exceptStates; private JPanel centerPanel; private JPanel southPanel; private JButton btnDelete; private JButton btnCancel; private JXTable table; private TableModelWithCheckBox model; private final int TABLE_HEADER_HEIGHT = 25; private final int ROW_HEIGHT = 30; public DeleteTypeDialog(List bts, List ltNames, List exceptBts){ this.bts = bts; this.ltNames = ltNames; this.exceptBts = exceptBts; initUI(); addListener(); initData(); } private void initUI(){ this.setTitle("清楚类型框"); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setSize(screenSize.width/2, screenSize.height/2); this.setModal(true); this.setLocationRelativeTo(null); this.setResizable(false); this.setLayout(new BorderLayout()); centerPanel = new JPanel(); centerPanel.setLayout(new BorderLayout()); southPanel = new JPanel(); southPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); this.add(centerPanel, BorderLayout.CENTER); this.add(southPanel, BorderLayout.SOUTH); table = new JXTable(); model = new TableModelWithCheckBox(); model.setColumnCount(2); model.setColumnIdentifiers(new String[]{"模块名 ", "清除状态"}); table.setModel(model); table.setHorizontalScrollEnabled(true); table.setAutoscrolls(true); table.setSortable(false); table.setHighlighters(HighlighterFactory.createAlternateStriping()); table.setRowHeight(ROW_HEIGHT); //设置表头高度 JTableHeader tableHeader = table.getTableHeader(); Dimension size = tableHeader.getPreferredSize(); size.height = TABLE_HEADER_HEIGHT; tableHeader.setPreferredSize(size); centerPanel.add(new JScrollPane(table), BorderLayout.CENTER); btnDelete = new JButton("清除"); btnCancel = new JButton("关闭"); southPanel.add(btnDelete); southPanel.add(btnCancel); } private void initData(){ // 重新设置table的Cell的可编辑性 model.setInitFlag(false); model.setRowCount(7); table.setValueAt("业务类型", 0, 0); table.setValueAt("未清除", 0, 1); table.setValueAt("链接类型", 1, 0); table.setValueAt("未清除", 1, 1); table.setValueAt("属性池", 2, 0); table.setValueAt("未清除", 2, 1); table.setValueAt("枚举类型", 3, 0); table.setValueAt("未清除", 3, 1); table.setValueAt("生命周期", 4, 0); table.setValueAt("未清除", 4, 1); table.setValueAt("状态池", 5, 0); table.setValueAt("未清除", 5, 1); table.setValueAt("版本规则", 6, 0); table.setValueAt("未清除", 6, 1); // 重新设置table的Cell的可编辑性 model.setInitFlag(true); } private void addListener() { btnDelete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int option = JOptionPane.showConfirmDialog(getInstance(), "确认删除所选类型数据?该操作不可回滚", "删除确认框", JOptionPane.YES_NO_OPTION); if(option != JOptionPane.YES_OPTION){ return; } List delBtList = getDelBtList(); List delAbList = getDelAbList(); List delEnumList = getDelEnumList(); List delLCList = getDelLCList(); List delStateList = getDelSPList(); List delVRList = getDelVRList(); try { BtmClient.getService().deleteBtsAndTables(delBtList.toArray(new BtmItem[0])); updateTable(0, 1, "成功"); } catch (VCIError e1) { e1.printStackTrace(); updateTable(0, 1, "失败"); } try { ServiceProvider.getOMDService().getLinkTypeService().deleteLtsAndTables(ltNames.toArray(new LinkType[0])); updateTable(1, 1, "成功"); } catch (VCIError e1) { e1.printStackTrace(); updateTable(1, 1, "失败"); } try { AttribItem[] abs = APClient.getService().getAttribItemsByNames(delAbList.toArray(new String[0])); APClient.getService().deleteAbItems(abs); updateTable(2, 1, "成功"); } catch (VCIError e1) { e1.printStackTrace(); updateTable(2, 1, "失败"); } try { ServiceProvider.getOMDService().getEnumService().deleteEmItems(delEnumList.toArray(new EnumItem[0])); updateTable(3, 1, "成功"); } catch (VCIError e1) { e1.printStackTrace(); updateTable(3, 1, "失败"); } try { LifeCycleStart.getService().deleteLifeCycles(delLCList.toArray(new LifeCycle[0])); updateTable(4, 1, "成功"); } catch (VCIError e1) { e1.printStackTrace(); updateTable(4, 1, "失败"); } try { StatePoolStart.getService().deleteStatePools(delStateList.toArray(new StatePool[0])); updateTable(5, 1, "成功"); } catch (VCIError e1) { e1.printStackTrace(); updateTable(5, 1, "失败"); } try { VRClientStart.getService().deleteVersionRules(delVRList.toArray(new VersionRule[0])); updateTable(6, 1, "成功"); } catch (VCIError e1) { e1.printStackTrace(); updateTable(6, 1, "失败"); } JOptionPane.showMessageDialog(getInstance(), "清楚数据完成", "清楚数据完成", JOptionPane.INFORMATION_MESSAGE); } }); btnCancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { dipose_(); } }); } /** * 获取需要删除的状态池 * @return */ private List getDelSPList() { List list = new ArrayList(); StatePool[] states = null; try { states = StatePoolStart.getService().getStatePools(); } catch (VCIError e) { e.printStackTrace(); } if(states != null){ for(StatePool state : states){ String name = state.name; if(name != null && !name.equals("") && !exceptStates.contains(name)){ list.add(state); } } } return list; } /** * 获取需要删除的生命周期 * @return */ private List getDelLCList() { List list = new ArrayList(); exceptLCs = new ArrayList(); exceptStates = new ArrayList(); for(String btName : exceptBts){ try { BtmItem bt = BtmClient.getService().getBtmItemByName(btName); String lcName = bt.lifeCycle; if(lcName != null && !lcName.equals("") && !exceptLCs.contains(lcName)){ exceptLCs.add(lcName); } } catch (VCIError e) { e.printStackTrace(); } } LifeCycle[] lcs = null; try { lcs = LifeCycleStart.getService().getLifeCycles(); } catch (VCIError e) { e.printStackTrace(); } if(lcs != null){ for(LifeCycle lc : lcs){ String name = lc.name; if(name != null && !name.equals("") && !exceptLCs.contains(name)){ list.add(lc); }else{ //保留的状态池 Bound[] bounds = lc.bounds; for(Bound bound : bounds){ String sName = bound.name; exceptStates.add(sName); } } } } return list; } /** * 获取需要删除的版本规则 * @return */ private List getDelVRList() { List list = new ArrayList(); exceptRev = new ArrayList(); for(String btName : exceptBts){ try { BtmItem bt = BtmClient.getService().getBtmItemByName(btName); String revName = bt.revRuleName; if(revName != null && !revName.equals("") && !exceptRev.contains(revName)){ exceptRev.add(revName); } } catch (VCIError e) { e.printStackTrace(); } } VersionRule[] revs = null; try { revs = VRClientStart.getService().getVersionRules(); } catch (VCIError e) { e.printStackTrace(); } if(revs != null){ for(VersionRule rev : revs){ String name = rev.name; if(name != null && !name.equals("") && !exceptRev.contains(name)){ list.add(rev); } } } return list; } /** * 获取需要删除的枚举 * @return */ private List getDelEnumList() { List list = new ArrayList(); try { //依据保留的类型构造保留的属性 exceptEnums = new ArrayList(); EnumItem[] emItems = ServiceProvider.getOMDService().getEnumService().getEmItems("", 0, 0); AttribItem[] abs = APClient.getService().getAttribItemsByNames(exceptAbs.toArray(new String[0])); for(AttribItem ab : abs){ OtherInfo otherInfo = OtherInfo.getOtherInfoByText(ab.other); String enumName = otherInfo.getEnumName(); if(enumName != null && !enumName.equals("") && !exceptEnums.contains(enumName)){ exceptEnums.add(enumName); } } for(EnumItem em : emItems){ if(!exceptEnums.contains(em.name)){ list.add(em); } } } catch (VCIError e) { e.printStackTrace(); } return list; } /** * 获取需要删除的属性 */ private List getDelAbList() { List list = new ArrayList(); AttribItem[] attribItems = null; try { attribItems = APClient.getService().getAttribItems("", 0, 0); } catch (VCIError e) { e.printStackTrace(); } //依据保留的类型构造保留的属性 exceptAbs = new ArrayList(); for(String except : exceptBts){ String[] btmApNameArray = null; try { btmApNameArray = BtmClient.getService().getBtmApNameArray(except); } catch (VCIError e) { e.printStackTrace(); } if(btmApNameArray != null){ for(String abName : btmApNameArray){ if(!exceptAbs.contains(abName)){ exceptAbs.add(abName); } } } } //构造可删除的属性 if(attribItems != null){ for(AttribItem ab : attribItems){ String abName = ab.name; if(!exceptAbs.contains(abName)){ list.add(abName); } } } return list; } /** * 获取需要删除的业务类型 */ private List getDelBtList() { List list = new ArrayList(); for(BtmItem bt : bts){ boolean exceptFlag = false; for(String except : exceptBts){ if(except.equalsIgnoreCase(bt.name)){ exceptFlag = true; break; } } if(!exceptFlag){ list.add(bt); } } return list; } /** * 更新table单元格的值 * @param row * @param column * @param value */ private void updateTable(int row, int column, String value) { // 重新设置table的Cell的可编辑性 model.setInitFlag(false); table.setValueAt(value, row, column); model.setInitFlag(true); table.updateUI(); } private void dipose_(){ this.dispose(); } private JDialog getInstance(){ return this; } }