commit 5062fa10adadc1a4fafa571e86518d95fe5e0b40 Author: hongcj Date: Fri Dec 22 18:12:12 2023 +0800 鎻愪氦 diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..ab8d28e --- /dev/null +++ b/.classpath @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..73f69e0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..bf758ad --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/applauncher.xml b/.idea/libraries/applauncher.xml new file mode 100644 index 0000000..96785cd --- /dev/null +++ b/.idea/libraries/applauncher.xml @@ -0,0 +1,443 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/plugins.xml b/.idea/libraries/plugins.xml new file mode 100644 index 0000000..1dff864 --- /dev/null +++ b/.idea/libraries/plugins.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..ba93b15 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..88bd588 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 0000000..98418c1 --- /dev/null +++ b/.project @@ -0,0 +1,28 @@ + + + com.connor.kwc.plm + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..9f6ece8 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF new file mode 100644 index 0000000..e949aa7 --- /dev/null +++ b/META-INF/MANIFEST.MF @@ -0,0 +1,38 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: kwc.plm +Bundle-SymbolicName: com.connor.kwc.plm;singleton:=true +Bundle-Version: 1.0.0 +Bundle-Vendor: CONNOR +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime;bundle-version="3.15.100", + org.eclipse.osgi.services;bundle-version="3.7.100", + org.eclipse.osgi.util;bundle-version="3.5.100", + com.teamcenter.rac.util;bundle-version="14000.3.0", + com.teamcenter.rac.aifrcp;bundle-version="14000.3.0", + TcSoaCoreRac;bundle-version="14000.3.0", + com.teamcenter.rac.common;bundle-version="14000.3.0", + com.teamcenter.rac.ui;bundle-version="14000.3.0", + com.teamcenter.rac.tcapps;bundle-version="14000.3.0", + com.teamcenter.rac.kernel;bundle-version="14000.3.0", + com.teamcenter.rac.workflow.processdesigner;bundle-version="14000.3.0" +Automatic-Module-Name: com.connor.ld.importSJ +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-ClassPath: lib/fastjson-1.2.66.jar, + ., + lib/okhttp-2.7.4.jar, + lib/okio-1.13.0.jar, + lib/sqljdbc4.jar, + lib/sapjco3.jar, + lib/fastjson2-2.0.34.jar, + lib/jackson-annotations-2.15.0.jar, + lib/jackson-core-2.15.2.jar, + lib/jackson-databind-2.15.0.jar, + lib/mssql-jdbc-7.0.0.jre8.jar, + lib/ojdbc7.jar, + lib/poi-3.7-20101029.jar, + lib/poi-4.1.2.jar, + lib/poi-examples-3.7-20101029.jar, + lib/poi-ooxml-3.7-20101029.jar, + lib/poi-ooxml-schemas-3.7-20101029.jar, + lib/gson-2.8.5.jar diff --git a/bin/com/connor/kwc/createBom/CheckBoxTreeCellRenderer.class b/bin/com/connor/kwc/createBom/CheckBoxTreeCellRenderer.class new file mode 100644 index 0000000..b36173c Binary files /dev/null and b/bin/com/connor/kwc/createBom/CheckBoxTreeCellRenderer.class differ diff --git a/bin/com/connor/kwc/createBom/CheckBoxTreeLabel.class b/bin/com/connor/kwc/createBom/CheckBoxTreeLabel.class new file mode 100644 index 0000000..3e3f895 Binary files /dev/null and b/bin/com/connor/kwc/createBom/CheckBoxTreeLabel.class differ diff --git a/bin/com/connor/kwc/createBom/CheckBoxTreeNode.class b/bin/com/connor/kwc/createBom/CheckBoxTreeNode.class new file mode 100644 index 0000000..57dfd19 Binary files /dev/null and b/bin/com/connor/kwc/createBom/CheckBoxTreeNode.class differ diff --git a/bin/com/connor/kwc/createBom/CheckBoxTreeNodeSelectionListener.class b/bin/com/connor/kwc/createBom/CheckBoxTreeNodeSelectionListener.class new file mode 100644 index 0000000..4016675 Binary files /dev/null and b/bin/com/connor/kwc/createBom/CheckBoxTreeNodeSelectionListener.class differ diff --git a/bin/com/connor/kwc/createBom/CreateBOMHandler$1.class b/bin/com/connor/kwc/createBom/CreateBOMHandler$1.class new file mode 100644 index 0000000..1719e6c Binary files /dev/null and b/bin/com/connor/kwc/createBom/CreateBOMHandler$1.class differ diff --git a/bin/com/connor/kwc/createBom/CreateBOMHandler.class b/bin/com/connor/kwc/createBom/CreateBOMHandler.class new file mode 100644 index 0000000..cced1b1 Binary files /dev/null and b/bin/com/connor/kwc/createBom/CreateBOMHandler.class differ diff --git a/bin/com/connor/kwc/createBom/CreateBOMOperation$1.class b/bin/com/connor/kwc/createBom/CreateBOMOperation$1.class new file mode 100644 index 0000000..d7890d1 Binary files /dev/null and b/bin/com/connor/kwc/createBom/CreateBOMOperation$1.class differ diff --git a/bin/com/connor/kwc/createBom/CreateBOMOperation.class b/bin/com/connor/kwc/createBom/CreateBOMOperation.class new file mode 100644 index 0000000..f078b3b Binary files /dev/null and b/bin/com/connor/kwc/createBom/CreateBOMOperation.class differ diff --git a/bin/com/connor/kwc/createBom/NewJFrame1$1.class b/bin/com/connor/kwc/createBom/NewJFrame1$1.class new file mode 100644 index 0000000..6a4bbc1 Binary files /dev/null and b/bin/com/connor/kwc/createBom/NewJFrame1$1.class differ diff --git a/bin/com/connor/kwc/createBom/NewJFrame1$2.class b/bin/com/connor/kwc/createBom/NewJFrame1$2.class new file mode 100644 index 0000000..a6005aa Binary files /dev/null and b/bin/com/connor/kwc/createBom/NewJFrame1$2.class differ diff --git a/bin/com/connor/kwc/createBom/NewJFrame1$3.class b/bin/com/connor/kwc/createBom/NewJFrame1$3.class new file mode 100644 index 0000000..2bf6226 Binary files /dev/null and b/bin/com/connor/kwc/createBom/NewJFrame1$3.class differ diff --git a/bin/com/connor/kwc/createBom/NewJFrame1.class b/bin/com/connor/kwc/createBom/NewJFrame1.class new file mode 100644 index 0000000..aeaaca2 Binary files /dev/null and b/bin/com/connor/kwc/createBom/NewJFrame1.class differ diff --git a/bin/com/connor/kwc/createBom/NewJFrame2$1.class b/bin/com/connor/kwc/createBom/NewJFrame2$1.class new file mode 100644 index 0000000..c484a41 Binary files /dev/null and b/bin/com/connor/kwc/createBom/NewJFrame2$1.class differ diff --git a/bin/com/connor/kwc/createBom/NewJFrame2$2.class b/bin/com/connor/kwc/createBom/NewJFrame2$2.class new file mode 100644 index 0000000..4d85345 Binary files /dev/null and b/bin/com/connor/kwc/createBom/NewJFrame2$2.class differ diff --git a/bin/com/connor/kwc/createBom/NewJFrame2$3.class b/bin/com/connor/kwc/createBom/NewJFrame2$3.class new file mode 100644 index 0000000..589d008 Binary files /dev/null and b/bin/com/connor/kwc/createBom/NewJFrame2$3.class differ diff --git a/bin/com/connor/kwc/createBom/NewJFrame2$4.class b/bin/com/connor/kwc/createBom/NewJFrame2$4.class new file mode 100644 index 0000000..84c4eb3 Binary files /dev/null and b/bin/com/connor/kwc/createBom/NewJFrame2$4.class differ diff --git a/bin/com/connor/kwc/createBom/NewJFrame2.class b/bin/com/connor/kwc/createBom/NewJFrame2.class new file mode 100644 index 0000000..c66f1ab Binary files /dev/null and b/bin/com/connor/kwc/createBom/NewJFrame2.class differ diff --git a/bin/com/connor/kwc/createBom/Util.class b/bin/com/connor/kwc/createBom/Util.class new file mode 100644 index 0000000..96d9785 Binary files /dev/null and b/bin/com/connor/kwc/createBom/Util.class differ diff --git a/bin/com/connor/kwc/createBom/test$1$1.class b/bin/com/connor/kwc/createBom/test$1$1.class new file mode 100644 index 0000000..9ca6f4d Binary files /dev/null and b/bin/com/connor/kwc/createBom/test$1$1.class differ diff --git a/bin/com/connor/kwc/createBom/test$1.class b/bin/com/connor/kwc/createBom/test$1.class new file mode 100644 index 0000000..8160563 Binary files /dev/null and b/bin/com/connor/kwc/createBom/test$1.class differ diff --git a/bin/com/connor/kwc/createBom/test.class b/bin/com/connor/kwc/createBom/test.class new file mode 100644 index 0000000..81d5bbe Binary files /dev/null and b/bin/com/connor/kwc/createBom/test.class differ diff --git a/bin/com/connor/kwc/createDWG/CreateDWGHandler$1.class b/bin/com/connor/kwc/createDWG/CreateDWGHandler$1.class new file mode 100644 index 0000000..ce764c5 Binary files /dev/null and b/bin/com/connor/kwc/createDWG/CreateDWGHandler$1.class differ diff --git a/bin/com/connor/kwc/createDWG/CreateDWGHandler.class b/bin/com/connor/kwc/createDWG/CreateDWGHandler.class new file mode 100644 index 0000000..3382ae5 Binary files /dev/null and b/bin/com/connor/kwc/createDWG/CreateDWGHandler.class differ diff --git a/bin/com/connor/kwc/createTemplate/CreateTemplateDialg$1.class b/bin/com/connor/kwc/createTemplate/CreateTemplateDialg$1.class new file mode 100644 index 0000000..6ea82c3 Binary files /dev/null and b/bin/com/connor/kwc/createTemplate/CreateTemplateDialg$1.class differ diff --git a/bin/com/connor/kwc/createTemplate/CreateTemplateDialg.class b/bin/com/connor/kwc/createTemplate/CreateTemplateDialg.class new file mode 100644 index 0000000..967c87e Binary files /dev/null and b/bin/com/connor/kwc/createTemplate/CreateTemplateDialg.class differ diff --git a/bin/com/connor/kwc/createTemplate/CreateTemplateHandler$1.class b/bin/com/connor/kwc/createTemplate/CreateTemplateHandler$1.class new file mode 100644 index 0000000..aedf72d Binary files /dev/null and b/bin/com/connor/kwc/createTemplate/CreateTemplateHandler$1.class differ diff --git a/bin/com/connor/kwc/createTemplate/CreateTemplateHandler.class b/bin/com/connor/kwc/createTemplate/CreateTemplateHandler.class new file mode 100644 index 0000000..2046a86 Binary files /dev/null and b/bin/com/connor/kwc/createTemplate/CreateTemplateHandler.class differ diff --git a/bin/com/connor/kwc/createTemplate/CreateTemplateOperation$1.class b/bin/com/connor/kwc/createTemplate/CreateTemplateOperation$1.class new file mode 100644 index 0000000..cfe404e Binary files /dev/null and b/bin/com/connor/kwc/createTemplate/CreateTemplateOperation$1.class differ diff --git a/bin/com/connor/kwc/createTemplate/CreateTemplateOperation.class b/bin/com/connor/kwc/createTemplate/CreateTemplateOperation.class new file mode 100644 index 0000000..38a43fa Binary files /dev/null and b/bin/com/connor/kwc/createTemplate/CreateTemplateOperation.class differ diff --git a/build.properties b/build.properties new file mode 100644 index 0000000..f0e35fd --- /dev/null +++ b/build.properties @@ -0,0 +1,23 @@ +source.. = src/ +output.. = bin/ +bin.includes = plugin.xml,\ + META-INF/,\ + .,\ + icons/,\ + lib/fastjson-1.2.66.jar,\ + lib/okhttp-2.7.4.jar,\ + lib/okio-1.13.0.jar,\ + lib/sqljdbc4.jar,\ + lib/sapjco3.jar,\ + lib/fastjson2-2.0.34.jar,\ + lib/jackson-annotations-2.15.0.jar,\ + lib/jackson-core-2.15.2.jar,\ + lib/jackson-databind-2.15.0.jar,\ + lib/mssql-jdbc-7.0.0.jre8.jar,\ + lib/ojdbc7.jar,\ + lib/poi-3.7-20101029.jar,\ + lib/poi-4.1.2.jar,\ + lib/poi-examples-3.7-20101029.jar,\ + lib/poi-ooxml-3.7-20101029.jar,\ + lib/poi-ooxml-schemas-3.7-20101029.jar,\ + lib/gson-2.8.5.jar diff --git a/icons/sample.png b/icons/sample.png new file mode 100644 index 0000000..02c4b79 Binary files /dev/null and b/icons/sample.png differ diff --git a/icons/sample@2x.png b/icons/sample@2x.png new file mode 100644 index 0000000..c1224d1 Binary files /dev/null and b/icons/sample@2x.png differ diff --git a/lib/fastjson-1.2.66.jar b/lib/fastjson-1.2.66.jar new file mode 100644 index 0000000..048bdc8 Binary files /dev/null and b/lib/fastjson-1.2.66.jar differ diff --git a/lib/fastjson2-2.0.34.jar b/lib/fastjson2-2.0.34.jar new file mode 100644 index 0000000..a0b4d9f Binary files /dev/null and b/lib/fastjson2-2.0.34.jar differ diff --git a/lib/gson-2.8.5.jar b/lib/gson-2.8.5.jar new file mode 100644 index 0000000..0d5baf3 Binary files /dev/null and b/lib/gson-2.8.5.jar differ diff --git a/lib/jackson-annotations-2.15.0.jar b/lib/jackson-annotations-2.15.0.jar new file mode 100644 index 0000000..fc66d44 Binary files /dev/null and b/lib/jackson-annotations-2.15.0.jar differ diff --git a/lib/jackson-core-2.15.2.jar b/lib/jackson-core-2.15.2.jar new file mode 100644 index 0000000..a0e7486 Binary files /dev/null and b/lib/jackson-core-2.15.2.jar differ diff --git a/lib/jackson-databind-2.15.0.jar b/lib/jackson-databind-2.15.0.jar new file mode 100644 index 0000000..b4d9383 Binary files /dev/null and b/lib/jackson-databind-2.15.0.jar differ diff --git a/lib/mssql-jdbc-7.0.0.jre8.jar b/lib/mssql-jdbc-7.0.0.jre8.jar new file mode 100644 index 0000000..9f68c4d Binary files /dev/null and b/lib/mssql-jdbc-7.0.0.jre8.jar differ diff --git a/lib/ojdbc7.jar b/lib/ojdbc7.jar new file mode 100644 index 0000000..fd38a6c Binary files /dev/null and b/lib/ojdbc7.jar differ diff --git a/lib/okhttp-2.7.4.jar b/lib/okhttp-2.7.4.jar new file mode 100644 index 0000000..be7249f Binary files /dev/null and b/lib/okhttp-2.7.4.jar differ diff --git a/lib/okio-1.13.0.jar b/lib/okio-1.13.0.jar new file mode 100644 index 0000000..02c302f Binary files /dev/null and b/lib/okio-1.13.0.jar differ diff --git a/lib/poi-3.7-20101029.jar b/lib/poi-3.7-20101029.jar new file mode 100644 index 0000000..a08d953 Binary files /dev/null and b/lib/poi-3.7-20101029.jar differ diff --git a/lib/poi-4.1.2.jar b/lib/poi-4.1.2.jar new file mode 100644 index 0000000..3803353 Binary files /dev/null and b/lib/poi-4.1.2.jar differ diff --git a/lib/poi-examples-3.7-20101029.jar b/lib/poi-examples-3.7-20101029.jar new file mode 100644 index 0000000..914243d Binary files /dev/null and b/lib/poi-examples-3.7-20101029.jar differ diff --git a/lib/poi-ooxml-3.7-20101029.jar b/lib/poi-ooxml-3.7-20101029.jar new file mode 100644 index 0000000..5f36eb4 Binary files /dev/null and b/lib/poi-ooxml-3.7-20101029.jar differ diff --git a/lib/poi-ooxml-schemas-3.7-20101029.jar b/lib/poi-ooxml-schemas-3.7-20101029.jar new file mode 100644 index 0000000..82282b5 Binary files /dev/null and b/lib/poi-ooxml-schemas-3.7-20101029.jar differ diff --git a/lib/sapjco3.jar b/lib/sapjco3.jar new file mode 100644 index 0000000..8f12391 Binary files /dev/null and b/lib/sapjco3.jar differ diff --git a/lib/sqljdbc4.jar b/lib/sqljdbc4.jar new file mode 100644 index 0000000..d6b7f6d Binary files /dev/null and b/lib/sqljdbc4.jar differ diff --git a/plugin.xml b/plugin.xml new file mode 100644 index 0000000..895cb71 --- /dev/null +++ b/plugin.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/connor/kwc/createBom/CheckBoxTreeCellRenderer.java b/src/com/connor/kwc/createBom/CheckBoxTreeCellRenderer.java new file mode 100644 index 0000000..18d6c65 --- /dev/null +++ b/src/com/connor/kwc/createBom/CheckBoxTreeCellRenderer.java @@ -0,0 +1,93 @@ +/** * @Title: CheckBoxTreeCellRenderer.java + * @Package com.connor.kwc.createBom + * @Description: TODO(用一句话描述该文件做什么) + * @author admin * @date 2023年12月20日 + * @version V1.0 + */ +package com.connor.kwc.createBom; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; + +import javax.swing.JCheckBox; +import javax.swing.JPanel; +import javax.swing.JTree; +import javax.swing.UIManager; +import javax.swing.plaf.ColorUIResource; +import javax.swing.tree.TreeCellRenderer; + +/** + * @ClassName: CheckBoxTreeCellRenderer + * @Description: Jtree复选框实现 + * @author hcj + * @date 2023年12月20日 + * + */ +public class CheckBoxTreeCellRenderer extends JPanel implements TreeCellRenderer { + protected JCheckBox check; + protected CheckBoxTreeLabel label; + + public CheckBoxTreeCellRenderer() { + setLayout(null); + add(check = new JCheckBox()); + add(label = new CheckBoxTreeLabel()); + check.setBackground(UIManager.getColor("Tree.textBackground")); + label.setForeground(UIManager.getColor("Tree.textForeground")); + } + + /** + * 返回的是一个JPanel对象,该对象中包含一个JCheckBox对象 + * 和一个JLabel对象。并且根据每个结点是否被选中来决定JCheckBox 是否被选中。 + */ + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, + boolean leaf, int row, boolean hasFocus) { + String stringValue = tree.convertValueToText(value, selected, expanded, leaf, row, hasFocus); + setEnabled(tree.isEnabled()); + check.setSelected(((CheckBoxTreeNode) value).isSelected()); + label.setFont(tree.getFont()); + label.setText(stringValue); + label.setSelected(selected); + label.setFocus(hasFocus); + if (leaf) + label.setIcon(UIManager.getIcon("Tree.leafIcon")); + else if (expanded) + label.setIcon(UIManager.getIcon("Tree.openIcon")); + else + label.setIcon(UIManager.getIcon("Tree.closedIcon")); + + return this; + } + + @Override + public Dimension getPreferredSize() { + Dimension dCheck = check.getPreferredSize(); + Dimension dLabel = label.getPreferredSize(); + return new Dimension(dCheck.width + dLabel.width, + dCheck.height < dLabel.height ? dLabel.height : dCheck.height); + } + + @Override + public void doLayout() { + Dimension dCheck = check.getPreferredSize(); + Dimension dLabel = label.getPreferredSize(); + int yCheck = 0; + int yLabel = 0; + if (dCheck.height < dLabel.height) + yCheck = (dLabel.height - dCheck.height) / 2; + else + yLabel = (dCheck.height - dLabel.height) / 2; + check.setLocation(0, yCheck); + check.setBounds(0, yCheck, dCheck.width, dCheck.height); + label.setLocation(dCheck.width, yLabel); + label.setBounds(dCheck.width, yLabel, dLabel.width, dLabel.height); + } + + @Override + public void setBackground(Color color) { + if (color instanceof ColorUIResource) + color = null; + super.setBackground(color); + } +} \ No newline at end of file diff --git a/src/com/connor/kwc/createBom/CheckBoxTreeLabel.java b/src/com/connor/kwc/createBom/CheckBoxTreeLabel.java new file mode 100644 index 0000000..454a140 --- /dev/null +++ b/src/com/connor/kwc/createBom/CheckBoxTreeLabel.java @@ -0,0 +1,79 @@ +/** * @Title: CheckBoxTreeLabel.java + * @Package com.connor.kwc.createBom + * @Description: TODO(用一句话描述该文件做什么) + * @author admin * @date 2023年12月20日 + * @version V1.0 + */ +package com.connor.kwc.createBom; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; + +import javax.swing.Icon; +import javax.swing.JLabel; +import javax.swing.UIManager; +import javax.swing.plaf.ColorUIResource; + +/** + * @ClassName: CheckBoxTreeLabel + * @Description: Jtree复选框实现 + * @author hcj + * @date 2023年12月20日 + * + */ + +public class CheckBoxTreeLabel extends JLabel { + private boolean isSelected; + private boolean hasFocus; + + public CheckBoxTreeLabel() { + } + + @Override + public void setBackground(Color color) { + if (color instanceof ColorUIResource) + color = null; + super.setBackground(color); + } + + @Override + public void paint(Graphics g) { + String str; + if ((str = getText()) != null) { + if (0 < str.length()) { + if (isSelected) + g.setColor(UIManager.getColor("Tree.selectionBackground")); + else + g.setColor(UIManager.getColor("Tree.textBackground")); + Dimension d = getPreferredSize(); + int imageOffset = 0; + Icon currentIcon = getIcon(); + if (currentIcon != null) + imageOffset = currentIcon.getIconWidth() + Math.max(0, getIconTextGap() - 1); + g.fillRect(imageOffset, 0, d.width - 1 - imageOffset, d.height); + if (hasFocus) { + g.setColor(UIManager.getColor("Tree.selectionBorderColor")); + g.drawRect(imageOffset, 0, d.width - 1 - imageOffset, d.height - 1); + } + } + } + super.paint(g); + } + + @Override + public Dimension getPreferredSize() { + Dimension retDimension = super.getPreferredSize(); + if (retDimension != null) + retDimension = new Dimension(retDimension.width + 3, retDimension.height); + return retDimension; + } + + public void setSelected(boolean isSelected) { + this.isSelected = isSelected; + } + + public void setFocus(boolean hasFocus) { + this.hasFocus = hasFocus; + } +} diff --git a/src/com/connor/kwc/createBom/CheckBoxTreeNode.java b/src/com/connor/kwc/createBom/CheckBoxTreeNode.java new file mode 100644 index 0000000..88ffe4e --- /dev/null +++ b/src/com/connor/kwc/createBom/CheckBoxTreeNode.java @@ -0,0 +1,97 @@ +/** * @Title: CheckBoxTreeNode.java + * @Package com.connor.kwc.createBom + * @Description: TODO(用一句话描述该文件做什么) + * @author admin * @date 2023年12月20日 + * @version V1.0 + */ +package com.connor.kwc.createBom; + +import javax.swing.tree.DefaultMutableTreeNode; + +/** + * @ClassName: CheckBoxTreeNode + * @Description: Jtree复选框实现 + * @author hcj + * @date 2023年12月20日 + * + */ + +public class CheckBoxTreeNode extends DefaultMutableTreeNode { + protected boolean isSelected; + + public CheckBoxTreeNode() { + this(null); + } + + public CheckBoxTreeNode(Object userObject) { + this(userObject, true, false); + } + + public CheckBoxTreeNode(Object userObject, boolean allowsChildren, boolean isSelected) { + super(userObject, allowsChildren); + this.isSelected = isSelected; + } + + public boolean isSelected() { + return isSelected; + } + + public void setSelected(boolean _isSelected) { + this.isSelected = _isSelected; + + if (_isSelected) { + // 如果选中,则将其所有的子结点都选中 + if (children != null) { + for (Object obj : children) { + CheckBoxTreeNode node = (CheckBoxTreeNode) obj; + if (_isSelected != node.isSelected()) + node.setSelected(_isSelected); + } + } + // 向上检查,如果父结点的所有子结点都被选中,那么将父结点也选中 + CheckBoxTreeNode pNode = (CheckBoxTreeNode) parent; + // 开始检查pNode的所有子节点是否都被选中 + if (pNode != null) { + int index = 0; + for (; index < pNode.children.size(); ++index) { + CheckBoxTreeNode pChildNode = (CheckBoxTreeNode) pNode.children.get(index); + if (!pChildNode.isSelected()) + break; + } + /* + * 表明pNode所有子结点都已经选中,则选中父结点, 该方法是一个递归方法,因此在此不需要进行迭代,因为 当选中父结点后,父结点本身会向上检查的。 + */ + if (index == pNode.children.size()) { + if (pNode.isSelected() != _isSelected) + pNode.setSelected(_isSelected); + } + } + } else { + /* + * 如果是取消父结点导致子结点取消,那么此时所有的子结点都应该是选择上的; 否则就是子结点取消导致父结点取消,然后父结点取消导致需要取消子结点,但 + * 是这时候是不需要取消子结点的。 + */ + if (children != null) { + int index = 0; + for (; index < children.size(); ++index) { + CheckBoxTreeNode childNode = (CheckBoxTreeNode) children.get(index); + if (!childNode.isSelected()) + break; + } + // 从上向下取消的时候 + if (index == children.size()) { + for (int i = 0; i < children.size(); ++i) { + CheckBoxTreeNode node = (CheckBoxTreeNode) children.get(i); + if (node.isSelected() != _isSelected) + node.setSelected(_isSelected); + } + } + } + + // 向上取消,只要存在一个子节点不是选上的,那么父节点就不应该被选上。 +// CheckBoxTreeNode pNode = (CheckBoxTreeNode) parent; +// if (pNode != null && pNode.isSelected() != _isSelected) +// pNode.setSelected(_isSelected); + } + } +} diff --git a/src/com/connor/kwc/createBom/CheckBoxTreeNodeSelectionListener.java b/src/com/connor/kwc/createBom/CheckBoxTreeNodeSelectionListener.java new file mode 100644 index 0000000..93afd2f --- /dev/null +++ b/src/com/connor/kwc/createBom/CheckBoxTreeNodeSelectionListener.java @@ -0,0 +1,41 @@ +/** * @Title: CheckBoxTreeNodeSelectionListener.java + * @Package com.connor.kwc.createBom + * @Description: TODO(用一句话描述该文件做什么) + * @author admin * @date 2023年12月20日 + * @version V1.0 + */ +package com.connor.kwc.createBom; + +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +import javax.swing.JTree; +import javax.swing.tree.TreePath; +import javax.swing.tree.DefaultTreeModel; + +/** + * @ClassName: CheckBoxTreeNodeSelectionListener + * @Description: Jtree复选框实现 + * @author hcj + * @date 2023年12月20日 + * + */ + +public class CheckBoxTreeNodeSelectionListener extends MouseAdapter { + @Override + public void mouseClicked(MouseEvent event) { + JTree tree = (JTree) event.getSource(); + int x = event.getX(); + int y = event.getY(); + int row = tree.getRowForLocation(x, y); + TreePath path = tree.getPathForRow(row); + if (path != null) { + CheckBoxTreeNode node = (CheckBoxTreeNode) path.getLastPathComponent(); + if (node != null) { + boolean isSelected = !node.isSelected(); + node.setSelected(isSelected); + ((DefaultTreeModel) tree.getModel()).nodeStructureChanged(node); + } + } + } +} diff --git a/src/com/connor/kwc/createBom/CreateBOMHandler.java b/src/com/connor/kwc/createBom/CreateBOMHandler.java new file mode 100644 index 0000000..46ba59c --- /dev/null +++ b/src/com/connor/kwc/createBom/CreateBOMHandler.java @@ -0,0 +1,175 @@ +package com.connor.kwc.createBom; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; + +import com.teamcenter.rac.aif.AbstractAIFApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +/** + * + * @ClassName: CreateBOMHandler + * @Description: 创建BOM入口类 + * @author hcj + * @date 2023年12月18日 + * + */ +public class CreateBOMHandler extends AbstractHandler { + private TCSession session; + private String type; + + @Override + public Object execute(ExecutionEvent arg0) throws ExecutionException { + AbstractAIFApplication app = AIFUtility.getCurrentApplication(); + try { + new Thread() { + @Override + public void run() { + // 获取tc当前选择的操作 + InterfaceAIFComponent target = app.getTargetComponent(); + session = (TCSession) target.getSession(); + String preferencesName = ""; + Map dataMap = new HashMap(); + if (target instanceof TCComponentFolder) { + type = "folder"; + // 判断当前用户是否有权限操作当前对象 + Boolean userHasPowerForCompont = Util.userHasPowerForCompont(session, + (TCComponentFolder) target); + if (!userHasPowerForCompont) { + MessageBox.post("用户没有写权限", "提示", MessageBox.INFORMATION); + return; + } + // + preferencesName = "KWC_CreateBOM_list"; + String[] preferencesValues = Util.getSXX(session, preferencesName); + if (preferencesValues.length >= 3) { + // 获取item类型集合,判断选中对象是否包含其中 + String[] itemTypes = preferencesValues[0].split("=")[1].split(";"); + ArrayList itemTypeList = new ArrayList<>(Arrays.asList(itemTypes)); + try { + if (!itemTypeList + .contains(((TCComponentFolder) target).getStringProperty("object_type"))) { + MessageBox.post("选取的存储位置不正确", "提示", MessageBox.INFORMATION); + } + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // 获取类型数组 + String[] types = preferencesValues[1].split("=")[1].split(";"); + ArrayList typeList = new ArrayList<>(Arrays.asList(types)); + + // 获取类型与模板UID的映射关系Map + Map templateMap = new HashMap(); + for (int i = 2; i < preferencesValues.length; i++) { + String[] templates = preferencesValues[i].split("="); + String[] leftTemplate = templates[0].split("\\."); + System.out.println("key:" + leftTemplate[1] + " value:" + templates[1]); + templateMap.put(leftTemplate[1], templates[1]); + } + + dataMap.put("typeList", typeList); + dataMap.put("templateMap", templateMap); + } else { + MessageBox.post("首选项【" + preferencesName + "】长度配置有误", "提示", MessageBox.INFORMATION); + } + + } else if (target instanceof TCComponentItemRevision) { + type = "revision"; + // 判断当前用户是否有权限操作当前对象 + Boolean userHasPowerForCompont = Util.userHasPowerForCompont(session, + (TCComponentItemRevision) target); + if (!userHasPowerForCompont) { + MessageBox.post("用户没有写权限", "提示", MessageBox.INFORMATION); + return; + } + preferencesName = "KWC_AddBOM_list"; + String[] preferencesValues = Util.getSXX(session, preferencesName); + if (preferencesValues.length >= 4) { + // 获取item类型集合,判断选中对象是否包含其中 + String[] itemTypes = preferencesValues[0].split("=")[1].split(";"); + ArrayList itemTypeList = new ArrayList<>(Arrays.asList(itemTypes)); + try { + if (!itemTypeList.contains( + ((TCComponentItemRevision) target).getStringProperty("object_type"))) { + MessageBox.post("选取的存储位置不正确", "提示", MessageBox.INFORMATION); + } + // 获取ID数组 + String[] ids = preferencesValues[1].split("=")[1].split(";"); + ArrayList idList = new ArrayList<>(Arrays.asList(ids)); + String itemId = ((TCComponentItemRevision) target).getStringProperty("item_id"); + String getId = ""; + Boolean flag = true; + for (String id : idList) { + System.out.println("判断itemID" + itemId + "结尾是否匹配" + id); + if (itemId.endsWith(id)) { + flag = false; + getId = id; + break; + } + } + if (flag) { + MessageBox.post("选中对象ID后缀不在首选项【" + preferencesName + "】配置ID中", "提示", + MessageBox.INFORMATION); + return; + } + // 获取类型和模板UID的映射关系Map + List typeList = new ArrayList(); + Map templateMap = new HashMap(); + for (int i = 2; i < preferencesValues.length; i++) { + if (preferencesValues[i].startsWith("type")) { + String[] typeSplit = preferencesValues[i].split("="); + if (typeSplit[0].endsWith(getId)) { + String[] types = typeSplit[1].split(";"); + typeList = new ArrayList<>(Arrays.asList(types)); + } + } else if (preferencesValues[i].startsWith("template")) { + String[] templateSplit = preferencesValues[i].split("="); + if (templateSplit[0].contains(getId)) { + String[] temKey = templateSplit[0].split("\\."); + templateMap.put(temKey[1], templateSplit[1]); + } + + } + } + + dataMap.put("typeList", typeList); + dataMap.put("templateMap", templateMap); + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } else { + MessageBox.post("首选项【" + preferencesName + "】长度配置有误", "提示", MessageBox.INFORMATION); + return; + } + } else { + MessageBox.post("选取的存储位置不正确", "提示", MessageBox.INFORMATION); + return; + } + + CreateBOMOperation createBOMOperation = new CreateBOMOperation(session, dataMap, target, type); + session.queueOperation(createBOMOperation); + } + }.start(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/com/connor/kwc/createBom/CreateBOMOperation.java b/src/com/connor/kwc/createBom/CreateBOMOperation.java new file mode 100644 index 0000000..891ff3d --- /dev/null +++ b/src/com/connor/kwc/createBom/CreateBOMOperation.java @@ -0,0 +1,88 @@ +package com.connor.kwc.createBom; + +import java.awt.EventQueue; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextArea; +import javax.swing.JTextField; + +import com.teamcenter.rac.aif.AbstractAIFOperation; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCComponentBOMLine; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCSession; + +/** + * + * @ClassName: CreateBOMOperation + * @Description: 创建BOM实现类 + * @author hcj + * @date 2023年12月18日 + * + */ +public class CreateBOMOperation extends AbstractAIFOperation { + private TCSession session; + private Map dataMap; + private String type; + private JFrame jFrame; + private InterfaceAIFComponent target; + + /** + * 创建一个新的实例 CreateBOMOperation + * + * @param session + * @param dataMap + * @param target + * @param type + */ + public CreateBOMOperation(TCSession session, Map dataMap, InterfaceAIFComponent target, + String type) { + // TODO Auto-generated constructor stub + this.session = session; + this.dataMap = dataMap; + this.target = target; + this.type = type; + } + + /* + * Title: executeOperation Description: + * + * @throws Exception + * + * @see com.teamcenter.rac.aif.AbstractAIFOperation#executeOperation() + */ + @Override + public void executeOperation() throws Exception { + // TODO Auto-generated method stub + init(); + } + + /** + * + * @Title: init + * @Description: 初始化窗口 + * @param 参数 + * @return void 返回类型 + * @throws + */ + public void init() { + EventQueue.invokeLater(new Runnable() { + public void run() { + if ("folder".equals(type)) { + NewJFrame2 newJFrame2 = new NewJFrame2(session, dataMap, (TCComponentFolder) target); + newJFrame2.setVisible(true); + } else if ("revision".equals(type)) { +// NewJFrame1 newJFrame2 = new NewJFrame1(session,dataMap); +// newJFrame2.setVisible(true); + } + + } + }); + } + +} diff --git a/src/com/connor/kwc/createBom/NewJFrame1.java b/src/com/connor/kwc/createBom/NewJFrame1.java new file mode 100644 index 0000000..fca60ba --- /dev/null +++ b/src/com/connor/kwc/createBom/NewJFrame1.java @@ -0,0 +1,623 @@ +/** * @Title: NewJFrame1.java + * @Package com.connor.kwc.createBom + * @Description: TODO(用一句话描述该文件做什么) + * @author admin * @date 2023年12月19日 + * @version V1.0 + */ +package com.connor.kwc.createBom; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.swing.DefaultComboBoxModel; +import javax.swing.GroupLayout; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.JTree; +import javax.swing.LayoutStyle; +import javax.swing.WindowConstants; +import javax.swing.tree.DefaultTreeModel; + +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentBOMLine; +import com.teamcenter.rac.kernel.TCComponentBOMWindow; +import com.teamcenter.rac.kernel.TCComponentBOMWindowType; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentItem; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCProperty; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +/** + * @ClassName: NewJFrame1 + * @Description: 初始化窗口 + * @author hcj + * @date 2023年12月19日 + * + */ +public class NewJFrame1 extends JFrame { + + private TCSession session; + private Map dataMap; + private TCComponentItemRevision target; + private JButton jButton1; + private JButton jButton2; + private JComboBox jComboBox1; + private JComboBox jComboBox2; + private JComboBox jComboBox3; + private JComboBox jComboBox4; + private JLabel jLabel1; + private JLabel jLabel2; + private JLabel jLabel3; + private JLabel jLabel4; + private JLabel jLabel5; + private JPanel jPanel1; + private JPanel jPanel2; + private JPanel jPanel3; + private JPanel jPanel4; + private JScrollPane jScrollPane1; + private JTextField jTextField1; + private JTextField jTextField2; + private JTree jTree1; + private String[] sxxdate; + private TCComponent component; + private List tempList; + private Map itemMapIsSel = new HashMap<>(); + private Map itemMapBoMap = new HashMap<>(); + + /** + * Creates new form NewJFrame2 + */ + public NewJFrame1(TCSession session, Map dataMap, TCComponentItemRevision target) { + this.session = session; + this.dataMap = dataMap; + this.target = target; + getDate(); + try { + initComponents(); + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + /** + * 获取一些初始化的值(首选项) + */ + private void getDate() { + // TODO Auto-generated method stub + sxxdate = Util.getSXX(session, "KWC_CreateBOM_attribute"); + } + + @SuppressWarnings("unchecked") + // + private void initComponents() throws TCException { + + jComboBox1 = new JComboBox<>(); + jPanel1 = new JPanel(); + jPanel2 = new JPanel(); + jLabel1 = new JLabel(); + jTextField1 = new JTextField(); + jLabel2 = new JLabel(); + jTextField2 = new JTextField(); + jLabel3 = new JLabel(); + jComboBox2 = new JComboBox<>(); + jComboBox3 = new JComboBox<>(); + jLabel4 = new JLabel(); + jLabel5 = new JLabel(); + jComboBox4 = new JComboBox<>(); + jPanel3 = new JPanel(); + jButton1 = new JButton(); + jButton2 = new JButton(); + jPanel4 = new JPanel(); + jScrollPane1 = new JScrollPane(); + jTree1 = new JTree(); + jTree1.setCellRenderer(new CheckBoxTreeCellRenderer()); + + jComboBox1.setModel(new DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + setBackground(new java.awt.Color(240, 240, 240)); + + jPanel1.setBackground(new java.awt.Color(240, 240, 240)); + + jPanel2.setBackground(new java.awt.Color(240, 240, 240)); + + jLabel1.setText("产品代号:"); + + jLabel2.setText("产品名称:"); + + jLabel3.setText("类型:"); + + List typeList = (ArrayList) dataMap.get("typeList"); + String[] typeArray = (String[]) typeList.toArray(); + jComboBox2.setModel(new DefaultComboBoxModel<>(typeArray)); + jComboBox2.setSelectedIndex(0); + + Map templateMap = (HashMap) dataMap.get("templateMap"); + String template = templateMap.get(jComboBox2.getSelectedItem()); + String[] split = template.split(";"); + tempList = new ArrayList(); + // 根据UID找模板信息 + for (String uid : split) { + try { + TCComponent component = session.stringToComponent(uid); + tempList.add(component.getStringProperty("object_name")); + } catch (TCException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + + String[] array = (String[]) tempList.toArray(); + jComboBox3.setModel(new DefaultComboBoxModel<>(array)); + jComboBox3.setSelectedIndex(0); + jLabel4.setText("模板:"); + try { + // 根据模板创建树结构,给用户选择 + component = session.stringToComponent(tempList.get(0)); + TCComponentBOMWindowType winType = (TCComponentBOMWindowType) session.getTypeComponent("BOMWindow"); + TCComponentBOMWindow view = winType.create(null); + if (component instanceof TCComponentItemRevision) { + TCComponentItemRevision rev = (TCComponentItemRevision) component; + TCComponentBOMLine line = view.setWindowTopLine(rev.getItem(), rev, null, null); + String topNode = component.getStringProperty("object_string"); + CheckBoxTreeNode rootNode = new CheckBoxTreeNode(topNode); + getTree(line, rootNode); + DefaultTreeModel model = new DefaultTreeModel(rootNode); + jTree1.addMouseListener(new CheckBoxTreeNodeSelectionListener()); + jTree1.setModel(model); + jTree1.setCellRenderer(new CheckBoxTreeCellRenderer()); + } + + } catch (TCException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + + jComboBox2.setModel(new DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + + jComboBox3.setModel(new DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + + jLabel4.setText("模板:"); + + jLabel5.setText("专业:"); + + jComboBox4.setModel(new DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + + GroupLayout jPanel2Layout = new GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup().addGap(27, 27, 27).addGroup(jPanel2Layout + .createParallelGroup(GroupLayout.Alignment.LEADING, false) + .addComponent(jLabel5, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel3, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, + GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel4, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, + GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(jComboBox4, GroupLayout.PREFERRED_SIZE, 160, GroupLayout.PREFERRED_SIZE) + .addComponent(jComboBox3, GroupLayout.PREFERRED_SIZE, 160, GroupLayout.PREFERRED_SIZE) + .addComponent(jComboBox2, GroupLayout.PREFERRED_SIZE, 160, GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 51, Short.MAX_VALUE) + .addGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(jLabel1, GroupLayout.Alignment.TRAILING) + .addComponent(jLabel2, GroupLayout.Alignment.TRAILING)) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(jTextField1, GroupLayout.PREFERRED_SIZE, 160, GroupLayout.PREFERRED_SIZE) + .addComponent(jTextField2, GroupLayout.PREFERRED_SIZE, 160, GroupLayout.PREFERRED_SIZE)) + .addGap(27, 27, 27))); + jPanel2Layout + .setVerticalGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup().addGap(13, 13, 13) + .addGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(jTextField1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1).addComponent(jLabel3).addComponent(jComboBox2, + GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE)) + .addGroup(jPanel2Layout + .createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(jPanel2Layout + .createSequentialGroup().addGap(18, 18, 18).addGroup(jPanel2Layout + .createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent( + jTextField2, GroupLayout.PREFERRED_SIZE, + GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel2)) + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 12, + Short.MAX_VALUE) + .addGroup(jPanel2Layout + .createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(jLabel5).addComponent(jComboBox4, + GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel2Layout + .createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(jComboBox3, GroupLayout.PREFERRED_SIZE, + GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel4)) + .addContainerGap())))); + + jPanel3.setBackground(new java.awt.Color(240, 240, 240)); + + jButton1.setText("创建"); + + jButton2.setText("取消"); + + GroupLayout jPanel3Layout = new GroupLayout(jPanel3); + jPanel3.setLayout(jPanel3Layout); + jPanel3Layout + .setHorizontalGroup(jPanel3Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(jButton1) + .addGap(35, 35, 35).addComponent(jButton2).addGap(33, 33, 33))); + jPanel3Layout + .setVerticalGroup(jPanel3Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup().addContainerGap() + .addGroup(jPanel3Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(jButton1).addComponent(jButton2)) + .addContainerGap(21, Short.MAX_VALUE))); + + jPanel4.setBackground(new java.awt.Color(240, 240, 240)); + + jScrollPane1.setViewportView(jTree1); + + GroupLayout jPanel4Layout = new GroupLayout(jPanel4); + jPanel4.setLayout(jPanel4Layout); + jPanel4Layout.setHorizontalGroup( + jPanel4Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(jScrollPane1)); + jPanel4Layout.setVerticalGroup(jPanel4Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup( + GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup().addGap(0, 0, Short.MAX_VALUE) + .addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 421, GroupLayout.PREFERRED_SIZE))); + + GroupLayout jPanel1Layout = new GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup().addContainerGap().addGroup(jPanel1Layout + .createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(jPanel3, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel4, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap())); + jPanel1Layout + .setVerticalGroup(jPanel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup().addContainerGap() + .addComponent(jPanel2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jPanel3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE) + .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(jPanel4, + GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap())); + + GroupLayout layout = new GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addContainerGap() + .addComponent(jPanel1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap())); + layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup().addContainerGap().addComponent(jPanel1, + GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); + + pack(); + jTextField1.setText(target.getStringProperty("item_id")); + jTextField2.setEditable(false); + // 类型下拉框监听,更新模板下拉框 + jComboBox2.addItemListener(new ItemListener() { + + @Override + public void itemStateChanged(ItemEvent e) { + Map templateMap = (HashMap) dataMap.get("templateMap"); + String template = templateMap.get(jComboBox2.getSelectedItem()); + String[] split = template.split(";"); + List tempList = new ArrayList(); + // 根据UID找模板信息 + for (String uid : split) { + try { + TCComponent component = session.stringToComponent(uid); + tempList.add(component.getStringProperty("object_name")); + } catch (TCException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + + String[] array = (String[]) tempList.toArray(); + jComboBox3.setModel(new DefaultComboBoxModel<>(array)); + } + }); + // 模板下拉框更新,更新Jtree + jComboBox3.addItemListener(new ItemListener() { + + @Override + public void itemStateChanged(ItemEvent e) { + try { + int selectedIndex = jComboBox3.getSelectedIndex(); + String uid = tempList.get(selectedIndex); + component = session.stringToComponent(uid); + + TCComponentBOMWindowType winType = (TCComponentBOMWindowType) session.getTypeComponent("BOMWindow"); + TCComponentBOMWindow view = winType.create(null); + if (component instanceof TCComponentItemRevision) { + TCComponentItemRevision rev = (TCComponentItemRevision) component; + TCComponentBOMLine line = view.setWindowTopLine(rev.getItem(), rev, null, null); + String topNode = component.getStringProperty("object_string"); + CheckBoxTreeNode rootNode = new CheckBoxTreeNode(topNode); + getTree(line, rootNode); + DefaultTreeModel model = new DefaultTreeModel(rootNode); + jTree1.addMouseListener(new CheckBoxTreeNodeSelectionListener()); + jTree1.setModel(model); + jTree1.setCellRenderer(new CheckBoxTreeCellRenderer()); + } + } catch (Exception e2) { + // TODO: handle exception + e2.printStackTrace(); + } + + } + }); + + // 确定按钮更新 + jButton1.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // 必填判定 + String field1 = jTextField1.getText(); + String field2 = jTextField2.getText(); + if (field1 == null || "".equals(field1.trim()) || field2 == null || "".equals(field2.trim())) { + MessageBox.post("产品代号和产品名称必填,请检查", "提示", MessageBox.INFORMATION); + return; + } + // 开始复制对象 + TCComponentItemRevision revision = (TCComponentItemRevision) component; + try { + if (itemMapIsSel.get(revision.getStringProperty("object_string")).isSelected) { + TCComponentItem newItem = revision.saveAsItem(jTextField1.getText(), "A", jTextField2.getText(), + "", true, null); + TCComponentItemRevision newRevision = newItem.getLatestItemRevision(); + TCComponentBOMWindowType winType = (TCComponentBOMWindowType) session + .getTypeComponent("BOMWindow"); + TCComponentBOMWindow view = winType.create(null); + TCComponentBOMLine line = view.setWindowTopLine(revision.getItem(), revision, null, null); + // 根据首选项的值复制对象属性 + for (String attrStr : sxxdate) { + if (attrStr.startsWith(line.getItemRevision().getItem().getStringProperty("object_type"))) { + try { + replaceAttribute(line, newRevision, attrStr); + } catch (ParseException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + break; + } + } + // 递归BOM结构,删除未选中的对象 + collectAllBomLine(line, jTextField1.getText(), winType, view, false); + TCComponentItemRevision itemRevision = line.getItemRevision(); + target.add("", itemRevision); + + } else { + return; + } + + } catch (TCException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + }); + } + + /** + * 递归BOM结构 + * + * @param view + * @param topBomLine + * @param newId + * @param winType + * @param newview + * @throws TCException + */ + public void collectAllBomLine(TCComponentBOMLine bomLine, String newId, TCComponentBOMWindowType winType, + TCComponentBOMWindow newview, Boolean flag) throws TCException { + String objectName = bomLine.getItemRevision().getStringProperty("object_name"); + boolean selected = itemMapIsSel.get(objectName).isSelected(); + // 判断界面是否选中 + if (selected) { + // 另存一个新的出来,修改数据。替换当前的bom行 + if (flag) { + // 第一次递归的时候直接判断子类继续递归 + flag = false; + if (bomLine.hasChildren()) { + for (AIFComponentContext aifComponentContext : bomLine.getChildren()) { + TCComponentBOMLine line = (TCComponentBOMLine) aifComponentContext.getComponent(); + collectAllBomLine(line, newId, winType, newview, flag); + } + } + + } else { + // 当不是第一次递归的时候,每次递归另存一个对象,把要同步的数据同步过去,然后将对象替换到新的bomview上去 + TCComponentItem saveAsItem = bomLine.getItemRevision().saveAsItem(jTextField1.getText(), "A", + bomLine.getItemRevision().getStringProperty("object_name"), "", true, null); + TCComponentItemRevision latestItemRevision = saveAsItem.getLatestItemRevision(); + // 替换属性 + for (String attrStr : sxxdate) { + if (attrStr.startsWith(bomLine.getItemRevision().getItem().getStringProperty("object_type"))) { + try { + replaceAttribute(itemMapBoMap.get(objectName), latestItemRevision, attrStr); + } catch (ParseException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + break; + } + } + // 替换分类属性 + + // 替换bom行 + bomLine.replace(saveAsItem, latestItemRevision, newview); + if (bomLine.hasChildren()) { + for (AIFComponentContext aifComponentContext : bomLine.getChildren()) { + TCComponentBOMLine line = (TCComponentBOMLine) aifComponentContext.getComponent(); + collectAllBomLine(line, newId, winType, newview, flag); + } + } + } + } else { + // 从bomview中删除对象 + return; + } + + } + + /** + * 根据component对象去创建树结构 + * + * @param component + * @param rootNode2 + * @throws TCException + */ + private void getTree(TCComponentBOMLine bomLine, CheckBoxTreeNode rootNode) throws TCException { + itemMapIsSel.put(bomLine.getItemRevision().getStringProperty("object_name"), rootNode); + itemMapBoMap.put(bomLine.getItemRevision().getStringProperty("object_name"), bomLine); + if (bomLine.hasChildren()) { + AIFComponentContext[] children = bomLine.getChildren(); + for (AIFComponentContext aifComponentContext : children) { + TCComponentBOMLine line = (TCComponentBOMLine) aifComponentContext.getComponent(); + String node = line.getItemRevision().getStringProperty("object_string"); + CheckBoxTreeNode childNode = new CheckBoxTreeNode(node); + rootNode.add(childNode); + getTree(line, childNode); + } + } + } + + private void replaceAttribute(TCComponentBOMLine oldLine, TCComponentItemRevision newLine, String attrStr) + throws TCException, ParseException { + String[] attrs = attrStr.split("=")[1].split(";"); + for (String attr : attrs) { + String[] p1 = attr.split("\\."); + + if (p1[0].equals("item")) { + // pitem.setStringProperty(p1[1], val); + String val = oldLine.getItem().getStringProperty(p1[1]); + TCComponentItem pitem = newLine.getItem(); + TCProperty property = (TCProperty) pitem.getTCProperty(p1[1]); + switch (property.getPropertyType()) { + case TCProperty.PROP_string: + case TCProperty.PROP_long_string: + pitem.setStringProperty(p1[1], val); + break; + case TCProperty.PROP_short: + case TCProperty.PROP_int: + pitem.setIntProperty(p1[1], Integer.parseInt(val)); + break; + case TCProperty.PROP_double: + case TCProperty.PROP_float: + pitem.setDoubleProperty(p1[1], Double.parseDouble(val)); + break; + case TCProperty.PROP_date: + if (!val.equals("")) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + Date date = sdf.parse(p1[1]); + if (date != null) { + pitem.setDateProperty(p1[1], date); + } + } + break; + default: + pitem.setStringProperty(p1[1], val); + break; + } + } else if (p1[0].equals("rev")) { + String val = oldLine.getItemRevision().getStringProperty(p1[1]); + TCComponentItemRevision prev = newLine; + TCProperty property = (TCProperty) prev.getTCProperty(p1[1]); + // prev.setStringProperty(p1[1], val); + switch (property.getPropertyType()) { + case TCProperty.PROP_string: + case TCProperty.PROP_long_string: + prev.setStringProperty(p1[1], val); + break; + case TCProperty.PROP_short: + case TCProperty.PROP_int: + prev.setIntProperty(p1[1], Integer.parseInt(val)); + break; + case TCProperty.PROP_double: + case TCProperty.PROP_float: + prev.setDoubleProperty(p1[1], Double.parseDouble(val)); + break; + case TCProperty.PROP_date: + if (!val.equals("")) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + Date date = sdf.parse(p1[1]); + if (date != null) { + prev.setDateProperty(p1[1], date); + } + } + break; + default: + prev.setStringProperty(p1[1], val); + break; + } + } else if (p1[0].equals("bom")) { + String val = oldLine.getStringProperty(p1[1]); + TCComponentBOMWindowType winType = (TCComponentBOMWindowType) session.getTypeComponent("BOMWindow"); + TCComponentBOMWindow view = winType.create(null); + TCComponentBOMLine line = view.setWindowTopLine(newLine.getItem(), newLine, null, null); + TCProperty property = (TCProperty) line.getTCProperty(p1[1]); + switch (property.getPropertyType()) { + case TCProperty.PROP_string: + case TCProperty.PROP_long_string: + line.setStringProperty(p1[1], val); + break; + case TCProperty.PROP_short: + case TCProperty.PROP_int: + line.setIntProperty(p1[1], Integer.parseInt(val)); + break; + case TCProperty.PROP_double: + case TCProperty.PROP_float: + line.setDoubleProperty(p1[1], Double.parseDouble(val)); + break; + case TCProperty.PROP_date: + if (!val.equals("")) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + Date date = sdf.parse(p1[1]); + if (date != null) { + line.setDateProperty(p1[1], date); + } + } + break; + default: + line.setStringProperty(p1[1], val); + break; + } + } + } + } + +} diff --git a/src/com/connor/kwc/createBom/NewJFrame2.java b/src/com/connor/kwc/createBom/NewJFrame2.java new file mode 100644 index 0000000..6ebebec --- /dev/null +++ b/src/com/connor/kwc/createBom/NewJFrame2.java @@ -0,0 +1,601 @@ +package com.connor.kwc.createBom; + +import java.awt.EventQueue; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.swing.DefaultComboBoxModel; +import javax.swing.GroupLayout; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.JTree; +import javax.swing.LayoutStyle; +import javax.swing.WindowConstants; +import javax.swing.tree.DefaultTreeModel; + +import com.teamcenter.rac.aif.kernel.AIFComponentContext; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentBOMLine; +import com.teamcenter.rac.kernel.TCComponentBOMWindow; +import com.teamcenter.rac.kernel.TCComponentBOMWindowType; +import com.teamcenter.rac.kernel.TCComponentBomChange; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentItem; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCProperty; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; +import com.teamcenter.services.rac.core._2012_10.DataManagement.GetDatasetTypesWithFileExtensionOutput; +import com.teamcenter.soaictstubs.tagSeq_tHolder; + +/** + * + * @ClassName: NewJFrame2 + * @Description: 初始化窗口 + * @author hcj + * @date 2023年12月19日 + * + */ +public class NewJFrame2 extends JFrame { + + private JButton jButton1; + private JButton jButton2; + private JComboBox jComboBox1; + private JComboBox jComboBox2; + private JComboBox jComboBox3; + private JLabel jLabel1; + private JLabel jLabel2; + private JLabel jLabel3; + private JLabel jLabel4; + private JPanel jPanel1; + private JPanel jPanel2; + private JPanel jPanel3; + private JPanel jPanel4; + private JScrollPane jScrollPane1; + private JTextField jTextField1; + private JTextField jTextField2; + private JTree jTree1; + private TCSession session; + private Map dataMap; + private TCComponentFolder target; + private List tempList; + private TCComponent component; + private Map itemMapIsSel = new HashMap<>(); + private Map itemMapBoMap = new HashMap<>(); + private String[] sxxdate; + + /** + * Creates new form NewJFrame2 + * + * @param dataMap + * @param session + * @param target + */ + public NewJFrame2(TCSession session, Map dataMap, TCComponentFolder target) { + this.session = session; + this.dataMap = dataMap; + this.target = target; + getDate(); + initComponents(); + } + + /** + * 获取一些初始化的值(首选项) + */ + private void getDate() { + // TODO Auto-generated method stub + sxxdate = Util.getSXX(session, "KWC_CreateBOM_attribute"); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + * + * @throws TCException + */ + @SuppressWarnings("unchecked") + private void initComponents() { + jPanel1 = new JPanel(); + jPanel2 = new JPanel(); + jLabel1 = new JLabel(); + jTextField1 = new JTextField(); + jLabel2 = new JLabel(); + jTextField2 = new JTextField(); + jLabel3 = new JLabel(); + jComboBox2 = new JComboBox<>(); + jComboBox3 = new JComboBox<>(); + jLabel4 = new JLabel(); + jPanel3 = new JPanel(); + jButton1 = new JButton(); + jButton2 = new JButton(); + jPanel4 = new JPanel(); + jScrollPane1 = new JScrollPane(); + jTree1 = new JTree(); + + setBackground(new java.awt.Color(240, 240, 240)); + + jPanel1.setBackground(new java.awt.Color(240, 240, 240)); + + jPanel2.setBackground(new java.awt.Color(240, 240, 240)); + + jLabel1.setText("产品代号:"); + + jLabel2.setText("产品名称:"); + + jLabel3.setText("类型:"); + + List typeList = (ArrayList) dataMap.get("typeList"); + String[] typeArray = (String[]) typeList.toArray(); + jComboBox2.setModel(new DefaultComboBoxModel<>(typeArray)); + jComboBox2.setSelectedIndex(0); + + Map templateMap = (HashMap) dataMap.get("templateMap"); + String template = templateMap.get(jComboBox2.getSelectedItem()); + String[] split = template.split(";"); + tempList = new ArrayList(); + // 根据UID找模板信息 + for (String uid : split) { + try { + TCComponent component = session.stringToComponent(uid); + tempList.add(component.getStringProperty("object_name")); + } catch (TCException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + + String[] array = (String[]) tempList.toArray(); + jComboBox3.setModel(new DefaultComboBoxModel<>(array)); + jComboBox3.setSelectedIndex(0); + jLabel4.setText("模板:"); + try { + // 根据模板创建树结构,给用户选择 + component = session.stringToComponent(tempList.get(0)); + TCComponentBOMWindowType winType = (TCComponentBOMWindowType) session.getTypeComponent("BOMWindow"); + TCComponentBOMWindow view = winType.create(null); + if (component instanceof TCComponentItemRevision) { + TCComponentItemRevision rev = (TCComponentItemRevision) component; + TCComponentBOMLine line = view.setWindowTopLine(rev.getItem(), rev, null, null); + String topNode = component.getStringProperty("object_string"); + CheckBoxTreeNode rootNode = new CheckBoxTreeNode(topNode); + getTree(line, rootNode); + DefaultTreeModel model = new DefaultTreeModel(rootNode); + jTree1.addMouseListener(new CheckBoxTreeNodeSelectionListener()); + jTree1.setModel(model); + jTree1.setCellRenderer(new CheckBoxTreeCellRenderer()); + } + + } catch (TCException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + + GroupLayout jPanel2Layout = new GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup().addGap(27, 27, 27).addGroup(jPanel2Layout + .createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup().addComponent(jLabel3) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jComboBox2, GroupLayout.PREFERRED_SIZE, 160, GroupLayout.PREFERRED_SIZE)) + .addGroup(jPanel2Layout.createSequentialGroup().addComponent(jLabel4) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jComboBox3, GroupLayout.PREFERRED_SIZE, 160, GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 51, Short.MAX_VALUE) + .addGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(jLabel1, GroupLayout.Alignment.TRAILING) + .addComponent(jLabel2, GroupLayout.Alignment.TRAILING)) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(jTextField1, GroupLayout.PREFERRED_SIZE, 160, GroupLayout.PREFERRED_SIZE) + .addComponent(jTextField2, GroupLayout.PREFERRED_SIZE, 160, GroupLayout.PREFERRED_SIZE)) + .addGap(27, 27, 27))); + jPanel2Layout + .setVerticalGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup().addGap(13, 13, 13) + .addGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(jTextField1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1).addComponent(jLabel3) + .addComponent(jComboBox2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup( + jPanel2Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(jTextField2, GroupLayout.PREFERRED_SIZE, + GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel2) + .addComponent(jComboBox3, GroupLayout.PREFERRED_SIZE, + GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel4)) + .addContainerGap(17, Short.MAX_VALUE))); + + jPanel3.setBackground(new java.awt.Color(240, 240, 240)); + + jButton1.setText("创建"); + jButton1.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + // 必填判定 + String field1 = jTextField1.getText(); + String field2 = jTextField2.getText(); + if (field1 == null || "".equals(field1.trim()) || field2 == null || "".equals(field2.trim())) { + MessageBox.post("产品代号和产品名称必填,请检查", "提示", MessageBox.INFORMATION); + return; + } + + } + }); + + jButton2.setText("取消"); + + GroupLayout jPanel3Layout = new GroupLayout(jPanel3); + jPanel3.setLayout(jPanel3Layout); + jPanel3Layout + .setHorizontalGroup(jPanel3Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(jButton1) + .addGap(35, 35, 35).addComponent(jButton2).addGap(33, 33, 33))); + jPanel3Layout + .setVerticalGroup(jPanel3Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup().addContainerGap() + .addGroup(jPanel3Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(jButton1).addComponent(jButton2)) + .addContainerGap(21, Short.MAX_VALUE))); + + jPanel4.setBackground(new java.awt.Color(255, 255, 255)); + + jScrollPane1.setViewportView(jTree1); + + GroupLayout jPanel4Layout = new GroupLayout(jPanel4); + jPanel4.setLayout(jPanel4Layout); + jPanel4Layout.setHorizontalGroup( + jPanel4Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(jScrollPane1)); + jPanel4Layout.setVerticalGroup(jPanel4Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup( + GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup().addGap(0, 0, Short.MAX_VALUE) + .addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 421, GroupLayout.PREFERRED_SIZE))); + + GroupLayout jPanel1Layout = new GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup().addContainerGap().addGroup(jPanel1Layout + .createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(jPanel3, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel4, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap())); + jPanel1Layout + .setVerticalGroup(jPanel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup().addContainerGap() + .addComponent(jPanel2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE) + .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jPanel3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE) + .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED).addComponent(jPanel4, + GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap())); + + GroupLayout layout = new GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addContainerGap() + .addComponent(jPanel1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap())); + layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup().addContainerGap().addComponent(jPanel1, + GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); + + pack(); + // 类型下拉框监听,更新模板下拉框 + jComboBox2.addItemListener(new ItemListener() { + + @Override + public void itemStateChanged(ItemEvent e) { + Map templateMap = (HashMap) dataMap.get("templateMap"); + String template = templateMap.get(jComboBox2.getSelectedItem()); + String[] split = template.split(";"); + List tempList = new ArrayList(); + // 根据UID找模板信息 + for (String uid : split) { + try { + TCComponent component = session.stringToComponent(uid); + tempList.add(component.getStringProperty("object_name")); + } catch (TCException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + + String[] array = (String[]) tempList.toArray(); + jComboBox3.setModel(new DefaultComboBoxModel<>(array)); + } + }); + // 模板下拉框更新,更新Jtree + jComboBox3.addItemListener(new ItemListener() { + + @Override + public void itemStateChanged(ItemEvent e) { + try { + int selectedIndex = jComboBox3.getSelectedIndex(); + String uid = tempList.get(selectedIndex); + component = session.stringToComponent(uid); + + TCComponentBOMWindowType winType = (TCComponentBOMWindowType) session.getTypeComponent("BOMWindow"); + TCComponentBOMWindow view = winType.create(null); + if (component instanceof TCComponentItemRevision) { + TCComponentItemRevision rev = (TCComponentItemRevision) component; + TCComponentBOMLine line = view.setWindowTopLine(rev.getItem(), rev, null, null); + String topNode = component.getStringProperty("object_string"); + CheckBoxTreeNode rootNode = new CheckBoxTreeNode(topNode); + getTree(line, rootNode); + DefaultTreeModel model = new DefaultTreeModel(rootNode); + jTree1.addMouseListener(new CheckBoxTreeNodeSelectionListener()); + jTree1.setModel(model); + jTree1.setCellRenderer(new CheckBoxTreeCellRenderer()); + } + } catch (Exception e2) { + // TODO: handle exception + e2.printStackTrace(); + } + + } + }); + + // 确定按钮更新 + jButton1.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // 必填判定 + String field1 = jTextField1.getText(); + String field2 = jTextField2.getText(); + if (field1 == null || "".equals(field1.trim()) || field2 == null || "".equals(field2.trim())) { + MessageBox.post("产品代号和产品名称必填,请检查", "提示", MessageBox.INFORMATION); + return; + } + // 开始复制对象 + TCComponentItemRevision revision = (TCComponentItemRevision) component; + try { + if (itemMapIsSel.get(revision.getStringProperty("object_string")).isSelected) { + TCComponentItem newItem = revision.saveAsItem(jTextField1.getText(), "A", jTextField2.getText(), + "", true, null); + TCComponentItemRevision newRevision = newItem.getLatestItemRevision(); + TCComponentBOMWindowType winType = (TCComponentBOMWindowType) session + .getTypeComponent("BOMWindow"); + TCComponentBOMWindow view = winType.create(null); + TCComponentBOMLine line = view.setWindowTopLine(revision.getItem(), revision, null, null); + // 根据首选项的值复制对象属性 + for (String attrStr : sxxdate) { + if (attrStr.startsWith(line.getItemRevision().getItem().getStringProperty("object_type"))) { + try { + replaceAttribute(line, newRevision, attrStr); + } catch (ParseException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + break; + } + } + // 递归BOM结构,删除未选中的对象 + collectAllBomLine(line, jTextField1.getText(), winType, view, false); + TCComponentItemRevision itemRevision = line.getItemRevision(); + target.add("", itemRevision); + + } else { + return; + } + + } catch (TCException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + }); + } + + /** + * 递归BOM结构 + * + * @param view + * @param topBomLine + * @param newId + * @param winType + * @param newview + * @throws TCException + */ + public void collectAllBomLine(TCComponentBOMLine bomLine, String newId, TCComponentBOMWindowType winType, + TCComponentBOMWindow newview, Boolean flag) throws TCException { + String objectName = bomLine.getItemRevision().getStringProperty("object_name"); + boolean selected = itemMapIsSel.get(objectName).isSelected(); + // 判断界面是否选中 + if (selected) { + // 另存一个新的出来,修改数据。替换当前的bom行 + if (flag) { + // 第一次递归的时候直接判断子类继续递归 + flag = false; + if (bomLine.hasChildren()) { + for (AIFComponentContext aifComponentContext : bomLine.getChildren()) { + TCComponentBOMLine line = (TCComponentBOMLine) aifComponentContext.getComponent(); + collectAllBomLine(line, newId, winType, newview, flag); + } + } + + } else { + // 当不是第一次递归的时候,每次递归另存一个对象,把要同步的数据同步过去,然后将对象替换到新的bomview上去 + TCComponentItem saveAsItem = bomLine.getItemRevision().saveAsItem(jTextField1.getText(), "A", + bomLine.getItemRevision().getStringProperty("object_name"), "", true, null); + TCComponentItemRevision latestItemRevision = saveAsItem.getLatestItemRevision(); + // 替换属性 + for (String attrStr : sxxdate) { + if (attrStr.startsWith(bomLine.getItemRevision().getItem().getStringProperty("object_type"))) { + try { + replaceAttribute(itemMapBoMap.get(objectName), latestItemRevision, attrStr); + } catch (ParseException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + break; + } + } + // 替换分类属性 + + // 替换bom行 + bomLine.replace(saveAsItem, latestItemRevision, newview); + if (bomLine.hasChildren()) { + for (AIFComponentContext aifComponentContext : bomLine.getChildren()) { + TCComponentBOMLine line = (TCComponentBOMLine) aifComponentContext.getComponent(); + collectAllBomLine(line, newId, winType, newview, flag); + } + } + } + } else { + // 从bomview中删除对象 + return; + } + + } + + /** + * 根据component对象去创建树结构 + * + * @param component + * @param rootNode2 + * @throws TCException + */ + private void getTree(TCComponentBOMLine bomLine, CheckBoxTreeNode rootNode) throws TCException { + itemMapIsSel.put(bomLine.getItemRevision().getStringProperty("object_name"), rootNode); + itemMapBoMap.put(bomLine.getItemRevision().getStringProperty("object_name"), bomLine); + if (bomLine.hasChildren()) { + AIFComponentContext[] children = bomLine.getChildren(); + for (AIFComponentContext aifComponentContext : children) { + TCComponentBOMLine line = (TCComponentBOMLine) aifComponentContext.getComponent(); + String node = line.getItemRevision().getStringProperty("object_string"); + CheckBoxTreeNode childNode = new CheckBoxTreeNode(node); + rootNode.add(childNode); + getTree(line, childNode); + } + } + } + + private void replaceAttribute(TCComponentBOMLine oldLine, TCComponentItemRevision newLine, String attrStr) + throws TCException, ParseException { + String[] attrs = attrStr.split("=")[1].split(";"); + for (String attr : attrs) { + String[] p1 = attr.split("\\."); + + if (p1[0].equals("item")) { + // pitem.setStringProperty(p1[1], val); + String val = oldLine.getItem().getStringProperty(p1[1]); + TCComponentItem pitem = newLine.getItem(); + TCProperty property = (TCProperty) pitem.getTCProperty(p1[1]); + switch (property.getPropertyType()) { + case TCProperty.PROP_string: + case TCProperty.PROP_long_string: + pitem.setStringProperty(p1[1], val); + break; + case TCProperty.PROP_short: + case TCProperty.PROP_int: + pitem.setIntProperty(p1[1], Integer.parseInt(val)); + break; + case TCProperty.PROP_double: + case TCProperty.PROP_float: + pitem.setDoubleProperty(p1[1], Double.parseDouble(val)); + break; + case TCProperty.PROP_date: + if (!val.equals("")) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + Date date = sdf.parse(p1[1]); + if (date != null) { + pitem.setDateProperty(p1[1], date); + } + } + break; + default: + pitem.setStringProperty(p1[1], val); + break; + } + } else if (p1[0].equals("rev")) { + String val = oldLine.getItemRevision().getStringProperty(p1[1]); + TCComponentItemRevision prev = newLine; + TCProperty property = (TCProperty) prev.getTCProperty(p1[1]); + // prev.setStringProperty(p1[1], val); + switch (property.getPropertyType()) { + case TCProperty.PROP_string: + case TCProperty.PROP_long_string: + prev.setStringProperty(p1[1], val); + break; + case TCProperty.PROP_short: + case TCProperty.PROP_int: + prev.setIntProperty(p1[1], Integer.parseInt(val)); + break; + case TCProperty.PROP_double: + case TCProperty.PROP_float: + prev.setDoubleProperty(p1[1], Double.parseDouble(val)); + break; + case TCProperty.PROP_date: + if (!val.equals("")) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + Date date = sdf.parse(p1[1]); + if (date != null) { + prev.setDateProperty(p1[1], date); + } + } + break; + default: + prev.setStringProperty(p1[1], val); + break; + } + } else if (p1[0].equals("bom")) { + String val = oldLine.getStringProperty(p1[1]); + TCComponentBOMWindowType winType = (TCComponentBOMWindowType) session.getTypeComponent("BOMWindow"); + TCComponentBOMWindow view = winType.create(null); + TCComponentBOMLine line = view.setWindowTopLine(newLine.getItem(), newLine, null, null); + TCProperty property = (TCProperty) line.getTCProperty(p1[1]); + switch (property.getPropertyType()) { + case TCProperty.PROP_string: + case TCProperty.PROP_long_string: + line.setStringProperty(p1[1], val); + break; + case TCProperty.PROP_short: + case TCProperty.PROP_int: + line.setIntProperty(p1[1], Integer.parseInt(val)); + break; + case TCProperty.PROP_double: + case TCProperty.PROP_float: + line.setDoubleProperty(p1[1], Double.parseDouble(val)); + break; + case TCProperty.PROP_date: + if (!val.equals("")) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + Date date = sdf.parse(p1[1]); + if (date != null) { + line.setDateProperty(p1[1], date); + } + } + break; + default: + line.setStringProperty(p1[1], val); + break; + } + } + } + } +} diff --git a/src/com/connor/kwc/createBom/Util.java b/src/com/connor/kwc/createBom/Util.java new file mode 100644 index 0000000..a1cebe9 --- /dev/null +++ b/src/com/connor/kwc/createBom/Util.java @@ -0,0 +1,157 @@ +/** * @Title: util.java + * @Package com.connor.kwc.createBom + * @Description: TODO(用一句话描述该文件做什么) + * @author admin * @date 2023年12月18日 + * @version V1.0 + */ +package com.connor.kwc.createBom; + +import java.util.HashMap; +import java.util.Map; + +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCAccessControlService; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.kernel.TCTextService; +import com.teamcenter.rac.kernel.TCUserService; +import com.teamcenter.rac.util.MessageBox; +import com.teamcenter.services.rac.core.DataManagementService; +import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateIn; +import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateInput; +import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateOut; +import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateResponse; +import com.teamcenter.soa.client.model.ServiceData; + +/** + * @ClassName: util + * @Description: 工具类 + * @author hcj + * @date 2023年12月18日 + * + */ +public class Util { + public static final TCSession session; + public static final TCTextService textService; + + static { + session = (TCSession) AIFUtility.getCurrentApplication().getSession(); + textService = session.getTextService(); + } + + /** + * + * @Title: getSXX + * @Description: 获取首选项的值 + * @param @param session + * @param @param name + * @param @return 参数 + * @return String[] 返回类型 + * @throws + */ + public static String[] getSXX(TCSession session, String name) { + String[] value = session.getPreferenceService().getStringValues(name); + if (value != null && value.length > 0) { + return value; + } else { + MessageBox.post("首选项【" + name + "】配置有误", "提示", MessageBox.ERROR); + } + return null; + } + + /** + * + * @Title: userHasPowerForCompont + * @Description: 判断用户是否对某个对象有写的权限 + * @param @param session + * @param @param component + * @param @return 参数 + * @return Boolean 返回类型 + * @throws + */ + public static Boolean userHasPowerForCompont(TCSession session, TCComponent component) { + TCAccessControlService tcAccessControlService = session.getTCAccessControlService(); + TCComponent[] user = new TCComponent[] { session.getUser(), session.getGroup(), session.getRole() }; + try { + return tcAccessControlService.checkAccessorsPrivilege(user, component, "WRITE"); + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + + } + + /** + * + * @Title: setByPass + * @Description: 开启/关闭旁路 + * @param @param val 参数 + * @return void 返回类型 + * @throws + */ + public static void setByPass(boolean val) { + try { + TCUserService userservice = session.getUserService(); + userservice.call(val ? "CONNOR_open_bypass" : "CONNOR_close_bypass", new Object[] { "" }); + System.out.println(val ? "Open Bypass" : "Close Bypass"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * + * @Title: createFolderBySOA + * @Description: 用SOA创建Folder + * @param @param folderTypeName + * @param @param folderName + * @param @return + * @param @throws Exception 参数 + * @return TCComponentFolder 返回类型 + * @throws + */ + public static TCComponentFolder createFolderBySOA(String folderTypeName, String folderName) throws Exception { + if (folderTypeName == null || "".equals(folderTypeName.trim())) { + return null; + } + CreateInput itemInput = new CreateInput(); + itemInput.boName = folderTypeName; + Map itemPropMap = new HashMap<>(); + itemPropMap.put("object_name", folderName); + itemInput.stringProps = itemPropMap; + // create info + CreateIn cI = new CreateIn(); + cI.clientId = "CreateFolder"; + cI.data = itemInput; + // service + DataManagementService service = DataManagementService.getService(session); + // create + CreateResponse resp = service.createObjects(new CreateIn[] { cI }); + throwServiceDataError(resp.serviceData); + CreateOut[] cOs = resp.output; + if (cOs.length > 0) { + for (TCComponent s : cOs[0].objects) { + if (s instanceof TCComponentFolder) { + return (TCComponentFolder) s; + } + } + } + return null; + } + + public static void throwServiceDataError(ServiceData serviceData) throws Exception { + if (serviceData.sizeOfPartialErrors() > 0) { + StringBuilder errInfo = new StringBuilder(); + for (int i = 0; i < serviceData.sizeOfPartialErrors(); i++) { + for (String msg : serviceData.getPartialError(i).getMessages()) { + errInfo.append(msg + "\n"); + } + } + // System.out.println(errInfo.toString()); + throw new Exception(errInfo.toString()); + } + } +} diff --git a/src/com/connor/kwc/createBom/test.java b/src/com/connor/kwc/createBom/test.java new file mode 100644 index 0000000..669f7d3 --- /dev/null +++ b/src/com/connor/kwc/createBom/test.java @@ -0,0 +1,72 @@ +/** * @Title: test.java + * @Package com.connor.kwc.createBom + * @Description: TODO(用一句话描述该文件做什么) + * @author admin * @date 2023年12月19日 + * @version V1.0 + */ +package com.connor.kwc.createBom; + +import java.awt.EventQueue; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +import javax.swing.JFrame; +import javax.swing.JScrollPane; +import javax.swing.JTree; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeNode; +import javax.swing.tree.TreePath; + +/** + * @ClassName: test + * @Description: 测试类 + * @author hcj + * @date 2023年12月19日 + * + */ +public class test { + public static void main(String[] args) { + EventQueue.invokeLater(new Runnable() { + public void run() { + JFrame frame = new JFrame("CheckBoxTreeDemo"); + frame.setBounds(200, 200, 400, 400); + JTree tree = new JTree(); + CheckBoxTreeNode rootNode = new CheckBoxTreeNode("root"); + CheckBoxTreeNode node1 = new CheckBoxTreeNode("node_1"); + CheckBoxTreeNode node1_1 = new CheckBoxTreeNode("node_1_1"); + CheckBoxTreeNode node1_2 = new CheckBoxTreeNode("node_1_2"); + CheckBoxTreeNode node1_3 = new CheckBoxTreeNode("node_1_3"); + node1.add(node1_1); + node1.add(node1_2); + node1.add(node1_3); + CheckBoxTreeNode node2 = new CheckBoxTreeNode("node_2"); + boolean selected = node2.isSelected(); + CheckBoxTreeNode node2_1 = new CheckBoxTreeNode("node_2_1"); + CheckBoxTreeNode node2_2 = new CheckBoxTreeNode("node_2_2"); + node2.add(node2_1); + node2.add(node2_2); + rootNode.add(node1); + rootNode.add(node2); + DefaultTreeModel model = new DefaultTreeModel(rootNode); + tree.addMouseListener(new CheckBoxTreeNodeSelectionListener()); + tree.setModel(model); + tree.setCellRenderer(new CheckBoxTreeCellRenderer()); + tree.addMouseListener(new MouseAdapter() { + public void mousePressed(MouseEvent e) { + String string = tree.getSelectionPath().toString(); + System.out.println(string); + + } + }); + JScrollPane scroll = new JScrollPane(tree); + scroll.setBounds(0, 0, 300, 320); + frame.getContentPane().add(scroll); + + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + frame.setVisible(true); + } + }); + } +} diff --git a/src/com/connor/kwc/createDWG/CreateDWGHandler.java b/src/com/connor/kwc/createDWG/CreateDWGHandler.java new file mode 100644 index 0000000..c0fbb6d --- /dev/null +++ b/src/com/connor/kwc/createDWG/CreateDWGHandler.java @@ -0,0 +1,111 @@ +package com.connor.kwc.createDWG; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import com.connor.kwc.createBom.Util; +import com.teamcenter.rac.aif.AbstractAIFApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentDataset; +import com.teamcenter.rac.kernel.TCComponentItemRevision; +import com.teamcenter.rac.kernel.TCComponentTcFile; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +/** + * + * @ClassName: CreateDWGHandler + * @Description: 根据用户选择菜单创建图纸数据集 + * @author hcj + * @date 2023年12月22日 + * + */ +public class CreateDWGHandler extends AbstractHandler { + + private TCSession session; + private String type; + + @Override + public Object execute(ExecutionEvent arg0) throws ExecutionException { + AbstractAIFApplication app = AIFUtility.getCurrentApplication(); + try { + new Thread() { + @Override + public void run() { + // 获取tc当前选择的操作 + InterfaceAIFComponent target = app.getTargetComponent(); + session = (TCSession) target.getSession(); + String[] sxx = Util.getSXX(session, "KWC_DWGTemplateItemList"); + + ArrayList itemTypeList = new ArrayList<>(Arrays.asList(sxx)); + if (target instanceof TCComponentItemRevision) { + TCComponentItemRevision revision = (TCComponentItemRevision) target; + try { + if (itemTypeList.contains(revision.getStringProperty("object_type"))) { + String[] uidtemp = Util.getSXX(session, "KWC_DWGTemplateUID"); + Map templateMap = new HashMap(); + for (String str : uidtemp) { + String[] split = str.split("="); + templateMap.put(split[0], split[1]); + } + String id = arg0.getCommand().getId(); + if (id.endsWith("A0")) { + createdataSetForUID(revision, templateMap, "A0"); + } else if (id.endsWith("A1")) { + createdataSetForUID(revision, templateMap, "A1"); + } else if (id.endsWith("A2")) { + createdataSetForUID(revision, templateMap, "A2"); + } else if (id.endsWith("A3")) { + createdataSetForUID(revision, templateMap, "A3"); + } else if (id.endsWith("A4")) { + createdataSetForUID(revision, templateMap, "A4"); + } + + } else { + MessageBox.post("选择的对象类型不存在于【KWC_DWGTemplateItemList】,请重新选择", "提示", + MessageBox.INFORMATION); + return; + } + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + } + }.start(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public void createdataSetForUID(TCComponentItemRevision revision, Map templateMap, String key) + throws TCException { + if (templateMap.containsKey(key)) { + TCComponent dataseTcComponent = session.stringToComponent(templateMap.get(key)); + if (dataseTcComponent instanceof TCComponentDataset) { + TCComponentDataset dataset = (TCComponentDataset) dataseTcComponent; + TCComponentDataset saveAs = dataset.saveAs(null); + saveAs.setStringProperty("object_name", revision.getStringProperty("item_id")); + TCComponentTcFile[] tcFiles = saveAs.getTcFiles(); + tcFiles[0].setStringProperty("object_name", revision.getStringProperty("item_id") + ".dwg"); + revision.add("IMAN_specification", saveAs); + MessageBox.post("创建成功", "提示", MessageBox.INFORMATION); + return; + } + } else { + MessageBox.post("首选项【KWC_DWGTemplateUID】没有匹配的ID值", "提示", MessageBox.INFORMATION); + return; + } + } + +} diff --git a/src/com/connor/kwc/createTemplate/CreateTemplateDialg.java b/src/com/connor/kwc/createTemplate/CreateTemplateDialg.java new file mode 100644 index 0000000..daced7b --- /dev/null +++ b/src/com/connor/kwc/createTemplate/CreateTemplateDialg.java @@ -0,0 +1,276 @@ +package com.connor.kwc.createTemplate; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.DefaultComboBoxModel; +import javax.swing.GroupLayout; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.JTree; +import javax.swing.UIManager; +import javax.swing.WindowConstants; +import javax.swing.tree.DefaultTreeModel; + +import com.connor.kwc.createBom.CheckBoxTreeCellRenderer; +import com.connor.kwc.createBom.CheckBoxTreeNode; +import com.connor.kwc.createBom.CheckBoxTreeNodeSelectionListener; +import com.connor.kwc.createBom.Util; +import com.teamcenter.rac.aif.AIFPortal; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCComponentFolderType; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +/** + * + * @ClassName: CreateTemplateDialg + * @Description: 创建文档窗口实现 + * @author hcj + * @date 2023年12月22日 + * + */ +public class CreateTemplateDialg extends JFrame { + + private TCSession session; + private TCComponent target; + private JButton jButton3; + private JLabel jLabel3; + private JPanel jPanel1; + private JPanel jPanel2; + private JPanel jPanel4; + private JScrollPane jScrollPane1; + private JTextField jTextField3; + private JTree jTree1; + private String[] sxxdate; + + /** + * Creates new form NewJFrame2 + */ + public CreateTemplateDialg(TCSession session, TCComponent folder) { + this.session = session; + this.target = folder; + getData(); + try { + initComponents(); + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + private void getData() { + // TODO Auto-generated method stub + sxxdate = Util.getSXX(session, "KWC_CreateDOCtemplate"); + + } + + @SuppressWarnings("unchecked") + // + private void initComponents() throws TCException { + this.setTitle("依据模板创建"); + jPanel1 = new JPanel(); + jPanel2 = new JPanel(); + jLabel3 = new JLabel(); + jScrollPane1 = new JScrollPane(); + jTree1 = new JTree(); + // 初始化Jtree + + jTree1.setCellRenderer(new CheckBoxTreeCellRenderer()); + jButton3 = new JButton(); + jTextField3 = new JTextField(); + jTextField3.setText(target.getStringProperty("item_id")); + jPanel4 = new JPanel(); + + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + setBackground(new java.awt.Color(240, 240, 240)); + + jPanel1.setBackground(new java.awt.Color(240, 240, 240)); + + jPanel2.setBackground(new java.awt.Color(240, 240, 240)); + + jLabel3.setText("产品代号:"); + + jScrollPane1.setViewportView(jTree1); + + jButton3.setText("确定"); + + jTextField3.setText(""); + + GroupLayout jPanel2Layout = new GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup().addGap(53, 53, 53).addComponent(jLabel3) + .addGap(18, 18, 18) + .addComponent(jTextField3, GroupLayout.PREFERRED_SIZE, 213, GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18).addComponent(jButton3) + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(jPanel2Layout.createSequentialGroup().addContainerGap() + .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 526, Short.MAX_VALUE).addContainerGap())); + jPanel2Layout + .setVerticalGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup().addGap(13, 13, 13) + .addGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(jButton3) + .addComponent(jTextField3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel3)) + .addGap(18, 18, 18) + .addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 544, GroupLayout.PREFERRED_SIZE) + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); + + jPanel4.setBackground(new java.awt.Color(255, 255, 255)); + + GroupLayout jPanel4Layout = new GroupLayout(jPanel4); + jPanel4.setLayout(jPanel4Layout); + jPanel4Layout.setHorizontalGroup( + jPanel4Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 538, Short.MAX_VALUE)); + jPanel4Layout.setVerticalGroup( + jPanel4Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 0, Short.MAX_VALUE)); + + GroupLayout jPanel1Layout = new GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup().addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(jPanel2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addComponent(jPanel4, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE)) + .addContainerGap())); + jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup().addContainerGap() + .addComponent(jPanel2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE) + .addGap(73, 73, 73) + .addComponent(jPanel4, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap())); + + GroupLayout layout = new GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addContainerGap() + .addComponent(jPanel1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap())); + layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup().addContainerGap() + .addComponent(jPanel1, GroupLayout.PREFERRED_SIZE, 619, GroupLayout.PREFERRED_SIZE) + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); + + pack(); + + this.jButton3.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + String name = jTextField3.getText(); + if (name.isEmpty()) { + MessageBox.post("产品代号不能为空!", "提示 ", MessageBox.INFORMATION); + } else { + TCComponentFolderType folderType; + try { + Util.setByPass(true); + folderType = (TCComponentFolderType) session.getTypeComponent("LD6_CusProdFolder"); + TCComponentFolder folder = Util.createFolderBySOA(folderType.getTypeName(), name); + //TCComponentFolder folder = folderType.create(name, "", "LD6_CusProdFolder"); + target.add("contents", folder); + CheckBoxTreeNode root = (CheckBoxTreeNode) jTree1.getModel().getRoot(); + createFolderStruct(root,folder,(TCComponentFolderType) session.getTypeComponent("LD6_ProjMaFolder"),true); + Util.setByPass(false); + dispose(); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + }); + } + + /** + * 创建树 + * @param tree + */ + private void initTree(JTree tree){ + String puids = sxxdate[0].split("=")[1]; + TCComponent component; + try { + CheckBoxTreeNode rootNode = new CheckBoxTreeNode("模板"); + String[] puid = puids.split(";"); + for(String uid : puid) { + component = session.stringToComponent(uid); + if(component == null || !(component instanceof TCComponentFolder)) { + MessageBox.post(puid + " 该puid在TC中不存在对象或者该puid对应的不是‘文件夹’对象!", "异常", MessageBox.ERROR); + return; + }else { + buildTree(component,rootNode); + } + } + + DefaultTreeModel model = new DefaultTreeModel(rootNode); + tree.addMouseListener(new CheckBoxTreeNodeSelectionListener()); + tree.setModel(model); + tree.setCellRenderer(new CheckBoxTreeCellRenderer()); + //展开所有节点并选中 + for (int i = 0; i < tree.getRowCount(); i++) { + tree.expandRow(i); + } + rootNode.setSelected(true); + } catch (TCException e) { + e.printStackTrace(); + } + } + + /** + * 递归创建树的子节点 + * @param component + * @param rootNode + * @throws TCException + */ + private void buildTree(TCComponent component, CheckBoxTreeNode rootNode) throws TCException { + TCComponent[] relatedComponent = component.getRelatedComponents("contents"); + if(relatedComponent != null) { + for (TCComponent child : relatedComponent) { + CheckBoxTreeNode childNode = new CheckBoxTreeNode(child.getStringProperty("object_name")); + rootNode.add(childNode); + buildTree(child,childNode); + } + } + + } + + /** + * 递归新建文件夹结构 + * @param root 父节点 + * @param folder 父节点生成的文件夹 + * @param folderType + * @throws Exception + */ + private void createFolderStruct(CheckBoxTreeNode root, TCComponentFolder parentFolder, + TCComponentFolderType folderType,boolean ifTop) throws Exception { + if(root.isSelected()) { + if(ifTop) { + for (int i = 0; i < root.getChildCount(); i++) { + CheckBoxTreeNode child = (CheckBoxTreeNode) root.getChildAt(i); + createFolderStruct(child,parentFolder,folderType,false); + } + } + else { + TCComponentFolder folder = Util.createFolderBySOA(folderType.getTypeName(), root.toString()); + parentFolder.add("contents", folder); + for (int i = 0; i < root.getChildCount(); i++) { + CheckBoxTreeNode child = (CheckBoxTreeNode) root.getChildAt(i); + createFolderStruct(child,folder,folderType,false); + } + } + } + + } +} diff --git a/src/com/connor/kwc/createTemplate/CreateTemplateHandler.java b/src/com/connor/kwc/createTemplate/CreateTemplateHandler.java new file mode 100644 index 0000000..2ba2b50 --- /dev/null +++ b/src/com/connor/kwc/createTemplate/CreateTemplateHandler.java @@ -0,0 +1,61 @@ +package com.connor.kwc.createTemplate; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; + +import com.connor.kwc.createBom.CreateBOMOperation; +import com.teamcenter.rac.aif.AbstractAIFApplication; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.aifrcp.AIFUtility; +import com.teamcenter.rac.kernel.TCComponentFolder; +import com.teamcenter.rac.kernel.TCException; +import com.teamcenter.rac.kernel.TCSession; +import com.teamcenter.rac.util.MessageBox; + +/** + * + * @ClassName: CreateTemplateHandler + * @Description: 依据模板创建文档 + * @author hcj + * @date 2023年12月22日 + * + */ +public class CreateTemplateHandler extends AbstractHandler { + private TCSession session; + + @Override + public Object execute(ExecutionEvent arg0) throws org.eclipse.core.commands.ExecutionException { + // TODO Auto-generated method stub + AbstractAIFApplication app = AIFUtility.getCurrentApplication(); + new Thread() { + + @Override + public void run() { + InterfaceAIFComponent folder = app.getTargetComponent(); + session = (TCSession) folder.getSession(); + if (folder instanceof TCComponentFolder) { + try { + if ("XYProduct".equals(((TCComponentFolder) folder).getStringProperty("object_type"))) { + CreateTemplateOperation createTemplateOperation = new CreateTemplateOperation(session, + folder); + session.queueOperation(createTemplateOperation); + } else { + MessageBox.post("对象类型选择错误", "提示 ", MessageBox.INFORMATION); + return; + } + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } else { + MessageBox.post("对象类型选择错误", "提示 ", MessageBox.INFORMATION); + return; + } + }; + }.start(); + + return null; + } + +} diff --git a/src/com/connor/kwc/createTemplate/CreateTemplateOperation.java b/src/com/connor/kwc/createTemplate/CreateTemplateOperation.java new file mode 100644 index 0000000..f650a98 --- /dev/null +++ b/src/com/connor/kwc/createTemplate/CreateTemplateOperation.java @@ -0,0 +1,36 @@ +package com.connor.kwc.createTemplate; + +import com.teamcenter.rac.aif.AbstractAIFOperation; +import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; +import com.teamcenter.rac.kernel.TCComponent; +import com.teamcenter.rac.kernel.TCSession; + +/** + * + * @ClassName: CreateTemplateOperation + * @Description: 创建模板文件实现类 + * @author hcj + * @date 2023年12月22日 + * + */ +public class CreateTemplateOperation extends AbstractAIFOperation { + private TCSession session; + private TCComponent folder; + + public CreateTemplateOperation(TCSession session, InterfaceAIFComponent folder) { + // TODO Auto-generated constructor stub + this.session = session; + this.folder = (TCComponent) folder; + } + + @Override + public void executeOperation() throws Exception { + // TODO Auto-generated method stub + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new CreateTemplateDialg(session, folder).setVisible(true); + } + }); + } + +}