package com.vci.client.portal.UI;
|
|
import java.awt.BorderLayout;
|
import java.awt.Component;
|
import java.awt.FlowLayout;
|
import java.awt.GridBagConstraints;
|
import java.awt.GridBagLayout;
|
import java.awt.Insets;
|
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.JLabel;
|
import javax.swing.JPanel;
|
import javax.swing.JScrollPane;
|
import javax.swing.JTextField;
|
import javax.swing.JTree;
|
import javax.swing.border.EmptyBorder;
|
import javax.swing.tree.TreePath;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import com.vci.client.LogonApplication;
|
import com.vci.client.framework.rightConfig.modelConfig.ModuleTreeCellRenderer;
|
import com.vci.client.portal.NewUI.UICloneDestDialog;
|
import com.vci.client.portal.utility.UITools;
|
import com.vci.client.ui.swing.VCIOptionPane;
|
import com.vci.client.ui.tree.CheckBoxTreeManager;
|
import com.vci.client.ui.tree.VCIBaseTree;
|
import com.vci.client.ui.tree.VCIBaseTreeModel;
|
import com.vci.client.ui.tree.VCIBaseTreeNode;
|
import com.vci.common.utility.ObjectUtility;
|
import com.vci.corba.common.VCIError;
|
import com.vci.corba.omd.btm.BtmItem;
|
import com.vci.corba.portal.data.PLCommandParameter;
|
import com.vci.corba.portal.data.PLPageDefination;
|
import com.vci.corba.portal.data.PLUILayout;
|
import com.vci.corba.portal.data.PLTabButton;
|
import com.vci.corba.portal.data.PLTabPage;
|
|
public class CloneDialog extends JDialog {
|
|
/**
|
*
|
*/
|
private static final long serialVersionUID = 1L;
|
|
private final JPanel contentPanel = new JPanel();
|
|
private VCIBaseTree tree;
|
private VCIBaseTreeModel treeModel;
|
private CheckBoxTreeManager treeManager;
|
private VCIBaseTreeNode rootNode;
|
private JScrollPane scrollPane ;
|
|
private JTree btTree;
|
|
private String btname;
|
//add by guo
|
//private boolean isExist = true;
|
//private int num = 0;
|
|
private String plUILayoutId= "";
|
List<String> nodeList = new ArrayList<String>();
|
//private boolean cloasflag = false;
|
//by zhangxg
|
private Object clonedestObject;
|
private JTextField textField;
|
private PLUILayout plUILayout;
|
private JPanel jpanel;
|
|
private JLabel label;
|
private JTextField plcode;
|
private JLabel label_1;
|
private JTextField plname;
|
|
private JLabel label_2;
|
|
private PLUILayout[] plUILayouts;
|
|
// public boolean isCloasflag() {
|
// return cloasflag;
|
// }
|
//
|
// public void setCloasflag(boolean cloasflag) {
|
// this.cloasflag = cloasflag;
|
// }
|
|
/**
|
* Create the dialog.
|
*/
|
public CloneDialog(JTree btTree, PLUILayout plUILayout) {
|
super(LogonApplication.frame,true);
|
this.btTree = btTree;
|
this.plUILayout=plUILayout;
|
init();
|
// initTreeNode();
|
initCloneView();
|
this.setLocationRelativeTo(null);
|
}
|
|
private void init() {
|
setLocationRelativeTo(LogonApplication.frame);
|
setSize(400, 150);
|
//by zhangxg
|
//28
|
getContentPane().setLayout(new BorderLayout());
|
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
|
getContentPane().add(contentPanel, BorderLayout.CENTER);
|
GridBagLayout gbl_contentPanel = new GridBagLayout();
|
gbl_contentPanel.columnWidths = new int[]{0, 0, 0, 0, 0, 0};
|
gbl_contentPanel.rowHeights = new int[]{0, 0, 0, 0};
|
gbl_contentPanel.columnWeights = new double[]{0.0, 0.0, 1.0, 0.0, 1.0, Double.MIN_VALUE};
|
gbl_contentPanel.rowWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE};
|
contentPanel.setLayout(gbl_contentPanel);
|
{
|
label_2 = new JLabel("克隆目标");
|
GridBagConstraints gbc_label_2 = new GridBagConstraints();
|
gbc_label_2.insets = new Insets(0, 0, 5, 5);
|
gbc_label_2.gridx = 1;
|
gbc_label_2.gridy = 0;
|
contentPanel.add(label_2, gbc_label_2);
|
}
|
{
|
textField = new JTextField();
|
textField.setFocusable(false);
|
textField.setEditable(false);
|
GridBagConstraints gbc_textField = new GridBagConstraints();
|
gbc_textField.fill = GridBagConstraints.HORIZONTAL;
|
gbc_textField.insets = new Insets(0, 0, 0, 5);
|
gbc_textField.gridx = 2;
|
gbc_textField.gridy = 0;
|
contentPanel.add(textField, gbc_textField);
|
textField.setColumns(10);
|
}
|
{
|
JButton clonedestbutton = new JButton("克隆目标");
|
clonedestbutton.setToolTipText("*如果选择克隆目标,则克隆到选择的类型下,如果没有选择克隆目标,则克隆到当前类型下");
|
GridBagConstraints gbc_clonedestbutton = new GridBagConstraints();
|
gbc_clonedestbutton.anchor = GridBagConstraints.NORTH;
|
gbc_clonedestbutton.gridx = 3;
|
gbc_clonedestbutton.gridy = 0;
|
contentPanel.add(clonedestbutton, gbc_clonedestbutton);
|
clonedestbutton.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent arg0) {
|
UICloneDestDialog clonedestdia = new UICloneDestDialog();
|
clonedestdia.setVisible(true);
|
clonedestObject = clonedestdia.getTreeObject();
|
if(clonedestObject instanceof BtmItem){
|
textField.setText(((BtmItem)clonedestObject).name);
|
}
|
}
|
});
|
}
|
{
|
label = new JLabel("UI名称 ");
|
GridBagConstraints gbc_label = new GridBagConstraints();
|
gbc_label.insets = new Insets(0, 0, 5, 5);
|
gbc_label.anchor = GridBagConstraints.EAST;
|
gbc_label.gridx = 1;
|
gbc_label.gridy = 1;
|
contentPanel.add(label, gbc_label);
|
}
|
{
|
plname = new JTextField();
|
GridBagConstraints gbc_textField = new GridBagConstraints();
|
gbc_textField.fill = GridBagConstraints.HORIZONTAL;
|
gbc_textField.insets = new Insets(0, 0, 5, 5);
|
gbc_textField.gridx = 2;
|
gbc_textField.gridy = 1;
|
gbc_textField.gridwidth = 2;
|
contentPanel.add(plname, gbc_textField);
|
plname.setColumns(40);
|
}
|
{
|
label_1 = new JLabel("UI上下文");
|
GridBagConstraints gbc_label_1 = new GridBagConstraints();
|
gbc_label_1.anchor = GridBagConstraints.EAST;
|
gbc_label_1.insets = new Insets(0, 0, 5, 5);
|
gbc_label_1.gridx = 1;
|
gbc_label_1.gridy = 2;
|
contentPanel.add(label_1, gbc_label_1);
|
}
|
{
|
plcode = new JTextField();
|
GridBagConstraints gbc_textField_1 = new GridBagConstraints();
|
gbc_textField_1.insets = new Insets(0, 0, 5, 0);
|
gbc_textField_1.fill = GridBagConstraints.HORIZONTAL;
|
gbc_textField_1.gridx = 2;
|
gbc_textField_1.gridy = 2;
|
gbc_textField_1.gridwidth = 2;
|
contentPanel.add(plcode, gbc_textField_1);
|
plcode.setColumns(40);
|
}
|
|
{
|
JPanel buttonPane = new JPanel();
|
buttonPane.setLayout(new FlowLayout(FlowLayout.CENTER));
|
getContentPane().add(buttonPane, BorderLayout.SOUTH);
|
{
|
JButton okButton = new JButton("确定");
|
okButton.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent arg0) {
|
// Component[] components = contentPanel.getComponents();
|
// String[] nameCode =new String[components.length];
|
// for (int i=0;i<components.length;i++) {
|
// if(components[i] instanceof JTextField){
|
// String text = ((JTextField) components[i]).getText();
|
// nameCode[i]=text;
|
// }
|
// }
|
// plUILayout.plName=nameCode[4];
|
// plUILayout.plCode=nameCode[6];
|
plUILayout.plName = plname.getText();
|
plUILayout.plCode = plcode.getText();
|
|
String destType = textField.getText();
|
//if (nameCode[1] != null) {
|
if (destType != null) {
|
if (!cloneSave())
|
return;
|
}else{
|
VCIOptionPane.showMessage(LogonApplication.frame, "请选择要克隆的节点!");
|
return;
|
}
|
//cloasflag = true;
|
dispose();
|
}
|
});
|
buttonPane.add(okButton);
|
getRootPane().setDefaultButton(okButton);
|
}
|
{
|
JButton cancelButton = new JButton("关闭");
|
cancelButton.addActionListener(new ActionListener() {
|
public void actionPerformed(ActionEvent arg0) {
|
dispose();
|
}
|
});
|
buttonPane.add(cancelButton);
|
}
|
}
|
}
|
|
public void initCloneView() {
|
|
PLUILayout obj=plUILayout;
|
btname = obj.plRelatedType;
|
try {
|
plUILayouts = UITools.getService().getPLUILayoutsByRelatedType(btname);
|
} catch (VCIError e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
|
initCodeName(obj);
|
plname.setText(obj.plName);
|
plcode.setText(obj.plCode);
|
|
|
}
|
public void initTreeNode(){
|
rootNode = new VCIBaseTreeNode("区域", "root");
|
treeModel = new VCIBaseTreeModel(rootNode);
|
tree = new VCIBaseTree(treeModel, new ModuleTreeCellRenderer());
|
|
TreePath path = btTree.getSelectionPath();//
|
if(path==null){
|
VCIOptionPane.showMessage(LogonApplication.frame, "请选择一个类型!");
|
return;
|
}
|
VCIBaseTreeNode node = (VCIBaseTreeNode) path.getLastPathComponent();
|
BtmItem obj = (BtmItem) node.getObj();
|
btname = obj.name;
|
try {
|
PLUILayout[] plpagelayoutdefinations = UITools.getService().getPLUILayoutsByRelatedType(btname);
|
for(int i=0;i<plpagelayoutdefinations.length;i++){
|
VCIBaseTreeNode treeNode = new VCIBaseTreeNode(plpagelayoutdefinations[i].plName, plpagelayoutdefinations[i]);
|
treeModel.insertNodeInto(treeNode, rootNode,rootNode.getChildCount());
|
insertNode(plpagelayoutdefinations, i, treeNode, (short)1);
|
insertNode(plpagelayoutdefinations, i, treeNode, (short)2);
|
insertNode(plpagelayoutdefinations, i, treeNode, (short)3);
|
}
|
} catch (VCIError e) {
|
e.printStackTrace();
|
}
|
tree.setModel(treeModel);
|
treeManager = new CheckBoxTreeManager(tree);
|
scrollPane.getViewport().removeAll();
|
scrollPane.setViewportView(tree);
|
scrollPane.repaint();
|
}
|
|
private PLTabPage[] insertNode(
|
PLUILayout[] plpagelayoutdefinations, int i,
|
VCIBaseTreeNode treeNode, short disType) throws VCIError {
|
PLTabPage[] o = UITools.getService().getTabPagesByContextIdAndType(plpagelayoutdefinations[i].plOId, disType);
|
for(int j=0;j<o.length;j++){
|
VCIBaseTreeNode areaNode = new VCIBaseTreeNode(o[j].plName, o[j]);
|
treeModel.insertNodeInto(areaNode, treeNode,treeNode.getChildCount());
|
}
|
return o;
|
}
|
|
|
@SuppressWarnings("unused")
|
private boolean cloneSave(){
|
String piod = plUILayout.plOId;
|
if(!(plUILayout instanceof PLUILayout)){
|
return false;
|
}
|
|
if (!saveUILayoutDefination(plUILayout)) {
|
return false;
|
}
|
|
try {
|
PLTabPage[] pages = UITools.getService().getPLTabPagesByPageDefinationOId(piod);// .getTabPagesByContextIdAndType(piod,2); //控制区节点及其子节点的克隆
|
if(pages == null){
|
return true;
|
}
|
|
for (PLTabPage page : pages) {
|
savePlpageLayoutDefinationRelation(page);
|
}
|
|
//add by caill start 2016.8.15 补充操作区和导航区克隆时的拷贝过程
|
// PLTabPage[] o2 = UITools.getService().getTabPagesByContextIdAndType(piod,3); //操作区节点及其子节点的克隆
|
// if(!o2.equals("")){
|
// for (PLTabPage plTabPage : o2) {
|
// if(plTabPage instanceof PLTabPage){
|
// savePlpageLayoutDefinationRelation(plTabPage);
|
// }
|
// }
|
// }
|
// PLTabPage[] o3 = UITools.getService().getTabPagesByContextIdAndType(piod,1); //导航区节点及其子节点的克隆
|
// if(!o2.equals("")){
|
// for (PLTabPage plTabPage : o3) {
|
// if(plTabPage instanceof PLTabPage){
|
// savePlpageLayoutDefinationRelation(plTabPage);
|
// }
|
// }
|
// }
|
//add by caill end
|
} catch (VCIError e) {
|
e.printStackTrace();
|
}
|
|
return true;
|
}
|
|
// private void getNextNode(VCIBaseTreeNode node,boolean isUp){
|
// if(isUp){//向上获取,存储每个上级模块的权限值
|
// VCIBaseTreeNode parentNode = (VCIBaseTreeNode)node.getParent();
|
// while(!"root".equals(parentNode.getObj())){
|
// Object obj = parentNode.getObj();
|
// Object userObject = parentNode.getUserObject();
|
// if(!nodeList.contains((String)userObject)){
|
// nodeList.add((String)userObject);
|
// saveUILayoutDefination(obj);
|
// }
|
// parentNode = (VCIBaseTreeNode)parentNode.getParent();
|
// }
|
// }else{//向下获取,无需判断是否选中,但需要判断其子级是否是操作
|
// //先存储当前节点
|
// Object obj = node.getObj();
|
// if(obj instanceof PLUILayout){
|
// saveUILayoutDefination(obj);
|
// }else if(obj instanceof PLTabPage){
|
// savePlpageLayoutDefinationRelation(obj);
|
// }
|
// for(int i = 0;i < node.getChildCount();i++){
|
// //对每个子向下递归遍历
|
// getNextNode((VCIBaseTreeNode)node.getChildAt(i),false);
|
// }
|
//
|
// }
|
// }
|
|
private boolean saveUILayoutDefination(Object object) {
|
PLUILayout obj = (PLUILayout) object;
|
obj.plOId = ObjectUtility.getNewObjectID36();
|
if (!checkCodeName(obj)) {
|
VCIOptionPane.showMessage(LogonApplication.frame, "UI上下文代号存在重复,请修改代号!");
|
return false;
|
}
|
|
plUILayoutId = obj.plOId;
|
|
if (clonedestObject != null) {
|
if (clonedestObject instanceof BtmItem) {
|
BtmItem ob = (BtmItem) clonedestObject;
|
obj.plRelatedType = ob.name;
|
}
|
}
|
|
try {
|
return UITools.getService().savePLUILayout(obj);
|
} catch (VCIError e) {
|
e.printStackTrace();
|
return false;
|
}
|
}
|
|
private void savePlpageLayoutDefinationRelation(Object obj) {
|
PLTabPage tabPage = (PLTabPage)obj;
|
try {
|
|
PLPageDefination[] pLPageDefinations = UITools.getService().getPLPageDefinationsByPageContextOId(tabPage.plOId);
|
|
tabPage.plOId = ObjectUtility.getNewObjectID36();
|
tabPage.plContextOId = plUILayoutId;
|
//add by caill start 2016.8.15 导航区、控制区、操作区在没有子节点的情况下的克隆
|
if(pLPageDefinations.length==0){
|
UITools.getService().savePLTabPage(tabPage);
|
}
|
//add by caill end
|
for(int j=0;j<pLPageDefinations.length;j++){
|
PLPageDefination plPageDef = pLPageDefinations[j];
|
|
UITools.getService().savePLTabPage(tabPage);
|
PLTabButton[] pLTabButtons = UITools.getService().getPLTabButtonsByTableOId(plPageDef.plOId);
|
|
plPageDef.plOId = ObjectUtility.getNewObjectID36();
|
plPageDef.plTabPageOId = tabPage.plOId;
|
UITools.getService().savePLPageDefination(plPageDef);
|
|
for(int b=0;b<pLTabButtons.length;b++){
|
PLTabButton plTabButton = pLTabButtons[b];
|
PLCommandParameter[] pLCommandParameters = UITools.getService().getPLCommandParametersByCommandOId(plTabButton.plOId);
|
|
plTabButton.plOId = ObjectUtility.getNewObjectID36();
|
plTabButton.plTableOId = plPageDef.plOId;
|
UITools.getService().savePLTabButton(plTabButton);
|
|
for(int c=0;c<pLCommandParameters.length;c++){
|
final PLCommandParameter plCommandParameter = pLCommandParameters[c];
|
plCommandParameter.plOId = ObjectUtility.getNewObjectID36();
|
plCommandParameter.plCommandOId = plTabButton.plOId;
|
UITools.getService().savePLCommandParameter(plCommandParameter);
|
}
|
}
|
}
|
} catch (VCIError e) {
|
e.printStackTrace();
|
}
|
}
|
//add by guo,把对象的上下文编码、名称修改,在返回check方法进行检验
|
// public void changeObj(PLUILayout obj, boolean isExist, String names){
|
// char st = names.charAt((names.indexOf(")"))-1);
|
// num = Integer.parseInt(st + "");
|
// num +=1;
|
// isExist = true;
|
// check(obj, isExist);
|
// }
|
|
//add by guo,给克隆出来的对象的上下文编码和名称进行校验,避免重复
|
public void initCodeName(PLUILayout obj){
|
if (plUILayouts == null)
|
return;
|
|
int length = plUILayouts.length;
|
|
String name = obj.plName;
|
String code = obj.plCode;
|
|
List<String> lstCode = new ArrayList<String>();
|
List<String> lstName = new ArrayList<String>();
|
|
for (int i =0;i<length;i++){//循环节点的UI上文
|
lstCode.add(plUILayouts[i].plCode);
|
lstName.add(plUILayouts[i].plName);
|
}
|
|
int num = -1;
|
while (true) {
|
if(lstCode.contains(code) && lstName.contains(name)){
|
num++;
|
name = obj.plName + "_copy(" + num + ")";
|
code = obj.plCode + "_copy(" + num + ")";
|
} else {
|
break;
|
}
|
}
|
|
obj.plCode = code;
|
obj.plName = name;
|
}
|
|
public boolean checkCodeName(PLUILayout obj){
|
if (plUILayouts == null)
|
return false;
|
int length = plUILayouts.length;
|
|
String code = plcode.getText();
|
String name = plname.getText();
|
|
if (StringUtils.isBlank(name) || StringUtils.isBlank(code))
|
|
for (int i =0;i<length;i++){//循环节点的UI上文
|
if (plUILayouts[i].plCode.equalsIgnoreCase(code))
|
return false;
|
}
|
|
obj.plCode = code;
|
obj.plName = plname.getText();
|
|
return true;
|
}
|
|
}
|