Archive Item

Change-Id: Idd5eedc3b0ca9e3cc72f7de9fd432cdbbf77631d
Issue-ID: SDC-1086
Signed-off-by: ayalaben <ayala.benzvi@amdocs.com>
diff --git a/openecomp-bdd/features/Onboarding/ArchiveItem/ArchiveVlm.feature b/openecomp-bdd/features/Onboarding/ArchiveItem/ArchiveVlm.feature
new file mode 100644
index 0000000..f4b524b
--- /dev/null
+++ b/openecomp-bdd/features/Onboarding/ArchiveItem/ArchiveVlm.feature
@@ -0,0 +1,42 @@
+Feature: Archive and Restore VLM
+
+    Scenario: Archive VLM with Draft
+        When I want to create a VLM
+        Then I want to create input data
+        Then I want to update the input property "name" with a random value
+        Then I want to update the input property "type" with value "Universal"
+        Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the input data from the context
+        Then I want to commit this Item
+
+        Then I want to archive this item
+        Then I want to list Archived VLMs
+        Then I want to check that item exits in response
+
+    Scenario: Archive Already Archived VLM - Negative
+        When I want to create a VLM
+        Then I want to create input data
+        Then I want to update the input property "name" with a random value
+        Then I want to update the input property "type" with value "Universal"
+        Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the input data from the context
+        Then I want to submit this VLM
+
+        Then I want to archive this item
+        Then I want to list Archived VLMs
+        Then I want to check that item exits in response
+        Then I want the following to fail with error message "Archive item failed, item {item.id} is already Archived"
+        Then I want to archive this item
+
+
+    Scenario: Archive Certified VLM
+            When I want to create a VLM
+            Then I want to create input data
+            Then I want to update the input property "name" with a random value
+            Then I want to update the input property "type" with value "Universal"
+            Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the input data from the context
+            Then I want to submit this VLM
+
+            Then I want to archive this item
+            Then I want to list Archived VLMs
+            Then I want to check that item exits in response
+            Then I want to list Active VLMs
+            Then I want to check that item does not exits in response
diff --git a/openecomp-bdd/features/Onboarding/ArchiveItem/ArchiveVsp.feature b/openecomp-bdd/features/Onboarding/ArchiveItem/ArchiveVsp.feature
new file mode 100644
index 0000000..2cc0574
--- /dev/null
+++ b/openecomp-bdd/features/Onboarding/ArchiveItem/ArchiveVsp.feature
@@ -0,0 +1,58 @@
+Feature: Archive and Restore VSP
+
+    Background: Init
+        Given I want to create a VLM
+
+    Scenario: Archive VSP with Draft
+            When I want to create a VSP with onboarding type "NetworkPackage"
+            When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip"
+            And I want to process the NetworkPackage file for this VSP
+
+            Then I want to commit this Item
+            Then I want to get path "/items/{item.id}/versions"
+            Then I want to check property "listCount" for value 1
+            Then I want to make sure this Item has status "Draft"
+
+            Then I want to archive this item
+            Then I want to list Archived VSPs
+            Then I want to check that item exits in response
+            Then I want to list Active VSPs
+            Then I want to check that item does not exits in response
+
+    Scenario: Archive Already Archived VSP - Negative
+            When I want to create a VSP with onboarding type "NetworkPackage"
+            When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip"
+            And I want to process the NetworkPackage file for this VSP
+            Then I want to commit this Item
+
+            Then I want to archive this item
+            Then I want to list Archived VSPs
+            Then I want to check that item exits in response
+            Then I want to list Active VSPs
+            Then I want to check that item does not exits in response
+
+            Then I want the following to fail with error message "Archive item failed, item {item.id} is already Archived"
+            Then I want to archive this item
+
+
+    Scenario: Archive Certified VSP
+            When I want to create a VSP with onboarding type "NetworkPackage"
+            Then I want to make sure this Item has status "Draft"
+            When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip"
+            And I want to process the NetworkPackage file for this VSP
+
+            Then I want to commit this Item
+            Then I want to get path "/items/{item.id}/versions"
+            Then I want to check property "listCount" for value 1
+            Then I want to make sure this Item has status "Draft"
+
+            When I want to submit this VSP
+            Then I want to make sure this Item has status "Certified"
+            Then I want to get path "/items/{item.id}/versions"
+            Then I want to check property "listCount" for value 1
+
+            Then I want to archive this item
+            Then I want to list Archived VSPs
+            Then I want to check that item exits in response
+            Then I want to list Active VSPs
+            Then I want to check that item does not exits in response
\ No newline at end of file
diff --git a/openecomp-bdd/features/Onboarding/ArchiveItem/FilterArchivedVSPpackage.feature b/openecomp-bdd/features/Onboarding/ArchiveItem/FilterArchivedVSPpackage.feature
new file mode 100644
index 0000000..f68eece
--- /dev/null
+++ b/openecomp-bdd/features/Onboarding/ArchiveItem/FilterArchivedVSPpackage.feature
@@ -0,0 +1,40 @@
+Feature: Filter Archived VSP Package Details
+
+  Background: Init
+    Given I want to create a VLM
+
+  Scenario: Active VSP Package
+        When I want to create a VSP with onboarding type "NetworkPackage"
+        Then I want to make sure this Item has status "Draft"
+
+        When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip"
+        And I want to process the NetworkPackage file for this VSP
+        Then I want to commit this Item
+        Then I want to submit this VSP
+        Then I want to package this VSP
+        Then I want to make sure this Item has status "Certified"
+        Then I want to get path "/items/{item.id}/versions"
+        Then I want to check property "listCount" for value 1
+
+        Then I want to list Active VSPs packages
+        Then I want to check that VSP package exits in response
+
+
+  Scenario: Archived VSP Package
+          When I want to create a VSP with onboarding type "NetworkPackage"
+          Then I want to make sure this Item has status "Draft"
+
+          When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip"
+          And I want to process the NetworkPackage file for this VSP
+          Then I want to commit this Item
+          Then I want to submit this VSP
+          Then I want to package this VSP
+          Then I want to make sure this Item has status "Certified"
+          Then I want to get path "/items/{item.id}/versions"
+          Then I want to check property "listCount" for value 1
+          Then I want to archive this item
+
+          Then I want to list Archived VSPs packages
+          Then I want to check that VSP package exits in response
+
+
diff --git a/openecomp-bdd/stepDefinitions/General_Steps.js b/openecomp-bdd/stepDefinitions/General_Steps.js
index b9ea72f..b3fb0e9 100644
--- a/openecomp-bdd/stepDefinitions/General_Steps.js
+++ b/openecomp-bdd/stepDefinitions/General_Steps.js
@@ -22,6 +22,11 @@
 const fs = require('fs');
 const util = require('./Utils.js');
 
