Specify a model while creating a VSP
[sdc.git] / openecomp-be / lib / openecomp-sdc-vendor-software-product-lib / openecomp-sdc-vendor-software-product-core / src / main / java / org / openecomp / sdc / vendorsoftwareproduct / dao / impl / zusammen / VendorSoftwareProductInfoDaoZusammenImpl.java
index 7ad7929..78ab818 100644 (file)
+/*
+ * Copyright © 2016-2018 European Support Limited
+ * Modifications Copyright (C) 2021 Nordix Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen;
 
-import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
+import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
+import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext;
+
 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
-import com.amdocs.zusammen.datatypes.Id;
 import com.amdocs.zusammen.datatypes.SessionContext;
 import com.amdocs.zusammen.datatypes.item.Action;
 import com.amdocs.zusammen.datatypes.item.ElementContext;
 import com.amdocs.zusammen.datatypes.item.Info;
-import com.amdocs.zusammen.datatypes.item.ItemVersion;
-import com.amdocs.zusammen.utils.fileutils.FileUtils;
+import java.io.ByteArrayInputStream;
+import java.util.Collection;
+import java.util.stream.Collectors;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
-import org.openecomp.core.zusammen.api.ZusammenUtil;
+import org.openecomp.sdc.datatypes.model.ElementType;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.VendorSoftwareProductInfoDao;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToVSPGeneralConvertor;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.impl.zusammen.convertor.ElementToVSPQuestionnaireConvertor;
+import org.openecomp.sdc.vendorsoftwareproduct.dao.type.OnboardingMethod;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspQuestionnaireEntity;
-import org.openecomp.sdc.versioning.VersioningManagerFactory;
+import org.openecomp.sdc.versioning.ActionVersioningManagerFactory;
 import org.openecomp.sdc.versioning.dao.types.Version;
 import org.openecomp.sdc.versioning.types.VersionableEntityMetadata;
 import org.openecomp.sdc.versioning.types.VersionableEntityStoreType;
 
-import java.io.ByteArrayInputStream;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
 public class VendorSoftwareProductInfoDaoZusammenImpl implements VendorSoftwareProductInfoDao {
-  private ZusammenAdaptor zusammenAdaptor;
-
-  public VendorSoftwareProductInfoDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
-    this.zusammenAdaptor = zusammenAdaptor;
-  }
-
-  @Override
-  public void registerVersioning(String versionableEntityType) {
-    VersionableEntityMetadata metadata =
-        new VersionableEntityMetadata(VersionableEntityStoreType.Zusammen, "vsp", null, null);
-
-    VersioningManagerFactory.getInstance().createInterface()
-        .register(versionableEntityType, metadata);
-  }
-
-  @Override
-  public Collection<VspDetails> list(VspDetails entity) {
-    return zusammenAdaptor.listItems(ZusammenUtil.createSessionContext()).stream().filter
-        (vspEntity-> "vsp".equals(vspEntity.getInfo().getProperty("type")))
-        .map(item -> mapInfoToVspDetails(
-            item.getId().getValue(), null, item.getInfo(),
-            item.getModificationTime(), item.getCreationTime()))
-        .collect(Collectors.toList());
-  }
-
-  @Override
-  public void create(VspDetails vspDetails) {
-    SessionContext context = ZusammenUtil.createSessionContext();
-
-    Id itemId = zusammenAdaptor.createItem(context, mapVspDetailsToZusammenItemInfo(vspDetails));
-    Id versionId =
-        zusammenAdaptor.createVersion(context, itemId, null, ZusammenUtil.createFirstVersionData());
-
-    ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.CREATE);
-    zusammenAdaptor.saveElement(context, new ElementContext(itemId, versionId),
-        generalElement, "Create VSP General Info Element");
-
-    vspDetails.setId(itemId.getValue());//set id for caller
-  }
-
-  @Override
-  public void update(VspDetails vspDetails) {
-    SessionContext context = ZusammenUtil.createSessionContext();
-    Id itemId = new Id(vspDetails.getId());
-    Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor);
-
-    zusammenAdaptor.updateItem(context, itemId, mapVspDetailsToZusammenItemInfo(vspDetails));
-
-    ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.UPDATE);
-    zusammenAdaptor.saveElement(context, new ElementContext(itemId, versionId),
-        generalElement, "Update VSP General Info Element");
-  }
-
-  @Override
-  public VspDetails get(VspDetails vspDetails) {
-    SessionContext context = ZusammenUtil.createSessionContext();
-    Id itemId = new Id(vspDetails.getId());
-    ItemVersion itemVersion = VspZusammenUtil.getFirstVersion(context, itemId, zusammenAdaptor);
-    ElementContext elementContext = new ElementContext(itemId, itemVersion.getId(),
-        VspZusammenUtil.getVersionTag(vspDetails.getVersion()));
-
-    return zusammenAdaptor
-        .getElementInfoByName(context, elementContext, null, StructureElement.General.name())
-        .map(generalElementInfo -> mapInfoToVspDetails(
-            vspDetails.getId(), vspDetails.getVersion(), generalElementInfo.getInfo(),
-            itemVersion.getModificationTime(), itemVersion.getCreationTime()))
-        .orElse(null);
-  }
-
-
-  @Override
-  public void delete(VspDetails entity) {
-
-  }
-
-  @Override
-  public void updateOldVersionIndication(VspDetails vspDetails) {
-    VspDetails retrieved = get(vspDetails);
-    if (retrieved != null) {
-      retrieved.setOldVersion(vspDetails.getOldVersion());
-      update(retrieved);
-    }
-  }
-
-  @Override
-  public void updateQuestionnaireData(String vspId, Version version, String questionnaireData) {
-    SessionContext context = ZusammenUtil.createSessionContext();
-    Id itemId = new Id(vspId);
-    Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor);
-
-    ZusammenElement questionnaireElement = mapQuestionnaireToZusammenElement(questionnaireData);
-    zusammenAdaptor.saveElement(context, new ElementContext(itemId, versionId),
-        questionnaireElement, "Update VSP Questionnaire");
-  }
-
-
-  @Override
-  public String getQuestionnaireData(String vspId, Version version) {
-    SessionContext context = ZusammenUtil.createSessionContext();
-    Id itemId = new Id(vspId);
-    Id versionId = VspZusammenUtil.getFirstVersionId(context, itemId, zusammenAdaptor);
-
-    return zusammenAdaptor.getElementByName(context,
-        new ElementContext(itemId, versionId, VspZusammenUtil.getVersionTag(version)), null,
-        StructureElement.Questionnaire.name())
-        .map(questionnaireElement ->
-            new String(FileUtils.toByteArray(questionnaireElement.getData())))
-        .orElse(null);
-  }
-
-  @Override
-  public VspQuestionnaireEntity getQuestionnaire(String vspId, Version version) {
-    VspQuestionnaireEntity entity = new VspQuestionnaireEntity();
-    entity.setId(vspId);
-    entity.setVersion(version);
-    entity.setQuestionnaireData(getQuestionnaireData(vspId, version));
-    return entity;
-  }
-
-  @Override
-  public void deleteAll(String vspId, Version version) {
-
-  }
-
-  @Override
-  public boolean isManual(String vspId, Version version) {
-    final VspDetails vspDetails = get(new VspDetails(vspId, version));
-    if (vspDetails != null) {
-      if ("Manual".equals(vspDetails.getOnboardingMethod())) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  private Info mapVspDetailsToZusammenItemInfo(VspDetails vspDetails) {
-    Info info = new Info();
-    info.setName(vspDetails.getName());
-    info.setDescription(vspDetails.getDescription());
-    info.addProperty("type", "vsp");
-    addVspDetailsToInfo(info, vspDetails);
-    return info;
-  }
-
-  private ZusammenElement mapVspDetailsToZusammenElement(VspDetails vspDetails, Action action) {
-    ZusammenElement generalElement =
-        VspZusammenUtil.buildStructuralElement(StructureElement.General, action);
-    addVspDetailsToInfo(generalElement.getInfo(), vspDetails);
-    return generalElement;
-  }
-
-  private ZusammenElement mapQuestionnaireToZusammenElement(String questionnaireData) {
-    ZusammenElement questionnaireElement =
-        VspZusammenUtil.buildStructuralElement(StructureElement.Questionnaire, Action.UPDATE);
-    questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes()));
-    return questionnaireElement;
-  }
-
-  private void addVspDetailsToInfo(Info info, VspDetails vspDetails) {
-    info.addProperty(InfoPropertyName.name.name(), vspDetails.getName());
-    info.addProperty(InfoPropertyName.description.name(), vspDetails.getDescription());
-    info.addProperty(InfoPropertyName.icon.name(), vspDetails.getIcon());
-    info.addProperty(InfoPropertyName.category.name(), vspDetails.getCategory());
-    info.addProperty(InfoPropertyName.subCategory.name(), vspDetails.getSubCategory());
-    info.addProperty(InfoPropertyName.vendorId.name(), vspDetails.getVendorId());
-    info.addProperty(InfoPropertyName.vendorName.name(), vspDetails.getVendorName());
-    if (vspDetails.getVlmVersion() != null) {
-      info.addProperty(
-          InfoPropertyName.vendorVersion.name(), vspDetails.getVlmVersion().toString());
-    }
-    info.addProperty(InfoPropertyName.licenseAgreement.name(), vspDetails.getLicenseAgreement());
-    info.addProperty(InfoPropertyName.featureGroups.name(), vspDetails.getFeatureGroups());
-    info.addProperty(InfoPropertyName.oldVersion.name(), vspDetails.getOldVersion());
-    info.addProperty(InfoPropertyName.onboardingMethod.name(), vspDetails.getOnboardingMethod());
-    info.addProperty(InfoPropertyName.obBoardingOrigin.name(), vspDetails.getOnboardingOrigin());
-    info.addProperty(InfoPropertyName.networkPackageName.name(), vspDetails.getNetworkPackageName());
-  }
-
-  private VspDetails mapInfoToVspDetails(String vspId, Version version, Info info,
-                                         Date modificationTime, Date creationTime) {
-    VspDetails vspDetails = new VspDetails(vspId, version);
-    vspDetails.setName(info.getProperty(InfoPropertyName.name.name()));
-    vspDetails.setDescription(info.getProperty(InfoPropertyName.description.name()));
-    vspDetails.setCategory(info.getProperty(InfoPropertyName.category.name()));
-    vspDetails.setSubCategory(info.getProperty(InfoPropertyName.subCategory.name()));
-    vspDetails.setVendorId(info.getProperty(InfoPropertyName.vendorId.name()));
-    vspDetails.setVendorName(info.getProperty(InfoPropertyName.vendorName.name()));
-    vspDetails.setVlmVersion(
-        Version.valueOf(info.getProperty(InfoPropertyName.vendorVersion.name())));
-    vspDetails.setLicenseAgreement(info.getProperty(InfoPropertyName.licenseAgreement.name()));
-    vspDetails.setFeatureGroups(info.getProperty(InfoPropertyName.featureGroups.name()));
-
-    vspDetails.setWritetimeMicroSeconds(
-        modificationTime == null ? creationTime.getTime() : modificationTime.getTime());
-    vspDetails.setVersion(version);
-    String oldVersion = info.getProperty(InfoPropertyName.oldVersion.name());
-
-    //Boolean oldVersion = ind == null || "true".equals( ind.toLowerCase());
-    vspDetails.setOldVersion(oldVersion);
-    vspDetails.setOnboardingMethod(info.getProperty(InfoPropertyName.onboardingMethod.name()));
-    vspDetails.setOnboardingOrigin(info.getProperty(InfoPropertyName.obBoardingOrigin.name()));
-    vspDetails.setNetworkPackageName(info.getProperty(InfoPropertyName.networkPackageName.name()));
-    return vspDetails;
-  }
-
-  private enum InfoPropertyName {
-    name,
-    description,
-    icon,
-    category,
-    subCategory,
-    vendorId,
-    vendorName,
-    vendorVersion,
-    licenseAgreement,
-    featureGroups,
-    oldVersion,
-    onboardingMethod,
-    obBoardingOrigin,
-    networkPackageName
-  }
 
+    private static final String EMPTY_DATA = "{}";
+    private ZusammenAdaptor zusammenAdaptor;
+
+    public VendorSoftwareProductInfoDaoZusammenImpl(ZusammenAdaptor zusammenAdaptor) {
+        this.zusammenAdaptor = zusammenAdaptor;
+    }
+
+    @Override
+    public void registerVersioning(String versionableEntityType) {
+        VersionableEntityMetadata metadata = new VersionableEntityMetadata(VersionableEntityStoreType.Zusammen, "VendorSoftwareProduct", null, null);
+        ActionVersioningManagerFactory.getInstance().createInterface().register(versionableEntityType, metadata);
+    }
+
+    @Override
+    public Collection<VspDetails> list(VspDetails entity) {
+        return zusammenAdaptor.listItems(createSessionContext()).stream()
+            .filter(item -> "VendorSoftwareProduct".equals(item.getInfo().getProperty("item_type"))).map(new ElementToVSPGeneralConvertor()::convert)
+            .collect(Collectors.toList());
+    }
+
+    @Override
+    public void create(VspDetails vspDetails) {
+        ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.CREATE);
+        SessionContext context = createSessionContext();
+        ElementContext elementContext = new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
+        zusammenAdaptor.saveElement(context, elementContext, generalElement, "Create VSP General Info Element");
+        createVspStructure(context, elementContext);
+    }
+
+    private void createVspStructure(SessionContext context, ElementContext elementContext) {
+        createOrchestrationTemplateCandidateStructure(context, elementContext);
+        createVspModelStructure(context, elementContext);
+        zusammenAdaptor.saveElement(context, elementContext, buildStructuralElement(ElementType.DeploymentFlavors, Action.CREATE),
+            "Create VSP Deployment Flavors Element");
+        zusammenAdaptor
+            .saveElement(context, elementContext, buildStructuralElement(ElementType.Processes, Action.CREATE), "Create VSP Processes Element");
+    }
+
+    private void createOrchestrationTemplateCandidateStructure(SessionContext context, ElementContext elementContext) {
+        ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
+        ZusammenElement candidateContentElement = buildStructuralElement(ElementType.OrchestrationTemplateCandidateContent, Action.CREATE);
+        candidateContentElement.setData(emptyData);
+        ZusammenElement validationData = buildStructuralElement(ElementType.OrchestrationTemplateCandidateValidationData, Action.CREATE);
+        ZusammenElement candidateElement = buildStructuralElement(ElementType.OrchestrationTemplateCandidate, Action.CREATE);
+        candidateElement.setData(emptyData);
+        candidateElement.addSubElement(candidateContentElement);
+        candidateElement.addSubElement(validationData);
+        zusammenAdaptor.saveElement(context, elementContext, candidateElement, "Create Orchestration Template Candidate Elements");
+    }
+
+    private void createVspModelStructure(SessionContext context, ElementContext elementContext) {
+        ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.CREATE);
+        vspModel.addSubElement(buildOrchestrationTemplateStructure());
+        vspModel.addSubElement(buildStructuralElement(ElementType.Networks, Action.CREATE));
+        vspModel.addSubElement(buildStructuralElement(ElementType.Components, Action.CREATE));
+        vspModel.addSubElement(buildStructuralElement(ElementType.ComponentDependencies, Action.CREATE));
+        ZusammenElement templates = buildStructuralElement(ElementType.Templates, Action.CREATE);
+        ZusammenElement artifacts = buildStructuralElement(ElementType.Artifacts, Action.CREATE);
+        vspModel.addSubElement(buildServiceModelStructure(ElementType.ServiceModel, templates, artifacts));
+        vspModel.addSubElement(buildServiceModelStructure(ElementType.EnrichedServiceModel, templates, artifacts));
+        zusammenAdaptor.saveElement(context, elementContext, vspModel, "Create VSP Model Elements");
+    }
+
+    private ZusammenElement buildOrchestrationTemplateStructure() {
+        ByteArrayInputStream emptyData = new ByteArrayInputStream(EMPTY_DATA.getBytes());
+        ZusammenElement validationData = buildStructuralElement(ElementType.OrchestrationTemplateValidationData, Action.CREATE);
+        validationData.setData(emptyData);
+        ZusammenElement orchestrationTemplateStructure = buildStructuralElement(ElementType.OrchestrationTemplateStructure, Action.CREATE);
+        validationData.setData(emptyData);
+        ZusammenElement orchestrationTemplate = buildStructuralElement(ElementType.OrchestrationTemplate, Action.CREATE);
+        orchestrationTemplate.setData(emptyData);
+        orchestrationTemplate.addSubElement(validationData);
+        orchestrationTemplate.addSubElement(orchestrationTemplateStructure);
+        return orchestrationTemplate;
+    }
+
+    private ZusammenElement buildServiceModelStructure(ElementType serviceModelElementType, ZusammenElement templates, ZusammenElement artifacts) {
+        ZusammenElement serviceModel = buildStructuralElement(serviceModelElementType, Action.CREATE);
+        serviceModel.addSubElement(templates);
+        serviceModel.addSubElement(artifacts);
+        return serviceModel;
+    }
+
+    @Override
+    public void update(VspDetails vspDetails) {
+        ZusammenElement generalElement = mapVspDetailsToZusammenElement(vspDetails, Action.UPDATE);
+        SessionContext context = createSessionContext();
+        zusammenAdaptor.saveElement(context, new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId()), generalElement,
+            "Update VSP General Info Element");
+    }
+
+    @Override
+    public VspDetails get(VspDetails vspDetails) {
+        SessionContext context = createSessionContext();
+        ElementContext elementContext = new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
+        return zusammenAdaptor.getElementInfoByName(context, elementContext, null, ElementType.VendorSoftwareProduct.name())
+            .map(new ElementToVSPGeneralConvertor()::convert).map(vsp -> {
+                vsp.setId(vspDetails.getId());
+                vsp.setVersion(vspDetails.getVersion());
+                return vsp;
+            }).orElse(null);
+    }
+
+    @Override
+    public void delete(VspDetails vspDetails) {
+        SessionContext context = createSessionContext();
+        ElementContext elementContext = new ElementContext(vspDetails.getId(), vspDetails.getVersion().getId());
+        zusammenAdaptor
+            .saveElement(context, elementContext, buildStructuralElement(ElementType.VspModel, Action.DELETE), "Delete VSP Model Elements");
+        createVspModelStructure(context, elementContext);
+    }
+
+    @Override
+    public void updateQuestionnaireData(String vspId, Version version, String questionnaireData) {
+        SessionContext context = createSessionContext();
+        ZusammenElement questionnaireElement = mapQuestionnaireToZusammenElement(questionnaireData);
+        zusammenAdaptor.saveElement(context, new ElementContext(vspId, version.getId()), questionnaireElement, "Update VSP Questionnaire");
+    }
+
+    @Override
+    public VspQuestionnaireEntity getQuestionnaire(String vspId, Version version) {
+        SessionContext context = createSessionContext();
+        VspQuestionnaireEntity entity = new ElementToVSPQuestionnaireConvertor().convert(
+            zusammenAdaptor.getElementByName(context, new ElementContext(vspId, version.getId()), null, ElementType.VSPQuestionnaire.name())
+                .orElse(null));
+        entity.setId(vspId);
+        entity.setVersion(version);
+        return entity;
+    }
+
+    @Override
+    public boolean isManual(String vspId, Version version) {
+        final VspDetails vspDetails = get(new VspDetails(vspId, version));
+        return vspDetails != null && OnboardingMethod.Manual.name().equals(vspDetails.getOnboardingMethod());
+    }
+
+    private ZusammenElement mapVspDetailsToZusammenElement(VspDetails vspDetails, Action action) {
+        ZusammenElement generalElement = buildStructuralElement(ElementType.VendorSoftwareProduct, action);
+        addVspDetailsToInfo(generalElement.getInfo(), vspDetails);
+        return generalElement;
+    }
+
+    private ZusammenElement mapQuestionnaireToZusammenElement(String questionnaireData) {
+        ZusammenElement questionnaireElement = buildStructuralElement(ElementType.VSPQuestionnaire, Action.UPDATE);
+        questionnaireElement.setData(new ByteArrayInputStream(questionnaireData.getBytes()));
+        return questionnaireElement;
+    }
+
+    private void addVspDetailsToInfo(final Info info, final VspDetails vspDetails) {
+        info.addProperty(InfoPropertyName.NAME.getValue(), vspDetails.getName());
+        info.addProperty(InfoPropertyName.DESCRIPTION.getValue(), vspDetails.getDescription());
+        info.addProperty(InfoPropertyName.ICON.getValue(), vspDetails.getIcon());
+        info.addProperty(InfoPropertyName.CATEGORY.getValue(), vspDetails.getCategory());
+        info.addProperty(InfoPropertyName.SUB_CATEGORY.getValue(), vspDetails.getSubCategory());
+        info.addProperty(InfoPropertyName.VENDOR_ID.getValue(), vspDetails.getVendorId());
+        info.addProperty(InfoPropertyName.VENDOR_NAME.getValue(), vspDetails.getVendorName());
+        if (vspDetails.getVlmVersion() != null) {
+            info.addProperty(InfoPropertyName.VENDOR_VERSION.getValue(), vspDetails.getVlmVersion().getId());
+        }
+        info.addProperty(InfoPropertyName.LICENSE_TYPE.getValue(), vspDetails.getLicenseType());
+        info.addProperty(InfoPropertyName.LICENSE_AGREEMENT.getValue(), vspDetails.getLicenseAgreement());
+        info.addProperty(InfoPropertyName.FEATURE_GROUPS.getValue(), vspDetails.getFeatureGroups());
+        info.addProperty(InfoPropertyName.ON_BOARDING_METHOD.getValue(), vspDetails.getOnboardingMethod());
+        if (!vspDetails.getModelIdList().isEmpty()) {
+            info.addProperty(InfoPropertyName.MODELS.getValue(), vspDetails.getModelIdList());
+        }
+    }
+
+    @AllArgsConstructor
+    @Getter
+    public enum InfoPropertyName {
+        // @formatter:off
+        NAME("name"),
+        DESCRIPTION("description"),
+        ICON("icon"),
+        CATEGORY("category"),
+        SUB_CATEGORY("subCategory"),
+        VENDOR_ID("vendorId"),
+        VENDOR_NAME("vendorName"),
+        VENDOR_VERSION("vendorVersion"),
+        LICENSE_TYPE("licenseType"),
+        LICENSE_AGREEMENT("licenseAgreement"),
+        FEATURE_GROUPS("featureGroups"),
+        ON_BOARDING_METHOD("onboardingMethod"),
+        MODELS("models");
+        // @formatter:on
+
+        private final String value;
+
+    }
 }