package com.vci.client.oq.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.JComboBox; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; import com.vci.client.common.oq.OQTool; import com.vci.client.omd.provider.BtmProvider; import com.vci.client.omd.provider.LinkTypeProvider; import com.vci.common.qt.object.OrderInfo; import com.vci.common.qt.object.QTConstants; import com.vci.common.qt.object.QueryTemplate; import com.vci.corba.omd.ltm.LinkType; public class OrderSetDialog extends JDialog{ /** * */ private static final long serialVersionUID = 4731919043979125023L; private TableWithAction orderSetTable ; private DefaultTableModel tableModel; private JPanel northPanel; private JPanel centerPanel; private JPanel southPanel; private JScrollPane scrollPane; private static final String[] tableHeader = {"排序字段", "排序方式", "优先级"}; private QueryTemplate qt = null; private LinkType link = null; private String btmName = null; List tempOrderInfoList = null; private JButton btnDelete; private JComboBox orderFieldComb; private JComboBox orderModeComb; private JTextField tfLevel; private JButton btnAdd; private JButton btnSave; private JButton btnCancel; private String direction; public OrderSetDialog(QueryTemplate qt_){ this.qt = qt_; String linkType = qt_.getLinkType(); if(linkType != null && !linkType.equals("")){ this.direction = qt_.getDirection(); try { this.link = LinkTypeProvider.getInstance().getLinkTypeByName(linkType); } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } tempOrderInfoList = OQTool.cloneOrderInfoList(qt.getOrderInfoList()); initUI(); initTable(); initOrderFieldComb(); addListener(); } public OrderSetDialog(String btmName_){ this.btmName = btmName_; tempOrderInfoList = new ArrayList(); initUI(); initTable(); initOrderFieldComb(); addListener(); } public OrderSetDialog(LinkType link_, String btmName_, String direction_) { this.link = link_; this.btmName = btmName_; this.direction = direction_; tempOrderInfoList = new ArrayList(); initUI(); initTable(); initOrderFieldComb(); addListener(); } 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(0, 0)); northPanel = new JPanel(); centerPanel = new JPanel(); southPanel = new JPanel(); this.add(northPanel, BorderLayout.NORTH); this.add(centerPanel, BorderLayout.CENTER); this.add(southPanel, BorderLayout.SOUTH); northPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); btnDelete = new JButton("删除"); northPanel.add(btnDelete); northPanel.add(new JLabel(" 排序字段:")); orderFieldComb = new JComboBox(); northPanel.add(orderFieldComb); northPanel.add(new JLabel(" 排序方式:")); orderModeComb = new JComboBox(); northPanel.add(orderModeComb); orderModeComb.addItem("升序"); orderModeComb.addItem("降序"); northPanel.add(new JLabel(" 优先级:")); tfLevel = new JTextField(10); tfLevel.setToolTipText("设定值越大优先级越高"); northPanel.add(tfLevel); orderFieldComb.setPreferredSize(new Dimension(150, 25)); btnAdd = new JButton("增加"); northPanel.add(btnAdd); centerPanel.setLayout(new BorderLayout(5, 5)); scrollPane = new JScrollPane(); centerPanel.add(scrollPane, BorderLayout.CENTER); tableModel = new TableModelWithCheckBox(tableHeader); orderSetTable = new TableWithAction(tableModel); scrollPane.setViewportView(orderSetTable); southPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); btnSave = new JButton("保存"); southPanel.add(btnSave); btnCancel = new JButton("取消"); southPanel.add(btnCancel); } private void initTable(){ orderSetTable.removeAll(); if(tempOrderInfoList == null){ return; } tableModel.setRowCount(tempOrderInfoList.size()); orderSetTable.setEditable(true); for (int i = 0; i < tempOrderInfoList.size(); i++) { OrderInfo orderInfo = tempOrderInfoList.get(i); orderSetTable.setValueAt(orderInfo.getOrderField(), i, 0); String orderMode = orderInfo.getOrderMode(); if(orderMode.equals(QTConstants.ORDERMODE_ASC)){ orderMode = "升序"; }else{ orderMode = "降序"; } orderSetTable.setValueAt(orderMode, i, 1); orderSetTable.setValueAt(orderInfo.getLevel(), i, 2); } orderSetTable.setEditable(false); orderSetTable.updateUI(); } private void addListener(){ btnDelete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(JOptionPane.YES_OPTION != JOptionPane.showConfirmDialog(getThis(), "确认删除", "确认删除", JOptionPane.YES_NO_OPTION)){ return; } int selectedRow = orderSetTable.getSelectedRow(); if(selectedRow == -1){ JOptionPane.showMessageDialog(getThis(), "未选中数据", "未选中数据", JOptionPane.WARNING_MESSAGE); return; } String orderField = (String) orderSetTable.getValueAt(selectedRow, 0); for(OrderInfo orderInfo : tempOrderInfoList){ String orderField_ = orderInfo.getOrderField(); if(orderField_.equals(orderField)){ tempOrderInfoList.remove(orderInfo); break; } } initTable(); initOrderFieldComb(); } }); btnAdd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String level = tfLevel.getText(); if(level.equals("")){ JOptionPane.showMessageDialog(getThis(), "请设定优先级", "请设定优先级", JOptionPane.WARNING_MESSAGE); return; } try{ int levelInt = Integer.valueOf(level); OrderInfo o = new OrderInfo(); o.setOrderField((String)orderFieldComb.getSelectedItem()); String orderMode = (String) orderModeComb.getSelectedItem(); if(orderMode.equals("升序")){ orderMode = QTConstants.ORDERMODE_ASC; }else{ orderMode = QTConstants.ORDERMODE_DESC; } o.setOrderMode(orderMode); o.setLevel(levelInt); tempOrderInfoList.add(o); initTable(); initOrderFieldComb(); }catch(NumberFormatException n){ JOptionPane.showMessageDialog(getThis(), "优先级必须设定为整数", "优先级必须设定为整数", JOptionPane.WARNING_MESSAGE); return; } } }); btnSave.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(qt != null){ qt.setOrderInfoList(tempOrderInfoList); } getThis().dispose(); } }); btnCancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { getThis().dispose(); } }); } /** * 业务类型的属性作为可选择的排序字段 * 过滤掉已经使用的排序字段 */ private void initOrderFieldComb(){ orderFieldComb.removeAllItems(); String btmType; if(btmName != null){ btmType = btmName; }else{ btmType = qt.getBtmType(); } if(link != null){ List abNames = LinkTypeProvider.getInstance().getAllAbNames(link); for(String abName : abNames){ List tempOrderFieldList = getTempOrderFieldList(); if(tempOrderFieldList == null || !tempOrderFieldList.contains(abName.toLowerCase())){ orderFieldComb.addItem(abName); } } String wrapper = "T_OID."; if(direction.equals(QTConstants.DIRECTION_OPPOSITE)){ wrapper = "F_OID."; } List btmAbNames = BtmProvider.getInstance().getAllAbNames(btmType); for(String abName : btmAbNames){ abName = wrapper + abName; List tempOrderFieldList = getTempOrderFieldList(); if(tempOrderFieldList == null || !tempOrderFieldList.contains(abName.toLowerCase())){ orderFieldComb.addItem(abName); } } }else{ List abNames = BtmProvider.getInstance().getAllAbNames(btmType); for(String abName : abNames){ List tempOrderFieldList = getTempOrderFieldList(); if(tempOrderFieldList == null || !tempOrderFieldList.contains(abName.toLowerCase())){ orderFieldComb.addItem(abName); } } } orderFieldComb.updateUI(); } /** * 通过临时排序信息列表获取临时排序字段列表 * @return */ private List getTempOrderFieldList(){ if(tempOrderInfoList == null){ return null; } List list = new ArrayList(); for(OrderInfo orderInfo : tempOrderInfoList){ list.add(orderInfo.getOrderField().toLowerCase()); } return list; } private JDialog getThis(){ return this; } public List getTempOrderInfoList(){ return tempOrderInfoList; } }