2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.model.impl;
23 import org.openecomp.core.model.dao.ServiceArtifactDaoInter;
24 import org.openecomp.core.model.dao.ServiceTemplateDaoInter;
25 import org.openecomp.core.model.types.ServiceArtifact;
26 import org.openecomp.core.model.types.ServiceElement;
27 import org.openecomp.core.model.types.ServiceTemplate;
28 import org.openecomp.core.utilities.file.FileContentHandler;
29 import org.openecomp.core.utilities.file.FileUtils;
30 import org.openecomp.sdc.logging.api.Logger;
31 import org.openecomp.sdc.logging.api.LoggerFactory;
32 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
33 import org.openecomp.sdc.tosca.datatypes.model.Import;
34 import org.openecomp.sdc.tosca.datatypes.model.Old1610ServiceTemplate;
35 import org.openecomp.sdc.tosca.services.ToscaExtensionYamlUtil;
36 import org.openecomp.sdc.versioning.dao.VersionableDao;
37 import org.openecomp.sdc.versioning.dao.types.Version;
39 import java.io.InputStream;
40 import java.util.ArrayList;
41 import java.util.Collection;
42 import java.util.HashMap;
43 import java.util.List;
45 import java.util.stream.Collectors;
47 public class AbstractServiceModelDao implements VersionableDao {
49 protected ServiceTemplateDaoInter templateDao;
50 protected ServiceArtifactDaoInter artifactDao;
52 private final Logger log = (Logger) LoggerFactory.getLogger(this.getClass().getName());
55 public void registerVersioning(String versionableEntityType) {
56 templateDao.registerVersioning(versionableEntityType);
57 artifactDao.registerVersioning(versionableEntityType);
63 * @param vspId the vsp id
64 * @param version the version
65 * @return the service model
67 public ToscaServiceModel getServiceModel(String vspId, Version version) {
68 if (vspId == null || version == null) {
69 throw new RuntimeException("missing service model key");
72 FileContentHandler artifactFiles = getArtifacts(vspId, version);
74 Map<String, org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate> serviceTemplates =
77 String entryDefinitionServiceTemplate = getServiceBase(vspId, version);
78 return new ToscaServiceModel(artifactFiles, serviceTemplates, entryDefinitionServiceTemplate);
81 public void storeExternalArtifact(ServiceArtifact serviceArtifact) {
82 artifactDao.create(serviceArtifact);
87 * Store service model.
89 * @param vspId the vsp id
90 * @param version the version
91 * @param toscaServiceModel the tosca service model
93 public void storeServiceModel(String vspId, Version version,
94 ToscaServiceModel toscaServiceModel) {
95 ServiceArtifact entityArt;
97 for (String fileName : toscaServiceModel.getArtifactFiles().getFileList()) {
98 entityArt = new ServiceArtifact();
99 entityArt.setContentData(
100 FileUtils.toByteArray(toscaServiceModel.getArtifactFiles().getFileContent(fileName)));
101 entityArt.setVspId(vspId);
102 entityArt.setVersion(version);
103 entityArt.setName(fileName);
105 artifactDao.create(entityArt);
108 ServiceTemplate entityTmp;
110 for (Map.Entry<String, org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate>
111 entryTemplate : toscaServiceModel.getServiceTemplates().entrySet()) {
112 entityTmp = new ServiceTemplate();
114 yaml = new ToscaExtensionYamlUtil().objectToYaml(entryTemplate.getValue());
115 entityTmp.setContentData(yaml.getBytes());
116 entityTmp.setVspId(vspId);
117 entityTmp.setVersion(version);
118 entityTmp.setName(entryTemplate.getKey());
119 entityTmp.setBaseName(toscaServiceModel.getEntryDefinitionServiceTemplate());
121 templateDao.create(entityTmp);
127 * Gets service model info.
129 * @param vspId the vsp id
130 * @param version the version
131 * @param name the name
132 * @return the service model info
134 public ServiceElement getServiceModelInfo(String vspId, Version version, String name) {
135 ServiceElement element = templateDao.getTemplateInfo(vspId, version, name);
136 if (element != null) {
140 element = artifactDao.getArtifactInfo(vspId, version, name);
141 if (element != null) {
147 public List<String> getServiceModelContentNames() {
152 private String getServiceBase(String vspId, Version version) {
153 return templateDao.getBase(vspId, version);
156 private Map<String, org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate> getTemplates(
160 Collection<ServiceTemplate> templates = templateDao.list(vspId, version);
161 if (templates == null) {
164 return templates.stream().collect(Collectors.toMap(template -> template.getName(),
165 template -> getServiceTemplate(template.getContent())));
168 private org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate getServiceTemplate(
169 InputStream content) {
170 String serviceTemplateContent = new String(FileUtils.toByteArray(content));
173 return new ToscaExtensionYamlUtil().yamlToObject(serviceTemplateContent,
174 org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate.class);
175 }catch (Exception e){
177 System.out.println("Found vsp with old-versioned tosca service template");
178 Old1610ServiceTemplate old1610ServiceTemplate =
179 new ToscaExtensionYamlUtil().yamlToObject(serviceTemplateContent,
180 Old1610ServiceTemplate.class);
182 return mapOldSTToCurrentST(old1610ServiceTemplate);
186 private static org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate mapOldSTToCurrentST(Old1610ServiceTemplate oldServiceTemplate){
187 org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate
188 serviceTemplate = new org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate();
190 serviceTemplate.setArtifact_types(oldServiceTemplate.getArtifact_types());
191 serviceTemplate.setCapability_types(oldServiceTemplate.getCapability_types());
192 serviceTemplate.setData_types(oldServiceTemplate.getData_types());
193 serviceTemplate.setDescription(oldServiceTemplate.getDescription());
194 serviceTemplate.setGroup_types(oldServiceTemplate.getGroup_types());
195 serviceTemplate.setInterface_types(oldServiceTemplate.getInterface_types());
196 serviceTemplate.setMetadata(oldServiceTemplate.getMetadata());
197 serviceTemplate.setNode_types(oldServiceTemplate.getNode_types());
198 serviceTemplate.setPolicy_types(oldServiceTemplate.getPolicy_types());
199 serviceTemplate.setRelationship_types(oldServiceTemplate.getRelationship_types());
200 serviceTemplate.setTopology_template(oldServiceTemplate.getTopology_template());
202 List<Map<String, Import>> imports = new ArrayList<>();
203 for(Map.Entry<String, Import> importEntry : oldServiceTemplate.getImports().entrySet()){
204 Map<String, Import> importMap = new HashMap<>();
205 importMap.put(importEntry.getKey(), importEntry.getValue());
206 imports.add(importMap);
208 serviceTemplate.setImports(imports);
210 return serviceTemplate;
214 private FileContentHandler getArtifacts(String vspId, Version version) {
215 Collection<ServiceArtifact> templates = artifactDao.list(vspId, version);
216 if (templates == null) {
220 FileContentHandler fileContentHandler = new FileContentHandler();
221 templates.stream().forEach(
222 serviceArtifact -> fileContentHandler
223 .addFile(serviceArtifact.getName(), serviceArtifact.getContent()));
225 return fileContentHandler;