Refactoring validation 83/47583/7
authorshrikantawachar <shrikant.awachar@amdocs.com>
Tue, 15 May 2018 10:02:18 +0000 (15:32 +0530)
committershrikantawachar <shrikant.awachar@amdocs.com>
Tue, 29 May 2018 10:55:29 +0000 (16:25 +0530)
Refactoring validation from Code to FTL

Change-Id: Ic33a3719a021bb4c82565653fd8d95de38b7929e
Issue-ID: SDC-1334
Signed-off-by: shrikantawachar <shrikant.awachar@amdocs.com>
onboarding/pom.xml
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ComputeManagerImpl.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ImageManagerImpl.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/NicManagerImpl.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ComputeManagerImplTest.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/impl/ImageManagerImplTest.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/impl/NicManagerImplTest.java
openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/json/JsonUtil.java
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/types/schemagenerator/ImageCompositionSchemaInput.java
openecomp-be/tools/install/database/schemaTemplates/composition/image.ftl
openecomp-be/tools/install/database/schemaTemplates/composition/nic.ftl

index 1ee70c4..bcd1010 100644 (file)
@@ -97,7 +97,7 @@
         <logback.version>1.1.2</logback.version>
         <mockito.all.version>1.10.19</mockito.all.version>
         <org.codehaus.jackson.version>1.9.13</org.codehaus.jackson.version> <!-- orignal 1.9.2 -->
-        <org.everit.json.schema.version>1.3.0
+        <org.everit.json.schema.version>1.5.1
         </org.everit.json.schema.version> <!--new 1.4.1 orignal 1.3.0 updated to resolve blackduck violation -->
         <org.reflections.version>0.9.10
         </org.reflections.version> <!-- orignal 0.9.9 updated to resolve blackduck violation -->
index 6e462dc..7f69bae 100644 (file)
@@ -32,7 +32,6 @@ import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComputeEntity;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.DeploymentFlavorEntity;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
-import org.openecomp.sdc.vendorsoftwareproduct.errors.DuplicateComputeInComponentErrorBuilder;
 import org.openecomp.sdc.vendorsoftwareproduct.errors.NotSupportedHeatOnboardMethodErrorBuilder;
 import org.openecomp.sdc.vendorsoftwareproduct.errors.VendorSoftwareProductErrorCodes;
 import org.openecomp.sdc.vendorsoftwareproduct.services.schemagenerator.SchemaGenerator;
@@ -194,14 +193,10 @@ public class ComputeManagerImpl implements ComputeManager {
             compute.getId());
 
     boolean manual = vspInfoDao.isManual(compute.getVspId(), compute.getVersion());
-    if (!manual) {
-      validateHeatVspComputeUpdate("Name",
-          compute.getComputeCompositionData().getName(),
-          retrieved.getComputeCompositionData().getName());
-    }
 
     ComputeCompositionSchemaInput schemaInput = new ComputeCompositionSchemaInput();
-    schemaInput.setCompute(compute.getComputeCompositionData());
+    schemaInput.setManual(manual);
+    schemaInput.setCompute(retrieved.getComputeCompositionData());
 
     CompositionEntityValidationData validationData = compositionEntityDataManager
         .validateEntity(compute, SchemaTemplateContext.composition, schemaInput);
@@ -214,16 +209,6 @@ public class ComputeManagerImpl implements ComputeManager {
     return validationData;
   }
 
