aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib
diff options
context:
space:
mode:
authorandre.schmid <andre.schmid@est.tech>2021-07-29 10:14:19 +0100
committerVasyl Razinkov <vasyl.razinkov@est.tech>2021-08-17 08:12:35 +0000
commit6e75dd1bfd8c1a4625c9c61a60883d28ca88fff7 (patch)
treea489c38d90b399e7c446e082c977aa3d4974ba94 /openecomp-be/lib
parent855a434b4f6555aa43091cdaeef14a33e418458d (diff)
Handle VSP package upload for multi-model
Change-Id: Iceca3f160eaeb1a6431fc3c5bbab92847e95ae4d Issue-ID: SDC-3667 Signed-off-by: André Schmid <andre.schmid@est.tech>
Diffstat (limited to 'openecomp-be/lib')
-rw-r--r--openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/orchestration/OnboardingTypesEnum.java11
-rw-r--r--openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ToscaServiceModelHealer.java4
-rw-r--r--openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/dao/EnrichedServiceModelDao.java6
-rw-r--r--openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/dao/ServiceModelDao.java11
-rw-r--r--openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/types/ToscaServiceModelProperty.java35
-rw-r--r--openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-impl/src/main/java/org/openecomp/sdc/model/impl/zusammen/EnrichedServiceModelDaoZusammenImpl.java3
-rw-r--r--openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-impl/src/main/java/org/openecomp/sdc/model/impl/zusammen/ServiceModelDaoZusammenImpl.java62
-rw-r--r--openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/type/PackageInfo.java8
-rw-r--r--openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/impl/PackageInfoDaoImpl.java4
-rw-r--r--openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/dao/ServiceModelDaoFactoryTest.java4
-rw-r--r--openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/AbstractToscaConverter.java3
-rw-r--r--openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaModelConverter.java133
-rw-r--r--openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/datatypes/ToscaServiceModel.java12
13 files changed, 243 insertions, 53 deletions
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/orchestration/OnboardingTypesEnum.java b/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/orchestration/OnboardingTypesEnum.java
index 4ed85f939b..6540cc1eda 100644
--- a/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/orchestration/OnboardingTypesEnum.java
+++ b/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/orchestration/OnboardingTypesEnum.java
@@ -16,21 +16,22 @@
package org.openecomp.core.utilities.orchestration;
import java.util.Arrays;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
+@AllArgsConstructor
public enum OnboardingTypesEnum {
CSAR("csar"), ZIP("zip"), MANUAL("manual"), NONE("none"), SIGNED_CSAR("signed-csar");
- private final String type;
- OnboardingTypesEnum(final String type) {
- this.type = type;
- }
+ @Getter
+ private final String type;
public static OnboardingTypesEnum getOnboardingTypesEnum(final String type) {
if (StringUtils.isEmpty(type)) {
return null;
}
- return Arrays.stream(OnboardingTypesEnum.values()).filter(onboardingTypesEnum -> onboardingTypesEnum.toString().equalsIgnoreCase(type))
+ return Arrays.stream(OnboardingTypesEnum.values()).filter(onboardingTypesEnum -> onboardingTypesEnum.type.equalsIgnoreCase(type))
.findAny().orElse(null);
}
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ToscaServiceModelHealer.java b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ToscaServiceModelHealer.java
index b65629002a..34b436a4f4 100644
--- a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ToscaServiceModelHealer.java
+++ b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ToscaServiceModelHealer.java
@@ -46,7 +46,7 @@ public class ToscaServiceModelHealer implements Healer {
private static final String VALIDATION_FAILURE_MESSAGE =
"Product was updated. Please " + "update the uploaded Heat file according to these validation errors: \n";
- private ServiceModelDao<ToscaServiceModel, ServiceElement> serviceModelDao;
+ private ServiceModelDao<ToscaServiceModel> serviceModelDao;
private OrchestrationTemplateDao orchestrationTemplateDao;
public ToscaServiceModelHealer() {
@@ -54,7 +54,7 @@ public class ToscaServiceModelHealer implements Healer {
this.orchestrationTemplateDao = OrchestrationTemplateDaoFactory.getInstance().createInterface();
}
- public ToscaServiceModelHealer(ServiceModelDao<ToscaServiceModel, ServiceElement> serviceModelDao,
+ public ToscaServiceModelHealer(ServiceModelDao<ToscaServiceModel> serviceModelDao,
OrchestrationTemplateDao orchestrationTemplateDao) {
this.serviceModelDao = serviceModelDao;
this.orchestrationTemplateDao = orchestrationTemplateDao;
diff --git a/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/dao/EnrichedServiceModelDao.java b/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/dao/EnrichedServiceModelDao.java
index 033c4ee11c..685abb7109 100644
--- a/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/dao/EnrichedServiceModelDao.java
+++ b/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/dao/EnrichedServiceModelDao.java
@@ -22,10 +22,8 @@ package org.openecomp.core.model.dao;
import org.openecomp.core.model.types.ServiceArtifact;
import org.openecomp.sdc.versioning.dao.VersionableDao;
-public interface EnrichedServiceModelDao<M, E> extends VersionableDao, ServiceModelDao<M, E> {
+public interface EnrichedServiceModelDao<M> extends VersionableDao, ServiceModelDao<M> {
void storeExternalArtifact(ServiceArtifact serviceArtifact);
- //List<ServiceArtifact> getExternalArtifacts(String vspId, Version version);
- //List<String> getServiceModelContentNames();
-}
+}
diff --git a/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/dao/ServiceModelDao.java b/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/dao/ServiceModelDao.java
index 7908711023..d3c1b8b3e9 100644
--- a/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/dao/ServiceModelDao.java
+++ b/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/dao/ServiceModelDao.java
@@ -22,14 +22,19 @@ package org.openecomp.core.model.dao;
import org.openecomp.sdc.versioning.dao.VersionableDao;
import org.openecomp.sdc.versioning.dao.types.Version;
-public interface ServiceModelDao<M, E> extends VersionableDao {
+public interface ServiceModelDao<M> extends VersionableDao {
M getServiceModel(String vspId, Version version);
+ /**
+ * Store a service model.
+ *
+ * @param vspId the Vendor Software Product id
+ * @param version the Vendor Software Product version
+ * @param serviceModel the service model to store
+ */
void storeServiceModel(String vspId, Version version, M serviceModel);
- E getServiceModelInfo(String vspId, Version version, String name);
-
void deleteAll(String vspId, Version version);
/**
diff --git a/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/types/ToscaServiceModelProperty.java b/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/types/ToscaServiceModelProperty.java
new file mode 100644
index 0000000000..e344bf63ff
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-api/src/main/java/org/openecomp/core/model/types/ToscaServiceModelProperty.java
@@ -0,0 +1,35 @@
+/*
+ * -
+ * ============LICENSE_START=======================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.core.model.types;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum ToscaServiceModelProperty {
+ BASE("base"),
+ MODELS("models");
+
+ private final String name;
+}
+
diff --git a/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-impl/src/main/java/org/openecomp/sdc/model/impl/zusammen/EnrichedServiceModelDaoZusammenImpl.java b/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-impl/src/main/java/org/openecomp/sdc/model/impl/zusammen/EnrichedServiceModelDaoZusammenImpl.java
index 6f1492c163..0e736d945b 100644
--- a/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-impl/src/main/java/org/openecomp/sdc/model/impl/zusammen/EnrichedServiceModelDaoZusammenImpl.java
+++ b/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-impl/src/main/java/org/openecomp/sdc/model/impl/zusammen/EnrichedServiceModelDaoZusammenImpl.java
@@ -36,8 +36,7 @@ import org.openecomp.sdc.logging.api.Logger;
import org.openecomp.sdc.logging.api.LoggerFactory;
import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
-public class EnrichedServiceModelDaoZusammenImpl extends ServiceModelDaoZusammenImpl implements
- EnrichedServiceModelDao<ToscaServiceModel, ServiceElement> {
+public class EnrichedServiceModelDaoZusammenImpl extends ServiceModelDaoZusammenImpl implements EnrichedServiceModelDao<ToscaServiceModel> {
private static final Logger logger = LoggerFactory.getLogger(EnrichedServiceModelDaoZusammenImpl.class);
diff --git a/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-impl/src/main/java/org/openecomp/sdc/model/impl/zusammen/ServiceModelDaoZusammenImpl.java b/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-impl/src/main/java/org/openecomp/sdc/model/impl/zusammen/ServiceModelDaoZusammenImpl.java
index 27ef113204..5368ec97dd 100644
--- a/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-impl/src/main/java/org/openecomp/sdc/model/impl/zusammen/ServiceModelDaoZusammenImpl.java
+++ b/openecomp-be/lib/openecomp-sdc-model-lib/openecomp-sdc-model-impl/src/main/java/org/openecomp/sdc/model/impl/zusammen/ServiceModelDaoZusammenImpl.java
@@ -19,6 +19,8 @@
*/
package org.openecomp.sdc.model.impl.zusammen;
+import static org.openecomp.core.model.types.ToscaServiceModelProperty.BASE;
+import static org.openecomp.core.model.types.ToscaServiceModelProperty.MODELS;
import static org.openecomp.core.zusammen.api.ZusammenUtil.buildElement;
import static org.openecomp.core.zusammen.api.ZusammenUtil.buildStructuralElement;
@@ -32,6 +34,8 @@ import com.amdocs.zusammen.datatypes.item.ElementContext;
import com.amdocs.zusammen.datatypes.item.Info;
import java.io.ByteArrayInputStream;
import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -41,7 +45,6 @@ import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil;
import org.openecomp.core.model.dao.ServiceModelDao;
import org.openecomp.core.model.errors.RetrieveServiceTemplateFromDbErrorBuilder;
-import org.openecomp.core.model.types.ServiceElement;
import org.openecomp.core.utilities.file.FileContentHandler;
import org.openecomp.core.zusammen.api.ZusammenAdaptor;
import org.openecomp.core.zusammen.api.ZusammenUtil;
@@ -53,9 +56,8 @@ import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
import org.openecomp.sdc.versioning.dao.types.Version;
import org.openecomp.types.ElementPropertyName;
-public class ServiceModelDaoZusammenImpl implements ServiceModelDao<ToscaServiceModel, ServiceElement> {
+public class ServiceModelDaoZusammenImpl implements ServiceModelDao<ToscaServiceModel> {
- private static final String BASE_PROPERTY = "base";
private static final Logger logger = LoggerFactory.getLogger(ServiceModelDaoZusammenImpl.class);
protected ZusammenAdaptor zusammenAdaptor;
protected ElementType elementType;
@@ -70,57 +72,57 @@ public class ServiceModelDaoZusammenImpl implements ServiceModelDao<ToscaService
}
@Override
- public ToscaServiceModel getServiceModel(String vspId, Version version) {
- SessionContext context = ZusammenUtil.createSessionContext();
- ElementContext elementContext = new ElementContext(vspId, version.getId());
- Optional<ElementInfo> serviceModel = getServiceModelElementInfo(context, elementContext);
- if (!serviceModel.isPresent()) {
+ public ToscaServiceModel getServiceModel(final String vspId, final Version version) {
+ final var context = ZusammenUtil.createSessionContext();
+ final var elementContext = new ElementContext(vspId, version.getId());
+ final Optional<ElementInfo> serviceModelOpt = getServiceModelElementInfo(context, elementContext);
+ if (serviceModelOpt.isEmpty()) {
return null;
}
- Id serviceModelElementId = serviceModel.get().getId();
- Map<String, ServiceTemplate> serviceTemplates = getTemplates(context, elementContext, serviceModelElementId);
+ final var serviceModelElementInfo = serviceModelOpt.get();
+ final var serviceModelElementId = serviceModelElementInfo.getId();
+ final Map<String, ServiceTemplate> serviceTemplates = getTemplates(context, elementContext, serviceModelElementId);
if (serviceTemplates == null) {
return null;
}
- FileContentHandler artifacts = getArtifacts(context, elementContext, serviceModelElementId);
- String entryDefinitionServiceTemplate = serviceModel.get().getInfo().getProperty(BASE_PROPERTY);
- return new ToscaServiceModel(artifacts, serviceTemplates, entryDefinitionServiceTemplate);
+ final FileContentHandler artifacts = getArtifacts(context, elementContext, serviceModelElementId);
+ final String entryDefinitionServiceTemplate = serviceModelElementInfo.getInfo().getProperty(BASE.getName());
+ final List<String> modelList = serviceModelElementInfo.getInfo().getProperty(MODELS.getName());
+ return new ToscaServiceModel(modelList, artifacts, serviceTemplates, entryDefinitionServiceTemplate);
}
@Override
- public void storeServiceModel(String vspId, Version version, ToscaServiceModel serviceModel) {
- logger.info("Storing service model for VendorSoftwareProduct id -> {}", vspId);
- ZusammenElement templatesElement = buildStructuralElement(ElementType.Templates, Action.UPDATE);
+ public void storeServiceModel(final String vspId, final Version version, final ToscaServiceModel serviceModel) {
+ logger.info("Storing service model for VendorSoftwareProduct id '{}', version '{}', models '{}'", vspId, version,
+ String.join(",", serviceModel.getModelList() == null ? Collections.emptyList() : serviceModel.getModelList()));
+ final ZusammenElement templatesElement = buildStructuralElement(ElementType.Templates, Action.UPDATE);
serviceModel.getServiceTemplates().forEach((key, value) -> templatesElement
.addSubElement(buildServiceTemplateElement(key, value, serviceModel.getEntryDefinitionServiceTemplate(), Action.CREATE)));
- ZusammenElement artifactsElement = buildStructuralElement(ElementType.Artifacts, Action.UPDATE);
+ final ZusammenElement artifactsElement = buildStructuralElement(ElementType.Artifacts, Action.UPDATE);
if (Objects.nonNull(serviceModel.getArtifactFiles())) {
serviceModel.getArtifactFiles().getFiles()
.forEach((key, value) -> artifactsElement.addSubElement(buildArtifactElement(key, value, Action.CREATE)));
}
- ZusammenElement serviceModelElement = buildServiceModelElement(serviceModel.getEntryDefinitionServiceTemplate());
+ final ZusammenElement serviceModelElement = buildServiceModelElement(serviceModel.getEntryDefinitionServiceTemplate());
+ serviceModelElement.getInfo().addProperty(MODELS.getName(), serviceModel.getModelList());
serviceModelElement.addSubElement(templatesElement);
serviceModelElement.addSubElement(artifactsElement);
- ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.IGNORE);
+ final ZusammenElement vspModel = buildStructuralElement(ElementType.VspModel, Action.IGNORE);
+ vspModel.getInfo().addProperty(MODELS.getName(), serviceModel.getModelList());
vspModel.addSubElement(serviceModelElement);
- SessionContext context = ZusammenUtil.createSessionContext();
- ElementContext elementContext = new ElementContext(vspId, version.getId());
+ final var context = ZusammenUtil.createSessionContext();
+ final var elementContext = new ElementContext(vspId, version.getId());
zusammenAdaptor.saveElement(context, elementContext, vspModel, "Store service model");
logger.info("Finished storing {} for VendorSoftwareProduct id -> {}", elementType.name(), vspId);
}
@Override
- public ServiceElement getServiceModelInfo(String vspId, Version version, String name) {
- return null;
- }
-
- @Override
public void deleteAll(String vspId, Version version) {
logger.info("Started deleting content of Templates and Artifacts of {} of vsp {} version {}", elementType.name(), vspId, version.getId());
SessionContext context = ZusammenUtil.createSessionContext();
ElementContext elementContext = new ElementContext(vspId, version.getId());
Optional<ElementInfo> serviceModel = getServiceModelElementInfo(context, elementContext);
- if (!serviceModel.isPresent()) {
+ if (serviceModel.isEmpty()) {
logger.info("{} of vsp {} version {} does not exist - nothing to delete", elementType.name(), vspId, version.getId());
return;
}
@@ -163,7 +165,7 @@ public class ServiceModelDaoZusammenImpl implements ServiceModelDao<ToscaService
ElementContext elementContext, ZusammenElement serviceModelElement) {
Optional<ElementInfo> elementInfo = zusammenAdaptor
.getElementInfoByName(context, elementContext, serviceModelElementId, ElementType.Templates.name());
- if (!elementInfo.isPresent()) {
+ if (elementInfo.isEmpty()) {
return;
}
ZusammenElement templateElement = buildStructuralElement(ElementType.Templates, Action.UPDATE);
@@ -203,7 +205,7 @@ public class ServiceModelDaoZusammenImpl implements ServiceModelDao<ToscaService
private ZusammenElement buildServiceModelElement(String entryDefinitionServiceTemplate) {
ZusammenElement serviceModelElement = buildStructuralElement(elementType, Action.UPDATE);
- serviceModelElement.getInfo().addProperty(BASE_PROPERTY, entryDefinitionServiceTemplate);
+ serviceModelElement.getInfo().addProperty(BASE.getName(), entryDefinitionServiceTemplate);
return serviceModelElement;
}
@@ -213,7 +215,7 @@ public class ServiceModelDaoZusammenImpl implements ServiceModelDao<ToscaService
info.setName(name);
info.setDescription(serviceTemplate.getDescription());
info.addProperty(ElementPropertyName.elementType.name(), ElementType.ServiceTemplate.name());
- info.addProperty(BASE_PROPERTY, entryDefinitionServiceTemplate);
+ info.addProperty(BASE.getName(), entryDefinitionServiceTemplate);
String yaml = new ToscaExtensionYamlUtil().objectToYaml(serviceTemplate);
zusammenElement.setData(new ByteArrayInputStream(yaml.getBytes()));
zusammenElement.setInfo(info);
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/PackageInfo.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/PackageInfo.java
index 9c751a239d..ce918b9915 100644
--- 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/PackageInfo.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/PackageInfo.java
@@ -23,6 +23,7 @@ import com.datastax.driver.mapping.annotations.Column;
import com.datastax.driver.mapping.annotations.PartitionKey;
import com.datastax.driver.mapping.annotations.Table;
import java.nio.ByteBuffer;
+import java.util.Set;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
@@ -38,6 +39,8 @@ public class PackageInfo {
private String vspId;
@PartitionKey(value = 1)
private String version;
+ @Column(name = "version_id")
+ private String versionId;
@Column(name = "display_name")
private String displayName;
@Column(name = "vsp_name")
@@ -59,9 +62,12 @@ public class PackageInfo {
private ByteBuffer translatedFile;
@Column(name = "resource_type")
private String resourceType = ResourceTypeEnum.VF.name();
+ @Column(name = "models")
+ private Set<String> models;
- public PackageInfo(String packageId, Version version) {
+ public PackageInfo(final String packageId, final Version version) {
this.vspId = packageId;
this.version = version.getName();
+ this.versionId = version.getId();
}
}
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/impl/PackageInfoDaoImpl.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/impl/PackageInfoDaoImpl.java
index 591af3c8b9..f8b75496e5 100644
--- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/impl/PackageInfoDaoImpl.java
+++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/dao/impl/PackageInfoDaoImpl.java
@@ -76,8 +76,8 @@ public class PackageInfoDaoImpl extends CassandraBaseDao<PackageInfo> implements
@Accessor
interface PackageInfoAccessor {
- @Query("SELECT vsp_id,version,display_name,vsp_name,vsp_description,vendor_name,category"
- + " ,sub_category, vendor_release,package_checksum,package_type, resource_type FROM package_details")
+ @Query("SELECT vsp_id, version, version_id, display_name, vsp_name, vsp_description, vendor_name, category"
+ + " , sub_category, vendor_release, package_checksum, package_type, resource_type, models FROM package_details")
Result<PackageInfo> listInfo();
}
}
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/dao/ServiceModelDaoFactoryTest.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/dao/ServiceModelDaoFactoryTest.java
index 1118260a16..4929668753 100644
--- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/dao/ServiceModelDaoFactoryTest.java
+++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/dao/ServiceModelDaoFactoryTest.java
@@ -87,8 +87,8 @@ public class ServiceModelDaoFactoryTest {
zusammenAdaptor);
zusammenAdaptor.setItemVersion(itemVersionmock);
- ToscaServiceModel model = getToscaServiceModel();
- serviceModelDaoZusammen.storeServiceModel(vspId, version, model);
+ ToscaServiceModel toscaServiceModel = getToscaServiceModel();
+ serviceModelDaoZusammen.storeServiceModel(vspId, version, toscaServiceModel);
}
@Test
diff --git a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/AbstractToscaConverter.java b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/AbstractToscaConverter.java
index 1be85a5759..d19a05bfc8 100644
--- a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/AbstractToscaConverter.java
+++ b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/AbstractToscaConverter.java
@@ -113,7 +113,8 @@ public abstract class AbstractToscaConverter implements ToscaConverter {
toscaServiceModel.setEntryDefinitionServiceTemplate(entryDefinitionServiceTemplateName);
externalFilesHandler.addFile(TOSCA_META_ORIG_PATH_FILE_NAME, csarFiles.get(TOSCA_META_ORIG_PATH_FILE_NAME));
toscaServiceModel.setArtifactFiles(externalFilesHandler);
- if (MapUtils.isNotEmpty(globalSubstitutionServiceTemplate.getNode_types())) {
+ if (MapUtils.isNotEmpty(globalSubstitutionServiceTemplate.getNode_types())
+ || MapUtils.isNotEmpty(globalSubstitutionServiceTemplate.getData_types())) {
serviceTemplates.put(GLOBAL_SUBSTITUTION_SERVICE_FILE_NAME, globalSubstitutionServiceTemplate);
}
}
diff --git a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaModelConverter.java b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaModelConverter.java
new file mode 100644
index 0000000000..2656382972
--- /dev/null
+++ b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaModelConverter.java
@@ -0,0 +1,133 @@
+/*
+ * -
+ * ============LICENSE_START=======================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.core.impl;
+
+import static org.openecomp.core.converter.datatypes.Constants.GLOBAL_ST_NAME;
+import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.ENTRY_DEFINITIONS;
+import static org.openecomp.sdc.tosca.csar.ToscaMetadataFileInfo.TOSCA_META_PATH_FILE_NAME;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
+import org.openecomp.core.converter.ServiceTemplateReaderService;
+import org.openecomp.core.utilities.file.FileContentHandler;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+import org.openecomp.sdc.tosca.csar.OnboardingToscaMetadata;
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
+
+public class ToscaModelConverter extends AbstractToscaConverter {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ToscaModelConverter.class);
+
+ private final Set<String> handledDefinitionFilesList = new HashSet<>();
+ private ToscaServiceModel toscaServiceModel;
+ private Map<String, ServiceTemplate> serviceTemplateMap;
+ private FileContentHandler csarFileContentHandler;
+ private FileContentHandler artifactFileContentHandler;
+ private Map<String, byte[]> csarFileMap;
+ private GlobalSubstitutionServiceTemplate globalSubstitutionServiceTemplate;
+ private String mainDefinitionFilePath;
+
+ @Override
+ public ToscaServiceModel convert(final FileContentHandler fileContentHandler) throws IOException {
+ init(fileContentHandler);
+ handleMainServiceTemplate();
+ handleExternalArtifacts();
+ handleMetadataFile(csarFileMap);
+ updateToscaServiceModel();
+ return toscaServiceModel;
+ }
+
+ private void init(final FileContentHandler fileContentHandler) throws IOException {
+ csarFileContentHandler = fileContentHandler;
+ csarFileMap = new HashMap<>(fileContentHandler.getFiles());
+ toscaServiceModel = new ToscaServiceModel();
+ serviceTemplateMap = new HashMap<>();
+ artifactFileContentHandler = new FileContentHandler();
+ globalSubstitutionServiceTemplate = new GlobalSubstitutionServiceTemplate();
+ mainDefinitionFilePath = getMainServiceDefinitionFileName();
+ }
+
+ @Override
+ public void convertTopologyTemplate(final ServiceTemplate serviceTemplate, final ServiceTemplateReaderService readerService) {
+ new VnfTopologyTemplateConverter().convertTopologyTemplate(serviceTemplate, readerService);
+ }
+
+ private void handleMainServiceTemplate() {
+ if (mainDefinitionFilePath == null) {
+ return;
+ }
+ final String mainServiceTemplateFileName = FilenameUtils.getName(mainDefinitionFilePath);
+ handleServiceTemplate(mainServiceTemplateFileName, mainDefinitionFilePath, csarFileMap, serviceTemplateMap);
+ handleImportDefinitions(mainDefinitionFilePath);
+ }
+
+ private void handleExternalArtifacts() {
+ if (MapUtils.isEmpty(csarFileMap)) {
+ return;
+ }
+ csarFileMap.entrySet().stream()
+ .filter(fileEntry -> !handledDefinitionFilesList.contains(fileEntry.getKey()) && !isMetadataFile(fileEntry.getKey()))
+ .forEach(fileEntry -> {
+ if (isGlobalServiceTemplate(fileEntry.getKey())) {
+ handleServiceTemplate(GLOBAL_ST_NAME, fileEntry.getKey(), csarFileMap, serviceTemplateMap);
+ } else {
+ artifactFileContentHandler.addFile(getConcreteArtifactFileName(fileEntry.getKey()), fileEntry.getValue());
+ }
+ });
+ }
+
+ private void handleImportDefinitions(final String fileName) {
+ final var toscaDefinitionImportHandler = new ToscaDefinitionImportHandler(csarFileMap, fileName);
+ if (toscaDefinitionImportHandler.hasError()) {
+ throw new InvalidToscaDefinitionImportException(toscaDefinitionImportHandler.getErrors());
+ }
+ final Map<String, ServiceTemplateReaderService> handledImportDefinitionFileMap =
+ toscaDefinitionImportHandler.getHandledImportDefinitionFileMap();
+ handledDefinitionFilesList.addAll(handledImportDefinitionFileMap.keySet());
+ handledDefinitionFilesList.forEach(file -> handleDefinitionTemplate(file, csarFileMap, globalSubstitutionServiceTemplate));
+ }
+
+ private String getMainServiceDefinitionFileName() throws IOException {
+ try {
+ var toscaMetadata = OnboardingToscaMetadata
+ .parseToscaMetadataFile(csarFileContentHandler.getFileContentAsStream(TOSCA_META_PATH_FILE_NAME));
+ return toscaMetadata.getMetaEntries().get(ENTRY_DEFINITIONS.getName());
+ } catch (final IOException e) {
+ LOGGER.error(e.getMessage(), e);
+ throw new IOException(e.getMessage());
+ }
+ }
+
+ private void updateToscaServiceModel() {
+ final String mainDefinitionSimpleName = FilenameUtils.getName(mainDefinitionFilePath);
+ updateToscaServiceModel(toscaServiceModel, serviceTemplateMap, artifactFileContentHandler, globalSubstitutionServiceTemplate, csarFileMap,
+ mainDefinitionSimpleName);
+ }
+
+}
diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/datatypes/ToscaServiceModel.java b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/datatypes/ToscaServiceModel.java
index 90e1d2e863..557056a588 100644
--- a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/datatypes/ToscaServiceModel.java
+++ b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/datatypes/ToscaServiceModel.java
@@ -21,6 +21,7 @@ package org.openecomp.sdc.tosca.datatypes;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Optional;
import lombok.AccessLevel;
@@ -43,11 +44,20 @@ import org.openecomp.sdc.tosca.services.DataModelUtil;
@Setter
public class ToscaServiceModel implements AsdcModel {
+ private List<String> modelList;
private FileContentHandler artifactFiles;
@Getter(AccessLevel.NONE)
private Map<String, ServiceTemplate> serviceTemplates;
private String entryDefinitionServiceTemplate;
+
+ public ToscaServiceModel(final FileContentHandler artifactFiles, final Map<String, ServiceTemplate> serviceTemplates,
+ final String entryDefinitionServiceTemplate) {
+ this.artifactFiles = artifactFiles;
+ this.serviceTemplates = serviceTemplates;
+ this.entryDefinitionServiceTemplate = entryDefinitionServiceTemplate;
+ }
+
/**
* Gets cloned service model.
*
@@ -55,7 +65,7 @@ public class ToscaServiceModel implements AsdcModel {
* @return the cloned service model
*/
public static ToscaServiceModel getClonedServiceModel(ToscaServiceModel toscaServiceModel) {
- return ToscaServiceModel.class.cast(DataModelUtil.getClonedObject(toscaServiceModel));
+ return (ToscaServiceModel) DataModelUtil.getClonedObject(toscaServiceModel);
}
/**