Revert "Interface operation feature enhancements"
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / externalapi / servlet / ArtifactExternalServlet.java
index 70225c0..03c5e0f 100644 (file)
@@ -7,9 +7,9 @@
  * 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.
 package org.openecomp.sdc.be.externalapi.servlet;
 
 import com.jcabi.aspects.Loggable;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.Map;
+
 import fj.data.Either;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -31,14 +39,17 @@ import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic;
 import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic.ArtifactOperationEnum;
+import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
 import org.openecomp.sdc.be.config.BeEcompErrorManager;
 import org.openecomp.sdc.be.dao.api.ActionStatus;
 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
 import org.openecomp.sdc.be.model.ArtifactDefinition;
+import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
+import org.openecomp.sdc.be.resources.data.auditing.model.DistributionData;
+import org.openecomp.sdc.be.resources.data.auditing.model.ResourceCommonInfo;
 import org.openecomp.sdc.be.servlets.AbstractValidationsServlet;
 import org.openecomp.sdc.be.servlets.RepresentationUtils;
 import org.openecomp.sdc.common.api.Constants;
-import org.openecomp.sdc.common.datastructure.AuditingFieldsKeysEnum;
 import org.openecomp.sdc.common.datastructure.Wrapper;
 import org.openecomp.sdc.common.util.GeneralUtility;
 import org.openecomp.sdc.exception.ResponseFormat;
@@ -56,16 +67,18 @@ import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import java.io.ByteArrayInputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.Map;
 /**
  * This Servlet serves external users operations on artifacts.
- * 
+ *
  * @author mshitrit
  *
  */
