diff --git a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerConstants.java b/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerConstants.java
deleted file mode 100644
index 2b5741b..0000000
--- a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerConstants.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright © 2016-2017 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.sdc.logging.types;
-
-
-public class LoggerConstants {
-
-  public static final String REQUEST_ID = "RequestId";
-  public static final String PARTNER_NAME = "PartnerName";
-  public static final String SERVICE_NAME = "ServiceName";
-  public static final String INSTANCE_UUID = "InstanceUUID";
-  public static final String CATEGORY_LOG_LEVEL = "level";
-  public static final String STATUS_CODE = "StatusCode";
-  public static final String RESPONSE_CODE = "ResponseCode";
-  public static final String RESPONSE_DESCRIPTION = "ResponseDescription";
-  public static final String TARGET_SERVICE_NAME = "TargetServiceName";
-  public static final String TARGET_ENTITY = "TargetEntity";
-  public static final String TARGET_ENTITY_API = "API";
-  public static final String TARGET_ENTITY_DB = "DB";
-  public static final String ERROR_CATEGORY = "ErrorCategory";
-  public static final String ERROR_CODE = "ErrorCode";
-  public static final String ERROR_DESCRIPTION = "ErrorDescription";
-  private LoggerConstants(){
-
-  }
-}
diff --git a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java b/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java
deleted file mode 100644
index 8a00382..0000000
--- a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright © 2016-2017 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.sdc.logging.types;
-
-
-public enum LoggerErrorCode {
-  PERMISSION_ERROR("100"),
-  AVAILABILITY_ERROR("200"),
-  DATA_ERROR("300"),
-  SCHEMA_ERROR("400"),
-  BUSINESS_PROCESS_ERROR("500"),
-  UNKNOWN_ERROR("900"), ;
-
-  private String errorCode;
-
-  LoggerErrorCode(String errorCode) {
-    this.errorCode = errorCode;
-  }
-
-  public String getErrorCode() {
-    return errorCode;
-  }
-
-  public void setErrorCode(String errorCode) {
-    this.errorCode = errorCode;
-  }
-}
diff --git a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java b/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java
deleted file mode 100644
index 46924d2..0000000
--- a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright © 2016-2017 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.sdc.logging.types;
-
-
-public class LoggerErrorDescription {
-  public static final String ARTIFACT_NOT_REFERENCED = "Artifact not referenced";
-  public static final String WRONG_FILE_EXTENSION = "Wrong file extention";
-  public static final String INVALID_HEAT_FORMAT = "Invalid HEAT format";
-  public static final String PARAMETER_NOT_FOUND = "Referenced parameter not found";
-  public static final String ENV_PARAMETER_NOT_IN_HEAT = "env includes parameter not in HEAT";
-  public static final String PARAMETER_DEFAULT_VALUE_NOT_ALIGNED_WITH_TYPE =
-      "Parameter default value not alinged with type";
-  public static final String INVALID_RESOURCE_TYPE = "Invalid resource type";
-  public static final String INVALID_GET_RESOURCE_SYNTAX = "Invalid get resource syntax";
-  public static final String RESOURCE_NOT_FOUND = "Resource not found";
-  public static final String INVALID_INDEX_VAR = "Invalid Resource Group index var";
-  public static final String MISSING_FILE = "Missing file";
-  public static final String MISSING_NOVA_PROPERTIES = "Missing NOVA server properties";
-  public static final String NESTED_LOOP = "Found nested loop";
-  public static final String MISSING_PARAMETER_IN_NESTED = "Missing parameter in nested file";
-  public static final String WRONG_VALUE_ASSIGNED_NESTED_PARAMETER =
-      "Wrong value assigned in nested parameters";
-  public static final String SERVER_NOT_DEFINED_NOVA = "Server not defined from nova";
-  public static final String WRONG_POLICY_SERVER_GROUP = "Wrong policy in server group";
-  public static final String SERVER_GROUP_SECURITY_GROUP_NOT_IN_USE =
-      "Server group or security group is not in use";
-  public static final String NETWORK_ATTACH_POLICY_NOT_IN_USE =
-      "Network Attach Policy is not in use";
-  public static final String NO_BIND_FROM_PORT_TO_NOVA = "No bind from port to nova sever";
-  public static final String PORT_BINDS_MORE_THAN_ONE_NOVA =
-      "Port binds to more than one nova sever";
-  public static final String MISSING_RESOURCE_DEPENDS_ON = "Missing resource in depends_on";
-  public static final String GET_ATTR_NOT_FOUND = "get_attr not found";
-  public static final String MISSING_GET_PARAM = "Missing get_param";
-  public static final String EMPTY_FILE = "Empty file";
-  public static final String VALIDATE_FILE = "Can't validate file";
-  public static final String INVALID_FILE_TYPE = "Invalid file type";
-  public static final String INVALID_ZIP = "Invalid zip file";
-  public static final String INVALID_VES_FILE = "Invalid VES file";
-
-
-
-  public static final String RESOURCE_UNIQUE_NETWORK_ROLE =
-      "Resource connects to two networks with the same role";
-  public static final String NAME_NOT_ALIGNED_WITH_GUIDELINES = "Name not aligned with guidelines";
-  public static final String VOLUME_FILE_NOT_EXPOSED = "Volume file not exposed";
-  public static final String RESOURCE_NOT_DEFINED_AS_OUTPUT = "Resource is not defined as output";
-  public static final String FLOATING_IP_IN_USE = "Floating IP resource type is in use";
-  public static final String MISSING_BASE_HEAT = "Missing base HEAT file";
-  public static final String MULTI_BASE_HEAT = "Multi base HEAT file";
-
-  public static final String EXTRACT_COMPOSITION_DATA = "Can't extract composition data";
-
-  public static final String MERGE_CONTRAIL_2_AND_3 =
-      "Merge of Contrail 2 and Contrail 3 resources";
-  public static final String CONTRAIL_2_IN_USE = "Contrail 2 resource is in use";
-
-  public static final String INVALID_MANIFEST = "Invalid manifest file";
-
-  public static final String INVALID_YAML_FORMAT = "Invalid YAML format";
-
-  public static final String CREATE_SERVICE_ARTIFACT = "Can't create service artifact";
-  public static final String CREATE_ENRICH_SERVICE_ARTIFACT =
-      "Can't create enriched service artifact";
-  public static final String CREATE_SERVICE_TEMPLATE = "Can't create service template";
-  public static final String CREATE_ENRICH_SERVICE_TEMPLATE =
-      "Can't create enriched service template";
-  public static final String GET_SERVICE_MODEL = "Can't get service model";
-  public static final String MISSING_MANDATORY_PROPERTY = "Missing mandatory property";
-  public static final String INVALID_PROPERTY = "Invalid Property";
-  public static final String INVALID_ADD_ACTION = "Invalid add action";
-  public static final String UNSUPPORTED_ENTITY = "Unsupported entity";
-  public static final String CREATE_CSAR = "Can't create CSAR file";
-  public static final String PACK_ARTIFACTS = "Can't pack artifacts into CSAR file";
-
-  public static final String TRANSLATE_HEAT = "Can't translate HEAT file";
-  public static final String RESOURCE_FILE_READ_ERROR = "Can't read resource file from class path.";
-  public static final String FAILED_TO_GENERATE_GLOBAL_TYPES = "Failed to generate globalTypes";
-
-  public static final String CHECKOUT_ENTITY = "Can't checkout versionable entity";
-  public static final String SUBMIT_ENTITY = "Can't submit versionable entity";
-  public static final String ENTITY_NOT_FOUND = "Versionable entity not found";
-  public static final String INVALID_VALUE = "Invalid value";
-
-  public static final String UNSUPPORTED_OPERATION = "Unsupported operation";
-  public static final String INVALID_JSON = "Invalid JSON format";
-
-  public static final String INSERT_INTO_APPLICATION_CONFIG =
-      "Can't insert value into application config table";
-
-  public static final String CANT_HEAL = "Can't perform healing operation";
-  private LoggerErrorDescription(){
-
-  }
-}
diff --git a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java b/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java
deleted file mode 100644
index 6722bc4..0000000
--- a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright © 2016-2017 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.sdc.logging.types;
-
-
-public enum LoggerServiceName {
-
-  Create_VLM,
-  Get_VLM,
-  Checkout_VLM,
-  Checkin_VLM,
-  Undo_Checkout_VLM,
-  Submit_VLM,
-  Update_VLM,
-  List_VLM,
-
-  List_EP,
-  Create_EP,
-  Update_EP,
-  Get_EP,
-  Delete_EP,
-
-  Create_LIMIT,
-  Delete_LIMIT,
-  Update_LIMIT,
-  Get_LIMIT,
-
-  List_FG,
-  Create_FG,
-  Update_FG,
-  Get_FG,
-  Delete_FG,
-
-  List_LA,
-  Create_LA,
-  Update_LA,
-  Get_LA,
-  Delete_LA,
-
-  List_LKG,
-  Create_LKG,
-  Update_LKG,
-  Get_LKG,
-  Delete_LKG,
-
-  List_VSPs,
-  List_Packages,
-  Create_VSP,
-  Get_VSP,
-  Checkout_VSP,
-  Checkin_VSP,
-  Undo_Checkout_VSP,
-  Submit_VSP,
-  Update_VSP,
-  Re_Submit_ALL_Final_VSPs,
-  Create_Package,
-  List_VSP,
-  Upload_File,
-  Get_Uploaded_File,
-  Get_Translated_File,
-  Get_Questionnaire_VSP,
-  Update_Questionnaire_VSP,
-  Get_Information_Artifact,
-
-
-  List_Component_Processes,
-  Delete_List_Component_Processes,
-  Create_Component_Processes,
-  Update_Component_Processes,
-  Get_Component_Processes,
-  Delete_Component_Processes,
-  Upload_File_Component_Processes,
-  Get_Uploaded_File_Component_Processes,
-  Delete_Uploaded_File_Component_Processes,
-
-  List_Processes,
-  Delete_List_Processes,
-  Create_Processes,
-  Update_Processes,
-  Get_Processes,
-  Delete_Processes,
-  Upload_File_Processes,
-  Get_Uploaded_File_Processes,
-  Delete_Uploaded_File_Processes,
-
-  List_Components,
-  Delete_List_Components,
-  Create_Component,
-  Update_Component,
-  Get_Component,
-  Delete_Component,
-  Get_Questionnaire_Component,
-  Update_Questionnaire_Component,
-
-  Upload_Monitoring_Artifact,
-  Delete_Monitoring_Artifact,
-  List_Monitoring_Artifacts,
-
-  List_Network,
-  Create_Network,
-  Update_Network,
-  Get_Network,
-  Delete_Network,
-
-  List_nics,
-  Delete_List_nics,
-  Create_nic,
-  Update_nic,
-  Get_nic,
-  Delete_nic,
-  Get_Questionnaire_nic,
-  Update_Questionnaire_nic,
-
-  Create_Process,
-  Update_Process,
-
-  Create_Compute,
-  List_Computes,
-  Get_Compute,
-  Update_Compute,
-  Delete_Compute,
-  Get_Questionnaire_Compute,
-  Update_Questionnaire_Compute,
-
-  Insert_To_ApplicationConfig_Table,
-  Get_From_ApplicationConfig_Table,
-  Get_List_From_ApplicationConfig_Table_By_Namespace,
-
-  Create_Deployment_Flavor,
-  Get_List_Deployment_flavor,
-  Get_Deployment_flavor,
-  Delete_Deployment_flavor,
-  Update_Deployment_flavor,
-
-  Get_List_Activity_Log,
-
-  Validate,
-  Enrich, Delete_VSP, Get_Process_Artifact, Create_Entity, Checkout_Entity, Undo_Checkout_Entity,
-  Checkin_Entity, Submit_Entity, Get_Entity_Version, Delete_Entity, Undo_Delete_Entity,
-  Translate_Resource, Translate_HEAT, LoggerServiceName, Get_VSP_List, Delete_VLM, Update_Manifest,
-  Create_Image,
-  GET_Image_Schema,
-  List_Images,
-  GET_Image,
-  Delete_Image,
-  Update_Image,
-
-  CREATE_COMPONENT_DEPENDENCY_MODEL,
-  GET_COMPONENT_DEPENDENCY_MODEL,
-  GET_LIST_COMPONENT_DEPENDENCY,
-  CREATE_COMPONENT_DEPENDENCY,
-  UPDATE_COMPONENT_DEPENDENCY,
-  DELETE_COMPONENT_DEPENDENCY,
-  GET_COMPONENT_DEPENDENCY,
-
-  Health_check,
-  notifications,
-  TOGGLZ
-  ;
-
-  public static String getServiceName(LoggerServiceName serviceName) {
-    return serviceName.name().replace("_", " ");
-  }
-
-  @Override
-  public String toString(){
-    return this.name().replace("_", " ");
-  }
-
-
-}
diff --git a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java b/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java
deleted file mode 100644
index ab7292a..0000000
--- a/openecomp-be/lib/openecomp-sdc-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright © 2016-2017 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.sdc.logging.types;
-
-
-public class LoggerTragetServiceName {
-  /*HEAT validator*/
-  public static final String VALIDATE_HEAT_BASE_STRUCTURE = "Validate Heat Base Structure";
-  public static final String VALIDATE_ARTIFACTS_EXISTENCE = "Validate Artifacts Existence";
-  public static final String VALIDATE_RESOURCE_REFERENCE_EXISTENCE =
-      "Validate Resource Reference Existence";
-  public static final String VALIDATE_PARAMETER_REFERENCE_EXITENCE =
-      "Validate Parameter Reference Existence";
-  public static final String VALIDATE_GET_ATTR_FROM_NESTED = "Validate get_attr From Nested";
-  public static final String VALIDATE_ENV_FILE = "Validate env File";
-  public static final String VALIDATE_BASE_PORTS_EXISTENCE = "Validate Base Ports Existence";
-  public static final String VALIDATE_ASSIGNED_VALUES_FOR_NOVA_IMAGE_FLAVOR =
-      "Validate Assigned Value For Nova Server Image Or Flavor";
-  public static final String VALIDATE_NOVA_SERVER_PORT_BINDING =
-      "Validate Ports Binding From Nova Server";
-  public static final String VALIDATE_SERVER_GROUP_EXISTENCE =
-      "Validate Nova Server Group Existence";
-  public static final String VALIDATE_PROPERTIES_MATCH_NESTED_PARAMETERS =
-      "Validate All Properties Match Nested Parameters";
-  public static final String VALIDATE_NESTING_LOOPS = "Validate Nested Loops";
-  public static final String VALIDATE_NOVA_SEVER_GROUP_POLICY = "Validate Nova Server Group Policy";
-  public static final String VALIDATE_RESOURCE_GROUP_TYPE = "Validate Resource Group Resource Type";
-  public static final String VALIDATE_ALL_SECURITY_GROUP_USED =
-      "Validate All Security Group Are Used From Neutron Port Resource";
-  public static final String VALIDATE_CONTRAIL_ATTACH_POLICY_TYPE =
-      "Validate Contrail Attach Policy Type";
-  public static final String VALIDATE_SECURITY_GROUP_FROM_BASE_OUTPUT =
-      "Validate Security Groups From Base File Outputs";
-  public static final String CHECK_FOR_ORPHAN_PORTS = "Validate All Referenced Ports Are Used";
-  public static final String CHECK_FOR_ORPHAN_ARTIFACTS = "Validate All Artifacts Are Referenced";
-  public static final String CHECK_FOR_VALID_FILE_EXTENTION = "Validate File Extention";
-  public static final String VALIDATE_PARAMTER_DEFAULT_MATCH_TYPE =
-      "Validate Parameter Default Aligns With Type";
-  public static final String VALIDATE_ENV_PARAMETER_MATCH_TYPE =
-      "Validate env Parameter Matches Type";
-  public static final String VALIDATE_RESOURCE_TYPE = "Validate Resource Type";
-  public static final String VALIDATE_FILE_EXISTENCE = "Validate File Exitence";
-  public static final String GET_RESOURCE_LIST_BY_TYPE =
-      "Get All Resources By Specific Resource Type";
-  public static final String VALIDATE_ALL_SERVER_GROUP_OR_SECURITY_GROUP_IN_USE =
-      "Validate All Security Group Or Server Group Are In Use";
-  public static final String VALIDATE_ATTACH_POLICY_IN_USE =
-      "Validate All Network Attach Policies Are In Use";
-  public static final String CHECK_RESOURCE_DEPENDS_ON = "Check Resource dependes_on";
-  public static final String GET_SHARED_RESOURCES_FROM_OUTPUTS =
-      "Get Shared Resources From Outputs";
-  public static final String VALIDATE_GET_RESOURCE = "Validate get_resource Syntax";
-  public static final String VALIDATE_FILE = "Validate File";
-
-  /*manifest validator*/
-  public static final String VALIDATE_MANIFEST_CONTENT = "Validate Manifest Content";
-  public static final String VALIDATE_FILE_IN_ZIP = "Validate File In Zip";
-  public static final String VALIDATE_FILE_IN_MANIFEST = "Validate File In Manifest";
-  public static final String VALIDATE_FILE_TYPE_AND_NAME =
-      "Validate File Type And Name In Manifest";
-  public static final String SCAN_MANIFEST_STRUCTURE = "Scan Manifest Structure";
-  public static final String VALIDATE_FILE_TYPE = "Validate File Type";
-
-  /*YAML validator*/
-  public static final String VALIDATE_YAML_CONTENT = "Validate YAML Content";
-
-
-  /*OPENECOMP guide line validator*/
-  public static final String VALIDATE_BASE_FILE =
-      "Validate If All Resources In Base File Are Exposed";
-  public static final String VALIDATE_FORBIDDEN_RESOURCE = "Validate If Resource Type Is Forbidden";
-  public static final String VALIDATE_FIXED_IPS_NAME = "Validate fixed_ips Naming Convention";
-  public static final String VALIDATE_IMAGE_AND_FLAVOR_NAME =
-      "Validate image And flavor Naming Convention";
-  public static final String VALIDATE_NOVA_SERVER_NAME = "Validate Nova Server Naming Convention";
-  public static final String VALIDATE_AVAILABILITY_ZONE_NAME =
-      "Validate availability_zone Naming Convention";
-  public static final String VALIDATE_NOVA_META_DATA_NAME =
-      "Validate Nova Server Meta Data Naming Convention";
-  public static final String VALIDATE_PORT_NETWORK_NAME = "Validate Port Network Naming Convention";
-  public static final String VALIDATE_VM_SYNC_IN_IMAGE_FLAVOR =
-      "Validate VM Name Is Sync In Image And Flavor";
-  public static final String VALIDATE_RESOURCE_NETWORK_UNIQUE_ROLW =
-      "Validate Nova Server Unique Role";
-  public static final String VALIDATE_VOLUME_FILE = "Validate HEAT Volume File";
-
-
-  public static final String VALIDATE_CONTRAIL_VM_NAME =
-      "Validate Contrail VM Name Aligned With Guidelines";
-  public static final String MERGE_OF_CONTRAIL_2_AND_3 = "Merge Of Contrail 2 And Contrail 3";
-  public static final String CONTRAIL_2_IN_USE = "Validate Contrail 2 Resource Is In Use";
-
-
-  public static final String VALIDATE_MANIFEST_PRE_CONDITION = "Validate Manifest Pre-Condition";
-  public static final String VALIDATE_HEAT_FORMAT = "Validate HEAT Format";
-
-  public static final String CREATE_ENTITY = "Create Entity";
-  public static final String CHECKOUT_ENTITY = "Checkout Entity";
-  public static final String UNDO_CHECKOUT_ENTITY = "Undo Checkout Entity";
-  public static final String CHECKIN_ENTITY = "Checkin Entity";
-  public static final String SUBMIT_ENTITY = "Submit Entity";
-  public static final String DELETE_ENTITY = "Delete Entity";
-  public static final String UNDO_DELETE_ENTITY = "Undo Delete Entity";
-
-  public static final String SUBMIT_VSP = "Submit VSP";
-  public static final String GET_VSP = "Get VSP";
-  public static final String ADD_VSP = "Add VSP";
-  public static final String DELETE_VSP = "Delete VSP";
-  public static final String UPDATE_VSP = "Update VSP";
-  public static final String ENRICH = "Enrich";
-  public static final String UPLOAD_FILE = "Upload file";
-  public static final String GET_UPLOADED_HEAT = "Get Uploaded HEAT File";
-  public static final String GET_TRANSLATED_FILE = "Get Translated File";
-  public static final String CREATE_TRANSLATED_FILE = "Create Translated File";
-  public static final String CREATE_PACKAGE = "Create Package";
-
-  public static final String CREATE_VERSION = "Create Version";
-
-  public static final String SELF_HEALING = "Self Healing";
-  public static final String WRITE_ARTIFACT_XML = "Write Artifact To XML File";
-
-  public static final String GET_VLM = "Get VLM";
-
-  public static final String VALIDATE_MONITORING_FILE = "Validate Monitoring File";
-  public static final String UPLOAD_MONITORING_FILE = "Upload Monitoring file";
-
-  public static final String GET_VERSION_INFO = "Get version info";
-
-  public static final String CREATE_NETWORK = "Create Network";
-  public static final String DELETE_NETWORK = "Delete Network";
-
-  public static final String CREATE_COMPONENT = "Create Component";
-  public static final String DELETE_COMPONENT = "Delete Component";
-  public static final String UPDATE_COMPONENT = "Update Component";
-
-  public static final String GET_PROCESS_ARTIFACT = "Get Process Artifact";
-  public static final String UPLOAD_PROCESS_ARTIFACT = "Upload Process Artifact";
-
-  public static final String CREATE_NIC = "Create Nic";
-  public static final String DELETE_NIC = "Delete Nic";
-  public static final String UPDATE_NIC = "Update Nic";
-
-  public static final String CREATE_DEPLOYMENT_FLAVOR = "Create Deployment Flavor";
-  public static final String DELETE_DEPLOYMENT_FLAVOR = "Delete Deployment Flavor";
-  public static final String UPDATE_DEPLOYMENT_FLAVOR = "Update Deployment Flavor";
-
-  public static final String EXTRACT_COMPOSITION_DATA = "Extract Composition Data";
-
-  public static final String TRANSLATE_RESOURCE = "Translate Resource";
-  public static final String GET_RESOURCE = "Get Resource";
-  public static final String VALIDATE_HEAT_BEFORE_TRANSLATE = "Validate HEAT Before Translate";
-
-  public static final String CREATE_SERVICE_ARTIFACT = "Create Service Artifact In DB";
-  public static final String CREATE_SERVICE_ENRICH_ARTIFACT =
-      "Create Service Enriched Artifact In DB";
-  public static final String CREATE_SERVICE_TEMPLATE = "Create Service Template In DB";
-  public static final String CREATE_ENRICH_SERVICE_TEMPLATE =
-      "Create Enriched Service Template In DB";
-  public static final String GET_SERVICE_MODEL = "Get service model";
-  public static final String GET_SERVICE_TEMPLATE = "Get Service Template";
-  public static final String CREATE_REQUIREMENT_ASSIGNMENT = "Create Requierment Assignment";
-  public static final String GENERATE_TRANSLATED_ID = "Generate Translated Id";
-  public static final String ADD_ENTITIES_TO_TOSCA = "Add Entities To TOSCA";
-  public static final String CREATE_CSAR = "Create CSAR";
-  public static final String PACK_ARTIFACTS = "Pack Artifacts Into CSAR File";
-
-  public static final String VALIDATE_CHOICE_VALUE = "Check Chosen Value";
-
-  public static final String INSERT_INTO_APPLICATION_CONFIG =
-      "Insert Value Into Application Config";
-
-  public static final String VALIDATE_FILE_DATA_STRUCTURE = "Validate Manifest Sent From User";
-  public static final String CREATE_IMAGE = "Create Image";
-  public static final String DELETE_IMAGE = "Delete Image";
-  public static final String UPDATE_IMAGE = "Update Image";
-
-  public static final String CREATE_COMPUTE = "Create Compute";
-  public static final String UPDATE_COMPUTE = "Update Compute";
-  public static final String DELETE_COMPUTE = "Delete Compute";
-
-  public static final String COLLECT_MANUAL_VSP_TOSCA_DATA = "Collect Manual Vsp Tosca data";
-  public static final String GENERATE_MANUAL_VSP_TOSCA = "Generate Manual Vsp Tosca";
-
-  public static final String VALIDATE_DATE_RANGE = "Validate Date Range";
-
-  public static final String CREATE_COMPONENT_DEPENDENCY_MODEL = "Create Component Dependency "
-      + "Model";
-
-  public static final String READ_RESOURCE_FILE = "Read Resource File";
-  private LoggerTragetServiceName(){
-    
-  }
-}
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/globaltypes/GlobalTypesServiceTemplates.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/globaltypes/GlobalTypesServiceTemplates.java
index 5490452..99f550e 100644
--- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/globaltypes/GlobalTypesServiceTemplates.java
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/globaltypes/GlobalTypesServiceTemplates.java
@@ -20,7 +20,6 @@
 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.logging.types.LoggerErrorDescription;
 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
 import org.openecomp.sdc.tosca.services.ToscaExtensionYamlUtil;
 import org.openecomp.sdc.tosca.services.ToscaUtil;