-  private void validateHeatVspComputeUpdate(String name, String value, String retrivedValue) {
-
-    if (value != null && !value.equals(retrivedValue)) {
-
-      final ErrorCode updateHeatComputeErrorBuilder =
-          DuplicateComputeInComponentErrorBuilder.getComputeHeatReadOnlyErrorBuilder(name);
-      throw new CoreException(updateHeatComputeErrorBuilder);
-    }
-  }
-
   private ComputeEntity getComputeEntity(String vspId, Version version, String componentId,
                                          String computeId) {
     ComputeEntity computeEntity =
index 6451768..66f9e97 100644 (file)
@@ -146,13 +146,6 @@ public class ImageManagerImpl implements ImageManager {
         getImageEntity(image.getVspId(), image.getVersion(), image.getComponentId(),
             image.getId());
 
-    if (!isManual) {
-      final Image imageCompositionData = image.getImageCompositionData();
-      final String fileName = imageCompositionData.getFileName();
-      validateHeatVspImageUpdate("fileName", fileName, retrieved.getImageCompositionData()
-          .getFileName());
-    }
-
     Collection<ImageEntity> vfcImageList = listImages(image.getVspId(),
         image.getVersion(), image.getComponentId());
 
@@ -162,7 +155,8 @@ public class ImageManagerImpl implements ImageManager {
 
 
     ImageCompositionSchemaInput schemaInput = new ImageCompositionSchemaInput();
-    schemaInput.setImage(image.getImageCompositionData());
+    schemaInput.setManual(isManual);
+    schemaInput.setImage(retrieved.getImageCompositionData());
 
     CompositionEntityValidationData validationData = compositionEntityDataManager
         .validateEntity(image, SchemaTemplateContext.composition, schemaInput);
index a4fa6be..24bf8db 100644 (file)
@@ -207,13 +207,6 @@ public class NicManagerImpl implements NicManager {
     schemaInput.setManual(vspInfoDao.isManual(nic.getVspId(), nic.getVersion()));
     schemaInput.setNic(retrieved.getNicCompositionData());
 
-    if (schemaInput.isManual() && !nic.getNicCompositionData().getName()
-            .matches(VendorSoftwareProductConstants.NAME_PATTERN)) {
-      ErrorCode errorCode = NicErrorBuilder
-              .getNicNameFormatErrorBuilder(VendorSoftwareProductConstants.NAME_PATTERN);
-      throw new CoreException(errorCode);
-    }
-
     CompositionEntityValidationData validationData = compositionEntityDataManager
         .validateEntity(nic, SchemaTemplateContext.composition, schemaInput);
     if (CollectionUtils.isEmpty(validationData.getErrors())) {
index 9479e08..217cdf5 100644 (file)
@@ -7,7 +7,6 @@ import org.mockito.Spy;
 import org.openecomp.sdc.common.errors.CoreException;
 import org.openecomp.sdc.common.errors.ErrorCategory;
 import org.openecomp.sdc.common.errors.ErrorCode;
-import org.openecomp.sdc.common.session.SessionContextProviderFactory;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.ComputeDao;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.DeploymentFlavorDao;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
@@ -196,18 +195,24 @@ public class ComputeManagerImplTest {
   public void testUpdateHEATComputeName() throws Exception {
     doReturn(createCompute(VSP_ID, VERSION, COMPONENT_ID, COMPUTE1_ID))
         .when(computeDao).get(anyObject());
+
+    String updatedName = COMPUTE1_ID + " name updated";
+    CompositionEntityValidationData toBeReturned =
+        new CompositionEntityValidationData(CompositionEntityType.compute, COMPUTE1_ID);
+
+    toBeReturned.setErrors(Arrays.asList("#/name: "+updatedName+" is not a valid value."+
+        COMPUTE1_ID+"is the only possible value for this field"));
+    doReturn(toBeReturned).when(compositionEntityDataManagerMock).validateEntity(anyObject(),anyObject(),anyObject());
+
     ComputeEntity computeEntity = new ComputeEntity(VSP_ID, VERSION, COMPONENT_ID, COMPUTE1_ID);
     ComputeData computeData = new ComputeData();
-    computeData.setName(COMPUTE1_ID + " name updated");
+    computeData.setName(updatedName);
     computeData.setDescription(COMPUTE1_ID + " desc updated");
     computeEntity.setComputeCompositionData(computeData);
 
-    try {
-      computeManager.updateCompute(computeEntity);
-    } catch (CoreException ex) {
-      Assert
-          .assertEquals(ex.code().id(), VendorSoftwareProductErrorCodes.UPDATE_COMPUTE_NOT_ALLOWED);
-    }
+    CompositionEntityValidationData output = computeManager.updateCompute(computeEntity);
+
+    Assert.assertEquals(output.getErrors(), toBeReturned.getErrors());
   }
 
   @Test
index 3a9af0d..b44bf2d 100644 (file)
@@ -184,17 +184,23 @@ public class ImageManagerImplTest {
   public void testUpdateHEATImageFileName() throws Exception {
     doReturn(createImage(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID))
         .when(imageDao).get(anyObject());
+
+    String updatedName = IMAGE1_ID +" name updated";
+    CompositionEntityValidationData toBeReturned =
+        new CompositionEntityValidationData(CompositionEntityType.image, IMAGE1_ID);
+
+    toBeReturned.setErrors(Arrays.asList("#/name: "+updatedName+" is not a valid value."+
+        IMAGE1_ID+"is the only possible value for this field"));
+    doReturn(toBeReturned).when(compositionEntityDataManagerMock).validateEntity(anyObject(),anyObject(),anyObject());
+
     ImageEntity imageEntity = new ImageEntity(VSP_ID, VERSION, COMPONENT_ID, IMAGE1_ID);
     Image imageData = new Image();
-    imageData.setFileName(IMAGE1_ID + " name updated");
+    imageData.setFileName(updatedName);
     imageData.setDescription(IMAGE1_ID + " desc updated");
     imageEntity.setImageCompositionData(imageData);
 
-    try {
-      imageManager.updateImage(imageEntity);
-    } catch (CoreException ex) {
-      Assert.assertEquals(ex.code().id(), VendorSoftwareProductErrorCodes.UPDATE_IMAGE_NOT_ALLOWED);
-    }
+    CompositionEntityValidationData output = imageManager.updateImage(imageEntity);
+    Assert.assertEquals(output.getErrors(), toBeReturned.getErrors());
 
   }
 
index 9efb9e1..6ce0f18 100644 (file)
@@ -350,7 +350,7 @@ public class NicManagerImplTest {
 
     CompositionEntityValidationData toBeReturned =
         new CompositionEntityValidationData(CompositionEntityType.nic, NIC1_ID);
-    toBeReturned.setErrors(Arrays.asList("error1", "error2"));
+    toBeReturned.setErrors(Arrays.asList("Field does not conform to predefined criteria:name : must match [a-zA-Z0-9_]*$"));
     doReturn(toBeReturned)
         .when(compositionEntityDataManagerMock)
         .validateEntity(anyObject(), anyObject(), anyObject());
@@ -363,13 +363,9 @@ public class NicManagerImplTest {
     nicData.setNetworkId(NETWORK1_ID);
     nicEntity.setNicCompositionData(nicData);
 
-    try {
-      nicManager.updateNic(nicEntity);
-      Assert.fail();
-    } catch (CoreException ex) {
-      Assert.assertEquals(VendorSoftwareProductErrorCodes.NIC_NAME_FORMAT_NOT_ALLOWED,
-          ex.code().id());
-    }
+    CompositionEntityValidationData output = nicManager.updateNic(nicEntity);
+    Assert.assertEquals(output.getErrors(),toBeReturned.getErrors());
+
   }
 
 
index 92c590b..a975016 100644 (file)
@@ -36,15 +36,15 @@ import java.util.stream.Collectors;
 import org.apache.commons.collections4.CollectionUtils;
 import org.everit.json.schema.EnumSchema;
 import org.everit.json.schema.Schema;
+import org.everit.json.schema.StringSchema;
 import org.everit.json.schema.ValidationException;
 import org.everit.json.schema.loader.SchemaLoader;
 import org.json.JSONObject;
-import org.onap.sdc.tosca.datatypes.model.RequirementDefinition;
 import org.openecomp.core.utilities.CommonMethods;
 import org.openecomp.core.utilities.deserializers.RequirementDefinitionDeserializer;
-
 import org.openecomp.sdc.logging.api.Logger;
 import org.openecomp.sdc.logging.api.LoggerFactory;
+import org.onap.sdc.tosca.datatypes.model.RequirementDefinition;
 
 
 /**
@@ -157,9 +157,14 @@ public class JsonUtil {
   }
 
   private static String mapValidationExceptionToMessage(ValidationException exception) {
-    if (exception.getViolatedSchema() instanceof EnumSchema) {
+    Object schema = exception.getViolatedSchema();
+
+    if (schema instanceof EnumSchema) {
       return mapEnumViolationToMessage(exception);
+    } else if (schema instanceof StringSchema) {
+      return mapStringViolationToMessage(exception);
     }
+
     return exception.getMessage();
   }
 
@@ -173,6 +178,15 @@ public class JsonUtil {
                 possibleValues.stream().map(Object::toString).collect(Collectors.toList()))));
   }
 
+  private static String mapStringViolationToMessage(ValidationException validationException) {
+    if (ValidationType.PATTERN.getKeyword().equals(validationException.getKeyword())) {
+      String message = validationException.getMessage();
+      String value = message.substring(message.indexOf("["), message.indexOf("]") + 1);
+      return message.replace("string " + value, value + " is not valid value. It");
+    }
+    return validationException.getMessage();
+  }
+
   private static List<ValidationException> validateUsingEverit(String json, String jsonSchema) {
     LOGGER.debug(
         String.format("validateUsingEverit start, json=%s, jsonSchema=%s", json, jsonSchema));
@@ -189,4 +203,18 @@ public class JsonUtil {
     }
     return null;
   }
+
+  private enum ValidationType {
+    PATTERN("pattern");
+
+    private String keyword;
+
+    private ValidationType(String keyword) {
+      this.keyword = keyword;
+    }
+
+    String getKeyword() {
+      return  keyword;
+    }
+  }
 }
index add08a7..9db298c 100644 (file)
@@ -4,6 +4,17 @@ import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Image;
 
 public class ImageCompositionSchemaInput implements SchemaTemplateInput {
 
+  private boolean manual;
+  private Image image;
+
+  public boolean isManual() {
+    return manual;
+  }
+
+  public void setManual(boolean manual) {
+    this.manual = manual;
+  }
+
   public Image getImage() {
     return image;
   }
@@ -12,7 +23,7 @@ public class ImageCompositionSchemaInput implements SchemaTemplateInput {
     this.image = image;
   }
 
-  private Image image;
+
 
 
 }
index 8391390..6d0fb3c 100644 (file)
@@ -3,7 +3,9 @@
 "type": "object",
 "properties": {
     "fileName": {
-         "type": "string"
+         "type": "string" <#if !manual>,
+            "enum":["${image.fileName}"]
+         </#if>
     },
     "description": {
          "type": "string"
index fec5b9c..15d34f2 100644 (file)
@@ -3,12 +3,16 @@
   "type": "object",
   "properties": {
     "name": {
-      "type": "string",
-      "enum": [
-        "${nic.name}"
-      ],
-      "default": "${nic.name}"
-    },
+        "type": "string",
+         <#if manual>
+            {"pattern":"^[a-zA-Z0-9_]*$"}
+         <#else>
+            "enum": [
+             "${nic.name}"
+            ],
+           "default": "${nic.name}"
+         </#if>
+},
     "description": {
       "type": "string"
     }<#if !manual><#if nic.networkId??>,