+function getPath(path, context) {
+	let compiled = _.template(path);
+	return compiled(context);
+}
+
 /**
  * @module ContextData
  * @description  Use with "Given". Use ONLY for local testing when you know the value of the Item you want to use
@@ -183,7 +188,8 @@
  **/
 Then('I want the following to fail with error message {string}', function(string)  {
 	this.context.shouldFail = true;
-	this.context.errorMessage = string;
+	let errorMessage = getPath(string, this.context);
+	this.context.errorMessage = errorMessage;
 });
 
 /**
@@ -228,4 +234,47 @@
 	let str = zip.files[string]._data;
 	this.context.responseData = JSON.parse(str);
 	callback();
+});
+
+/**
+ * @module ResponseData
+ * @description Check that the itemId from context exits in result of responseData
+ * exampleFile ArchiveItem.feature
+ * step I want to check that item exits in response
+ **/
+Then('I want to check that item exits in response', function() {
+
+  const id = this.context.item.id;
+  const results = this.context.responseData.results;
+  var testResult = false;
+
+  for(var i=0; i< results.length; i++){
+     if ( id == results[i].id){
+            testResult = true;
+     }
+  }
+
+   assert.equal(testResult,true);
+});
+
+
+/**
+ * @module ResponseData
+ * @description Check that the itemId from context does NOT exits in result of responseData
+ * exampleFile ArchiveItem.feature
+ * step I want to check that item does not exits in response
+ **/
+Then('I want to check that item does not exits in response', function() {
+
+  const id = this.context.item.id;
+  const results = this.context.responseData.results;
+  var testResult = false;
+
+  for(var i=0; i< results.length; i++){
+     if ( id == results[i].id){
+            testResult = true;
+     }
+  }
+
+   assert.equal(testResult,false);
 });
\ No newline at end of file
diff --git a/openecomp-bdd/stepDefinitions/Item_steps.js b/openecomp-bdd/stepDefinitions/Item_steps.js
index 165df6c..3ff7f20 100644
--- a/openecomp-bdd/stepDefinitions/Item_steps.js
+++ b/openecomp-bdd/stepDefinitions/Item_steps.js
@@ -65,3 +65,27 @@
 	return util.request(this.context, 'PUT', path, inputData);
 });
 
+
+/**
+ * @module Item
+ * @exampleFile ArchiveItem.feature
+ * @step I want to archive this item
+ **/
+Then('I want to archive this item', function()  {
+    let path = '/items/' + this.context.item.id + '/actions'
+    let inputData = {action: 'ARCHIVE'};
+	return util.request(this.context, 'PUT', path, inputData);
+});
+
+
+/**
+ * @module Item
+ * @exampleFile ArchiveItem.feature
+ * @step I want to restore this item
+ **/
+Then('I want to restore this item', function()  {
+    let path = '/items/' + this.context.item.id + '/actions'
+    let inputData = {action: 'RESTORE'};
+	return util.request(this.context, 'PUT', path, inputData);
+});
+
diff --git a/openecomp-bdd/stepDefinitions/VLM_steps.js b/openecomp-bdd/stepDefinitions/VLM_steps.js
index ea75313..35e78b2 100644
--- a/openecomp-bdd/stepDefinitions/VLM_steps.js
+++ b/openecomp-bdd/stepDefinitions/VLM_steps.js
@@ -55,3 +55,25 @@
 	return util.request(this.context, 'DELETE', path);
 });
 
+
+/**
+ * @module VLM
+ * @exampleFile ArchiveItem.feature
+ * @step I want to list Archived VLMs
+ **/
+Then('I want to list Archived VLMs', function()  {
+	let path = '/vendor-license-models/?Status=ARCHIVED';
+	return util.request(this.context, 'GET', path);
+});
+
+/**
+ * @module VLM
+ * @exampleFile ArchiveItem.feature
+ * @step I want to list Active VLMs
+ **/
+Then('I want to list Active VLMs', function()  {
+	let path = '/vendor-license-models';
+	return util.request(this.context, 'GET', path);
+});
+
+
diff --git a/openecomp-bdd/stepDefinitions/VSP_steps.js b/openecomp-bdd/stepDefinitions/VSP_steps.js
index bed8921..1f753fe 100644
--- a/openecomp-bdd/stepDefinitions/VSP_steps.js
+++ b/openecomp-bdd/stepDefinitions/VSP_steps.js
@@ -118,4 +118,65 @@
 Then('I want to delete this VSP', function()  {
 	let path = '/vendor-software-products/' + this.context.item.id ;
 	return util.request(this.context, 'DELETE', path);
+});
+
+/**
+ * @module VSP
+ * @exampleFile ArchiveItem.feature
+ * @step I want to list Archived VSPs
+ **/
+Then('I want to list Archived VSPs', function()  {
+	let path = '/vendor-software-products/?Status=ARCHIVED';
+	return util.request(this.context, 'GET', path);
+});
+
+/**
+ * @module VSP
+ * @exampleFile ArchiveItem.feature
+ * @step I want to list Active VSPs
+ **/
+Then('I want to list Active VSPs', function()  {
+	let path = '/vendor-software-products';
+	return util.request(this.context, 'GET', path);
+});
+
+
+/**
+ * @module VSP
+ * @exampleFile FilterArchivedVSPpackage.feature
+ * @step I want to list Archived VSPs packages
+ **/
+Then('I want to list Archived VSPs packages', function()  {
+	let path = '/vendor-software-products/packages?Status=ARCHIVED';
+	return util.request(this.context, 'GET', path);
+});
+
+/**
+ * @module VSP
+ * @exampleFile FilterArchivedVSPpackage.feature
+ * @step I want to list Active VSPs packages
+ **/
+Then('I want to list Active VSPs packages', function()  {
+	let path = '/vendor-software-products/packages';
+	return util.request(this.context, 'GET', path);
+
+});
+
+/**
+ * @module VSP
+ * @exampleFile FilterArchivedVSPpackage.feature
+ * @step I want to check that VSP package exits in response
+ **/
+Then('I want to check that VSP package exits in response', function()  {
+
+      const packages = this.context.responseData.results;
+      const id = this.context.item.id;
+      var testResult = false;
+
+      for(var i=0; i< packages.length; i++){
+          if (id == packages[i].packageId){
+               testResult = true;
+          }
+      }
+      assert.equal(testResult,true);
 });
