feat(CreateTempDrawingDialog): 实现 LOV 属性的递归加载和展示

- 新增递归加载 LOV 子项的功能,将 LOV 属性的显示值和真实值映射保存在 rMap 中
- 重构 getLovTrueValue 方法,支持通过 LOV 子项集合获取真实值- 使用 JTreeComboBox 替代 JComboBox 展示 LOV 属性,支持多级 LOV 的展示
- 优化 LOV 属性的获取和处理逻辑,提高代码可维护性和性能
mian
熊朝柱 1 month ago
parent e21bc8cc17
commit 2403900a30

@ -17,6 +17,7 @@ import java.util.regex.Pattern;
import javax.mail.Folder; import javax.mail.Folder;
import javax.swing.*; import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import org.apache.log4j.LogManager; import org.apache.log4j.LogManager;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
@ -30,6 +31,7 @@ import com.teamcenter.rac.kernel.TCComponentFolder;
import com.teamcenter.rac.kernel.TCComponentForm; import com.teamcenter.rac.kernel.TCComponentForm;
import com.teamcenter.rac.kernel.TCComponentItem; import com.teamcenter.rac.kernel.TCComponentItem;
import com.teamcenter.rac.kernel.TCComponentItemRevision; import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentItemType;
import com.teamcenter.rac.kernel.TCComponentListOfValues; import com.teamcenter.rac.kernel.TCComponentListOfValues;
import com.teamcenter.rac.kernel.TCException; import com.teamcenter.rac.kernel.TCException;
import com.teamcenter.rac.kernel.TCPreferenceService; import com.teamcenter.rac.kernel.TCPreferenceService;
@ -51,8 +53,12 @@ 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.CreateInput;
import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateOut; import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateOut;
import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateResponse; import com.teamcenter.services.rac.core._2008_06.DataManagement.CreateResponse;
import com.teamcenter.soaictstubs.BooleanHolder;
import com.teamcenter.soaictstubs.ICCTItem;
import com.teamcenter.soaictstubs.StringHolder;
import cn.net.connor.createTempDrawings.pojo.LovProperty; import cn.net.connor.createTempDrawings.pojo.LovProperty;
import cn.net.connor.createTempDrawings.utils.JTreeComboBox;
import cn.net.connor.createTempDrawings.utils.TCLOVUtil; import cn.net.connor.createTempDrawings.utils.TCLOVUtil;
public class CreateTempDrawingDialog extends JFrame implements ActionListener{ public class CreateTempDrawingDialog extends JFrame implements ActionListener{
@ -76,6 +82,7 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{
private List<String> showPropsInfoList = new ArrayList<>(); private List<String> showPropsInfoList = new ArrayList<>();
private JButton closeButton; private JButton closeButton;
private JButton buildButton; private JButton buildButton;
private TCComponentItemType tccomponentitemtype;
// 添加日期格式化工具 // 添加日期格式化工具
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
/** /**
@ -94,6 +101,13 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{
* lov * lov
*/ */
private List<LovProperty> lovPropertyList = new ArrayList<>(); private List<LovProperty> lovPropertyList = new ArrayList<>();
/**
* lovmap
* @key:lovlov
* @Value:lov-
*/
private static Map<String, Map<String, String>> rMap = new HashMap<String, Map<String,String>>();
/** /**
@ -357,7 +371,6 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{
String trueValue = getLovTrueValue(trueName,value,this.lovPropertyList); String trueValue = getLovTrueValue(trueName,value,this.lovPropertyList);
itemRevisionDef.stringProps.put(trueName, trueValue); itemRevisionDef.stringProps.put(trueName, trueValue);
} }
// itemRevisionDef.stringProps.put(trueName, value);
}else if (location.equals("Form")) { }else if (location.equals("Form")) {
//此处对表单属性暂时不做赋值先暂存到一个Map集合中 //此处对表单属性暂时不做赋值先暂存到一个Map集合中
// itemRevisionDef.stringProps.put(trueName, value); // itemRevisionDef.stringProps.put(trueName, value);
@ -417,19 +430,21 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{
} }
else if (obj instanceof TCComponentItemRevision) { else if (obj instanceof TCComponentItemRevision) {
itemRev = (TCComponentItemRevision) obj; itemRev = (TCComponentItemRevision) obj;
String[] formPropInfos = {"sb6_ifls","是","lov"};
formList.add(formPropInfos);
if (!setFormProperty(itemRev,formList)) { if (!setFormProperty(itemRev,formList)) {
System.out.println("表单属性设置失败!"); System.out.println("表单属性设置失败!");
} }
itemRev.lock(); // itemRev.lock();
try { // try {
itemRev.setStringProperty("sb6_ifls", "是"); // itemRev.setStringProperty("sb6_ifls", "是");
} catch (Exception e) { // } catch (Exception e) {
System.out.println("itemRev处理异常"); // System.out.println("itemRev处理异常");
e.printStackTrace(); // e.printStackTrace();
}finally { // }finally {
itemRev.save(); // itemRev.save();
itemRev.unlock(); // itemRev.unlock();
} // }
} }
else if (obj instanceof TCComponentForm) { else if (obj instanceof TCComponentForm) {
form = (TCComponentForm) obj; form = (TCComponentForm) obj;
@ -437,7 +452,7 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{
* form.lock(); try { if (formList.size()>0) { System.out.println("开始处理表单数据"); * form.lock(); try { if (formList.size()>0) { System.out.println("开始处理表单数据");
* for (String[] forms : formList) { if (forms.length == 3) { String tNameString * for (String[] forms : formList) { if (forms.length == 3) { String tNameString
* = forms[0]; String tValueString = forms[1]; String tTypeString = forms[2]; * = forms[0]; String tValueString = forms[1]; String tTypeString = forms[2];
* *
* setTCPropertyValue(form,tNameString,tValueString); } } } } catch (Exception * setTCPropertyValue(form,tNameString,tValueString); } } } } catch (Exception
* e) { System.out.println("表单处理异常:"); e.printStackTrace(); }finally { * e) { System.out.println("表单处理异常:"); e.printStackTrace(); }finally {
* form.save(); form.unlock(); } * form.save(); form.unlock(); }
@ -450,27 +465,47 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{
} }
/** /**
* lovgetlovlovlov * lovgetlov - lovlov
* @param configName * @param configName
* @param lovShowName lov * @param lovShowName lov
* @param lovPropertyList2 lov * @param lovPropertyList2 lov
* @return lov * @return lov
*/ */
private String getLovTrueValue(String configName, String lovShowName, List<LovProperty> lovPropertyList2) { private String getLovTrueValue(String configName, String lovShowName, List<LovProperty> lovPropertyList2) {
String trueNameString = null; String trueNameString = null;
//通过lov属性集合遍历获取lov真实值
for (LovProperty lovProperty : lovPropertyList2) { for (LovProperty lovProperty : lovPropertyList2) {
String propName = lovProperty.getPropTrueName(); String propName = lovProperty.getPropTrueName();
if (configName.equals(propName)) { if (configName.equals(propName)) {//属性真实名称与lov属性集合匹配
Map<String, String> lovMap = lovProperty.getLovMap(); Map<String, String> lovMap = lovProperty.getLovMap();
return lovMap.get(lovShowName); trueNameString = lovMap.get(lovShowName);
break;
} }
} }
System.out.println("未获取到lov-["+lovShowName+"]的真实值"); //通过lov子项集合遍历获取lov真实值
return null; if (trueNameString == null && rMap != null && rMap.size()>0){
for (Map.Entry<String, Map<String, String>> entry : rMap.entrySet()){
Map<String, String> childLovMaps = entry.getValue();//获取lov子项《显示值-真实值》集合
if (childLovMaps != null && childLovMaps.size()>0){
for (Map.Entry<String, String> entry1 : childLovMaps.entrySet()){
String showValueString = entry1.getKey();
String realValueString = entry1.getValue();
if (lovShowName.equals(showValueString)) {
trueNameString = realValueString;
break;
}
}
}
}
}
if (trueNameString == null) {
System.out.println("未获取到lov-[" + lovShowName + "]的真实值");
}
return trueNameString;
} }
/** /**
* *
* @param component * @param component
* @param formList * @param formList
* @return * @return
@ -686,6 +721,8 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{
} }
/** /**
* *
* @return * @return
@ -771,7 +808,10 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{
this.idTextField = new JTextField(idValue); this.idTextField = new JTextField(idValue);
} }
this.revLabel = new JLabel("版本"); this.revLabel = new JLabel("版本");
String[] revs = {"S01"};//版本下拉框数组 // String[] revs = {"S01"};//版本下拉框数组
//参考编码器获取新的版本
String newRev = tccomponentitemtype.getNewRev(null);
String[] revs = {newRev};
this.revComboBox = new JComboBox<String>(revs); this.revComboBox = new JComboBox<String>(revs);
// this.revComboBox.setEditable(true); // this.revComboBox.setEditable(true);
@ -902,16 +942,21 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{
System.out.println("未获取到属性["+name+"]配置的lov名称请检查配置!"); System.out.println("未获取到属性["+name+"]配置的lov名称请检查配置!");
return null; return null;
} }
rMap.clear();
Map<String, String> lovMap = getLOVDisplay_value(tcSession, lovName); Map<String, String> lovMap = getLOVDisplay_value(tcSession, lovName);
String[] displayLovName = lovMap.keySet().toArray(new String[0]);//lov显示值 String[] displayLovName = lovMap.keySet().toArray(new String[0]);//lov显示值
LovProperty lovProperty = new LovProperty(); LovProperty lovProperty = new LovProperty();//自定义的lov类型的属性类
lovProperty.setPropName(name); lovProperty.setPropName(name);
lovProperty.setPropTrueName(trueName); lovProperty.setPropTrueName(trueName);
lovProperty.setLov(true); lovProperty.setLov(true);
lovProperty.setLovMap(lovMap); lovProperty.setLovMap(lovMap);
this.lovPropertyList.add(lovProperty); this.lovPropertyList.add(lovProperty);
JComboBox<String> propComboBox = new JComboBox<String>(displayLovName); // JComboBox<String> propComboBox = new JComboBox<String>(displayLovName);
DefaultMutableTreeNode root = generateLovTreeNode(lovMap,rMap);
JTreeComboBox propComboBox = new JTreeComboBox(root);
GridBagConstraints gbcPropCombo = new GridBagConstraints(); GridBagConstraints gbcPropCombo = new GridBagConstraints();
@ -970,6 +1015,47 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{
} }
/**
*
* @param lovMap lov<->Map
* @param rMap2 lov<>lov
* @return
*/
private DefaultMutableTreeNode generateLovTreeNode(Map<String, String> lovMap, Map<String, Map<String, String>> rMap2) {
// 创建树的根节点
DefaultMutableTreeNode root = new DefaultMutableTreeNode(" ");
// 为每个顶层LOV创建子树
for (Map.Entry<String, String> entry : lovMap.entrySet()) {
DefaultMutableTreeNode subTree = createLovSubTree(entry.getKey(), entry.getValue(), rMap2);
root.add(subTree);
}
return root;
}
/**
* LOV
*/
private DefaultMutableTreeNode createLovSubTree(String displayValue, String realValue, Map<String, Map<String, String>> rMap2) {
// 创建当前节点
DefaultMutableTreeNode node = new DefaultMutableTreeNode(displayValue);
// 获取当前节点的子节点
Map<String, String> childLovMap = rMap2.get(realValue);
if (childLovMap != null && !childLovMap.isEmpty()) {
// 为每个子节点递归创建子树
for (Map.Entry<String, String> childEntry : childLovMap.entrySet()) {
DefaultMutableTreeNode childNode = createLovSubTree(childEntry.getKey(), childEntry.getValue(), rMap2);
node.add(childNode);
}
}
return node;
}
/** /**
* ()ID * ()ID
* @param selectComponent2 * @param selectComponent2
@ -1007,28 +1093,35 @@ public class CreateTempDrawingDialog extends JFrame implements ActionListener{
// 替换掉所有的 * 符号 // 替换掉所有的 * 符号
return str.replaceAll("\\*", ""); return str.replaceAll("\\*", "");
} }
/** /**
* TC LOV- * TC LOV-
* @param seesion * @param seesion
* @param lovProp lov /
* @return * @return
* @throws TCException * @throws TCException
*/ */
public static Map<String, String> getLOVDisplay_value(TCSession seesion,String lovProp) throws TCException public static Map<String, String> getLOVDisplay_value(TCSession seesion,String lovProp) throws TCException
{ {
Map<String, String> Display_values = new HashMap<String, String>(); Map<String, String> Display_values = new HashMap<String, String>();
TCComponentListOfValues unitLov = TCLOVUtil.findLOVByName(seesion, lovProp); TCComponentListOfValues unitLov = TCLOVUtil.findLOVByName(seesion, lovProp);
if(unitLov !=null) if(unitLov != null)
{ {
ListOfValuesInfo listOfValues = unitLov.getListOfValues(); String[] realval = unitLov.getListOfValues().getStringListOfValues();
String[] realval = listOfValues.getStringListOfValues();
String value=""; String value="";
boolean flag = false; boolean flag = false;
for (int i = 0; i < realval.length; i++) { for (int i = 0; i < realval.length; i++) {
String disval = listOfValues.getDisplayableValue(realval[i]); String disval = unitLov.getListOfValues().getDisplayableValue(realval[i]);
Display_values.put(disval, realval[i]); Display_values.put(disval, realval[i]);
//递归传入lov真实值作为lov名称获取lov的显示值-真实值集合
Map<String, String> lovDisplay_value = getLOVDisplay_value(seesion, realval[i]);
} }
} }
rMap.put(lovProp, Display_values);
return Display_values; return Display_values;
} }

Loading…
Cancel
Save