diff --git a/resources/en/viewobject_model_designtime.en.properties b/resources/en/viewobject_model_designtime.en.properties
index a760f138af3ab802a776cd78a81355151822f401..440c00630b14b671eb0fae86b96a5c0335388a04 100644
--- a/resources/en/viewobject_model_designtime.en.properties
+++ b/resources/en/viewobject_model_designtime.en.properties
@@ -101,6 +101,8 @@ GSP_VIEWOBJECT_MANAGER_0099=Field {1} {2} not obtained in associated business en
GSP_VIEWOBJECT_MANAGER_0100=View object metadata with ID {0}, Name {1}, and Namespace {2}. When generating component code for action {3}, the dependent component metadata was not obtained. The missing component metadata has ID {4}, ID {5}, Name {6}, and Naming Space {7}
GSP_VIEWOBJECT_MANAGER_0101=The current field code cannot be empty
GSP_VIEWOBJECT_MANAGER_0102=The current field code must start with an English letter or an underline (_), and can only consist of English letters, numbers, underscores (_), lines (-), and dots (.)
+GSP_VIEWOBJECT_MANAGER_0103=File read exception: {0}.
+GSP_VIEWMANAGER_MESSAGE_0001=View object synchronization code check for operation [Code:{0}, Name:{1}] on view [Code:{2}, Name:{3}]
# view-object-model
GSP_VIEWOBJECT_MODEL_1001=View operations on view object metadata are currently not supported for copy operations
GSP_VIEWOBJECT_MODEL_1002=Qo type mapping, please use GspQoObject Mapping
diff --git a/resources/viewobject_model_designtime.properties b/resources/viewobject_model_designtime.properties
index 6428d8f640e3aa5f6d562f446b957fcd84246099..6c2d6a39cfe6ef4d283ba60426fa39e20b5c7a20 100644
--- a/resources/viewobject_model_designtime.properties
+++ b/resources/viewobject_model_designtime.properties
@@ -101,6 +101,8 @@ GSP_VIEWOBJECT_MANAGER_0099=关联业务实体{0}中没有获取到字段{1}{2}
GSP_VIEWOBJECT_MANAGER_0100=编号为{0}名称为{1}命名空间为{2}的视图对象元数据,生成动作{3}的构件代码时,依赖的构件元数据未获取到,未获取到的构件元数据ID为{4}、编号为{5}、名称为、{6}、命名空间为{7}
GSP_VIEWOBJECT_MANAGER_0101=当前字段的编号不允许为空
GSP_VIEWOBJECT_MANAGER_0102=当前字段的编号必须以英文字母或下划线(_)开头, 且只能由英文字母、数字、下划线(_)、连线(-)和点(.)组成
+GSP_VIEWOBJECT_MANAGER_0103=文件读取异常:{0}。
+GSP_VIEWMANAGER_MESSAGE_0001=视图对象[Code:{0},Name:{1}]上操作【Code:{2},Name:{3}]同步代码检查
# view-object-model
GSP_VIEWOBJECT_MODEL_1001=视图对象元数据上的视图操作暂不支持拷贝操作
GSP_VIEWOBJECT_MODEL_1002=Qo类型映射,请使用GspQoObjectMapping
diff --git a/resources/zh-CHT/viewobject_model_designtime.zh-CHT.properties b/resources/zh-CHT/viewobject_model_designtime.zh-CHT.properties
index 6221200e5290dbf3aa8650e4af0a4cd25b45e6e6..581f85a305f961f7b5aa1f180f73f1b89d8e40ea 100644
--- a/resources/zh-CHT/viewobject_model_designtime.zh-CHT.properties
+++ b/resources/zh-CHT/viewobject_model_designtime.zh-CHT.properties
@@ -101,6 +101,8 @@ GSP_VIEWOBJECT_MANAGER_0099=關聯業務實體{0}中沒有獲取到字段{1}{2}
GSP_VIEWOBJECT_MANAGER_0100=編號為{0}名稱為{1}命名空間為{2}的視圖對象元數據,生成動作{3}的構件代碼時,依賴的構件元數據未獲取到,未獲取到的構件元數據ID為{4}、編號為{5}、名稱為、{6}、命名空間為{7}
GSP_VIEWOBJECT_MANAGER_0101=當前字段的編號不允許為空
GSP_VIEWOBJECT_MANAGER_0102=當前字段的編號必須以英文字母或下劃線(_)開頭, 且只能由英文字母、數字、下劃線(_)、連線(-)和點(.)組成
+GSP_VIEWOBJECT_MANAGER_0103=文件讀取異常:{0}。
+GSP_VIEWMANAGER_MESSAGE_0001=視圖對象[Code:{0},Name:{1}]上操作【Code:{2},Name:{3}]同步代碼檢查
# view-object-model
GSP_VIEWOBJECT_MODEL_1001=視圖對象元數據上的視圖操作暫不支持拷貝操作
GSP_VIEWOBJECT_MODEL_1002=Qo類型映射,請使用GspQoObjectMapping
diff --git a/view-object-manager/pom.xml b/view-object-manager/pom.xml
index 0b1983bfd3da85775fca541de73e9e8568a21166..869931a3eb34d942be9402849eb2786193be3c7e 100644
--- a/view-object-manager/pom.xml
+++ b/view-object-manager/pom.xml
@@ -116,14 +116,13 @@
com.inspur.edp
- cef-variable-dtgenerator
-
-
- com.inspur.edp
- formserver-viewmodel
-
-
- 0.1.0-SNAPSHOT
+ common-entity-variable-generator
+ 0.1.0
+
+
+ io.iec.edp
+ caf-caching
+ 1.0.0-rc.1
com.inspur.edp
@@ -172,5 +171,10 @@
cef-designtime-core
${cef.designtime.version}
+
+ com.inspur.edp
+ common-model
+ 0.1.4
+
diff --git a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/createvmmetadata/ComponentGenerator.java b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/createvmmetadata/ComponentGenerator.java
index 6634b5441ce5e6d033c870018dfca903181b3e44..689e2207416f5cc307fa4b76e67235f2b74d2593 100644
--- a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/createvmmetadata/ComponentGenerator.java
+++ b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/createvmmetadata/ComponentGenerator.java
@@ -144,30 +144,20 @@ public class ComponentGenerator {
}
}
- /**
+ /** 视图对象上的视图操作、扩展操作、帮助前
* @param viewModel BE实体
* @param path 生成路径
*/
private void generateViewModelActionComponents(GspViewModel viewModel, String path) {
+ //视图操作构件元数据
for (ViewModelAction action : viewModel.getActions()) {
if (action.getType() == ViewModelActionType.VMAction && ((MappedCdpAction) ((action instanceof MappedCdpAction) ? action : null)).getIsGenerateComponent()) {
- setNewCompActionCode(MappedCdpActionComponentGenerator.getInstance().GenerateComponent((MappedCdpAction) ((action instanceof MappedCdpAction) ? action : null), path, this.getVMActionCode(), this.getAssemblyName(), getNamespace(), this.getBizObjectID()));
+ setNewCompActionCode(MappedCdpActionComponentGenerator.getInstance().generateVMComponent((MappedCdpAction) ((action instanceof MappedCdpAction) ? action : null), path, this.getVMActionCode(), this.getAssemblyName(), getNamespace(), this.getBizObjectID()));
}
}
- //var extendInfo = viewModel.DataExtendInfo;
-
- //foreach (var action in extendInfo.AfterQueryActions)
- //{
- // if (action.Type == ViewModelActionType.VMAction && (action as MappedCdpAction).getIsGenerateComponent())
- // {
- // JavaAfterQueryActionComponentGenerator.Instance.GenerateComponent(action as MappedCdpAction, path, this.VMActionCode, this.AssemblyName, Namespace,this.BizObjectID);
- // }
- //}
-
-
java.util.ArrayList list = new java.util.ArrayList();
VoDataExtendInfo extendInfo = viewModel.getDataExtendInfo();
list.add(extendInfo.getAfterCreateActions());
@@ -196,7 +186,7 @@ public class ComponentGenerator {
list.add(extendInfo.getMultiDeleteActions());
list.add(extendInfo.getAfterMultiDeleteActions());
-
+ //扩展操作
for (VMActionCollection item : list) {
for (ViewModelAction action : item) {
@@ -209,14 +199,7 @@ public class ComponentGenerator {
}
}
}
-
- //var elementList=viewModel.GetAllElementList(true);
- //foreach(var item in elementList)
- //{
- // GspViewModelElement element = (GspViewModelElement)item;
- // if (element.HelpActions == null)
- // continue;
-
+ // 帮助前
for (ValueHelpConfig valueHelpConfig : viewModel.getValueHelpConfigs()) {
if (valueHelpConfig.getHelpExtend() != null && valueHelpConfig.getHelpExtend().getBeforeHelp() != null) {
diff --git a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/createvmmetadata/MappedCdpActionComponentGenerator.java b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/createvmmetadata/MappedCdpActionComponentGenerator.java
index 07780663654bf325ae475e337b39c69952638c22..c143f2eca74819ae2f0f3634941026f5b2437d2d 100644
--- a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/createvmmetadata/MappedCdpActionComponentGenerator.java
+++ b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/createvmmetadata/MappedCdpActionComponentGenerator.java
@@ -1,7 +1,10 @@
package com.inspur.edp.formserver.vmmanager.createvmmetadata;
+import com.inspur.edp.bef.component.ICompParameter;
+import com.inspur.edp.bef.component.ICompParameterCollection;
import com.inspur.edp.bef.component.base.GspComponent;
+import com.inspur.edp.bef.component.base.ReturnValue;
import com.inspur.edp.bef.component.base.VoidReturnType;
import com.inspur.edp.bef.component.detailcmpentity.vm.VMComponent;
import com.inspur.edp.bef.component.detailcmpentity.vm.VMMethodParameter;
@@ -19,6 +22,9 @@ import com.inspur.edp.formserver.vmmanager.generatacmpcode.JavaCompCodeNames;
import com.inspur.edp.lcm.metadata.api.entity.GspMetadata;
import com.inspur.edp.lcm.metadata.api.service.MetadataService;
import io.iec.edp.caf.commons.utils.SpringBeanUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Iterator;
public class MappedCdpActionComponentGenerator {
/**
@@ -70,6 +76,28 @@ public class MappedCdpActionComponentGenerator {
return null;
}
+ /**
+ * 生成视图对象上的视图操作构件元数据,
+ * @param mappedCdpAction
+ * @param path
+ * @param vmActionCode
+ * @param assemblyName
+ * @param defaltnamespace
+ * @param bizObjectID
+ * @return 返回新增的或者修改视图操作的编号
+ */
+ public final String generateVMComponent(MappedCdpAction mappedCdpAction, String path, String vmActionCode, String assemblyName, String defaltnamespace, String bizObjectID) {
+ this.vmActionCode = vmActionCode;
+ this.assemblyName = assemblyName;
+ namespace = defaltnamespace;
+ this.bizObjectID = bizObjectID;
+ if (ViewModelUtils.checkNull(mappedCdpAction.getComponentEntityId())) {
+ createComponent(mappedCdpAction, path);
+ return mappedCdpAction.getCode();
+ } else {
+ return modifyComponent(mappedCdpAction, path)? mappedCdpAction.getCode():null;
+ }
+ }
/**
* 新建构件
*
@@ -199,12 +227,12 @@ public class MappedCdpActionComponentGenerator {
}
/**
- * 修改构件
+ * 修改构件,参数个数、类型、返回值发生变化,返回true
*
* @param action
* @param path
*/
- private void modifyComponent(MappedCdpAction action, String path) {
+ private boolean modifyComponent(MappedCdpAction action, String path) {
//1、构建实体
VMComponent component = new VMComponent();
@@ -222,8 +250,62 @@ public class MappedCdpActionComponentGenerator {
evaluateComponentInfo(component, action, true);
//4、修改更新构件元数据
GspMetadataExchangeUtil.getInstance().updateGspMetadata(component, fullPath, this.vmActionCode, this.bizObjectID, this.namespace);
+ return this.isComponentMethodChanged(originalComponent,component);
}
+ private boolean isComponentMethodChanged(GspComponent originalComponent, GspComponent component) {
+ if (originalComponent != null && originalComponent.getCompMethod() != null) {
+ if (component != null && component.getCompMethod() != null) {
+ return this.isComponentMethodReturnTypeChanged(originalComponent.getCompMethod().getReturnValue(), component.getCompMethod().getReturnValue()) || this.isComponentMethodParameterCollectionChanged(originalComponent.getCompMethod().getCompParameterCollection(), component.getCompMethod().getCompParameterCollection());
+ } else {
+ return false;
+ }
+ } else {
+ return true;
+ }
+ }
+
+ private boolean isComponentMethodReturnTypeChanged(ReturnValue originalReturnValue, ReturnValue returnValue) {
+ if (originalReturnValue == returnValue) {
+ return false;
+ } else if (originalReturnValue != null && returnValue != null) {
+ return originalReturnValue.getClass() != returnValue.getClass() || originalReturnValue.getParameterCollectionType() != returnValue.getParameterCollectionType() || originalReturnValue.getParameterTypeEnum() != returnValue.getParameterTypeEnum() || !StringUtils.equals(originalReturnValue.getAssembly(), returnValue.getAssembly()) || !StringUtils.equals(originalReturnValue.getClassName(), returnValue.getClassName()) || !StringUtils.equals(originalReturnValue.getDotnetClassName(), returnValue.getDotnetClassName());
+ } else {
+ return true;
+ }
+ }
+
+ private boolean isComponentMethodParameterCollectionChanged(ICompParameterCollection originalParameters, ICompParameterCollection parameters) {
+ if (originalParameters == parameters) {
+ return false;
+ } else if (originalParameters != null && parameters != null && originalParameters.getCount() == parameters.getCount()) {
+ Iterator originalIter = originalParameters.iterator();
+ Iterator iterator = parameters.iterator();
+
+ while(true) {
+ if (originalIter.hasNext() && iterator.hasNext()) {
+ ICompParameter originalParam = (ICompParameter)originalIter.next();
+ ICompParameter parameter = (ICompParameter)iterator.next();
+ if (originalParam == parameter) {
+ continue;
+ }
+ if (originalParam != null && parameter != null) {
+ if (StringUtils.equals(originalParam.getParamCode(), parameter.getParamCode()) && StringUtils.equals(originalParam.getParamName(), parameter.getParamName()) && originalParam.getParameterCollectionType() == parameter.getParameterCollectionType() && originalParam.getParameterTypeEnum() == parameter.getParameterTypeEnum() && StringUtils.equals(originalParam.getClassName(), parameter.getClassName())) {
+ continue;
+ }
+
+ return true;
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+ } else {
+ return true;
+ }
+ }
private VMComponent getoriginalComponent(String path, String metadataFileNameWithSuffix) {
MetadataService metadataService = SpringBeanUtils.getBean(MetadataService.class);
GspMetadata metadata = metadataService.loadMetadata(metadataFileNameWithSuffix, path);
diff --git a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/exception/VoManagerErrorCodes.java b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/exception/VoManagerErrorCodes.java
index 1defd1e5085bab11afda4dbceb4f1836278aec6d..15884eb86218df791f1ea251ad60e983a4e2620a 100644
--- a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/exception/VoManagerErrorCodes.java
+++ b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/exception/VoManagerErrorCodes.java
@@ -103,4 +103,5 @@ public class VoManagerErrorCodes {
public final static String GSP_VIEWOBJECT_MANAGER_0100 = "GSP_VIEWOBJECT_MANAGER_0100";
public final static String GSP_VIEWOBJECT_MANAGER_0101 = "GSP_VIEWOBJECT_MANAGER_0101";
public final static String GSP_VIEWOBJECT_MANAGER_0102 = "GSP_VIEWOBJECT_MANAGER_0102";
+ public final static String GSP_VIEWOBJECT_MANAGER_0103 = "GSP_VIEWOBJECT_MANAGER_0103";
}
diff --git a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/generatacmpcode/JavaCodeFileGenerator.java b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/generatacmpcode/JavaCodeFileGenerator.java
index 0687882152ac0926c22e7b3c851889dc8c682250..15f5d9a7945ab0e41385d5030b23a209f74ae99a 100644
--- a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/generatacmpcode/JavaCodeFileGenerator.java
+++ b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/generatacmpcode/JavaCodeFileGenerator.java
@@ -11,8 +11,10 @@ import com.inspur.edp.formserver.viewmodel.common.InternalExtendActionUtil;
import com.inspur.edp.formserver.viewmodel.common.ValueHelpConfig;
import com.inspur.edp.formserver.viewmodel.common.ViewModelActionUtil;
import com.inspur.edp.formserver.viewmodel.dataextendinfo.VoDataExtendInfo;
+import com.inspur.edp.formserver.viewmodel.exception.ViewModelException;
import com.inspur.edp.formserver.viewmodel.util.ViewModelUtils;
import com.inspur.edp.formserver.vmmanager.createvmmetadata.ComponentGenUtil;
+import com.inspur.edp.formserver.vmmanager.exception.VoManagerErrorCodes;
import com.inspur.edp.formserver.vmmanager.generatacmpcode.voextendedaction.*;
import com.inspur.edp.formserver.vmmanager.service.VmManagerService;
import com.inspur.edp.lcm.fs.api.IFsService;
@@ -23,8 +25,10 @@ import com.inspur.edp.lcm.metadata.api.service.MetadataProjectService;
import com.inspur.edp.lcm.metadata.api.service.MetadataService;
import io.iec.edp.caf.commons.utils.SpringBeanUtils;
+import java.io.IOException;
import java.util.ArrayList;
+
public class JavaCodeFileGenerator {
private String relativePath;
@@ -575,16 +579,27 @@ public class JavaCodeFileGenerator {
belongElement = true; //已存在文件时,true:不覆盖;false:覆盖
String compName = codeGen.getCompName();
+ //一个相对路径,目前未在使用的路径
String originalFilePath = ViewModelUtils
.getCombinePath(relativePath, ComponentGenUtil.ComponentDir, compName + codeFileExtension);
-
+ //构件代码实际路径
String filePathCommon = fsService.getCombinePath(dirPath, compName + codeFileExtension);
+ String originalFile=null;
if (fsService.isFileExist(filePathCommon) && belongElement) {
+ try {
+ originalFile = fsService.fileRead(filePathCommon);
+ } catch (IOException e) {
+ throw new ViewModelException(VoManagerErrorCodes.GSP_VIEWOBJECT_MANAGER_0103,e,e.getMessage());
+ }
+ String updatedFile=codeGen.update(originalFile );
+ if (updatedFile==null ||"".equals(updatedFile))
+ return;
+ fsService.fileUpdate(filePathCommon,updatedFile,false);
return;
}
- if (fsService.isFileExist(originalFilePath)) {
- return;
- }
+// if (fsService.isFileExist(originalFilePath)) {
+// return;
+// }
if (codeGen.getIsCommonGenerate()) {
iFsService.createFile(filePathCommon, codeGen.generateCommon());
diff --git a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/generatacmpcode/JavaMappedCdpActionGenerator.java b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/generatacmpcode/JavaMappedCdpActionGenerator.java
index 5d752248a607efc30fd0b90bec9703f5f45dd8ac..8a5d84cf3259d11d5f2cafc5af1b5fa8679a72cf 100644
--- a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/generatacmpcode/JavaMappedCdpActionGenerator.java
+++ b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/generatacmpcode/JavaMappedCdpActionGenerator.java
@@ -1,8 +1,10 @@
package com.inspur.edp.formserver.vmmanager.generatacmpcode;
+import com.inspur.edp.das.commonmodel.util.generate.ComponentCodeUpdater;
import com.inspur.edp.formserver.viewmodel.GspViewModel;
import com.inspur.edp.formserver.viewmodel.action.ActionParamInfo;
import com.inspur.edp.formserver.viewmodel.action.MappedCdpAction;
+import com.inspur.edp.formserver.vmmanager.util.I18nResourceUtil;
public class JavaMappedCdpActionGenerator extends JavaBaseActionGenerator {
private MappedCdpAction action;
@@ -103,4 +105,15 @@ public class JavaMappedCdpActionGenerator extends JavaBaseActionGenerator {
public String getInitializeCompName() {
return String.format("%1$s%2$s", this.VMAction, "VO");
}
+
+ public String update(String originContent) {
+ String genFile = this.generateCommon();
+ String compName = this.getCompName();
+ //获取前缀信息,在IDE控制台输当前修改的元数据动作信息
+ String prefix= I18nResourceUtil.getMessage("GSP_VIEWMANAGER_MESSAGE_0001",this.metadata.getHeader().getCode(),
+ this.metadata.getHeader().getCode(),this.VMAction.getCode(),this.VMAction.getName());
+ return ComponentCodeUpdater.codeUpdate(originContent, genFile,compName,prefix);
+ }
+
+
}
\ No newline at end of file
diff --git a/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/util/I18nResourceUtil.java b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/util/I18nResourceUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2fd32c8a19580d9ad823b930625741dbaa1c4f3
--- /dev/null
+++ b/view-object-manager/src/main/java/com/inspur/edp/formserver/vmmanager/util/I18nResourceUtil.java
@@ -0,0 +1,44 @@
+package com.inspur.edp.formserver.vmmanager.util;
+
+import io.iec.edp.caf.boot.context.CAFContext;
+import io.iec.edp.caf.commons.utils.SpringBeanUtils;
+import io.iec.edp.caf.i18n.api.ResourceLocalizer;
+
+import java.text.MessageFormat;
+
+public class I18nResourceUtil {
+ private static final String I18N_RESOURCE_FIle ="viewobject_model_designtime.properties";
+ private static final String SU="pfcommon";
+ private static final ResourceLocalizer resourceLocalizer= SpringBeanUtils.getBean(ResourceLocalizer.class);
+
+ /**
+ * 获取国际化资源信息
+ * @param msgCode 消息编码
+ * @param messageParams 消息参数
+ * @return 国际化消息
+ */
+ public static String getMessage(String msgCode, Object... messageParams) {
+ // 获取资源文件中对应消息编码的文本内容
+ String message = getMessage(msgCode);
+ // 如果消息参数为空,则直接返回消息编码
+ if (messageParams == null || messageParams.length < 1) {
+ return message;
+ }
+ // 根据消息参数构造消息
+ return MessageFormat.format(message, messageParams);
+ }
+
+ /**
+ * 获取国际化资源信息
+ * @param msgCode 消息编码
+ * @return 国际化消息
+ */
+ private static String getMessage(String msgCode) {
+ // 从国际化资源文件中获取对应编码的消息
+ String messageFormat = resourceLocalizer.getString(msgCode, I18N_RESOURCE_FIle, SU, CAFContext.current.getLanguage());
+ if (messageFormat==null ||"".equals(messageFormat)) {
+ messageFormat = msgCode;
+ }
+ return messageFormat;
+ }
+}