\ No newline at end of file
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/Items.java b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/Items.java
new file mode 100644
index 0000000..de63c4e
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/Items.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright © 2018 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openecomp.sdcrests.item.rest;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.openecomp.sdcrests.item.types.ItemActionRequestDto;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.constraints.NotNull;
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import static org.openecomp.sdcrests.common.RestConstants.USER_ID_HEADER_PARAM;
+import static org.openecomp.sdcrests.common.RestConstants.USER_MISSING_ERROR_MSG;
+
+@Path("/v1.0/items")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+@Api(value = "Items")
+@Validated
+public interface Items {
+
+   @GET
+   @Path("/{itemId}")
+   @ApiOperation(value = "Get details of a item")
+   Response getItem(@PathParam("itemId") String itemId,
+                     @NotNull(message = USER_MISSING_ERROR_MSG)
+                     @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+  @PUT
+  @Path("/{itemId}/actions")
+  @ApiOperation(value = "Acts on item version")
+  Response actOn(ItemActionRequestDto request,
+                 @PathParam("itemId") String itemId,
+                 @NotNull(message = USER_MISSING_ERROR_MSG)
+                 @HeaderParam(USER_ID_HEADER_PARAM) String user);
+
+
+
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/mapping/MapItemToDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/mapping/MapItemToDto.java
index 0448407..1886dc4 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/mapping/MapItemToDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/mapping/MapItemToDto.java
@@ -1,6 +1,7 @@
 package org.openecomp.sdcrests.item.rest.mapping;
 
 import org.openecomp.sdc.versioning.types.Item;
+import org.openecomp.sdc.versioning.types.ItemStatus;
 import org.openecomp.sdcrests.item.types.ItemDto;
 import org.openecomp.sdcrests.mapping.MappingBase;
 
@@ -12,5 +13,6 @@
     target.setName(source.getName());
     target.setDescription(source.getDescription());
     target.setOwner(source.getOwner());
+    target.setStatus(source.getStatus().name());
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/services/ItemsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/services/ItemsImpl.java
new file mode 100644
index 0000000..21c1f51
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-services/src/main/java/org/openecomp/sdcrests/item/rest/services/ItemsImpl.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright © 2018 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openecomp.sdcrests.item.rest.services;
+
+import org.openecomp.sdc.activitylog.ActivityLogManager;
+import org.openecomp.sdc.activitylog.ActivityLogManagerFactory;
+import org.openecomp.sdc.activitylog.dao.type.ActivityLogEntity;
+import org.openecomp.sdc.activitylog.dao.type.ActivityType;
+import org.openecomp.sdc.common.errors.Messages;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+import org.openecomp.sdc.notification.dtos.Event;
+import org.openecomp.sdc.notification.factories.NotificationPropagationManagerFactory;
+import org.openecomp.sdc.notification.services.NotificationPropagationManager;
+import org.openecomp.sdc.versioning.ItemManager;
+import org.openecomp.sdc.versioning.ItemManagerFactory;
+import org.openecomp.sdc.versioning.VersioningManager;
+import org.openecomp.sdc.versioning.VersioningManagerFactory;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.openecomp.sdc.versioning.dao.types.VersionStatus;
+import org.openecomp.sdc.versioning.types.Item;
+import org.openecomp.sdc.versioning.types.NotificationEventTypes;
+import org.openecomp.sdcrests.item.rest.Items;
+import org.openecomp.sdcrests.item.rest.mapping.MapItemToDto;
+import org.openecomp.sdcrests.item.types.ItemAction;
+import org.openecomp.sdcrests.item.types.ItemActionRequestDto;
+import org.openecomp.sdcrests.item.types.ItemDto;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Named;
+import javax.ws.rs.core.Response;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_USER;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.*;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.SUBMIT_DESCRIPTION;
+
+@Named
+@Service("items")
+@Scope(value = "prototype")
+public class ItemsImpl implements Items {
+
+    private ItemManager itemManager =
+            ItemManagerFactory.getInstance().createInterface();
+
+    private static ActivityLogManager activityLogManager =
+            ActivityLogManagerFactory.getInstance().createInterface();
+
+    private VersioningManager versioningManager =
+            VersioningManagerFactory.getInstance().createInterface();
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ItemsImpl.class);
+
+    private NotificationPropagationManager notifier =
+            NotificationPropagationManagerFactory.getInstance().createInterface();
+
+    private Map<ItemAction, ActionSideAffects> actionSideAffectsMap = new EnumMap<>(ItemAction.class);
+
+    {
+    actionSideAffectsMap.put(ItemAction.ARCHIVE, new ActionSideAffects(ActivityType.Archive,
+                    NotificationEventTypes.ARCHIVE));
+    actionSideAffectsMap.put(ItemAction.RESTORE, new  ActionSideAffects(ActivityType.Restore,
+                    NotificationEventTypes.RESTORE));
+    }
+
+  @Override
+  public Response actOn(ItemActionRequestDto request, String itemId, String user) {
+
+      Item item  = itemManager.get(itemId);
+      if( item == null){
+          return Response.status(Response.Status.NOT_FOUND)
+                  .entity(new Exception("Item does not exist.")).build();
+      }
+
+      switch (request.getAction()) {
+          case ARCHIVE:
+              itemManager.archive(item);
+                break;
+          case RESTORE:
+              itemManager.restore(item);
+              break;
+          default:
+        }
+
+      actionSideAffectsMap.get(request.getAction()).execute(item,user);
+
+      return Response.ok().build();
+    }
+
+    @Override
+    public Response getItem(String itemId, String user) {
+        Item item  = itemManager.get(itemId);
+        ItemDto itemDto = new MapItemToDto().applyMapping(item, ItemDto.class);
+
+        return Response.ok(itemDto).build();
+    }
+
+    private Version getLatestVersion(String itemId){
+        List<Version> list = versioningManager.list(itemId);
+       return list.stream().max(Version::compareTo).get();
+    }
+
+    private void notifyUsers(String itemId, String itemName, String message,
+                                    String userName, NotificationEventTypes eventType) {
+        Map<String, Object> eventProperties = new HashMap<>();
+        eventProperties.put(ITEM_NAME, itemName == null ? itemManager.get(itemId).getName() : itemName);
+        eventProperties.put(ITEM_ID, itemId);
+
+        eventProperties.put(SUBMIT_DESCRIPTION, message);
+        eventProperties.put(PERMISSION_USER, userName);
+
+        Event syncEvent = new SyncEvent(eventType.getEventName(), itemId, eventProperties, itemId);
+        try {
+            notifier.notifySubscribers(syncEvent, userName);
+        } catch (Exception e) {
+            LOGGER.error("Failed to send sync notification to users subscribed to item '" + itemId);
+        }
+    }
+
+    private class SyncEvent implements Event {
+
+        private String eventType;
+        private String originatorId;
+        private Map<String, Object> attributes;
+        private String entityId;
+
+        SyncEvent(String eventType, String originatorId,
+                  Map<String, Object> attributes, String entityId) {
+            this.eventType = eventType;
+            this.originatorId = originatorId;
+            this.attributes = attributes;
+            this.entityId = entityId;
+        }
+
+        @Override
+        public String getEventType() {
+            return eventType;
+        }
+
+        @Override
+        public String getOriginatorId() {
+            return originatorId;
+        }
+
+        @Override
+        public Map<String, Object> getAttributes() {
+            return attributes;
+        }
+
+        @Override
+        public String getEntityId() {
+            return entityId;
+        }
+
+    }
+
+    private class ActionSideAffects{
+      private ActivityType activityType;
+      private NotificationEventTypes notificationType;
+
+      public ActionSideAffects(ActivityType activityType, NotificationEventTypes notificationType){
+          this.activityType = activityType;
+          this.notificationType = notificationType;
+
+      }
+        public void execute(Item item, String user){
+            notifyUsers(item.getId(), item.getName(), null, user,
+                    this.notificationType);
+            activityLogManager.logActivity(new ActivityLogEntity(item.getId(), getLatestVersion(item.getId()),
+                   this.activityType, user, true, "", ""));
+        }
+    }
+
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemAction.java b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemAction.java
new file mode 100644
index 0000000..55b8cf8
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemAction.java
@@ -0,0 +1,6 @@
+package org.openecomp.sdcrests.item.types;
+
+public enum ItemAction {
+  ARCHIVE,
+  RESTORE
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemActionRequestDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemActionRequestDto.java
new file mode 100644
index 0000000..00032b6
--- /dev/null
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemActionRequestDto.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright © 2018 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.openecomp.sdcrests.item.types;
+
+public class ItemActionRequestDto {
+  private ItemAction action;
+
+  public ItemAction getAction() {
+    return action;
+  }
+
+  public void setAction(ItemAction action) {
+    this.action = action;
+  }
+
+}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemDto.java
index 3ca77c2..22bea01 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/item-rest/item-rest-types/src/main/java/org/openecomp/sdcrests/item/types/ItemDto.java
@@ -6,6 +6,7 @@
   private String name;
   private String description;
   private String owner;
+  private String status;
 
   public String getId() {
     return id;
@@ -46,4 +47,12 @@
   public void setOwner(String owner) {
     this.owner = owner;
   }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/webapp/WEB-INF/beans-services.xml b/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/webapp/WEB-INF/beans-services.xml
index 495cd3f..7710032 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/webapp/WEB-INF/beans-services.xml
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/webapp/WEB-INF/beans-services.xml
@@ -40,6 +40,7 @@
     <bean id = "itemPermissions" class="org.openecomp.sdcrests.itempermissions.rest.services.ItemPermissionsImpl"/>
     <bean id = "notifications" class="org.openecomp.sdcrests.notifications.rest.services.impl.NotificationsImpl"/>
     <bean id = "togglz" class="org.openecomp.sdcrests.togglz.rest.services.TogglzFeaturesImpl"/>
+    <bean id = "items" class="org.openecomp.sdcrests.item.rest.services.ItemsImpl"/>
 
     <!-- RESTful Services -->
     <jaxrs:server id="restContainer" address="/">
@@ -73,6 +74,7 @@
             <ref bean="itemPermissions"/>
             <ref bean="notifications"/>
             <ref bean="togglz"/>
+            <ref bean="items"/>
         </jaxrs:serviceBeans>
 
         <jaxrs:providers>
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/VendorLicenseModels.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/VendorLicenseModels.java
index dc17b49..f27de5e 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/VendorLicenseModels.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/VendorLicenseModels.java
@@ -57,12 +57,15 @@
   @ApiOperation(value = "List vendor license models",
       response = ItemDto.class,
       responseContainer = "List")
-  Response listLicenseModels(@ApiParam(value =
-      "Currently supported value: 'Certified' - only vendor License models with final versions "
-          + "will be return - with their latest final version")
-                             @QueryParam("versionFilter") String versionStatus,
-                             @NotNull(message = USER_MISSING_ERROR_MSG)
-                             @HeaderParam(RestConstants.USER_ID_HEADER_PARAM) String user);
+  Response listLicenseModels(@ApiParam(value = "Filter to return only Vendor License Models with at" +
+                            " least one version at this status. Currently supported values: 'Certified' , 'Draft'")
+                            @QueryParam("versionFilter") String versionStatus,
+                            @ApiParam(value = "Filter to only return Vendor License Models at this status." +
+                            "Currently supported values: 'ACTIVE' , 'ARCHIVED'." +
+                            "Default value = 'ACTIVE'.")
+                            @QueryParam("Status") String itemStatus,
+                            @NotNull(message = USER_MISSING_ERROR_MSG)
+                            @HeaderParam(RestConstants.USER_ID_HEADER_PARAM) String user);
 
   @POST
   @Path("/")
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java
index b9c2ea3..2f64a50 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-license-rest/vendor-license-rest-services/src/main/java/org/openecomp/sdcrests/vendorlicense/rest/services/VendorLicenseModelsImpl.java
@@ -52,6 +52,7 @@
 import org.openecomp.sdcrests.item.rest.mapping.MapVersionToDto;
 import org.openecomp.sdcrests.item.types.ItemCreationDto;
 import org.openecomp.sdcrests.item.types.ItemDto;
+import org.openecomp.sdc.versioning.types.ItemStatus;
 import org.openecomp.sdcrests.item.types.VersionDto;
 import org.openecomp.sdcrests.vendorlicense.rest.VendorLicenseModels;
 import org.openecomp.sdcrests.vendorlicense.rest.mapping.MapVendorLicenseModelEntityToDto;
@@ -106,20 +107,8 @@
       .createInterface());
 
   @Override
-  public Response listLicenseModels(String versionStatus, String user) {
-    Predicate<Item> itemPredicate;
-    if (VersionStatus.Certified.name().equals(versionStatus)) {
-      itemPredicate = item -> ItemType.vlm.name().equals(item.getType()) &&
-          item.getVersionStatusCounters().containsKey(VersionStatus.Certified);
-
-    } else if (VersionStatus.Draft.name().equals(versionStatus)) {
-      itemPredicate = item -> ItemType.vlm.name().equals(item.getType()) &&
-          item.getVersionStatusCounters().containsKey(VersionStatus.Draft) &&
-          userHasPermission(item.getId(), user);
-
-    } else {
-      itemPredicate = item -> ItemType.vlm.name().equals(item.getType());
-    }
+  public Response listLicenseModels(String versionStatus,String itemStatus, String user) {
+    Predicate<Item> itemPredicate = createItemPredicate(versionStatus, itemStatus, user);
 
     GenericCollectionWrapper<ItemDto> results = new GenericCollectionWrapper<>();
     MapItemToDto mapper = new MapItemToDto();
@@ -135,6 +124,7 @@
     Item item = new Item();
     item.setType(ItemType.vlm.name());
     item.setOwner(user);
+    item.setStatus(ItemStatus.ACTIVE);
     item.setName(request.getVendorName());
     item.setDescription(request.getDescription());
 
@@ -219,7 +209,7 @@
       permissionsManager.deleteItemPermissions(vlmId);
       uniqueValueUtil
           .deleteUniqueValue(VendorLicenseConstants.UniqueValues.VENDOR_NAME, vlm.getName());
-      notifyUsers(vlmId, vlm.getName(), null, "VLM was deleted", user,
+      notifyUsers(vlmId, vlm.getName(), null, null, user,
           NotificationEventTypes.DELETE);
 
       return Response.ok().build();
@@ -334,4 +324,28 @@
     return (permission != null && permission
         .matches(PermissionTypes.Contributor.name() + "|" + PermissionTypes.Owner.name()));
   }
+
+  private Predicate<Item> createItemPredicate(String versionStatus,
+                                              String itemStatus,
+                                              String user) {
+    Predicate<Item> itemPredicate = item -> ItemType.vlm.name().equals(item.getType());
+
+    if (ItemStatus.ARCHIVED.name().equals(itemStatus)) {
+      itemPredicate = itemPredicate.and(item -> ItemStatus.ARCHIVED.equals(item.getStatus()));
+    } else {
+      itemPredicate = itemPredicate.and(item -> ItemStatus.ACTIVE.equals(item.getStatus()));
+
+      if (VersionStatus.Certified.name().equals(versionStatus)) {
+        itemPredicate = itemPredicate
+                .and(item -> item.getVersionStatusCounters().containsKey(VersionStatus.Certified));
+
+      } else if (VersionStatus.Draft.name().equals(versionStatus)) {
+        itemPredicate = itemPredicate.and(
+                item -> item.getVersionStatusCounters().containsKey(VersionStatus.Draft)
+                        &&  userHasPermission(item.getId(), user));
+      }
+    }
+    return itemPredicate;
+  }
+
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/VendorSoftwareProducts.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/VendorSoftwareProducts.java
index 60c68ef..996b389 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/VendorSoftwareProducts.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/VendorSoftwareProducts.java
@@ -69,10 +69,13 @@
   @Path("/")
   @ApiOperation(value = "Get list of vendor software products and their description",
       responseContainer = "List")
-  Response listVsps(@ApiParam(
-      value = "Currently supported values: 'Certified' - only vendor software products with final "
-          + " version will be return - with their latest final version")
+  Response listVsps(@ApiParam(value = "Filter to return only Vendor Software Products with at" +
+                    " least one version at this status. Currently supported values: 'Certified' , 'Draft'")
                     @QueryParam("versionFilter") String versionStatus,
+                    @ApiParam(value = "Filter to only return Vendor Software Products at this status." +
+                    "Currently supported values: 'ACTIVE' , 'ARCHIVED'." +
+                    "Default value = 'ACTIVE'.")
+                    @QueryParam("Status") String itemStatus,
                     @NotNull(message = USER_MISSING_ERROR_MSG)
                     @HeaderParam(USER_ID_HEADER_PARAM) String user);
 
@@ -105,7 +108,10 @@
   @ApiOperation(value = "Get list of translated CSAR files details",
       response = PackageInfoDto.class,
       responseContainer = "List")
-  Response listPackages(@ApiParam("Category") @QueryParam("category") String category,
+  Response listPackages(@ApiParam("Vendor Software Product status filter. " +
+                        "Currently supported values: 'ACTIVE', 'ARCHIVED'")
+                        @QueryParam("Status") String status,
+                        @ApiParam("Category") @QueryParam("category") String category,
                         @ApiParam("Sub-category") @QueryParam("subCategory") String subCategory,
                         @NotNull(message = USER_MISSING_ERROR_MSG)
                         @HeaderParam(USER_ID_HEADER_PARAM) String user);
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapItemToVspDetailsDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapItemToVspDetailsDto.java
index caa0539..93ee159 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapItemToVspDetailsDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/mapping/MapItemToVspDetailsDto.java
@@ -15,5 +15,6 @@
     target.setVendorName((String) source.getProperties().get(VspItemProperty.VENDOR_NAME));
     target.setOnboardingMethod((String) source.getProperties().get(VspItemProperty.ONBOARDING_METHOD));
     target.setOwner(source.getOwner());
+    target.setStatus(source.getStatus().name());
   }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java
index be196bf..37804ff 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/VendorSoftwareProductsImpl.java
@@ -16,6 +16,29 @@
 
 package org.openecomp.sdcrests.vsp.rest.services;
 
+import static javax.ws.rs.core.HttpHeaders.CONTENT_DISPOSITION;
+import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_USER;
+import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME;
+import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.VALIDATION_VSP_NAME;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.ITEM_ID;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.ITEM_NAME;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.SUBMIT_DESCRIPTION;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.VERSION_ID;
+import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.VERSION_NAME;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import javax.inject.Named;
+import javax.ws.rs.core.Response;
 import org.apache.commons.collections4.MapUtils;
 import org.openecomp.core.dao.UniqueValueDaoFactory;
 import org.openecomp.core.util.UniqueValueUtil;
@@ -62,6 +85,7 @@
 import org.openecomp.sdc.versioning.types.NotificationEventTypes;
 import org.openecomp.sdcrests.item.rest.mapping.MapVersionToDto;
 import org.openecomp.sdcrests.item.types.ItemCreationDto;
+import org.openecomp.sdc.versioning.types.ItemStatus;
 import org.openecomp.sdcrests.item.types.VersionDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.PackageInfoDto;
 import org.openecomp.sdcrests.vendorsoftwareproducts.types.QuestionnaireResponseDto;
@@ -85,29 +109,6 @@
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Service;
 
-import javax.inject.Named;
-import javax.ws.rs.core.Response;
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.function.Predicate;
-
-import static javax.ws.rs.core.HttpHeaders.CONTENT_DISPOSITION;
-import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_USER;
-import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME;
-import static org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants.VALIDATION_VSP_NAME;
-import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.ITEM_ID;
-import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.ITEM_NAME;
-import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.SUBMIT_DESCRIPTION;
-import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.VERSION_ID;
-import static org.openecomp.sdc.versioning.VersioningNotificationConstansts.VERSION_NAME;
-
 @Named
 @Service("vendorSoftwareProducts")
 @Scope(value = "prototype")
@@ -166,6 +167,7 @@
     Item item = new MapVspDescriptionDtoToItem().applyMapping(vspRequestDto, Item.class);
     item.setType(ItemType.vsp.name());
     item.setOwner(user);
+    item.setStatus(ItemStatus.ACTIVE);
     item.addProperty(VspItemProperty.ONBOARDING_METHOD, onboardingMethod.name());
 
     uniqueValueUtil.validateUniqueValue(VENDOR_SOFTWARE_PRODUCT_NAME, item.getName());
@@ -197,27 +199,14 @@
     throw new CoreException(onboardingMethodUpdateErrorCode, e);
   }
 
-  @Override
-  public Response listVsps(String versionStatus, String user) {
-    Predicate<Item> itemPredicate;
-    if (VersionStatus.Certified.name().equals(versionStatus)) {
-      itemPredicate = item -> ItemType.vsp.name().equals(item.getType())
-          && item.getVersionStatusCounters().containsKey(VersionStatus.Certified);
+    @Override
+    public Response listVsps(String versionStatus, String itemStatus, String user) {
 
-    } else if (VersionStatus.Draft.name().equals(versionStatus)) {
-      itemPredicate = item -> ItemType.vsp.name().equals(item.getType())
-          && item.getVersionStatusCounters().containsKey(VersionStatus.Draft)
-          && userHasPermission(item.getId(), user);
+      GenericCollectionWrapper<VspDetailsDto> results = new GenericCollectionWrapper<>();
+      MapItemToVspDetailsDto mapper = new MapItemToVspDetailsDto();
 
-    } else {
-      itemPredicate = item -> ItemType.vsp.name().equals(item.getType());
-    }
-
-    GenericCollectionWrapper<VspDetailsDto> results = new GenericCollectionWrapper<>();
-    MapItemToVspDetailsDto mapper = new MapItemToVspDetailsDto();
-    itemManager.list(itemPredicate).stream()
-        .sorted((o1, o2) -> o2.getModificationTime().compareTo(o1.getModificationTime()))
-        .forEach(vspItem -> results.add(mapper.applyMapping(vspItem, VspDetailsDto.class)));
+      getVspList(versionStatus,itemStatus,user)
+              .forEach(vspItem -> results.add(mapper.applyMapping(vspItem, VspDetailsDto.class)));
 
     return Response.ok(results).build();
   }
@@ -299,7 +288,7 @@
       itemManager.delete(vsp);
       permissionsManager.deleteItemPermissions(vspId);
       uniqueValueUtil.deleteUniqueValue(VENDOR_SOFTWARE_PRODUCT_NAME, vsp.getName());
-      notifyUsers(vspId, vsp.getName(), null, "VSP was deleted", user,
+      notifyUsers(vspId, vsp.getName(), null, null, user,
           NotificationEventTypes.DELETE);
 
       return Response.ok().build();
@@ -386,10 +375,19 @@
   }
 
   @Override
-  public Response listPackages(String category, String subCategory, String user) {
+  public Response listPackages(String status, String category, String subCategory, String user) {
+
+    List<String> VspsIds =
+            getVspList(null, status != null ? ItemStatus.valueOf(status).name(): null, user)
+            .stream().map(Item::getId).collect(Collectors.toList());
+
     List<PackageInfo> packageInfoList =
         vendorSoftwareProductManager.listPackages(category, subCategory);
 
+    packageInfoList = packageInfoList.stream().
+            filter(packageInfo -> VspsIds.contains(packageInfo.getVspId()))
+            .collect(Collectors.toList());
+
     GenericCollectionWrapper<PackageInfoDto> results = new GenericCollectionWrapper<>();
     MapPackageInfoToPackageInfoDto mapper = new MapPackageInfoToPackageInfoDto();
 
@@ -611,4 +609,38 @@
     return permission != null && permission
         .matches(PermissionTypes.Contributor.name() + "|" + PermissionTypes.Owner.name());
   }
+
+
+  private Predicate<Item> createItemPredicate(String versionStatus,
+                                              String itemStatus,
+                                              String user) {
+    Predicate<Item> itemPredicate = item -> ItemType.vsp.name().equals(item.getType());
+
+    if (ItemStatus.ARCHIVED.name().equals(itemStatus)) {
+      itemPredicate = itemPredicate.and(item -> ItemStatus.ARCHIVED.equals(item.getStatus()));
+    } else {
+      itemPredicate = itemPredicate.and(item -> ItemStatus.ACTIVE.equals(item.getStatus()));
+
+      if (VersionStatus.Certified.name().equals(versionStatus)) {
+        itemPredicate = itemPredicate
+                .and(item -> item.getVersionStatusCounters().containsKey(VersionStatus.Certified));
+
+      } else if (VersionStatus.Draft.name().equals(versionStatus)) {
+        itemPredicate = itemPredicate.and(
+                item -> item.getVersionStatusCounters().containsKey(VersionStatus.Draft)
+                        && userHasPermission(item.getId(), user));
+      }
+    }
+    return itemPredicate;
+  }
+
+  private List<Item> getVspList(String versionStatus, String itemStatus, String user) {
+
+    Predicate<Item> itemPredicate = createItemPredicate(versionStatus, itemStatus, user);
+
+    return itemManager.list(itemPredicate).stream()
+            .sorted((o1, o2) -> o2.getModificationTime().compareTo(o1.getModificationTime())).
+            collect(Collectors.toList());
+
+  }
 }
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspDetailsDto.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspDetailsDto.java
index 745b930..38e70a9 100644
--- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspDetailsDto.java
+++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/VspDetailsDto.java
@@ -36,6 +36,7 @@
   private String onboardingOrigin;
   private String networkPackageName;
   private String owner;
+  private String status;
 
   public String getId() {
     return id;
@@ -92,4 +93,12 @@
   public void setOwner(String owner) {
     this.owner = owner;
   }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
 }
diff --git a/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/errors/Messages.java b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/errors/Messages.java
index 2163669..0bf8796 100644
--- a/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/errors/Messages.java
+++ b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/errors/Messages.java
@@ -42,6 +42,7 @@
   DELETE_VSP_ERROR("VSP has been certified and cannot be deleted."),
   DELETE_VLM_ERROR("VLM has been certified and cannot be deleted."),
 
+
   ZIP_SHOULD_NOT_CONTAIN_FOLDERS("Zip file should not contain folders"),
   VES_ZIP_SHOULD_CONTAIN_YML_ONLY(
       "Wrong VES EVENT Artifact was uploaded - all files contained in Artifact must be YAML files" +
diff --git a/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/ToggleableFeature.java b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/ToggleableFeature.java
index c3cac50..5080e00 100644
--- a/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/ToggleableFeature.java
+++ b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/ToggleableFeature.java
@@ -10,7 +10,13 @@
   VLAN_TAGGING,
 
   @Label ("Annotations")
-  ANNOTATIONS;
+  ANNOTATIONS,
+
+  @Label("Archive Item")
+  ARCHIVE_ITEM,
+
+  @Label("Filter")
+  FILTER;
 
   public boolean isActive() {
     return FeatureContext.getFeatureManager().isActive(this);
diff --git a/openecomp-be/lib/openecomp-sdc-activity-log-lib/openecomp-sdc-activity-log-api/src/main/java/org/openecomp/sdc/activitylog/dao/type/ActivityType.java b/openecomp-be/lib/openecomp-sdc-activity-log-lib/openecomp-sdc-activity-log-api/src/main/java/org/openecomp/sdc/activitylog/dao/type/ActivityType.java
index 620113e..3f5b1b6 100644
--- a/openecomp-be/lib/openecomp-sdc-activity-log-lib/openecomp-sdc-activity-log-api/src/main/java/org/openecomp/sdc/activitylog/dao/type/ActivityType.java
+++ b/openecomp-be/lib/openecomp-sdc-activity-log-lib/openecomp-sdc-activity-log-api/src/main/java/org/openecomp/sdc/activitylog/dao/type/ActivityType.java
@@ -2,6 +2,8 @@
 
 public enum ActivityType {
   Create,
+  Archive,
+  Restore,
   Create_Version,
   Commit,
   Submit,
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/AsdcItemManager.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/AsdcItemManager.java
index a4ea65f..ad3d1f3 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/AsdcItemManager.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/AsdcItemManager.java
@@ -16,25 +16,7 @@
 
 package org.openecomp.sdc.versioning;
 
-import java.util.Collection;
-import java.util.function.Predicate;
-import org.openecomp.sdc.versioning.dao.types.VersionStatus;
-import org.openecomp.sdc.versioning.types.Item;
+public interface AsdcItemManager extends ItemManager {
 
-public interface AsdcItemManager {
-
-  Collection<Item> list(Predicate<Item> predicate);
-
-  Item get(String itemId);
-
-  Item create(Item item);
-
-  void updateVersionStatus(String itemId, VersionStatus addedVersionStatus,
-      VersionStatus removedVersionStatus);
-
-  void updateOwner(String itemId, String owner);
-
-  void updateName(String itemId, String name);
-
-  void delete(Item item);
+    void updateOwner(String itemId, String owner);
 }
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/ItemManager.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/ItemManager.java
index 41a2c12..0448ee7 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/ItemManager.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/ItemManager.java
@@ -32,9 +32,11 @@
   void updateVersionStatus(String itemId, VersionStatus addedVersionStatus,
       VersionStatus removedVersionStatus);
 
-  void delete(Item item);
+  void archive(Item item);
 
-  void updateName(String itemId, String name);
+  void restore(Item item);
+
+  void delete(Item item);
 
   void update(Item item);
 }
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/dao/types/Version.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/dao/types/Version.java
index b1f0b71..4d4c194 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/dao/types/Version.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/dao/types/Version.java
@@ -209,7 +209,7 @@
     return major == version.major && minor == version.minor;
   }
 
-  public int compateTo(Version other){
+  public int compareTo(Version other){
     if (this.major>other.major) {
       return 1;
     } else if(this.major<other.major){
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/Item.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/Item.java
index d572373..161c22c 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/Item.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/Item.java
@@ -12,6 +12,7 @@
   private String type;
   private String name;
   private String owner;
+  private ItemStatus status;
   private String description;
   private Map<String, Object> properties = new HashMap<>();
   private Map<VersionStatus, Integer> versionStatusCounters = new EnumMap<>(VersionStatus.class);
@@ -50,6 +51,14 @@
     this.owner = owner;
   }
 
+  public ItemStatus getStatus() {
+    return status;
+  }
+
+  public void setStatus(ItemStatus status) {
+    this.status = status;
+  }
+
   public String getDescription() {
     return description;
   }
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/ItemStatus.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/ItemStatus.java
new file mode 100644
index 0000000..413c5a7
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/ItemStatus.java
@@ -0,0 +1,6 @@
+package org.openecomp.sdc.versioning.types;
+
+public enum ItemStatus {
+    ACTIVE,
+    ARCHIVED
+}
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/NotificationEventTypes.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/NotificationEventTypes.java
index 336db64..da53d8d 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/NotificationEventTypes.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-api/src/main/java/org/openecomp/sdc/versioning/types/NotificationEventTypes.java
@@ -7,6 +7,8 @@
 public enum NotificationEventTypes {
     SUBMIT("submit"),
     DELETE("delete"),
+    ARCHIVE("archive"),
+    RESTORE("restore"),
     COMMIT("commit");
 
     private String eventName;
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImpl.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImpl.java
index 5a212af..665bf06 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImpl.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImpl.java
@@ -7,6 +7,7 @@
 import org.openecomp.sdc.versioning.dao.ItemDao;
 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
 import org.openecomp.sdc.versioning.types.Item;
+import org.openecomp.sdc.versioning.types.ItemStatus;
 
 import java.util.Collection;
 import java.util.Map;
@@ -67,6 +68,12 @@
 
     item.setCreationTime(zusammenItem.getCreationTime());
     item.setModificationTime(zusammenItem.getModificationTime());
+
+    if(item.getStatus() == null){
+      item.setStatus(ItemStatus.ACTIVE);
+      update(item);
+    }
+
     return item;
   }
 
@@ -78,6 +85,9 @@
       case InfoPropertyName.ITEM_OWNER:
         item.setOwner((String) propertyValue);
         break;
+      case InfoPropertyName.ITEM_STATUS:
+        item.setStatus(ItemStatus.valueOf((String)propertyValue));
+        break;
       case InfoPropertyName.ITEM_VERSIONS_STATUSES:
         for (Map.Entry<String, Number> statusCounter :
             ((Map<String, Number>) propertyValue).entrySet()) {
@@ -96,6 +106,9 @@
     info.setDescription(item.getDescription());
     info.addProperty(InfoPropertyName.ITEM_TYPE, item.getType());
     info.addProperty(InfoPropertyName.ITEM_OWNER,item.getOwner());
+    if (item.getStatus() != null) {
+      info.addProperty(InfoPropertyName.ITEM_STATUS, item.getStatus());
+    }
     info.addProperty(InfoPropertyName.ITEM_VERSIONS_STATUSES, item.getVersionStatusCounters());
     item.getProperties().entrySet()
         .forEach(property -> info.addProperty(property.getKey(), property.getValue()));
@@ -106,6 +119,7 @@
     private static final String ITEM_TYPE = "item_type";
     private static final String ITEM_VERSIONS_STATUSES = "item_versions_statuses";
     private static final String ITEM_OWNER = "Owner";
+    private static final String ITEM_STATUS = "status";
 
     private InfoPropertyName() {
       throw new IllegalStateException("Constants class");
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/impl/ItemManagerImpl.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/impl/ItemManagerImpl.java
index dadf456..3b7b018 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/impl/ItemManagerImpl.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/main/java/org/openecomp/sdc/versioning/impl/ItemManagerImpl.java
@@ -19,10 +19,14 @@
 import java.util.Collection;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
+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.versioning.ItemManager;
 import org.openecomp.sdc.versioning.dao.ItemDao;
 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
 import org.openecomp.sdc.versioning.types.Item;
+import org.openecomp.sdc.versioning.types.ItemStatus;
 
 public class ItemManagerImpl implements ItemManager {
 
@@ -72,17 +76,34 @@
   }
 
   @Override
-  public void updateName(String itemId, String name) {
-    Item item = get(itemId);
-    if (item == null) {
-      return;
+  public void archive(Item item) {
+
+    if (item.getStatus() == ItemStatus.ARCHIVED) {
+      throw new CoreException(new ErrorCode.ErrorCodeBuilder()
+          .withCategory(ErrorCategory.APPLICATION)
+          .withMessage(String.format("Archive item failed, item %s is already Archived", item.getId()))
+          .build());
     }
 
-    item.setName(name);
+    item.setStatus(ItemStatus.ARCHIVED);
     itemDao.update(item);
   }
 
   @Override
+  public void restore(Item item) {
+
+      if (item.getStatus() == ItemStatus.ACTIVE) {
+          throw new CoreException(new ErrorCode.ErrorCodeBuilder()
+                  .withCategory(ErrorCategory.APPLICATION)
+                  .withMessage(String.format("Restore item failed, item %s is already Active", item.getId()))
+                  .build());
+      }
+
+      item.setStatus(ItemStatus.ACTIVE);
+      itemDao.update(item);
+    }
+
+  @Override
   public void update(Item item) {
     itemDao.update(item);
   }
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImplTest.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImplTest.java
index bfa660a..e67dc57 100644
--- a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImplTest.java
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/dao/impl/zusammen/ItemZusammenDaoImplTest.java
@@ -10,6 +10,7 @@
 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
 import org.openecomp.sdc.versioning.types.Item;
+import org.openecomp.sdc.versioning.types.ItemStatus;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -28,6 +29,7 @@
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
 import static org.openecomp.sdc.versioning.dao.impl.zusammen.TestUtil.createZusammenContext;
+import static org.testng.Assert.assertEquals;
 
 public class ItemZusammenDaoImplTest {
 
@@ -114,6 +116,8 @@
 
     Assert.assertNotNull(item);
     assertItemEquals(item, toBeReturned);
+    assertEquals(item.getStatus(), ItemStatus.ACTIVE);
+
   }
 
   @Test
diff --git a/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/impl/ItemManagerImplTest.java b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/impl/ItemManagerImplTest.java
new file mode 100644
index 0000000..fadfe36
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-versioning-lib/openecomp-sdc-versioning-core/src/test/java/org/openecomp/sdc/versioning/impl/ItemManagerImplTest.java
@@ -0,0 +1,96 @@
+package org.openecomp.sdc.versioning.impl;
+
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.itempermissions.PermissionsServices;
+import org.openecomp.sdc.notification.services.SubscriptionService;
+import org.openecomp.sdc.versioning.dao.ItemDao;
+import org.openecomp.sdc.versioning.dao.types.VersionStatus;
+import org.openecomp.sdc.versioning.types.Item;
+import org.openecomp.sdc.versioning.types.ItemStatus;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import static org.mockito.Mockito.verify;
+import static org.testng.Assert.assertEquals;
+
+public class ItemManagerImplTest {
+
+    private static final String USER = "user1";
+    private static final String ITEM_ID = "item1";
+    private static final String ITEM_NAME = "item 1 name";
+    private static final String ITEM_TYPE_A = "A";
+    private static final String ITEM_TYPE_B = "B";
+    private static final String tenant = "dox";
+    @Mock
+    private ItemDao itemDao;
+    @Mock
+    private PermissionsServices permissionsServices;
+    @Mock
+    private SubscriptionService subscriptionService;
+    @InjectMocks
+    private ItemManagerImpl itemManager;
+
+    @BeforeMethod
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @AfterMethod
+    public void tearDown(){
+        itemManager = null;
+    }
+
+    @Test
+    public void ArchiveTest(){
+
+        Item item  = createItem(ITEM_ID,ITEM_NAME,ITEM_TYPE_A);
+        itemManager.archive(item);
+
+        verify(itemDao).update(item);
+        assertEquals(item.getStatus(), ItemStatus.ARCHIVED);
+    }
+
+    @Test(expectedExceptions = CoreException.class,expectedExceptionsMessageRegExp =
+            "Archive item failed, item .* is already Archived")
+    public void ArchiveTestNegative(){
+
+        Item item  = createItem(ITEM_ID,ITEM_NAME,ITEM_TYPE_B);
+        item.setStatus(ItemStatus.ARCHIVED);
+        itemManager.archive(item);
+
+    }
+
+    @Test
+    public void RestoreTest(){
+
+        Item item  = createItem(ITEM_ID,ITEM_NAME,ITEM_TYPE_A);
+        item.setStatus(ItemStatus.ARCHIVED);
+        itemManager.restore(item);
+
+        verify(itemDao).update(item);
+        assertEquals(item.getStatus(), ItemStatus.ACTIVE);
+    }
+
+    @Test(expectedExceptions = CoreException.class,expectedExceptionsMessageRegExp =
+            "Restore item failed, item .* is already Active")
+    public void RestoreTestNegative(){
+
+        Item item  = createItem(ITEM_ID,ITEM_NAME,ITEM_TYPE_B);
+        item.setStatus(ItemStatus.ACTIVE);
+        itemManager.restore(item);
+
+    }
+
+
+    private Item createItem(String id, String name, String type) {
+        Item item = new Item();
+        item.setId(id);
+        item.setName(name);
+        item.setType(type);
+        return item;
+    }
+}
diff --git a/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/HealAll.java b/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/HealAll.java
index 8bcfcba..d6344f7 100644
--- a/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/HealAll.java
+++ b/openecomp-be/tools/zusammen-tools/src/main/java/org/openecomp/core/tools/commands/HealAll.java
@@ -99,7 +99,7 @@
       return versionInfoEntity.getCandidate().getVersion();
     } else if (!CollectionUtils.isEmpty(versionInfoEntity.getViewableVersions())) {
 
-      return versionInfoEntity.getViewableVersions().stream().max(Version::compateTo)
+      return versionInfoEntity.getViewableVersions().stream().max(Version::compareTo)
           .orElse(new Version());
     }
     return versionInfoEntity.getActiveVersion();