Merge "Added policyNodes, db, tls support"
[dcaegen2/platform.git] / mod / bpgenerator / src / main / java / org / onap / blueprintgenerator / models / blueprint / Blueprint.java
1 /**============LICENSE_START======================================================= 
2  org.onap.dcae 
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 
9  
10       http://www.apache.org/licenses/LICENSE-2.0 
11  
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========================================================= 
18  
19  */
20
21 package org.onap.blueprintgenerator.models.blueprint;
22
23 import java.io.*;
24 import java.util.ArrayList;
25 import java.util.LinkedHashMap;
26 import java.util.TreeMap;
27 import java.util.regex.Pattern;
28
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;
36
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;
43
44 import lombok.AllArgsConstructor;
45 import lombok.Builder;
46 import lombok.Getter;
47 import lombok.NoArgsConstructor;
48 import lombok.Setter;
49 import org.yaml.snakeyaml.Yaml;
50
51
52 @Getter @Setter
53 @JsonInclude(JsonInclude.Include.NON_NULL)
54
55 public class Blueprint {
56
57
58         private String tosca_definitions_version;
59
60         private String description;
61
62         private ArrayList<String> imports;
63
64         private TreeMap<String, LinkedHashMap<String, Object>> inputs;
65
66         private TreeMap<String, Node> node_templates;
67
68         public Blueprint createBlueprint(ComponentSpec cs, String name, char bpType, String importPath, String override) {
69                 Blueprint bp = new Blueprint();
70                 if(bpType == 'o') {
71                         OnapBlueprint onap = new OnapBlueprint();
72                         bp = onap.createOnapBlueprint(cs, importPath, override);
73                         bp = bp.setQuotations(bp);
74                 }
75
76                 if(bpType == 'd') {
77                         DmaapBlueprint dmaap = new DmaapBlueprint();
78                         bp = dmaap.createDmaapBlueprint(cs, importPath, override);
79                         bp = bp.setQuotations(bp);
80                 }
81                 return bp;
82         }
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);
91                         }
92                 }
93                 
94                 return bp;
95         }
96
97         public void blueprintToYaml(String outputPath, String bluePrintName, ComponentSpec cs) {
98                 File outputFile;
99
100                 if(bluePrintName.equals("")) {
101                         String name = cs.getSelf().getName();
102                         if(name.contains(".")) {
103                                 name = name.replaceAll(Pattern.quote("."), "_");
104                         }
105                         if(name.contains(" ")) {
106                                 name = name.replaceAll(" ", "");
107                         }
108                         String file = name + ".yaml";
109
110
111                         outputFile = new File(outputPath, file);
112                         outputFile.getParentFile().mkdirs();
113                         try {
114                                 outputFile.createNewFile();
115                         } catch (IOException e) {
116                                 
117                                 throw new RuntimeException(e);
118                         }
119                 } else {
120                         if(bluePrintName.contains(" ") || bluePrintName.contains(".")) {
121                                 bluePrintName = bluePrintName.replaceAll(Pattern.quote("."), "_");
122                                 bluePrintName = bluePrintName.replaceAll(" ", "");
123                         }
124                         String file = bluePrintName + ".yaml";
125                         outputFile = new File(outputPath, file);
126                         outputFile.getParentFile().mkdirs();
127                         try {
128                                 outputFile.createNewFile();
129                         } catch (IOException e) {
130                                 throw new RuntimeException(e);
131                         }
132                 }
133
134                 String version = "#blueprint_version: " + cs.getSelf().getVersion() + '\n';
135                 String description = "#description: " + cs.getSelf().getDescription() + '\n';
136
137                 BufferedWriter writer = null;
138                 try {
139                         writer = new BufferedWriter(new FileWriter(outputFile, false));
140                 } catch (IOException e1) {
141                         throw new RuntimeException(e1);
142                 }
143                 if(writer != null) {
144                         try {
145                                 writer.write(description);
146                         } catch (IOException e) {
147                                 throw new RuntimeException(e);
148                         }
149                         try {
150                                 writer.write(version);
151                         } catch (IOException e) {
152                                 throw new RuntimeException(e);
153                         }
154                         try {
155                                 writer.close();
156                         } catch (IOException e) {
157                                 throw new RuntimeException(e);
158                         }
159                 }
160
161
162                 //read the translated blueprint into the file
163                 ObjectMapper blueprintMapper = new ObjectMapper(new YAMLFactory().configure(YAMLGenerator.Feature.MINIMIZE_QUOTES, true));
164
165                 PrintWriter out = null;
166                 try {
167                         out = new PrintWriter(new BufferedWriter(new FileWriter(outputFile, true)));
168                 } catch (IOException e) {
169                         throw new RuntimeException(e);
170                 }
171
172                 try {
173                         if(out != null) {
174                                 blueprintMapper.writeValue(out, this);
175                                 out.close();
176                         }
177                 } catch (IOException e) {
178                         
179                         throw new RuntimeException(e);
180                 }
181
182
183                 Fixes fix = new Fixes();
184                 try {
185                         fix.fixSingleQuotes(outputFile);
186                 } catch (IOException e) {
187                         throw new RuntimeException(e);
188                 }
189
190                 System.out.println("Blueprint created");
191         }
192
193         public String blueprintToString() {
194                 String ret = "";
195
196                 ObjectMapper blueprintMapper = new ObjectMapper(new YAMLFactory().configure(YAMLGenerator.Feature.MINIMIZE_QUOTES, true));
197                 try {
198                         ret = blueprintMapper.writerWithDefaultPrettyPrinter().writeValueAsString(this);
199                 } catch (JsonProcessingException e) {
200                         throw new RuntimeException(e);
201                 }
202
203
204                 return Fixes.applyFixes(ret);
205         }
206 }