diff options
author | Leigh, Phillip (pl876u) <phillip.leigh@amdocs.com> | 2019-03-12 15:49:49 -0400 |
---|---|---|
committer | Leigh, Phillip (pl876u) <phillip.leigh@amdocs.com> | 2019-03-13 16:01:07 -0400 |
commit | a6e5540e815fcb1897e9e2dd4dcbd7ff0cf3b067 (patch) | |
tree | 09bf7e6a3f49c9dd2555502ed5e4c3aa39e9c5e4 /src/main/java/org | |
parent | d7b7398f1527be74dd279c66395c8518ac8d4e22 (diff) |
SdcCtxBulder:set UUID svcInstanceId & versioning
Also fixed the versioning support
Issue-ID: LOG-712
Issue-ID: LOG-658
Change-Id: Iaf3327d2c891671bae45f3f2c5a7fc5b6e9cf180
Signed-off-by: Leigh, Phillip (pl876u) <phillip.leigh@amdocs.com>
Diffstat (limited to 'src/main/java/org')
4 files changed, 443 insertions, 444 deletions
diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaCsarArtifactHandler.java b/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaCsarArtifactHandler.java index 9fac21e..dceb4ef 100644 --- a/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaCsarArtifactHandler.java +++ b/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaCsarArtifactHandler.java @@ -1,186 +1,185 @@ -/*
- * ============LICENSE_START===================================================
- * Copyright (c) 2018 Amdocs
- * ============================================================================
- * 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.onap.pomba.contextbuilder.sdc.model.handlers;
-
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.StandardOpenOption;
-import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.Map;
-import org.onap.pomba.contextbuilder.sdc.ToscaBuilderConfig;
-import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException;
-import org.onap.pomba.contextbuilder.sdc.model.ArtifactInfo;
-import org.onap.pomba.contextbuilder.sdc.model.SDCContextResponse;
-import org.onap.sdc.api.results.IDistributionClientDownloadResult;
-import org.onap.sdc.http.SdcConnectorClient;
-import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
-import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
-import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
-import org.onap.sdc.utils.DistributionActionResultEnum;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-@Component("ToscaCsarArtifactHandler")
-public class ToscaCsarArtifactHandler {
-
- private static final String DEFAULT_CSAR_FILE_EXTENSION = ".zip";
-
- private static Logger log = LoggerFactory.getLogger(ToscaCsarArtifactHandler.class);
-
- private Map<String, ISdcCsarHelper> sdcCsarHelpers = new HashMap<>();
-
- @Autowired
- private SdcConnectorClient client;
- @Autowired
- private ToscaBuilderConfig config;
-
-
- /**
- * Retrieves a subset of the TOSCA model for the given version ID.
- * If the model is not cached, a request to download the CSAR file is sent to SDC.
- * @param modelVersionId
- * @return Response containing a subset of the model data
- * @throws ToscaCsarException
- */
- public SDCContextResponse getToscaModel(String modelVersionId) throws ToscaCsarException {
-
- ISdcCsarHelper helper = sdcCsarHelpers.get(modelVersionId);
- if(helper == null) {
- log.debug("No CSAR file cached for " + modelVersionId);
- helper = retrieveToscaCsarArtifact(modelVersionId);
- if(helper != null) {
- sdcCsarHelpers.put(modelVersionId, helper);
- }
- }
-
- SDCContextResponse response = new SDCContextResponse();
-
- if(helper == null) {
- log.debug("CSAR artifact not found for model-version-id: " + modelVersionId);
- response.setModelData("");
- return response;
- }
-
- Gson gson = new GsonBuilder().create();
- String modelData = gson.toJson(ToscaModelConverter.convert(helper));
- response.setModelData(modelData);
- return response;
- }
-
-
- /**
- * Retrieves the CSAR file from SDC for the given model version ID
- * @param modelVersionId
- * @return Returns NULL if CSAR file couldn't be retrieved
- * @throws ToscaCsarException
- */
- private ISdcCsarHelper retrieveToscaCsarArtifact(String modelVersionId) throws ToscaCsarException {
-
- if (config.getTestToscaCsarFile() != null && !config.getTestToscaCsarFile().isEmpty()) {
- return getSdcToscaContext(config.getTestToscaCsarFile());
- }
-
- String url = generateURL(modelVersionId);
- log.debug("Downloading CSAR using URL suffix: " + url);
-
- ArtifactInfo artifact = new ArtifactInfo();
- artifact.setArtifactType(config.getArtifactType());
- artifact.setArtifactURL(url);
- artifact.setArtifactChecksum("value_not_used_by_sdc_distribution_client_lib");
-
- String csarFile = generateTemporaryFile(modelVersionId);
- try (OutputStream outputStream = Files.newOutputStream(Paths.get(csarFile), StandardOpenOption.CREATE);) {
- IDistributionClientDownloadResult downloadResult = client.dowloadArtifact(artifact);
- if (downloadResult.getDistributionActionResult() == DistributionActionResultEnum.ARTIFACT_NOT_FOUND) {
- log.debug("Failed to retrieve CSAR artifact from SDC: " + downloadResult.getDistributionMessageResult());
- return null;
- } else if (downloadResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
- throw new ToscaCsarException("Failed to retrieve CSAR artifact from SDC: " + downloadResult.getDistributionMessageResult());
- }
-
- byte[] payload = downloadResult.getArtifactPayload();
- if ((payload == null) || (payload.length == 0)) {
- log.debug("Retrieved CSAR payload is empty");
- return null;
- }
- outputStream.write(payload);
- } catch (IOException e){
- throw new ToscaCsarException("Failed to write temporary CSAR file '" + csarFile + "'", e);
- }
-
- ISdcCsarHelper helper = getSdcToscaContext(csarFile);
- try {
- Files.delete(Paths.get(csarFile));
- } catch (IOException e) {
- log.error("Failed to delete temporary CSAR file '" + csarFile + "': " + e.getMessage());
- }
- return helper;
- }
-
-
- private String generateURL(String uuid) {
- return MessageFormat.format(config.getUrlTemplate(), uuid);
- }
-
-
- /**
- * Creates a temporary file for downloaded CSAR file
- * @param uuid
- * @return
- * @throws ToscaCsarException
- */
- private String generateTemporaryFile(String uuid) throws ToscaCsarException {
- try {
- String fullPrefix = config.getCsarFilePrefix() + uuid + "-";
- String suffix = (config.getCsarFileSuffix() == null ? DEFAULT_CSAR_FILE_EXTENSION : config.getCsarFileSuffix());
- Path downloadFile = Files.createTempFile(fullPrefix, suffix);
- log.debug("Temporary CSAR file name: " + downloadFile.toString());
- return downloadFile.toString();
- } catch (IOException e) {
- throw new ToscaCsarException("Failed to create temporary CSAR file: " + e.getMessage());
- }
- }
-
-
- /**
- * Parses a CSAR file
- * @param csarFile
- * @return
- * @throws ToscaCsarException
- */
- private ISdcCsarHelper getSdcToscaContext(String csarFile) throws ToscaCsarException {
-
- log.info("Loading and parsing SDC csar file ...");
- try {
- SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance();
- return factory.getSdcCsarHelper(csarFile);
- } catch (SdcToscaParserException e) {
- throw new ToscaCsarException("Failed to parse CSAR file", e);
- }
- }
-
-}
+/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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.onap.pomba.contextbuilder.sdc.model.handlers; + + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.Map; +import org.onap.pomba.contextbuilder.sdc.ToscaBuilderConfig; +import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException; +import org.onap.pomba.contextbuilder.sdc.model.ArtifactInfo; +import org.onap.pomba.contextbuilder.sdc.model.SDCContextResponse; +import org.onap.sdc.api.results.IDistributionClientDownloadResult; +import org.onap.sdc.http.SdcConnectorClient; +import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; +import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException; +import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory; +import org.onap.sdc.utils.DistributionActionResultEnum; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component("ToscaCsarArtifactHandler") +public class ToscaCsarArtifactHandler { + + private static final String DEFAULT_CSAR_FILE_EXTENSION = ".zip"; + + private static Logger log = LoggerFactory.getLogger(ToscaCsarArtifactHandler.class); + + private Map<String, ISdcCsarHelper> sdcCsarHelpers = new HashMap<>(); + + @Autowired + private SdcConnectorClient client; + @Autowired + private ToscaBuilderConfig config; + + + /** + * Retrieves a subset of the TOSCA model for the given version ID. + * If the model is not cached, a request to download the CSAR file is sent to SDC. + * @param modelVersionId + * @return Response containing a subset of the model data + * @throws ToscaCsarException + */ + public SDCContextResponse getToscaModel(String modelVersionId, String serviceInstanceId) throws ToscaCsarException { + + ISdcCsarHelper helper = sdcCsarHelpers.get(modelVersionId); + if(helper == null) { + log.debug("No CSAR file cached for " + modelVersionId); + helper = retrieveToscaCsarArtifact(modelVersionId); + if(helper != null) { + sdcCsarHelpers.put(modelVersionId, helper); + } + } + + SDCContextResponse response = new SDCContextResponse(); + + if(helper == null) { + log.debug("CSAR artifact not found for model-version-id: " + modelVersionId); + response.setModelData(""); + return response; + } + + Gson gson = new GsonBuilder().create(); + String modelData = gson.toJson(ToscaModelConverter.convert(helper, modelVersionId, serviceInstanceId)); + response.setModelData(modelData); + return response; + } + + + /** + * Retrieves the CSAR file from SDC for the given model version ID + * @param modelVersionId + * @return Returns NULL if CSAR file couldn't be retrieved + * @throws ToscaCsarException + */ + private ISdcCsarHelper retrieveToscaCsarArtifact(String modelVersionId) throws ToscaCsarException { + + if (config.getTestToscaCsarFile() != null && !config.getTestToscaCsarFile().isEmpty()) { + return getSdcToscaContext(config.getTestToscaCsarFile()); + } + String url = generateURL(modelVersionId); + log.debug("Downloading CSAR using URL suffix: " + url); + + ArtifactInfo artifact = new ArtifactInfo(); + artifact.setArtifactType(config.getArtifactType()); + artifact.setArtifactURL(url); + artifact.setArtifactChecksum("value_not_used_by_sdc_distribution_client_lib"); + + String csarFile = generateTemporaryFile(modelVersionId); + try (OutputStream outputStream = Files.newOutputStream(Paths.get(csarFile), StandardOpenOption.CREATE);) { + IDistributionClientDownloadResult downloadResult = client.dowloadArtifact(artifact); + if (downloadResult.getDistributionActionResult() == DistributionActionResultEnum.ARTIFACT_NOT_FOUND) { + log.debug("Failed to retrieve CSAR artifact from SDC: " + downloadResult.getDistributionMessageResult()); + return null; + } else if (downloadResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { + throw new ToscaCsarException("Failed to retrieve CSAR artifact from SDC: " + downloadResult.getDistributionMessageResult()); + } + + byte[] payload = downloadResult.getArtifactPayload(); + if ((payload == null) || (payload.length == 0)) { + log.debug("Retrieved CSAR payload is empty"); + return null; + } + outputStream.write(payload); + } catch (IOException e){ + throw new ToscaCsarException("Failed to write temporary CSAR file '" + csarFile + "'", e); + } + + ISdcCsarHelper helper = getSdcToscaContext(csarFile); + try { + Files.delete(Paths.get(csarFile)); + } catch (IOException e) { + log.error("Failed to delete temporary CSAR file '" + csarFile + "': " + e.getMessage()); + } + return helper; + } + + + private String generateURL(String modelVersionId) { + return MessageFormat.format(config.getUrlTemplate(), modelVersionId); + } + + + /** + * Creates a temporary file for downloaded CSAR file + * @param modelVersionId + * @return + * @throws ToscaCsarException + */ + private String generateTemporaryFile(String modelVersionId) throws ToscaCsarException { + try { + String fullPrefix = config.getCsarFilePrefix() + modelVersionId + "-"; + String suffix = (config.getCsarFileSuffix() == null ? DEFAULT_CSAR_FILE_EXTENSION : config.getCsarFileSuffix()); + Path downloadFile = Files.createTempFile(fullPrefix, suffix); + log.debug("Temporary CSAR file name: " + downloadFile.toString()); + return downloadFile.toString(); + } catch (IOException e) { + throw new ToscaCsarException("Failed to create temporary CSAR file: " + e.getMessage()); + } + } + + + /** + * Parses a CSAR file + * @param csarFile + * @return + * @throws ToscaCsarException + */ + private ISdcCsarHelper getSdcToscaContext(String csarFile) throws ToscaCsarException { + + log.info("Loading and parsing SDC csar file ..."); + try { + SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); + return factory.getSdcCsarHelper(csarFile); + } catch (SdcToscaParserException e) { + throw new ToscaCsarException("Failed to parse CSAR file", e); + } + } + +} diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaModelConverter.java b/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaModelConverter.java index b01e75b..5c565a3 100644 --- a/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaModelConverter.java +++ b/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaModelConverter.java @@ -1,139 +1,139 @@ -/*
- * ============LICENSE_START===================================================
- * Copyright (c) 2018 Amdocs
- * ============================================================================
- * 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.onap.pomba.contextbuilder.sdc.model.handlers;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.onap.pomba.common.datatypes.ModelContext;
-import org.onap.pomba.common.datatypes.Service;
-import org.onap.pomba.common.datatypes.VFModule;
-import org.onap.pomba.common.datatypes.VNF;
-import org.onap.pomba.common.datatypes.VNFC;
-import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException;
-import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
-import org.onap.sdc.tosca.parser.impl.SdcPropertyNames;
-import org.onap.sdc.toscaparser.api.Group;
-import org.onap.sdc.toscaparser.api.NodeTemplate;
-import org.onap.sdc.toscaparser.api.elements.Metadata;
-
-public class ToscaModelConverter {
-
- private ToscaModelConverter() {
-
- }
-
- /**
- * Conversion from SDC model to the common model
- * @param helper
- * @return
- * @throws ToscaCsarException
- */
- public static ModelContext convert(ISdcCsarHelper helper) throws ToscaCsarException {
- ModelContext context = new ModelContext();
- context.setService(generateService(helper.getServiceMetadata()));
- context.setVnfs(generateVnfList(helper));
- return context;
- }
-
- /**
- * Instantiates a service based on the SDC Service metadata
- * @param serviceMetadata
- * @return
- * @throws ToscaCsarException
- */
- private static Service generateService(Metadata serviceMetadata) throws ToscaCsarException {
- Service service = new Service();
- if (serviceMetadata != null) {
- service.setName(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
- service.setModelInvariantUUID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
- service.setUuid(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
- }
- return service;
- }
-
- /**
- * Generates a list of VFs from the SDC VF-Resources
- * @param helper
- * @return
- * @throws ToscaCsarException
- */
- private static List<VNF> generateVnfList(ISdcCsarHelper helper) throws ToscaCsarException {
-
- List<VNF> vnfList = new ArrayList<>();
- List<NodeTemplate> vfNodeTemplateList = helper.getServiceVfList();
- for (NodeTemplate vfNodeTemplate : vfNodeTemplateList) {
- VNF vnf = new VNF();
- vnf.setName(vfNodeTemplate.getName());
- vnf.setType(vfNodeTemplate.getType());
- vnf.setModelInvariantUUID(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
- vnf.setUuid(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
-
- String customizationUUID = vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID);
- vnf.setVnfcs(generateVnfcList(helper.getVfcListByVf(customizationUUID)));
- vnf.setVfModules(generateVfModuleList(helper.getVfModulesByVf(customizationUUID)));
-
- vnfList.add(vnf);
- }
- return vnfList;
- }
-
- /**
- * Generates a list of VFNCs from the SDC VF-Resources's VNFCs
- * @param vfcNodeTemplateList
- * @return
- * @throws ToscaCsarException
- */
- private static List<VNFC> generateVnfcList(List<NodeTemplate> vfcNodeTemplateList) throws ToscaCsarException {
- List<VNFC> vnfcList = new ArrayList<>();
- for (NodeTemplate vfcNodeTemplate : vfcNodeTemplateList) {
- VNFC vnfc = new VNFC();
- vnfc.setName(vfcNodeTemplate.getName());
- vnfc.setModelInvariantUUID(vfcNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
- vnfc.setUuid(vfcNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
- vnfcList.add(vnfc);
- }
- return vnfcList;
- }
-
- /**
- * Generates a list of VFModules from the SDC VF-Resource's VF-Modules
- * @param vfModuleGroupList
- * @return
- * @throws ToscaCsarException
- */
- private static List<VFModule> generateVfModuleList(List<Group> vfModuleGroupList) throws ToscaCsarException {
- List<VFModule> vfModuleList = new ArrayList<>();
- for (Group moduleGroup : vfModuleGroupList) {
- VFModule vfModule = new VFModule();
- vfModule.setModelInvariantUUID(moduleGroup.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID));
- vfModule.setUuid(moduleGroup.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID));
-
- Object minInstances = moduleGroup.getPropertyValue(SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES);
- if (minInstances != null) {
- vfModule.setMinInstances((Integer)minInstances);
- }
- Object maxInstances = moduleGroup.getPropertyValue(SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES);
- if (maxInstances != null) {
- vfModule.setMaxInstances((Integer)maxInstances);
- }
-
- vfModuleList.add(vfModule);
- }
- return vfModuleList;
- }
-}
+/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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.onap.pomba.contextbuilder.sdc.model.handlers; + +import java.util.ArrayList; +import java.util.List; +import org.onap.pomba.common.datatypes.ModelContext; +import org.onap.pomba.common.datatypes.Service; +import org.onap.pomba.common.datatypes.VFModule; +import org.onap.pomba.common.datatypes.VNF; +import org.onap.pomba.common.datatypes.VNFC; +import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException; +import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; +import org.onap.sdc.tosca.parser.impl.SdcPropertyNames; +import org.onap.sdc.toscaparser.api.Group; +import org.onap.sdc.toscaparser.api.NodeTemplate; +import org.onap.sdc.toscaparser.api.elements.Metadata; + +public class ToscaModelConverter { + + private ToscaModelConverter() { + + } + + /** + * Conversion from SDC model to the common model + * @param helper + * @return + * @throws ToscaCsarException + */ + public static ModelContext convert(ISdcCsarHelper helper,String modelVersionId, String serviceInstanceId) throws ToscaCsarException { + ModelContext context = new ModelContext(); + context.setService(generateService(helper.getServiceMetadata(), serviceInstanceId)); + context.setVnfs(generateVnfList(helper)); + return context; + } + + /** + * Instantiates a service based on the SDC Service metadata + * @param serviceMetadata + * @return + * @throws ToscaCsarException + */ + private static Service generateService(Metadata serviceMetadata, String serviceInstanceId) throws ToscaCsarException { + Service service = new Service(); + if (serviceMetadata != null) { + service.setModelInvariantUUID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)); + service.setModelVersionID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID)); //assign sdc UUID to ModelVersionID based on common model mapping + service.setUuid(serviceInstanceId); + } + return service; + } + + /** + * Generates a list of VFs from the SDC VF-Resources + * @param helper + * @return + * @throws ToscaCsarException + */ + private static List<VNF> generateVnfList(ISdcCsarHelper helper) throws ToscaCsarException { + + List<VNF> vnfList = new ArrayList<>(); + List<NodeTemplate> vfNodeTemplateList = helper.getServiceVfList(); + for (NodeTemplate vfNodeTemplate : vfNodeTemplateList) { + VNF vnf = new VNF(); + vnf.setType(vfNodeTemplate.getType()); + vnf.setModelInvariantUUID(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)); + vnf.setModelVersionID(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)); //assign sdc UUID to ModelVersionID based on common model mapping + + String customizationUUID = vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID); + vnf.setVnfcs(generateVnfcList(helper.getVfcListByVf(customizationUUID))); + vnf.setVfModules(generateVfModuleList(helper.getVfModulesByVf(customizationUUID))); + + vnfList.add(vnf); + } + return vnfList; + } + + /** + * Generates a list of VFNCs from the SDC VF-Resources's VNFCs + * @param vfcNodeTemplateList + * @return + * @throws ToscaCsarException + */ + private static List<VNFC> generateVnfcList(List<NodeTemplate> vfcNodeTemplateList) throws ToscaCsarException { + List<VNFC> vnfcList = new ArrayList<>(); + for (NodeTemplate vfcNodeTemplate : vfcNodeTemplateList) { + VNFC vnfc = new VNFC(); + vnfc.setModelInvariantUUID(vfcNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)); + vnfc.setModelVersionID(vfcNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)); //assign sdc UUID to ModelVersionID based on common model mapping + vnfcList.add(vnfc); + } + return vnfcList; + } + + /** + * Generates a list of VFModules from the SDC VF-Resource's VF-Modules + * @param vfModuleGroupList + * @return + * @throws ToscaCsarException + */ + private static List<VFModule> generateVfModuleList(List<Group> vfModuleGroupList) throws ToscaCsarException { + List<VFModule> vfModuleList = new ArrayList<>(); + for (Group moduleGroup : vfModuleGroupList) { + VFModule vfModule = new VFModule(); + vfModule.setModelInvariantUUID(moduleGroup.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID)); + vfModule.setModelVersionID(moduleGroup.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID)); + vfModule.setModelCustomizationUUID(moduleGroup.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULECUSTOMIZATIONUUID)); + + + Object minInstances = moduleGroup.getPropertyValue(SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES); + if (minInstances != null) { + vfModule.setMinInstances((Integer)minInstances); + } + Object maxInstances = moduleGroup.getPropertyValue(SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES); + if (maxInstances != null) { + vfModule.setMaxInstances((Integer)maxInstances); + } + + vfModuleList.add(vfModule); + } + return vfModuleList; + } +} diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdc/service/SpringServiceImpl.java b/src/main/java/org/onap/pomba/contextbuilder/sdc/service/SpringServiceImpl.java index 1ef7fd0..1315fc2 100644 --- a/src/main/java/org/onap/pomba/contextbuilder/sdc/service/SpringServiceImpl.java +++ b/src/main/java/org/onap/pomba/contextbuilder/sdc/service/SpringServiceImpl.java @@ -1,61 +1,61 @@ -/*
- * ============LICENSE_START===================================================
- * Copyright (c) 2018 Amdocs
- * ============================================================================
- * 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.onap.pomba.contextbuilder.sdc.service;
-
-import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException;
-import org.onap.pomba.contextbuilder.sdc.logging.LoggingUtil;
-import org.onap.pomba.contextbuilder.sdc.model.SDCContextRequest;
-import org.onap.pomba.contextbuilder.sdc.model.SDCContextResponse;
-import org.onap.pomba.contextbuilder.sdc.model.handlers.ToscaCsarArtifactHandler;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class SpringServiceImpl implements SpringService {
-
- private static Logger log = LoggerFactory.getLogger(SpringService.class);
-
-
- @Autowired
- protected ToscaCsarArtifactHandler toscaCsarArtifactHandler;
-
- @Autowired
- private String httpBasicAuthorization;
-
- @Override
- public SDCContextResponse getModelData(SDCContextRequest ctxRequest) throws ToscaCsarException {
-
- LoggingUtil.initMdc(ctxRequest.getTransactionId(), ctxRequest.getFromAppId(), ctxRequest.getRemoteAddr());
- SDCContextResponse sdcContextResponse = null;
- try {
- ctxRequest.validate(httpBasicAuthorization);
- sdcContextResponse = toscaCsarArtifactHandler.getToscaModel(ctxRequest.getModelVersionId());
- } catch (ToscaCsarException e) {
- log.error(e.getStatus().getStatusCode() + " " + e.getStatus()+ ", Reason: " + e.getMessage());
- sdcContextResponse = new SDCContextResponse(e.getStatus(), e.getMessage());
- } finally {
- LoggingUtil.closeMdc();
- }
- return sdcContextResponse;
-
- }
-
-
+/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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.onap.pomba.contextbuilder.sdc.service; + +import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException; +import org.onap.pomba.contextbuilder.sdc.logging.LoggingUtil; +import org.onap.pomba.contextbuilder.sdc.model.SDCContextRequest; +import org.onap.pomba.contextbuilder.sdc.model.SDCContextResponse; +import org.onap.pomba.contextbuilder.sdc.model.handlers.ToscaCsarArtifactHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class SpringServiceImpl implements SpringService { + + private static Logger log = LoggerFactory.getLogger(SpringService.class); + + + @Autowired + protected ToscaCsarArtifactHandler toscaCsarArtifactHandler; + + @Autowired + private String httpBasicAuthorization; + + @Override + public SDCContextResponse getModelData(SDCContextRequest ctxRequest) throws ToscaCsarException { + + LoggingUtil.initMdc(ctxRequest.getTransactionId(), ctxRequest.getFromAppId(), ctxRequest.getRemoteAddr()); + SDCContextResponse sdcContextResponse = null; + try { + ctxRequest.validate(httpBasicAuthorization); + sdcContextResponse = toscaCsarArtifactHandler.getToscaModel(ctxRequest.getModelVersionId(), ctxRequest.getServiceInstanceId()); + } catch (ToscaCsarException e) { + log.error(e.getStatus().getStatusCode() + " " + e.getStatus()+ ", Reason: " + e.getMessage()); + sdcContextResponse = new SDCContextResponse(e.getStatus(), e.getMessage()); + } finally { + LoggingUtil.closeMdc(); + } + return sdcContextResponse; + + } + + }
\ No newline at end of file diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdc/service/rs/RestService.java b/src/main/java/org/onap/pomba/contextbuilder/sdc/service/rs/RestService.java index ea0ae0d..91a3569 100644 --- a/src/main/java/org/onap/pomba/contextbuilder/sdc/service/rs/RestService.java +++ b/src/main/java/org/onap/pomba/contextbuilder/sdc/service/rs/RestService.java @@ -1,60 +1,60 @@ -/*
- * ============LICENSE_START===================================================
- * Copyright (c) 2018 Amdocs
- * ============================================================================
- * 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.onap.pomba.contextbuilder.sdc.service.rs;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiResponse;
-import io.swagger.annotations.ApiResponses;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException;
-
-
-@Api
-@Path("/service")
-@Produces({MediaType.APPLICATION_JSON})
-public interface RestService {
-
-
- @GET
- @Path("/context")
- @Produces({ MediaType.APPLICATION_JSON })
- @ApiOperation(
- value = "Retrieve SDC CSAR file for a give UUID",
- notes = "This method returns SDC CSAR encoded value. ",
- response = Response.class)
- @ApiResponses(value = {
- @ApiResponse(code = 404, message = "Service not available"),
- @ApiResponse(code = 400, message = "Bad request"),
- @ApiResponse(code = 401, message = "Unauthorized"),
- @ApiResponse(code = 500, message = "Unexpected Runtime error") })
- public Response getContext(
- @HeaderParam("Authorization") String authorization,
- @HeaderParam("X-FromAppId") String xFromAppId,
- @HeaderParam("X-TransactionId") String xTransactionId,
- @QueryParam("serviceInstanceId") String serviceInstanceId,
- @QueryParam("modelVersionId") String modelVersionId,
- @QueryParam("modelInvariantId") String modelInvariantId
- ) throws ToscaCsarException;
+/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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.onap.pomba.contextbuilder.sdc.service.rs; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException; + + +@Api +@Path("{version: v2}/service") +@Produces({MediaType.APPLICATION_JSON}) +public interface RestService { + + + @GET + @Path("/context") + @Produces({ MediaType.APPLICATION_JSON }) + @ApiOperation( + value = "Retrieve SDC CSAR file for a give UUID", + notes = "This method returns SDC CSAR encoded value. ", + response = Response.class) + @ApiResponses(value = { + @ApiResponse(code = 404, message = "Service not available"), + @ApiResponse(code = 400, message = "Bad request"), + @ApiResponse(code = 401, message = "Unauthorized"), + @ApiResponse(code = 500, message = "Unexpected Runtime error") }) + public Response getContext( + @HeaderParam("Authorization") String authorization, + @HeaderParam("X-FromAppId") String xFromAppId, + @HeaderParam("X-TransactionId") String xTransactionId, + @QueryParam("serviceInstanceId") String serviceInstanceId, + @QueryParam("modelVersionId") String modelVersionId, + @QueryParam("modelInvariantId") String modelInvariantId + ) throws ToscaCsarException; }
\ No newline at end of file |