Add commands to clean zusammen data 23/55323/2
authortalig <talig@amdocs.com>
Sun, 8 Jul 2018 11:43:18 +0000 (14:43 +0300)
committertalig <talig@amdocs.com>
Sun, 8 Jul 2018 11:43:18 +0000 (14:43 +0300)
Expose REST to clean item version data of specific user.
Add 2 commands to zusammen tool:
1. clean item data of specific user
2. delete public version

Change-Id: I8630142bf34846359153eacc1556b10acecefa05
Issue-ID: SDC-1444
Signed-off-by: talig <talig@amdocs.com>
16 files changed:
openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/services/VersionsImpl.java
openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/VersionAction.java
openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-api/src/main/java/org/openecomp/core/zusammen/api/ZusammenAdaptor.java
openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/db/ZusammenConnector.java
openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/db/impl/ZusammenConnectorImpl.java
openecomp-be/lib/openecomp-core-lib/openecomp-zusammen-lib/openecomp-zusammen-core/src/main/java/org/openecomp/core/zusammen/impl/ZusammenAdaptorImpl.java
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/dao/ServiceModelDaoFactoryTest.java
openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/VersioningManager.java
openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/dao/VersionDao.java
openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/dao/impl/zusammen/VersionZusammenDaoImpl.java
openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/impl/VersioningManagerImpl.java
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/CleanUserDataCommand.java [new file with mode: 0644]
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/CommandName.java
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/CommandsHolder.java
openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/DeletePublicVersionCommand.java [new file with mode: 0644]
services/activity-spec/activity-spec-web/activity-spec-service/src/test/java/org/onap/sdc/activityspec/be/dao/impl/ActivitySpecZusammenDaoImplTest.java

index e2d9872..496db14 100644 (file)
@@ -165,9 +165,11 @@ public class VersionsImpl implements Versions {
       case Revert:
         revert(request.getRevisionRequest(), itemId, versionId);
         break;
-      case Reset:
-        throw new UnsupportedOperationException("Action reset not supported.");
+      case Clean:
+        versioningManager.clean(itemId, version);
+        break;
       default:
+        throw new UnsupportedOperationException(String.format("Action %s not supported.", request.getAction()));
     }
     return Response.ok().build();
   }
index 23eddad..ca37b22 100644 (file)
@@ -62,6 +62,8 @@ public interface ZusammenAdaptor {
 
   void forceSyncVersion(SessionContext context, Id itemId, Id versionId);
 
+  void cleanVersion(SessionContext context, Id itemId, Id versionId);
+
   Optional<ElementInfo> getElementInfo(SessionContext context, ElementContext elementContext,
                                        Id elementId);
 
index 83bbc5b..f8b048c 100644 (file)
@@ -289,6 +289,17 @@ public class ZusammenConnectorImpl implements ZusammenConnector {
     }
   }
 