@@ -75,6 +88,8 @@ import java.util.Map;
 @Singleton
 public class ArtifactExternalServlet extends AbstractValidationsServlet {
 
+    private static final String FAILED_TO_UPDATE_ARTIFACT = "failed to update artifact";
+
     @Context
     private HttpServletRequest request;
 
@@ -82,6 +97,90 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
 
     private static String startLog = "Start handle request of ";
 
+    @POST
+    @Path("/{assetType}/{uuid}/interfaces/{operationUUID}/artifacts/{artifactUUID}")
+    @Produces(MediaType.APPLICATION_JSON)
+    @ApiOperation(value = "uploads of artifact to VF operation workflow", httpMethod = "POST", notes = "uploads of artifact to VF operation workflow")
+    @ApiResponses(value = {
+            @ApiResponse(code = 200, message = "Artifact uploaded", response = ArtifactDefinition.class),
+            @ApiResponse(code = 400, message = "Missing  'X-ECOMP-InstanceID'  HTTP header - POL5001"),
+            @ApiResponse(code = 401, message = "ECOMP component  should authenticate itself  and  to  re-send  again  HTTP  request  with its Basic  Authentication credentials - POL5002"),
+            @ApiResponse(code = 403, message = "ECOMP component is not authorized - POL5003"),
+            @ApiResponse(code = 404, message = "Specified resource is not found - SVC4063"),
+            @ApiResponse(code = 405, message = "Method  Not Allowed: Invalid HTTP method type used (PUT,DELETE,POST will be rejected) - POL4050"),
+            @ApiResponse(code = 500, message = "The GET request failed either due to internal SDC problem or Cambria Service failure. ECOMP Component should continue the attempts to get the needed information - POL5000"),
+            @ApiResponse(code = 400, message = "Invalid artifactType was defined as input - SVC4122"),
+            @ApiResponse(code = 400, message = "Artifact type (mandatory field) is missing in request - SVC4124"),
+            @ApiResponse(code = 400, message = "Artifact name given in input already exists in the context of the asset - SVC4125"),
+            @ApiResponse(code = 400, message = "Invalid MD5 header - SVC4127"),
+            @ApiResponse(code = 400, message = "Artifact name is missing in input - SVC4128"),
+            @ApiResponse(code = 400, message = "Asset is being edited by different user. Only one user can checkout and edit an asset on given time. The asset will be available for checkout after the other user will checkin the asset - SVC4086"),
+            @ApiResponse(code = 400, message = "Restricted Operation – the user provided does not have role of Designer or the asset is being used by another designer - SVC4301")})
+    @ApiImplicitParams({@ApiImplicitParam(required = true, dataType = "org.openecomp.sdc.be.model.ArtifactDefinition", paramType = "body", value = "json describe the artifact")})
+    public Response uploadInterfaceOperationArtifact(
+            @ApiParam(value = "Determines the format of the body of the request", required = true) @HeaderParam(value = HttpHeaders.CONTENT_TYPE) String contenType,
+            @ApiParam(value = "The value for this header must be the MD5 checksum over the whole json body", required = true) @HeaderParam(value = Constants.MD5_HEADER) String checksum,
+            @ApiParam(value = "The user ID of the DCAE Designer. This user must also have Designer role in SDC", required = true) @HeaderParam(value = Constants.USER_ID_HEADER) final String userId,
+            @ApiParam(value = "X-ECOMP-RequestID header", required = false) @HeaderParam(value = Constants.X_ECOMP_REQUEST_ID_HEADER) String requestId,
+            @ApiParam(value = "X-ECOMP-InstanceID header", required = true) @HeaderParam(value = Constants.X_ECOMP_INSTANCE_ID_HEADER) final String instanceIdHeader,
+            @ApiParam(value = "Determines the format of the body of the response", required = false) @HeaderParam(value = Constants.ACCEPT_HEADER) String accept,
+            @ApiParam(value = "The username and password", required = true) @HeaderParam(value = Constants.AUTHORIZATION_HEADER) String authorization,
+            @ApiParam(value = "Asset type") @PathParam("assetType") String assetType,
+            @ApiParam(value = "The uuid of the asset as published in the metadata", required = true)@PathParam("uuid") final String uuid,
+            @ApiParam(value = "The uuid of the operation", required = true)@PathParam("operationUUID") final String operationUUID,
+            @ApiParam(value = "The uuid of the artifact", required = true)@PathParam("artifactUUID") final String artifactUUID,
+            @ApiParam( hidden = true) String data) {
+        Wrapper<Response> responseWrapper = new Wrapper<>();
+        ResponseFormat responseFormat = null;
+        String requestURI = request.getRequestURI();
+        String url = request.getMethod() + " " + requestURI;
+        log.debug("{} {}", startLog, url);
+        ResourceCommonInfo resourceCommonInfo = new ResourceCommonInfo(assetType);
+        ArtifactDefinition artifactDefinition = null;
+
+        if (responseWrapper.isEmpty() && (instanceIdHeader == null || instanceIdHeader.isEmpty())) {
+            log.debug("updateArtifact: Missing X-ECOMP-InstanceID header");
+            responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.MISSING_X_ECOMP_INSTANCE_ID);
+            responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
+        }
+        if (responseWrapper.isEmpty() && (userId == null || userId.isEmpty())) {
+            log.debug("updateArtifact: Missing USER_ID");
+            responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.MISSING_USER_ID);
+            responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
+        }
+        try {
+            if (responseWrapper.isEmpty()) {
+                ServletContext context = request.getSession().getServletContext();
+                ArtifactsBusinessLogic artifactsLogic = getArtifactBL(context);
+                Either<ArtifactDefinition, ResponseFormat> uploadArtifactEither = artifactsLogic
+                        .updateArtifactOnInterfaceOperationByResourceUUID(data, request, ComponentTypeEnum
+                                        .findByParamName(assetType), uuid,  artifactUUID, operationUUID,
+                        resourceCommonInfo, artifactsLogic.new ArtifactOperationInfo(true, false, ArtifactOperationEnum.UPDATE));
+                if (uploadArtifactEither.isRight()) {
+                    log.debug(FAILED_TO_UPDATE_ARTIFACT);
+                    responseFormat = uploadArtifactEither.right().value();
+                    responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
+                } else {
+                    artifactDefinition=uploadArtifactEither.left().value();
+                    Object representation = RepresentationUtils.toRepresentation(artifactDefinition);
+                    Map<String, String> headers = new HashMap<>();
+                    headers.put(Constants.MD5_HEADER, GeneralUtility.calculateMD5Base64EncodedByString((String) representation));
+                    responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.OK);
+                    responseWrapper.setInnerElement(buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), representation, headers));
+                }
+            }
+        } catch (Exception e) {
+            final String message = "failed to update artifact on a resource or service";
+            BeEcompErrorManager.getInstance().logBeRestApiGeneralError(message);
+            log.debug(message, e);
+            responseWrapper.setInnerElement(buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR)));
+        } finally {
+            getComponentsUtils().auditExternalCrudApi(responseFormat, AuditingActionEnum.ARTIFACT_UPLOAD_BY_API,
+                    resourceCommonInfo, request, artifactDefinition, null);
+        }
+        return responseWrapper.getInnerElement();
+    }
+
     /**
      * Uploads an artifact to resource or service
      *
@@ -127,9 +226,9 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
             @ApiParam(value = "The username and password", required = true)@HeaderParam(value = Constants.AUTHORIZATION_HEADER) String authorization,
             @ApiParam(value = "The requested asset type", required = true, allowableValues = "resources, services")@PathParam("assetType") final String assetType,
             @ApiParam(value = "The uuid of the asset as published in the metadata", required = true)@PathParam("uuid") final String uuid,
-            String data) {
+            @ApiParam( hidden = true) String data) {
 
-        init(log);
+        init();
 
         Wrapper<ResponseFormat> responseWrapper = new Wrapper<>();
         String requestURI = request.getRequestURI();
@@ -137,7 +236,7 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
         log.debug("{} {}", startLog, url);
         ComponentTypeEnum componentType = ComponentTypeEnum.findByParamName(assetType);
         String componentTypeValue = componentType == null ? null : componentType.getValue();
-        EnumMap<AuditingFieldsKeysEnum, Object> additionalParams = new EnumMap<>(AuditingFieldsKeysEnum.class);
+        ResourceCommonInfo resourceCommonInfo = new ResourceCommonInfo(componentTypeValue);
 
         if (componentType == null) {
             log.debug("uploadArtifact: assetType parameter {} is not valid", assetType);
@@ -150,35 +249,41 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
             validateHttpCspUserIdHeader(userId, responseWrapper);
         }
         Response response = null;
+        ArtifactDefinition artifactDefinition = null;
         try {
             if (responseWrapper.isEmpty()) {
                 ServletContext context = request.getSession().getServletContext();
                 ArtifactsBusinessLogic artifactsLogic = getArtifactBL(context);
                 Either<ArtifactDefinition, ResponseFormat> uploadArtifactEither = artifactsLogic.uploadArtifactToComponentByUUID(data, request, componentType, uuid,
-                        additionalParams, artifactsLogic.new ArtifactOperationInfo(true, false, ArtifactOperationEnum.CREATE));
+                        resourceCommonInfo, artifactsLogic.new ArtifactOperationInfo(true, false, ArtifactOperationEnum.CREATE));
                 if (uploadArtifactEither.isRight()) {
                     log.debug("failed to upload artifact");
                     responseWrapper.setInnerElement(uploadArtifactEither.right().value());
                 } else {
-                    Object representation = RepresentationUtils.toRepresentation(uploadArtifactEither.left().value());
+                    artifactDefinition = uploadArtifactEither.left().value();
+                    Object representation = RepresentationUtils.toRepresentation(artifactDefinition);
                     Map<String, String> headers = new HashMap<>();
                     headers.put(Constants.MD5_HEADER, GeneralUtility.calculateMD5Base64EncodedByString((String) representation));
                     responseWrapper.setInnerElement(getComponentsUtils().getResponseFormat(ActionStatus.OK));
                     response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), representation, headers);
                 }
             }
-            if( response == null ){
-                response = buildErrorResponse(responseWrapper.getInnerElement());
-            }
-            return response;
-        } catch (Exception e) {
+        } catch (IOException e) {
             final String message = "failed to upload artifact to a resource or service";
             BeEcompErrorManager.getInstance().logBeRestApiGeneralError(message);
             log.debug(message, e);
-            return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
-        } finally {
-            getComponentsUtils().auditExternalUploadArtifact(responseWrapper.getInnerElement(), componentTypeValue, request, additionalParams);
+            responseWrapper.setInnerElement(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR));
+            response = buildErrorResponse(responseWrapper.getInnerElement());
+        }   catch (ComponentException e){
+            responseWrapper.setInnerElement(getComponentsUtils().getResponseFormat(e));
+        }finally {
+            if( response == null ){
+                response = buildErrorResponse(responseWrapper.getInnerElement());
+            }
+            getComponentsUtils().auditExternalCrudApi(responseWrapper.getInnerElement(), AuditingActionEnum.ARTIFACT_UPLOAD_BY_API,
+                    resourceCommonInfo, request, artifactDefinition, null);
         }
+        return response;
     }
 
     /**
@@ -220,7 +325,7 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
             @ApiParam(value = "The requested asset type", required = true, allowableValues = "resources, services")@PathParam("assetType") final String assetType,
             @ApiParam(value = "The uuid of the asset as published in the metadata", required = true)@PathParam("uuid") final String uuid,
             @ApiParam(value = "The component instance name (as publishedin the response of the detailed query)", required = true)@PathParam("resourceInstanceName") final String resourceInstanceName,
-            String data) {
+            @ApiParam( hidden = true) String data) {
 
         Wrapper<Response> responseWrapper = new Wrapper<>();
         ResponseFormat responseFormat = null;
@@ -229,8 +334,9 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
         log.debug("{} {}", startLog, url);
         ComponentTypeEnum componentType = ComponentTypeEnum.findByParamName(assetType);
         String componentTypeValue = componentType == null ? null : componentType.getValue();
-        EnumMap<AuditingFieldsKeysEnum, Object> additionalParams = new EnumMap<>(AuditingFieldsKeysEnum.class);
-        additionalParams.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_NAME, resourceInstanceName);
+        ResourceCommonInfo resourceCommonInfo = new ResourceCommonInfo(resourceInstanceName, componentTypeValue);
+        ArtifactDefinition artifactDefinition = null;
+
         if (componentType == null) {
             log.debug("uploadArtifact: assetType parameter {} is not valid", assetType);
             responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT);
@@ -251,7 +357,7 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
                 ServletContext context = request.getSession().getServletContext();
                 ArtifactsBusinessLogic artifactsLogic = getArtifactBL(context);
                 Either<ArtifactDefinition, ResponseFormat> uploadArtifactEither = artifactsLogic.uploadArtifactToRiByUUID(data, request, componentType, uuid, resourceInstanceName,
-                        additionalParams, artifactsLogic.new ArtifactOperationInfo(true, false, ArtifactOperationEnum.CREATE));
+                        artifactsLogic.new ArtifactOperationInfo(true, false, ArtifactOperationEnum.CREATE));
                 if (uploadArtifactEither.isRight()) {
                     log.debug("failed to upload artifact");
                     responseFormat = uploadArtifactEither.right().value();
@@ -264,13 +370,17 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
                     responseWrapper.setInnerElement(buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), representation, headers));
                 }
             }
-        }catch (Exception e) {
+        }catch (IOException e) {
             final String message = "failed to upload artifact to a resource instance";
             BeEcompErrorManager.getInstance().logBeRestApiGeneralError(message);
             log.debug(message, e);
-            responseWrapper.setInnerElement(buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR)));
-        } finally {
-            getComponentsUtils().auditExternalUploadArtifact(responseFormat, componentTypeValue, request, additionalParams);
+            responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);
+            responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
+        }catch (ComponentException e){
+            responseFormat = getComponentsUtils().getResponseFormat(e);
+        }finally {
+            getComponentsUtils().auditExternalCrudApi(responseFormat, AuditingActionEnum.ARTIFACT_UPLOAD_BY_API,
+                    resourceCommonInfo, request, artifactDefinition, null);
         }
         return responseWrapper.getInnerElement();
     }
@@ -320,7 +430,7 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
             @ApiParam(value = "The requested asset type", required = true, allowableValues = "resources, services")@PathParam("assetType") final String assetType,
             @ApiParam(value = "The uuid of the asset as published in the metadata", required = true)@PathParam("uuid") final String uuid,
             @ApiParam(value = "The uuid of the artifact as published in the asset detailed metadata or in the response of the upload / update operation", required = true)@PathParam("artifactUUID") final String artifactUUID,
-            String data) {
+            @ApiParam(hidden = true) String data) {
 
         Wrapper<Response> responseWrapper = new Wrapper<>();
         ResponseFormat responseFormat = null;
@@ -329,8 +439,7 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
         log.debug("{} {}", startLog, url);
         ComponentTypeEnum componentType = ComponentTypeEnum.findByParamName(assetType);
         String componentTypeValue = componentType == null ? null : componentType.getValue();
-        EnumMap<AuditingFieldsKeysEnum, Object> additionalParams = new EnumMap<>(AuditingFieldsKeysEnum.class);
-        additionalParams.put(AuditingFieldsKeysEnum.AUDIT_CURR_ARTIFACT_UUID, artifactUUID);
+        ResourceCommonInfo resourceCommonInfo = new ResourceCommonInfo(componentTypeValue);
         if (componentType == null) {
             log.debug("updateArtifact: assetType parameter {} is not valid", assetType);
             responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT);
@@ -346,14 +455,15 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
             responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.MISSING_USER_ID);
             responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
         }
+        ArtifactDefinition artifactDefinition = null;
         try {
             if (responseWrapper.isEmpty()) {
                 ServletContext context = request.getSession().getServletContext();
                 ArtifactsBusinessLogic artifactsLogic = getArtifactBL(context);
                 Either<ArtifactDefinition, ResponseFormat> uploadArtifactEither = artifactsLogic.updateArtifactOnComponentByUUID(data, request, componentType, uuid, artifactUUID,
-                        additionalParams, artifactsLogic.new ArtifactOperationInfo(true, false, ArtifactOperationEnum.UPDATE));
+                        resourceCommonInfo, artifactsLogic.new ArtifactOperationInfo(true, false, ArtifactOperationEnum.UPDATE));
                 if (uploadArtifactEither.isRight()) {
-                    log.debug("failed to update artifact");
+                    log.debug(FAILED_TO_UPDATE_ARTIFACT);
                     responseFormat = uploadArtifactEither.right().value();
                     responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
                 } else {
@@ -364,13 +474,18 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
                     responseWrapper.setInnerElement(buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), representation, headers));
                 }
             }
-        } catch (Exception e) {
+        } catch (IOException e) {
             final String message = "failed to update artifact on a resource or service";
             BeEcompErrorManager.getInstance().logBeRestApiGeneralError(message);
             log.debug(message, e);
-            responseWrapper.setInnerElement(buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR)));
-        } finally {
-            getComponentsUtils().auditExternalUpdateArtifact(responseFormat, componentTypeValue, request, additionalParams);
+            responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);
+            responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
+        }  catch (ComponentException e){
+            responseFormat = getComponentsUtils().getResponseFormat(e);
+        }
+        finally{
+            getComponentsUtils().auditExternalCrudApi(responseFormat, AuditingActionEnum.ARTIFACT_UPDATE_BY_API, resourceCommonInfo,
+                    request, artifactDefinition, artifactUUID);
         }
         return responseWrapper.getInnerElement();
     }
@@ -415,7 +530,7 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
             @ApiParam(value = "The uuid of the asset as published in the metadata", required = true)@PathParam("uuid") final String uuid,
             @ApiParam(value = "The uuid of the artifact as published in the asset detailed metadata or in the response of the upload / update operation", required = true)@PathParam("artifactUUID") final String artifactUUID,
             @ApiParam(value = "The component instance name (as publishedin the response of the detailed query)", required = true)@PathParam("resourceInstanceName") final String resourceInstanceName,
-            String data) {
+            @ApiParam( hidden = true) String data) {
 
         Wrapper<Response> responseWrapper = new Wrapper<>();
         ResponseFormat responseFormat = null;
@@ -424,9 +539,7 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
         log.debug("{} {}", startLog, url);
         ComponentTypeEnum componentType = ComponentTypeEnum.findByParamName(assetType);
         String componentTypeValue = componentType == null ? null : componentType.getValue();
-        EnumMap<AuditingFieldsKeysEnum, Object> additionalParams = new EnumMap<>(AuditingFieldsKeysEnum.class);
-        additionalParams.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_NAME, resourceInstanceName);
-        additionalParams.put(AuditingFieldsKeysEnum.AUDIT_CURR_ARTIFACT_UUID, artifactUUID);
+        ResourceCommonInfo resourceCommonInfo = new ResourceCommonInfo(resourceInstanceName, componentTypeValue);
         if (componentType == null) {
             log.debug("updateArtifactOnResourceInstance: assetType parameter {} is not valid", assetType);
             responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT);
@@ -442,14 +555,15 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
             responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.MISSING_USER_ID);
             responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
         }
+        ArtifactDefinition artifactDefinition = null;
         try {
             if (responseWrapper.isEmpty()) {
                 ServletContext context = request.getSession().getServletContext();
                 ArtifactsBusinessLogic artifactsLogic = getArtifactBL(context);
                 Either<ArtifactDefinition, ResponseFormat> uploadArtifactEither = artifactsLogic.updateArtifactOnRiByUUID(data, request, componentType, uuid, resourceInstanceName, artifactUUID,
-                        additionalParams, artifactsLogic.new ArtifactOperationInfo(true, false, ArtifactOperationEnum.UPDATE));
+                         artifactsLogic.new ArtifactOperationInfo(true, false, ArtifactOperationEnum.UPDATE));
                 if (uploadArtifactEither.isRight()) {
-                    log.debug("failed to update artifact");
+                    log.debug(FAILED_TO_UPDATE_ARTIFACT);
                     responseFormat = uploadArtifactEither.right().value();
                     responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
                 } else {
@@ -460,13 +574,18 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
                     responseWrapper.setInnerElement(buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), representation, headers));
                 }
             }
-        } catch (Exception e) {
+        } catch (IOException e) {
             final String message = "failed to update artifact on resource instance";
             BeEcompErrorManager.getInstance().logBeRestApiGeneralError(message);
             log.debug(message, e);
-            responseWrapper.setInnerElement(buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR)));
-        } finally {
-            getComponentsUtils().auditExternalUpdateArtifact(responseFormat, componentTypeValue, request, additionalParams);
+            responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);
+            responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
+        }  catch (ComponentException e){
+            responseFormat = getComponentsUtils().getResponseFormat(e);
+        }
+        finally{
+            getComponentsUtils().auditExternalCrudApi(responseFormat, AuditingActionEnum.ARTIFACT_UPDATE_BY_API, resourceCommonInfo,
+                    request, artifactDefinition, artifactUUID);
         }
         return responseWrapper.getInnerElement();
     }
@@ -483,8 +602,6 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
     @Path("/{assetType}/{uuid}/artifacts/{artifactUUID}")
     @Produces(MediaType.APPLICATION_JSON)
     @ApiOperation(value = "deletes an artifact of a resource or service", httpMethod = "DELETE", notes = "deletes an artifact of a resource or service", response = Response.class)
-    /*@ApiResponses(value = { @ApiResponse(code = 200, message = "Artifact Deleted"), @ApiResponse(code = 401, message = "Authorization required"), @ApiResponse(code = 403, message = "Restricted operation"),
-            @ApiResponse(code = 404, message = "Asset not found") })*/
     @ApiResponses(value = {
             @ApiResponse(code = 200, message = "Artifact deleted", response = ArtifactDefinition.class),
             @ApiResponse(code = 400, message = "Missing  'X-ECOMP-InstanceID'  HTTP header - POL5001"),
@@ -516,8 +633,8 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
         log.debug("{} {}", startLog, url);
         ComponentTypeEnum componentType = ComponentTypeEnum.findByParamName(assetType);
         String componentTypeValue = componentType == null ? null : componentType.getValue();
-        EnumMap<AuditingFieldsKeysEnum, Object> additionalParams = new EnumMap<>(AuditingFieldsKeysEnum.class);
-        additionalParams.put(AuditingFieldsKeysEnum.AUDIT_CURR_ARTIFACT_UUID, artifactUUID);
+        ResourceCommonInfo resourceCommonInfo = new ResourceCommonInfo(componentTypeValue);
+        ArtifactDefinition artifactDefinition = null;
         if (componentType == null) {
             log.debug("deleteArtifact: assetType parameter {} is not valid", assetType);
             responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT);
@@ -538,7 +655,7 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
                 ServletContext context = request.getSession().getServletContext();
                 ArtifactsBusinessLogic artifactsLogic = getArtifactBL(context);
                 Either<ArtifactDefinition, ResponseFormat> uploadArtifactEither = artifactsLogic.deleteArtifactOnComponentByUUID(request, componentType, uuid, artifactUUID,
-                        additionalParams, artifactsLogic.new ArtifactOperationInfo(true, false, ArtifactOperationEnum.DELETE));
+                        resourceCommonInfo, artifactsLogic.new ArtifactOperationInfo(true, false, ArtifactOperationEnum.DELETE));
                 if (uploadArtifactEither.isRight()) {
                     log.debug("failed to delete artifact");
                     responseFormat = uploadArtifactEither.right().value();
@@ -551,13 +668,18 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
                     responseWrapper.setInnerElement(buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), representation, headers));
                 }
             }
