Implement hiding mechanism 97/132897/17
authorvasraz <vasyl.razinkov@est.tech>
Mon, 23 Jan 2023 20:10:43 +0000 (20:10 +0000)
committerVasyl Razinkov <vasyl.razinkov@est.tech>
Wed, 25 Jan 2023 19:34:46 +0000 (19:34 +0000)
Signed-off-by: Vasyl Razinkov <vasyl.razinkov@est.tech>
Change-Id: I799af15e31b724ca394eebe435223c03186fb6d3
Issue-ID: SDC-4344

16 files changed:
catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/CategoriesImportManager.java
catalog-dao/src/main/java/org/openecomp/sdc/be/dao/neo4j/GraphPropertiesDictionary.java
catalog-dao/src/main/java/org/openecomp/sdc/be/resources/data/category/CategoryData.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/TopologyTemplateOperation.java
catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementOperation.java
catalog-ui/src/app/models/category.ts
catalog-ui/src/app/models/components/component.ts
catalog-ui/src/app/utils/constants.ts
catalog-ui/src/app/view-models/workspace/tabs/general/general-view-model.ts
catalog-ui/src/app/view-models/workspace/tabs/general/general-view.html
common-be/src/main/java/org/openecomp/sdc/be/datatypes/category/CategoryDataDefinition.java
common-be/src/main/java/org/openecomp/sdc/be/datatypes/category/MetadataKeyDataDefinition.java
common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/GraphPropertyEnum.java
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/main/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/TranslatedFileDataDto.java [deleted file]
openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/test/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/TranslatedFileDataDtoTest.java [deleted file]
openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/type/TranslatedFileData.java [deleted file]

index 39ff001..340c5b1 100644 (file)
  */
 package org.openecomp.sdc.be.components.impl;
 
