Disable editing of normative data types 77/132977/3
authorMichaelMorris <michael.morris@est.tech>
Fri, 20 Jan 2023 22:31:39 +0000 (22:31 +0000)
committerVasyl Razinkov <vasyl.razinkov@est.tech>
Mon, 23 Jan 2023 19:53:48 +0000 (19:53 +0000)
Signed-off-by: MichaelMorris <michael.morris@est.tech>
Issue-ID: SDC-4341
Change-Id: Id7673624032883c641e05fd6e5e3d599f7da14df

catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/DataTypeImportManager.java
catalog-be/src/main/java/org/openecomp/sdc/be/servlets/TypesUploadServlet.java
catalog-dao/src/main/java/org/openecomp/sdc/be/dao/neo4j/GraphPropertiesDictionary.java
catalog-dao/src/main/java/org/openecomp/sdc/be/resources/data/DataTypeData.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/PropertyOperation.java
catalog-ui/src/app/models/data-types.ts
catalog-ui/src/app/ng2/pages/type-workspace/type-workspace.component.html
common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/DataTypeDataDefinition.java

index d488c65..3ebd0be 100644 (file)
@@ -66,7 +66,7 @@ public class DataTypeImportManager {
     public Either<List<ImmutablePair<DataTypeDefinition, Boolean>>, ResponseFormat> createDataTypes(final String dataTypeYml, final String modelName,
                                                                                                     final boolean includeToModelDefaultImports) {
         final Either<List<ImmutablePair<DataTypeDefinition, Boolean>>, ResponseFormat> elementTypes = commonImportManager.createElementTypes(
-            dataTypeYml, dataTypesFromYml -> createDataTypesFromYml(dataTypeYml, modelName), this::createDataTypesByDao, ElementTypeEnum.DATA_TYPE);
+            dataTypeYml, dataTypesFromYml -> createDataTypesFromYml(dataTypeYml, modelName, !includeToModelDefaultImports), this::createDataTypesByDao, ElementTypeEnum.DATA_TYPE);
 
         if (includeToModelDefaultImports && StringUtils.isNotEmpty(modelName)) {
             commonImportManager.addTypesToDefaultImports(ElementTypeEnum.DATA_TYPE, dataTypeYml, modelName);
@@ -77,7 +77,7 @@ public class DataTypeImportManager {
         return elementTypes;
     }
 
-    private Either<List<DataTypeDefinition>, ActionStatus> createDataTypesFromYml(final String dataTypesYml, final String modelName) {
+    private Either<List<DataTypeDefinition>, ActionStatus> createDataTypesFromYml(final String dataTypesYml, final String modelName, final boolean normative) {
         final Either<List<DataTypeDefinition>, ActionStatus> dataTypesEither = commonImportManager.createElementTypesFromYml(dataTypesYml,
             this::createDataType);
         if (dataTypesEither.isRight()) {
@@ -87,10 +87,12 @@ public class DataTypeImportManager {
         if (StringUtils.isNotEmpty(modelName)) {
             final Optional<Model> modelOptional = modelOperation.findModelByName(modelName);
             if (modelOptional.isPresent()) {
-                dataTypes.forEach(dataType -> dataType.setModel(modelName));
+                dataTypes.forEach(dataType -> {dataType.setModel(modelName); dataType.setNormative(normative);});
             } else {
                 return Either.right(ActionStatus.INVALID_MODEL);
             }
+        } else {
+            dataTypes.forEach(dataType -> dataType.setNormative(normative));
         }
         if (log.isTraceEnabled()) {
             log.trace("Unsorted datatypes order:");
index f07a742..786c033 100644 (file)
@@ -228,7 +228,7 @@ public class TypesUploadServlet extends AbstractValidationsServlet {
     public Response uploadDataTypes(@Parameter(description = "FileInputStream") @FormDataParam("dataTypesZip") File file,
                                     @Context final HttpServletRequest request, @HeaderParam("USER_ID") String creator,
                                     @Parameter(description = "model") @FormDataParam("model") String modelName,
-                                    @Parameter(description = "includeToModelImport") @FormDataParam("includeToModelImport") boolean includeToModelDefaultImports) {
+                                    @Parameter(description = "includeToModelImport") @FormDataParam("includeToModelImport") boolean includeToModelDefaultImports) {        
         return uploadElementTypeServletLogic(this::createDataTypes, file, request, creator, NodeTypeEnum.DataType.getName(), modelName,
             includeToModelDefaultImports);
     }
index 15fc013..5a287c9 100644 (file)
@@ -160,7 +160,8 @@ public enum GraphPropertiesDictionary {
     CUSTOMIZATION_UUID ("customizationUUID",           String.class,                           false,          false),
     IS_ARCHIVED                        ("isArchived",                      Boolean.class,                              false,          true),
     IS_VSP_ARCHIVED            ("isVspArchived",                   Boolean.class,                              false,          true),
-    ARCHIVE_TIME               ("archiveTime",                     Long.class,                                 false,          true);
+    NORMATIVE           ("normative",             Boolean.class,              false,      false),
+    ARCHIVE_TIME        ("archiveTime",             Long.class,                 false,      true);
     // @formatter:on
 
     private final String property;
index e482fb5..bf13331 100644 (file)
@@ -50,6 +50,9 @@ public class DataTypeData extends GraphNode {
         dataTypeDataDefinition.setCreationTime((Long) properties.get(GraphPropertiesDictionary.CREATION_DATE.getProperty()));
         dataTypeDataDefinition.setModificationTime((Long) properties.get(GraphPropertiesDictionary.LAST_UPDATE_DATE.getProperty()));
         dataTypeDataDefinition.setModel((String) properties.get(GraphPropertiesDictionary.MODEL.getProperty()));
+        final Object normativeProperty = properties.get(GraphPropertiesDictionary.NORMATIVE.getProperty());
+        final boolean normative = normativeProperty != null && (boolean) normativeProperty;
+        dataTypeDataDefinition.setNormative(normative);        
     }
 
     @Override
@@ -62,6 +65,7 @@ public class DataTypeData extends GraphNode {
         addIfExists(map, GraphPropertiesDictionary.CREATION_DATE, dataTypeDataDefinition.getCreationTime());
         addIfExists(map, GraphPropertiesDictionary.LAST_UPDATE_DATE, dataTypeDataDefinition.getModificationTime());
         addIfExists(map, GraphPropertiesDictionary.MODEL, dataTypeDataDefinition.getModel());
+        addIfExists(map, GraphPropertiesDictionary.NORMATIVE, dataTypeDataDefinition.isNormative());
         return map;
     }
 
index 9dc28cb..f6bcf1b 100644 (file)
@@ -1268,9 +1268,14 @@ public class PropertyOperation extends AbstractOperation implements IPropertyOpe
                     return Either.right(operationStatus);
                 }
                 propertiesData.put(propertyName, addPropertyToNodeType.left().value());
-            }
+            }            
             DataTypeData dataTypeData = new DataTypeData();
+            Either<DataTypeDefinition, StorageOperationStatus> existingNode = getDataTypeByUidWithoutDerived(uniqueId, true);
+            if (existingNode.isLeft()) {
+                dataTypeData.getDataTypeDataDefinition().setNormative(existingNode.left().value().isNormative());
+            }
             dataTypeData.getDataTypeDataDefinition().setUniqueId(uniqueId);
+            
             long modificationTime = System.currentTimeMillis();
             dataTypeData.getDataTypeDataDefinition().setModificationTime(modificationTime);
             Either<DataTypeData, JanusGraphOperationStatus> updateNode = janusGraphGenericDao.updateNode(dataTypeData, DataTypeData.class);
index 3b0833b..dfba68e 100644 (file)
@@ -39,6 +39,7 @@ export class DataTypeModel {
     properties: Array<PropertyBEModel>;
     attributes: Array<AttributeBEModel>;
     model: Model;
+    normative: boolean;
 
     constructor(dataType?: DataTypeModel) {
         if (!dataType) {
@@ -62,6 +63,7 @@ export class DataTypeModel {
         }
         this.attributes = dataType.attributes;
         this.model = dataType.model;
+        this.normative = dataType.normative;
     }
 
     public toJSON = ():any => {
index 6151627..105c89d 100644 (file)
@@ -44,7 +44,7 @@
         </div>
         <div class="w-sdc-main-container-body-content" *ngIf="dataType">
           <app-type-workspace-general *ngIf="currentMenu.state === 'general'" [dataType]="dataType"></app-type-workspace-general>
-          <app-type-workspace-properties *ngIf="currentMenu.state === 'properties'" [dataType]="dataType" [isViewOnly]="false"></app-type-workspace-properties>
+          <app-type-workspace-properties *ngIf="currentMenu.state === 'properties'" [dataType]="dataType" [isViewOnly]="dataType.normative"></app-type-workspace-properties>
           <app-type-workspace-tosca-artifact *ngIf="currentMenu.state === 'tosca_artifacts'" [dataType]="dataType"></app-type-workspace-tosca-artifact>
         </div>
 
index 51f710b..bf20037 100644 (file)
@@ -48,6 +48,7 @@ public class DataTypeDataDefinition extends ToscaDataDefinition {
      */
     private Long modificationTime;
     private List<PropertyDataDefinition> propertiesData;
+    private boolean normative;
 
     public DataTypeDataDefinition(DataTypeDataDefinition p) {
         this.name = p.name;
@@ -57,5 +58,6 @@ public class DataTypeDataDefinition extends ToscaDataDefinition {
         this.creationTime = p.creationTime;
         this.modificationTime = p.modificationTime;
         this.model = p.model;
+        this.normative = p.normative;
     }
 }