Fix 'Data type cache not updated when data type updated'-bug 42/132942/1
authorvasraz <vasyl.razinkov@est.tech>
Wed, 18 Jan 2023 15:54:45 +0000 (15:54 +0000)
committerVasyl Razinkov <vasyl.razinkov@est.tech>
Wed, 18 Jan 2023 15:57:27 +0000 (15:57 +0000)
Signed-off-by: Vasyl Razinkov <vasyl.razinkov@est.tech>
Change-Id: I49c50cc95a2594025eab955769cc68e7e7a23acd
Issue-ID: SDC-4337

catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/BaseBusinessLogic.java
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/DataTypeBusinessLogic.java
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogic.java
catalog-be/src/main/java/org/openecomp/sdc/be/servlets/DataTypeServlet.java

index 1f6d2a4..8b18346 100644 (file)
@@ -32,6 +32,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
+import lombok.Getter;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -118,6 +119,7 @@ public abstract class BaseBusinessLogic {
     protected JanusGraphGenericDao janusGraphGenericDao;
     protected PropertyOperation propertyOperation;
     protected AttributeOperation attributeOperation;
+    @Getter
     protected ApplicationDataTypeCache applicationDataTypeCache;
     protected ToscaOperationFacade toscaOperationFacade;
     protected IGroupOperation groupOperation;
@@ -126,7 +128,7 @@ public abstract class BaseBusinessLogic {
     protected PolicyTypeOperation policyTypeOperation;
     protected ArtifactsOperations artifactToscaOperation;
     protected UserValidations userValidations;
-    DataTypeValidatorConverter dataTypeValidatorConverter = DataTypeValidatorConverter.getInstance();
+    private final DataTypeValidatorConverter dataTypeValidatorConverter = DataTypeValidatorConverter.getInstance();
 
     protected BaseBusinessLogic(IElementOperation elementDao, IGroupOperation groupOperation, IGroupInstanceOperation groupInstanceOperation,
                                 IGroupTypeOperation groupTypeOperation, InterfaceOperation interfaceOperation,
index 687004a..d95376e 100644 (file)
@@ -23,6 +23,8 @@ import fj.data.Either;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import org.openecomp.sdc.be.datatypes.elements.DataTypeDataDefinition;
+import org.openecomp.sdc.be.exception.supplier.DataTypeOperationExceptionSupplier;
 import org.openecomp.sdc.be.model.Component;
 import org.openecomp.sdc.be.model.ComponentParametersView;
 import org.openecomp.sdc.be.model.DataTypeDefinition;
@@ -33,6 +35,7 @@ import org.openecomp.sdc.be.model.operations.api.IGroupInstanceOperation;
 import org.openecomp.sdc.be.model.operations.api.IGroupOperation;
 import org.openecomp.sdc.be.model.operations.api.IGroupTypeOperation;
 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
+import org.openecomp.sdc.be.model.operations.impl.DataTypeOperation;
 import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
@@ -40,15 +43,19 @@ import org.springframework.util.CollectionUtils;
 @org.springframework.stereotype.Component("dataTypeBusinessLogic")
 public class DataTypeBusinessLogic extends BaseBusinessLogic {
 
-    final DataTypeImportManager dataTypeImportManager;
+    private final DataTypeImportManager dataTypeImportManager;
+    private final DataTypeOperation dataTypeOperation;
 
     @Autowired
     public DataTypeBusinessLogic(IElementOperation elementDao, IGroupOperation groupOperation, IGroupInstanceOperation groupInstanceOperation,
                                  IGroupTypeOperation groupTypeOperation, InterfaceOperation interfaceOperation,
-                                 InterfaceLifecycleOperation interfaceLifecycleTypeOperation, ArtifactsOperations artifactToscaOperation, DataTypeImportManager dataTypeImportManager) {
+                                 InterfaceLifecycleOperation interfaceLifecycleTypeOperation, ArtifactsOperations artifactToscaOperation,
+                                 DataTypeImportManager dataTypeImportManager,
+                                 DataTypeOperation dataTypeOperation) {
         super(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation, interfaceOperation, interfaceLifecycleTypeOperation,
             artifactToscaOperation);
         this.dataTypeImportManager = dataTypeImportManager;
+        this.dataTypeOperation = dataTypeOperation;
     }
 
     /**
@@ -154,11 +161,17 @@ public class DataTypeBusinessLogic extends BaseBusinessLogic {
      *   [...]
      * </pre>
      *
-     * @param dataTypesYaml the data types to create in yaml format. It can contain multiple data types entries.
-     * @param model Model name to associate with data type
+     * @param dataTypesYaml                the data types to create in yaml format. It can contain multiple data types entries.
+     * @param model                        Model name to associate with data type
      * @param includeToModelDefaultImports Add data type entry to default imports for model
      */
     public void createDataTypeFromYaml(final String dataTypesYaml, final String model, final boolean includeToModelDefaultImports) {
         dataTypeImportManager.createDataTypes(dataTypesYaml, model, includeToModelDefaultImports);
     }
+
+    public void updateApplicationDataTypeCache(final String dataTypeId) {
+        DataTypeDataDefinition dataTypeDataDefinition = dataTypeOperation.getDataTypeByUid(dataTypeId).orElseThrow(
+            DataTypeOperationExceptionSupplier.dataTypeNotFound(dataTypeId));
+        getApplicationDataTypeCache().reload(dataTypeDataDefinition.getModel(), dataTypeId);
+    }
 }
index 619a923..2f71959 100644 (file)
@@ -333,10 +333,6 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic {
         this.artifactsBusinessLogic = artifactsManager;
     }
 
-    public ApplicationDataTypeCache getApplicationDataTypeCache() {
-        return applicationDataTypeCache;
-    }
-
     @Autowired
     @Override
     public void setApplicationDataTypeCache(ApplicationDataTypeCache applicationDataTypeCache) {
index 711ebcb..e081110 100644 (file)
@@ -45,6 +45,7 @@ import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
+import org.openecomp.sdc.be.components.impl.DataTypeBusinessLogic;
 import org.openecomp.sdc.be.components.impl.aaf.AafPermission;
 import org.openecomp.sdc.be.components.impl.aaf.PermissionAllowed;
 import org.openecomp.sdc.be.config.BeEcompErrorManager;
@@ -70,11 +71,13 @@ public class DataTypeServlet extends BeGenericServlet {
 
     private static final Logger log = Logger.getLogger(DataTypeServlet.class);
     private final DataTypeOperation dataTypeOperation;
+    private final DataTypeBusinessLogic dataTypeBusinessLogic;
 
     public DataTypeServlet(final ComponentsUtils componentsUtils,
-                           final DataTypeOperation dataTypeOperation) {
+                           final DataTypeOperation dataTypeOperation, DataTypeBusinessLogic dataTypeBusinessLogic) {
         super(componentsUtils);
         this.dataTypeOperation = dataTypeOperation;
+        this.dataTypeBusinessLogic = dataTypeBusinessLogic;
     }
 
     @GET
@@ -139,9 +142,10 @@ public class DataTypeServlet extends BeGenericServlet {
         })
     @PermissionAllowed(AafPermission.PermNames.INTERNAL_ALL_VALUE)
     public Response createProperty(@Parameter(in = ParameterIn.PATH, required = true, description = "The data type id")
-                                       @PathParam("id") final String id,
+                                   @PathParam("id") final String id,
                                    @RequestBody(description = "Property to add", required = true) final PropertyDefinitionDto propertyDefinitionDto) {
         final PropertyDefinitionDto property = dataTypeOperation.createProperty(id, propertyDefinitionDto);
+        dataTypeBusinessLogic.updateApplicationDataTypeCache(id);
         return Response.status(Status.CREATED).entity(property).build();
     }