+import static org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary.DISPLAY_NAME;
+import static org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary.ICONS;
+import static org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary.NAME;
+import static org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary.NOT_APPLICABLE_METADATA_KEYS;
+import static org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary.USE_SERVICE_SUBSTITUTION_FOR_NESTED_SERVICES;
+
 import fj.data.Either;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -226,19 +232,20 @@ public class CategoriesImportManager {
         for (Entry<String, Object> entry : categories.entrySet()) {
             CategoryDefinition catDef = new CategoryDefinition();
             Map<String, Object> category = (Map<String, Object>) entry.getValue();
-            catName = (String) category.get("name");
+            catName = (String) category.get(NAME.getProperty());
             catDef.setName(catName);
-            catDef.setDisplayName((String) category.get("displayName"));
-            icons = (List<String>) category.get("icons");
+            catDef.setDisplayName((String) category.get(DISPLAY_NAME.getProperty()));
+            icons = (List<String>) category.get(ICONS.getProperty());
             catDef.setIcons(icons);
             String normalizedName = ValidationUtils.normalizeCategoryName4Uniqueness(catName);
             catDef.setNormalizedName(normalizedName);
             catDef.setModels((List<String>) category.get("models"));
-            final Object useServiceSubstitutionForNestedServicesProperty = category.get("useServiceSubstitutionForNestedServices");
+            final Object useServiceSubstitutionForNestedServicesProperty = category.get(USE_SERVICE_SUBSTITUTION_FOR_NESTED_SERVICES.getProperty());
             final boolean useServiceSubstitutionForNestedServices =
                 useServiceSubstitutionForNestedServicesProperty == null ? false : (Boolean) useServiceSubstitutionForNestedServicesProperty;
             catDef.setUseServiceSubstitutionForNestedServices(useServiceSubstitutionForNestedServices);
             catDef.setMetadataKeys(getMetadataKeys(category));
+            catDef.setNotApplicableMetadataKeys((List<String>) category.get(NOT_APPLICABLE_METADATA_KEYS.getProperty()));
             categoriesDef.add(catDef);
         }
         return categoriesDef;
index 5a287c9..2f82cb5 100644 (file)
@@ -134,6 +134,7 @@ public enum GraphPropertiesDictionary {
     ICONS               ("icons",                   String.class,               false,      false),
     METADATA_KEYS       ("metadataKeys",            String.class,               false,      false),
     USE_SERVICE_SUBSTITUTION_FOR_NESTED_SERVICES   ("useServiceSubstitutionForNestedServices",      Boolean.class,                 false,      false),
+    NOT_APPLICABLE_METADATA_KEYS("notApplicableMetadataKeys", String.class,     false,      false),
     //relation
     CAPABILITY_OWNER_ID        ("capOwnerId",                          String.class,                           false,          false),
     REQUIREMENT_OWNER_ID ("reqOwnerId",                                String.class,                           false,          false),
index cd585ab..c1c6b2a 100644 (file)
@@ -57,8 +57,10 @@ public class CategoryData extends GraphNode {
         categoryDataDefinition.setUseServiceSubstitutionForNestedServices(useServiceSubstitutionForNestedServices);
         Type listType = new TypeToken<List<String>>() {
         }.getType();
-        List<String> iconsfromJson = getGson().fromJson((String) properties.get(GraphPropertiesDictionary.ICONS.getProperty()), listType);
-        categoryDataDefinition.setIcons(iconsfromJson);
+        categoryDataDefinition.setNotApplicableMetadataKeys(
+            getGson().fromJson((String) properties.get(GraphPropertiesDictionary.NOT_APPLICABLE_METADATA_KEYS.getProperty()), listType));
+        List<String> iconsFromJson = getGson().fromJson((String) properties.get(GraphPropertiesDictionary.ICONS.getProperty()), listType);
+        categoryDataDefinition.setIcons(iconsFromJson);
         categoryDataDefinition.setModels(getGson().fromJson((String) properties.get(GraphPropertiesDictionary.MODEL.getProperty()), listType));
         final Type metadataKeylistType = new TypeToken<List<MetadataKeyDataDefinition>>() {
         }.getType();
@@ -87,6 +89,7 @@ public class CategoryData extends GraphNode {
         addIfExists(map, GraphPropertiesDictionary.ICONS, categoryDataDefinition.getIcons());
         addIfExists(map, GraphPropertiesDictionary.USE_SERVICE_SUBSTITUTION_FOR_NESTED_SERVICES,
             categoryDataDefinition.isUseServiceSubstitutionForNestedServices());
+        addIfExists(map, GraphPropertiesDictionary.NOT_APPLICABLE_METADATA_KEYS, categoryDataDefinition.getNotApplicableMetadataKeys());
         addIfExists(map, GraphPropertiesDictionary.METADATA_KEYS, categoryDataDefinition.getMetadataKeys());
         return map;
     }
index 790499c..603e09b 100644 (file)
@@ -1184,14 +1184,15 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
         category.setUniqueId(categoryV.getUniqueId());
         category.setNormalizedName((String) metadataProperties.get(GraphPropertyEnum.NORMALIZED_NAME));
         category.setName((String) metadataProperties.get(GraphPropertyEnum.NAME));
-        final Boolean useServiceSubstitutionForNestedServices = (Boolean) metadataProperties
-            .get(GraphPropertyEnum.USE_SUBSTITUTION_FOR_NESTED_SERVICES);
+        final Object useServiceSubstitutionForNestedServices = metadataProperties.get(GraphPropertyEnum.USE_SUBSTITUTION_FOR_NESTED_SERVICES);
         category.setUseServiceSubstitutionForNestedServices(
-            useServiceSubstitutionForNestedServices == null ? false : useServiceSubstitutionForNestedServices);
+            useServiceSubstitutionForNestedServices != null && (boolean) useServiceSubstitutionForNestedServices);
         Type listTypeCat = new TypeToken<List<String>>() {
         }.getType();
-        List<String> iconsfromJsonCat = getGson().fromJson((String) metadataProperties.get(GraphPropertyEnum.ICONS.getProperty()), listTypeCat);
-        category.setIcons(iconsfromJsonCat);
+        category.setNotApplicableMetadataKeys(
+            (getGson().fromJson((String) metadataProperties.get(GraphPropertyEnum.NOT_APPLICABLE_METADATA_KEYS.getProperty()), listTypeCat)));
+        List<String> iconsFromJsonCat = getGson().fromJson((String) metadataProperties.get(GraphPropertyEnum.ICONS.getProperty()), listTypeCat);
+        category.setIcons(iconsFromJsonCat);
         category.setModels((getGson().fromJson((String) metadataProperties.get(GraphPropertyEnum.MODEL.getProperty()), listTypeCat)));
         final Type metadataKeysTypeCat = new TypeToken<List<MetadataKeyDataDefinition>>() {
         }.getType();
@@ -1589,7 +1590,7 @@ public class TopologyTemplateOperation extends ToscaElementOperation {
         String policyName = policyDefinition.getName();
         if (StringUtils.isBlank(policyName)) {
             policyName = buildSubComponentName((String) componentV.getJsonMetadataField(JsonPresentationFields.NAME),
-                    policyDefinition.getPolicyTypeName(), counter);
+                policyDefinition.getPolicyTypeName(), counter);
             policyDefinition.setName(policyName);
         }
         policyDefinition.setInvariantName(policyName);
index 910d7ae..327ece3 100644 (file)
@@ -152,7 +152,7 @@ public abstract class ToscaElementOperation extends BaseOperation {
 
     protected GraphVertex getHighestVersionFrom(GraphVertex v) {
         Either<GraphVertex, JanusGraphOperationStatus> childVertexE = janusGraphDao
-                .getChildVertex(v, EdgeLabelEnum.VERSION, JsonParseFlagEnum.NoParse);
+            .getChildVertex(v, EdgeLabelEnum.VERSION, JsonParseFlagEnum.NoParse);
         GraphVertex highestVersionVertex = v;
         while (childVertexE.isLeft()) {
             highestVersionVertex = childVertexE.left().value();
@@ -279,9 +279,10 @@ public abstract class ToscaElementOperation extends BaseOperation {
 
     /**
      * Creates the MODEL in case it exits on the previous version
-     * @param previousToscaElement previous element version
-     * @param nextToscaElement latest element version
-     * @param user user
+     *
+     * @param previousToscaElement      previous element version
+     * @param nextToscaElement          latest element version
+     * @param user                      user
      * @param createdToscaElementVertex created tosca element
      * @param edgeLabelEnum
      * @return
@@ -1079,6 +1080,10 @@ public abstract class ToscaElementOperation extends BaseOperation {
         List<MetadataKeyDataDefinition> metadataKeys = categoryV.property(GraphPropertyEnum.METADATA_KEYS.getProperty()).isPresent() ? getGson()
             .fromJson((String) categoryV.property(GraphPropertyEnum.METADATA_KEYS.getProperty()).value(), listTypeCat) : Collections.emptyList();
         category.setMetadataKeys(metadataKeys);
+        VertexProperty<Object> property = categoryV.property(GraphPropertyEnum.NOT_APPLICABLE_METADATA_KEYS.getProperty());
+        category.setNotApplicableMetadataKeys(
+            property.isPresent() ? getGson().fromJson((String) property.value(), new TypeToken<List<String>>() {
+            }.getType()) : Collections.emptyList());
         categories.add(category);
         catalogComponent.setCategories(categories);
         return JanusGraphOperationStatus.OK;
@@ -1241,11 +1246,10 @@ public abstract class ToscaElementOperation extends BaseOperation {
 
     private void generateNewToscaFileName(String componentType, String componentName, ArtifactDataDefinition artifactInfo) {
         Optional<Entry<String, Object>> oConfig = ConfigurationManager.getConfigurationManager().getConfiguration().getToscaArtifacts()
-                .entrySet().stream().filter(p -> p.getKey().equalsIgnoreCase(artifactInfo.getArtifactLabel())).findAny();
+            .entrySet().stream().filter(p -> p.getKey().equalsIgnoreCase(artifactInfo.getArtifactLabel())).findAny();
         if (oConfig.isPresent()) {
-            artifactInfo.setArtifactName(componentType + "-" + componentName + ((Map<String, Object>)oConfig.get().getValue()).get("artifactName"));
-        }
-        else {
+            artifactInfo.setArtifactName(componentType + "-" + componentName + ((Map<String, Object>) oConfig.get().getValue()).get("artifactName"));
+        } else {
             artifactInfo.setArtifactName(componentType + "-" + componentName);
         }
     }
index a6445ca..dc7cf56 100644 (file)
 
 'use strict';
 
-
-
 export interface ICategoryBase {
-    //server properties
-    name:string;
-    displayName:string;
-    normalizedName:string;
-    uniqueId:string;
-    models:Array<string>;
-    icons:Array<string>;
+    // server properties
+    name: string;
+    displayName: string;
+    normalizedName: string;
+    uniqueId: string;
+    models: Array<string>;
+    icons: Array<string>;
     metadataKeys: IMetadataKey[];
 
-    //custom properties
-    filterTerms:string;
-    isDisabled:boolean;
-    filteredGroup:Array<IGroup>;
+    // custom properties
+    filterTerms: string;
+    isDisabled: boolean;
+    filteredGroup: Array<IGroup>;
 }
 
 export interface IMainCategory extends ICategoryBase {
-    subcategories:Array<ISubCategory>;
-    useServiceSubstitutionForNestedServices:boolean;
+    subcategories: Array<ISubCategory>;
+    useServiceSubstitutionForNestedServices: boolean;
+    notApplicableMetadataKeys: Array<string>;
 }
 
 export interface ISubCategory extends ICategoryBase {
-    groupings:Array<ICategoryBase>;
+    groupings: Array<ICategoryBase>;
 }
 
 export interface IGroup extends ICategoryBase {
 }
 
 export interface IMetadataKey {
-       name:string;
-       displayName:string;
-       mandatory:boolean;
-       validValues: string[];
-       defaultValue: string;
+    name: string;
+    displayName: string;
+    mandatory: boolean;
+    validValues: string[];
+    defaultValue: string;
 }
index bcebf3b..a2f5a5e 100644 (file)
@@ -573,7 +573,6 @@ export abstract class Component implements IComponent {
         this.derivedList = componentMetadata.derivedList;
         this.normalizedName = componentMetadata.normalizedName;
         this.systemName = componentMetadata.systemName;
-        this.categories = componentMetadata.categories;
         this.isArchived = componentMetadata.isArchived;
         this.vspArchived = componentMetadata.vspArchived;
         this.componentMetadata = componentMetadata;
index a215a87..087ecaf 100644 (file)
@@ -27,432 +27,432 @@ export let DEFAULT_ICON = 'defaulticon';
 export let CP_END_POINT = 'CpEndPoint';
 export let CHANGE_COMPONENT_CSAR_VERSION_FLAG = 'changeComponentCsarVersion';
 export let PREVIOUS_CSAR_COMPONENT = 'previousCsarComponent'
-export let CATEGORY_SERVICE_METADATA_KEYS = ["Naming Policy","Service Type","Service Function","Service Role"];
+export let CATEGORY_SERVICE_METADATA_KEYS = ["Naming Policy", "Service Type", "Service Function", "Service Role"];
 export let DEFAULT_MODEL_NAME = "SDC AID";
 
 export class GeneralStatus {
-  static OK = 'OK';
-  static GENERAL_ERROR = 'GENERAL_ERROR';
+    static OK = 'OK';
+    static GENERAL_ERROR = 'GENERAL_ERROR';
 }
 
 export class ComponentType {
-  static SERVICE = 'SERVICE';
-  static RESOURCE = 'RESOURCE';
-  static RESOURCE_INSTANCE = 'RESOURCE_INSTANCE';
-  static SERVICE_PROXY = 'ServiceProxy'
-  static SERVICE_SUBSTITUTION = 'ServiceSubstitution'
+    static SERVICE = 'SERVICE';
+    static RESOURCE = 'RESOURCE';
+    static RESOURCE_INSTANCE = 'RESOURCE_INSTANCE';
+    static SERVICE_PROXY = 'ServiceProxy'
+    static SERVICE_SUBSTITUTION = 'ServiceSubstitution'
 }
 
 export class ToscaType {
-  static DATATYPE = 'DATATYPE';
+    static DATATYPE = 'DATATYPE';
 }
 
 export class Icon {
-  static DEFAULT_ICON = 'defaulticon';
-  static DATATYPE_ICON = 'securityrules';
-  static SERVICE_TYPE_60 = 'services_60';
-  static COLOR_LIGHTBLUE = 'lightBlue'
-  static COLOR_WHITE = 'white';
-  static COLOR_PURPLE = 'purple';
-  static RESOURCE_TYPE_24 = 'resources_24';
-  static RESOURCE_TYPE_60 = 'resources_60';
-  static SHAPE_CIRCLE = 'circle';
-  static SIZE_MEDIUM = 'medium';
-  static SIZE_X_LARGE = 'x_large';
-  static ERROR = 'error';
+    static DEFAULT_ICON = 'defaulticon';
+    static DATATYPE_ICON = 'securityrules';
+    static SERVICE_TYPE_60 = 'services_60';
+    static COLOR_LIGHTBLUE = 'lightBlue'
+    static COLOR_WHITE = 'white';
+    static COLOR_PURPLE = 'purple';
+    static RESOURCE_TYPE_24 = 'resources_24';
+    static RESOURCE_TYPE_60 = 'resources_60';
+    static SHAPE_CIRCLE = 'circle';
+    static SIZE_MEDIUM = 'medium';
+    static SIZE_X_LARGE = 'x_large';
+    static ERROR = 'error';
 }
 
 export class ServerTypeUrl {
-  static RESOURCES = 'resources/';
-  static SERVICES = 'services/';
-
-  public static toServerTypeUrl(componentType: ComponentType): string {
-    if (componentType == ComponentType.SERVICE) {
-      return ServerTypeUrl.SERVICES.slice(0, -1);
-    } else if (componentType == ComponentType.RESOURCE) {
-      return ServerTypeUrl.RESOURCES.slice(0, -1);
-    } else {
-      return undefined;
+    static RESOURCES = 'resources/';
+    static SERVICES = 'services/';
+
+    public static toServerTypeUrl(componentType: ComponentType): string {
+        if (componentType == ComponentType.SERVICE) {
+            return ServerTypeUrl.SERVICES.slice(0, -1);
+        } else if (componentType == ComponentType.RESOURCE) {
+            return ServerTypeUrl.RESOURCES.slice(0, -1);
+        } else {
+            return undefined;
+        }
     }
-  }
 }
 
 
 export class ResourceType {
-  static VF = 'VF';
-  static VL = 'VL';
-  static CP = 'CP';
-  static VFC = 'VFC';
-  static VFCMT = 'VFCMT';
-  static PNF = 'PNF';
-  static CVFC = 'CVFC';
-  static CONFIGURATION = 'Configuration';
-  static CR = 'CR';
+    static VF = 'VF';
+    static VL = 'VL';
+    static CP = 'CP';
+    static VFC = 'VFC';
+    static VFCMT = 'VFCMT';
+    static PNF = 'PNF';
+    static CVFC = 'CVFC';
+    static CONFIGURATION = 'Configuration';
+    static CR = 'CR';
 }
 
 export class SdcElementType {
-  static GROUP = 'GROUP';
-  static POLICY = 'POLICY';
-  static SERVICE_PROXY = 'ServiceProxy'
+    static GROUP = 'GROUP';
+    static POLICY = 'POLICY';
+    static SERVICE_PROXY = 'ServiceProxy'
 }
 
 export class ComponentState {
-  static CERTIFICATION_IN_PROGRESS = 'CERTIFICATION_IN_PROGRESS';
-  static CERTIFIED = 'CERTIFIED';
-  static NOT_CERTIFIED_CHECKOUT = 'NOT_CERTIFIED_CHECKOUT';
-  static NOT_CERTIFIED_CHECKIN = 'NOT_CERTIFIED_CHECKIN';
-  static READY_FOR_CERTIFICATION = 'READY_FOR_CERTIFICATION';
+    static CERTIFICATION_IN_PROGRESS = 'CERTIFICATION_IN_PROGRESS';
+    static CERTIFIED = 'CERTIFIED';
+    static NOT_CERTIFIED_CHECKOUT = 'NOT_CERTIFIED_CHECKOUT';
+    static NOT_CERTIFIED_CHECKIN = 'NOT_CERTIFIED_CHECKIN';
+    static READY_FOR_CERTIFICATION = 'READY_FOR_CERTIFICATION';
 }
 
 export class DistributionStatus {
-  DISTRIBUTION_NOT_APPROVED = 'DISTRIBUTION_NOT_APPROVED';
-  DISTRIBUTION_APPROVED = 'DISTRIBUTION_APPROVED';
-  DISTRIBUTED = 'DISTRIBUTED';
-  DISTRIBUTION_REJECTED = 'DISTRIBUTION_REJECTED';
+    DISTRIBUTION_NOT_APPROVED = 'DISTRIBUTION_NOT_APPROVED';
+    DISTRIBUTION_APPROVED = 'DISTRIBUTION_APPROVED';
+    DISTRIBUTED = 'DISTRIBUTED';
+    DISTRIBUTION_REJECTED = 'DISTRIBUTION_REJECTED';
 }
 
 export class ArtifactGroupType {
-  static DEPLOYMENT = "DEPLOYMENT";
-  static INFORMATION = "INFORMATIONAL";
-  static SERVICE_API = "SERVICE_API";
-  static TOSCA = "TOSCA";
+    static DEPLOYMENT = "DEPLOYMENT";
+    static INFORMATION = "INFORMATIONAL";
+    static SERVICE_API = "SERVICE_API";
+    static TOSCA = "TOSCA";
 }
 
 export class ArtifactType {
 
-  static DEPLOYMENT = "DEPLOYMENT";
-  static INFORMATION = "INFORMATIONAL";
-  static SERVICE_API = "SERVICE_API";
-  static HEAT_ENV = "HEAT_ENV";
-  static HEAT = "HEAT";
-  static HEAT_VOL = "HEAT_VOL";
-  static HEAT_NET = "HEAT_NET";
-  static VF_LICENSE = "VF_LICENSE";
-  static PM_DICTIONARY = "PM_DICTIONARY";
-  static VENDOR_LICENSE = "VENDOR_LICENSE";
-  static THIRD_PARTY_RESERVED_TYPES = {
-    WORKFLOW: "WORKFLOW",
-    NETWORK_CALL_FLOW: "NETWORK_CALL_FLOW",
-    AAI_SERVICE_MODEL: "AAI_SERVICE_MODEL",
-    AAI_VF_MODEL: "AAI_VF_MODEL",
-    AAI_VF_MODULE_MODEL: "AAI_VF_MODULE_MODEL",
-    AAI_VF_INSTANCE_MODEL: "AAI_VF_INSTANCE_MODEL"
-  };
-  static TOSCA = {TOSCA_TEMPLATE: "TOSCA_TEMPLATE", TOSCA_CSAR: "TOSCA_CSAR"};
-  static VES_EVENTS = "VES_EVENTS";
+    static DEPLOYMENT = "DEPLOYMENT";
+    static INFORMATION = "INFORMATIONAL";
+    static SERVICE_API = "SERVICE_API";
+    static HEAT_ENV = "HEAT_ENV";
+    static HEAT = "HEAT";
+    static HEAT_VOL = "HEAT_VOL";
+    static HEAT_NET = "HEAT_NET";
+    static VF_LICENSE = "VF_LICENSE";
+    static PM_DICTIONARY = "PM_DICTIONARY";
+    static VENDOR_LICENSE = "VENDOR_LICENSE";
+    static THIRD_PARTY_RESERVED_TYPES = {
+        WORKFLOW: "WORKFLOW",
+        NETWORK_CALL_FLOW: "NETWORK_CALL_FLOW",
+        AAI_SERVICE_MODEL: "AAI_SERVICE_MODEL",
+        AAI_VF_MODEL: "AAI_VF_MODEL",
+        AAI_VF_MODULE_MODEL: "AAI_VF_MODULE_MODEL",
+        AAI_VF_INSTANCE_MODEL: "AAI_VF_INSTANCE_MODEL"
+    };
+    static TOSCA = {TOSCA_TEMPLATE: "TOSCA_TEMPLATE", TOSCA_CSAR: "TOSCA_CSAR"};
+    static VES_EVENTS = "VES_EVENTS";
 }
 
 export class SEVERITY {
-  public static DEBUG = 'DEBUG';
-  public static INFO = 'INFO';
-  public static WARNING = 'WARNING';
-  public static ERROR = 'ERROR';
+    public static DEBUG = 'DEBUG';
+    public static INFO = 'INFO';
+    public static WARNING = 'WARNING';
+    public static ERROR = 'ERROR';
 }
 
 export class PROPERTY_TYPES {
-  public static STRING = 'string';
-  public static INTEGER = 'integer';
-  public static TIMESTAMP = 'timestamp';
-  public static FLOAT = 'float';
-  public static BOOLEAN = 'boolean';
-  public static JSON = 'json';
-  public static RANGE = 'range';
-  public static MAP = 'map';
-  public static LIST = 'list';
-  public static SCALAR_BITRATE = 'scalar-unit.bitrate';
-  public static SCALAR_FREQUENCY = 'scalar-unit.frequency';
-  public static SCALAR_SIZE = 'scalar-unit.size';
-  public static SCALAR_TIME = 'scalar-unit.time';
+    public static STRING = 'string';
+    public static INTEGER = 'integer';
+    public static TIMESTAMP = 'timestamp';
+    public static FLOAT = 'float';
+    public static BOOLEAN = 'boolean';
+    public static JSON = 'json';
+    public static RANGE = 'range';
+    public static MAP = 'map';
+    public static LIST = 'list';
+    public static SCALAR_BITRATE = 'scalar-unit.bitrate';
+    public static SCALAR_FREQUENCY = 'scalar-unit.frequency';
+    public static SCALAR_SIZE = 'scalar-unit.size';
+    public static SCALAR_TIME = 'scalar-unit.time';
 }
 
 export class SOURCES {
-  public static A_AND_AI = 'A&AI';
-  public static ORDER = 'Order';
-  public static RUNTIME = 'Runtime';
+    public static A_AND_AI = 'A&AI';
+    public static ORDER = 'Order';
+    public static RUNTIME = 'Runtime';
 }
 
 export class PROPERTY_DATA {
-  public static TYPES = [PROPERTY_TYPES.STRING, PROPERTY_TYPES.INTEGER, PROPERTY_TYPES.TIMESTAMP, PROPERTY_TYPES.FLOAT, PROPERTY_TYPES.BOOLEAN, PROPERTY_TYPES.JSON, PROPERTY_TYPES.SCALAR_BITRATE, PROPERTY_TYPES.SCALAR_FREQUENCY, PROPERTY_TYPES.SCALAR_SIZE, PROPERTY_TYPES.SCALAR_TIME, PROPERTY_TYPES.LIST, PROPERTY_TYPES.MAP, PROPERTY_TYPES.RANGE];
-  public static SIMPLE_TYPES = [PROPERTY_TYPES.STRING, PROPERTY_TYPES.INTEGER, PROPERTY_TYPES.TIMESTAMP, PROPERTY_TYPES.FLOAT, PROPERTY_TYPES.BOOLEAN, PROPERTY_TYPES.JSON, PROPERTY_TYPES.SCALAR_BITRATE, PROPERTY_TYPES.SCALAR_FREQUENCY, PROPERTY_TYPES.SCALAR_SIZE, PROPERTY_TYPES.SCALAR_TIME];
-  public static SIMPLE_TYPES_COMPARABLE = [PROPERTY_TYPES.STRING, PROPERTY_TYPES.INTEGER, PROPERTY_TYPES.FLOAT];
-  public static SCHEMA_TYPES = [PROPERTY_TYPES.LIST, PROPERTY_TYPES.MAP];
-  public static SCALAR_TYPES = [PROPERTY_TYPES.SCALAR_BITRATE, PROPERTY_TYPES.SCALAR_FREQUENCY, PROPERTY_TYPES.SCALAR_SIZE, PROPERTY_TYPES.SCALAR_TIME];
-  public static ROOT_DATA_TYPE = "tosca.datatypes.Root";
-  public static OPENECOMP_ROOT = "org.openecomp.datatypes.Root";
-  public static SUPPLEMENTAL_DATA = "supplemental_data";
-  public static SOURCES = [SOURCES.A_AND_AI, SOURCES.ORDER, SOURCES.RUNTIME];
-  public static COMPARABLE_TYPES = [PROPERTY_TYPES.STRING, PROPERTY_TYPES.INTEGER, PROPERTY_TYPES.FLOAT, PROPERTY_TYPES.TIMESTAMP, PROPERTY_TYPES.SCALAR_BITRATE, PROPERTY_TYPES.SCALAR_FREQUENCY, PROPERTY_TYPES.SCALAR_SIZE, PROPERTY_TYPES.SCALAR_TIME];
+    public static TYPES = [PROPERTY_TYPES.STRING, PROPERTY_TYPES.INTEGER, PROPERTY_TYPES.TIMESTAMP, PROPERTY_TYPES.FLOAT, PROPERTY_TYPES.BOOLEAN, PROPERTY_TYPES.JSON, PROPERTY_TYPES.SCALAR_BITRATE, PROPERTY_TYPES.SCALAR_FREQUENCY, PROPERTY_TYPES.SCALAR_SIZE, PROPERTY_TYPES.SCALAR_TIME, PROPERTY_TYPES.LIST, PROPERTY_TYPES.MAP, PROPERTY_TYPES.RANGE];
+    public static SIMPLE_TYPES = [PROPERTY_TYPES.STRING, PROPERTY_TYPES.INTEGER, PROPERTY_TYPES.TIMESTAMP, PROPERTY_TYPES.FLOAT, PROPERTY_TYPES.BOOLEAN, PROPERTY_TYPES.JSON, PROPERTY_TYPES.SCALAR_BITRATE, PROPERTY_TYPES.SCALAR_FREQUENCY, PROPERTY_TYPES.SCALAR_SIZE, PROPERTY_TYPES.SCALAR_TIME];
+    public static SIMPLE_TYPES_COMPARABLE = [PROPERTY_TYPES.STRING, PROPERTY_TYPES.INTEGER, PROPERTY_TYPES.FLOAT];
+    public static SCHEMA_TYPES = [PROPERTY_TYPES.LIST, PROPERTY_TYPES.MAP];
+    public static SCALAR_TYPES = [PROPERTY_TYPES.SCALAR_BITRATE, PROPERTY_TYPES.SCALAR_FREQUENCY, PROPERTY_TYPES.SCALAR_SIZE, PROPERTY_TYPES.SCALAR_TIME];
+    public static ROOT_DATA_TYPE = "tosca.datatypes.Root";
+    public static OPENECOMP_ROOT = "org.openecomp.datatypes.Root";
+    public static SUPPLEMENTAL_DATA = "supplemental_data";
+    public static SOURCES = [SOURCES.A_AND_AI, SOURCES.ORDER, SOURCES.RUNTIME];
+    public static COMPARABLE_TYPES = [PROPERTY_TYPES.STRING, PROPERTY_TYPES.INTEGER, PROPERTY_TYPES.FLOAT, PROPERTY_TYPES.TIMESTAMP, PROPERTY_TYPES.SCALAR_BITRATE, PROPERTY_TYPES.SCALAR_FREQUENCY, PROPERTY_TYPES.SCALAR_SIZE, PROPERTY_TYPES.SCALAR_TIME];
 }
 
 export class PROPERTY_VALUE_CONSTRAINTS {
-  public static MAX_LENGTH = 2500;
-  public static JSON_MAX_LENGTH = 4096;
-  public static NAME_MAX_LENGTH = 100;
+    public static MAX_LENGTH = 2500;
+    public static JSON_MAX_LENGTH = 4096;
+    public static NAME_MAX_LENGTH = 100;
 }
 
 export class Role {
-  public static ADMIN = 'ADMIN';
-  public static DESIGNER = 'DESIGNER';
-  public static TESTER = 'TESTER';
-  public static OPS = 'OPS';
-  public static GOVERNOR = 'GOVERNOR';
+    public static ADMIN = 'ADMIN';
+    public static DESIGNER = 'DESIGNER';
+    public static TESTER = 'TESTER';
+    public static OPS = 'OPS';
+    public static GOVERNOR = 'GOVERNOR';
 }
 
 export enum FormState {
-  CREATE,
-  UPDATE,
-  IMPORT,
-  VIEW
+    CREATE,
+    UPDATE,
+    IMPORT,
+    VIEW
 }
 
 export class instantiationType {
-  public static MACRO = 'Macro';
-  public static A_LA_CARTE = 'A-la-carte';
+    public static MACRO = 'Macro';
+    public static A_LA_CARTE = 'A-la-carte';
 }
 
 export class WorkspaceMode {
-  public static CREATE = 'create';
-  public static EDIT = 'edit';
-  public static IMPORT = 'import';
-  public static VIEW = 'view';
+    public static CREATE = 'create';
+    public static EDIT = 'edit';
+    public static IMPORT = 'import';
+    public static VIEW = 'view';
 }
 
 export class ImagesUrl {
-  public static RESOURCE_ICONS = '/assets/styles/images/resource-icons/';
-  public static SERVICE_ICONS = '/assets/styles/images/service-icons/';
-  public static SERVICE_PROXY_ICONS = '/assets/styles/images/service-proxy-icons/';
-  public static SELECTED_UCPE_INSTANCE = '/assets/styles/images/resource-icons/selectedUcpeInstance.png';
-  public static SELECTED_CP_INSTANCE = '/assets/styles/images/resource-icons/selectedCPInstance.png';
-  public static SELECTED_VL_INSTANCE = '/assets/styles/images/resource-icons/selectedVLInstance.png';
-  public static CANVAS_PLUS_ICON = '/assets/styles/images/resource-icons/canvasPlusIcon.png';
-  public static CANVAS_TAG_ICON = '/assets/styles/images/canvas-tagging-icons/indication.svg';
-  public static CANVAS_POLICY_TAGGED_ICON = '/assets/styles/images/canvas-tagging-icons/policy_added.svg';
-  public static CANVAS_GROUP_TAGGED_ICON = '/assets/styles/images/canvas-tagging-icons/group_added.svg';
-  public static MODULE_ICON = '/assets/styles/images/resource-icons/module.png';
-  public static OPEN_MODULE_ICON = '/assets/styles/images/resource-icons/openModule.png';
-  public static OPEN_MODULE_HOVER_ICON = '/assets/styles/images/resource-icons/openModuleHover.png';
-  public static CLOSE_MODULE_ICON = '/assets/styles/images/resource-icons/closeModule.png';
-  public static CLOSE_MODULE_HOVER_ICON = '/assets/styles/images/resource-icons/closeModuleHover.png';
+    public static RESOURCE_ICONS = '/assets/styles/images/resource-icons/';
+    public static SERVICE_ICONS = '/assets/styles/images/service-icons/';
+    public static SERVICE_PROXY_ICONS = '/assets/styles/images/service-proxy-icons/';
+    public static SELECTED_UCPE_INSTANCE = '/assets/styles/images/resource-icons/selectedUcpeInstance.png';
+    public static SELECTED_CP_INSTANCE = '/assets/styles/images/resource-icons/selectedCPInstance.png';
+    public static SELECTED_VL_INSTANCE = '/assets/styles/images/resource-icons/selectedVLInstance.png';
+    public static CANVAS_PLUS_ICON = '/assets/styles/images/resource-icons/canvasPlusIcon.png';
+    public static CANVAS_TAG_ICON = '/assets/styles/images/canvas-tagging-icons/indication.svg';
+    public static CANVAS_POLICY_TAGGED_ICON = '/assets/styles/images/canvas-tagging-icons/policy_added.svg';
+    public static CANVAS_GROUP_TAGGED_ICON = '/assets/styles/images/canvas-tagging-icons/group_added.svg';
+    public static MODULE_ICON = '/assets/styles/images/resource-icons/module.png';
+    public static OPEN_MODULE_ICON = '/assets/styles/images/resource-icons/openModule.png';
+    public static OPEN_MODULE_HOVER_ICON = '/assets/styles/images/resource-icons/openModuleHover.png';
+    public static CLOSE_MODULE_ICON = '/assets/styles/images/resource-icons/closeModule.png';
+    public static CLOSE_MODULE_HOVER_ICON = '/assets/styles/images/resource-icons/closeModuleHover.png';
 }
 
 
 export class CanvasHandleTypes {
-  public static ADD_EDGE = 'add-edge';
-  public static TAG_AVAILABLE = 'tag-available';
-  public static TAGGED_POLICY = 'tagged-policy';
-  public static TAGGED_GROUP = 'tagged-group';
+    public static ADD_EDGE = 'add-edge';
+    public static TAG_AVAILABLE = 'tag-available';
+    public static TAGGED_POLICY = 'tagged-policy';
+    public static TAGGED_GROUP = 'tagged-group';
 }
 
 export class ModalType {
-  static STANDARD = 'standard';
-  static ERROR = 'error';
-  static ALERT = 'alert';
+    static STANDARD = 'standard';
+    static ERROR = 'error';
+    static ALERT = 'alert';
 }
 
 export class ServerErrors {
-  static ERROR_TITLE = 'Error';
-  static DEFAULT_ERROR = 'Error getting response from server';
-  static MESSAGE_ERROR = 'Wrong error format from server';
-  static DOWNLOAD_ERROR = 'Download error';
+    static ERROR_TITLE = 'Error';
+    static DEFAULT_ERROR = 'Error getting response from server';
+    static MESSAGE_ERROR = 'Wrong error format from server';
+    static DOWNLOAD_ERROR = 'Download error';
 }
 
 export class GraphColors {
-  public static NOT_CERTIFIED_LINK = 'rgb(218,31,61)';
-  public static VL_LINK = 'rgb(216,216,216)';
-  public static ACTIVE_LINK = '#30bdf2';
-  public static BASE_LINK = 'rgb(55,55,55)';
-  public static NODE_BACKGROUND_COLOR = 'rgba(46, 162, 157, 0.24)';
-  public static NODE_SHADOW_COLOR = 'rgba(198, 230, 228, 0.7)';
-  public static NODE_OVERLAPPING_BACKGROUND_COLOR = 'rgba(179, 10, 60, 0.24)';
-  public static NODE_OVERLAPPING_SHADOW_COLOR = 'rgba(236, 194, 206, 0.7)';
-  public static NODE_UCPE_CP = '#9063cd';
-  public static NODE_UCPE = '#fbfbfb';
-  public static NODE_SELECTED_BORDER_COLOR = '#30bdf2';
-  public static SERVICE_PATH_LINK = '#70208a';
+    public static NOT_CERTIFIED_LINK = 'rgb(218,31,61)';
+    public static VL_LINK = 'rgb(216,216,216)';
+    public static ACTIVE_LINK = '#30bdf2';
+    public static BASE_LINK = 'rgb(55,55,55)';
+    public static NODE_BACKGROUND_COLOR = 'rgba(46, 162, 157, 0.24)';
+    public static NODE_SHADOW_COLOR = 'rgba(198, 230, 228, 0.7)';
+    public static NODE_OVERLAPPING_BACKGROUND_COLOR = 'rgba(179, 10, 60, 0.24)';
+    public static NODE_OVERLAPPING_SHADOW_COLOR = 'rgba(236, 194, 206, 0.7)';
+    public static NODE_UCPE_CP = '#9063cd';
+    public static NODE_UCPE = '#fbfbfb';
+    public static NODE_SELECTED_BORDER_COLOR = '#30bdf2';
+    public static SERVICE_PATH_LINK = '#70208a';
 }
 
 export class GraphTransactionLogText {
-  public static REMOVE_TEMP_LINK = "remove tempLink";
-  public static DELETE_LINK = "delete link";
-  public static ADD_LINK = "delete link";
-  public static ADD_NODE = "adding node";
+    public static REMOVE_TEMP_LINK = "remove tempLink";
+    public static DELETE_LINK = "delete link";
+    public static ADD_LINK = "delete link";
+    public static ADD_NODE = "adding node";
 }
 
 export class GraphUIObjects {
-  public static HANDLE_SIZE = 18;
-  public static NODE_OVERLAP_MIN_SIZE = 30;
-  public static DEFAULT_RESOURCE_WIDTH = 65;
-  public static SMALL_RESOURCE_WIDTH = 21;
-  public static LINK_MENU_HEIGHT = 420;
-  public static TOP_HEADER_HEIGHT = 200;
-  public static TOOLTIP_OFFSET_X = 50;
-  public static TOOLTIP_OFFSET_Y = 145;
-  public static TOOLTIP_LINK_OFFSET_X = 35;
-  public static TOOLTIP_LINK_OFFSET_Y = 75;
-  public static MENU_LINK_VL_HEIGHT_OFFSET = 250;
-  public static MENU_LINK_VL_WIDTH_OFFSET = 200;
-  public static MENU_LINK_SIMPLE_HEIGHT_OFFSET = 180;
-  public static MENU_LINK_SIMPLE_WIDTH_OFFSET = 130;
-  public static DIAGRAM_RIGHT_WIDTH_OFFSET = 248;
-  public static DIAGRAM_HEADER_OFFSET = 103;
-  public static DIAGRAM_PALETTE_WIDTH_OFFSET = 247;
-  // public static COMPOSITION_HEADER_OFFSET = 50;
-  // public static COMPOSITION_NODE_MENU_WIDTH = 230;
-  // public static COMPOSITION_NODE_MENU_HEIGHT = 200;
-  // public static COMPOSITION_RIGHT_PANEL_OFFSET = 300;
+    public static HANDLE_SIZE = 18;
+    public static NODE_OVERLAP_MIN_SIZE = 30;
+    public static DEFAULT_RESOURCE_WIDTH = 65;
+    public static SMALL_RESOURCE_WIDTH = 21;
+    public static LINK_MENU_HEIGHT = 420;
+    public static TOP_HEADER_HEIGHT = 200;
+    public static TOOLTIP_OFFSET_X = 50;
+    public static TOOLTIP_OFFSET_Y = 145;
+    public static TOOLTIP_LINK_OFFSET_X = 35;
+    public static TOOLTIP_LINK_OFFSET_Y = 75;
+    public static MENU_LINK_VL_HEIGHT_OFFSET = 250;
+    public static MENU_LINK_VL_WIDTH_OFFSET = 200;
+    public static MENU_LINK_SIMPLE_HEIGHT_OFFSET = 180;
+    public static MENU_LINK_SIMPLE_WIDTH_OFFSET = 130;
+    public static DIAGRAM_RIGHT_WIDTH_OFFSET = 248;
+    public static DIAGRAM_HEADER_OFFSET = 103;
+    public static DIAGRAM_PALETTE_WIDTH_OFFSET = 247;
+    // public static COMPOSITION_HEADER_OFFSET = 50;
+    // public static COMPOSITION_NODE_MENU_WIDTH = 230;
+    // public static COMPOSITION_NODE_MENU_HEIGHT = 200;
+    // public static COMPOSITION_RIGHT_PANEL_OFFSET = 300;
 }
 
 
 export class States {
-  public static WORKSPACE = 'workspace';
-  public static WORKSPACE_GENERAL = 'workspace.general';
-  public static WORKSPACE_ACTIVITY_LOG = 'workspace.activity_log';
-  public static WORKSPACE_DEPLOYMENT_ARTIFACTS = 'workspace.deployment_artifacts';
-  public static WORKSPACE_PROPERTIES = 'workspace.properties';
-  public static WORKSPACE_SERVICE_INPUTS = 'workspace.service_inputs';
-  public static WORKSPACE_RESOURCE_INPUTS = 'workspace.resource_inputs';
-  public static WORKSPACE_ATTRIBUTES = 'workspace.attributes';
-  public static WORKSPACE_ATTRIBUTES_OUTPUTS = 'workspace.attributes_outputs';
-  public static WORKSPACE_INFORMATION_ARTIFACTS = 'workspace.information_artifacts';
-  public static WORKSPACE_TOSCA_ARTIFACTS = 'workspace.tosca_artifacts';
-  public static WORKSPACE_COMPOSITION = 'workspace.composition';
-  public static WORKSPACE_INTERFACE_OPERATION = 'workspace.interface_operation';
-  public static WORKSPACE_INTERFACE_DEFINITION = 'workspace.interface-definition';
-  public static WORKSPACE_NETWORK_CALL_FLOW = 'workspace.network_call_flow';
-  public static WORKSPACE_MANAGEMENT_WORKFLOW = 'workspace.management_workflow';
-  public static WORKSPACE_DEPLOYMENT = 'workspace.deployment';
-  public static WORKSPACE_DISTRIBUTION = 'workspace.distribution';
-  public static WORKSPACE_PROPERTIES_ASSIGNMENT = 'workspace.properties_assignment';
-  public static WORKSPACE_REQUIREMENTS_AND_CAPABILITIES = 'workspace.reqAndCap';
-  public static WORKSPACE_REQUIREMENTS_AND_CAPABILITIES_EDITABLE = 'workspace.reqAndCapEditable';
-  public static WORKSPACE_PLUGINS = 'workspace.plugins';
-  public static WORKSPACE_NG2 = 'workspace.ng2';
-  public static TYPE_WORKSPACE = 'type-workspace';
+    public static WORKSPACE = 'workspace';
+    public static WORKSPACE_GENERAL = 'workspace.general';
+    public static WORKSPACE_ACTIVITY_LOG = 'workspace.activity_log';
+    public static WORKSPACE_DEPLOYMENT_ARTIFACTS = 'workspace.deployment_artifacts';
+    public static WORKSPACE_PROPERTIES = 'workspace.properties';
+    public static WORKSPACE_SERVICE_INPUTS = 'workspace.service_inputs';
+    public static WORKSPACE_RESOURCE_INPUTS = 'workspace.resource_inputs';
+    public static WORKSPACE_ATTRIBUTES = 'workspace.attributes';
+    public static WORKSPACE_ATTRIBUTES_OUTPUTS = 'workspace.attributes_outputs';
+    public static WORKSPACE_INFORMATION_ARTIFACTS = 'workspace.information_artifacts';
+    public static WORKSPACE_TOSCA_ARTIFACTS = 'workspace.tosca_artifacts';
+    public static WORKSPACE_COMPOSITION = 'workspace.composition';
+    public static WORKSPACE_INTERFACE_OPERATION = 'workspace.interface_operation';
+    public static WORKSPACE_INTERFACE_DEFINITION = 'workspace.interface-definition';
+    public static WORKSPACE_NETWORK_CALL_FLOW = 'workspace.network_call_flow';
+    public static WORKSPACE_MANAGEMENT_WORKFLOW = 'workspace.management_workflow';
+    public static WORKSPACE_DEPLOYMENT = 'workspace.deployment';
+    public static WORKSPACE_DISTRIBUTION = 'workspace.distribution';
+    public static WORKSPACE_PROPERTIES_ASSIGNMENT = 'workspace.properties_assignment';
+    public static WORKSPACE_REQUIREMENTS_AND_CAPABILITIES = 'workspace.reqAndCap';
+    public static WORKSPACE_REQUIREMENTS_AND_CAPABILITIES_EDITABLE = 'workspace.reqAndCapEditable';
+    public static WORKSPACE_PLUGINS = 'workspace.plugins';
+    public static WORKSPACE_NG2 = 'workspace.ng2';
+    public static TYPE_WORKSPACE = 'type-workspace';
 }
 
 export class EVENTS {
-  static LEFT_PALETTE_UPDATE_EVENT = "leftPanelUpdateEvent";
-  static ON_CSAR_LOADING = "onCsarLoading";
-  static DOWNLOAD_ARTIFACT_FINISH_EVENT = "downloadArtifactFinishEvent";
-  static ON_WORKSPACE_SAVE_BUTTON_CLICK = "onWorkspaceSaveButtonClick";
-  static ON_WORKSPACE_SAVE_BUTTON_SUCCESS = "onWorkspaceSaveButtonSuccess";
-  static ON_WORKSPACE_SAVE_BUTTON_ERROR = "onWorkspaceSaveButtonError";
-  static ON_WORKSPACE_UNSAVED_CHANGES = "onWorkspaceUnsavedChanges";
-  static ON_CHECKOUT = "onCheckout";
-  static ON_LIFECYCLE_CHANGE_WITH_SAVE = "onLifecycleChangeWithSave";
-  static ON_LIFECYCLE_CHANGE = "onCheckout";
+    static LEFT_PALETTE_UPDATE_EVENT = "leftPanelUpdateEvent";
+    static ON_CSAR_LOADING = "onCsarLoading";
+    static DOWNLOAD_ARTIFACT_FINISH_EVENT = "downloadArtifactFinishEvent";
+    static ON_WORKSPACE_SAVE_BUTTON_CLICK = "onWorkspaceSaveButtonClick";
+    static ON_WORKSPACE_SAVE_BUTTON_SUCCESS = "onWorkspaceSaveButtonSuccess";
+    static ON_WORKSPACE_SAVE_BUTTON_ERROR = "onWorkspaceSaveButtonError";
+    static ON_WORKSPACE_UNSAVED_CHANGES = "onWorkspaceUnsavedChanges";
+    static ON_CHECKOUT = "onCheckout";
+    static ON_LIFECYCLE_CHANGE_WITH_SAVE = "onLifecycleChangeWithSave";
+    static ON_LIFECYCLE_CHANGE = "onCheckout";
 
-  //Loader events
-  static SHOW_LOADER_EVENT = "showLoaderEvent";
-  static HIDE_LOADER_EVENT = "hideLoaderEvent";
-  static UPDATE_PANEL = 'updatePanel';
-  static ON_DISTRIBUTION_SUCCESS = 'onDistributionSuccess';
+    //Loader events
+    static SHOW_LOADER_EVENT = "showLoaderEvent";
+    static HIDE_LOADER_EVENT = "hideLoaderEvent";
+    static UPDATE_PANEL = 'updatePanel';
+    static ON_DISTRIBUTION_SUCCESS = 'onDistributionSuccess';
 }
 
 
 export class UNIQUE_GROUP_PROPERTIES_NAME {
-  public static MIN_VF_MODULE_INSTANCES = 'min_vf_module_instances';
-  public static MAX_VF_MODULE_INSTANCES = 'max_vf_module_instances';
-  public static INITIAL_COUNT = 'initial_count';
-  public static IS_BASE = 'isBase';
-  public static VF_MODULE_TYPE = 'vf_module_type';
-  public static VF_MODULE_LABEL = 'vf_module_label';
-  public static VF_MODULE_DESCRIPTION = 'vf_module_description';
-  public static VOLUME_GROUP = 'volume_group';
+    public static MIN_VF_MODULE_INSTANCES = 'min_vf_module_instances';
+    public static MAX_VF_MODULE_INSTANCES = 'max_vf_module_instances';
+    public static INITIAL_COUNT = 'initial_count';
+    public static IS_BASE = 'isBase';
+    public static VF_MODULE_TYPE = 'vf_module_type';
+    public static VF_MODULE_LABEL = 'vf_module_label';
+    public static VF_MODULE_DESCRIPTION = 'vf_module_description';
+    public static VOLUME_GROUP = 'volume_group';
 }
 
 
 export class GRAPH_EVENTS {
-  static ON_COMPOSITION_GRAPH_DATA_LOADED = 'onCompositionGraphDataLoaded';
-  static ON_DEPLOYMENT_GRAPH_DATA_LOADED = 'onDeploymentGraphDataLoaded';
-  static ON_NODE_SELECTED = "onNodeSelected";
-  static ON_ZONE_INSTANCE_SELECTED = "onZoneInstanceSelected";
-  static ON_GRAPH_BACKGROUND_CLICKED = "onGraphBackgroundClicked";
-  static ON_PALETTE_COMPONENT_DRAG_START = 'onPaletteComponentDragStart';
-  static ON_PALETTE_COMPONENT_DRAG_ACTION = 'onPaletteComponentDragAction';
-  static ON_PALETTE_COMPONENT_DROP = 'onPaletteComponentDrop';
-  static ON_COMPONENT_INSTANCE_NAME_CHANGED = 'onComponentInstanceNameChanged';
-  static ON_COMPONENT_INSTANCE_REQUIREMENT_EXTERNAL_CHANGED = 'onComponentInstanceRequirementExternalChanged'
-  static ON_COMPONENT_INSTANCE_CAPABILITY_EXTERNAL_CHANGED = 'onComponentInstanceCapabilityExternalChanged'
-  static ON_ZONE_INSTANCE_NAME_CHANGED = 'onZoneInstanceNameChanged';
-  static ON_DELETE_COMPONENT_INSTANCE = 'onDeleteComponentInstance';
-  static ON_DELETE_ZONE_INSTANCE = 'onDeleteZoneInstance';
-  static ON_DELETE_COMPONENT_INSTANCE_SUCCESS = 'onDeleteComponentInstanceSuccess';
-  static ON_DELETE_EDGE = 'onDeleteEdge';
-  static ON_INSERT_NODE_TO_UCPE = 'onInsertNodeToUCPE';
-  static ON_REMOVE_NODE_FROM_UCPE = 'onRemoveNodeFromUCPE';
-  static ON_VERSION_CHANGED = 'onVersionChanged';
-  static ON_CREATE_COMPONENT_INSTANCE = 'onCreateComponentInstance';
-  static ON_ADD_ZONE_INSTANCE_FROM_PALETTE = 'onAddZoneInstanceFromPalette';
-  static ON_CANVAS_TAG_START = 'onCanvasTagStart';
-  static ON_CANVAS_TAG_END = 'onCanvasTagEnd';
-  static ON_POLICY_INSTANCE_UPDATE = 'onPolicyInstanceUpdate';
-  static ON_GROUP_INSTANCE_UPDATE = 'onGroupInstanceUpdate';
-  static ON_SERVICE_PATH_CREATED = 'onServicePathCreated';
+    static ON_COMPOSITION_GRAPH_DATA_LOADED = 'onCompositionGraphDataLoaded';
+    static ON_DEPLOYMENT_GRAPH_DATA_LOADED = 'onDeploymentGraphDataLoaded';
+    static ON_NODE_SELECTED = "onNodeSelected";
+    static ON_ZONE_INSTANCE_SELECTED = "onZoneInstanceSelected";
+    static ON_GRAPH_BACKGROUND_CLICKED = "onGraphBackgroundClicked";
+    static ON_PALETTE_COMPONENT_DRAG_START = 'onPaletteComponentDragStart';
+    static ON_PALETTE_COMPONENT_DRAG_ACTION = 'onPaletteComponentDragAction';
+    static ON_PALETTE_COMPONENT_DROP = 'onPaletteComponentDrop';
+    static ON_COMPONENT_INSTANCE_NAME_CHANGED = 'onComponentInstanceNameChanged';
+    static ON_COMPONENT_INSTANCE_REQUIREMENT_EXTERNAL_CHANGED = 'onComponentInstanceRequirementExternalChanged'
+    static ON_COMPONENT_INSTANCE_CAPABILITY_EXTERNAL_CHANGED = 'onComponentInstanceCapabilityExternalChanged'
+    static ON_ZONE_INSTANCE_NAME_CHANGED = 'onZoneInstanceNameChanged';
+    static ON_DELETE_COMPONENT_INSTANCE = 'onDeleteComponentInstance';
+    static ON_DELETE_ZONE_INSTANCE = 'onDeleteZoneInstance';
+    static ON_DELETE_COMPONENT_INSTANCE_SUCCESS = 'onDeleteComponentInstanceSuccess';
+    static ON_DELETE_EDGE = 'onDeleteEdge';
+    static ON_INSERT_NODE_TO_UCPE = 'onInsertNodeToUCPE';
+    static ON_REMOVE_NODE_FROM_UCPE = 'onRemoveNodeFromUCPE';
+    static ON_VERSION_CHANGED = 'onVersionChanged';
+    static ON_CREATE_COMPONENT_INSTANCE = 'onCreateComponentInstance';
+    static ON_ADD_ZONE_INSTANCE_FROM_PALETTE = 'onAddZoneInstanceFromPalette';
+    static ON_CANVAS_TAG_START = 'onCanvasTagStart';
+    static ON_CANVAS_TAG_END = 'onCanvasTagEnd';
+    static ON_POLICY_INSTANCE_UPDATE = 'onPolicyInstanceUpdate';
+    static ON_GROUP_INSTANCE_UPDATE = 'onGroupInstanceUpdate';
+    static ON_SERVICE_PATH_CREATED = 'onServicePathCreated';
 }
 
 export class DEPENDENCY_EVENTS {
-  static ON_DEPENDENCY_CHANGE = 'onDependencyStatusChange';
+    static ON_DEPENDENCY_CHANGE = 'onDependencyStatusChange';
 }
 
 export class SUBSTITUTION_FILTER_EVENTS {
-  static ON_SUBSTITUTION_FILTER_CHANGE = 'onSubstitutionFilterChange';
+    static ON_SUBSTITUTION_FILTER_CHANGE = 'onSubstitutionFilterChange';
 }
 
 
 export class COMPONENT_FIELDS {
-  static COMPONENT_INSTANCES_PROPERTIES = "componentInstancesProperties";
-  static COMPONENT_INSTANCES_INPUTS = "componentInstancesInputs";
-  static COMPONENT_INSTANCES_ATTRIBUTES = "componentInstancesAttributes";
-  static COMPONENT_INSTANCES_OUTPUTS = "componentInstancesOutputs";
-  static COMPONENT_ATTRIBUTES = "attributes";
-  static COMPONENT_INSTANCES = "componentInstances";
-  static COMPONENT_INSTANCES_RELATION = "componentInstancesRelations";
-  static COMPONENT_INPUTS = "inputs";
-  static COMPONENT_OUTPUTS = "outputs";
-  static COMPONENT_METADATA = "metadata";
-  static COMPONENT_DEPLOYMENT_ARTIFACTS = "deploymentArtifacts";
-  static COMPONENT_INFORMATIONAL_ARTIFACTS = "artifacts";
-  static COMPONENT_PROPERTIES = "properties";
-  static COMPONENT_CAPABILITIES = "capabilities";
-  static COMPONENT_CAPABILITIES_PROPERTIES = "instanceCapabiltyProperties";
-  static COMPONENT_REQUIREMENTS = "requirements";
-  static COMPONENT_TOSCA_ARTIFACTS = "toscaArtifacts";
-  static COMPONENT_POLICIES = "policies";
-  static COMPONENT_GROUPS = "groups";
-  static COMPONENT_INTERFACE_OPERATIONS = "interfaces";
-  static COMPONENT_INSTANCES_INTERFACES = "componentInstancesInterfaces";
-  static COMPONENT_NON_EXCLUDED_GROUPS = "nonExcludedGroups";
-  static COMPONENT_NON_EXCLUDED_POLICIES = "nonExcludedPolicies";
-  static FORWARDING_PATHS = "forwardingPaths";
-  static SERVICE_API_ARTIFACT = "serviceApiArtifacts";
+    static COMPONENT_INSTANCES_PROPERTIES = "componentInstancesProperties";
+    static COMPONENT_INSTANCES_INPUTS = "componentInstancesInputs";
+    static COMPONENT_INSTANCES_ATTRIBUTES = "componentInstancesAttributes";
+    static COMPONENT_INSTANCES_OUTPUTS = "componentInstancesOutputs";
+    static COMPONENT_ATTRIBUTES = "attributes";
+    static COMPONENT_INSTANCES = "componentInstances";
+    static COMPONENT_INSTANCES_RELATION = "componentInstancesRelations";
+    static COMPONENT_INPUTS = "inputs";
+    static COMPONENT_OUTPUTS = "outputs";
+    static COMPONENT_METADATA = "metadata";
+    static COMPONENT_DEPLOYMENT_ARTIFACTS = "deploymentArtifacts";
+    static COMPONENT_INFORMATIONAL_ARTIFACTS = "artifacts";
+    static COMPONENT_PROPERTIES = "properties";
+    static COMPONENT_CAPABILITIES = "capabilities";
+    static COMPONENT_CAPABILITIES_PROPERTIES = "instanceCapabiltyProperties";
+    static COMPONENT_REQUIREMENTS = "requirements";
+    static COMPONENT_TOSCA_ARTIFACTS = "toscaArtifacts";
+    static COMPONENT_POLICIES = "policies";
+    static COMPONENT_GROUPS = "groups";
+    static COMPONENT_INTERFACE_OPERATIONS = "interfaces";
+    static COMPONENT_INSTANCES_INTERFACES = "componentInstancesInterfaces";
+    static COMPONENT_NON_EXCLUDED_GROUPS = "nonExcludedGroups";
+    static COMPONENT_NON_EXCLUDED_POLICIES = "nonExcludedPolicies";
+    static FORWARDING_PATHS = "forwardingPaths";
+    static SERVICE_API_ARTIFACT = "serviceApiArtifacts";
 }
 
 export class SERVICE_FIELDS {
-  static FORWARDING_PATHS = "forwardingPaths";
-  static NODE_FILTER = "nodeFilter";
-  static SUBSTITUTION_FILTER = "substitutionFilter";
+    static FORWARDING_PATHS = "forwardingPaths";
+    static NODE_FILTER = "nodeFilter";
+    static SUBSTITUTION_FILTER = "substitutionFilter";
 }
 
 export class API_QUERY_PARAMS {
-  static INCLUDE = "include";
+    static INCLUDE = "include";
 }
 
 export enum TargetOrMemberType {
-  COMPONENT_INSTANCES,
-  GROUPS
+    COMPONENT_INSTANCES,
+    GROUPS
 }
 
 export class CANVAS_TAG_MODE {
-  static POLICY_TAGGING = "policy-tagging";
-  static POLICY_TAGGING_HOVER = "policy-tagging-hover";
-  static GROUP_TAGGING = "group-tagging";
-  static GROUP_TAGGING_HOVER = "group-tagging-hover";
+    static POLICY_TAGGING = "policy-tagging";
+    static POLICY_TAGGING_HOVER = "policy-tagging-hover";
+    static GROUP_TAGGING = "group-tagging";
+    static GROUP_TAGGING_HOVER = "group-tagging-hover";
 }
 
 export class DROPDOWN_OPTION_TYPE {
-  static SIMPLE = "Simple";
-  static HEADER = "Header";
-  static DISABLE = "Disable";
-  static HORIZONTAL_LINE = "HorizontalLine";
+    static SIMPLE = "Simple";
+    static HEADER = "Header";
+    static DISABLE = "Disable";
+    static HORIZONTAL_LINE = "HorizontalLine";
 }
index a1acfc7..8023cee 100644 (file)
@@ -176,9 +176,6 @@ export class GeneralViewModel {
         this.initScope();
     }
 
-
-
-
     private initScopeValidation = ():void => {
         this.$scope.validation = new Validation();
         this.$scope.validation.componentNameValidationPattern = this.ComponentNameValidationPattern;
@@ -689,7 +686,6 @@ export class GeneralViewModel {
             }
         };
 
-
         this.EventListenerService.registerObserverCallback(EVENTS.ON_LIFECYCLE_CHANGE_WITH_SAVE, (nextState) => {
             if (this.$state.current.data.unsavedChanges && this.$scope.isValidForm) {
                 this.$scope.save().then(() => {
@@ -888,6 +884,10 @@ export class GeneralViewModel {
             }
             return metadatakey != null;
         }
+
+        this.$scope.isNotApplicableMetadataKeys = (key: string): boolean => {
+            return this.$scope.component.categories && this.$scope.component.categories[0].notApplicableMetadataKeys && this.$scope.component.categories[0].notApplicableMetadataKeys.some(item => item === key);
+        }
     }
 
     private filterCategoriesByModel(modelName:string) {
@@ -897,7 +897,6 @@ export class GeneralViewModel {
             !modelName ? !category.models || category.models.indexOf(DEFAULT_MODEL_NAME) !== -1 : category.models !== null && category.models.indexOf(modelName) !== -1);
     }
 
-
     private filterBaseTypesByModelAndCategory(modelName:string) {
         let categories = this.$scope.component.categories;
         if (categories) {
index 1fb8d5f..4704feb 100644 (file)
   ~ limitations under the License.
 -->
 <div include-padding="true" class="sdc-workspace-general-step">
-    <div class="w-sdc-main-container-body-content-action-buttons">
-        <div data-ng-if="unsavedFile && !isCreateMode() && !isViewMode()" data-tests-id="save-warning" class="unsaved-file-warning">
-             <span class="sprite-new sdc-warning"></span> Click save to update to the new VSP
-        </div>
-        <button class="tlv-btn blue" data-ng-if="isDesigner()" data-ng-show="isGeneralView()" data-ng-class="{'disabled' : !isValidForm  || isDisableMode() || isViewMode() || isCreateMode()}"
+  <div class="w-sdc-main-container-body-content-action-buttons">
+    <div data-ng-if="unsavedFile && !isCreateMode() && !isViewMode()" data-tests-id="save-warning" class="unsaved-file-warning">
+      <span class="sprite-new sdc-warning"></span> Click save to update to the new VSP
+    </div>
+    <button class="tlv-btn blue" data-ng-if="isDesigner()" data-ng-show="isGeneralView()" data-ng-class="{'disabled' : !isValidForm  || isDisableMode() || isViewMode() || isCreateMode()}"
             data-ng-click="save()" data-tests-id="create/save" tooltips tooltip-content="Save">Save</button>
-        <span data-ng-if="isDesigner()" data-ng-class="{'disabled' :isDisableMode() || isViewMode() || isCreateMode()}"  ng-click="revert()" class="sprite-new revert-btn" data-tests-id="revert"
-              data-ng-show="isGeneralView()" tooltips tooltip-content="Revert"></span>
+    <span data-ng-if="isDesigner()" data-ng-class="{'disabled' :isDisableMode() || isViewMode() || isCreateMode()}"  ng-click="revert()" class="sprite-new revert-btn" data-tests-id="revert"
+          data-ng-show="isGeneralView()" tooltips tooltip-content="Revert"></span>
 
-    </div>
-    <form novalidate class="w-sdc-form" name="editForm" validation-on-load form-to-validate="editForm">
+  </div>
+  <form novalidate class="w-sdc-form" name="editForm" validation-on-load form-to-validate="editForm">
 
-        <div class="w-sdc-form-section-container">
+    <div class="w-sdc-form-section-container">
 
-            <div class="w-sdc-form-columns-wrapper">
+      <div class="w-sdc-form-columns-wrapper">
 
-                <div class="w-sdc-form-column">
-                    <div class="upper-general-fields">
-                        <div class="selected-icon-container" data-ng-class="{'show-only-on-over':'defaulticon'!=component.icon && !isViewMode()}">
-                            <div class="selected-icon-inner-container ">
-                                <div class="sprite-new update-component-icon" data-ng-click="updateIcon()" data-ng-if="!isViewMode() && possibleToUpdateIcon()"></div>
-                                <div class="i-sdc-form-item-suggested-icon large selected-icon {{component.iconSprite}} {{component.icon}}"
-                                     data-ng-class="{
+        <div class="w-sdc-form-column">
+          <div class="upper-general-fields">
+            <div class="selected-icon-container" data-ng-class="{'show-only-on-over':'defaulticon'!=component.icon && !isViewMode()}">
+              <div class="selected-icon-inner-container ">
+                <div class="sprite-new update-component-icon" data-ng-click="updateIcon()" data-ng-if="!isViewMode() && possibleToUpdateIcon()"></div>
+                <div class="i-sdc-form-item-suggested-icon large selected-icon {{component.iconSprite}} {{component.icon}}"
+                     data-ng-class="{
                                      'disable': isViewMode() || !possibleToUpdateIcon(),
                                      'archive-component active-component-static': component.archived
                                      }"
-                                     ng-model="component.icon"
-                                     tooltips tooltip-content='{{component.icon | translate}}'
-                                >
-                                </div>
-                            </div>
-                        </div>
-                        <div class="name-and-category-fields">
-                            <!--------------------- NAME -------------------->
-                            <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.componentName)}">
-                                <label class="i-sdc-form-label required" translate="GENERAL_LABEL_NAME"></label>
-                                <input class="i-sdc-form-input"
-                                       data-ng-class="{'view-mode': isViewMode()}"
-                                       name="componentName"
-                                       data-ng-init="isCreateMode() && validateName(true)"
-                                       data-ng-maxlength="50"
-                                       data-ng-model="component.name"
-                                       type="text"
-                                       data-required
-                                       data-ng-model-options="{ debounce: 500 }"
-                                       data-ng-pattern="validation.componentNameValidationPattern"
-                                       data-ng-disabled="component.isAlreadyCertified()"
-                                       data-tests-id="name"
-                                       autofocus
-                                       ng-readonly="isViewMode()"
-                                />
-
-                                <div class="input-error" data-ng-show="validateField(editForm.componentName)">
-                                    <span ng-show="editForm.componentName.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_RESOURCE_NAME_REQUIRED"></span>
-                                    <span ng-show="editForm.componentName.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '50' }"></span>
-                                    <span ng-show="editForm.componentName.$error.minlength" translate="VALIDATION_ERROR_MIN_LENGTH" translate-values="{'min': '4' }"></span>
-                                    <span ng-show="editForm.componentName.$error.nameExist" translate="NEW_SERVICE_RESOURCE_ERROR_NAME_EXISTS"></span>
-                                    <span ng-show="editForm.componentName.$error.pattern" translate="VALIDATION_ERROR_INVALID_NAME"></span>
-                                </div>
-                            </div>
-                            <!--------------------- NAME -------------------->
-
-                          <!--------------------- Model -------------------->
-                          <div class="i-sdc-form-item">
-                            <label class="i-sdc-form-label required">Model</label>
-                            <select class="i-sdc-form-select"
-                                    data-ng-class="{'view-mode': isViewMode()}"
-                                    data-ng-disabled="!isCreateMode()"
-                                    data-ng-change="onModelChange()"
-                                    data-tests-id="selectModelName"
-                                    data-ng-required="isModelRequired"
-                                    data-ng-model="component.model"
-                                    data-ng-options="model for model in models track by model"
-                            >
-                              <option ng-if="showDefaultModelOption" value="">{{defaultModelOption}}</option>
-                            </select>
-                          </div>
-                          <!--------------------- Model -------------------->
-
-                            <!--------------------- CATEGORIES -------------------->
-                            <div class="i-sdc-form-item"
-                                 data-ng-class="{'error': validateField(editForm.category)}">
-                                <loader data-display="!categories && !initCategoreis()" relative="true"></loader>
-                                <label class="i-sdc-form-label required" translate="GENERAL_LABEL_CATEGORY"></label>
-                                <select class="i-sdc-form-select"
-                                        data-required
-                                        name="category"
-                                        data-ng-class="{'view-mode': isViewMode()}"
-                                        data-ng-change="onCategoryChange()"
-                                        data-ng-disabled="component.isAlreadyCertified() || (component.isCsarComponent() && component.selectedCategory && component.selectedCategory!=='') || isHiddenCategorySelected"
-                                        data-ng-model="componentCategories.selectedCategory"
-                                        data-tests-id="selectGeneralCategory"
-                                >
-                                    <option value="">Select category</option>
-                                    <optgroup ng-if="component.isResource()" data-ng-repeat="mainCategory in categories | orderBy:['name']" label="{{mainCategory.name}}" data-tests-id="{{mainCategory.name}}">
-                                        <option data-ng-repeat="subCategory in mainCategory.subcategories track by $index"
-                                                data-ng-selected="componentCategories.selectedCategory === calculateUnique(mainCategory.name,subCategory.name)"
-                                                data-tests-id="{{subCategory.name}}"
-                                                value="{{calculateUnique(mainCategory.name, subCategory.name)}}">{{subCategory.name}}
-
-                                        </option>
-                                    </optgroup>
-                                    <option ng-if="component.isService()" data-ng-repeat="mainCategory in categories | orderBy:['name']"
-                                            data-ng-selected="component.selectedCategory===mainCategory.name"
-                                            value="{{mainCategory.name}}"
-                                            data-tests-id="{{mainCategory.name}}">{{getCategoryDisplayNameOrName(mainCategory)}}</option>
-                                </select>
-
-                                <div class="input-error" data-ng-show="validateField(editForm.category)">
-                                    <span ng-show="editForm.category.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_CATEGORY_REQUIRED"></span>
-                                    <span ng-show="editForm.category.$error.validForBaseType" translate="NEW_SERVICE_RESOURCE_ERROR_CATEGORY_NOT_VALID"></span>
-                                </div>
-                            </div>
-                            <!--------------------- CATEGORIES -------------------->
-                        </div>
-                    </div>
-
-                    <!--------------------- Category Specific Metadata -------------------->
-
-                    <div ng-if="component.selectedCategory">
-                        <ng-container ng-repeat="(key, value) in component.categorySpecificMetadata"-->
-                            <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && getMetadataKeyValidValues(key) && isMetadataKeyMandatory(key)"
-                                 class="i-sdc-form-item"
-                                 data-ng-class="{'error': validateField(editForm['{{key}}'])}">
-                                <label class="i-sdc-form-label required" translate="{{getMetadataDisplayName(key)}}"></label>
-                                <select class="i-sdc-form-select"
-                                    name="{{key}}"
-                                    data-ng-class="{'view-mode': isViewMode()}"
-                                    data-ng-model="component.categorySpecificMetadata[key]"
-                                    data-tests-id="{{key}}"
-                                    data-required>
-                                   <option ng-repeat="value in getMetadataKeyValidValues(key)">{{value}}</option>
-                                </select>
-                                <div class="input-error" data-ng-show="validateField(editForm['{{key}}'])">
-                                    <span ng-show="editForm['{{key}}'].$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_REQUIRED"></span>
-                                </div>
-                            </div>
-                            <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && getMetadataKeyValidValues(key) && !isMetadataKeyMandatory(key)"
-                                 class="i-sdc-form-item">
-                                <label class="i-sdc-form-label" translate="{{getMetadataDisplayName(key)}}"></label>
-                                <select class="i-sdc-form-select"
-                                    name="{{key}}"
-                                    data-ng-class="{'view-mode': isViewMode()}"
-                                    data-ng-model="component.categorySpecificMetadata[key]"
-                                    data-tests-id="{{key}}">
-                                   <option ng-repeat="value in getMetadataKeyValidValues(key)">{{value}}</option>
-                                </select>
-                            </div>
-                            <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && !getMetadataKeyValidValues(key) && isMetadataKeyMandatory(key)"
-                                 class="i-sdc-form-item"
-                                 data-ng-class="{'error': validateField(editForm['{{key}}'])}">
-                                <label class="i-sdc-form-label required" translate="{{getMetadataDisplayName(key)}}"></label>
-                                <input class="i-sdc-form-input" type="text"
-                                       data-required
-                                       data-ng-class="{'view-mode': isViewMode()}"
-                                       data-ng-model="component.categorySpecificMetadata[key]"
-                                       name="{{key}}"
-                                       data-tests-id="{{key}}"
-                                />
-                                <div class="input-error" data-ng-show="validateField(editForm['{{key}}'])">
-                                    <span ng-show="editForm['{{key}}'].$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_REQUIRED"></span>
-                                </div>
-                            </div>
-                            <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && !getMetadataKeyValidValues(key) && !isMetadataKeyMandatory(key)"
-                                 class="i-sdc-form-item">
-                                <label class="i-sdc-form-label" translate="{{getMetadataDisplayName(key)}}"></label>
-                                <input class="i-sdc-form-input" type="text"
-                                       data-ng-class="{'view-mode': isViewMode()}"
-                                       data-ng-model="component.categorySpecificMetadata[key]"
-                                       name="{{key}}"
-                                       data-tests-id="{{key}}"
-                                />
-                            </div>
-                        </ng-container>
-                    </div>
-                <!--------------------- RESOURCE TAGS -------------------->
-                <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.tags)}">
-                    <label class="i-sdc-form-label" translate="GENERAL_LABEL_TAGS"></label>
-
-                    <sdc-tags form-element="editForm" element-name="tags" max-tags="20" class="i-sdc-form-item-tags"
-                              sdc-disabled="isViewMode()"
-                              tags="component.tags"
-                              pattern="validation.tagValidationPattern"
-                              special-tag="component.name"></sdc-tags>
-
-                    <div class="input-error" data-ng-show="validateField(editForm.tags)">
-                        <span ng-show="editForm.tags.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
-                        <span ng-show="editForm.tags.$error.nameExist" translate="NEW_SERVICE_RESOURCE_ERROR_TAG_NAME_EXIST"></span>
-                    </div>
+                     ng-model="component.icon"
+                     tooltips tooltip-content='{{component.icon | translate}}'
+                >
                 </div>
-                <!--------------------- RESOURCE TAGS -------------------->
-
-                <!--------------------- DESCRIPTION -------------------->
-                <div class="i-sdc-form-item description-field"
-                     data-ng-class="{'error': validateField(editForm.description)}">
-                    <label class="i-sdc-form-label required" translate="GENERAL_LABEL_DESCRIPTION"></label>
-                <textarea class="description"
-                          name="description"
-                          data-ng-class="{'view-mode': isViewMode()}"
-                          data-ng-maxlength="1024"
-                          data-required
-                          data-ng-model="component.description"
-                          data-ng-model-options="{ debounce: 500 }"
-                          data-ng-pattern="validation.commentValidationPattern"
-                          data-tests-id="description"></textarea>
-                    <!-- placeholder="Description here..." -->
-
-                    <div class="input-error" data-ng-show="validateField(editForm.description)">
-                        <span ng-show="editForm.description.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_RESOURCE_DESCRIPTION_REQUIRED"></span>
-                        <span ng-show="editForm.description.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '1024' }"></span>
-                        <span ng-show="editForm.description.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
-                    </div>
+              </div>
+            </div>
+            <div class="name-and-category-fields">
+              <!--------------------- NAME -------------------->
+              <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.componentName)}">
+                <label class="i-sdc-form-label required" translate="GENERAL_LABEL_NAME"></label>
+                <input class="i-sdc-form-input"
+                       data-ng-class="{'view-mode': isViewMode()}"
+                       name="componentName"
+                       data-ng-init="isCreateMode() && validateName(true)"
+                       data-ng-maxlength="50"
+                       data-ng-model="component.name"
+                       type="text"
+                       data-required
+                       data-ng-model-options="{ debounce: 500 }"
+                       data-ng-pattern="validation.componentNameValidationPattern"
+                       data-ng-disabled="component.isAlreadyCertified()"
+                       data-tests-id="name"
+                       autofocus
+                       ng-readonly="isViewMode()"
+                />
+
+                <div class="input-error" data-ng-show="validateField(editForm.componentName)">
+                  <span ng-show="editForm.componentName.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_RESOURCE_NAME_REQUIRED"></span>
+                  <span ng-show="editForm.componentName.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '50' }"></span>
+                  <span ng-show="editForm.componentName.$error.minlength" translate="VALIDATION_ERROR_MIN_LENGTH" translate-values="{'min': '4' }"></span>
+                  <span ng-show="editForm.componentName.$error.nameExist" translate="NEW_SERVICE_RESOURCE_ERROR_NAME_EXISTS"></span>
+                  <span ng-show="editForm.componentName.$error.pattern" translate="VALIDATION_ERROR_INVALID_NAME"></span>
                 </div>
-                <!--------------------- DESCRIPTION -------------------->
-
-            </div><!-- Close w-sdc-form-column -->
-
-                <div class="w-sdc-form-column">
-                    <!--------------------- IMPORT TOSCA FILE USING BROWSE (ALSO VFC) -------------------->
-                    <div class="i-sdc-form-item" ng-if="isShowFileBrowse">
-
-                        <!-- //                                     element-disabled="{{!isCreateMode()&&!(isEditMode()&&component.resourceType=='VF')&&component.vspArchived}} || {{isViewMode()}}" -->
-
-                        <label class="i-sdc-form-label" data-ng-class="{'required':isCreateMode() && component.resourceType !=='VF'}">{{browseFileLabel}}</label>
-                        <file-upload id="fileUploadElement"
-                                     class="i-sdc-form-input"
-                                     element-name="fileElement"
-                                     data-ng-required="false"
-                                     element-disabled="{{(!isCreateMode()&&!(isEditMode()&&component.resourceType=='VF'))|| isViewMode() || component.vspArchived}}"
-                                     form-element="editForm"
-                                     file-model="component.importedFile"
-                                     on-file-changed-in-directive="onImportFileChange"
-                                     extensions="{{importedFileExtension}}"
-                                     default-text="'Browse to select file'"
-                                     ></file-upload>
-                    </div>
-
-                    <!--------------------- IMPORT TOSCA FILE USING ONBOARDING -------------------->
-                    <div class="i-sdc-form-item" ng-if="isShowOnboardingSelectionBrowse && !isShowFileBrowse">
-                            <label class="i-sdc-form-label required">VSP</label>
-                            <div class="i-sdc-form-file-upload i-sdc-form-input">
-                                <span class="i-sdc-form-file-name"  data-ng-disabled="component.vspArchived"  data-tests-id="filename">{{(fileModel && fileModel.filename) || importedToscaBrowseFileText }}</span>
-                                <div class="i-sdc-form-file-upload-x-btn" ng-click="cancel()" data-ng-show="fileModel.filename && fileModel.filename!=='' && elementDisabled!=='true'"></div>
-                                <input type="button" data-ng-class="{'disabled': !isEditMode() && component.vspArchived}" data-ng-disabled="component.vspArchived" name="fileElement" />
-                                <div class="file-upload-browse-btn" data-ng-class="{'disabled': !isEditMode() && !component.vspArchived}" data-ng-click="openOnBoardingModal()" data-ng-disabled="!component.vspArchived" data-tests-id="browseButton">Browse</div>
-                            </div>
-                    </div>
-
-                    <div class="input-error-file-upload"   data-ng-disabled="!component.archived"  data-ng-show="component.importedFile && (!editForm.fileElement.$valid || !component.importedFile.filename)">
-                        <!-- editForm.fileElement.$error.required <== Can not use this, because the browse is done from outside for the first time -->
-                        <span ng-show="!(isEditMode()&&component.resourceType=='VF')&&!component.importedFile.filename" translate="NEW_SERVICE_RESOURCE_ERROR_TOSCA_FILE_REQUIRED"></span><!-- Required -->
-                        <span ng-show="editForm.fileElement.$error.maxsize" translate="VALIDATION_ERROR_MAX_FILE_SIZE"></span>
-                        <span ng-show="editForm.fileElement.$error.filetype" translate="NEW_SERVICE_RESOURCE_ERROR_VALID_TOSCA_EXTENSIONS" translate-values="{'extensions': '{{importedFileExtension}}' }"></span>
-                        <span ng-show="editForm.fileElement.$error.emptyFile" translate="VALIDATION_ERROR_EMPTY_FILE"></span>
-                    </div>
-                    <!--------------------- IMPORT TOSCA FILE -------------------->
-
-                    <!--------------------- USER ID -------------------->
-                    <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.contactId)}">
-                    <label class="i-sdc-form-label required" translate="GENERAL_LABEL_CONTACT_ID"></label>
-                    <input class="i-sdc-form-input" type="text"
-                               data-ng-model="component.contactId"
-                               data-ng-class="{'view-mode': isViewMode()}"
-                               data-ng-required="true"
-                               name="contactId"
-                               data-ng-pattern="validation.contactIdValidationPattern"
-                               data-ng-model-options="{ debounce: 500 }"
-                               data-tests-id="contactId"
-                               data-ng-maxlength="50"
-                        />
-
-                        <div class="input-error" data-ng-show="validateField(editForm.contactId)">
-                            <span ng-show="editForm.contactId.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '50' }"></span>
-                            <span ng-show="editForm.contactId.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_CONTACT_REQUIRED"></span>
-                            <span ng-show="editForm.contactId.$error.pattern" translate="NEW_SERVICE_RESOURCE_ERROR_CONTACT_NOT_VALID"></span>
-                        </div>
-                    </div>
-                    <!--------------------- USER ID -------------------->
-
-                <!--------------------- VENDOR NAME -------------------->
-                <div ng-if="component.isResource()" class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.vendorName)}">
-                    <label class="i-sdc-form-label required" translate="GENERAL_LABEL_VENDOR_NAME"></label>
-                    <input class="i-sdc-form-input" type="text"
-                           data-ng-class="{'view-mode': isViewMode()}"
-                           data-ng-model="component.vendorName"
-                           data-ng-model-options="{ debounce: 500 }"
-                           data-ng-maxlength="60"
-                           data-required
-                           ng-click="oldValue = component.vendorName"
-                           name="vendorName"
-                           data-ng-change="onVendorNameChange(oldValue)"
-                           data-ng-pattern="validation.VendorNameValidationPattern"
-                           data-ng-disabled="component.isAlreadyCertified() || (component.isCsarComponent() && component.vendorName && component.vendorName!=='')"
-                           data-tests-id="vendorName"
-                    />
-
-                    <div class="input-error" data-ng-show="validateField(editForm.vendorName)">
-                        <span ng-show="editForm.vendorName.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_VENDOR_NAME_REQUIRED"></span>
-                        <span ng-show="editForm.vendorName.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '60' }"></span>
-                        <span ng-show="editForm.vendorName.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
-                    </div>
-
+              </div>
+              <!--------------------- NAME -------------------->
+
+              <!--------------------- Model -------------------->
+              <div class="i-sdc-form-item">
+                <label class="i-sdc-form-label required">Model</label>
+                <select class="i-sdc-form-select"
+                        data-ng-class="{'view-mode': isViewMode()}"
+                        data-ng-disabled="!isCreateMode()"
+                        data-ng-change="onModelChange()"
+                        data-tests-id="selectModelName"
+                        data-ng-required="isModelRequired"
+                        data-ng-model="component.model"
+                        data-ng-options="model for model in models track by model"
+                >
+                  <option ng-if="showDefaultModelOption" value="">{{defaultModelOption}}</option>
+                </select>
+              </div>
+              <!--------------------- Model -------------------->
+
+              <!--------------------- CATEGORIES -------------------->
+              <div class="i-sdc-form-item"
+                   data-ng-class="{'error': validateField(editForm.category)}">
+                <loader data-display="!categories && !initCategoreis()" relative="true"></loader>
+                <label class="i-sdc-form-label required" translate="GENERAL_LABEL_CATEGORY"></label>
+                <select class="i-sdc-form-select"
+                        data-required
+                        name="category"
+                        data-ng-class="{'view-mode': isViewMode()}"
+                        data-ng-change="onCategoryChange()"
+                        data-ng-disabled="component.isAlreadyCertified() || (component.isCsarComponent() && component.selectedCategory && component.selectedCategory!=='') || isHiddenCategorySelected"
+                        data-ng-model="componentCategories.selectedCategory"
+                        data-tests-id="selectGeneralCategory"
+                >
+                  <option value="">Select category</option>
+                  <optgroup ng-if="component.isResource()" data-ng-repeat="mainCategory in categories | orderBy:['name']" label="{{mainCategory.name}}" data-tests-id="{{mainCategory.name}}">
+                    <option data-ng-repeat="subCategory in mainCategory.subcategories track by $index"
+                            data-ng-selected="componentCategories.selectedCategory === calculateUnique(mainCategory.name,subCategory.name)"
+                            data-tests-id="{{subCategory.name}}"
+                            value="{{calculateUnique(mainCategory.name, subCategory.name)}}">{{subCategory.name}}
+
+                    </option>
+                  </optgroup>
+                  <option ng-if="component.isService()" data-ng-repeat="mainCategory in categories | orderBy:['name']"
+                          data-ng-selected="component.selectedCategory===mainCategory.name"
+                          value="{{mainCategory.name}}"
+                          data-tests-id="{{mainCategory.name}}">{{getCategoryDisplayNameOrName(mainCategory)}}</option>
+                </select>
+
+                <div class="input-error" data-ng-show="validateField(editForm.category)">
+                  <span ng-show="editForm.category.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_CATEGORY_REQUIRED"></span>
+                  <span ng-show="editForm.category.$error.validForBaseType" translate="NEW_SERVICE_RESOURCE_ERROR_CATEGORY_NOT_VALID"></span>
                 </div>
-
-                <!--------------------- VENDOR NAME -------------------->
-
-                <!--------------------- VENDOR RELEASE -------------------->
-                <div ng-if="component.isResource()"
-                     class="i-sdc-form-item"
-                     data-ng-class="{'error': validateField(editForm.vendorRelease)}">
-                    <label class="i-sdc-form-label required" translate="GENERAL_LABEL_VENDOR_RELEASE"></label>
-                    <input class="i-sdc-form-input" type="text"
-                           data-ng-class="{'view-mode': isViewMode()}"
-                           data-ng-model="component.vendorRelease"
-                           data-ng-model-options="{ debounce: 500 }"
-                           data-ng-maxlength="25"
-                           data-required
-                           name="vendorRelease"
-                           data-ng-pattern="validation.VendorReleaseValidationPattern"
-                           data-ng-disabled="component.isCsarComponent() && component.vendorRelease && component.vendorRelease!==''"
-                           data-tests-id="vendorRelease"
-                    />
-
-                    <div class="input-error" data-ng-show="validateField(editForm.vendorRelease)">
-                        <span ng-show="editForm.vendorRelease.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_VENDOR_RELEASE_REQUIRED"></span>
-                        <span ng-show="editForm.vendorRelease.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '25' }"></span>
-                        <span ng-show="editForm.vendorRelease.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
-                    </div>
+              </div>
+              <!--------------------- CATEGORIES -------------------->
+            </div>
+          </div>
+
+          <!--------------------- Category Specific Metadata -------------------->
+          <div ng-if="component.selectedCategory">
+            <ng-container ng-repeat="(key, value) in component.categorySpecificMetadata"-->
+              <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && getMetadataKeyValidValues(key) && isMetadataKeyMandatory(key)"
+                   class="i-sdc-form-item"
+                   data-ng-class="{'error': validateField(editForm['{{key}}'])}">
+                <label class="i-sdc-form-label required" translate="{{getMetadataDisplayName(key)}}"></label>
+                <select class="i-sdc-form-select"
+                        name="{{key}}"
+                        data-ng-class="{'view-mode': isViewMode()}"
+                        data-ng-model="component.categorySpecificMetadata[key]"
+                        data-tests-id="{{key}}"
+                        data-required>
+                  <option ng-repeat="value in getMetadataKeyValidValues(key)">{{value}}</option>
+                </select>
+                <div class="input-error" data-ng-show="validateField(editForm['{{key}}'])">
+                  <span ng-show="editForm['{{key}}'].$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_REQUIRED"></span>
                 </div>
-                <!--------------------- VENDOR RELEASE -------------------->
-
-                <!--------------------- Resource Model Number -------------------->
-                <div ng-if="component.isResource()"
-                     class="i-sdc-form-item"
-                     data-ng-class="{'error': validateField(editForm.resourceVendorModelNumber)}">
-                    <label class="i-sdc-form-label" translate="GENERAL_LABEL_RESOURCE_MODEL_NUMBER"></label>
-                    <input class="i-sdc-form-input" type="text"
-                           data-ng-class="{'view-mode': isViewMode()}"
-                           data-ng-model="component.resourceVendorModelNumber"
-                           data-ng-model-options="{ debounce: 500 }"
-                           data-ng-maxlength="65"
-                           name="resourceVendorModelNumber"
-                           data-ng-pattern="validation.VendorModelNumberValidationPattern"
-                           data-tests-id="resourceVendorModelNumber"
-                    />
-
-                    <div class="input-error" data-ng-show="validateField(editForm.resourceVendorModelNumber)">
-                        <span ng-show="editForm.resourceVendorModelNumber.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '65' }"></span>
-                        <span ng-show="editForm.resourceVendorModelNumber.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
-                    </div>
+              </div>
+              <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && getMetadataKeyValidValues(key) && !isMetadataKeyMandatory(key)"
+                   class="i-sdc-form-item">
+                <label class="i-sdc-form-label" translate="{{getMetadataDisplayName(key)}}"></label>
+                <select class="i-sdc-form-select"
+                        name="{{key}}"
+                        data-ng-class="{'view-mode': isViewMode()}"
+                        data-ng-model="component.categorySpecificMetadata[key]"
+                        data-tests-id="{{key}}">
+                  <option ng-repeat="value in getMetadataKeyValidValues(key)">{{value}}</option>
+                </select>
+              </div>
+              <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && !getMetadataKeyValidValues(key) && isMetadataKeyMandatory(key)"
+                   class="i-sdc-form-item"
+                   data-ng-class="{'error': validateField(editForm['{{key}}'])}">
+                <label class="i-sdc-form-label required" translate="{{getMetadataDisplayName(key)}}"></label>
+                <input class="i-sdc-form-input" type="text"
+                       data-required
+                       data-ng-class="{'view-mode': isViewMode()}"
+                       data-ng-model="component.categorySpecificMetadata[key]"
+                       name="{{key}}"
+                       data-tests-id="{{key}}"
+                />
+                <div class="input-error" data-ng-show="validateField(editForm['{{key}}'])">
+                  <span ng-show="editForm['{{key}}'].$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_REQUIRED"></span>
                 </div>
-                <!--------------------- Resource Model Number -------------------->
-
-                <!--------------------- ECOMPGENERATEDNAMING -------------------->
-
-                    <div class="i-sdc-form-item"
-                         data-ng-class="{'error': validateField(editForm.ecompGeneratedNaming)}"
-                         data-ng-if="component.isService()">
-                        <label class="i-sdc-form-label">Generated Naming</label>
-                        <select class="i-sdc-form-select"
-                                data-required
-                                name="ecompGeneratedNaming"
-                                data-ng-change="onEcompGeneratedNamingChange()"
-                                data-ng-class="{'view-mode': isViewMode()}"
-                                data-ng-model="component.ecompGeneratedNaming"
-                                data-tests-id="ecompGeneratedNaming">
-                            <option ng-value="true">true</option>
-                            <option ng-value="false">false</option>
-                        </select>
-                        <div class="input-error" data-ng-show="validateField(editForm.ecompGeneratedNaming)">
-
-                        </div>
-                    </div>
-                    <!--------------------- CATEGORIES -------------------->
-
-                    <!--------------------- NAMING POLICY  -------------------->
-                    <div ng-if="component.isService()" class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.namingPolicy)}">
-                        <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Naming Policy', 'namingPolicy')">
-                               <div ng-if="isMetadataKeyMandatory('Naming Policy')">
-                                <label class="i-sdc-form-label required">Naming Policy</label>
-                               </div>
-                               <div ng-if="!isMetadataKeyMandatory('Naming Policy')">
-                                <label class="i-sdc-form-label">Naming Policy</label>
-                               </div>
-                               <select class="i-sdc-form-input" type="text"
-                                      ng-required="isMetadataKeyMandatory('Naming Policy')"
-                                      data-ng-class="{'view-mode': isViewMode()}"
-                                      data-ng-model="component.namingPolicy"
-                                      data-ng-model-options="{ debounce: 500 }"
-                                      name="namingPolicy"
-                                      data-tests-id="namingPolicy"
-                                      data-ng-maxlength="256"
-                                   data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
-                               > <option ng-repeat="value in getMetadataKeyValidValues('Naming Policy')">{{value}}</option>
-                            </select>
-                        </div>
-                        <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Naming Policy')">
-                               <label class="i-sdc-form-label">Naming Policy</label>
-                               <input class="i-sdc-form-input"
-                                      name="namingPolicy"
-                                      data-ng-class="{'view-mode': isViewMode() || !component.ecompGeneratedNaming}"
-                                      data-ng-maxlength="100"
-                                      data-ng-model="component.namingPolicy"
-                                      type="text"
-                                      data-ng-model-options="{ debounce: 500 }"
-                                      data-ng-pattern="validation.commentValidationPattern"
-                                      data-tests-id="namingPolicy"
-                                      autofocus
-                                      ng-readonly="isViewMode() || !component.ecompGeneratedNaming"
-                               />
-                        </div>
-                        <div class="input-error" data-ng-show="validateField(editForm.namingPolicy)">
-                            <span ng-show="editForm.namingPolicy.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '100' }"></span>
-                            <span ng-show="editForm.namingPolicy.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
-                        </div>
-                    </div>
-                    <!--------------------- NAMING POLICY  -------------------->
-
-                    <!--------------------- Service Type -------------------->
-                    <div ng-if="component.isService()"
-                         class="i-sdc-form-item"
-                         data-ng-class="{'error': validateField(editForm.serviceFunctionType)}">
-                        <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Service Type', 'serviceType')">
-                               <div ng-if="isMetadataKeyMandatory('Service Type')">
-                                <label class="i-sdc-form-label required" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
-                            </div>
-                               <div ng-if="!isMetadataKeyMandatory('Service Type')">
-                                <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
-                               </div>
-                               <select class="i-sdc-form-input" type="text"
-                                      ng-required="isMetadataKeyMandatory('Service Type')"
-                                      data-ng-class="{'view-mode': isViewMode()}"
-                                      data-ng-model="component.serivceType"
-                                      data-ng-model-options="{ debounce: 500 }"
-                                      name="serviceType"
-                                      data-tests-id="serviceType"
-                                      data-ng-maxlength="256"
-                                   data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
-                               > <option ng-repeat="value in getMetadataKeyValidValues('Service Type')">{{value}}</option>
-                            </select>
-                        </div>
-                        <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Service Type')">
-                               <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
-                               <input class="i-sdc-form-input" type="text"
-                                      data-ng-class="{'view-mode': isViewMode()}"
-                                      data-ng-model="component.serviceType"
-                                      data-ng-model-options="{ debounce: 500 }"
-                                      name="serviceType"
-                                      data-tests-id="serviceType"
-                                      data-ng-maxlength="256"
-                                   data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
-                               />
-                        </div>
-                        <div class="input-error" data-ng-show="validateField(editForm.serviceType)">
-                            <span ng-show="editForm.serviceType.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
-                            <span ng-show="editForm.serviceType.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
-                        </div>
-                    </div>
-                    <!--------------------- Service Type -------------------->
-
-                    <!--------------------- Service Role -------------------->
-                    <div ng-if="component.isService()"
-                         class="i-sdc-form-item"
-                         data-ng-class="{'error': validateField(editForm.serviceRole)}">
-                        <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Service Role', 'serviceRole')">
-                               <div ng-if="isMetadataKeyMandatory('Service Role')">
-                                <label class="i-sdc-form-label required" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
-                               </div>
-                               <div ng-if="!isMetadataKeyMandatory('Service Role')">
-                                <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
-                               </div>
-                               <select class="i-sdc-form-input" type="text"
-                                      ng-required="isMetadataKeyMandatory('Service Role')"
-                                      data-ng-class="{'view-mode': isViewMode()}"
-                                      data-ng-model="component.serviceRole"
-                                      data-ng-model-options="{ debounce: 500 }"
-                                      name="serviceRole"
-                                      data-tests-id="serviceRole"
-                                      data-ng-maxlength="256"
-                               > <option ng-repeat="value in getMetadataKeyValidValues('Service Role')">{{value}}</option>
-                               </select>
-                        </div>
-                        <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Service Role')">
-                                   <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
-                                   <input class="i-sdc-form-input" type="text"
-                                      data-ng-class="{'view-mode': isViewMode()}"
-                                      data-ng-model="component.serviceRole"
-                                      data-ng-model-options="{ debounce: 500 }"
-                                      name="serviceRole"
-                                      data-tests-id="serviceRole"
-                                      data-ng-maxlength="256"
-                                      data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
-                               />
-                        </div>
-                        <div class="input-error" data-ng-show="validateField(editForm.serviceRole)">
-                            <span ng-show="editForm.serviceRole.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
-                            <span ng-show="editForm.serviceRole.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
-                        </div>
-                    </div>
-                    <!--------------------- Service Role -------------------->
-                    <!--------------------- Service Function -------------------->
-                    <div ng-if="component.isService()"
-                         class="i-sdc-form-item"
-                         data-ng-class="{'error': validateField(editForm.serviceFunction)}">
-                        <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Service Function', 'serviceFunction')">
-                            <div ng-if="isMetadataKeyMandatory('Service Function')">
-                                <label class="i-sdc-form-label required" translate="GENERAL_TAB_LABEL_SERVICE_FUNCTION"></label>
-                            </div>
-                            <div ng-if="!isMetadataKeyMandatory('Service Function')">
-                                <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_FUNCTION"></label>
-                            </div>
-                               <select class="i-sdc-form-input" type="text"
-                                      ng-required="isMetadataKeyMandatory('Service Function')"
-                                      data-ng-class="{'view-mode': isViewMode()}"
-                                      data-ng-model="component.serviceFunction"
-                                      data-ng-model-options="{ debounce: 500 }"
-                                      name="serviceFunction"
-                                      data-tests-id="serviceFunction"
-                                      data-ng-maxlength="256"
-                                      data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
-                               > <option ng-repeat="value in getMetadataKeyValidValues('Service Function')">{{value}}</option>
-                               </select>
-                        </div>
-                        <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Service Function')">
-                              <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_FUNCTION"></label>
-                              <input class="i-sdc-form-input" type="text"
-                                      data-ng-class="{'view-mode': isViewMode()}"
-                                      data-ng-model="component.serviceFunction"
-                                      name="serviceFunction"
-                                      data-tests-id="serviceFunction"
-                                      data-ng-maxlength="256"
-                                      data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
-                               />
-                        </div>
-                        <div class="input-error" data-ng-show="validateField(editForm.serviceFunction)">
-                            <span ng-show="editForm.serviceFunction.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
-                            <span ng-show="editForm.serviceFunction.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
-                        </div>
-                    </div>
-                    <!--------------------- Service Function -------------------->
-
-                    <!-------------------- ENVIRONMENT CONTEXT  ----------------->
-
-                    <div  ng-if="component.isService()" class="i-sdc-form-item">
-                        <loader data-display="!environmentContextObj && !initEnvironmentContext()" relative="true"></loader>
-                        <label class="i-sdc-form-label">Environment Context</label>
-                        <select class="i-sdc-form-select"
-                                name="environmentContext"
-                                data-ng-class="{'view-mode': isViewMode()}"
-                                data-ng-model="component.environmentContext"
-                                data-tests-id="environmentContext"
-                        >
-                            <option data-ng-repeat="environmentContextVal in (environmentContextObj.validValues) | orderBy"
-                                    value="{{environmentContextVal}}"
-                                    data-tests-id="{{environmentContextVal}}">{{environmentContextVal}}</option>
-                        </select>
-
-                    </div>
-                    <!--------------------- ENVIRONMENT CONTEXT ------------------>
-
-                    <!--------------------- Instantiation Type -------------------->
-                    <div class="i-sdc-form-item" data-ng-if="component.isService() && instantiationTypes">
-                        <label class="i-sdc-form-label">Instantiation Type</label>
-                        <select class="i-sdc-form-select"
-                                name="instantiationType"
-                                data-ng-class="{'view-mode': isViewMode()}"
-                                data-ng-disabled="component.isCsarComponent()"
-                                data-ng-model="component.instantiationType"
-                                data-tests-id="selectInstantiationType">
-                        <option ng-repeat="type in instantiationTypes">{{type}}</option>
-
-                        </select>
-                    </div>
-
-                    <!--------------------- Instantiation Type -------------------->
-
-                    <!--------------------- Base Type -------------------->
-                    <div class="w-sdc-form-columns-wrapper">
-                        <div class="w-sdc-form-column">
-                                   <div class="i-sdc-form-item" ng-if="component.isService() && baseTypes && baseTypes.length > 0">
-                                       <label class="i-sdc-form-label">Substitution Node Type</label>
-                            <select class="i-sdc-form-select"
-                                    name="baseType"
-                                    data-ng-class="{'view-mode': isViewMode()}"
-                                    data-ng-disabled="component.isCsarComponent() || !isCreateMode()"
-                                    data-ng-model="component.derivedFromGenericType"
-                                    data-ng-change="onBaseTypeChange()"
-                                    data-tests-id="selectBaseType"
-                                    data-ng-options="type for type in baseTypes track by type">
-                                <option value="" data-ng-if="!isBaseTypeRequired">None</option>
-                            </select>
-                                   </div>
-                               </div>
-                               <div class="w-sdc-form-column">
-                                   <div class="i-sdc-form-item" data-ng-if="component.isService() && showBaseTypeVersions">
-                                       <label class="i-sdc-form-label">Substitution Node Type Version</label>
-                                       <select class="i-sdc-form-select"
-                                               name="baseTypeVersion"
-                                               data-ng-class="{'view-mode': isViewMode()}"
-                                               data-ng-disabled="component.isCsarComponent() || !isCreateMode()"
-                                               data-ng-model="component.derivedFromGenericVersion"
-                                               data-tests-id="selectBaseTypeVersion">
-                                           <option ng-repeat="version in baseTypeVersions">{{version}}</option>
-                                       </select>
-                                   </div>
-                               </div>
-                       </div>
-
-                    <!--------------------- Base Type -------------------->
-
-                    <div class="meta-data" data-ng-if="component.creationDate">
-                        <div>
-                            <b>Created:</b>
-                        </div>
-                        <div class="meta-data-item-value">{{component.creationDate | date:'MM/dd/yyyy'}}, {{component.creatorFullName}}</div>
-                        <div>
-                            <b>Modifed:</b>
-                        </div>
-                        <div class="meta-data-item-value">
-                            {{component.lastUpdateDate | date:'MM/dd/yyyy'}}
-                        </div>
-                        <div>
-                            <b>UUID:</b>
-                        </div>
-                        <div class="meta-data-item-value">
-                            {{component.uuid}}
-                        </div>
-                        <div>
-                            <b>Invariant UUID:</b>
-                        </div>
-                        <div class="meta-data-item-value">
-                            {{component.invariantUUID}}
-                        </div>
-                    </div>
-                </div><!-- Close w-sdc-form-column -->
+              </div>
+              <div ng-if="isMetadataKeyForComponentCategory(key) && !isCategoryServiceMetadataKey(key) && !getMetadataKeyValidValues(key) && !isMetadataKeyMandatory(key)"
+                   class="i-sdc-form-item">
+                <label class="i-sdc-form-label" translate="{{getMetadataDisplayName(key)}}"></label>
+                <input class="i-sdc-form-input" type="text"
+                       data-ng-class="{'view-mode': isViewMode()}"
+                       data-ng-model="component.categorySpecificMetadata[key]"
+                       name="{{key}}"
+                       data-tests-id="{{key}}"
+                />
+              </div>
+            </ng-container>
+          </div>
+          <!--------------------- Category Specific Metadata -------------------->
+
+          <!--------------------- RESOURCE TAGS -------------------->
+          <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.tags)}">
+            <label class="i-sdc-form-label" translate="GENERAL_LABEL_TAGS"></label>
+
+            <sdc-tags form-element="editForm" element-name="tags" max-tags="20" class="i-sdc-form-item-tags"
+                      sdc-disabled="isViewMode()"
+                      tags="component.tags"
+                      pattern="validation.tagValidationPattern"
+                      special-tag="component.name"></sdc-tags>
+
+            <div class="input-error" data-ng-show="validateField(editForm.tags)">
+              <span ng-show="editForm.tags.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
+              <span ng-show="editForm.tags.$error.nameExist" translate="NEW_SERVICE_RESOURCE_ERROR_TAG_NAME_EXIST"></span>
+            </div>
+          </div>
+          <!--------------------- RESOURCE TAGS -------------------->
+
+          <!--------------------- DESCRIPTION -------------------->
+          <div class="i-sdc-form-item description-field"
+               data-ng-class="{'error': validateField(editForm.description)}">
+            <label class="i-sdc-form-label required" translate="GENERAL_LABEL_DESCRIPTION"></label>
+            <textarea class="description"
+                      name="description"
+                      data-ng-class="{'view-mode': isViewMode()}"
+                      data-ng-maxlength="1024"
+                      data-required
+                      data-ng-model="component.description"
+                      data-ng-model-options="{ debounce: 500 }"
+                      data-ng-pattern="validation.commentValidationPattern"
+                      data-tests-id="description"></textarea>
+
+            <div class="input-error" data-ng-show="validateField(editForm.description)">
+              <span ng-show="editForm.description.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_RESOURCE_DESCRIPTION_REQUIRED"></span>
+              <span ng-show="editForm.description.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '1024' }"></span>
+              <span ng-show="editForm.description.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
+            </div>
+          </div>
+          <!--------------------- DESCRIPTION -------------------->
+
+        </div><!-- Close w-sdc-form-column -->
+
+        <div class="w-sdc-form-column">
+          <!--------------------- IMPORT TOSCA FILE USING BROWSE (ALSO VFC) -------------------->
+          <div class="i-sdc-form-item" ng-if="isShowFileBrowse">
+
+            <label class="i-sdc-form-label" data-ng-class="{'required':isCreateMode() && component.resourceType !=='VF'}">{{browseFileLabel}}</label>
+            <file-upload id="fileUploadElement"
+                         class="i-sdc-form-input"
+                         element-name="fileElement"
+                         data-ng-required="false"
+                         element-disabled="{{(!isCreateMode()&&!(isEditMode()&&component.resourceType=='VF'))|| isViewMode() || component.vspArchived}}"
+                         form-element="editForm"
+                         file-model="component.importedFile"
+                         on-file-changed-in-directive="onImportFileChange"
+                         extensions="{{importedFileExtension}}"
+                         default-text="'Browse to select file'"
+            ></file-upload>
+          </div>
+
+          <!--------------------- IMPORT TOSCA FILE USING ONBOARDING -------------------->
+          <div class="i-sdc-form-item" ng-if="isShowOnboardingSelectionBrowse && !isShowFileBrowse">
+            <label class="i-sdc-form-label required">VSP</label>
+            <div class="i-sdc-form-file-upload i-sdc-form-input">
+              <span class="i-sdc-form-file-name"  data-ng-disabled="component.vspArchived"  data-tests-id="filename">{{(fileModel && fileModel.filename) || importedToscaBrowseFileText }}</span>
+              <div class="i-sdc-form-file-upload-x-btn" ng-click="cancel()" data-ng-show="fileModel.filename && fileModel.filename!=='' && elementDisabled!=='true'"></div>
+              <input type="button" data-ng-class="{'disabled': !isEditMode() && component.vspArchived}" data-ng-disabled="component.vspArchived" name="fileElement" />
+              <div class="file-upload-browse-btn" data-ng-class="{'disabled': !isEditMode() && !component.vspArchived}" data-ng-click="openOnBoardingModal()" data-ng-disabled="!component.vspArchived" data-tests-id="browseButton">Browse</div>
+            </div>
+          </div>
+
+          <div class="input-error-file-upload"   data-ng-disabled="!component.archived"  data-ng-show="component.importedFile && (!editForm.fileElement.$valid || !component.importedFile.filename)">
+            <!-- editForm.fileElement.$error.required <== Can not use this, because the browse is done from outside for the first time -->
+            <span ng-show="!(isEditMode()&&component.resourceType=='VF')&&!component.importedFile.filename" translate="NEW_SERVICE_RESOURCE_ERROR_TOSCA_FILE_REQUIRED"></span><!-- Required -->
+            <span ng-show="editForm.fileElement.$error.maxsize" translate="VALIDATION_ERROR_MAX_FILE_SIZE"></span>
+            <span ng-show="editForm.fileElement.$error.filetype" translate="NEW_SERVICE_RESOURCE_ERROR_VALID_TOSCA_EXTENSIONS" translate-values="{'extensions': '{{importedFileExtension}}' }"></span>
+            <span ng-show="editForm.fileElement.$error.emptyFile" translate="VALIDATION_ERROR_EMPTY_FILE"></span>
+          </div>
+          <!--------------------- IMPORT TOSCA FILE -------------------->
+
+          <!--------------------- USER ID -------------------->
+          <div class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.contactId)}">
+            <label class="i-sdc-form-label required" translate="GENERAL_LABEL_CONTACT_ID"></label>
+            <input class="i-sdc-form-input" type="text"
+                   data-ng-model="component.contactId"
+                   data-ng-class="{'view-mode': isViewMode()}"
+                   data-ng-required="true"
+                   name="contactId"
+                   data-ng-pattern="validation.contactIdValidationPattern"
+                   data-ng-model-options="{ debounce: 500 }"
+                   data-tests-id="contactId"
+                   data-ng-maxlength="50"
+            />
+
+            <div class="input-error" data-ng-show="validateField(editForm.contactId)">
+              <span ng-show="editForm.contactId.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '50' }"></span>
+              <span ng-show="editForm.contactId.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_CONTACT_REQUIRED"></span>
+              <span ng-show="editForm.contactId.$error.pattern" translate="NEW_SERVICE_RESOURCE_ERROR_CONTACT_NOT_VALID"></span>
+            </div>
+          </div>
+          <!--------------------- USER ID -------------------->
+
+          <!--------------------- VENDOR NAME -------------------->
+          <div ng-if="component.isResource()" class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.vendorName)}">
+            <label class="i-sdc-form-label required" translate="GENERAL_LABEL_VENDOR_NAME"></label>
+            <input class="i-sdc-form-input" type="text"
+                   data-ng-class="{'view-mode': isViewMode()}"
+                   data-ng-model="component.vendorName"
+                   data-ng-model-options="{ debounce: 500 }"
+                   data-ng-maxlength="60"
+                   data-required
+                   ng-click="oldValue = component.vendorName"
+                   name="vendorName"
+                   data-ng-change="onVendorNameChange(oldValue)"
+                   data-ng-pattern="validation.VendorNameValidationPattern"
+                   data-ng-disabled="component.isAlreadyCertified() || (component.isCsarComponent() && component.vendorName && component.vendorName!=='')"
+                   data-tests-id="vendorName"
+            />
+
+            <div class="input-error" data-ng-show="validateField(editForm.vendorName)">
+              <span ng-show="editForm.vendorName.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_VENDOR_NAME_REQUIRED"></span>
+              <span ng-show="editForm.vendorName.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '60' }"></span>
+              <span ng-show="editForm.vendorName.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
+            </div>
+
+          </div>
+          <!--------------------- VENDOR NAME -------------------->
+
+          <!--------------------- VENDOR RELEASE -------------------->
+          <div ng-if="component.isResource()"
+               class="i-sdc-form-item"
+               data-ng-class="{'error': validateField(editForm.vendorRelease)}">
+            <label class="i-sdc-form-label required" translate="GENERAL_LABEL_VENDOR_RELEASE"></label>
+            <input class="i-sdc-form-input" type="text"
+                   data-ng-class="{'view-mode': isViewMode()}"
+                   data-ng-model="component.vendorRelease"
+                   data-ng-model-options="{ debounce: 500 }"
+                   data-ng-maxlength="25"
+                   data-required
+                   name="vendorRelease"
+                   data-ng-pattern="validation.VendorReleaseValidationPattern"
+                   data-ng-disabled="component.isCsarComponent() && component.vendorRelease && component.vendorRelease!==''"
+                   data-tests-id="vendorRelease"
+            />
+
+            <div class="input-error" data-ng-show="validateField(editForm.vendorRelease)">
+              <span ng-show="editForm.vendorRelease.$error.required" translate="NEW_SERVICE_RESOURCE_ERROR_VENDOR_RELEASE_REQUIRED"></span>
+              <span ng-show="editForm.vendorRelease.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '25' }"></span>
+              <span ng-show="editForm.vendorRelease.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
+            </div>
+          </div>
+          <!--------------------- VENDOR RELEASE -------------------->
+
+          <!--------------------- Resource Model Number -------------------->
+          <div ng-if="component.isResource()"
+               class="i-sdc-form-item"
+               data-ng-class="{'error': validateField(editForm.resourceVendorModelNumber)}">
+            <label class="i-sdc-form-label" translate="GENERAL_LABEL_RESOURCE_MODEL_NUMBER"></label>
+            <input class="i-sdc-form-input" type="text"
+                   data-ng-class="{'view-mode': isViewMode()}"
+                   data-ng-model="component.resourceVendorModelNumber"
+                   data-ng-model-options="{ debounce: 500 }"
+                   data-ng-maxlength="65"
+                   name="resourceVendorModelNumber"
+                   data-ng-pattern="validation.VendorModelNumberValidationPattern"
+                   data-tests-id="resourceVendorModelNumber"
+            />
+
+            <div class="input-error" data-ng-show="validateField(editForm.resourceVendorModelNumber)">
+              <span ng-show="editForm.resourceVendorModelNumber.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '65' }"></span>
+              <span ng-show="editForm.resourceVendorModelNumber.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
+            </div>
+          </div>
+          <!--------------------- Resource Model Number -------------------->
+
+          <!--------------------- ECOMPGENERATEDNAMING -------------------->
+          <div class="i-sdc-form-item"
+               data-ng-class="{'error': validateField(editForm.ecompGeneratedNaming)}"
+               data-ng-if="component.isService() && !isNotApplicableMetadataKeys('Generated Naming')">
+            <label class="i-sdc-form-label">Generated Naming</label>
+            <select class="i-sdc-form-select"
+                    data-required
+                    name="ecompGeneratedNaming"
+                    data-ng-change="onEcompGeneratedNamingChange()"
+                    data-ng-class="{'view-mode': isViewMode()}"
+                    data-ng-model="component.ecompGeneratedNaming"
+                    data-tests-id="ecompGeneratedNaming">
+              <option ng-value="true">true</option>
+              <option ng-value="false">false</option>
+            </select>
+            <div class="input-error" data-ng-show="validateField(editForm.ecompGeneratedNaming)">
+
+            </div>
+          </div>
+          <!--------------------- CATEGORIES -------------------->
+
+          <!--------------------- NAMING POLICY  -------------------->
+          <div ng-if="component.isService() && !isNotApplicableMetadataKeys('Naming Policy')" class="i-sdc-form-item" data-ng-class="{'error': validateField(editForm.namingPolicy)}">
+            <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Naming Policy', 'namingPolicy')">
+              <div ng-if="isMetadataKeyMandatory('Naming Policy')">
+                <label class="i-sdc-form-label required">Naming Policy</label>
+              </div>
+              <div ng-if="!isMetadataKeyMandatory('Naming Policy')">
+                <label class="i-sdc-form-label">Naming Policy</label>
+              </div>
+              <select class="i-sdc-form-input" type="text"
+                      ng-required="isMetadataKeyMandatory('Naming Policy')"
+                      data-ng-class="{'view-mode': isViewMode()}"
+                      data-ng-model="component.namingPolicy"
+                      data-ng-model-options="{ debounce: 500 }"
+                      name="namingPolicy"
+                      data-tests-id="namingPolicy"
+                      data-ng-maxlength="256"
+                      data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
+              > <option ng-repeat="value in getMetadataKeyValidValues('Naming Policy')">{{value}}</option>
+              </select>
+            </div>
+            <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Naming Policy')">
+              <label class="i-sdc-form-label">Naming Policy</label>
+              <input class="i-sdc-form-input"
+                     name="namingPolicy"
+                     data-ng-class="{'view-mode': isViewMode() || !component.ecompGeneratedNaming}"
+                     data-ng-maxlength="100"
+                     data-ng-model="component.namingPolicy"
+                     type="text"
+                     data-ng-model-options="{ debounce: 500 }"
+                     data-ng-pattern="validation.commentValidationPattern"
+                     data-tests-id="namingPolicy"
+                     autofocus
+                     ng-readonly="isViewMode() || !component.ecompGeneratedNaming"
+              />
+            </div>
+            <div class="input-error" data-ng-show="validateField(editForm.namingPolicy)">
+              <span ng-show="editForm.namingPolicy.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '100' }"></span>
+              <span ng-show="editForm.namingPolicy.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
+            </div>
+          </div>
+          <!--------------------- NAMING POLICY  -------------------->
+
+          <!--------------------- Service Type -------------------->
+          <div ng-if="component.isService() && !isNotApplicableMetadataKeys('Service Type')"
+               class="i-sdc-form-item"
+               data-ng-class="{'error': validateField(editForm.serviceFunctionType)}">
+            <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Service Type', 'serviceType')">
+              <div ng-if="isMetadataKeyMandatory('Service Type')">
+                <label class="i-sdc-form-label required" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
+              </div>
+              <div ng-if="!isMetadataKeyMandatory('Service Type')">
+                <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
+              </div>
+              <select class="i-sdc-form-input" type="text"
+                      ng-required="isMetadataKeyMandatory('Service Type')"
+                      data-ng-class="{'view-mode': isViewMode()}"
+                      data-ng-model="component.serviceType"
+                      data-ng-model-options="{ debounce: 500 }"
+                      name="serviceType"
+                      data-tests-id="serviceType"
+                      data-ng-maxlength="256"
+                      data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
+              > <option ng-repeat="value in getMetadataKeyValidValues('Service Type')">{{value}}</option>
+              </select>
+            </div>
+            <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Service Type')">
+              <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_TYPE"></label>
+              <input class="i-sdc-form-input" type="text"
+                     data-ng-class="{'view-mode': isViewMode()}"
+                     data-ng-model="component.serviceType"
+                     data-ng-model-options="{ debounce: 500 }"
+                     name="serviceType"
+                     data-tests-id="serviceType"
+                     data-ng-maxlength="256"
+                     data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
+              />
+            </div>
+            <div class="input-error" data-ng-show="validateField(editForm.serviceType)">
+              <span ng-show="editForm.serviceType.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
+              <span ng-show="editForm.serviceType.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
+            </div>
+          </div>
+          <!--------------------- Service Type -------------------->
+
+          <!--------------------- Service Role -------------------->
+          <div ng-if="component.isService() && !isNotApplicableMetadataKeys('Service Role')"
+               class="i-sdc-form-item"
+               data-ng-class="{'error': validateField(editForm.serviceRole)}">
+            <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Service Role', 'serviceRole')">
+              <div ng-if="isMetadataKeyMandatory('Service Role')">
+                <label class="i-sdc-form-label required" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
+              </div>
+              <div ng-if="!isMetadataKeyMandatory('Service Role')">
+                <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
+              </div>
+              <select class="i-sdc-form-input" type="text"
+                      ng-required="isMetadataKeyMandatory('Service Role')"
+                      data-ng-class="{'view-mode': isViewMode()}"
+                      data-ng-model="component.serviceRole"
+                      data-ng-model-options="{ debounce: 500 }"
+                      name="serviceRole"
+                      data-tests-id="serviceRole"
+                      data-ng-maxlength="256"
+              > <option ng-repeat="value in getMetadataKeyValidValues('Service Role')">{{value}}</option>
+              </select>
+            </div>
+            <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Service Role')">
+              <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_ROLE"></label>
+              <input class="i-sdc-form-input" type="text"
+                     data-ng-class="{'view-mode': isViewMode()}"
+                     data-ng-model="component.serviceRole"
+                     data-ng-model-options="{ debounce: 500 }"
+                     name="serviceRole"
+                     data-tests-id="serviceRole"
+                     data-ng-maxlength="256"
+                     data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
+              />
+            </div>
+            <div class="input-error" data-ng-show="validateField(editForm.serviceRole)">
+              <span ng-show="editForm.serviceRole.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
+              <span ng-show="editForm.serviceRole.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
+            </div>
+          </div>
+          <!--------------------- Service Role -------------------->
+
+          <!--------------------- Service Function -------------------->
+          <div ng-if="component.isService() && !isNotApplicableMetadataKeys('Service Function')"
+               class="i-sdc-form-item"
+               data-ng-class="{'error': validateField(editForm.serviceFunction)}">
+            <div ng-if="component.selectedCategory && isMetadataKeyForComponentCategoryService('Service Function', 'serviceFunction')">
+              <div ng-if="isMetadataKeyMandatory('Service Function')">
+                <label class="i-sdc-form-label required" translate="GENERAL_TAB_LABEL_SERVICE_FUNCTION"></label>
+              </div>
+              <div ng-if="!isMetadataKeyMandatory('Service Function')">
+                <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_FUNCTION"></label>
+              </div>
+              <select class="i-sdc-form-input" type="text"
+                      ng-required="isMetadataKeyMandatory('Service Function')"
+                      data-ng-class="{'view-mode': isViewMode()}"
+                      data-ng-model="component.serviceFunction"
+                      data-ng-model-options="{ debounce: 500 }"
+                      name="serviceFunction"
+                      data-tests-id="serviceFunction"
+                      data-ng-maxlength="256"
+                      data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
+              > <option ng-repeat="value in getMetadataKeyValidValues('Service Function')">{{value}}</option>
+              </select>
+            </div>
+            <div ng-if="!component.selectedCategory || !isMetadataKeyForComponentCategory('Service Function')">
+              <label class="i-sdc-form-label" translate="GENERAL_TAB_LABEL_SERVICE_FUNCTION"></label>
+              <input class="i-sdc-form-input" type="text"
+                     data-ng-class="{'view-mode': isViewMode()}"
+                     data-ng-model="component.serviceFunction"
+                     name="serviceFunction"
+                     data-tests-id="serviceFunction"
+                     data-ng-maxlength="256"
+                     data-ng-pattern="validation.ServiceTypeAndRoleValidationPattern"
+              />
+            </div>
+            <div class="input-error" data-ng-show="validateField(editForm.serviceFunction)">
+              <span ng-show="editForm.serviceFunction.$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '256' }"></span>
+              <span ng-show="editForm.serviceFunction.$error.pattern" translate="VALIDATION_ERROR_SPECIAL_CHARS_NOT_ALLOWED"></span>
+            </div>
+          </div>
+          <!--------------------- Service Function -------------------->
+
+          <!-------------------- ENVIRONMENT CONTEXT  ----------------->
+          <div  ng-if="component.isService() && !isNotApplicableMetadataKeys('Environment Context')" class="i-sdc-form-item">
+            <loader data-display="!environmentContextObj && !initEnvironmentContext()" relative="true"></loader>
+            <label class="i-sdc-form-label">Environment Context</label>
+            <select class="i-sdc-form-select"
+                    name="environmentContext"
+                    data-ng-class="{'view-mode': isViewMode()}"
+                    data-ng-model="component.environmentContext"
+                    data-tests-id="environmentContext"
+            >
+              <option data-ng-repeat="environmentContextVal in (environmentContextObj.validValues) | orderBy"
+                      value="{{environmentContextVal}}"
+                      data-tests-id="{{environmentContextVal}}">{{environmentContextVal}}</option>
+            </select>
+
+          </div>
+          <!--------------------- ENVIRONMENT CONTEXT ------------------>
+
+          <!--------------------- Instantiation Type -------------------->
+          <div class="i-sdc-form-item" data-ng-if="component.isService() && instantiationTypes && !isNotApplicableMetadataKeys('Instantiation Type')">
+            <label class="i-sdc-form-label">Instantiation Type</label>
+            <select class="i-sdc-form-select"
+                    name="instantiationType"
+                    data-ng-class="{'view-mode': isViewMode()}"
+                    data-ng-disabled="component.isCsarComponent()"
+                    data-ng-model="component.instantiationType"
+                    data-tests-id="selectInstantiationType">
+              <option ng-repeat="type in instantiationTypes">{{type}}</option>
+
+            </select>
+          </div>
+          <!--------------------- Instantiation Type -------------------->
+
+          <!--------------------- Base Type -------------------->
+          <div class="w-sdc-form-columns-wrapper">
+            <div class="w-sdc-form-column">
+              <div class="i-sdc-form-item" ng-if="component.isService() && baseTypes && baseTypes.length > 0 && !isNotApplicableMetadataKeys('Substitution Node Type')">
+                <label class="i-sdc-form-label">Substitution Node Type</label>
+                <select class="i-sdc-form-select"
+                        name="baseType"
+                        data-ng-class="{'view-mode': isViewMode()}"
+                        data-ng-disabled="component.isCsarComponent() || !isCreateMode()"
+                        data-ng-model="component.derivedFromGenericType"
+                        data-ng-change="onBaseTypeChange()"
+                        data-tests-id="selectBaseType"
+                        data-ng-options="type for type in baseTypes track by type">
+                  <option value="" data-ng-if="!isBaseTypeRequired">None</option>
+                </select>
+              </div>
+            </div>
+            <div class="w-sdc-form-column">
+              <div class="i-sdc-form-item" data-ng-if="component.isService() && showBaseTypeVersions && !isNotApplicableMetadataKeys('Substitution Node Type Version')">
+                <label class="i-sdc-form-label">Substitution Node Type Version</label>
+                <select class="i-sdc-form-select"
+                        name="baseTypeVersion"
+                        data-ng-class="{'view-mode': isViewMode()}"
+                        data-ng-disabled="component.isCsarComponent() || !isCreateMode()"
+                        data-ng-model="component.derivedFromGenericVersion"
+                        data-tests-id="selectBaseTypeVersion">
+                  <option ng-repeat="version in baseTypeVersions">{{version}}</option>
+                </select>
+              </div>
+            </div>
+          </div>
+          <!--------------------- Base Type -------------------->
+
+          <div class="meta-data" data-ng-if="component.creationDate">
+            <div>
+              <strong>Created:</strong>
+            </div>
+            <div class="meta-data-item-value">{{component.creationDate | date:'MM/dd/yyyy'}}, {{component.creatorFullName}}</div>
+            <div>
+              <strong>Modifed:</strong>
+            </div>
+            <div class="meta-data-item-value">
+              {{component.lastUpdateDate | date:'MM/dd/yyyy'}}
+            </div>
+            <div>
+              <strong>UUID:</strong>
+            </div>
+            <div class="meta-data-item-value">
+              {{component.uuid}}
+            </div>
+            <div>
+              <strong>Invariant UUID:</strong>
+            </div>
+            <div class="meta-data-item-value">
+              {{component.invariantUUID}}
             </div>
+          </div>
+        </div><!-- Close w-sdc-form-column -->
+      </div>
 
-        </div><!-- Close w-sdc-form-section-container -->
+    </div><!-- Close w-sdc-form-section-container -->
 
-    </form>
+  </form>
 </div>
index 7676881..a0867c1 100644 (file)
@@ -42,6 +42,7 @@ public class CategoryDataDefinition extends ToscaDataDefinition {
     private List<String> icons;
     private boolean useServiceSubstitutionForNestedServices = false;
     private List<MetadataKeyDataDefinition> metadataKeys;
+    private List<String> notApplicableMetadataKeys;
 
     public CategoryDataDefinition(CategoryDataDefinition c) {
         this.name = c.name;
@@ -52,5 +53,6 @@ public class CategoryDataDefinition extends ToscaDataDefinition {
         this.icons = c.icons;
         this.useServiceSubstitutionForNestedServices = c.useServiceSubstitutionForNestedServices;
         this.metadataKeys = c.metadataKeys;
+        this.notApplicableMetadataKeys = c.notApplicableMetadataKeys;
     }
 }
index ebddb6d..bc29ef0 100644 (file)
@@ -39,11 +39,4 @@ public class MetadataKeyDataDefinition extends ToscaDataDefinition {
     private boolean mandatory;
     private String defaultValue;
 
-    public MetadataKeyDataDefinition(MetadataKeyDataDefinition metadataKeyDataDefinition) {
-        this.name = metadataKeyDataDefinition.name;
-        this.displayName = metadataKeyDataDefinition.displayName;
-        this.validValues = metadataKeyDataDefinition.validValues;
-        this.mandatory = metadataKeyDataDefinition.mandatory;
-        this.defaultValue = metadataKeyDataDefinition.defaultValue;
-    }
 }
index 311fac4..5376c92 100644 (file)
@@ -56,6 +56,7 @@ public enum GraphPropertyEnum {
     ICONS(                  "icons",                String.class,   false,  false),
     METADATA_KEYS(          "metadataKeys",         String.class,   false,  false),
     USE_SUBSTITUTION_FOR_NESTED_SERVICES("useServiceSubstitutionForNestedServices",Boolean.class,false,false),
+    NOT_APPLICABLE_METADATA_KEYS("notApplicableMetadataKeys",String.class,false,false),
     DATA_TYPES(             "data_types",           Map.class,      false,  false),
     //Archive/Restore
     IS_ARCHIVED(            "isArchived",           Boolean.class,  false,  true),
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/TranslatedFileDataDto.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/TranslatedFileDataDto.java
deleted file mode 100644 (file)
index ab9dae4..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright © 2016-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.vendorsoftwareproducts.types;
-
-import lombok.Data;
-
-/**
- * Created by TALIO on 4/20/2016.
- */
-@Data
-public class TranslatedFileDataDto {
-
-    private String displayName;
-    private String version;
-    private String category;
-    private String subcategory;
-    private String vendorName;
-    private String vendorRelease;
-    private String packageChecksum;
-    private String packageType;
-}
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/test/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/TranslatedFileDataDtoTest.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-types/src/test/java/org/openecomp/sdcrests/vendorsoftwareproducts/types/TranslatedFileDataDtoTest.java
deleted file mode 100644 (file)
index e1fd9b9..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2019 Nokia. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-package org.openecomp.sdcrests.vendorsoftwareproducts.types;
-
-import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanEquals;
-import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanHashCode;
-import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanToString;
-import static com.google.code.beanmatchers.BeanMatchers.hasValidGettersAndSetters;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-import org.junit.Test;
-
-public class TranslatedFileDataDtoTest {
-    @Test
-    public void shouldHaveValidGettersAndSetters() {
-        assertThat(TranslatedFileDataDto.class, hasValidGettersAndSetters());
-    }
-
-    @Test
-    public void shouldHaveValidToString() {
-        assertThat(TranslatedFileDataDto.class, hasValidBeanToString());
-    }
-
-    @Test
-    public void shouldHaveEquals() {
-        assertThat(TranslatedFileDataDto.class, hasValidBeanEquals());
-    }
-
-    @Test
-    public void shouldHaveHashCode() {
-        assertThat(TranslatedFileDataDto.class, hasValidBeanHashCode());
-    }
-}
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/type/TranslatedFileData.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/type/TranslatedFileData.java
deleted file mode 100644 (file)
index 6a392cd..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-package org.openecomp.sdc.vendorsoftwareproduct.dao.type;
-
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@NoArgsConstructor
-public class TranslatedFileData {
-
-    private String displayName;
-    private String version;
-    private String category;
-    private String subcategory;
-    private String vandorName;
-    private String vendorRelease;
-    private String packageChecksum;
-    private String packageType;
-}