-        } catch (Exception e) {
+        } catch (IOException e) {
             final String message = "failed to delete an artifact of a resource or service";
             BeEcompErrorManager.getInstance().logBeRestApiGeneralError(message);
             log.debug(message, e);
-            responseWrapper.setInnerElement(buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR)));
-        } finally {
-            getComponentsUtils().auditExternalDeleteArtifact(responseFormat, componentTypeValue, request, additionalParams);
+            responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);
+            responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
+        }  catch (ComponentException e){
+            responseFormat = getComponentsUtils().getResponseFormat(e);
+        }
+        finally{
+            getComponentsUtils().auditExternalCrudApi(responseFormat, AuditingActionEnum.ARTIFACT_DELETE_BY_API, resourceCommonInfo,
+                    request, artifactDefinition, artifactUUID);
         }
         return responseWrapper.getInnerElement();
     }
@@ -606,9 +728,7 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
         log.debug("{} {}", startLog, url);
         ComponentTypeEnum componentType = ComponentTypeEnum.findByParamName(assetType);
         String componentTypeValue = componentType == null ? null : componentType.getValue();
-        EnumMap<AuditingFieldsKeysEnum, Object> additionalParams = new EnumMap<>(AuditingFieldsKeysEnum.class);
-        additionalParams.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_NAME, resourceInstanceName);
-        additionalParams.put(AuditingFieldsKeysEnum.AUDIT_CURR_ARTIFACT_UUID, artifactUUID);
+        ResourceCommonInfo resourceCommonInfo = new ResourceCommonInfo(resourceInstanceName, componentTypeValue);
         if (componentType == null) {
             log.debug("deleteArtifactOnResourceInsatnce: assetType parameter {} is not valid", assetType);
             responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT);
