package com.vci.client.uif.engine.client.compare.dialog;
|
|
import java.awt.Dimension;
|
import java.awt.FlowLayout;
|
import java.awt.Insets;
|
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionListener;
|
import java.beans.PropertyChangeEvent;
|
import java.util.Vector;
|
import javax.swing.JComboBox;
|
import javax.swing.JLabel;
|
import javax.swing.JPanel;
|
import javax.swing.JToolBar;
|
import javax.swing.JTree;
|
import javax.swing.tree.DefaultTreeModel;
|
import javax.swing.tree.TreePath;
|
|
import com.vci.client.ui.swing.VCIOptionPane;
|
import com.vci.client.uif.engine.client.compare.Comparer;
|
import com.vci.client.uif.engine.client.compare.dialog.renderer.CompareTreeNodeIcons;
|
import com.vci.client.uif.engine.client.compare.dialog.treenode.CompareTreeNode;
|
import com.vci.client.uif.engine.client.compare.dialog.treenode.TreeNodeObject;
|
import com.vci.client.uif.engine.client.compare.enumeration.CompareState;
|
|
/**
|
* 工具条类
|
* @author VCI
|
*
|
*/
|
public class CompareDialogToolBar {
|
|
/**
|
* 父窗口
|
*/
|
private NodeCompareDialog owner;
|
|
/**
|
* 显示所有按钮
|
*/
|
private CompareDialogNoBorderButton showAll;
|
|
/**
|
* 显示差异
|
*/
|
private CompareDialogNoBorderButton showDefference;
|
|
/**
|
* 显示相同
|
*/
|
private CompareDialogNoBorderButton showSame;
|
|
/**
|
* 忽略按钮
|
*/
|
private CompareDialogNoBorderButton ignoredButton;
|
|
/**
|
* 更新link关系
|
*/
|
private CompareDialogNoBorderButton updateLinkButton;
|
|
/**
|
* 单条更新ds
|
*/
|
private CompareDialogNoBorderButton updateRightSingleButton;
|
|
/**
|
* 批量更新ds
|
*/
|
private CompareDialogNoBorderButton updateRightBatchButton;
|
|
/**
|
* 删除按钮
|
*/
|
private CompareDialogNoBorderButton deleteButton;
|
|
/**
|
* 全部展开
|
*/
|
private CompareDialogNoBorderButton expandAllButton;
|
|
/**
|
* 折叠所有
|
*/
|
private CompareDialogNoBorderButton collapseAllButton;
|
|
/**
|
* 升序按钮
|
*/
|
private CompareDialogNoBorderButton ascButton;
|
|
/**
|
* 降序按钮
|
*/
|
private CompareDialogNoBorderButton descButton;
|
|
/**
|
* 保存按钮
|
*/
|
private CompareDialogNoBorderButton saveButton;
|
|
/**
|
* 快速查找输入框
|
*/
|
private JComboBox quickLookBox;
|
|
/**
|
* 查找按钮
|
*/
|
private CompareDialogNoBorderButton findButton;
|
|
/**
|
* 导出按钮
|
*/
|
private CompareDialogNoBorderButton exportButton;
|
|
/**
|
* 查询历史
|
*/
|
private Vector<String> comboBoxItems = new Vector<String>();
|
|
/**
|
* 构造器
|
* @param owner 父窗口
|
*/
|
public CompareDialogToolBar(NodeCompareDialog owner) {
|
this.owner = owner;
|
this.comboBoxItems.add("");
|
}
|
|
/**
|
* 创建工具条
|
* @return
|
*/
|
public JPanel createToolBar(JTree lTree, JTree rTree, Comparer comparer) {
|
//默认是FlowLayout布局
|
JPanel toolBarPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
//过滤条件区
|
JToolBar queryToolBar = createQueryBar();
|
|
//编辑区
|
JToolBar editToolBar = createEditBar();
|
|
//便捷操作
|
JToolBar operationToolBar = createOtherBar();
|
|
//导入导出
|
JToolBar impexpToolBar = createImpExpBar();
|
|
//快速查询
|
JToolBar findToolBar = createFindBar();
|
|
toolBarPanel.add(queryToolBar);
|
if(comparer.isEditable()) {
|
toolBarPanel.add(editToolBar);
|
toolBarPanel.add(impexpToolBar);
|
}
|
toolBarPanel.add(operationToolBar);
|
toolBarPanel.add(findToolBar);
|
|
return toolBarPanel;
|
}
|
|
/**
|
* 创建查询工具条
|
* @return
|
*/
|
private JToolBar createQueryBar() {
|
//过滤条件区
|
JToolBar queryToolBar = new JToolBar("显示过滤器");
|
queryToolBar.setMargin(new Insets(1, 2, 1, 2));
|
//显示所有按钮
|
showAll = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("All20x15.png"), false);
|
showAll.setToolTipText("显示所有");
|
showAll.setClick(true);
|
//显示差异
|
showDefference = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("Difference20x15.png"), false);
|
showDefference.setToolTipText("显示差异项");
|
//显示相同
|
showSame = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("Same20x15.png"), false);
|
showSame.setToolTipText("显示相同项");
|
showAll.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
if (!showAll.isClick()){
|
if(filterTree(CompareDialogConstants.SHOW_ALL)){
|
showAll.setClick(true);
|
showDefference.setClick(false);
|
showSame.setClick(false);
|
owner.firePropertyChange(
|
CompareDialogProperties.BTN_IMPORT_RISES_VERSION, 0, 1);
|
}
|
}
|
}
|
});
|
showDefference.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
if (!showDefference.isClick()){
|
if(filterTree(CompareDialogConstants.SHOW_DIFFERENT)){
|
showDefference.setClick(true);
|
showAll.setClick(false);
|
showSame.setClick(false);
|
owner.firePropertyChange(
|
CompareDialogProperties.BTN_IMPORT_RISES_VERSION, 1, 0);
|
}
|
}
|
}
|
});
|
showSame.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
if (!showSame.isClick()){
|
if(filterTree(CompareDialogConstants.SHOW_SAME)){
|
showSame.setClick(true);
|
showAll.setClick(false);
|
showDefference.setClick(false);
|
owner.firePropertyChange(
|
CompareDialogProperties.BTN_IMPORT_RISES_VERSION, 1, 0);
|
}
|
}
|
}
|
});
|
queryToolBar.add(showAll);
|
queryToolBar.add(showDefference);
|
queryToolBar.add(showSame);
|
return queryToolBar;
|
}
|
|
/**
|
* 创建编辑工具条
|
* @return
|
*/
|
private JToolBar createEditBar() {
|
//编辑区
|
JToolBar editToolBar = new JToolBar("编辑");
|
editToolBar.setMargin(new Insets(1, 2, 1, 2));
|
//忽略按钮
|
ignoredButton = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("Ignored20x15.png"));
|
ignoredButton.setToolTipText("忽略/还原");
|
ignoredButton.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
owner.ignored();
|
}
|
});
|
ignoredButton.setVisible(false);
|
//更新链接
|
updateLinkButton = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("UpdateLink20x15.png"));
|
updateLinkButton.setToolTipText("将Excel中EBOM关系信息更新到数据库");
|
updateLinkButton.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent e) {
|
owner.updateLink();
|
}
|
});
|
//单条更新ds
|
updateRightSingleButton = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("UpdateRightSingle20x15.png"));
|
updateRightSingleButton.setToolTipText("将Excel中的EBOM信息更新到数据库");
|
updateRightSingleButton.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
owner.updateRightSingle();
|
}
|
});
|
//批量更新ds
|
updateRightBatchButton = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("UpdateRightBatch20x15.png"));
|
updateRightBatchButton.setToolTipText("将Excel当前选择节点及其子节点EBOM信息更新到数据库");
|
updateRightBatchButton.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
owner.updateRigthBatch();
|
}
|
});
|
//删除按钮
|
deleteButton = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("Delete20x15.png"));
|
deleteButton.setToolTipText("解除零部件与上级的关系");
|
deleteButton.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
owner.deleteAction();
|
}
|
});
|
//保存
|
saveButton = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("Save20x15.png"));
|
saveButton.setToolTipText("保存修改");
|
saveButton.setEnabled(false);
|
saveButton.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
owner.save();
|
}
|
});
|
|
editToolBar.add(ignoredButton);
|
editToolBar.add(updateLinkButton);
|
editToolBar.add(updateRightSingleButton);
|
editToolBar.add(updateRightBatchButton);
|
editToolBar.add(deleteButton);
|
editToolBar.addSeparator();
|
editToolBar.add(saveButton);
|
return editToolBar;
|
}
|
|
/**
|
* 其它按钮工具条
|
*/
|
private JToolBar createOtherBar() {
|
//便捷操作
|
JToolBar operationToolBar = new JToolBar("便捷操作");
|
operationToolBar.setMargin(new Insets(1, 2, 1, 2));
|
//升序排列
|
ascButton = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("ASC20x15.png"));
|
ascButton.setToolTipText("按升序排列");
|
ascButton.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent e) {
|
owner.sort(1);
|
}
|
});
|
//降序排列
|
descButton = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("DESC20x15.png"));
|
descButton.setToolTipText("按降序排列");
|
descButton.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent e) {
|
owner.sort(-1);
|
}
|
});
|
//全部展开
|
expandAllButton = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("ExpandAll20x15.png"));
|
expandAllButton.setToolTipText("展开所有");
|
expandAllButton.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
owner.expandAll();
|
}
|
});
|
//折叠所有
|
collapseAllButton = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("CollapseAll20x15.png"));
|
collapseAllButton.setToolTipText("折叠所有");
|
collapseAllButton.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
owner.collapseAll();
|
}
|
});
|
//TODO 判断按钮事件暂时没有实现
|
//operationToolBar.add(ascButton);
|
//operationToolBar.add(descButton);
|
operationToolBar.add(expandAllButton);
|
operationToolBar.add(collapseAllButton);
|
return operationToolBar;
|
}
|
|
/**
|
* 查询区域
|
* @return
|
*/
|
public JToolBar createFindBar() {
|
JToolBar findBar = new JToolBar("快速查找");
|
findBar.setMargin(new Insets(1, 2, 1, 2));
|
|
JLabel finkLabel = new JLabel("查找:");
|
//输入框
|
quickLookBox = new JComboBox(comboBoxItems);
|
quickLookBox.setToolTipText("输入查找字符");
|
quickLookBox.setMaximumRowCount(5);
|
quickLookBox.setEditable(true);
|
quickLookBox.setPreferredSize(new Dimension(
|
quickLookBox.getPreferredSize().width + 100,
|
quickLookBox.getPreferredSize().height));
|
quickLookBox.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent e) {
|
if(e.getActionCommand().equals("comboBoxEdited")) {
|
findButton.doClick();
|
}
|
}
|
});
|
//查找按钮
|
findButton = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("Find20x15.png"));
|
findButton.setToolTipText("查找");
|
findButton.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent e) {
|
find();
|
}
|
});
|
|
findBar.add(finkLabel);
|
findBar.add(quickLookBox);
|
findBar.addSeparator();
|
findBar.add(findButton);
|
return findBar;
|
}
|
|
/**
|
* 导入导出工具条
|
* @return
|
*/
|
private JToolBar createImpExpBar() {
|
JToolBar impexpToolBar = new JToolBar("导入导出");
|
impexpToolBar.setMargin(new Insets(1, 2, 1, 2));
|
|
//导出按钮
|
exportButton = new CompareDialogNoBorderButton(
|
CompareTreeNodeIcons.getInstance().getIcon("Export20x15.png"));
|
exportButton.setToolTipText("导出存在差异的零部件信息");
|
exportButton.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent e) {
|
owner.exportDifferences();
|
}
|
});
|
|
impexpToolBar.add(exportButton);
|
|
return impexpToolBar;
|
}
|
|
/**
|
* 过滤树节点
|
* @param type CompareDialogConstants.SHOW
|
*/
|
public boolean filterTree(int type) {
|
try {
|
filterTree(owner.lTree, owner.rTree, type);
|
} catch (Exception e) {
|
e.printStackTrace();
|
VCIOptionPane.showMessage(owner, e.getMessage());
|
return false;
|
}
|
return true;
|
}
|
|
/**
|
* 过滤树节点
|
* @param lTree 左侧树
|
* @param rTree 右侧树
|
* @param type 类型 CompareDialogConstants.SHOW
|
*/
|
public void filterTree(JTree lTree, JTree rTree, int type) throws Exception{
|
DefaultTreeModel lDtml = (DefaultTreeModel) lTree.getModel();
|
CompareTreeNode lRootNode = (CompareTreeNode) lDtml.getRoot();
|
DefaultTreeModel rDtml = (DefaultTreeModel) rTree.getModel();
|
CompareTreeNode rRootNode = (CompareTreeNode) rDtml.getRoot();
|
//得到真正的根节点
|
int rootCount = lRootNode.getChildCount();
|
for(int i = 0; i < rootCount; i++) {
|
CompareTreeNode lRoot = (CompareTreeNode) lRootNode.getChildAt(i);
|
CompareTreeNode rRoot = (CompareTreeNode) rRootNode.getChildAt(i);
|
filterTree(lDtml, lRoot, rDtml, rRoot, type);
|
}
|
//展开所有节点
|
owner.expandAll();
|
}
|
|
/**
|
* 树节点过滤
|
* @param lDtml 左侧树模型
|
* @param lNode 左侧树节点
|
* @param rDtml 右侧树模型
|
* @param rNode 右侧树节点
|
*/
|
private boolean filterTree(DefaultTreeModel lDtml, CompareTreeNode lNode,
|
DefaultTreeModel rDtml, CompareTreeNode rNode, int type) throws Exception{
|
//是有拥有子节点
|
boolean hasChild = false;
|
TreeNodeObject lTno = (TreeNodeObject) lNode.getUserObject();
|
TreeNodeObject rTno = (TreeNodeObject) rNode.getUserObject();
|
//基本校验
|
if(lTno.getChildNodeList().size() != rTno.getChildNodeList().size()) {
|
throw new Exception("节点结构异常,同一节点下子节点对象数量不同!["
|
+ lTno.toString() + "]、[" + rTno.toString() + "]");
|
}
|
//移除所有子节点
|
lNode.removeAllChildren();
|
rNode.removeAllChildren();
|
//遍历所有子节点
|
if(!lTno.getChildNodeList().isEmpty()) {
|
for(int i = 0; i < lTno.getChildNodeList().size(); i++) {
|
TreeNodeObject lChildObject = lTno.getChildNodeList().get(i);
|
TreeNodeObject rChildObject = rTno.getChildNodeList().get(i);
|
CompareTreeNode lChildNode = new CompareTreeNode(lChildObject);
|
CompareTreeNode rChildNode = new CompareTreeNode(rChildObject);
|
//是否需要添加子节点
|
boolean compare = compare(lChildObject, rChildObject, type);
|
if(!compare) {
|
compare = filterTree(lDtml, lChildNode, rDtml, rChildNode, type);
|
} else {
|
filterTree(lDtml, lChildNode, rDtml, rChildNode, type);
|
}
|
if(compare) {
|
//添加子节点
|
lNode.insert(lChildNode, lNode.getChildCount());
|
rNode.insert(rChildNode, rNode.getChildCount());
|
hasChild = true;
|
}
|
}
|
}
|
lDtml.reload(lNode);
|
rDtml.reload(rNode);
|
return hasChild;
|
}
|
|
/**
|
* 节点比较
|
* @param lTno 左侧树节点对象
|
* @param rTno 又侧树节点对象
|
* @param typ 比较类型
|
* @return
|
*/
|
private boolean compare(TreeNodeObject lTno, TreeNodeObject rTno, int type) {
|
if(type == CompareDialogConstants.SHOW_ALL) {
|
return true;
|
} else if(type == CompareDialogConstants.SHOW_SAME) {
|
if((lTno.getCompareState() == CompareState.SAME
|
&& rTno.getCompareState() == CompareState.SAME)
|
|| (lTno.getCompareState() == CompareState.ISNULL
|
&& rTno.getCompareState() == CompareState.ISNULL)) {
|
return true;
|
} else {
|
return false;
|
}
|
} else if(type == CompareDialogConstants.SHOW_DIFFERENT) {
|
if((lTno.getCompareState() == CompareState.SAME
|
&& rTno.getCompareState() == CompareState.SAME)
|
|| (lTno.getCompareState() == CompareState.ISNULL
|
&& rTno.getCompareState() == CompareState.ISNULL)) {
|
return false;
|
} else {
|
return true;
|
}
|
}
|
return true;
|
}
|
|
/**
|
* 查找
|
*/
|
private void find() {
|
//将查询关键字加入到集合中
|
String key = (String)quickLookBox.getSelectedItem();
|
if(!comboBoxItems.contains(key)) {
|
comboBoxItems.add(key);
|
quickLookBox.updateUI();
|
}
|
quickLook(owner.lTree, owner.rTree, key);
|
}
|
|
/**
|
* 快速查找
|
* @param lTree 左侧树
|
* @param rTree 右侧树
|
* @param key 查找字符
|
*/
|
public void quickLook(JTree lTree, JTree rTree, String key){
|
int startRow = 0;
|
int row = 1;
|
int endRow = lTree.getRowCount() - 1;
|
int selectionCount = lTree.getSelectionCount();
|
if(selectionCount != 0) {
|
int[] rows = lTree.getSelectionRows();
|
startRow = rows[0];
|
row = rows[0];
|
}
|
while(true) {
|
if(row == endRow) {
|
//如果当前选择的是最后一行则设置从头开始查找
|
row = 0;
|
} else {
|
row++;
|
}
|
//如果回到起点则停止
|
if(row == startRow) {
|
VCIOptionPane.showMessage(owner, "当前结构树中没有找到搜索文本!");
|
break;
|
}
|
TreePath etp = lTree.getPathForRow(row);
|
TreePath dtp = rTree.getPathForRow(row);
|
CompareTreeNode lDmtn = (CompareTreeNode) etp.getLastPathComponent();
|
CompareTreeNode rDmtn = (CompareTreeNode) dtp.getLastPathComponent();
|
TreeNodeObject lTno = (TreeNodeObject) lDmtn.getUserObject();
|
TreeNodeObject rTno = (TreeNodeObject) rDmtn.getUserObject();
|
if(lTno.toString().toLowerCase().contains(key.toLowerCase())) {
|
owner.selectTreeNode(row);
|
break;
|
} else if(rTno.toString().toLowerCase().contains(key.toLowerCase())) {
|
owner.selectTreeNode(row);
|
break;
|
}
|
}
|
}
|
|
/**
|
* TODO 按钮状态变更方法
|
* @param e
|
*/
|
public void btnPropertyChangeEvent(PropertyChangeEvent e) {
|
// String propertyName = e.getPropertyName();
|
// if(propertyName.equals(EditDialogProperties.BTN_SAVE)) {
|
// long newState = (Long) e.getNewValue();
|
// if(newState == 1) {
|
// saveButton.setEnabled(true);
|
// } else {
|
// saveButton.setEnabled(false);
|
// }
|
// } else if(propertyName.equals(EditDialogProperties.BTN_IMPORT_RISES_VERSION)) {
|
// long newState = (Long) e.getNewValue();
|
// if(newState == 1) {
|
// importButton.setEnabled(true);
|
// } else {
|
// importButton.setEnabled(false);
|
// }
|
// }
|
}
|
}
|