objList = vo.getAllObjectList();
+ if (objList != null && objList.size() > 0) {
+ for (IGspCommonObject obj : objList) {
+ obj.setBelongModel(vo);
+ obj.setBelongModelID(vo.getID());
+ }
+ }
+ }
+ if (getMapping() != null) {
+ Object tempVar2 = getMapping().clone();
+ vo.setMapping((ViewModelMapping) ((tempVar2 instanceof ViewModelMapping) ? tempVar2 : null));
+ }
+ if (getValueHelpConfigs() != null) {
+ Object valueHelpConfigs = getValueHelpConfigs().clone();
+ vo.setValueHelpConfigs((ValueHelpConfigCollection)((valueHelpConfigs instanceof ValueHelpConfigCollection) ? valueHelpConfigs : null));
+ }
+ return vo;
+ }
+
+
+ /**
+ * 重载ToString方法
+ *
+ * @return
+ */
+ @Override
+ public String toString() {
+ return String.format("ID:%1$s,Code:%2$s,Name:%3$s,RootNode:%4$s", getID(), getCode(), getName(), getMainObject().getCode());
+ }
+
+ ///#endregion
+
+ ///#region 获取节点
+
+ /**
+ * 查找指定的VM节点
+ *
+ * // @param viewObjectCode 节点编号
+ *
+ * @return
+ */
+ public final GspViewObject getNode(String nodeCode) {
+ return getNode(pre -> pre.getCode().equals(nodeCode));
+ }
+
+ public final GspViewObject getNode(Predicate predicate) {
+ ArrayList result = getAllNodes(predicate);
+ if (result.size() > 0) {
+ return result.get(0);
+ }
+ return null;
+ }
+// return GetNodes(node => node.Code.equals(viewObjectCode, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
+//GetNodes();
+// ArrayList bizObjs = getAllNodes();
+// ArrayList result = new ArrayList();
+// for (GspBizEntityObject item : bizObjs) {
+// if (predicate.test(item)) {
+// result.add(item);
+// }
+// }
+// return result;
+// for(GspViewObject node:){
+// if(node.getCode().equals(viewObjectCode)){
+// return node;
+// }
+
+
+// return GetNodes(node => node.Code.equals(viewObjectCode, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
+
+
+ /**
+ * 查询符合条件的节点
+ *
+ * // @param predict
+ *
+ * @return
+ *
+ */
+
+// public final ArrayList getAllNodes(Predicate predicate) {
+//
+// ArrayList bizObjs = getAllNodes();
+// ArrayList result = new ArrayList();
+// for (GspBizEntityObject item : bizObjs) {
+// if (predicate.test(item)) {
+// result.add(item);
+// }
+// }
+// return result;
+// }
+ public ArrayList getAllNodes(Predicate predicate) {
+ ArrayList bizObjs = getAllNodes(null);
+ ArrayList result = new ArrayList();
+ for (GspViewObject item : bizObjs) {
+ if (predicate.test(item)) {
+ result.add(item);
+ }
+ }
+ return result;
+ }
+
+// public final java.util.List GetNodes(HashMap predict)
+// {
+// if (predict != null)解决方式和gspviewmodel中的一样
+// {
+// return GetAllObjectList().Select(item => (GspViewObject)((item instanceof GspViewObject) ? item : null)).Where(predict).ToList();
+// }
+// return GetAllObjectList().Select(item => (GspViewObject)((item instanceof GspViewObject) ? item : null)).ToList();
+// }
+
+ /**
+ * 查询当前VM所有节点的字典
+ * 其中Key是节点Code
+ *
+ * @return
+ *
+ *
+ */
+ public final java.util.HashMap getNodesDic() {
+// return GetNodes(null).ToDictionary(item => item.Code, item => item);
+ HashMap toDic = new HashMap();
+ for (IGspCommonObject item : getAllObjectList()) {
+ toDic.put(item.getCode(), item);
+
+ }
+// return GetNodes(null).ToDictionary(item => item.Code, item => item);
+ return toDic;
+
+ }
+
+ ///#endregion
+
+ ///#region 联动-弃用
+ /**
+ * 与业务实体建立连接
+ *
+ * // @param bizEntity
+ *
+ * @return
+ */
+// public final GspViewModel LinkWithBizEntity(GspBusinessEntity bizEntity)
+// {
+//// java.util.HashMap viewElements = GetAllElementList(true).ToDictionary(item => item.getID(), item => (GspViewModelElement)((item instanceof GspViewModelElement) ? item : null));
+// java.util.HashMap viewElements = getAllElementList(true).ToDictionary(item => item.getID(),
+// item => (GspViewModelElement)((item instanceof GspViewModelElement) ? item : null));
+// java.util.HashMap elementMappings = new java.util.HashMap();
+//// java.util.ArrayList elementList = GetAllElementList(true);
+// java.util.ArrayList elementList = getAllElementList(true);
+// for (IGspCommonElement item : elementList)
+// {
+//// if (item instanceof GspViewModelElement && ((GspViewModelElement)item)?.Mapping != null)
+// if (item instanceof GspViewModelElement && ((GspViewModelElement)item).getMapping() != null)
+// {
+//// var key = ((GspViewModelElement)((item instanceof GspViewModelElement) ? item : null)).getMapping().TargetObjId;
+// String key =
+// ((GspViewModelElement)((item instanceof GspViewModelElement) ? item : null)).getMapping().getTargetObjectId();
+// String value = item.getID();
+// elementMappings.put(key, value);
+// }
+// }
+// //Dictionary elementMappings =
+// //this.GetAllElementList(true)
+// // .ToDictionary(item => (item as GspViewModelElement).Mapping.TargetObjId, item => item.ID);
+//// java.util.HashMap bizEntityObjects = bizEntity.GetAllObjectList().ToDictionary(item => item.ID, item => (GSPBizEntityObject)((item instanceof GSPBizEntityObject) ? item : null));
+// java.util.HashMap bizEntityObjects =
+// bizEntity.getAllObjectList().todictory(item.getID(),
+// (GspBizEntityObject)((item instanceof GspBizEntityObject) ? item : null));
+//// item => (GSPBizEntityObject)((item instanceof GSPBizEntityObject) ? item : null));
+//// java.util.HashMap bizEntityElements = bizEntity.GetAllElementList(true).ToDictionary(item => item.ID, item => (GSPBizEntityElement)((item instanceof GSPBizEntityElement) ? item : null));
+// java.util.HashMap bizEntityElements =
+// bizEntity.getAllElementList(true).todictionary(item => item.ID, item => (GspBizEntityElement)((item instanceof GspBizEntityElement) ? item : null));
+//
+// //BizEntitySerializer serializer = new BizEntitySerializer();
+// //string xmlBizContent = serializer.Serialize(bizEntity);
+// //ViewModelParser parser = new ViewModelParser();
+// //GspViewModel transViewModel = parser.Parse(xmlBizContent) as GspViewModel;
+//// GspViewModel transViewModel = ConvertUtils.ConvertToViewModel(bizEntity, null, null);
+// GspViewModel transViewModel = ConvertUtils.ConvertToViewModel(bizEntity, null, null);
+//
+// ///#region 联动对象上的属性
+//
+// java.util.List tempVar = GetNodes(null);
+// java.util.ArrayList viewObjects = (java.util.ArrayList)((tempVar instanceof java.util.ArrayList) ? tempVar : null);
+// if (viewObjects == null)
+// {
+// throw new RuntimeException("#GSPBefError#实体上没有对象,请联系管理员检查数据#GSPBefError#");
+// }
+// for (GspViewObject objectItem : viewObjects)
+// {
+// if (objectItem.getMapping() == null || !bizEntityObjects.containsKey(objectItem.getMapping().getTargetObjId()))
+// {
+// continue;
+// }
+//// GSPBizEntityObject beObject = bizEntityObjects.get(objectItem.getMapping().getTargetObjId());
+// GspBizEntityObject beObject = bizEntityObjects.get(objectItem.getMapping().getTargetObjId());
+//
+// ///#region 分级信息
+//// if (beObject.HirarchyInfo != null)
+//// {
+//// objectItem.HirarchyInfo = beObject.HirarchyInfo;
+//// if (beObject.HirarchyInfo.IsDetailElement != null)
+//// {
+//// if (elementMappings.containsKey(beObject.HirarchyInfo.IsDetailElement.ID))
+//// {
+//// String detailElementId = elementMappings.get(beObject.HirarchyInfo.IsDetailElement.ID);
+//// objectItem.HirarchyInfo.IsDetailElement = viewElements.get(detailElementId);
+//// }
+//// else
+//// {
+//// GspViewModelElement transElement = getTransElement(transViewModel, beObject.HirarchyInfo.IsDetailElement, bizEntity.ID);
+//// objectItem.getContainElements().Add(transElement);
+//// objectItem.HirarchyInfo.IsDetailElement = transElement;
+//// }
+////
+//// }
+//// if (beObject.HirarchyInfo.LayerElement != null)
+//// {
+//// if (elementMappings.containsKey(beObject.HirarchyInfo.LayerElement.ID))
+//// {
+//// String layerElementId = elementMappings.get(beObject.HirarchyInfo.LayerElement.ID);
+//// objectItem.HirarchyInfo.LayerElement = viewElements.get(layerElementId);
+//// }
+//// else
+//// {
+//// GspViewModelElement transElement = getTransElement(transViewModel, beObject.HirarchyInfo.LayerElement, bizEntity.ID);
+//// objectItem.getContainElements().Add(transElement);
+//// objectItem.HirarchyInfo.LayerElement = transElement;
+//// }
+////
+//// }
+//// if (beObject.HirarchyInfo.PathElement != null)
+//// {
+//// if (elementMappings.containsKey(beObject.HirarchyInfo.PathElement.ID))
+//// {
+//// String pathElementId = elementMappings.get(beObject.HirarchyInfo.PathElement.ID);
+//// objectItem.HirarchyInfo.PathElement = viewElements.get(pathElementId);
+//// }
+//// else
+//// {
+//// GspViewModelElement transElement = getTransElement(transViewModel, beObject.HirarchyInfo.PathElement, bizEntity.ID);
+//// objectItem.getContainElements().Add(transElement);
+//// objectItem.HirarchyInfo.PathElement = transElement;
+//// }
+//// }
+////
+//// objectItem.HirarchyInfo.PathLength = beObject.HirarchyInfo.PathLength;
+////
+//// if (beObject.HirarchyInfo.ParentElement != null)
+//// {
+//// if (elementMappings.containsKey(beObject.HirarchyInfo.ParentElement.ID))
+//// {
+//// String parentElementId = elementMappings.get(beObject.HirarchyInfo.ParentElement.ID);
+//// objectItem.HirarchyInfo.ParentElement = viewElements.get(parentElementId);
+//// }
+//// else
+//// {
+//// GspViewModelElement transElement = getTransElement(transViewModel, beObject.HirarchyInfo.ParentElement, bizEntity.ID);
+//// objectItem.getContainElements().add(transElement);
+//// objectItem.HirarchyInfo.ParentElement = transElement;
+//// }
+//// }
+////
+//// if (beObject.HirarchyInfo.ParentRefElement != null)
+//// {
+//// if (elementMappings.containsKey(beObject.HirarchyInfo.ParentRefElement.ID))
+//// {
+//// String pathElementId = elementMappings.get(beObject.HirarchyInfo.ParentRefElement.ID);
+//// objectItem.HirarchyInfo.ParentRefElement = viewElements.get(pathElementId);
+//// }
+//// else
+//// {
+//// GspViewModelElement transElement = getTransElement(transViewModel, beObject.HirarchyInfo.ParentRefElement, bizEntity.ID);
+//// objectItem.getContainElements().add(transElement);
+//// objectItem.HirarchyInfo.ParentRefElement = transElement;
+//// }
+//// }
+//// }
+//
+// ///#endregion
+//
+// ///#region 创建人等信息
+//// if (elementMappings.containsKey(beObject.CreatorElementID))
+//// if (elementMappings.containsKey(beObject.getCreateID()))
+//// {
+//// objectItem.CreatorElementID = elementMappings.get(beObject.CreatorElementID);
+//// }
+//// if (elementMappings.containsKey(beObject.CreatedDateElementID))
+//// {
+//// objectItem.CreatedDateElementID = elementMappings.get(beObject.CreatedDateElementID);
+//// }
+//// if (elementMappings.containsKey(beObject.ModifierElementID))
+//// {
+//// objectItem.ModifierElementID = elementMappings.get(beObject.ModifierElementID);
+//// }
+//// if (elementMappings.containsKey(beObject.ModifiedDateElementID))
+//// {
+//// objectItem.ModifiedDateElementID = elementMappings.get(beObject.ModifiedDateElementID);
+//// }
+// ///#endregion
+//// objectItem.Code = beObject.Code;
+// objectItem.setCode(beObject.getCode());
+// objectItem.setIsVirtual(false); //be带出,IsVirtual=false
+// objectItem.setIsReadOnly(beObject.getIsReadOnly());
+//
+// ///#region ID生成规则
+//// if (elementMappings.containsKey(beObject.ColumnGenerateID.ElementID))
+// if (elementMappings.containsKey(beObject.getColumnGenerateID().getElementID()))
+// {
+// objectItem.ColumnGenerateID.ElementID = elementMappings.get(beObject.ColumnGenerateID.ElementID);
+// }
+// objectItem.ColumnGenerateID.GernerateType = beObject.ColumnGenerateID.GernerateType;
+// ///#endregion
+//
+// ///#region 唯一性约束
+// //objectItem.ContainConstraints = beObject.ContainConstraints;
+// if (objectItem.ContainConstraints != null && objectItem.ContainConstraints.size() > 0)
+// {
+// objectItem.ContainConstraints.Clear();
+// }
+// for (GspUniqueConstraint beConstraint : beObject.ContainConstraints)
+// {
+// Object tempVar2 = beConstraint.clone();
+// GspUniqueConstraint viewModelConstraint = (GspUniqueConstraint)((tempVar2 instanceof GspUniqueConstraint) ? tempVar2 : null);
+// viewModelConstraint.ElementList.Clear();
+// for (IGSPCommonElement element : beConstraint.ElementList)
+// {
+// if (!elementMappings.containsKey(element.ID))
+// {
+// continue;
+// }
+// String vmElementId = elementMappings.get(element.ID);
+// if (DotNetToJavaStringHelper.isNullOrEmpty(vmElementId))
+// {
+// continue;
+// }
+// if (!viewElements.containsKey(vmElementId))
+// {
+// throw new RuntimeException("#GSPBefError#没有找到ID为【" + vmElementId + "】的字段#GSPBefError#");
+// }
+// viewModelConstraint.ElementList.Add(viewElements.get(vmElementId));
+// }
+// objectItem.ContainConstraints.Add(viewModelConstraint);
+// }
+// ///#endregion
+//
+// ///#region 关联信息
+// if (objectItem.getParent() != null)
+// {
+// objectItem.keySet().Clear();
+// for (GSPAssociationKey ass : beObject.keySet())
+// {
+// GSPAssociationKey associationKey = new GSPAssociationKey();
+// associationKey.RefDataModelName = Name;
+// if (elementMappings.containsKey(ass.SourceElement))
+// {
+// associationKey.SourceElement = elementMappings.get(ass.SourceElement);
+// }
+// if (elementMappings.containsKey(ass.SourceElementDisplay))
+// {
+// associationKey.SourceElementDisplay = elementMappings.get(ass.SourceElementDisplay);
+// }
+// if (elementMappings.containsKey(ass.TargetElement))
+// {
+// associationKey.TargetElement = elementMappings.get(ass.TargetElement);
+// }
+// if (elementMappings.containsKey(ass.TargetElementDisplay))
+// {
+// associationKey.TargetElementDisplay = elementMappings.get(ass.TargetElementDisplay);
+// }
+// objectItem.keySet().Add(associationKey);
+// }
+// }
+// ///#endregion
+// }
+// ///#endregion
+//
+// ///#region 联动字段上的属性
+//
+// for (java.util.Map.Entry item : viewElements.entrySet())
+// {
+// GspViewModelElement ele = item.getValue();
+// if (ele.getMapping() == null || !bizEntityElements.containsKey(ele.getMapping().getTargetObjId()))
+// {
+// continue;
+// }
+// GSPBizEntityElement bizElement = bizEntityElements.get(ele.getMapping().getTargetObjId());
+// ele.BillCodeConfig.CanBillCode = bizElement.BillCodeConfig.CanBillCode;
+// ele.BillCodeConfig.BillCodeID = bizElement.BillCodeConfig.BillCodeID;
+// ele.BillCodeConfig.BillCodeName = bizElement.BillCodeConfig.BillCodeName;
+// ele.BillCodeConfig.CodeGenerateType = bizElement.BillCodeConfig.CodeGenerateType;
+// ele.BillCodeConfig.CodeGenerateOccasion = bizElement.BillCodeConfig.CodeGenerateOccasion;
+// ele.LabelID = bizElement.LabelID;
+// ele.MDataType = bizElement.MDataType;
+// ele.ObjectType = bizElement.ObjectType;
+// if (ele.ObjectType == GSPElementObjectType.Association)
+// {
+// //GspViewModelElement transElement = transViewModel.FindElementById(bizElement.ID) as GspViewModelElement;// transElements[bizElement.ID];
+// GspViewModelElement transElement = transViewModel.GetMappedElementByBizElementId(bizElement.ID);
+// for (GSPAssociation associationItem : ele.ChildAssociations)
+// {
+// GSPAssociation transAssociation = getAssociation(transElement.ChildAssociations, associationItem.Id);
+// if (transAssociation == null)
+// {
+// throw new RuntimeException("#GSPBefError#关联未找到,请联系管理员#GSPBefError#");
+// }
+// associationItem.AssSendMessage = transAssociation.AssSendMessage;
+// associationItem.ForeignKeyConstraintType = transAssociation.ForeignKeyConstraintType;
+// associationItem.RefModel = transAssociation.RefModel;
+// associationItem.RefModelID = transAssociation.RefModelID;
+// associationItem.RefModelCode = transAssociation.RefModelCode;
+// associationItem.RefModelName = transAssociation.RefModelName;
+// associationItem.KeyCollection.Clear();
+// for (GSPAssociationKey associationKey : transAssociation.KeyCollection)
+// {
+// //associationKey.SourceElement = elementMappings[associationKey.SourceElement];
+// //associationKey.SourceElementDisplay = viewElements[associationKey.SourceElement].Name;
+// //associationKey.TargetElement = elementMappings[associationKey.TargetElement];
+// //associationKey.TargetElementDisplay = viewElements[associationKey.TargetElement].Name;
+//
+// associationItem.KeyCollection.Add(associationKey);
+// }
+//
+// for (var refElement : associationItem.RefElementCollection)
+// {
+// GspViewModelElement transRefElement = getElement(transAssociation.RefElementCollection, refElement.LabelID);
+// if (transRefElement == null)
+// {
+// throw new RuntimeException("#GSPBefError#实体中没有找到引用字段【" + refElement.LabelID + "】,请联系管理员#GSPBefError#");
+// }
+// //refElement.DefaultVauleType = transRefElement.DefaultVauleType;
+// //refElement.DefaultValue = transRefElement.DefaultValue;
+// refElement.LabelID = transRefElement.LabelID;
+// ((GspViewModelElement) refElement).getMapping().TargetObjId = transRefElement.getMapping().getTargetObjId();
+// }
+//
+// }
+// }
+// else if (ele.ObjectType == GSPElementObjectType.Enum)
+// {
+// ele.ContainEnumValues.Clear();
+// for (GSPEnumValue enumItem : bizElement.ContainEnumValues)
+// {
+// Object tempVar3 = enumItem.clone();
+// GSPEnumValue enumValue = (GSPEnumValue)((tempVar3 instanceof GSPEnumValue) ? tempVar3 : null);
+// ele.ContainEnumValues.Add(enumValue);
+// }
+// }
+// else
+// {
+// ele.ChildAssociations.Clear();
+// ele.ContainEnumValues.Clear();
+// }
+//
+// ele.IsVirtual = false; //be带出,IsVirtual=false
+// //ele.CustomExpression = bizElement.CustomExpression;
+// ele.IsMultiLanguage = bizElement.IsMultiLanguage;
+// if (bizElement.IsRequire)
+// {
+// ele.IsRequire = bizElement.IsRequire;
+// }
+// if (bizElement.Readonly)
+// {
+// ele.Readonly = bizElement.Readonly;
+// }
+// }
+//
+// ///#endregion
+//
+// ///#region 联动be带出操作
+//
+// var mappedBeActions = getActions().Where(item=>item.Type==ViewModel.Action.ViewModelActionType.BEAction).ToList();
+// VMActionCollection tranVmActions = transViewModel.getActions();
+// if (mappedBeActions.size()>0)
+// {
+// for (ViewModelAction action : mappedBeActions)
+// {
+// var tranAction = tranVmActions.Find(item=>action.getMapping().getTargetObjId().equals(item.Mapping.TargetObjId));
+// if (tranAction==null)
+// {
+// throw new RuntimeException(String.format("#GSPBefError#无与id='%1$s'的vm操作对应的。#GSPBefError#", tranAction.ID));
+// }
+// GetMappedBizAction((MappedBizAction)((action instanceof MappedBizAction) ? action : null), (MappedBizAction)((tranAction instanceof MappedBizAction) ? tranAction : null));
+// }
+// }
+//
+// ///#endregion
+// return this;
+// }
+//
+// private void GetMappedBizAction(MappedBizAction targetAction, MappedBizAction sourceAction)
+// {
+// targetAction.setCode(sourceAction.getCode());
+// targetAction.setName(sourceAction.getCode());
+// targetAction.ParameterCollection.clear();
+// if (sourceAction.ParameterCollection.getCount()>0)
+// {
+//// for (var item : sourceAction.ParameterCollection)
+// IViewModelParameterCollection list = sourceAction.getParameterCollection();
+// list[0];
+// for (IViewModelParameter item : sourceAction.getParameterCollection())
+// {
+// targetAction.ParameterCollection.add(item);
+// }
+// }
+// targetAction.setReturnValue(sourceAction.getReturnValue());
+// }
+
+// private GspViewModelElement GetMappedElementByBizElementId(String bizEleId)
+// {
+//// var elements = GetAllElementList(true);
+// ArrayList elements = getAllElementList(true);
+//// if (!(elements.Find(ele=>bizEleId.equals(((GspViewModelElement) ele).getMapping().TargetObjId)) instanceof GspViewModelElement vmElement))
+// for(GspViewModelElement ele;){
+// if(ele.getMapping().getTargetObjectId().equals(bizEleId)){
+//
+// }
+// }
+// {
+// throw new RuntimeException(String.format("#GSPBefError#无与id='%1$s'的be字段对应的vm字段。#GSPBefError#", bizEleId));
+// }
+// return vmElement;
+// }
+//
+// private GspViewModelElement getTransElement(GspViewModel transViewModel, IGspCommonElement bizElement, String bizId)
+// {
+// Object tempVar = transViewModel.findElementById(bizElement.getID());
+// GspViewModelElement transElement = (GspViewModelElement)((tempVar instanceof GspViewModelElement) ? tempVar : null);
+// if (transElement != null)
+// {
+// GspVoElementMapping tempVar2 = new GspVoElementMapping();
+// tempVar2.setMapType(MappingType.Element);
+// tempVar2.setTargetObjId(bizElement.getID());
+// tempVar2.setTargetMetadataId(bizId);
+// tempVar2.setTargetMetadataPkgName(transViewModel.getMapping().getTargetMetadataPkgName());
+// transElement.setMapping(tempVar2);
+// }
+// return transElement;
+// }
+//
+// private GspAssociation getAssociation(GspAssociationCollection collection, String associationId)
+// {
+//// return (GspAssociation)collection.FirstOrDefault(item => associationId.equals(item.Id));
+// for(GspAssociation item:collection){
+// if(item.getId().equals(associationId)){
+// return item;
+// }
+// }
+// return null;
+// }
+//
+// private GspViewModelElement getElement(GspFieldCollection collection, String labelId)
+// {
+// for (IGspCommonField item : collection)
+// {
+// if (labelId.equals(item.getLabelID()))
+// {
+// return (GspViewModelElement)((item instanceof GspViewModelElement) ? item : null);
+// }
+// }
+// return null;
+// }
+ ///#endregion
+
+ ///#region manager
+ private static final String ItemNameTemplate = "I%1$sManager";
+
+ public final String getMgrInterfaceName() {
+ return String.format(ItemNameTemplate, getCode());
+ }
+
+ public final String getChangesetClassName() {
+ return String.format("%1$s%2$s", getCode(), "ViewModelChange");
+ }
+
+
+ public final String getDefaultValueClassName() {
+ return String.format("%1$s%2$s", getCode(), "DefaultValue");
+ }
+ ///#endregion
+ ///#endregion
+
+ // region EntityObject.GetRefStructures
+ @Override
+ protected List getCommonModelRefStructures(){
+ List fields = new ArrayList<>();
+ for (IGspCommonField field : getAllElementList(false)) {
+ fields.add(field);
+ }
+ return BeCommonStructureUtil.getInstance().getElementsRefStructures(fields);
+ }
+ // endregion
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/GspViewModelElement.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/GspViewModelElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..04a20de4e416754a2ee37f90cbe7b7caf4a59653
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/GspViewModelElement.java
@@ -0,0 +1,346 @@
+
+
+package com.inspur.edp.formserver.viewmodel;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.inspur.edp.bef.bizentity.commonstructure.BeCommonStructureUtil;
+import com.inspur.edp.cef.designtime.api.entity.commonstructure.CefCommonStructureUtil;
+import com.inspur.edp.das.commonmodel.entity.GspCommonElement;
+import com.inspur.edp.formserver.viewmodel.collection.VMActionCollection;
+import com.inspur.edp.formserver.viewmodel.common.mapping.GspVoElementMapping;
+import com.inspur.edp.formserver.viewmodel.common.VMHelpConfig;
+import com.inspur.edp.formserver.viewmodel.json.element.ViewElementDeserializer;
+
+import com.inspur.edp.formserver.viewmodel.json.element.ViewElementSerializer;
+import java.io.Serializable;
+
+/**
+ * The Definition Of View Model Element
+ *
+ * @ClassName: GspViewModelElement
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+@JsonDeserialize(using = ViewElementDeserializer.class)
+@JsonSerialize(using = ViewElementSerializer.class)
+public class GspViewModelElement extends GspCommonElement implements Serializable {
+ public GspViewModelElement() {
+ }
+
+ ///#region 属性
+
+ /**
+ * 是否启用多语输入
+ *
+ */
+ private boolean enableMultiLanguageInput;
+
+ public boolean isEnableMultiLanguageInput() {
+ return enableMultiLanguageInput;
+ }
+
+ public void setEnableMultiLanguageInput(boolean enableMultiLanguageInput) {
+ this.enableMultiLanguageInput = enableMultiLanguageInput;
+ }
+
+ /**
+ * 是否vm新增的虚拟字段
+ *
+ */
+ private boolean privateIsVirtualViewElement;
+
+ public final boolean getIsVirtualViewElement() {
+ return privateIsVirtualViewElement;
+ }
+
+ public final void setIsVirtualViewElement(boolean value) {
+ privateIsVirtualViewElement = value;
+ }
+
+ /**
+ 是否只读属性
+
+
+ //public bool IsReadOnly { get; set; }
+ */
+
+ /**
+ * 是否只用于服务端
+ *
+ */
+ private boolean privateIsBeckendOnly;
+
+ public final boolean getIsBeckendOnly() {
+ return privateIsBeckendOnly;
+ }
+
+ public final void setIsBeckendOnly(boolean value) {
+ privateIsBeckendOnly = value;
+ }
+
+ /**
+ * 隶属的VO节点
+ *
+ */
+ //[Newtonsoft.Json.JsonIgnore()]
+ GspViewObject getOwner() {
+ return (GspViewObject) getBelongObject();
+
+ }
+
+ void setOwner(GspViewObject value) {
+ setBelongObject(value);
+ }
+
+ /**
+ * 属性映射,VMElement可以映射到BE,或者DM Element上
+ *
+ */
+// private GspVoElementMapping privateMapping;
+ GspVoElementMapping mapping;
+
+ public final GspVoElementMapping getMapping() {
+ return mapping;
+ }
+
+ public final void setMapping(GspVoElementMapping value) {
+ mapping = value;
+ }
+
+ /**
+ * 是否立即提交
+ *
+ *
+ * 表单上设置了立即提交控制的属性发生变更后,会自动执行Modfiy将累积变更提交到应用服务器
+ */
+ private boolean privateImmediateSubmission;
+
+ public final boolean getImmediateSubmission() {
+ return privateImmediateSubmission;
+ }
+
+ public final void setImmediateSubmission(boolean value) {
+ privateImmediateSubmission = value;
+ }
+
+ private boolean showInFilter = true;
+
+ /**
+ * 是否在过滤中显示
+ *
+ */
+ public boolean getShowInFilter() {
+ return this.showInFilter;
+ }
+
+ public void setShowInFilter(boolean value) {
+ this.showInFilter = value;
+ }
+
+ private boolean showInSort = true;
+
+ /**
+ * 是否在排序中显示
+ *
+ */
+ public boolean getShowInSort() {
+ return this.showInSort;
+ }
+
+ public void setShowInSort(boolean value) {
+ this.showInSort = value;
+ }
+
+ //
+ private VMHelpConfig privateVMHelpConfig;
+
+ // @Deprecated
+ public final VMHelpConfig getVMHelpConfig() {
+ return privateVMHelpConfig;
+ }
+
+ // @Deprecated
+ public final void setVMHelpConfig(VMHelpConfig value) {
+ privateVMHelpConfig = value;
+ }
+
+ //
+ private VMActionCollection privateHelpActions;
+
+ // @Deprecated
+ public final VMActionCollection getHelpActions() {
+ return privateHelpActions;
+ }
+
+ // @Deprecated
+ public final void setHelpActions(VMActionCollection value) {
+ privateHelpActions = value;
+ }
+
+ private java.util.HashMap extendProperties;
+
+ /**
+ * 表单拓展节点
+ */
+ public final java.util.HashMap getExtendProperties() {
+ if (extendProperties == null) {
+ extendProperties = new java.util.HashMap();
+ }
+ return extendProperties;
+ }
+
+ public void setExtendProperties(java.util.HashMap value) {
+ extendProperties = value;
+ }
+
+ ///#region 帮助信息
+ //private ElementHelpType helpType = ElementHelpType.None;
+ /////
+ ///// 帮助类型
+ /////
+ //public ElementHelpType HelpType
+ //{
+ // get { return helpType; }
+ // set { helpType = value; }
+ //}
+
+ //private BaseDictInfo helpDefine;
+ /////
+ ///// 帮助定义
+ /////
+ //public BaseDictInfo HelpDefine
+ //{
+ // get { return helpDefine; }
+ // set { helpDefine = value; }
+ //}
+ ///#endregion 帮助信息
+
+ ///#endregion
+
+ ///#region 方法
+
+ /**
+ * 重载Equals方法
+ *
+ * @param obj 要比较的对象
+ * @return
+ * 如果当前对象等于 other 参数,则为 true;否则为 false。
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ if (((GspViewModelElement)obj).equals(this)) {
+ return true;
+ }
+ if (obj.getClass() != getClass()) {
+ return false;
+ }
+
+ return equals((GspViewModelElement) obj);
+ }
+
+ /**
+ * 当前对象是否等于同一类型的另一个对象。
+ *
+ * @param other 与此对象进行比较的对象。
+ * @return
+ * 如果当前对象等于 other 参数,则为 true;否则为 false。
+ */
+ protected boolean equals(GspViewModelElement other) {
+ //&& IsReadOnly == other.IsReadOnly
+ if (getID() == other.getID() && getCode() == other.getCode() && getName() == other.getName() && getObjectType() == other.getObjectType() && getIsRequire() == other.getIsRequire() && getLabelID() == other.getLabelID() && getLength() == other.getLength() && getPrecision() == other.getPrecision() && getShowInFilter() == other.getShowInFilter() && getShowInSort() == other.getShowInSort()) {
+ if ((getOwner() == null && other.getOwner() == null) || (getOwner() != null && other.getOwner() != null && getOwner().getID() == other.getOwner().getID())) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Serves as a hash function for a particular type.
+ *
+ * @return .
+ * A hash code for the current
+ * 2
+ */
+ @Override
+ public int hashCode() {
+// unchecked
+ {
+ //var hashCode = IsReadOnly.GetHashCode();
+ int hashCode = (new Boolean(getIsBeckendOnly())).hashCode();
+ hashCode = (hashCode * 397) ^ (getOwner() != null ? getOwner().hashCode() : 0);
+ hashCode = (hashCode * 397) ^ (getMapping() != null ? getMapping().hashCode() : 0);
+ return hashCode;
+ }
+ }
+
+ /**
+ * 克隆
+ *
+ * @return
+ */
+ public final GspViewModelElement clone() {
+// Object tempVar = MemberwiseClone();
+ Object tempVar = null;
+ try {
+ tempVar = super.clone();
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ }
+// var element = (GspViewModelElement)((tempVar instanceof GspViewModelElement) ? tempVar : null);
+ GspViewModelElement element = (GspViewModelElement) ((tempVar instanceof GspViewModelElement) ? tempVar : null);
+ if (element == null) {
+ throw new RuntimeException("克隆Element失败");
+ }
+
+ if (getMapping() != null) {
+ Object tempVar2 = getMapping().clone();
+ element.setMapping((GspVoElementMapping) ((tempVar2 instanceof GspVoElementMapping) ? tempVar2 : null));
+ }
+ if (getVMHelpConfig() != null)
+ try {
+ Object tempVar3 = super.clone();
+ element.setVMHelpConfig((VMHelpConfig) ((tempVar3 instanceof VMHelpConfig) ? tempVar3 : null));
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ }
+
+ if (getHelpActions() != null)
+ try {
+ Object tempVar4 = super.clone();
+ element.setHelpActions((VMActionCollection) ((tempVar4 instanceof VMActionCollection) ? tempVar4 :
+ null));
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ }
+
+
+ return element;
+ }
+
+ /**
+ * 重载ToString方法
+ *
+ * @return
+ */
+ @Override
+ public String toString() {
+ return String.format("ID:%1$s,Code:%2$s,Name:%3$s", getID(), getCode(), getName());
+ }
+
+ ///#endregion
+
+ // region Property
+ @Override
+ protected CefCommonStructureUtil getCefCommonStructureUtil() {
+
+ return BeCommonStructureUtil.getInstance();
+ }
+ // endregion
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/GspViewObject.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/GspViewObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..976f7d3b0ec96938f2fe1a8684feba0df797be0f
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/GspViewObject.java
@@ -0,0 +1,371 @@
+
+
+package com.inspur.edp.formserver.viewmodel;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.inspur.edp.cef.designtime.api.IGspCommonField;
+import com.inspur.edp.cef.designtime.api.entity.ClassInfo;
+import com.inspur.edp.das.commonmodel.IGspCommonElement;
+import com.inspur.edp.das.commonmodel.IGspCommonObject;
+import com.inspur.edp.das.commonmodel.entity.GspCommonObject;
+import com.inspur.edp.formserver.viewmodel.collection.VMElementCollection;
+import com.inspur.edp.formserver.viewmodel.collection.ViewObjectCollection;
+import com.inspur.edp.formserver.viewmodel.common.mapping.GspVoObjectMapping;
+import com.inspur.edp.formserver.viewmodel.json.object.ViewObjectDeserializer;
+import lombok.var;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.function.Predicate;
+
+/**
+ * The Definition Of View Model Object
+ *
+ * @ClassName: GspViewObject
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+@JsonDeserialize(using = ViewObjectDeserializer.class)
+public class GspViewObject extends GspCommonObject implements Serializable {
+
+ /**
+ * 构造函数,初始化父类的集合类型
+ */
+ public GspViewObject() {
+ if (super.getContainElements() == null || !(super.getContainElements() instanceof VMElementCollection)) {
+ super.setContainElements(new VMElementCollection(this));
+ }
+ if (super.getContainChildObjects() == null || !(super.getContainChildObjects() instanceof ViewObjectCollection)) {
+ super.setContainChildObjects(new ViewObjectCollection(this));
+ }
+ }
+
+ ///#region 属性
+
+ /**
+ * 服务器使用
+ *
+ */
+ private boolean privateIsBeckendOnly;
+
+ public final boolean getIsBeckendOnly() {
+ return privateIsBeckendOnly;
+ }
+
+ public final void setIsBeckendOnly(boolean value) {
+ privateIsBeckendOnly = value;
+ }
+
+ /**
+ * 是否根节点
+ *
+ */
+ public boolean isRootNode() {
+ return getParent() == null;
+ }
+
+ /**
+ * 主键Element
+ *
+ */
+ private String privatePrimaryKey;
+
+ public final String getPrimaryKey() {
+ return privatePrimaryKey;
+ }
+
+ public final void setPrimaryKey(String value) {
+ privatePrimaryKey = value;
+ }
+
+ /**
+ * 父节点对象
+ *
+ */
+ @Override
+ public IGspCommonObject getParentObject() {
+ return getParent();
+ }
+
+ // @Override
+ public void setParentObject(IGspCommonObject value) {
+ if (value != null && !(value instanceof GspViewObject)) {
+ throw new RuntimeException("类型不兼容异常");
+ }
+ setParent((GspViewObject) value);
+ }
+
+ /**
+ * 父节点对象
+ *
+ */
+ private GspViewObject privateParent;
+
+ public final GspViewObject getParent() {
+ return privateParent;
+ }
+
+ public final void setParent(GspViewObject value) {
+ privateParent = value;
+ }
+
+ /**
+ * 节点映射,VMObject可以映射到BENode,或者DM上
+ *
+ */
+ private GspVoObjectMapping mapping;
+
+ public final GspVoObjectMapping getMapping() {
+ return mapping;
+ }
+
+ public final void setMapping(GspVoObjectMapping value) {
+ mapping = value;
+ }
+
+ /**
+ * 是否包含子节点
+ *
+ */
+// public boolean hasChildNode => getContainChildObjects().size() > 0;
+ public boolean hasChildNode() {
+ return getContainChildObjects().size() > 0;
+ }
+
+ /**
+ * 元素集合
+ *
+ */
+ public VMElementCollection getContainElements() {
+ return (VMElementCollection) super.getContainElements();
+ }
+
+ private void setContainElements(VMElementCollection value) {
+ super.setContainElements(value);
+ }
+
+ /**
+ * 子节点集合
+ *
+ */
+ public ViewObjectCollection getContainChildObjects() {
+ return (ViewObjectCollection) super.getContainChildObjects();
+ }
+
+ private void setContainChildObjects(ViewObjectCollection value) {
+ super.setContainChildObjects(value);
+
+ }
+
+ /**
+ * 默认页面大小,默认值为0,表示不分页
+ *
+ */
+ private int privateDefaultPageSize;
+
+ public final int getDefaultPageSize() {
+ return privateDefaultPageSize;
+ }
+
+ public final void setDefaultPageSize(int value) {
+ privateDefaultPageSize = value;
+ }
+
+ private java.util.HashMap extendProperties;
+
+ /**
+ * 表单拓展节点
+ */
+ public final java.util.HashMap getExtendProperties() {
+ if (extendProperties == null) {
+ extendProperties = new java.util.HashMap();
+ }
+ return extendProperties;
+ }
+
+ public void setExtendProperties(java.util.HashMap value) {
+ extendProperties = value;
+ }
+ ///#endregion
+
+ ///#region 重载方法
+
+ /**
+ * 重载Equals方法
+ *
+ * @param obj 要比较的对象
+ * @return
+ * 如果当前对象等于 other 参数,则为 true;否则为 false。
+ */
+ @Override
+ public boolean equals(Object obj) {
+// if (obj == null) {
+// return false;
+// }
+// if (obj.equals(this)) {
+// return true;
+// }
+// if (obj.getClass() != getClass()) {
+// return false;
+// }
+
+ return equals((GspViewObject) obj);
+ }
+
+ /**
+ * 当前对象是否等于同一类型的另一个对象。
+ *
+ * @param other 与此对象进行比较的对象。
+ * @return
+ * 如果当前对象等于 other 参数,则为 true;否则为 false。
+ */
+ protected boolean equals(GspViewObject other) {
+ //&& this.HasAssociation == other.HasAssociation
+ //&& Object.Equals(this.Mapping, other.Mapping)
+ //&& Object.Equals(Association, other.Association)
+ if (getID() == other.getID() && getCode() == other.getCode() && getName() == other.getName() && getIsReadOnly() == other.getIsReadOnly() && isRootNode() == other.isRootNode() && getPrimaryKey().equals(other.getPrimaryKey()) && hasChildNode() == other.hasChildNode() && getContainElements().equals(other.getContainElements()) && getContainChildObjects().equals(other.getContainChildObjects())) {
+ if ((getParent() == null && other.getParent() == null) || (getParent() != null && other.getParent() != null && getParent().getID() == other.getParent().getID())) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Serves as a hash function for a particular type.
+ *
+ * @return .
+ * A hash code for the current
+ * 2
+ */
+ @Override
+ public int hashCode() {
+// unchecked
+ {
+ int hashCode = (getContainElements() != null ? getContainElements().hashCode() : 0);
+ hashCode = (hashCode * 397) ^ (getContainChildObjects() != null ? getContainChildObjects().hashCode() : 0);
+
+ hashCode = (hashCode * 397) ^ (new Boolean(getIsBeckendOnly())).hashCode();
+ hashCode = (hashCode * 397) ^ (getPrimaryKey() != null ? getPrimaryKey().hashCode() : 0);
+ hashCode = (hashCode * 397) ^ (getParent() != null ? getParent().hashCode() : 0);
+ hashCode = (hashCode * 397) ^ (getMapping() != null ? getMapping().hashCode() : 0);
+ return hashCode;
+ }
+ }
+
+ /**
+ * 克隆
+ *
+ * @return VO节点对象
+ */
+ @Override
+ public GspViewObject clone() {
+ Object tempVar = super.clone();
+ GspViewObject node = (GspViewObject) ((tempVar instanceof GspViewObject) ? tempVar : null);
+ if (node == null) {
+ throw new RuntimeException("克隆GSPViewObject失败");
+ }
+ //if (Parent != null)
+ // node.Parent = Parent.Clone() as GspViewObject;
+ if (getContainChildObjects() != null) {
+ Object tempVar2 = getContainChildObjects().clone();
+ node.setContainChildObjects((ViewObjectCollection) ((tempVar2 instanceof ViewObjectCollection) ? tempVar2 : null));
+
+ for (IGspCommonObject ChildObj : node.getContainChildObjects()) {
+ ChildObj.setParentObject(node);
+ }
+ }
+
+ if (getContainElements() != null && getContainElements().size() > 0) {
+ Object tempVar3 = getContainElements().clone();
+ node.setContainElements((VMElementCollection) ((tempVar3 instanceof VMElementCollection) ? tempVar3 : null));
+ for (IGspCommonField BelongObj : node.getContainElements()) {
+ BelongObj.setBelongObject(node);
+ }
+ }
+
+ //if (Association != null)
+ //{
+ // node.Association = Association.Clone() as IVOAssociation;
+ //}
+ if (mapping != null){
+ var map = mapping.clone() ;
+ node.setMapping((GspVoObjectMapping) ((map instanceof GspVoObjectMapping) ? map : null));
+
+ }
+
+ return node;
+ }
+
+ /**
+ * 重载ToString方法
+ *
+ * @return 描述
+ */
+ @Override
+ public String toString() {
+ return String.format("ID:%1$s,Code:%2$s,Name:%3$s", getID(), getCode(), getName());
+ }
+
+ ///#endregion
+
+ /**
+ * 获取符合条件的属性列表
+ *
+ * @param predicate
+ * @return
+ *
+ */
+ public final java.util.List getElements(Predicate predicate) {
+ ArrayList temp = getAllElementList(true);
+ java.util.List toList = new ArrayList();
+ if (predicate != null) {
+ for (IGspCommonElement item : temp) {
+ if (predicate.test((GspViewModelElement) item)) {
+ toList.add((GspViewModelElement) item);
+ }
+ }
+ return toList;
+ }
+ for (IGspCommonElement item2 : temp) {
+ GspViewModelElement tempVar2 = ((item2 instanceof GspViewModelElement) ? (GspViewModelElement) item2 : null);
+ if (tempVar2 != null) {
+ toList.add(tempVar2);
+ }
+ }
+ return toList;
+ }
+
+ @Override
+ public ClassInfo getGeneratedEntityClassInfo() {
+ final String suffix = "View";
+ ClassInfo baseClassInfo = super.getGeneratedEntityClassInfo();
+ return new ClassInfo(baseClassInfo.getAssemblyInfo(), baseClassInfo.getClassName() + suffix,
+ baseClassInfo.getClassNamespace());
+ }
+
+ /**
+ * 排序条件`
+ */
+ private String orderbyCondition;
+ public String getOrderbyCondition() {
+ return orderbyCondition;
+ }
+
+ public void setOrderbyCondition(String value) {
+ orderbyCondition=value;
+ }
+ /**
+ * 过滤条件
+ */
+ private String filterCondition;
+ public String getFilterCondition(){
+ return filterCondition;
+ }
+ public void setFilterCondition(String value){
+ filterCondition=value;
+ }
+
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/VoThreadLoacl.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/VoThreadLoacl.java
new file mode 100644
index 0000000000000000000000000000000000000000..a6adfda3c2d117a76f6998c9c9402d80c950db19
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/VoThreadLoacl.java
@@ -0,0 +1,17 @@
+
+
+package com.inspur.edp.formserver.viewmodel;
+
+public class VoThreadLoacl {
+ public static final ThreadLocal voThreadLocal = new ThreadLocal();
+
+ public static void set(Context user) { voThreadLocal.set(user);
+ }
+ public static void unset() {
+ voThreadLocal.remove();
+ }
+
+ public static Context get() {
+ return (Context)voThreadLocal.get();
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/accessory/AccessoryService.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/accessory/AccessoryService.java
new file mode 100644
index 0000000000000000000000000000000000000000..576bacbe9cb0f2edfeeab091a1a61fe03662c3c4
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/accessory/AccessoryService.java
@@ -0,0 +1,31 @@
+
+
+package com.inspur.edp.formserver.viewmodel.accessory;
+
+import com.inspur.edp.formserver.viewmodel.GspViewModel;
+
+/**
+ * The Approval Log Services,Using By VO Creating Wizard
+ *
+ * @ClassName: AccessoryService
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public interface AccessoryService {
+
+ /*
+ nodeCode : 父节点编号
+ processInstLabelId: 父节点上流程实例字段标签
+ */
+ void addApprovalComments(GspViewModel model, String nodeCode, String processInstLabelId, boolean includeBacklog);
+
+ /**
+ * @param model
+ * @param nodeCode
+ * @param processInstLabelId
+ * @param includeBacklog
+ */
+ void addApprovalWorkItenLogs(GspViewModel model, String nodeCode, String processInstLabelId, boolean includeBacklog);
+
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/ActionFormatParameter.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/ActionFormatParameter.java
new file mode 100644
index 0000000000000000000000000000000000000000..d32316e1cdfdda07dfd912af98c3d6bc47322b42
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/ActionFormatParameter.java
@@ -0,0 +1,86 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action;
+
+import java.io.Serializable;
+
+/**
+ * The Definition Of Action Format Parameter
+ *
+ * @ClassName: ActionFormatParameter
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class ActionFormatParameter implements Cloneable, Serializable
+{
+ ///#region 属性
+
+ /**
+ ID
+
+ */
+ private String privateID;
+ public final String getID()
+ {
+
+ return privateID;
+ }
+ public final void setID(String value)
+ {
+
+ privateID = value;
+ }
+
+ /**
+ Code
+
+ */
+ private String privateCode;
+ public final String getCode()
+ {
+ return privateCode;
+ }
+ public final void setCode(String value)
+ {
+ privateCode = value;
+ }
+
+ /**
+ Name
+
+ */
+ private String privateName;
+ public final String getName()
+ {
+ return privateName;
+ }
+ public final void setName(String value)
+ {
+ privateName = value;
+ }
+
+ ///#endregion
+
+ ///#region 方法
+
+ /**
+ 克隆
+
+ @return Action执行参数
+ */
+ public final ActionFormatParameter clone()
+ {
+ Object tempVar = null;
+ try {
+ tempVar = super.clone();
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ }
+ ActionFormatParameter obj = (ActionFormatParameter)((tempVar instanceof ActionFormatParameter) ? tempVar : null);
+
+ return obj;
+ }
+
+ ///#endregion
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/IViewModelParameter.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/IViewModelParameter.java
new file mode 100644
index 0000000000000000000000000000000000000000..7fd0681a076a8f9d5cb875eba2b9b2a2a1493db5
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/IViewModelParameter.java
@@ -0,0 +1,121 @@
+
+
+//package com.inspur.edp.formserver.viewmodel.Interface;
+package com.inspur.edp.formserver.viewmodel.action;
+
+import com.inspur.edp.formserver.viewmodel.action.viewmodelbase.ViewModelParActualValue;
+import com.inspur.edp.formserver.viewmodel.common.VMCollectionParameterType;
+import com.inspur.edp.formserver.viewmodel.common.VMParameterMode;
+import com.inspur.edp.formserver.viewmodel.common.VMParameterType;
+
+/**
+ * The Definition Of View Model Parameter
+ *
+ * @ClassName: IViewModelParameter
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public interface IViewModelParameter
+{
+
+ /**
+ * @return The Id Of The Parameter
+ */
+ String getID();
+
+ /**
+ * @param value The Id Of The Parameter
+ */
+ void setID(String value);
+
+ /**
+ * @return The Code Of The Parameter
+ */
+ String getParamCode();
+
+ /**
+ * @param value The Code Of The Parameter
+ */
+ void setParamCode(String value);
+
+ /**
+ * @return The Name Of The Parameter
+ */
+ String getParamName();
+
+ /**
+ * @param value The Name Of The Parameter
+ */
+ void setParamName(String value);
+
+ /**
+ * @return The Type Of The Parameter
+ */
+ VMParameterType getParameterType();
+
+ /**
+ * @param value The Type Of The Parameter
+ */
+ void setParameterType(VMParameterType value);
+
+ /**
+ * @return The Assembly Of The Parameter,It`s Useful For Dotnet
+ */
+ String getAssembly();
+
+ /**
+ * @param value The Assembly Of The Parameter,It`s Useful For Dotnet
+ */
+ void setAssembly(String value);
+
+ /**
+ * @return The Class Name Of The Parameter Type
+ */
+ String getClassName();
+
+ /**
+ * @param value The Class Name Of The Parameter Type
+ */
+ void setClassName(String value);
+
+ /**
+ * @return The Parameter Mode Of The Parameter,The Default Value Is In
+ */
+ VMParameterMode getMode();
+
+ /**
+ * @param value The Parameter Mode Of The Parameter,The Default Value Is In
+ */
+ void setMode(VMParameterMode value);
+
+ /**
+ * @return The Description Of The Parameter
+ */
+ String getParamDescription();
+
+ /**
+ * @param value The Description Of The Parameter
+ */
+ void setParamDescription(String value);
+
+ /**
+ * @return The Collection Type Of The Parameter
+ */
+ VMCollectionParameterType getCollectionParameterType();
+
+ /**
+ * @param value The Collection Type Of The Parameter
+ */
+ void setCollectionParameterType(VMCollectionParameterType value);
+
+ /**
+ * @return The Actual Value Of The Parameter,It`s Not Required
+ */
+ ViewModelParActualValue getActualValue();
+
+ /**
+ * @param value The Actual Value Of The Parameter,It`s Not Required
+ */
+ void setActualValue(ViewModelParActualValue value);
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/IViewModelParameterCollection.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/IViewModelParameterCollection.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f95659ae61849016cbb3bcd70bad37ac792e19c
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/IViewModelParameterCollection.java
@@ -0,0 +1,29 @@
+
+
+//package com.inspur.edp.formserver.viewmodel.Interface;
+package com.inspur.edp.formserver.viewmodel.action;
+
+import java.util.List;
+
+/**
+ * The Collection Of The Parameter
+ *
+ * @ClassName: IViewModelParameterCollection
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public interface IViewModelParameterCollection extends List {
+
+ /**
+ * @return The Parameters Count In The Collection
+ */
+ int getCount();
+
+ /**
+ * Get A Parameter With The Input Index
+ * @param index The Parameter To Get
+ * @return The Got Parameter
+ */
+ T getItem(int index);
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/MappedBizAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/MappedBizAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..5ef9c3f16114274297fc3a32803aad18ff379132
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/MappedBizAction.java
@@ -0,0 +1,61 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.inspur.edp.formserver.viewmodel.action.mappedbiz.MappedBizActionParameterCollection;
+import com.inspur.edp.formserver.viewmodel.json.operation.MappedBizActionDeserializer;
+import com.inspur.edp.formserver.viewmodel.json.operation.MappedBizActionSerializer;
+import java.io.Serializable;
+
+/**
+ * The Definition Of The Mapped Biz Action
+ *
+ * @ClassName: MappedBizAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+@JsonSerialize(using = MappedBizActionSerializer.class)
+@JsonDeserialize(using = MappedBizActionDeserializer.class)
+public class MappedBizAction extends ViewModelAction implements Cloneable, Serializable {
+
+ ///#region 属性
+ private MappedBizActionParameterCollection mappedBizActionParams;
+ /**
+ * 类型
+ */
+ //@Override
+ public ViewModelActionType Type = ViewModelActionType.BEAction;
+// public ViewModelActionType Type => ViewModelActionType.BEAction;
+
+ ///#endregion
+ public MappedBizAction() {
+ mappedBizActionParams = new MappedBizActionParameterCollection();
+ }
+ ///#region 方法
+
+ /**
+ * 克隆
+ *
+ * @return VM节点映射
+ */
+ @Override
+ public final MappedBizAction clone() {
+ ObjectMapper objectMapper = new ObjectMapper();
+ try {
+ return objectMapper.readValue(objectMapper.writeValueAsString(this), MappedBizAction.class);
+ } catch (JsonProcessingException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ protected IViewModelParameterCollection getParameters() {
+ return mappedBizActionParams;
+ }
+ ///#endregion
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/MappedCdpAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/MappedCdpAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..bd2591d05d174d2410890c960a1fa3d78893dfec
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/MappedCdpAction.java
@@ -0,0 +1,63 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.inspur.edp.formserver.viewmodel.action.mappedcdp.MappedCdpActionParameterCollection;
+import com.inspur.edp.formserver.viewmodel.json.operation.MappedCdpActionDeserializer;
+import com.inspur.edp.formserver.viewmodel.json.operation.MappedCdpActionSerializer;
+import java.io.Serializable;
+
+/**
+ * The Definition Of The Parameter With Component
+ *
+ * @ClassName: MappedCdpAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+@JsonSerialize(using = MappedCdpActionSerializer.class)
+@JsonDeserialize(using = MappedCdpActionDeserializer.class)
+public class MappedCdpAction extends MappedCdpActionBase implements Cloneable, Serializable {
+ ///#region 属性
+
+ private MappedCdpActionParameterCollection mappedCdpActionParams;
+
+ /**
+ * 类型
+ */
+ @Override
+ public ViewModelActionType getType() {
+ return ViewModelActionType.VMAction;
+ }
+
+ ///#endregion
+ public MappedCdpAction() {
+ mappedCdpActionParams = new MappedCdpActionParameterCollection();
+ }
+ ///#region 方法
+
+ /**
+ * 克隆
+ *
+ * @return VO节点映射
+ */
+ @Override
+ public MappedCdpAction clone() {
+ ObjectMapper objectMapper = new ObjectMapper();
+ try {
+ return objectMapper.readValue(objectMapper.writeValueAsString(this), MappedCdpAction.class);
+ } catch (JsonProcessingException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ protected IViewModelParameterCollection getParameters() {
+ return mappedCdpActionParams;
+ }
+ ///#endregion
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/MappedCdpActionBase.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/MappedCdpActionBase.java
new file mode 100644
index 0000000000000000000000000000000000000000..d46fbff2f73cd87ed2772cd9edefa4f7d102c99b
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/MappedCdpActionBase.java
@@ -0,0 +1,92 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action;
+
+import java.io.Serializable;
+
+/**
+ * The Definition Of The Parameter With Component
+ *
+ * @ClassName: MappedCdpActionBase
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public abstract class MappedCdpActionBase extends ViewModelAction implements Serializable
+{
+ ///#region 属性
+ private String componentEntityId = "";
+ /**
+ 对应构件实体Id
+
+ */
+ public String getComponentEntityId(){
+ return componentEntityId;
+ }
+ public void setComponentEntityId(String value){
+ this.componentEntityId=value;
+ }
+ /**
+ 对应构件实体包名
+
+ */
+ private String privateComponentPkgName;
+ public String getComponentPkgName()
+ {
+ return privateComponentPkgName;
+ }
+ public void setComponentPkgName(String value)
+ {
+ privateComponentPkgName = value;
+ }
+
+ private boolean privateIsGenerateComponent;
+ public boolean getIsGenerateComponent()
+ {
+ return privateIsGenerateComponent;
+ }
+ public void setIsGenerateComponent(boolean value)
+ {
+ privateIsGenerateComponent = value;
+ }
+
+ ///#endregion
+
+ ///#region 方法
+
+ /**
+ 当前对象是否等于同一类型的另一个对象。
+
+ @param other 与此对象进行比较的对象。
+ @return 如果当前对象等于 other 参数,则为 true;否则为 false。
+ */
+ @Override
+ public boolean equals(ViewModelAction other)
+ {
+
+ MappedCdpActionBase cdpAction = (MappedCdpActionBase)((other instanceof MappedCdpActionBase) ? other : null);
+ if (cdpAction == null)
+ {
+ return false;
+ }
+ if (getID().equals(cdpAction.getComponentEntityId()) && getCode().equals(cdpAction.getCode()) && getName().equals(cdpAction.getName()) && getType() == cdpAction.getType() && getComponentPkgName().equals(cdpAction.getComponentPkgName()) && getComponentName().equals(cdpAction.getComponentName()) && getIsGenerateComponent() == cdpAction.getIsGenerateComponent() && getComponentEntityId().equals(cdpAction.getComponentEntityId()))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ 重载ToString方法
+
+ @return 描述
+ */
+ @Override
+ public String toString()
+ {
+ return String.format("[VM action] ID:%1$s, Code:%2$s, Name:%3$s", getID(), getCode(), getName());
+ }
+
+ ///#endregion
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/VMActionResult.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/VMActionResult.java
new file mode 100644
index 0000000000000000000000000000000000000000..51d8d40da560846b259d0307b3e76e88d8430e3b
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/VMActionResult.java
@@ -0,0 +1,57 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action;
+
+import java.io.Serializable;
+
+/**
+ * The Definition Of The View Model Action Result
+ *
+ * @ClassName: VMActionResult
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class VMActionResult implements Cloneable, Serializable
+{
+ ///#region 属性
+
+ /**
+ 类型名称
+
+ */
+ private String privateTypeName;
+ public final String getTypeName()
+ {
+ return privateTypeName;
+ }
+ public final void setTypeName(String value)
+ {
+ privateTypeName = value;
+ }
+
+ ///#endregion
+
+ ///#region 方法
+
+ /**
+ 克隆
+
+ @return Action执行结果
+ */
+ public final VMActionResult clone()
+ {
+// return MemberwiseClone();
+ Object tempVar = null;
+ try {
+ tempVar = super.clone();
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ }
+ VMActionResult obj = (VMActionResult) ((tempVar instanceof ActionFormatParameter) ? tempVar : null);
+
+ return obj;
+
+ ///#endregion
+}
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/ViewModelAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/ViewModelAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..dd33f39a2bac84c6876186c03eb7ff982e77bf60
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/ViewModelAction.java
@@ -0,0 +1,262 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.inspur.edp.cef.designtime.api.entity.CustomizationInfo;
+import com.inspur.edp.formserver.viewmodel.action.viewmodelbase.ViewModelReturnValue;
+import com.inspur.edp.formserver.viewmodel.common.ViewModelMapping;
+import java.io.Serializable;
+
+/**
+ * The Definition Of The View Model Action
+ *
+ * @ClassName: ViewModelAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public abstract class ViewModelAction implements Cloneable, Serializable {
+ ///#region 属性
+
+ /**
+ * 标识
+ */
+ private String privateID;
+
+ public String getID() {
+ return privateID;
+ }
+
+ public void setID(String value) {
+ privateID = value;
+ }
+
+ /**
+ * 编号
+ */
+ private String privateCode;
+
+ public String getCode() {
+ return privateCode;
+ }
+
+ public void setCode(String value) {
+ privateCode = value;
+ }
+
+ /**
+ * 名称
+ */
+ private String privateName;
+
+ public String getName() {
+ return privateName;
+ }
+
+ public void setName(String value) {
+ privateName = value;
+ }
+
+ /////
+ ///// Action所在的节点
+ /////
+ //public virtual GspViewObject Owner { get; set; }
+
+ /**
+ * 类型
+ */
+ private ViewModelActionType privateType = ViewModelActionType.forValue(0);
+
+ public ViewModelActionType getType() {
+ return privateType;
+ }
+
+ public void setType(ViewModelActionType value) {
+ privateType = value;
+ }
+
+ /**
+ * 参数列表
+ */
+ public IViewModelParameterCollection getParameterCollection() {
+ return getParameters();
+ }
+
+ /**
+ * 返回值
+ */
+ private ViewModelReturnValue privateReturnValue;
+
+ public final ViewModelReturnValue getReturnValue() {
+ return privateReturnValue;
+ }
+
+ public final void setReturnValue(ViewModelReturnValue value) {
+ privateReturnValue = value;
+ }
+
+ protected abstract IViewModelParameterCollection getParameters();
+
+ /**
+ * 操作映射
+ */
+ private ViewModelMapping privateMapping;
+
+ public final ViewModelMapping getMapping() {
+ return privateMapping;
+ }
+
+ public final void setMapping(ViewModelMapping value) {
+ privateMapping = value;
+ }
+
+ /**
+ * 对应构件名
+ */
+ private String privateComponentName;
+
+ public final String getComponentName() {
+ return privateComponentName;
+ }
+
+ public final void setComponentName(String value) {
+ privateComponentName = value;
+ }
+
+ private java.util.HashMap extendProperties;
+
+ /**
+ * 表单拓展节点
+ */
+ public final java.util.HashMap getExtendProperties() {
+ if (extendProperties == null) {
+ extendProperties = new java.util.HashMap();
+ }
+ return extendProperties;
+ }
+
+ public void setExtendProperties(java.util.HashMap value) {
+ extendProperties = value;
+ }
+
+ private boolean privateIsAutoSave;
+
+ public final boolean getIsAutoSave() {
+ return privateIsAutoSave;
+ }
+
+ public final void setIsAutoSave(boolean value) {
+ privateIsAutoSave = value;
+ }
+
+ private CustomizationInfo customizationInfo = new CustomizationInfo();
+ public CustomizationInfo getCustomizationInfo() {
+ return this.customizationInfo;
+ }
+
+ public void setCustomizationInfo(CustomizationInfo customizationInfo) {
+ this.customizationInfo = customizationInfo;
+ }
+ ///#endregion
+
+ ///#region 方法
+
+ /**
+ * 重写Clone
+ */
+ public abstract ViewModelAction clone();
+// public ViewModelAction clone() {
+// ObjectMapper objectMapper = new ObjectMapper();
+// try {
+// return objectMapper.readValue(objectMapper.writeValueAsString(this), ViewModelAction.class);
+// } catch (JsonProcessingException e) {
+// throw new RuntimeException(e);
+// }
+// }
+
+ /**
+ * 重写相等判断
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (obj.equals(null)) {
+ return false;
+ }
+ if (obj.equals(this)) {
+ return true;
+ }
+ if (obj.getClass() != getClass()) {
+ return false;
+ }
+ return equals((ViewModelAction) obj);
+ }
+// @Override
+// public boolean equals(Object obj)
+// {
+// if (ReferenceEquals(null, obj))
+// {
+// return false;
+// }
+// if (ReferenceEquals(this, obj))
+// {
+// return true;
+// }
+// if (obj.getClass() != getClass())
+// {
+// return false;
+// }
+// return equals((ViewModelAction)obj);
+// }
+
+ /**
+ * 强类型相等判断
+ */
+ public boolean equals(ViewModelAction other) {
+
+ if (other == null) {
+ return false;
+ }
+
+ if (getID().equals(other.getID()) && getCode().equals(other.getCode()) && getName()
+ .equals(other.getName()) && getType() == other.getType() && getMapping()
+ .equals(other.getMapping()) && getComponentName().equals(other.getComponentName())) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * 重写HashCode
+ */
+ @Override
+ public int hashCode() {
+// unchecked
+ {
+ int hashCode = (getID() != null ? getID().hashCode() : 0);
+ hashCode = (hashCode * 397) ^ (getCode() != null ? getCode().hashCode() : 0);
+ hashCode = (hashCode * 397) ^ (getName() != null ? getName().hashCode() : 0);
+ hashCode = (hashCode * 397) ^ (getReturnValue() != null ? getReturnValue().hashCode() : 0);
+ hashCode = (hashCode * 397) ^ getType().getValue();
+ hashCode =
+ (hashCode * 397) ^ (getComponentName() != null ? getComponentName().hashCode() : 0);
+ hashCode = (hashCode * 397) ^ (getMapping() != null ? getMapping().hashCode() : 0);
+
+ return hashCode;
+ }
+ }
+
+ /**
+ * 重载ToString方法
+ *
+ * @return 描述
+ */
+ @Override
+ public String toString() {
+ return String
+ .format("[VM BizAction] ID:%1$s,Code:%2$s,Name:%3$s", getID(), getCode(), getName());
+ }
+ ///#endregion
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/ViewModelActionType.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/ViewModelActionType.java
new file mode 100644
index 0000000000000000000000000000000000000000..aa0f82eb0f5e5a324328c5e09ac2bf8cfbdeaf55
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/ViewModelActionType.java
@@ -0,0 +1,42 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action;
+
+/**
+ * The Definition Of The View Model Action Type
+ *
+ * @ClassName: ViewModelActionType
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public enum ViewModelActionType
+{
+ /**
+ BE 的业务操作
+
+ */
+ BEAction,
+
+ /**
+ VM 操作
+
+ */
+ VMAction,
+
+ /**
+ 自定义操作
+
+ */
+ Custom;
+
+ public int getValue()
+ {
+ return this.ordinal();
+ }
+
+ public static ViewModelActionType forValue(int value)
+ {
+ return values()[value];
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/ChangesetMappingAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/ChangesetMappingAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..168049b0e5a6ecc48c041cfe2925bb7e6b20fbe7
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/ChangesetMappingAction.java
@@ -0,0 +1,26 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.internalexternalaction;
+
+import com.inspur.edp.formserver.viewmodel.action.MappedCdpAction;
+
+/**
+ * The Definition Of Changeset Mapping Action
+ *
+ * @ClassName: ChangesetMappingAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class ChangesetMappingAction extends MappedCdpAction implements IInternalExtendAction
+{
+ public static final String id = "5798f884-c222-47f4-8bbe-685c7013dee4";
+ public static final String code = "ChangesetMapping";
+ public static final String name = "内置变更集Mapping操作";
+ public ChangesetMappingAction()
+ {
+ setID(id);
+ setCode(code);
+ setName(name);
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/ChangesetReversalMappingAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/ChangesetReversalMappingAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..b72eef3933962f72a9ca8c969e6ee027856b85bc
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/ChangesetReversalMappingAction.java
@@ -0,0 +1,25 @@
+
+package com.inspur.edp.formserver.viewmodel.action.internalexternalaction;
+
+import com.inspur.edp.formserver.viewmodel.action.MappedCdpAction;
+
+/**
+ * The Definition Of Changeset Reversal Mapping Action
+ *
+ * @ClassName: ChangesetReversalMappingAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class ChangesetReversalMappingAction extends MappedCdpAction implements IInternalExtendAction
+{
+ public static final String id = "301c5991-a32d-4221-88bf-8c9d07bdd884";
+ public static final String code = "ChangesetReversalMapping";
+ public static final String name = "内置变更集反向Mapping操作";
+ public ChangesetReversalMappingAction()
+ {
+ setID(id);
+ setCode(code);
+ setName(name);
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/CreateAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/CreateAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d1117c58265447bde2b922b2b1d471c250dfb5d
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/CreateAction.java
@@ -0,0 +1,26 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.internalexternalaction;
+
+import com.inspur.edp.formserver.viewmodel.action.MappedCdpAction;
+
+/**
+ * The Definition Of Create Action
+ *
+ * @ClassName: CreateAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class CreateAction extends MappedCdpAction implements IInternalExtendAction
+{
+ public static final String id = "52479451-8e22-4751-8684-80489ce5786b";
+ public static final String code = "Create";
+ public static final String name = "内置新增数据操作";
+ public CreateAction()
+ {
+ setID(id);
+ setCode(code);
+ setName(name);
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/DataMappingAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/DataMappingAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd81d54f22250c7ca9130c9b039c849230ea11b1
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/DataMappingAction.java
@@ -0,0 +1,25 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.internalexternalaction;
+
+import com.inspur.edp.formserver.viewmodel.action.MappedCdpAction;
+/**
+ * The Definition Of Data Mapping Action
+ *
+ * @ClassName: DataMappingAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class DataMappingAction extends MappedCdpAction implements IInternalExtendAction
+{
+ public static final String id = "42221ca3-9ee4-40af-89d2-ff4c8b466ac3";
+ public static final String code = "DataMapping";
+ public static final String name = "内置数据Mapping操作";
+ public DataMappingAction()
+ {
+ setID(id);
+ setCode(code);
+ setName(name);
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/DataReversalMappingAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/DataReversalMappingAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..fdd765c3e6bf3c0d44bc47fa5d702c2b951c34e7
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/DataReversalMappingAction.java
@@ -0,0 +1,25 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.internalexternalaction;
+
+import com.inspur.edp.formserver.viewmodel.action.MappedCdpAction;
+/**
+ * The Definition Of Data Reversal Mapping Action
+ *
+ * @ClassName: DataReversalMappingAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class DataReversalMappingAction extends MappedCdpAction implements IInternalExtendAction
+{
+ public static final String id = "991bf216-f55b-40bf-bb42-1b831b6ef3e9";
+ public static final String code = "DataReversalMapping";
+ public static final String name = "内置数据反向Mapping操作";
+ public DataReversalMappingAction()
+ {
+ setID(id);
+ setCode(code);
+ setName(name);
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/DeleteAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/DeleteAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..3342eb203c9d7b87062f6de78de0d9112cf6e26f
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/DeleteAction.java
@@ -0,0 +1,25 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.internalexternalaction;
+
+import com.inspur.edp.formserver.viewmodel.action.MappedCdpAction;
+/**
+ * The Definition Of Delete Action
+ *
+ * @ClassName: DeleteAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class DeleteAction extends MappedCdpAction implements IInternalExtendAction
+{
+ public static final String id = "9a17e935-7366-489d-b110-0ae103e5648e";
+ public static final String code= "Delete";
+ public static final String name = "内置删除操作";
+ public DeleteAction()
+ {
+ setID(id);
+ setCode(code);
+ setName(name);
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/IInternalExtendAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/IInternalExtendAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..9fba2e5a9fcd549b1a1f9c286c164b3f33569777
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/IInternalExtendAction.java
@@ -0,0 +1,15 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.internalexternalaction;
+
+/**
+ * The Definition Of Internal Extend Action
+ *
+ * @ClassName: IInternalExtendAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public interface IInternalExtendAction
+{
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/ModifyAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/ModifyAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..b9720a6347e66854654934f01d0d9592779da360
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/ModifyAction.java
@@ -0,0 +1,26 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.internalexternalaction;
+
+import com.inspur.edp.formserver.viewmodel.action.MappedCdpAction;
+/**
+ * The Definition Of Modify Action
+ *
+ * @ClassName: ModifyAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class ModifyAction extends MappedCdpAction implements IInternalExtendAction
+{
+ public static final String id = "47dd3752-72a3-4c56-81c0-ae8ccfe5eb98";
+ public static final String code = "Modify";
+ public static final String name = "内置修改操作";
+ public ModifyAction()
+ {
+ setID(id);
+ setCode(code);
+ setName(name);
+ }
+
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/MultiDeleteAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/MultiDeleteAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..dce4cf114a8230a51f0e50c90deff1df80e0d5d4
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/MultiDeleteAction.java
@@ -0,0 +1,24 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.internalexternalaction;
+import com.inspur.edp.formserver.viewmodel.action.MappedCdpAction;
+
+/**
+ * The Definition Of Mutly Delete Action
+ *
+ * @ClassName: MultiDeleteAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class MultiDeleteAction extends MappedCdpAction implements IInternalExtendAction{
+ public static final String id = "7b1c3c4l-t1a4-4dyc-b75b-7695hcb3we7e";
+ public static final String code= "MultiDelete";
+ public static final String name = "内置批量删除操作";
+ public MultiDeleteAction()
+ {
+ setID(id);
+ setCode(code);
+ setName(name);
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/QueryAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/QueryAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1fe937de6c2c7d85a49c88bb9a03f34f8632f2e
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/QueryAction.java
@@ -0,0 +1,26 @@
+
+package com.inspur.edp.formserver.viewmodel.action.internalexternalaction;
+
+import com.inspur.edp.formserver.viewmodel.action.MappedCdpAction;
+
+/**
+ * The Definition Of Query Action
+ *
+ * @ClassName: QueryAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class QueryAction extends MappedCdpAction implements IInternalExtendAction
+{
+ public static final String id = "6fe68bfa-7c1b-4d6b-a7ef-14654168ae75";
+ public static final String code = "Query";
+ public static final String name = "内置查询操作";
+ public QueryAction()
+ {
+ setID(id);
+ setCode(code);
+ setName(name);
+ }
+
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/RetrieveAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/RetrieveAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..bf539f953a9d4ad9e4ec05b7717f07c3f3fce5bb
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/internalexternalaction/RetrieveAction.java
@@ -0,0 +1,26 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.internalexternalaction;
+
+import com.inspur.edp.formserver.viewmodel.action.MappedCdpAction;
+
+/**
+ * The Definition Of Retrieve Action
+ *
+ * @ClassName: RetrieveAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class RetrieveAction extends MappedCdpAction implements IInternalExtendAction
+{
+ public static final String id = "7a02f472-5bbd-424b-9d9e-f82e3f9f448e";
+ public static final String code = "Retrieve";
+ public static final String name = "内置检索操作";
+ public RetrieveAction()
+ {
+ setID(id);
+ setCode(code);
+ setName(name);
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/mappedbiz/MappedBizActionParameter.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/mappedbiz/MappedBizActionParameter.java
new file mode 100644
index 0000000000000000000000000000000000000000..ee434d62bdb8bc82ea9703bd4805508cd1c905e0
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/mappedbiz/MappedBizActionParameter.java
@@ -0,0 +1,21 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.mappedbiz;
+
+import com.inspur.edp.formserver.viewmodel.action.viewmodelbase.ViewModelParameter;
+
+/**
+ * The Definition Of Mapped Be Action Parameter
+ *
+ * @ClassName: MappedBizActionParameter
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class MappedBizActionParameter extends ViewModelParameter
+{
+ public MappedBizActionParameter()
+ {
+
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/mappedbiz/MappedBizActionParameterCollection.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/mappedbiz/MappedBizActionParameterCollection.java
new file mode 100644
index 0000000000000000000000000000000000000000..8d0965f2e1bca6e96bbb6a7a8f99119662da7bdd
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/mappedbiz/MappedBizActionParameterCollection.java
@@ -0,0 +1,21 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.mappedbiz;
+
+import com.inspur.edp.formserver.viewmodel.action.viewmodelbase.ViewModelParameterCollection;
+
+/**
+ * The Definition Of Mapped Be Action Parameter Collection
+ *
+ * @ClassName: MappedBizActionParameterCollection
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class MappedBizActionParameterCollection extends ViewModelParameterCollection
+{
+ public MappedBizActionParameterCollection()
+ {
+
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/mappedcdp/MappedCdpActionParameter.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/mappedcdp/MappedCdpActionParameter.java
new file mode 100644
index 0000000000000000000000000000000000000000..3fd123389486d6e505124f4b57750a53bfadf05a
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/mappedcdp/MappedCdpActionParameter.java
@@ -0,0 +1,20 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.mappedcdp;
+
+import com.inspur.edp.formserver.viewmodel.action.viewmodelbase.ViewModelParameter;
+
+/**
+ * The Definition Of Mapped Component Action Parameter
+ *
+ * @ClassName: MappedCdpActionParameter
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class MappedCdpActionParameter extends ViewModelParameter
+{
+ public MappedCdpActionParameter()
+ {
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/mappedcdp/MappedCdpActionParameterCollection.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/mappedcdp/MappedCdpActionParameterCollection.java
new file mode 100644
index 0000000000000000000000000000000000000000..75e2bd5c72a498092ccd6e2f8f43cb9cc2aa1c67
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/mappedcdp/MappedCdpActionParameterCollection.java
@@ -0,0 +1,20 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.mappedcdp;
+
+import com.inspur.edp.formserver.viewmodel.action.viewmodelbase.ViewModelParameterCollection;
+
+/**
+ * The Definition Of Mapped Component Action Parameter Collection
+ *
+ * @ClassName: MappedCdpActionParameterCollection
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class MappedCdpActionParameterCollection extends ViewModelParameterCollection
+{
+ public MappedCdpActionParameterCollection()
+ {
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelParActualValue.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelParActualValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..072ab819891ecce9309ee396367f8b4e3be8b33f
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelParActualValue.java
@@ -0,0 +1,69 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.viewmodelbase;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.inspur.edp.cef.spi.jsonser.base.StringUtils;
+
+/**
+ * The Definition Of View Model Parameter Action Value.In A View Model Action,The Parameter Value From The Component Can Be Transfer From Outer Invoke Or Fixed
+ * When The Value Is Fixed, The Actual Value Is Required.
+ *
+ * @ClassName: ViewModelParActualValue
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class ViewModelParActualValue {
+
+ private String value = "";
+
+ @JsonProperty("Value")
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ private boolean hasValue = false;
+
+ @JsonProperty("HasValue")
+ @Deprecated
+ public boolean getHasValue() {
+ if(hasValue && "".equals(value))
+ hasValue = false;
+ return hasValue;
+ }
+
+ @Deprecated
+ public void setHasValue(boolean value) {
+ hasValue = value;
+ }
+
+ private boolean enable = false;
+
+ @JsonProperty("Enable")
+ public boolean isEnable() {
+ return enable;
+ }
+
+ public void setEnable(boolean enable) {
+ this.enable = enable;
+ }
+
+ private ViewModelParActualValueType valueType = ViewModelParActualValueType.Constant;
+
+ @JsonProperty("ValueType")
+ public ViewModelParActualValueType getValueType() {
+ return valueType;
+ }
+
+ public void setValueType(ViewModelParActualValueType value) {
+ this.valueType = value;
+ }
+
+
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelParActualValueType.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelParActualValueType.java
new file mode 100644
index 0000000000000000000000000000000000000000..e694f912f5e541e4955fd939dd4619e69ca55c0d
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelParActualValueType.java
@@ -0,0 +1,25 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.viewmodelbase;
+
+/**
+ * The Definition Of View Object Parameter Actual Value Type
+ *
+ * @ClassName: ViewModelParActualValueType
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public enum ViewModelParActualValueType {
+ Constant,//常量
+ Expression, //表达式
+ Variable;//vo变量
+
+ public int getValue() {
+ return this.ordinal();
+ }
+
+ public static ViewModelParActualValueType forValue(int value) {
+ return values()[value];
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelParameter.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelParameter.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa77494df52ea8a5e8a2c5173c1097aeb75a973d
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelParameter.java
@@ -0,0 +1,155 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.viewmodelbase;
+
+
+import com.inspur.edp.formserver.viewmodel.action.IViewModelParameter;
+import com.inspur.edp.formserver.viewmodel.common.VMCollectionParameterType;
+import com.inspur.edp.formserver.viewmodel.common.VMParameterMode;
+import com.inspur.edp.formserver.viewmodel.common.VMParameterType;
+
+/**
+ * The Definition Of View Model Parameter
+ *
+ * @ClassName: ViewModelParameter
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public abstract class ViewModelParameter implements IViewModelParameter {
+ private String privateID;
+
+ public String getID() {
+ return privateID;
+ }
+
+ public void setID(String value) {
+ privateID = value;
+ }
+
+ /**
+ * 参数名
+ */
+ private String privateParamCode;
+
+ public String getParamCode() {
+ return privateParamCode;
+ }
+
+ public void setParamCode(String value) {
+ privateParamCode = value;
+ }
+
+ /**
+ * 参数名
+ */
+ private String privateParamName;
+
+ public String getParamName() {
+ return privateParamName;
+ }
+
+ public void setParamName(String value) {
+ privateParamName = value;
+ }
+
+ /**
+ * 参数类型,与Assembly和ClassName关联
+ */
+ private VMParameterType privateParameterType = VMParameterType.forValue(0);
+
+ public VMParameterType getParameterType() {
+ return privateParameterType;
+ }
+
+ public void setParameterType(VMParameterType value) {
+ privateParameterType = value;
+ }
+
+ /**
+ * 参数类对应程序集类
+ */
+ private String privateAssembly;
+
+ public String getAssembly() {
+ return privateAssembly;
+ }
+
+ public void setAssembly(String value) {
+ privateAssembly = value;
+ }
+
+ /**
+ * 参数类名
+ */
+ private String privateClassName;
+
+ public String getClassName() {
+ return privateClassName;
+ }
+
+ public void setClassName(String value) {
+ privateClassName = value;
+ }
+
+ public String getDotnetClassName() {
+ return dotnetClassName;
+ }
+
+ public void setDotnetClassName(String dotnetClassName) {
+ this.dotnetClassName = dotnetClassName;
+ }
+
+ private String dotnetClassName;
+
+ /**
+ * 参数模式
+ */
+ private VMParameterMode privateMode = VMParameterMode.forValue(0);
+
+ public VMParameterMode getMode() {
+ return privateMode;
+ }
+
+ public void setMode(VMParameterMode value) {
+ privateMode = value;
+ }
+
+ /**
+ * 描述
+ */
+ private String privateParamDescription;
+
+ public String getParamDescription() {
+ return privateParamDescription;
+ }
+
+ public void setParamDescription(String value) {
+ privateParamDescription = value;
+ }
+
+ /**
+ * 参数集合类型
+ */
+ private VMCollectionParameterType privateCollectionParameterType = VMCollectionParameterType.forValue(0);
+
+ public VMCollectionParameterType getCollectionParameterType() {
+ return privateCollectionParameterType;
+ }
+
+ public void setCollectionParameterType(VMCollectionParameterType value) {
+ privateCollectionParameterType = value;
+ }
+
+ private ViewModelParActualValue actualValue;
+ public ViewModelParActualValue getActualValue(){
+ if(actualValue == null){
+ actualValue = new ViewModelParActualValue();
+ }
+ return actualValue;
+ }
+
+ public void setActualValue(ViewModelParActualValue value){
+ actualValue = value;
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelParameterCollection.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelParameterCollection.java
new file mode 100644
index 0000000000000000000000000000000000000000..643f24036925354ac7d1c8007f1d50e9e5fa923f
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelParameterCollection.java
@@ -0,0 +1,22 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.viewmodelbase;
+
+import com.inspur.edp.cef.designtime.api.collection.BaseList;
+import com.inspur.edp.formserver.viewmodel.action.IViewModelParameter;
+import com.inspur.edp.formserver.viewmodel.action.IViewModelParameterCollection;
+
+/**
+ * The Collection Of View Model Parameter
+ *
+ * @ClassName: ViewModelParameterCollection
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class ViewModelParameterCollection extends
+ BaseList implements IViewModelParameterCollection {
+
+ public ViewModelParameterCollection() {
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelReturnValue.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelReturnValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..d120524d26b7aac1528190da111b897780b38da0
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelReturnValue.java
@@ -0,0 +1,45 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.viewmodelbase;
+
+
+
+import com.inspur.edp.formserver.viewmodel.common.VMParameterMode;
+
+/**
+ * The Definition Of View Model Return Value
+ *
+ * @ClassName: ViewModelReturnValue
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class ViewModelReturnValue extends ViewModelParameter
+{
+ /**
+ 参数名
+
+ */
+ @Override
+ public String getParamName(){
+ return null;
+ }
+ @Override
+ public void setParamName(String value)
+ {
+
+ }
+
+ /**
+ 参数模式
+
+ */
+ @Override
+ public VMParameterMode getMode(){
+ return VMParameterMode.OUT;
+ }
+ @Override
+ public void setMode(VMParameterMode value)
+ {
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelVoidReturnValue.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelVoidReturnValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..917348c49ae0de380015d4c42ad614a064898067
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/action/viewmodelbase/ViewModelVoidReturnValue.java
@@ -0,0 +1,64 @@
+
+
+package com.inspur.edp.formserver.viewmodel.action.viewmodelbase;
+
+
+
+import com.inspur.edp.formserver.viewmodel.common.VMParameterType;
+
+/**
+ * The Definition Of Void View Model Return Value
+ *
+ * @ClassName: ViewModelVoidReturnValue
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class ViewModelVoidReturnValue extends ViewModelReturnValue
+{
+ public static final String assembly = "mscorlib.dll";
+ public static final String className = "Void";
+
+ /**
+ 参数类对应程序集类
+
+ */
+ @Override
+ public String getAssembly(){
+ return assembly;
+ }
+
+ @Override
+ public void setAssembly(String value)
+ {
+ }
+
+ /**
+ 参数类名
+
+ */
+ @Override
+ public String getClassName(){
+ return className;
+ }
+
+ @Override
+ public void setClassName(String value)
+ {
+ }
+
+ /**
+ 参数类型,与Assembly和ClassName关联
+
+ */
+ @Override
+ public VMParameterType getParameterType()
+ {
+ return VMParameterType.Custom;
+
+ }
+ @Override
+ public void setParameterType(VMParameterType value)
+ {
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/collection/VMActionCollection.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/collection/VMActionCollection.java
new file mode 100644
index 0000000000000000000000000000000000000000..a73ca89d25410c18d83e1ac5b7f39b169f233f22
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/collection/VMActionCollection.java
@@ -0,0 +1,141 @@
+
+
+package com.inspur.edp.formserver.viewmodel.collection;
+
+import com.inspur.edp.cef.designtime.api.collection.BaseList;
+import com.inspur.edp.formserver.viewmodel.action.ViewModelAction;
+
+import java.io.Serializable;
+
+/**
+ * The Collection Of View Model Action
+ *
+ * @ClassName: VMActionCollection
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class VMActionCollection extends BaseList implements Cloneable,
+ Serializable {
+ ///#region 属性
+
+ /**
+ * 根据ID获取操作
+ *
+ * @param id 操作ID
+ * @return 操作
+ */
+ public final ViewModelAction getItem(String id) {
+// return this.FirstOrDefault(i => id.equals(i.ID));
+ for (ViewModelAction item : this) {
+ if (item.getID().equals(id)) {
+ return item;
+ }
+ }
+ return null;
+ }
+
+ ///#endregion
+
+ ///#region 方法
+
+ /**
+ * 克隆
+ *
+ * @return VO上的操作集合
+ */
+// public final Object clone()
+ public final VMActionCollection clone() {
+ VMActionCollection collections = new VMActionCollection();
+ for (ViewModelAction op : this) {
+ ViewModelAction tempVar = op.clone();
+ collections.add((ViewModelAction) ((tempVar instanceof ViewModelAction) ? tempVar : null));
+ }
+
+ return collections;
+ }
+
+ /**
+ * 重载Equals方法
+ *
+ * @param obj 要比较的对象
+ * @return 如果当前对象等于 other 参数,则为 true;否则为 false。
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null) {
+ return false;
+ }
+ // if (obj.equals(this))
+ //{
+ //return true;
+ //}
+ if (obj.getClass() != getClass()) {
+ return false;
+ }
+
+ return equals((VMActionCollection) obj);
+ }
+
+ /**
+ * 当前对象是否等于同一类型的另一个对象。
+ *
+ * @param other 与此对象进行比较的对象。
+ * @return 如果当前对象等于 other 参数,则为 true;否则为 false。
+ */
+ protected boolean equals(VMActionCollection other) {
+// if (Count != other.size())
+ if (this.size() != other.size()) {
+ return false;
+ }
+ for (ViewModelAction item : this) {
+ ViewModelAction otherItem = other.getItem(item.getID());
+ if (otherItem == null) {
+ return false;
+ }
+ if (!item.equals(otherItem)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean remove(Object action) {
+ if (action == null) {
+ return false;
+ }
+ String id = ((ViewModelAction) action).getID();
+ if (id == null) {
+ return false;
+ }
+ super.removeIf(item ->
+ id.equals(item.getID())
+ );
+ return true;
+ }
+
+ public boolean removeById(String actionId) {
+
+ if (actionId == null || "".equals(actionId)) {
+ return false;
+ }
+ super.removeIf(item ->
+ actionId.equals(item.getID())
+ );
+ return true;
+ }
+ /////
+ ///// 设置Action集合所属的结点
+ /////
+ /////
+ //public void SetOwner(GspViewObject node)
+ //{
+ // foreach (var item in this)
+ // {
+ // item.Owner = node;
+ // }
+ //}
+ ///#endregion
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/collection/VMElementCollection.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/collection/VMElementCollection.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f8f83ec32a15251336a805137e8f9708f24d11c
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/collection/VMElementCollection.java
@@ -0,0 +1,157 @@
+
+package com.inspur.edp.formserver.viewmodel.collection;
+
+import com.inspur.edp.cef.designtime.api.IGspCommonField;
+import com.inspur.edp.das.commonmodel.collection.GspElementCollection;
+import com.inspur.edp.formserver.viewmodel.GspViewModelElement;
+import com.inspur.edp.formserver.viewmodel.GspViewObject;
+
+import java.io.Serializable;
+
+/**
+ * The Collection Of View Model Element
+ *
+ * @ClassName: VMElementCollection
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class VMElementCollection extends GspElementCollection implements Serializable
+{
+ ///#region 构造函数
+
+ /**
+ 字段集合构造函数
+
+ @param owner 所属视图对象结点
+ */
+//ORIGINAL LINE: public VMElementCollection(GspViewObject owner = null)
+ public VMElementCollection(GspViewObject owner)
+ {
+ super(owner);
+ }
+
+ ///#endregion
+
+ ///#region 属性
+
+ /**
+ 根据ID获取节点元素
+
+ @param id 节点元素ID
+ @return 节点元素
+ */
+ @Override//不能override final的類
+ public final GspViewModelElement getItem(String id)
+ {
+ for(IGspCommonField item:this){
+ if(item instanceof GspViewModelElement){
+ return (GspViewModelElement)item;
+ }
+ }
+ return null;
+// Object tempVar = this.FirstOrDefault(i => id.equals(i.ID));
+// return (GspViewModelElement)((tempVar instanceof GspViewModelElement) ? tempVar : null);
+ }
+
+ ///#endregion
+
+ ///#region 方法
+
+ /**
+ 重载Equals方法
+
+ @param obj 要比较的对象
+ @return 如果当前对象等于 other 参数,则为 true;否则为 false。
+ */
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj == null)
+ {
+ return false;
+ }
+ // if (obj.equals(this))
+ //{
+ //return true;
+ //}
+ if (obj.getClass() != getClass())
+ {
+ return false;
+ }
+
+ return equals((VMElementCollection)obj);
+ }
+
+ /**
+ 当前对象是否等于同一类型的另一个对象。
+
+ @param other 与此对象进行比较的对象。
+ @return 如果当前对象等于 other 参数,则为 true;否则为 false。
+ */
+ protected boolean equals(VMElementCollection other)
+ {
+// if (Count != other.size())
+ if (this.size() != other.size())
+ {
+ return false;
+ }
+ for (IGspCommonField item : this)
+ {
+ IGspCommonField otherItem = other.getItem(item.getID());
+ if (otherItem == null)
+ {
+ return false;
+ }
+ if (!item.equals(otherItem))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ 克隆
+
+ @return VO节点元素集合
+ */
+ public final VMElementCollection clone()
+ {
+ VMElementCollection collections;
+ collections = new VMElementCollection((GspViewObject) getParentObject());
+
+// collections.addAll(this);
+// (this.Select(element => (GspViewModelElement)((tempVar instanceof GspViewModelElement) ?
+// tempVar : null)));
+ for(IGspCommonField item:this){
+// Object item;
+ GspViewModelElement obj = ((GspViewModelElement)item).clone();
+ GspViewModelElement tempVar = ((obj instanceof GspViewModelElement) ? obj : null);
+ collections.add(tempVar);
+ }
+ return collections;
+ }
+
+ ///#endregion
+// public final VMElementCollection clone()
+// {
+// VMElementCollection collections;
+// collections = new VMElementCollection((GspViewObject) getParentObject());
+// Object tempVar = ((GspViewModelElement)((element instanceof GspViewModelElement) ? element : null)).clone();
+// collections.addRange(this.Select(element => (GspViewModelElement)((tempVar instanceof GspViewModelElement) ?
+// tempVar : null)));
+//
+// for(){
+// Object item;
+// GspViewModelElement obj = ((GspViewModelElement)item).clone();
+//
+//
+// }
+//
+// return collections;
+// }
+//
+// ///#endregion
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/collection/ValueHelpConfigCollection.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/collection/ValueHelpConfigCollection.java
new file mode 100644
index 0000000000000000000000000000000000000000..300ebab331f88abfdd05940fe55a591fb74c260f
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/collection/ValueHelpConfigCollection.java
@@ -0,0 +1,132 @@
+
+
+package com.inspur.edp.formserver.viewmodel.collection;
+
+import com.inspur.edp.cef.designtime.api.collection.BaseList;
+import com.inspur.edp.formserver.viewmodel.common.ValueHelpConfig;
+
+import java.io.Serializable;
+
+/**
+ * The Collection Of The Help Config
+ *
+ * @ClassName: ValueHelpConfigCollection
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class ValueHelpConfigCollection extends BaseList implements Cloneable, Serializable
+{
+ ///#region 构造函数
+
+ /**
+ 构造函数
+
+ */
+ public ValueHelpConfigCollection()
+ {
+ super();
+ }
+
+ ///#endregion
+
+ ///#region 属性
+
+ /**
+ 获取指定ID的值帮助配置
+
+ @param elementId Element标识
+ @return 值帮助配置
+ */
+ public final ValueHelpConfig getItem(String elementId)
+ {
+ for(ValueHelpConfig item:this){
+ if(item.getElementId().equals(elementId)){
+ return item;
+ }
+ }
+ return null;
+// return Items.firstOrDefault(i => elementId.equals(i.ElementId));
+ }
+
+ ///#endregion
+
+ ///#region 方法
+
+ /**
+ 批量添加值帮助配置
+
+ @param items 值帮助配置集合
+ */
+ public final void addRange(ValueHelpConfig[] items)
+ {
+ for (ValueHelpConfig item : items)
+ {
+ add(item);
+ }
+ }
+
+ /**
+ 批量添加值帮助配置
+
+ @param items 值帮助配置集合
+ */
+ public final void addRange(Iterable items)
+ {
+ for (ValueHelpConfig item : items)
+ {
+ add(item);
+ }
+ }
+
+ /**
+ 克隆
+
+ @return 值帮助配置集合的副本
+ */
+// public final Object clone()
+ @Override
+ public final ValueHelpConfigCollection clone()
+ {
+ ValueHelpConfigCollection newCollection = new ValueHelpConfigCollection();
+
+ for (ValueHelpConfig item : this) {
+ newCollection.add(item);
+ }
+
+ return newCollection;
+ }
+
+ ///#endregion
+
+ @Override
+ public boolean remove(Object helpConfig) {
+ if (helpConfig == null) {
+ return false;
+ }
+ String id = ((ValueHelpConfig) helpConfig).getElementId();
+ if (id == null) {
+ return false;
+ }
+ super.removeIf(item ->
+ id.equals(item.getElementId())
+ );
+ return true;
+ }
+
+ @Override
+ public boolean contains(Object helpConfig){
+ if(helpConfig==null)
+ return false;
+ String id = ((ValueHelpConfig) helpConfig).getElementId();
+ if (id == null) {
+ return false;
+ }
+ for(ValueHelpConfig item:this){
+ if(item.getElementId().equals(id))
+ return true;
+ }
+ return false;
+ }
+
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/collection/ViewObjectCollection.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/collection/ViewObjectCollection.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ec7dc8000862754cce2ce73e9acff2868f2381a
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/collection/ViewObjectCollection.java
@@ -0,0 +1,137 @@
+
+
+package com.inspur.edp.formserver.viewmodel.collection;
+
+import com.inspur.edp.das.commonmodel.IGspCommonObject;
+import com.inspur.edp.das.commonmodel.collection.GspObjectCollection;
+import com.inspur.edp.formserver.viewmodel.GspViewObject;
+
+import java.io.Serializable;
+
+/**
+ * The Collection Of View Model Object
+ *
+ * @ClassName: ViewObjectCollection
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class ViewObjectCollection extends GspObjectCollection implements Serializable
+{
+ /**
+ 结点集合构造函数
+
+ @param parentObject 父节点
+ */
+// public ViewObjectCollection(IGSPCommonObject parentObject)
+ public ViewObjectCollection(IGspCommonObject parentObject)
+ {
+ super(parentObject);
+ }
+
+ /**
+ 根据ID获取节点
+
+ @param id 节点ID
+ @return 节点
+ */
+ public final GspViewObject getItem(String id)
+ {
+// Object tempVar = this.FirstOrDefault(i => id.equals(i.ID));
+ for ( IGspCommonObject item : this){
+ if(item.getID().equals(id)){
+ IGspCommonObject tempVar=item;
+ return (GspViewObject)((tempVar instanceof GspViewObject) ? tempVar : null);
+ }
+ }
+ return null;
+
+ }
+
+ /**
+ 重载Equals方法
+
+ @param obj 要比较的对象
+ @return 如果当前对象等于 other 参数,则为 true;否则为 false。
+ */
+ @Override
+ public boolean equals(Object obj)
+ {
+ if ( obj.equals(null))
+ {
+ return false;
+ }
+ if ( obj.equals(this))
+ {
+ return true;
+ }
+ if (obj.getClass() != getClass())
+ {
+ return false;
+ }
+
+ return equals((ViewObjectCollection)obj);
+ }
+
+ /**
+ 获取HashCode
+
+ @return hashCode
+ */
+ @Override
+ public int hashCode()
+ {
+ return super.hashCode();
+ }
+
+ /**
+ 当前对象是否等于同一类型的另一个对象。
+
+ @param other 与此对象进行比较的对象。
+ @return 如果当前对象等于 other 参数,则为 true;否则为 false。
+ */
+ protected boolean equals(ViewObjectCollection other)
+ {
+// if (Count != other.size())
+ if (this.size() != other.size())
+ {
+ return false;
+ }
+// for (var item : this)
+ for (IGspCommonObject item : this)
+ {
+ IGspCommonObject otherItem = other.getItem(item.getID());
+ if (otherItem == null)
+ {
+ return false;
+ }
+ if (!item.equals(otherItem))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ 克隆
+
+ @return VO节点元素集合
+ */
+// public final Object clone()
+ public final ViewObjectCollection clone()
+ {
+// ViewObjectCollection collections = new ViewObjectCollection(ParentObject);
+ ViewObjectCollection collections = new ViewObjectCollection(getParentObject());
+// for (var node : this)
+ for (IGspCommonObject node : this)
+ {
+ Object tempVar = ((GspViewObject)((node instanceof GspViewObject) ? node : null)).clone();
+ collections.add((GspViewObject)((tempVar instanceof GspViewObject) ? tempVar : null));
+ }
+
+ return collections;
+ }
+
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/ConvertUtils.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/ConvertUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e8db3d1924c50e5518336e743403be138ef04e0
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/ConvertUtils.java
@@ -0,0 +1,729 @@
+
+
+package com.inspur.edp.formserver.viewmodel.common;
+
+import com.inspur.edp.bef.bizentity.GspBusinessEntity;
+import com.inspur.edp.bef.bizentity.beenum.BEOperationType;
+import com.inspur.edp.bef.bizentity.operation.BizMgrAction;
+import com.inspur.edp.bef.bizentity.operation.collection.BizMgrActionCollection;
+import com.inspur.edp.bef.bizentity.operation.componentbase.BizParameter;
+import com.inspur.edp.bef.bizentity.operation.componentbase.BizVoidReturnType;
+import com.inspur.edp.bef.bizentity.operation.componentinterface.IBizParameter;
+import com.inspur.edp.bef.bizentity.operation.internalmgraction.IInternalMgrAction;
+import com.inspur.edp.cef.designtime.api.IGspCommonField;
+import com.inspur.edp.cef.designtime.api.collection.GspAssociationCollection;
+import com.inspur.edp.cef.designtime.api.collection.GspAssociationKeyCollection;
+import com.inspur.edp.cef.designtime.api.collection.GspEnumValueCollection;
+import com.inspur.edp.cef.designtime.api.element.GspAssociation;
+import com.inspur.edp.cef.designtime.api.element.GspAssociationKey;
+import com.inspur.edp.cef.designtime.api.element.GspElementObjectType;
+import com.inspur.edp.cef.designtime.api.element.GspEnumValue;
+import com.inspur.edp.cef.designtime.api.util.Guid;
+import com.inspur.edp.das.commonmodel.IGspCommonElement;
+import com.inspur.edp.das.commonmodel.IGspCommonModel;
+import com.inspur.edp.das.commonmodel.IGspCommonObject;
+import com.inspur.edp.das.commonmodel.collection.GspUniqueConstraintCollection;
+import com.inspur.edp.das.commonmodel.entity.GspCommonElement;
+import com.inspur.edp.das.commonmodel.entity.element.ElementCodeRuleConfig;
+import com.inspur.edp.das.commonmodel.entity.object.GspUniqueConstraint;
+import com.inspur.edp.das.commonmodel.util.HandleAssemblyNameUtil;
+import com.inspur.edp.formserver.viewmodel.DotNetToJavaStringHelper;
+import com.inspur.edp.formserver.viewmodel.GspViewModel;
+import com.inspur.edp.formserver.viewmodel.GspViewModelElement;
+import com.inspur.edp.formserver.viewmodel.GspViewObject;
+import com.inspur.edp.formserver.viewmodel.action.MappedBizAction;
+import com.inspur.edp.formserver.viewmodel.action.mappedbiz.MappedBizActionParameter;
+import com.inspur.edp.formserver.viewmodel.action.viewmodelbase.ViewModelParameter;
+import com.inspur.edp.formserver.viewmodel.action.viewmodelbase.ViewModelReturnValue;
+import com.inspur.edp.formserver.viewmodel.action.viewmodelbase.ViewModelVoidReturnValue;
+import com.inspur.edp.formserver.viewmodel.common.mapping.GspVoElementMapping;
+import com.inspur.edp.formserver.viewmodel.common.mapping.GspVoElementSourceType;
+import com.inspur.edp.formserver.viewmodel.common.mapping.GspVoObjectMapping;
+import com.inspur.edp.formserver.viewmodel.common.mapping.GspVoObjectSourceType;
+import lombok.var;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * The Tool Of Convert Between Busiess Entity And View Model
+ *
+ * @ClassName: ConvertUtils
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public final class ConvertUtils {
+ private static String AUTO_GEN_VM_PREFIX = "GenVo";
+ private static String AUTO_GEN_VM_SUFFIX = "Service";
+ private static String errorToken = "#GspBefError# ";
+
+ public static GspViewModel convertToViewModel(GspBusinessEntity be, String pkgName, String metadataId) {
+ return convertToViewModel(be, pkgName, metadataId, "");
+ }
+
+ public static GspViewModel convertToViewModel(GspBusinessEntity be, String pkgName, String metadataId, String voGeneratingAssembly) {
+ //① CM结构构造
+ GspViewModel vm = convertToGspViewModel(be, pkgName, metadataId, voGeneratingAssembly);
+ vm.getMapping().setMapType(MappingType.BizEntity);
+ //② BeMgrAction构造
+ var beMgrActions = be.getCustomMgrActions(); //be.GetCustomMgrActions();
+ buildVmActions(beMgrActions, vm, pkgName, metadataId);
+
+ vm.setIsUseNamespaceConfig(true);
+ return vm;
+ }
+
+ private static GspViewModel convertToGspViewModel(IGspCommonModel cm, String pkgName, String metadataId, String voGeneratingAssembly) {
+ GspViewModel vm = new GspViewModel();
+ //① BasicInfo
+ convertBasicInfo(cm, vm, pkgName, metadataId, voGeneratingAssembly);
+ //② MainObject
+ vm.setMainObject(toObject(cm.getMainObject(), pkgName, metadataId, null, GspVoObjectSourceType.BeObject));
+ //③ BelongModel递归赋值
+ vm.getMainObject().setBelongModel(vm);
+ vm.getMainObject().setBelongModelID(vm.getID());
+ setChildObjectBelongModel(vm.getMainObject(), vm);
+ return vm;
+ }
+
+
+ /**
+ * 设置子对象的所属模型属性
+ *
+ * @param parentObject 父对象
+ * @param cm 模型
+ */
+ private static void setChildObjectBelongModel(IGspCommonObject parentObject, IGspCommonModel cm) {
+ if (parentObject == null || parentObject.getContainChildObjects() == null || parentObject.getContainChildObjects().size() == 0) {
+ return;
+ }
+ for (IGspCommonObject childObject : parentObject.getContainChildObjects()) {
+ childObject.setBelongModel(cm);
+ childObject.setBelongModelID(cm.getID());
+ // 递归
+ setChildObjectBelongModel(childObject, cm);
+ }
+ }
+
+ private static void convertBasicInfo(IGspCommonModel cm, GspViewModel vm, String pkgName, String metadataId, String voGeneratingAssembly) {
+ vm.setID(Guid.newGuid().toString());
+ vm.setCode(String.format("%1$s%2$s", cm.getCode(), AUTO_GEN_VM_SUFFIX));
+ vm.setName(String.format("%1$s_%2$s", AUTO_GEN_VM_PREFIX, cm.getName()));
+ vm.setSimplifyGen(true);
+ vm.setIsVirtual(false);
+ vm.setEntityType(cm.getEntityType());
+
+ if (DotNetToJavaStringHelper.isNullOrEmpty(voGeneratingAssembly)) {
+ vm.setDotnetGeneratingAssembly(cm.getDotnetGeneratingAssembly()+".Vo");
+ vm.setGeneratingAssembly(HandleAssemblyNameUtil.convertToJavaPackageName(cm.getDotnetGeneratingAssembly()+".Vo"));
+ } else {
+ vm.setDotnetGeneratingAssembly(voGeneratingAssembly+ ".Vo");
+ vm.setGeneratingAssembly(HandleAssemblyNameUtil.convertToJavaPackageName(voGeneratingAssembly+".Vo"));
+ }
+ ViewModelMapping tempVar = new ViewModelMapping();
+ tempVar.setMapType(MappingType.BizEntity);
+ tempVar.setTargetMetadataPkgName(pkgName);
+ tempVar.setTargetMetadataId(metadataId);
+ tempVar.setTargetObjId(cm.getID());
+ vm.setMapping(tempVar);
+ }
+
+
+ public static GspViewObject toObject(IGspCommonObject cmObject, String pkgName, String metadataId, String parentObjIDElementId, GspVoObjectSourceType sourceType) {
+ GspViewObject vmObject = new GspViewObject();
+
+ //① BasicInfo
+ convertObjectBasicInfo(cmObject, vmObject, pkgName, metadataId, sourceType);
+ //② Element
+ convertContainElements(cmObject, vmObject, pkgName, metadataId, sourceType);
+ //③ 更新字段相关的属性(分级信息、ID字段等)
+ // QO无相关属性,故不需要传入sourceType区分qo源
+ convertObjectSelfInfo(cmObject, vmObject, parentObjIDElementId, sourceType);
+ //⑤ ChildObject
+ // QO无子节点
+ convertChildObjects(cmObject, vmObject, pkgName, metadataId);
+
+ return vmObject;
+ }
+
+ //
+//
+ private static void convertObjectBasicInfo(IGspCommonObject cmObject, GspViewObject vmObject, String pkgName, String metadataId, GspVoObjectSourceType sourceType) {
+ vmObject.setID(Guid.newGuid().toString());
+ vmObject.setCode(cmObject.getCode());
+ vmObject.setName(cmObject.getName());
+ vmObject.setObjectType(cmObject.getObjectType());
+ vmObject.setRefObjectName(cmObject.getRefObjectName());
+
+ vmObject.setOrderbyCondition(cmObject.getOrderbyCondition());
+ vmObject.setFilterCondition(cmObject.getFilterCondition());
+ vmObject.setIsReadOnly(cmObject.getIsReadOnly());
+ if (cmObject.getKeys() != null && cmObject.getKeys().size() > 0) {
+ for (int i = 0; i < cmObject.getKeys().size(); i++) {
+ vmObject.getKeys().add(cmObject.getKeys().get(i).clone());
+ }
+ }
+ vmObject.setIsRef(false);
+ GspVoObjectMapping tempVar = new GspVoObjectMapping();
+ tempVar.setMapType(MappingType.BEObject);
+ tempVar.setTargetMetadataPkgName(pkgName);
+ tempVar.setTargetMetadataId(metadataId);
+ tempVar.setTargetObjId(cmObject.getID());
+ tempVar.setSourceType(sourceType);
+ vmObject.setMapping(tempVar);
+
+ // 源相关属性
+ convertObjSourceTypeRelatedProp(cmObject, vmObject, sourceType);
+ }
+
+ private static void convertObjSourceTypeRelatedProp(IGspCommonObject cmObj, GspViewObject vmObject, GspVoObjectSourceType sourceType) {
+ switch (sourceType) {
+ case BeObject:
+ case QoObject:
+ vmObject.setIsVirtual(false); //be带出,IsVirtual=false
+ break;
+ case VoObject:
+ vmObject.setIsVirtual(cmObj.getIsVirtual());
+
+ var originVo = (GspViewObject) cmObj;
+ vmObject.setIsBeckendOnly(originVo.getIsBeckendOnly());
+ vmObject.setPrimaryKey(originVo.getPrimaryKey()); // 无用
+ vmObject.setDefaultPageSize(originVo.getDefaultPageSize());
+ vmObject.setExtendProperties(originVo.getExtendProperties());
+ break;
+ default:
+ throw new RuntimeException(errorToken + "不存在的GspVoObjectSourceType"+ sourceType.toString() + errorToken);
+ }
+ }
+
+
+
+ /**
+ * vo对象转换时,更新字段相关属性
+ *
+ * @param cmObject
+ * @param vmObject
+ * @param parentObjIDElementId
+ */
+
+ private static void convertObjectSelfInfo(IGspCommonObject cmObject, GspViewObject vmObject, String parentObjIDElementId, GspVoObjectSourceType objSourceType) {
+
+ List elementList = vmObject.getContainElements().stream().filter(item -> item.getIsVirtual() == false).collect(Collectors.toList());
+ Map viewElements = elementList.stream().collect(Collectors.toMap(IGspCommonField::getID,item -> item));
+ java.util.HashMap elementMappings = getElementMappingsDic(elementList);
+
+
+ updateIDElement(cmObject, vmObject);
+ updateViewObjectKeys(cmObject, vmObject, parentObjIDElementId);
+ updateColumnGenerateId(cmObject, vmObject, elementMappings);
+ updateContainConstraints(cmObject, vmObject, elementMappings, viewElements);
+ updateStateElementId(cmObject, vmObject, elementMappings);
+
+ }
+
+ /**
+ * 更新状态字段
+ *
+ * @param beObject
+ * @param viewObj
+ * @param elementMappings
+ */
+ public static void updateStateElementId(IGspCommonObject beObject, GspViewObject viewObj, java.util.HashMap elementMappings) {
+ if (!DotNetToJavaStringHelper.isNullOrEmpty(beObject.getStateElementID()) && elementMappings.containsKey(beObject.getStateElementID())) {
+ viewObj.setStateElementID(elementMappings.get(beObject.getStateElementID()));
+ }
+ }
+
+ /**
+ * 更新创建人等信息
+ *
+ * @param beObject
+ * @param viewObj
+ * @param elementMappings
+ */
+ public static void updateTimeStampElements(IGspCommonObject beObject, GspViewObject viewObj, java.util.HashMap elementMappings) {
+
+ }
+
+ /**
+ * 更新唯一性约束
+ *
+ * @param beObject
+ * @param viewObj
+ * @param viewElements
+ * @param elementMappings
+ */
+ public static void updateContainConstraints(IGspCommonObject beObject, GspViewObject viewObj, java.util.HashMap elementMappings, Map viewElements) {
+
+ GspUniqueConstraintCollection voUniqueCons = viewObj.getContainConstraints().clone();
+ if (viewObj.getContainConstraints() != null && viewObj.getContainConstraints().size() > 0) {
+ viewObj.getContainConstraints().clear();
+ }
+ if (beObject.getContainConstraints() == null || beObject.getContainConstraints().size() == 0) {
+ return;
+ }
+ for (GspUniqueConstraint beConstraint : beObject.getContainConstraints()) {
+ Object tempVar = beConstraint.clone();
+ GspUniqueConstraint viewModelConstraint = (GspUniqueConstraint) ((tempVar instanceof GspUniqueConstraint) ? tempVar : null);
+ viewModelConstraint.getElementList().clear();
+ for (String element : beConstraint.getElementList()) {
+ if (!elementMappings.containsKey(element)) {
+ continue;
+ }
+ String vmElementId = elementMappings.get(element);
+ if (DotNetToJavaStringHelper.isNullOrEmpty(vmElementId)) {
+ continue;
+ }
+ if (!viewElements.containsKey(vmElementId)) {
+ throw new RuntimeException("没有找到ID为【" + vmElementId + "】的字段#GspBefError#");
+ }
+ viewModelConstraint.getElementList().add(vmElementId);
+ }
+ if (viewObj.getContainConstraints() == null) {
+ viewObj.setContainConstraints(new GspUniqueConstraintCollection());
+ }
+ if (voUniqueCons != null && voUniqueCons.size() > 0) {
+ for (GspUniqueConstraint voCon : voUniqueCons) {
+ if (voCon.getCode().equals(viewModelConstraint.getCode())) {
+ viewModelConstraint.setI18nResourceInfoPrefix(voCon.getI18nResourceInfoPrefix());
+ }
+ }
+ }
+ viewObj.getContainConstraints().add(viewModelConstraint);
+ }
+ }
+
+ /**
+ * 更新ID生成规则
+ *
+ * @param beObject
+ * @param viewObj
+ * @param elementMappings
+ */
+ public static void updateColumnGenerateId(IGspCommonObject beObject, GspViewObject viewObj, java.util.HashMap elementMappings) {
+ if (elementMappings.containsKey(beObject.getColumnGenerateID().getElementID())) {
+ viewObj.getColumnGenerateID().setElementID(elementMappings.get(beObject.getColumnGenerateID().getElementID()));
+ }
+ viewObj.getColumnGenerateID().setGenerateType(beObject.getColumnGenerateID().getGenerateType());
+ }
+
+
+ /**
+ * 字段Mapping字典
+ *
+ * @param elementList
+ * @return
+ */
+ public static java.util.HashMap getElementMappingsDic(List elementList) {
+ java.util.HashMap elementMappings = new java.util.HashMap();
+ for (IGspCommonField item : elementList) {
+ GspViewModelElement viewModelElement = (GspViewModelElement) item;
+ if (viewModelElement != null && viewModelElement.getMapping() != null) {
+ String key = ((GspViewModelElement) ((item instanceof GspViewModelElement) ? item : null)).getMapping().getTargetObjId();
+ String value = item.getID();
+ elementMappings.put(key, value);
+ }
+ }
+ return elementMappings;
+ }
+
+
+ /**
+ * 更新ID字段及Keys
+ *
+ * @param cmObject
+ * @param vmObject
+ */
+ private static void updateIDElement(IGspCommonObject cmObject, GspViewObject vmObject) {
+ // idEle
+ String idElementId = cmObject.getIDElement().getLabelID();
+ var vmIdEle = vmObject.getElementByLabelId(idElementId);
+ vmObject.getColumnGenerateID().setElementID(vmIdEle.getID());
+ }
+
+ /**
+ * 更新Keys
+ *
+ * @param cmObject
+ * @param vmObject
+ */
+ public static void updateViewObjectKeys(IGspCommonObject cmObject, GspViewObject vmObject, String parentObjIDElementId) {
+ var vmElements = vmObject.getAllElementList(true);
+ // keys
+ var keys = cmObject.getKeys();
+ if (keys.size() > 0) {
+ if (vmObject.getKeys().size() == 0) {
+ throw new RuntimeException(String.format("对象%1$s的外键关联未映射到视图对象对象。", cmObject.getName()));
+ }
+ for (GspAssociationKey key : vmObject.getKeys()) {
+ String beSourceEleId = getAssociationKeyBySourceElementId(keys, key.getSourceElement()).getSourceElement();
+ key.setSourceElement(getVmElementByMappedBizEleId(vmElements, beSourceEleId).getID());
+ key.setTargetElement(parentObjIDElementId);
+ }
+ }
+ }
+
+ private static GspCommonElement getVmElementByMappedBizEleId(ArrayList vmElements, String bizEleId) {
+ if (vmElements.isEmpty()) {
+ throw new RuntimeException("无映射字段id为'"+bizEleId+"'的字段。");
+ }
+ for (var item : vmElements) {
+ if (bizEleId.equals(((GspViewModelElement) item).getMapping().getTargetObjId())) {
+ return (GspCommonElement)item;
+ }
+ }
+ throw new RuntimeException("无映射字段id为'"+bizEleId+"'的字段。");
+ }
+
+ private static GspAssociationKey getAssociationKeyBySourceElementId(GspAssociationKeyCollection keys, String sourceEleId) {
+ if (keys.size() == 0) {
+ throw new RuntimeException("无外键关联。");
+ }
+ for (GspAssociationKey item : keys) {
+ if (sourceEleId.equals(item.getSourceElement())) {
+ return item;
+ }
+ }
+ throw new RuntimeException("无外键关联。");
+ }
+ //#endregion
+
+ /**
+ * 更新分级信息
+ *
+ * @param cmObject
+ * @param vmObject
+ * @param viewElements
+ * @param elementMappings
+ */
+
+ public static void updateHirarchyInfo(IGspCommonObject cmObject, GspViewObject vmObject, java.util.HashMap elementMappings, java.util.HashMap viewElements, GspVoElementSourceType eleSourceType) {
+
+ }
+
+ private static void convertChildObjects(IGspCommonObject cmObject, GspViewObject vmObject, String pkgName, String metadataId) {
+
+ for (var childObject : cmObject.getContainChildObjects()) {
+ GspViewObject cmChildObject = toObject(childObject, pkgName, metadataId, vmObject.getIDElement().getID(),GspVoObjectSourceType.BeObject);
+ cmChildObject.setParentObject(vmObject);
+ vmObject.getContainChildObjects().add(cmChildObject);
+ }
+ }
+
+ private static void convertContainElements(IGspCommonObject cmObject, GspViewObject vmObject, String pkgName, String metadataId, GspVoObjectSourceType objSourceType) {
+ if (cmObject.getContainElements() == null || cmObject.getContainElements().size() < 1) {
+ return;
+ }
+ GspVoElementSourceType eleSourceType = getEleSourceType(objSourceType);
+
+ for (var cmElement : cmObject.getContainElements()) {
+ GspViewModelElement element = toElement((GspCommonElement) cmElement, pkgName, metadataId, eleSourceType);
+ element.setBelongObject(vmObject);
+ vmObject.getContainElements().add(element);
+ }
+ }
+
+ private static GspVoElementSourceType getEleSourceType(GspVoObjectSourceType objSourceType) {
+ switch (objSourceType) {
+ case BeObject:
+ return GspVoElementSourceType.BeElement;
+ case QoObject:
+ return GspVoElementSourceType.QoElement;
+ case VoObject:
+ return GspVoElementSourceType.VoElement;
+ default:
+ throw new RuntimeException("无效枚举值" + objSourceType);
+ }
+ }
+
+
+
+
+ public static GspViewModelElement toElement(IGspCommonElement element, String pkgName, String metadataId) {
+ return toElement(element, pkgName, metadataId);
+ }
+
+ public static GspViewModelElement toElement(IGspCommonElement element, String pkgName, String metadataId, GspVoElementSourceType sourceType) {
+ GspViewModelElement vmElement = new GspViewModelElement();
+
+ //① 字段基础信息
+ convertElementBasicInfo(element, vmElement, pkgName, metadataId, sourceType);
+ //② 关联
+ if (vmElement.getObjectType() == GspElementObjectType.Association) {
+ convertAssociation(element, vmElement, pkgName, metadataId, sourceType);
+ }
+ //③ 枚举
+ if (vmElement.getObjectType() == GspElementObjectType.Enum) {
+ convertEnumInfo(element, vmElement);
+ }
+ return vmElement;
+ }
+
+ private static void convertElementBasicInfo(IGspCommonElement cmEle, GspViewModelElement vmEle, String pkgName, String metadataId, GspVoElementSourceType sourceType) {
+ vmEle.setID(Guid.newGuid().toString());
+ vmEle.setCode(cmEle.getCode());
+ vmEle.setName(cmEle.getName());
+ vmEle.setLabelID(cmEle.getLabelID());
+ vmEle.setMDataType(cmEle.getMDataType());
+ vmEle.setLength(cmEle.getLength());
+ vmEle.setPrecision(cmEle.getPrecision());
+ vmEle.setObjectType(cmEle.getObjectType());
+ vmEle.setBelongModelID(cmEle.getBelongModelID());
+ vmEle.setIsMultiLanguage(cmEle.getIsMultiLanguage());
+ vmEle.setRefElementId(cmEle.getRefElementId());
+ vmEle.setIsCustomItem(cmEle.getIsCustomItem());
+ vmEle.setIsRequire(cmEle.getIsRequire());
+ vmEle.setIsRefElement(cmEle.getIsRefElement());
+ vmEle.setReadonly(cmEle.getReadonly());
+ vmEle.setIsFromAssoUdt(cmEle.getIsFromAssoUdt());
+ vmEle.setEnumIndexType(cmEle.getEnumIndexType());
+ vmEle.setIsUdt(cmEle.getIsUdt());
+ vmEle.setRefBusinessFieldId(cmEle.getRefBusinessFieldId());
+ //业务字段相关属性
+ if (vmEle.getIsUdt()) {
+ convertUdtInfo(cmEle, vmEle);
+ }
+
+ GspVoElementMapping tempVar = new GspVoElementMapping();
+ tempVar.setMapType(MappingType.Element);
+ tempVar.setTargetMetadataId(metadataId);
+ tempVar.setTargetMetadataPkgName(pkgName);
+ tempVar.setTargetObjId(cmEle.getID());
+ tempVar.setTargetElementId(cmEle.getID());
+ tempVar.setTargetObjectId(cmEle.getBelongObject()==null?null:cmEle.getBelongObject().getID());
+ tempVar.setSourceType(sourceType);
+ vmEle.setMapping(tempVar);
+ // 字段源不同,进行不同处理的属性
+ convertEleSourceTypeRelatedProp(cmEle, vmEle, sourceType);
+ // 动态属性
+ vmEle.setDynamicPropSetInfo(cmEle.getDynamicPropSetInfo());
+ }
+
+ private static void convertEleSourceTypeRelatedProp(IGspCommonElement cmEle, GspViewModelElement vmEle, GspVoElementSourceType sourceType) {
+ switch (sourceType) {
+ case BeElement:
+ case QoElement:
+ vmEle.setIsVirtualViewElement(false);
+ vmEle.setIsVirtual(false); //be带出,IsVirtual=false
+ vmEle.setIsRef(false);
+ break;
+ case VoElement:
+ vmEle.setColumnID(cmEle.getColumnID());
+ vmEle.setDefaultValue(cmEle.getDefaultValue());
+ convertBillCodeConfig(vmEle.getBillCodeConfig(), cmEle.getBillCodeConfig());
+ vmEle.setDefaultValueType(cmEle.getDefaultValueType());
+
+ vmEle.setIsVirtual(cmEle.getIsVirtual());
+ vmEle.setIsRef(cmEle.getIsRef());
+
+
+ GspViewModelElement sourceVoEle = (GspViewModelElement) cmEle;
+ vmEle.setIsVirtualViewElement(sourceVoEle.getIsVirtualViewElement());
+ vmEle.setIsBeckendOnly(sourceVoEle.getIsBeckendOnly());
+ vmEle.setImmediateSubmission(sourceVoEle.getImmediateSubmission());
+ vmEle.setShowInFilter(sourceVoEle.getShowInFilter());
+ vmEle.setShowInSort(sourceVoEle.getShowInSort());
+ vmEle.setVMHelpConfig(sourceVoEle.getVMHelpConfig());
+ vmEle.setHelpActions(sourceVoEle.getHelpActions());
+ vmEle.setExtendProperties(sourceVoEle.getExtendProperties());
+ vmEle.setExtendProperties(sourceVoEle.getExtendProperties());
+ break;
+ default:
+ throw new RuntimeException(errorToken + String.format("不存在的voEleMapping'%1$s'", sourceType.toString()) + errorToken);
+ }
+ }
+
+
+ private static void convertBillCodeConfig(ElementCodeRuleConfig config, ElementCodeRuleConfig sourceConfig) {
+ config.setCanBillCode(sourceConfig.getCanBillCode());
+ config.setBillCodeID(sourceConfig.getBillCodeID());
+ config.setBillCodeName(sourceConfig.getBillCodeID());
+ config.setCodeGenerateType(sourceConfig.getCodeGenerateType());
+ config.setCodeGenerateOccasion(sourceConfig.getCodeGenerateOccasion());
+ }
+
+ private static void convertEnumInfo(IGspCommonElement cmEle, GspViewModelElement vmEle) {
+ // 关联带出字段,无关联信息
+ if (cmEle.getIsRefElement()) {
+ return;
+ }
+ if (cmEle.getContainEnumValues() == null || cmEle.getContainEnumValues().size() < 1) {
+ throw new RuntimeException("找不到枚举值");
+ }
+ vmEle.setContainEnumValues(new GspEnumValueCollection());
+ for (GspEnumValue enumValue : cmEle.getContainEnumValues()) {
+ vmEle.getContainEnumValues().add(enumValue.clone());
+ }
+ }
+
+
+ private static void convertUdtInfo(IGspCommonElement cmEle, GspViewModelElement vmEle) {
+ vmEle.setUdtID(cmEle.getUdtID());
+ vmEle.setUdtName(cmEle.getUdtName());
+ vmEle.setUdtPkgName(cmEle.getUdtPkgName());
+ //TODO 后续UDt中集成VM属性后,需要获取UDT后赋值
+ }
+
+ //#region 关联
+ private static void convertAssociation(IGspCommonElement cmEle, GspViewModelElement vmEle, String pkgName, String metadataId, GspVoElementSourceType sourceType) {
+ // 关联带出字段,无关联信息
+ if (cmEle.getIsRefElement()) {
+ return;
+ }
+ if (cmEle.getChildAssociations() == null || cmEle.getChildAssociations().size() < 1) {
+ throw new RuntimeException("找不到关联信息");
+ }
+ vmEle.setChildAssociations(new GspAssociationCollection());
+ for (GspAssociation cmAssociation : cmEle.getChildAssociations()) {
+ GspAssociation vmAssociation = getAssociation((GspAssociation) cmAssociation, pkgName, metadataId, vmEle.getID(), sourceType);
+ vmAssociation.setBelongElement(vmEle);
+ vmEle.getChildAssociations().add(vmAssociation);
+ }
+ }
+
+ private static GspAssociation getAssociation(GspAssociation cmAssociation, String pkgName, String metadataId, String vmElementId, GspVoElementSourceType souceType) {
+ Object tempVar = cmAssociation.clone();
+ GspAssociation vmAssociation = (GspAssociation) ((tempVar instanceof GspAssociation) ? tempVar : null);
+
+ vmAssociation.getKeyCollection().clear();
+ for (GspAssociationKey associationKey : cmAssociation.getKeyCollection()) {
+ GspAssociationKey voKey = associationKey.clone();
+ voKey.setTargetElement(vmElementId);
+ vmAssociation.getKeyCollection().add(voKey);
+ }
+ vmAssociation.getRefElementCollection().clear();
+
+ for (IGspCommonField refElement : cmAssociation.getRefElementCollection()) {
+ GspViewModelElement vmRefElement = new GspViewModelElement();
+ convertElementBasicInfo((IGspCommonElement) refElement, vmRefElement, pkgName, metadataId, souceType);
+ if (refElement.getObjectType() == GspElementObjectType.Enum) {
+ convertEnumInfo((IGspCommonElement) refElement, vmRefElement);
+ }
+ vmRefElement.setParentAssociation(vmAssociation);
+ vmAssociation.getRefElementCollection().add(vmRefElement);
+ }
+
+
+ return vmAssociation;
+ }
+
+
+
+ private static void buildVmActions(BizMgrActionCollection beMgrActions, GspViewModel vm, String pkgName, String metadataId) {
+ if (beMgrActions == null) {
+ return;
+ }
+
+ for (var bizMgrAction : beMgrActions) {
+ if (bizMgrAction.getOpType() == BEOperationType.BizMgrAction) {
+ MappedBizAction vmAction = toMappedAction((BizMgrAction)bizMgrAction, metadataId, pkgName);
+ vm.getActions().add(vmAction);
+ }
+ }
+ }
+
+ public static MappedBizAction toMappedAction(BizMgrAction bizMgrAction, String metadataId, String pkgName) {
+ MappedBizAction tempVar = new MappedBizAction();
+ tempVar.setID(Guid.newGuid().toString());
+ tempVar.setCode(bizMgrAction.getCode());
+ tempVar.setName(bizMgrAction.getName());
+ tempVar.setReturnValue(getReturnValue(bizMgrAction));
+ tempVar.setComponentName(bizMgrAction.getComponentName());
+ ViewModelMapping mapping = new ViewModelMapping();
+ mapping.setMapType(MappingType.BizOperation);
+ mapping.setTargetMetadataId(metadataId);
+ mapping.setTargetMetadataPkgName(pkgName);
+ mapping.setTargetObjId(bizMgrAction.getID());
+ tempVar.setMapping(mapping);
+ MappedBizAction vmAction = tempVar;
+ initParameterCollection(vmAction, bizMgrAction);
+ return vmAction;
+ }
+
+ private static void initParameterCollection(MappedBizAction vmAction, BizMgrAction action) {
+ if (action.getParameters() == null || action.getParameters().getCount() < 1) {
+ return;
+ }
+ for (int i = 0; i < action.getParameters().getCount(); i++) {
+ MappedBizActionParameter param = new MappedBizActionParameter();
+ transViewModelParameter(param, action.getParameters().getItem(i));
+ vmAction.getParameterCollection().add(param);
+ }
+ }
+
+
+ private static ViewModelReturnValue getReturnValue(BizMgrAction action) {
+ if (action.getReturnValue() == null || action.getReturnValue() instanceof BizVoidReturnType) {
+ return new ViewModelVoidReturnValue();
+ }
+ ViewModelReturnValue returnValue = new ViewModelReturnValue();
+ transViewModelParameter(returnValue, action.getReturnValue());
+ return returnValue;
+ }
+
+ private static void transViewModelParameter(ViewModelParameter vmParam, IBizParameter param) {
+ vmParam.setID(Guid.newGuid().toString());
+ vmParam.setAssembly(param.getAssembly());
+ vmParam.setClassName(param.getClassName());
+ vmParam.setDotnetClassName(((BizParameter)param).getNetClassName());
+ switch (param.getMode()) {
+ case IN:
+ vmParam.setMode(VMParameterMode.IN);
+ break;
+ case INOUT:
+ vmParam.setMode(VMParameterMode.INOUT);
+ break;
+ case OUT:
+ vmParam.setMode(VMParameterMode.OUT);
+ break;
+ }
+ switch (param.getCollectionParameterType()) {
+ case None:
+ vmParam.setCollectionParameterType(VMCollectionParameterType.None);
+ break;
+ case List:
+ vmParam.setCollectionParameterType(VMCollectionParameterType.List);
+ break;
+ case Array:
+ vmParam.setCollectionParameterType(VMCollectionParameterType.Array);
+ break;
+ }
+ vmParam.setParamCode(param.getParamCode());
+ vmParam.setParamDescription(param.getParamDescription());
+ vmParam.setParamName(param.getParamName());
+ switch (param.getParameterType()) {
+ case Boolean:
+ vmParam.setParameterType(VMParameterType.Boolean);
+ break;
+ case Custom:
+ vmParam.setParameterType(VMParameterType.Custom);
+ break;
+ case DateTime:
+ vmParam.setParameterType(VMParameterType.DateTime);
+ break;
+ case Decimal:
+ vmParam.setParameterType(VMParameterType.Decimal);
+ break;
+ case Double:
+ vmParam.setParameterType(VMParameterType.Double);
+ break;
+ case Int32:
+ vmParam.setParameterType(VMParameterType.Int32);
+ break;
+ case Object:
+ vmParam.setParameterType(VMParameterType.Object);
+ break;
+ case String:
+ vmParam.setParameterType(VMParameterType.String);
+ break;
+ default:
+ throw new IllegalStateException("Unexpected value: " + param.getParameterType());
+ }
+
+
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/ConvertVoUtils.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/ConvertVoUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..d9e5d2f73d772a0b1a669386da18ef9752a610af
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/ConvertVoUtils.java
@@ -0,0 +1,166 @@
+
+
+package com.inspur.edp.formserver.viewmodel.common;
+
+import com.inspur.edp.bef.bizentity.GspBizEntityObject;
+import com.inspur.edp.bef.bizentity.GspBusinessEntity;
+import com.inspur.edp.cef.designtime.api.IGspCommonField;
+import com.inspur.edp.das.commonmodel.IGspCommonElement;
+import com.inspur.edp.das.commonmodel.IGspCommonObject;
+import com.inspur.edp.das.commonmodel.collection.GspObjectCollection;
+import com.inspur.edp.formserver.viewmodel.GspViewModel;
+import com.inspur.edp.formserver.viewmodel.GspViewModelElement;
+import com.inspur.edp.formserver.viewmodel.GspViewObject;
+import com.inspur.edp.formserver.viewmodel.collection.ViewObjectCollection;
+import com.inspur.edp.formserver.viewmodel.common.mapping.GspVoElementSourceType;
+import com.inspur.edp.formserver.viewmodel.common.mapping.GspVoObjectSourceType;
+import com.inspur.edp.formserver.viewmodel.util.ViewModelUtils;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+//be上新增加的对象,字段等,同步到vo上,IDP用
+public class ConvertVoUtils {
+
+ public static GspViewModel dealViewModel(GspBusinessEntity be, GspViewModel viewModel) {
+
+ GspBizEntityObject bizObject=be.getMainObject();
+ GspViewObject viewObject=viewModel.getMainObject();
+ dealObject( be,bizObject,viewObject);
+ dealActions( be, viewModel);
+ return viewModel;
+ }
+
+ public static void dealBeRefElements(GspBusinessEntity be, GspViewModel model) {
+ LinkBeUtils utils=new LinkBeUtils(true);
+ utils.linkBeRefElements(model);
+
+ }
+
+ public static void dealActions(GspBusinessEntity be, GspViewModel model) {
+ LinkBeUtils utils=new LinkBeUtils(true);
+ utils.linkActions(model);
+ }
+
+ public static void dealObject(GspBusinessEntity be,GspBizEntityObject bizObject, GspViewObject viewObject) {
+ dealObjectBasicInfo(bizObject,viewObject);
+
+ dealElements(be,bizObject,viewObject);
+
+ dealObjectSelfInfo(bizObject,viewObject);
+ //联动中处理
+// dealModifyChildObjects(be,bizObject,viewObject);
+ dealAddChildObjects(bizObject,viewObject);
+
+ }
+
+ public static void dealAddChildObjects(GspBizEntityObject bizObject, GspViewObject viewObject) {
+ if(bizObject==null || bizObject.getContainChildObjects()==null || bizObject.getContainChildObjects().size()==0)
+ return;
+ GspObjectCollection beObjectCollection=bizObject.getContainChildObjects();
+ for (IGspCommonObject beObj:beObjectCollection){
+ if(isExistBizChildObject(viewObject,beObj.getID()))
+ continue;
+ IGspCommonObject newViewObject= ConvertUtils.toObject(beObj,viewObject.getMapping().getTargetMetadataPkgName(),viewObject.getMapping().getTargetMetadataId(),viewObject.getIDElement().getID(), GspVoObjectSourceType.BeObject);
+ viewObject.getContainChildObjects().add(newViewObject);
+ }
+
+ }
+ public static boolean isExistedBizObject(GspBusinessEntity be,String objId){
+ GspBizEntityObject bizObj = (GspBizEntityObject) be.getNode(node -> node.getID().equals(objId));
+ if (bizObj==null)
+ return false;
+ return true;
+ }
+ public static GspBizEntityObject getBizObject(GspBusinessEntity be,String objId){
+ GspBizEntityObject bizObj = (GspBizEntityObject) be.getNode(node -> node.getID().equals(objId));
+ return bizObj;
+ }
+ public static void dealModifyChildObjects(GspBusinessEntity be,GspBizEntityObject bizObject, GspViewObject viewObject) {
+ if(viewObject.getContainChildObjects()==null || viewObject.getContainChildObjects().size()==0)
+ return;
+ ViewObjectCollection childObjList = viewObject.getContainChildObjects();
+ Iterator iterators=childObjList.iterator();
+ while (iterators.hasNext()){
+ GspViewObject childObj= (GspViewObject) iterators.next();
+ if (childObj.getIsVirtual()) {
+ continue;
+ }
+ String beChildObjId=((GspViewObject)childObj).getMapping().getTargetObjId();
+
+ if (!isExistedBizObject(be,beChildObjId)) {
+ iterators.remove();
+ continue;
+ }
+ GspBizEntityObject childBizObject=getBizObject(be,beChildObjId);
+ dealObject(be,childBizObject,(GspViewObject) childObj);
+ }
+// for (IGspCommonObject childObj : childObjList) {
+// if (childObj.getIsVirtual()) {
+// continue;
+// }
+// String beChildObjId=((GspViewObject)childObj).getMapping().getTargetObjId();
+//
+// if (!isExistedBizObject(be,beChildObjId)) {
+// viewObject.getContainChildObjects().remove(childObj);
+// continue;
+// }
+// GspBizEntityObject childBizObject=getBizObject(be,beChildObjId);
+// dealObject(be,childBizObject,(GspViewObject) childObj);
+// }
+ }
+
+ public static void dealObjectSelfInfo(GspBizEntityObject bizObject, GspViewObject viewObject) {
+// LinkBeUtils utils=new LinkBeUtils(true);
+// utils.linkObjectSelfInfo(viewObject,bizObject,null);
+ }
+ public static void dealElements(GspBusinessEntity be,GspBizEntityObject bizObject, GspViewObject viewObject) {
+ //联动中处理
+// LinkBeUtils utils = new LinkBeUtils(true);
+// utils.linkElements(viewObject, be);
+ //处理be上新增的字段
+ dealBeAddElements(bizObject,viewObject);
+ }
+
+ public static void dealBeAddElements(GspBizEntityObject bizObject, GspViewObject viewObject) {
+ ArrayList bizElemens = bizObject.getContainElements().getAllItems(item -> item.getIsVirtual() == false);
+ if(bizElemens==null ||bizElemens.size()==0)
+ return;
+ for (IGspCommonField beEle:bizElemens){
+ if(isExistBizElement(viewObject,beEle.getID()))
+ continue;
+ IGspCommonElement newViewEle= ConvertUtils.toElement((IGspCommonElement) beEle,viewObject.getMapping().getTargetMetadataPkgName(),viewObject.getMapping().getTargetMetadataId(), GspVoElementSourceType.BeElement);
+ newViewEle.setBelongObject(viewObject);
+ viewObject.getContainElements().add(newViewEle);
+ }
+
+ }
+
+ public static boolean isExistBizElement(GspViewObject bizObject, String elementId) {
+ ArrayList list = bizObject.getAllElementList(false);
+ for (IGspCommonElement ele : list) {
+ String beIdInView=((GspViewModelElement)ele).getMapping().getTargetElementId();
+ if (elementId.equals(beIdInView)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ public static boolean isExistBizChildObject(GspViewObject bizObject, String objectId) {
+ ViewObjectCollection viewObjectCollection=bizObject.getContainChildObjects();
+ for (IGspCommonObject ele : viewObjectCollection) {
+ String objectIdInView=((GspViewObject)ele).getMapping().getTargetObjId();
+ if (objectId.equals(objectIdInView)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static void dealObjectBasicInfo(GspBizEntityObject bizObject, GspViewObject viewObject) {
+// if (ViewModelUtils.checkNull(viewObject.getCode())) {
+// viewObject.setCode(bizObject.getCode());
+// }
+//// viewObject.setIsVirtual(false);
+// viewObject.setIsReadOnly(bizObject.getIsReadOnly());
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/ElementHelpType.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/ElementHelpType.java
new file mode 100644
index 0000000000000000000000000000000000000000..4e6f4932581ccde814fb7c19a12d41da48703ce0
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/ElementHelpType.java
@@ -0,0 +1,49 @@
+
+
+package com.inspur.edp.formserver.viewmodel.common;
+
+/**
+ * The Definition Of Element Help Type
+ *
+ * @ClassName: ElementHelpType
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public enum ElementHelpType
+{
+ /** 无
+ */
+ None(0),
+
+ /** 数据表帮助
+ */
+ SmartHelp(1);
+
+ private int intValue;
+ private static java.util.HashMap mappings;
+ private synchronized static java.util.HashMap getMappings()
+ {
+ if (mappings == null)
+ {
+ mappings = new java.util.HashMap();
+ }
+ return mappings;
+ }
+
+ ElementHelpType(int value)
+ {
+ intValue = value;
+ ElementHelpType.getMappings().put(value, this);
+ }
+
+ public int getValue()
+ {
+ return intValue;
+ }
+
+ public static ElementHelpType forValue(int value)
+ {
+ return getMappings().get(value);
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/HelpExtendAction.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/HelpExtendAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..eb3cb522d267fdf14ee222e24e58a64b71400c5e
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/HelpExtendAction.java
@@ -0,0 +1,35 @@
+
+
+package com.inspur.edp.formserver.viewmodel.common;
+
+import com.inspur.edp.formserver.viewmodel.collection.VMActionCollection;
+
+/**
+ * The Definition Of Help Extend Action
+ *
+ * @ClassName: HelpExtendAction
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class HelpExtendAction
+{
+ private VMActionCollection beforeHelp;
+ /**
+ 帮助前扩展
+
+ */
+ public final VMActionCollection getBeforeHelp()
+ {
+ if (beforeHelp == null)
+ {
+ beforeHelp = new VMActionCollection();
+ }
+ return beforeHelp;
+ }
+ public final void setBeforeHelp(VMActionCollection value)
+ {
+ beforeHelp = value;
+ }
+
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/InitVoUtil.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/InitVoUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..eeb811ef115e15b50afe047c93e1c728056fb08e
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/InitVoUtil.java
@@ -0,0 +1,83 @@
+
+
+package com.inspur.edp.formserver.viewmodel.common;
+
+import com.inspur.edp.cef.designtime.api.element.GspElementDataType;
+import com.inspur.edp.cef.designtime.api.element.GspElementObjectType;
+import com.inspur.edp.cef.designtime.api.util.Guid;
+import com.inspur.edp.das.commonmodel.entity.object.GspColumnGenerate;
+import com.inspur.edp.formserver.viewmodel.GspViewModel;
+import com.inspur.edp.formserver.viewmodel.GspViewModelElement;
+import com.inspur.edp.formserver.viewmodel.GspViewObject;
+/**
+ * The Tool Of View Model Init
+ *
+ * @ClassName: InitVoUtil
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public final class InitVoUtil {
+ public static GspViewModel BuildVirtualVo(String metadataID, String metadataName, String metadataCode, String metadataAssembly) {
+ GspViewModel vo = InitVo(metadataID, metadataName, metadataCode, metadataAssembly, true);
+ return vo;
+ }
+
+ private static GspViewModel InitVo(String metadataID, String metadataName, String metadataCode, String metadataAssembly, boolean isVirtual) {
+ GspViewModel vo = new GspViewModel();
+ vo.setID(metadataID);
+ vo.setCode(metadataCode);
+ vo.setName(metadataName);
+ vo.setDotnetGeneratingAssembly(metadataAssembly);
+ vo.setIsUseNamespaceConfig(true);
+ vo.setSimplifyGen(true);
+ GspViewObject mainObject = InitMainObject(metadataName, metadataCode, isVirtual);
+ vo.setMainObject(mainObject);
+ // vo
+ if (isVirtual) {
+ vo.setIsVirtual(true);
+ vo.setMapping(null);
+ }
+ return vo;
+ }
+
+ private static GspViewObject InitMainObject(String objName, String objCode, boolean isVirtual) {
+ GspViewObject mainObj = new GspViewObject();
+ GspViewModelElement idElement = GetIDElement(isVirtual);
+ mainObj.setID(Guid.newGuid().toString());
+ mainObj.setCode(objCode);
+ mainObj.setName(objName);
+ GspColumnGenerate columnGenerate=new GspColumnGenerate();
+ columnGenerate.setElementID(idElement.getID());
+ columnGenerate.setGenerateType("Guid");
+ mainObj.setColumnGenerateID(columnGenerate);
+ mainObj.getContainElements().add(idElement);
+ // voObject
+ if (isVirtual) {
+ mainObj.setIsVirtual(true);
+ mainObj.setMapping(null);
+ }
+ return mainObj;
+ }
+
+ private static GspViewModelElement GetIDElement(boolean isVirtual) {
+ GspViewModelElement idElement = new GspViewModelElement();
+ idElement.setID(Guid.newGuid().toString());
+ idElement.setCode("ID");
+ idElement.setName("ID");
+ idElement.setLabelID("ID");
+ idElement.setMDataType(GspElementDataType.String);
+ idElement.setObjectType(GspElementObjectType.None);
+ idElement.setLength(36);
+ idElement.setPrecision(0);
+ idElement.setIsRequire(true);
+ // voElemet
+ if (isVirtual) {
+ idElement.setIsVirtual(true);
+ idElement.setIsVirtualViewElement(true);
+ idElement.setMapping(null);
+ }
+ return idElement;
+ }
+
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/InternalExtendActionUtil.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/InternalExtendActionUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e164c5c53037d7060be6df433606cf61575c80e
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/InternalExtendActionUtil.java
@@ -0,0 +1,62 @@
+
+
+package com.inspur.edp.formserver.viewmodel.common;
+
+import com.inspur.edp.formserver.viewmodel.action.MappedCdpAction;
+import com.inspur.edp.formserver.viewmodel.action.internalexternalaction.*;
+
+/**
+ * The Tool Of Internal Extend Action
+ *
+ * @ClassName: InternalExtendActionUtil
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class InternalExtendActionUtil {
+ //Internal ExtendActionIDs
+ public static final String DeleteActionId = "9a17e935-7366-489d-b110-0ae103e5648e";
+ public static final String ModifyActionId = "47dd3752-72a3-4c56-81c0-ae8ccfe5eb98";
+ public static final String QueryActionId = "6fe68bfa-7c1b-4d6b-a7ef-14654168ae75";
+ public static final String CreateActionId = "52479451-8e22-4751-8684-80489ce5786b";
+ public static final String RetrieveActionId = "7a02f472-5bbd-424b-9d9e-f82e3f9f448e";
+
+ public static final String DataReversalMappingActionId = "991bf216-f55b-40bf-bb42-1b831b6ef3e9";
+ public static final String DataMappingActionId = "42221ca3-9ee4-40af-89d2-ff4c8b466ac3";
+ public static final String ChangesetReversalMappingActionId = "301c5991-a32d-4221-88bf-8c9d07bdd884";
+ public static final String ChangesetMappingActionId = "5798f884-c222-47f4-8bbe-685c7013dee4";
+ public static final String MultiDeleteActionId="7b1c3c4l-t1a4-4dyc-b75b-7695hcb3we7e";
+
+ public java.util.ArrayList InternalActionIds = new java.util.ArrayList(java.util.Arrays.asList(new String[]{DeleteActionId, ModifyActionId, QueryActionId, CreateActionId, RetrieveActionId, DataReversalMappingActionId, DataMappingActionId, ChangesetReversalMappingActionId, ChangesetMappingActionId}));
+
+ public final MappedCdpAction GetInternalExtendActionById(String actionId) {
+ if (!InternalActionIds.contains(actionId)) {
+ throw new RuntimeException(String.format("无id='%1$s'的内置扩展操作。", actionId));
+ }
+
+ switch (actionId) {
+ case DeleteActionId:
+ return new DeleteAction();
+ case ModifyActionId:
+ return new ModifyAction();
+ case QueryActionId:
+ return new QueryAction();
+ case CreateActionId:
+ return new CreateAction();
+ case RetrieveActionId:
+ return new RetrieveAction();
+ case DataMappingActionId:
+ return new DataMappingAction();
+ case DataReversalMappingActionId:
+ return new DataReversalMappingAction();
+ case ChangesetReversalMappingActionId:
+ return new ChangesetReversalMappingAction();
+ case ChangesetMappingActionId:
+ return new ChangesetMappingAction();
+ case MultiDeleteActionId:
+ return new MultiDeleteAction();
+ default:
+ throw new RuntimeException(String.format("无id='%1$s'的内置扩展操作。", actionId));
+ }
+ }
+}
diff --git a/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/LinkBeUtils.java b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/LinkBeUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..9d3c974fe59687714799c61410c75ec856f40825
--- /dev/null
+++ b/view-object-model/src/main/java/com/inspur/edp/formserver/viewmodel/common/LinkBeUtils.java
@@ -0,0 +1,547 @@
+
+
+package com.inspur.edp.formserver.viewmodel.common;
+
+import com.inspur.edp.bef.bizentity.GspBizEntityElement;
+import com.inspur.edp.bef.bizentity.GspBizEntityObject;
+import com.inspur.edp.bef.bizentity.GspBusinessEntity;
+import com.inspur.edp.bef.bizentity.operation.BizMgrAction;
+import com.inspur.edp.cef.designtime.api.IGspCommonField;
+import com.inspur.edp.cef.designtime.api.collection.GspAssociationCollection;
+import com.inspur.edp.cef.designtime.api.collection.GspEnumValueCollection;
+import com.inspur.edp.cef.designtime.api.collection.GspFieldCollection;
+import com.inspur.edp.cef.designtime.api.element.GspAssociation;
+import com.inspur.edp.cef.designtime.api.element.GspElementObjectType;
+import com.inspur.edp.cef.designtime.api.element.GspEnumValue;
+import com.inspur.edp.cef.designtime.api.entity.DynamicPropSetInfo;
+import com.inspur.edp.cef.designtime.api.util.MetadataUtil;
+import com.inspur.edp.das.commonmodel.IGspCommonElement;
+import com.inspur.edp.das.commonmodel.IGspCommonObject;
+import com.inspur.edp.formserver.viewmodel.collection.VMActionCollection;
+import com.inspur.edp.formserver.viewmodel.collection.ViewObjectCollection;
+import com.inspur.edp.formserver.viewmodel.common.mapping.GspVoElementMapping;
+import com.inspur.edp.formserver.viewmodel.common.mapping.GspVoElementSourceType;
+import com.inspur.edp.formserver.viewmodel.common.mapping.GspVoObjectSourceType;
+import com.inspur.edp.formserver.viewmodel.GspViewModelElement;
+import com.inspur.edp.formserver.viewmodel.action.MappedBizAction;
+import com.inspur.edp.formserver.viewmodel.action.ViewModelAction;
+import com.inspur.edp.formserver.viewmodel.action.ViewModelActionType;
+import com.inspur.edp.formserver.viewmodel.DotNetToJavaStringHelper;
+import com.inspur.edp.formserver.viewmodel.GspViewModel;
+import com.inspur.edp.formserver.viewmodel.GspViewObject;
+
+import com.inspur.edp.lcm.metadata.api.entity.GspMetadata;
+import com.inspur.edp.lcm.metadata.api.entity.MetadataCustomizationFilter;
+import com.inspur.edp.lcm.metadata.api.service.MetadataRTService;
+import com.inspur.edp.lcm.metadata.api.service.RefCommonService;
+import com.inspur.edp.metadata.rtcustomization.api.CustomizationService;
+import com.inspur.edp.udt.designtime.api.entity.ComplexDataTypeDef;
+import com.inspur.edp.udt.designtime.api.entity.UnifiedDataTypeDef;
+import io.iec.edp.caf.commons.utils.SpringBeanUtils;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import static com.inspur.edp.cef.designtime.api.element.GspElementObjectType.None;
+
+/**
+ * The Tool Of Link Business Entity By View Model
+ *
+ * @ClassName: LinkBeUtils
+ * @Author: Benjamin Gong
+ * @Date: 2021/1/11 17:13
+ * @Version: V1.0
+ */
+public class LinkBeUtils {
+ private boolean isRuntime;
+ public LinkBeUtils(){
+
+ }
+ public LinkBeUtils(boolean isRuntime){
+ this.isRuntime=isRuntime;
+ }
+ private final java.util.HashMap bizEntitiesDic = new java.util.HashMap();
+ private RefCommonService lcmDtService;
+
+ public RefCommonService getLcmDtService(){
+ if(lcmDtService==null)
+ lcmDtService= SpringBeanUtils.getBean(RefCommonService.class);
+ return lcmDtService;
+ }
+
+ private CustomizationService customizationService;
+
+ public CustomizationService getCustomizationService(){
+ if(customizationService==null)
+ customizationService= SpringBeanUtils.getBean(CustomizationService.class);
+ return customizationService;
+ }
+ private String errorToken = "#GspBefError# ";
+
+ public final void linkWithBe(GspViewModel vm) {
+ if (vm.getMainObject().getMapping() == null || vm.getMainObject().getMapping().getSourceType() != GspVoObjectSourceType.BeObject) {
+ return;
+ }
+ // 联动前清空缓存
+ bizEntitiesDic.clear();
+ // ① 对象
+ linkMainObj(vm.getMainObject());
+ // ② 操作
+ linkActions(vm);
+ // 带出字段为枚举时,赋值枚举信息
+ linkBeRefElements(vm);
+ }
+
+ /**
+ * 关联带出字段联动
+ *
+ * @param vm
+ */
+ public final void linkBeRefElements(GspViewModel vm) {
+ ArrayList eles = vm.getAllElementList(true);
+ for (IGspCommonElement ele : eles) {
+ if (ele.getIsVirtual() || !ele.getIsRefElement()) {
+ continue;
+ }
+ GspViewModelElement viewEle = (GspViewModelElement) ele;
+ if (viewEle.getMapping() == null) {
+ throw new RuntimeException(String.format("字段Mapping为空,vo名称=%1$s,vo编号=%2$s,字段名称=%3$s", vm.getName(), vm.getCode()
+ , viewEle.getName()));
+ }
+ if (viewEle.getMapping().getSourceType() != GspVoElementSourceType.BeElement) {
+ continue;
+ }
+ if (viewEle.getParentAssociation() == null) {
+ throw new RuntimeException(String.format("字段所属关联为空,vo名称=%1$s,vo编号=%2$s,字段名称=%3$s", vm.getName(), vm.getCode()
+ , viewEle.getName()));
+ }
+ GspBizEntityElement bizEle = getRefBizElement(viewEle.getParentAssociation().getRefModelID(), viewEle.getRefElementId());
+ if(bizEle == null) {
+ StringBuilder stringBuilder=new StringBuilder("未找到当前VO字段关联的的BE字段,当前VO名称为:");
+ stringBuilder.append(vm.getName()).append(",VO模型id为:").append(vm.getID()).
+ append(",VO字段名称为:").append(viewEle.getName()).append(",字段编号为:").append(viewEle.getCode()).append(",字段ID为:").append(viewEle.getID()).append(",字段关联的BE字段ID为:").append(viewEle.getRefElementId()).
+ append(",被关联模型名称为:").append(viewEle.getParentAssociation().getRefModelName()).append(",关联模型编号为:").
+ append(viewEle.getParentAssociation().getRefModelCode()).append(",关联模型ID为:").
+ append(viewEle.getParentAssociation().getRefModelID());
+ throw new RuntimeException(stringBuilder.toString());
+ }
+ // udt
+ viewEle.setIsUdt(bizEle.getIsUdt());
+ viewEle.setUdtID(bizEle.getUdtID());
+ viewEle.setUdtName(bizEle.getUdtName());
+ viewEle.setUdtPkgName(bizEle.getUdtPkgName());
+ if (!ele.getIsRefElement() || ele.getObjectType() != GspElementObjectType.Enum) {
+ continue;
+ }
+
+ if (bizEle.getObjectType() != GspElementObjectType.Enum) {
+ StringBuffer strBuffer = new StringBuffer(errorToken);
+ strBuffer.append("关联带出字段对象类型为枚举,其对应的关联模型上的该字段不是枚举类型, 当前字段名称为:")
+ .append(viewEle.getName())
+ .append("字段名称为:")
+ .append(viewEle.getCode())
+ .append(errorToken);
+ throw new RuntimeException(strBuffer.toString());
+ }
+ // 赋值枚举信息
+ viewEle.setContainEnumValues(bizEle.getContainEnumValues());
+
+ }
+ }
+
+
+
+ public void linkMainObj(GspViewObject viewObj) {
+ // 虚拟对象无映射bizObj
+ if (viewObj == null || viewObj.getIsVirtual()) {
+ throw new RuntimeException(errorToken + "主对象不可为空或虚拟对象。" + errorToken);
+ }
+ GspBizEntityObject bizObject = getBizObject(viewObj.getMapping(), viewObj.getCode());
+ if (bizObject == null) {
+ throw new RuntimeException(errorToken + "实体中无vo映射的主对象。" + errorToken);
+ }
+
+ linkBizObject(viewObj, bizObject);
+ }
+
+
+ public void linkBizObject(GspViewObject viewObj, GspBizEntityObject bizObject) {
+ // ① 基本信息
+ linkObjectBasicInfo(viewObj, bizObject);
+ // ② 字段集合
+ linkElements(viewObj);
+ // ③ 字段相关属性
+ linkObjectSelfInfo(viewObj, bizObject, viewObj.getParentObject()==null?null:viewObj.getParentObject().getIDElement().getID());
+ // ④ 子对象集合
+ if (viewObj.getContainChildObjects() != null && viewObj.getContainChildObjects().size() != 0) {
+ ViewObjectCollection childObjList = viewObj.getContainChildObjects();
+ Iterator iterators=childObjList.iterator();
+ while (iterators.hasNext()){
+ GspViewObject childObj= (GspViewObject) iterators.next();
+ if (childObj.getIsVirtual()) {
+ continue;
+ }
+ GspBizEntityObject childBizObject = getBizObject(((GspViewObject) childObj).getMapping(), childObj.getCode());
+ if (childBizObject == null) {
+ iterators.remove();
+ continue;
+ }
+ linkBizObject((GspViewObject) ((GspViewObject) childObj != null ? childObj : null), childBizObject);
+ }
+ }
+ }
+
+ public void linkObjectBasicInfo(GspViewObject viewObj, GspBizEntityObject bizObject) {
+ // 若vo节点未修改,则联动be节点编号
+ if (DotNetToJavaStringHelper.isNullOrEmpty(viewObj.getCode())) {
+ viewObj.setCode(bizObject.getCode());
+ }
+ }
+
+ public void linkObjectSelfInfo(GspViewObject viewObj, GspBizEntityObject bizObject, String parentObjectElementId) {
+ ArrayList elementList = viewObj.getContainElements().getAllItems(item -> item.getIsVirtual() == false);
+ HashMap