@@ -624,12 +744,13 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
             responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.MISSING_USER_ID);
             responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
         }
+        ArtifactDefinition artifactDefinition = null;
         try {
             if (responseWrapper.isEmpty()) {
                 ServletContext context = request.getSession().getServletContext();
                 ArtifactsBusinessLogic artifactsLogic = getArtifactBL(context);
                 Either<ArtifactDefinition, ResponseFormat> uploadArtifactEither = artifactsLogic.deleteArtifactOnRiByUUID(request, componentType, uuid, resourceInstanceName, artifactUUID,
-                        additionalParams, artifactsLogic.new ArtifactOperationInfo(true, false, ArtifactOperationEnum.DELETE));
+                         artifactsLogic.new ArtifactOperationInfo(true, false, ArtifactOperationEnum.DELETE));
                 if (uploadArtifactEither.isRight()) {
                     log.debug("failed to delete artifact");
                     responseFormat = uploadArtifactEither.right().value();
@@ -642,13 +763,18 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
                     responseWrapper.setInnerElement(buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.OK), representation, headers));
                 }
             }
-        } catch (Exception e) {
+        } catch (IOException e) {
             final String message = "failed to delete an artifact of a resource instance";
             BeEcompErrorManager.getInstance().logBeRestApiGeneralError(message);
             log.debug(message, e);
-            responseWrapper.setInnerElement(buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR)));
-        } finally {
-            getComponentsUtils().auditExternalDeleteArtifact(responseFormat, componentTypeValue, request, additionalParams);
+            responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR);
+            responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
+        }  catch (ComponentException e){
+            responseFormat = getComponentsUtils().getResponseFormat(e);
+        }
+        finally{
+            getComponentsUtils().auditExternalCrudApi(responseFormat, AuditingActionEnum.ARTIFACT_DELETE_BY_API, resourceCommonInfo,
+                    request, artifactDefinition, artifactUUID);
         }
         return responseWrapper.getInnerElement();
     }