@@ -32,6 +31,8 @@
 
 public class GlobalTypesServiceTemplates {
 
+  private static final String FAILED_TO_GENERATE_GLOBAL_TYPES = "Failed to generate globalTypes";
+
   private static final Map<OnboardingTypesEnum, Map<String, ServiceTemplate>>
       onboardingGlobalTypesServiceTemplates;
 
@@ -46,7 +47,7 @@
       throw coreException;
     } catch (Exception exception) {
       throw new CoreException((new ErrorCode.ErrorCodeBuilder())
-          .withMessage(LoggerErrorDescription.FAILED_TO_GENERATE_GLOBAL_TYPES)
+          .withMessage(FAILED_TO_GENERATE_GLOBAL_TYPES)
           .withId("GlobalTypes Read Error").withCategory(ErrorCategory.APPLICATION).build(),
           exception);
     }
@@ -57,7 +58,7 @@
                                                                                 onboardingType) {
     if (onboardingType == null) {
       throw new CoreException((new ErrorCode.ErrorCodeBuilder())
-          .withMessage(LoggerErrorDescription.FAILED_TO_GENERATE_GLOBAL_TYPES)
+          .withMessage(FAILED_TO_GENERATE_GLOBAL_TYPES)
           .withId("Invalid Onboarding Type").withCategory(ErrorCategory.APPLICATION).build());
     }
     return onboardingGlobalTypesServiceTemplates.get(onboardingType);
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/utils/ResourceWalker.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/utils/ResourceWalker.java
index dfeea57..e599367 100644
--- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/utils/ResourceWalker.java
+++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/utils/ResourceWalker.java
@@ -20,7 +20,6 @@
 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.logging.types.LoggerErrorDescription;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -42,6 +41,8 @@
 
 public class ResourceWalker {
 
+  private static final String RESOURCE_FILE_READ_ERROR = "Can't read resource file from class path.";
+
   private ResourceWalker() {
   }
 
@@ -61,7 +62,7 @@
         filesContent.put(fileName, IOUtils.toString(reader));
       } catch (IOException exception) {
         throw new CoreException((new ErrorCode.ErrorCodeBuilder())
-            .withMessage(LoggerErrorDescription.RESOURCE_FILE_READ_ERROR
+            .withMessage(RESOURCE_FILE_READ_ERROR
                 + " File name = " + fileName)
             .withId("Resource Read Error").withCategory(ErrorCategory.APPLICATION).build(),
             exception);
