Enable updating of categories 50/116750/3
authorMichaelMorris <michael.morris@est.tech>
Tue, 5 Jan 2021 13:44:34 +0000 (13:44 +0000)
committerChristophe Closset <christophe.closset@intl.att.com>
Wed, 13 Jan 2021 15:58:58 +0000 (15:58 +0000)
Signed-off-by: MichaelMorris <michael.morris@est.tech>
Issue-ID: SDC-3432
Change-Id: Iea0264db40f9d13462182cf0a37ffdd0278f6a1f

catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/CategoriesImportManager.java
catalog-be/src/test/java/org/openecomp/sdc/ElementOperationMock.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/IElementOperation.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ElementOperation.java

index d49284e..84b23fe 100644 (file)
@@ -154,19 +154,14 @@ public class CategoriesImportManager {
     private Either<SubCategoryDefinition, ResponseFormat> createSubCategorieDeo(Map.Entry<String, List<CategoryDefinition>> entry, CategoryDefinition newcategory, SubCategoryDefinition subcategory, NodeTypeEnum nodeTypeSubCategory) {
         log.debug("createSubCategorieDeo: creating subcategory  {}", subcategory);
         Either<SubCategoryDefinition, ActionStatus> createdSubCategory = elementOperation.createSubCategory(newcategory.getUniqueId(), subcategory, nodeTypeSubCategory);
+        if (createdSubCategory.isRight() && ActionStatus.COMPONENT_SUB_CATEGORY_EXISTS_FOR_CATEGORY == createdSubCategory.right().value()) {
+            log.debug(" create subcategory for {}  category {} subcategory {} already exists, updating", entry.getKey(), newcategory.getName(), subcategory.getName());
+            String subCategoryId = UniqueIdBuilder.buildSubCategoryUid(newcategory.getUniqueId(), subcategory.getNormalizedName());
+            createdSubCategory = elementOperation.updateSubCategory(subCategoryId, subcategory, nodeTypeSubCategory);
+        }
         if (createdSubCategory.isRight()) {
-            if (ActionStatus.COMPONENT_SUB_CATEGORY_EXISTS_FOR_CATEGORY == createdSubCategory.right().value()) {
-                log.debug(" create subcategory for {}  category {} subcategory {} already exists retrieving", entry.getKey(), newcategory.getName(), subcategory.getName());
-                String subCategoryId = UniqueIdBuilder.buildSubCategoryUid(newcategory.getUniqueId(), subcategory.getNormalizedName());
-                createdSubCategory = elementOperation.getSubCategory(nodeTypeSubCategory, subCategoryId);
-                if (createdSubCategory.isRight()) {
-                    log.debug("failed to get sub category that exists subCategoryId: {} type: {}", subCategoryId, nodeTypeSubCategory);
-                    return Either.right(componentsUtils.getResponseFormat(createdSubCategory.right().value()));
-                }
-            } else {
-                log.debug("Failed to create subcategory for {}  category: {} subcategory: {} error {}", entry.getKey(), newcategory.getName(), subcategory.getName(), createdSubCategory.right().value());
-                return Either.right(componentsUtils.getResponseFormat(createdSubCategory.right().value()));
-            }
+            log.debug("Failed to create subcategory for {}  category: {} subcategory: {} error {}", entry.getKey(), newcategory.getName(), subcategory.getName(), createdSubCategory.right().value());
+            return Either.right(componentsUtils.getResponseFormat(createdSubCategory.right().value()));
         } else {
             log.debug("createSubCategorieDeo: create subcategory was successful {}", createdSubCategory.left().value());
         }
@@ -176,19 +171,14 @@ public class CategoriesImportManager {
     private Either<CategoryDefinition, ResponseFormat> createCategorieDeo(Map.Entry<String, List<CategoryDefinition>> entry, CategoryDefinition category, NodeTypeEnum nodeTypeCategory) {
         log.debug("createCategorieDeo: creating category {}", category);
         Either<CategoryDefinition, ActionStatus> createdCategory = elementOperation.createCategory(category, nodeTypeCategory);
+        if (createdCategory.isRight() && ActionStatus.COMPONENT_CATEGORY_ALREADY_EXISTS == createdCategory.right().value()) {
+            log.debug("createCategorieDeo: already exists, updating {}", category);
+            createdCategory = elementOperation.updateCategory(category, nodeTypeCategory);
+        }
+        
         if (createdCategory.isRight()) {
             log.debug("Failed to create category for {}  {} error {}", entry.getKey(), category.getName(), createdCategory.right().value());
-            if (ActionStatus.COMPONENT_CATEGORY_ALREADY_EXISTS != createdCategory.right().value()) {
-                return Either.right(componentsUtils.getResponseFormat(createdCategory.right().value()));
-            } else {
-                log.debug("createCategorieDeo: category exists {} retriving.", category);
-                String categoryId = UniqueIdBuilder.buildCategoryUid(category.getNormalizedName(), nodeTypeCategory);
-                createdCategory = elementOperation.getCategory(nodeTypeCategory, categoryId);
-                if (createdCategory.isRight()) {
-                    log.debug("failed to get category that exists categoryId: {} type: {}", categoryId, nodeTypeCategory);
-                    return Either.right(componentsUtils.getResponseFormat(createdCategory.right().value()));
-                }
-            }
+            return Either.right(componentsUtils.getResponseFormat(createdCategory.right().value()));
         } else {
             log.debug("createCategorieDeo: create category was successful {}", createdCategory.left().value());
         }
index 48a317b..f9605c1 100644 (file)
@@ -132,6 +132,12 @@ public class ElementOperationMock implements IElementOperation {
         // TODO Auto-generated method stub
         return null;
     }
+    
+    @Override
+    public Either<CategoryDefinition, ActionStatus> updateCategory(CategoryDefinition category, NodeTypeEnum nodeType) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 
     @Override
     public Either<CategoryDefinition, ActionStatus> deleteCategory(NodeTypeEnum nodeType, String categoryId) {
@@ -150,6 +156,12 @@ public class ElementOperationMock implements IElementOperation {
         // TODO Auto-generated method stub
         return null;
     }
+    
+    @Override
+    public Either<SubCategoryDefinition, ActionStatus> updateSubCategory(String subCategoryId, SubCategoryDefinition subCategory, NodeTypeEnum nodeType) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 
     @Override
     public Either<List<CategoryDefinition>, ActionStatus> getAllCategories(NodeTypeEnum nodeType, boolean inTransaction) {
@@ -249,11 +261,23 @@ public class ElementOperationMock implements IElementOperation {
         // TODO Auto-generated method stub
         return null;
     }
+    
+    @Override
+    public Either<CategoryDefinition, ActionStatus> updateCategory(CategoryDefinition category, NodeTypeEnum nodeType, boolean inTransaction) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 
     @Override
     public Either<SubCategoryDefinition, ActionStatus> createSubCategory(String categoryId, SubCategoryDefinition subCategory, NodeTypeEnum nodeType, boolean inTransaction) {
         // TODO Auto-generated method stub
         return null;
     }
+    
+    @Override
+    public Either<SubCategoryDefinition, ActionStatus> updateSubCategory(String subCategoryId, SubCategoryDefinition subCategory, NodeTypeEnum nodeType, boolean inTransaction) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 
 }
index 33877ad..38d5fcf 100644 (file)
@@ -60,6 +60,10 @@ public interface IElementOperation {
     Either<CategoryDefinition, ActionStatus> createCategory(CategoryDefinition category, NodeTypeEnum nodeType);
 
     Either<CategoryDefinition, ActionStatus> createCategory(CategoryDefinition category, NodeTypeEnum nodeType, boolean inTransaction);
+    
+    Either<CategoryDefinition, ActionStatus> updateCategory(CategoryDefinition category, NodeTypeEnum nodeType);
+
+    Either<CategoryDefinition, ActionStatus> updateCategory(CategoryDefinition category, NodeTypeEnum nodeType, boolean inTransaction);
 
     Either<CategoryDefinition, ActionStatus> deleteCategory(NodeTypeEnum nodeType, String categoryId);
 
@@ -70,6 +74,10 @@ public interface IElementOperation {
     Either<SubCategoryDefinition, ActionStatus> createSubCategory(String categoryId, SubCategoryDefinition subCategory, NodeTypeEnum nodeType);
 
     Either<SubCategoryDefinition, ActionStatus> createSubCategory(String categoryId, SubCategoryDefinition subCategory, NodeTypeEnum nodeType, boolean inTransaction);
+    
+    Either<SubCategoryDefinition, ActionStatus> updateSubCategory(String subCategoryId, SubCategoryDefinition subCategory, NodeTypeEnum nodeType);
+        
+    Either<SubCategoryDefinition, ActionStatus> updateSubCategory(String subCategoryId, SubCategoryDefinition subCategory, NodeTypeEnum nodeType, boolean inTransaction);
 
     Either<List<CategoryDefinition>, ActionStatus> getAllCategories(NodeTypeEnum nodeType, boolean inTransaction);
 
index 9d0c7b1..b536f16 100644 (file)
@@ -141,6 +141,41 @@ public class ElementOperation implements IElementOperation {
             }
         }
     }
+    
+    @Override
+    public Either<CategoryDefinition, ActionStatus> updateCategory(CategoryDefinition category, NodeTypeEnum nodeType) {
+        return updateCategory(category, nodeType, false);
+    }
+
+    @Override
+    public Either<CategoryDefinition, ActionStatus> updateCategory(CategoryDefinition category, NodeTypeEnum nodeType, boolean inTransaction) {
+        Either<CategoryDefinition, ActionStatus> result = null;
+        category.setUniqueId(UniqueIdBuilder.buildCategoryUid(category.getNormalizedName(), nodeType));
+        CategoryData categoryData = new CategoryData(nodeType, category);
+
+        try {
+            Either<CategoryData, JanusGraphOperationStatus> updatedNode = janusGraphGenericDao
+                .updateNode(categoryData, CategoryData.class);
+            if (updatedNode.isRight()) {
+                JanusGraphOperationStatus value = updatedNode.right().value();
+                ActionStatus actionStatus = ActionStatus.GENERAL_ERROR;
+                log.debug("Problem while creating category, reason {}", value);
+                result = Either.right(actionStatus);
+                return result;
+            }
+            CategoryDefinition created = new CategoryDefinition(updatedNode.left().value().getCategoryDataDefinition());
+            result = Either.left(created);
+            return result;
+        } finally {
+            if (!inTransaction) {
+                if (result != null && result.isLeft()) {
+                    janusGraphGenericDao.commit();
+                } else {
+                    janusGraphGenericDao.rollback();
+                }
+            }
+        }
+    }
 
     @Override
     public Either<SubCategoryDefinition, ActionStatus> createSubCategory(String categoryId, SubCategoryDefinition subCategory, NodeTypeEnum nodeType) {
@@ -170,9 +205,10 @@ public class ElementOperation implements IElementOperation {
             CategoryDataDefinition categoryDataDefinition = categoryNode.left().value().getCategoryDataDefinition();
             subCategory.setUniqueId(UniqueIdBuilder.buildSubCategoryUid(categoryDataDefinition.getUniqueId(), subCategory.getNormalizedName()));
             SubCategoryData subCategoryData = new SubCategoryData(nodeType, subCategory);
-
+           
             Either<SubCategoryData, JanusGraphOperationStatus> subCategoryNode = janusGraphGenericDao
                 .createNode(subCategoryData, SubCategoryData.class);
+            
             if (subCategoryNode.isRight()) {
                 JanusGraphOperationStatus janusGraphOperationStatus = subCategoryNode.right().value();
                 log.debug("Problem while creating category, reason {}", janusGraphOperationStatus);
@@ -182,7 +218,7 @@ public class ElementOperation implements IElementOperation {
                 result = Either.right(actionStatus);
                 return result;
             }
-
+            
             Either<GraphRelation, JanusGraphOperationStatus> relation = janusGraphGenericDao
                 .createRelation(categoryNode.left().value(), subCategoryNode.left().value(), GraphEdgeLabels.SUB_CATEGORY, null);
             if (relation.isRight()) {
@@ -190,6 +226,7 @@ public class ElementOperation implements IElementOperation {
                 result = Either.right(actionStatus);
                 return result;
             }
+
             SubCategoryDefinition subCategoryCreated = new SubCategoryDefinition(subCategoryNode.left().value().getSubCategoryDataDefinition());
             result = Either.left(subCategoryCreated);
             return result;
@@ -203,6 +240,43 @@ public class ElementOperation implements IElementOperation {
             }
         }
     }
+    
+    @Override
+    public Either<SubCategoryDefinition, ActionStatus> updateSubCategory(String subCategoryId, SubCategoryDefinition subCategory, NodeTypeEnum nodeType) {
+        return updateSubCategory(subCategoryId, subCategory, nodeType, false);
+    }
+
+    @Override
+    public Either<SubCategoryDefinition, ActionStatus> updateSubCategory(String subCategoryId, SubCategoryDefinition subCategory, NodeTypeEnum nodeType, boolean inTransaction) {
+
+        Either<SubCategoryDefinition, ActionStatus> result = null;
+        try {
+            subCategory.setUniqueId(subCategoryId);
+            SubCategoryData subCategoryData = new SubCategoryData(nodeType, subCategory);
+           
+            Either<SubCategoryData, JanusGraphOperationStatus> subCategoryNode = janusGraphGenericDao
+                .updateNode(subCategoryData, SubCategoryData.class);
+            
+            if (subCategoryNode.isRight()) {
+                JanusGraphOperationStatus janusGraphOperationStatus = subCategoryNode.right().value();
+                log.debug("Problem while updating sub category, reason {}", janusGraphOperationStatus);
+                result = Either.right(ActionStatus.GENERAL_ERROR);
+                return result;
+            }
+
+            SubCategoryDefinition subCategoryUpdated = new SubCategoryDefinition(subCategoryNode.left().value().getSubCategoryDataDefinition());
+            result = Either.left(subCategoryUpdated);
+            return result;
+        } finally {
+            if (!inTransaction) {
+                if (result != null && result.isLeft()) {
+                    janusGraphGenericDao.commit();
+                } else {
+                    janusGraphGenericDao.rollback();
+                }
+            }
+        }
+    }
 
     @Override
     public Either<GroupingDefinition, ActionStatus> createGrouping(String subCategoryId, GroupingDefinition grouping, NodeTypeEnum nodeType) {