@@ -691,8 +817,6 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
         log.debug("{} {}", startLog, url);
         ComponentTypeEnum componentType = ComponentTypeEnum.findByParamName(assetType);
         String componentTypeValue = componentType == null ? null : componentType.getValue();
-        EnumMap<AuditingFieldsKeysEnum, Object> additionalParams = new EnumMap<>(AuditingFieldsKeysEnum.class);
-        additionalParams.put(AuditingFieldsKeysEnum.AUDIT_CURR_ARTIFACT_UUID, artifactUUID);
         if (componentType == null) {
             log.debug("downloadComponentArtifact: assetType parameter {} is not valid", assetType);
             responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT);
@@ -703,11 +827,12 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
             responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.MISSING_X_ECOMP_INSTANCE_ID);
             responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
         }
+        ResourceCommonInfo resourceCommonInfo = new ResourceCommonInfo(componentTypeValue);
         try {
             if (responseWrapper.isEmpty()) {
                 ServletContext context = request.getSession().getServletContext();
                 ArtifactsBusinessLogic artifactsLogic = getArtifactBL(context);
-                Either<byte[], ResponseFormat> downloadComponentArtifactEither = artifactsLogic.downloadComponentArtifactByUUIDs(componentType, uuid, artifactUUID, additionalParams);
+                Either<byte[], ResponseFormat> downloadComponentArtifactEither = artifactsLogic.downloadComponentArtifactByUUIDs(componentType, uuid, artifactUUID, resourceCommonInfo);
                 if (downloadComponentArtifactEither.isRight()) {
                     responseFormat = downloadComponentArtifactEither.right().value();
                     responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
@@ -720,13 +845,12 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
                     responseWrapper.setInnerElement(buildOkResponse(responseFormat, is, headers));
                 }
             }
-        } catch (Exception e) {
-            final String message = "failed to download an artifact of a resource or service";
-            BeEcompErrorManager.getInstance().logBeRestApiGeneralError(message);
-            log.debug(message, e);
-            responseWrapper.setInnerElement(buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR)));
-        } finally {
-            getComponentsUtils().auditExternalDownloadArtifact(responseFormat, componentTypeValue, request, additionalParams);
+        }  catch (ComponentException e){
+            responseFormat = getComponentsUtils().getResponseFormat(e);
+        }
+        finally{
+            getComponentsUtils().auditExternalDownloadArtifact(responseFormat, resourceCommonInfo,
+                    new DistributionData(instanceIdHeader, requestURI), requestId, artifactUUID, userId);
         }
         return responseWrapper.getInnerElement();
     }
