1 /**============LICENSE_START=======================================================
3 ================================================================================
4 Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
5 ================================================================================
6 Licensed under the Apache License, Version 2.0 (the "License");
7 you may not use this file except in compliance with the License.
8 You may obtain a copy of the License at
10 http://www.apache.org/licenses/LICENSE-2.0
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 See the License for the specific language governing permissions and
16 limitations under the License.
17 ============LICENSE_END=========================================================
21 package org.onap.blueprintgenerator.models.blueprint;
24 import java.util.ArrayList;
25 import java.util.LinkedHashMap;
26 import java.util.TreeMap;
27 import java.util.regex.Pattern;
29 import org.onap.blueprintgenerator.core.Fixes;
30 import org.onap.blueprintgenerator.models.componentspec.ComponentSpec;
31 import org.onap.blueprintgenerator.models.componentspec.Parameters;
32 import org.onap.blueprintgenerator.models.componentspec.Publishes;
33 import org.onap.blueprintgenerator.models.componentspec.Subscribes;
34 import org.onap.blueprintgenerator.models.dmaapbp.DmaapBlueprint;
35 import org.onap.blueprintgenerator.models.onapbp.OnapBlueprint;
37 import com.fasterxml.jackson.annotation.JsonInclude;
38 import com.fasterxml.jackson.core.JsonProcessingException;
39 //import com.fasterxml.jackson.databind.ObjectMapper;
40 import com.fasterxml.jackson.databind.ObjectMapper;
41 import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
42 import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
44 import lombok.AllArgsConstructor;
45 import lombok.Builder;
47 import lombok.NoArgsConstructor;
49 import org.yaml.snakeyaml.Yaml;
53 @JsonInclude(JsonInclude.Include.NON_NULL)
55 public class Blueprint {
58 private String tosca_definitions_version;
60 private String description;
62 private ArrayList<String> imports;
64 private TreeMap<String, LinkedHashMap<String, Object>> inputs;
66 private TreeMap<String, Node> node_templates;
68 public Blueprint createBlueprint(ComponentSpec cs, String name, char bpType, String importPath, String override) {
69 Blueprint bp = new Blueprint();
71 OnapBlueprint onap = new OnapBlueprint();
72 bp = onap.createOnapBlueprint(cs, importPath, override);
73 bp = bp.setQuotations(bp);
77 DmaapBlueprint dmaap = new DmaapBlueprint();
78 bp = dmaap.createDmaapBlueprint(cs, importPath, override);
79 bp = bp.setQuotations(bp);
83 public Blueprint setQuotations(Blueprint bp) {
84 for(String s: bp.getInputs().keySet()) {
85 LinkedHashMap<String, Object> temp = bp.getInputs().get(s);
86 if(temp.get("type") == "string") {
87 String def = (String) temp.get("default");
88 def = '"' + def + '"';
89 temp.replace("default", def);
90 bp.getInputs().replace(s, temp);
97 public void blueprintToYaml(String outputPath, String bluePrintName, ComponentSpec cs) {
100 if(bluePrintName.equals("")) {
101 String name = cs.getSelf().getName();
102 if(name.contains(".")) {
103 name = name.replaceAll(Pattern.quote("."), "_");
105 if(name.contains(" ")) {
106 name = name.replaceAll(" ", "");
108 String file = name + ".yaml";
111 outputFile = new File(outputPath, file);
112 outputFile.getParentFile().mkdirs();
114 outputFile.createNewFile();
115 } catch (IOException e) {
117 throw new RuntimeException(e);
120 if(bluePrintName.contains(" ") || bluePrintName.contains(".")) {
121 bluePrintName = bluePrintName.replaceAll(Pattern.quote("."), "_");
122 bluePrintName = bluePrintName.replaceAll(" ", "");
124 String file = bluePrintName + ".yaml";
125 outputFile = new File(outputPath, file);
126 outputFile.getParentFile().mkdirs();
128 outputFile.createNewFile();
129 } catch (IOException e) {
130 throw new RuntimeException(e);
134 String version = "#blueprint_version: " + cs.getSelf().getVersion() + '\n';
135 String description = "#description: " + cs.getSelf().getDescription() + '\n';
137 BufferedWriter writer = null;
139 writer = new BufferedWriter(new FileWriter(outputFile, false));
140 } catch (IOException e1) {
141 throw new RuntimeException(e1);
145 writer.write(description);
146 } catch (IOException e) {
147 throw new RuntimeException(e);
150 writer.write(version);
151 } catch (IOException e) {
152 throw new RuntimeException(e);
156 } catch (IOException e) {
157 throw new RuntimeException(e);
162 //read the translated blueprint into the file
163 ObjectMapper blueprintMapper = new ObjectMapper(new YAMLFactory().configure(YAMLGenerator.Feature.MINIMIZE_QUOTES, true));
165 PrintWriter out = null;
167 out = new PrintWriter(new BufferedWriter(new FileWriter(outputFile, true)));
168 } catch (IOException e) {
169 throw new RuntimeException(e);
174 blueprintMapper.writeValue(out, this);
177 } catch (IOException e) {
179 throw new RuntimeException(e);
183 Fixes fix = new Fixes();
185 fix.fixSingleQuotes(outputFile);
186 } catch (IOException e) {
187 throw new RuntimeException(e);
190 System.out.println("Blueprint created");
193 public String blueprintToString() {
196 ObjectMapper blueprintMapper = new ObjectMapper(new YAMLFactory().configure(YAMLGenerator.Feature.MINIMIZE_QUOTES, true));
198 ret = blueprintMapper.writerWithDefaultPrettyPrinter().writeValueAsString(this);
199 } catch (JsonProcessingException e) {
200 throw new RuntimeException(e);
204 return Fixes.applyFixes(ret);