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>
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();
}
Sync,
Commit,
Revert,
- Reset
+ Reset,
+ Clean
}
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);
void forceSyncVersion(SessionContext context, Id itemId, Id versionId);
+ void cleanVersion(SessionContext context, Id itemId, Id versionId);
+
ItemVersionConflict getVersionConflict(SessionContext context, Id itemId, Id versionId);
}
}
+ @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 =
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);
}
+ @Override
+ public void cleanVersion(SessionContext sessionContext, Id itemId, Id versionId) {
+
+ }
+
@Override
public Optional<ElementInfo> getElementInfo(SessionContext context,
ElementContext elementContext,
List<Revision> listRevisions(String itemId, Version version);
void updateVersion(String itemId, Version version);
+
+ void clean(String itemId, Version version);
}
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);
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);
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;
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;
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 {
.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()),
versionDao.update(itemId, version);
}
+ @Override
+ public void clean(String itemId, Version version) {
+ versionDao.clean(itemId, version);
+ }
+
}
--- /dev/null
+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;
+ }
+}
IMPORT,
HEAL_ALL,
POPULATE_USER_PERMISSIONS,
- ADD_CONTRIBUTOR
+ ADD_CONTRIBUTOR,
+ CLEAN_USER_DATA,
+ DELETE_PUBLIC_VERSION
}
new HealAll().register();
new PopulateUserPermissions().register();
new AddContributorCommand().register();
+ new CleanUserDataCommand().register();
+ new DeletePublicVersionCommand().register();
}
private CommandsHolder() {
--- /dev/null
+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;
+ }
+}
}
+ @Override
+ public void cleanVersion(SessionContext sessionContext, Id itemId, Id versionId) {
+
+ }
+
@Override
public Optional<ElementInfo> getElementInfo(SessionContext context, ElementContext elementContext,
Id elementId) {