@@ -771,9 +895,6 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
         log.debug("{} {}", startLog, url);
         ComponentTypeEnum componentType = ComponentTypeEnum.findByParamName(assetType);
         String componentTypeValue = componentType == null ? null : componentType.getValue();
-        EnumMap<AuditingFieldsKeysEnum, Object> additionalParams = new EnumMap<>(AuditingFieldsKeysEnum.class);
-        additionalParams.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_NAME, resourceInstanceName);
-        additionalParams.put(AuditingFieldsKeysEnum.AUDIT_CURR_ARTIFACT_UUID, artifactUUID);
         if (componentType == null) {
             log.debug("downloadResourceInstanceArtifact: assetType parameter {} is not valid", assetType);
             responseFormat = getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT);
@@ -788,7 +909,7 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
             if (responseWrapper.isEmpty()) {
                 ServletContext context = request.getSession().getServletContext();
                 ArtifactsBusinessLogic artifactsLogic = getArtifactBL(context);
-                Either<byte[], ResponseFormat> downloadResourceArtifactEither = artifactsLogic.downloadResourceInstanceArtifactByUUIDs(componentType, uuid, resourceInstanceName, artifactUUID, additionalParams);
+                Either<byte[], ResponseFormat> downloadResourceArtifactEither = artifactsLogic.downloadResourceInstanceArtifactByUUIDs(componentType, uuid, resourceInstanceName, artifactUUID);
                 if (downloadResourceArtifactEither.isRight()) {
                     responseFormat = downloadResourceArtifactEither.right().value();
                     responseWrapper.setInnerElement(buildErrorResponse(responseFormat));
@@ -801,13 +922,12 @@ public class ArtifactExternalServlet extends AbstractValidationsServlet {
                     responseWrapper.setInnerElement(buildOkResponse(responseFormat, is, headers));
                 }
             }
-        } catch (Exception e) {
-            final String message = "failed to download an artifact of a resource instance";
-            BeEcompErrorManager.getInstance().logBeRestApiGeneralError(message);
-            log.debug(message, e);
-            responseWrapper.setInnerElement(buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.GENERAL_ERROR)));
-        } finally {
-            getComponentsUtils().auditExternalDownloadArtifact(responseFormat, componentTypeValue, request, additionalParams);
+        }  catch (ComponentException e){
+            responseFormat = getComponentsUtils().getResponseFormat(e);
+        }
+        finally{
+            getComponentsUtils().auditExternalDownloadArtifact(responseFormat, new ResourceCommonInfo(resourceInstanceName, componentTypeValue),
+                    new DistributionData(instanceIdHeader, requestURI), requestId, artifactUUID, userId);
         }
         return responseWrapper.getInnerElement();
     }