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; + } +}