+  @Override
+  public void cleanVersion(SessionContext context, Id itemId, Id versionId) {
+    Response<Void> response =
+            versionAdaptorFactory.createInterface(context).delete(context, itemId, versionId);
+    if (!response.isSuccessful()) {
+      throw new SdcRuntimeException(String.format(
+              "failed to clean item Version. ItemId: %s, versionId: %s, message: %s",
+              itemId.getValue(), versionId.getValue(), response.getReturnCode().toString()));
+    }
+  }
+
   @Override
   public ItemVersionConflict getVersionConflict(SessionContext context, Id itemId, Id versionId) {
     Response<ItemVersionConflict> response =
index 968ff28..1c63ff8 100644 (file)
@@ -276,6 +276,11 @@ public class ZusammenAdaptorImpl implements ZusammenAdaptor {
     connector.forceSyncVersion(context, itemId, versionId);
   }
 
+  @Override
+  public void cleanVersion(SessionContext context, Id itemId, Id versionId) {
+    connector.cleanVersion(context, itemId, versionId);
+  }
+
   @Override
   public void revert(SessionContext context, Id itemId, Id versionId, Id revisionId) {
     connector.revertVersionRevision(context, itemId, versionId, revisionId);
index f557e4d..978ab43 100644 (file)
@@ -1,10 +1,9 @@
 package org.openecomp.sdc.versioning.dao;
 
-import org.openecomp.sdc.versioning.dao.types.Revision;
-import org.openecomp.sdc.versioning.dao.types.Version;
-
 import java.util.List;
 import java.util.Optional;
+import org.openecomp.sdc.versioning.dao.types.Revision;
+import org.openecomp.sdc.versioning.dao.types.Version;
 
 public interface VersionDao {
   List<Version> list(String itemId);
@@ -23,6 +22,8 @@ public interface VersionDao {
 
   void forceSync(String itemId, Version version);
 
+  void clean(String itemId, Version version);
+
   void revert(String itemId, Version version, String revisionId);
 
   List<Revision> listRevisions(String itemId, Version version);
index 32c17db..3b783d5 100644 (file)
@@ -1,5 +1,7 @@
 package org.openecomp.sdc.versioning.dao.impl.zusammen;
 
+import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
+
 import com.amdocs.zusammen.datatypes.Id;
 import com.amdocs.zusammen.datatypes.SessionContext;
 import com.amdocs.zusammen.datatypes.item.Info;
@@ -8,6 +10,10 @@ import com.amdocs.zusammen.datatypes.item.ItemVersionData;
 import com.amdocs.zusammen.datatypes.item.ItemVersionStatus;
 import com.amdocs.zusammen.datatypes.item.SynchronizationStatus;
 import com.amdocs.zusammen.datatypes.itemversion.ItemVersionRevisions;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
 import org.openecomp.sdc.common.errors.CoreException;
 import org.openecomp.sdc.common.errors.ErrorCategory;
@@ -19,13 +25,6 @@ import org.openecomp.sdc.versioning.dao.types.SynchronizationState;
 import org.openecomp.sdc.versioning.dao.types.Version;
 import org.openecomp.sdc.versioning.dao.types.VersionState;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
-
 public class VersionZusammenDaoImpl implements VersionDao {
 
   public static final class ZusammenProperty {
@@ -110,6 +109,11 @@ public class VersionZusammenDaoImpl implements VersionDao {
         .forceSyncVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
   }
 
+  @Override
+  public void clean(String itemId, Version version) {
+    zusammenAdaptor.cleanVersion(createSessionContext(), new Id(itemId), new Id(version.getId()));
+  }
+
   @Override
   public void revert(String itemId, Version version, String revisionId) {
     zusammenAdaptor.revert(createSessionContext(), new Id(itemId), new Id(version.getId()),
diff --git a/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/CleanUserDataCommand.java b/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/CleanUserDataCommand.java
new file mode 100644 (file)
index 0000000..96bc22e
--- /dev/null
@@ -0,0 +1,69 @@
+package org.openecomp.core.tools.commands;
+
+import static org.openecomp.core.tools.commands.CommandName.CLEAN_USER_DATA;
+
+import com.amdocs.zusammen.datatypes.Id;
+import com.amdocs.zusammen.datatypes.SessionContext;
+import com.amdocs.zusammen.datatypes.UserInfo;
+import com.amdocs.zusammen.datatypes.item.ItemVersion;
+import java.util.Collection;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Option;
+import org.openecomp.core.zusammen.db.ZusammenConnector;
+import org.openecomp.core.zusammen.db.ZusammenConnectorFactory;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+
+public class CleanUserDataCommand extends Command {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(CleanUserDataCommand.class);
+    private static final String ITEM_ID_OPTION = "i";
+    private static final String USER_OPTION = "u";
+
+    CleanUserDataCommand() {
+        options.addOption(
+                Option.builder(ITEM_ID_OPTION).hasArg().argName("item_id").desc("id of the item to clean, mandatory")
+                      .build());
+        options.addOption(Option.builder(USER_OPTION).hasArg().argName("user")
+                                .desc("the user of which the item data will be cleaned for, mandatory").build());
+    }
+
+    @Override
+    public boolean execute(String[] args) {
+        CommandLine cmd = parseArgs(args);
+        if (!cmd.hasOption(ITEM_ID_OPTION) || !cmd.hasOption(USER_OPTION)) {
+            LOGGER.error("Arguments i and u are mandatory");
+            return false;
+        }
+        String itemId = cmd.getOptionValue(ITEM_ID_OPTION);
+        String user = cmd.getOptionValue(USER_OPTION);
+
+        SessionContext context = createSessionContext(user);
+        ZusammenConnector zusammenConnector = ZusammenConnectorFactory.getInstance().createInterface();
+
+        Id itemIdObj = new Id(itemId);
+        Collection<ItemVersion> versions = zusammenConnector.listPublicVersions(context, itemIdObj);
+        for (ItemVersion version : versions) {
+            try {
+                zusammenConnector.cleanVersion(context, itemIdObj, version.getId());
+            } catch (Exception e) {
+                LOGGER.error(
+                        String.format("Error occurred while cleaning item %s version %s from user %s space", itemId,
+                                version.getId(), user), e);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public CommandName getCommandName() {
+        return CLEAN_USER_DATA;
+    }
+
+    private static SessionContext createSessionContext(String user) {
+        SessionContext sessionContext = new SessionContext();
+        sessionContext.setUser(new UserInfo(user));
+        sessionContext.setTenant("dox");
+        return sessionContext;
+    }
+}
index b6cc048..dc237b5 100644 (file)
@@ -35,6 +35,8 @@ public class CommandsHolder {
         new HealAll().register();
         new PopulateUserPermissions().register();
         new AddContributorCommand().register();
+        new CleanUserDataCommand().register();
+        new DeletePublicVersionCommand().register();
     }
 
     private CommandsHolder() {
diff --git a/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/DeletePublicVersionCommand.java b/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/DeletePublicVersionCommand.java
new file mode 100644 (file)
index 0000000..fee0750
--- /dev/null
@@ -0,0 +1,61 @@
+package org.openecomp.core.tools.commands;
+
+import static org.openecomp.core.tools.commands.CommandName.DELETE_PUBLIC_VERSION;
+
+import com.amdocs.zusammen.datatypes.Id;
+import com.amdocs.zusammen.datatypes.SessionContext;
+import com.amdocs.zusammen.datatypes.UserInfo;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Option;
+import org.openecomp.core.zusammen.db.ZusammenConnector;
+import org.openecomp.core.zusammen.db.ZusammenConnectorFactory;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+
+public class DeletePublicVersionCommand extends Command {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(DeletePublicVersionCommand.class);
+    private static final String ITEM_ID_OPTION = "i";
+    private static final String VERSION_ID_OPTION = "v";
+
+    DeletePublicVersionCommand() {
+        options.addOption(Option.builder(ITEM_ID_OPTION).hasArg().argName("item_id")
+                                .desc("id of the item to delete from public, mandatory").build());
+        options.addOption(Option.builder(VERSION_ID_OPTION).hasArg().argName("version_id")
+                                .desc("id of the version to delete from public, mandatory").build());
+    }
+
+    @Override
+    public boolean execute(String[] args) {
+        CommandLine cmd = parseArgs(args);
+        if (!cmd.hasOption(ITEM_ID_OPTION) || !cmd.hasOption(VERSION_ID_OPTION)) {
+            LOGGER.error("Arguments i and v are mandatory");
+            return false;
+        }
+        String itemId = cmd.getOptionValue(ITEM_ID_OPTION);
+        String versionId = cmd.getOptionValue(VERSION_ID_OPTION);
+
+        SessionContext context = createSessionContext();
+        ZusammenConnector zusammenConnector = ZusammenConnectorFactory.getInstance().createInterface();
+
+        try {
+            zusammenConnector.cleanVersion(context, new Id(itemId), new Id(versionId));
+        } catch (Exception e) {
+            LOGGER.error(String.format("Error occurred while deleting item %s version %s from public space", itemId,
+                    versionId), e);
+        }
+        return true;
+    }
+
+    @Override
+    public CommandName getCommandName() {
+        return DELETE_PUBLIC_VERSION;
+    }
+
+    private static SessionContext createSessionContext() {
+        SessionContext sessionContext = new SessionContext();
+        sessionContext.setUser(new UserInfo("public"));
+        sessionContext.setTenant("dox");
+        return sessionContext;
+    }
+}
index 26b9adb..9b7bb50 100644 (file)
@@ -326,6 +326,11 @@ public class ActivitySpecZusammenDaoImplTest {
 
         }
 
+        @Override
+        public void cleanVersion(SessionContext sessionContext, Id itemId, Id versionId) {
+
+        }
+
         @Override
         public Optional<ElementInfo> getElementInfo(SessionContext context, ElementContext elementContext,
                                                            Id elementId) {