8002087ddd13fe5cb4638b44095401c38490d7e9
[so.git] / adapters / mso-adapter-utils / src / main / java / org / openecomp / mso / openstack / utils / MsoYamlEditorWithEnvt.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  * 
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  * 
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.openecomp.mso.openstack.utils;
23
24
25
26 import java.io.ByteArrayInputStream;
27 import java.io.InputStream;
28 import java.util.HashSet;
29 import java.util.Iterator;
30 import java.util.LinkedHashMap;
31 import java.util.Map;
32 import java.util.Set;
33 import java.util.Map.Entry;
34 import org.openecomp.mso.db.catalog.beans.HeatTemplateParam;
35 import org.codehaus.jackson.map.ObjectMapper;
36
37 import org.yaml.snakeyaml.Yaml;
38
39 import org.openecomp.mso.logger.MsoLogger;
40
41 public class MsoYamlEditorWithEnvt {
42
43     private static final MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA);
44     
45     private Map <String, Object> yml;
46     private Yaml yaml = new Yaml ();
47     private static final ObjectMapper JSON_MAPPER = new ObjectMapper();
48
49         public MsoYamlEditorWithEnvt() {
50                 super();
51         }
52         public MsoYamlEditorWithEnvt(byte[] b) {
53                 init(b);
54         }
55
56     @SuppressWarnings("unchecked")
57     private synchronized void init (byte[] body) {
58         InputStream input = new ByteArrayInputStream (body);
59         yml = (Map <String, Object>) yaml.load (input);
60     }   
61
62     @SuppressWarnings("unchecked")
63         public synchronized Set <MsoHeatEnvironmentParameter> getParameterListFromEnvt() {
64         // In an environment entry, the parameters section can only contain the name:value - 
65         // not other attributes.
66         Set <MsoHeatEnvironmentParameter> paramSet = new HashSet<>();
67         Map<String, Object> resourceMap = null;
68         try {
69                 resourceMap = (Map<String,Object>) yml.get("parameters");
70         } catch (Exception e) {
71             LOGGER.debug("Exception:", e);
72                 return paramSet;
73         }
74         if (resourceMap == null) {
75                 return paramSet;
76         }
77
78         for (Entry<String, Object> stringObjectEntry : resourceMap.entrySet()) {
79             MsoHeatEnvironmentParameter hep = new MsoHeatEnvironmentParameter();
80             Entry<String, Object> pair = stringObjectEntry;
81             String value;
82             Object obj = pair.getValue();
83             if (obj instanceof String) {
84                 value = yaml.dump(obj);
85                 // but this adds an extra '\n' at the end - which won't hurt - but we don't need it
86                 value = value.substring(0, value.length() - 1);
87             } else if (obj instanceof LinkedHashMap) {
88                 //Handle that it's json
89                 try {
90                     value = JSON_MAPPER.writeValueAsString(obj);
91                 } catch (Exception e) {
92                     LOGGER.debug("Exception:", e);
93                     value = "_BAD_JSON_MAPPING";
94                 }
95             } else {
96                 //this handles integers/longs/floats/etc.
97                 value = String.valueOf(obj);
98             }
99             hep.setName((String) pair.getKey());
100             hep.setValue(value);
101             paramSet.add(hep);
102         }
103         return paramSet;
104     }
105     public synchronized Set <MsoHeatEnvironmentResource> getResourceListFromEnvt() {
106         try {
107                 Set<MsoHeatEnvironmentResource> resourceList = new HashSet<>();
108                 @SuppressWarnings("unchecked")
109                 Map<String, Object> resourceMap = (Map<String,Object>) yml.get("resource_registry");
110
111             for (Entry<String, Object> stringObjectEntry : resourceMap.entrySet()) {
112                 MsoHeatEnvironmentResource her = new MsoHeatEnvironmentResource();
113                 Entry<String, Object> pair = stringObjectEntry;
114                 her.setName((String) pair.getKey());
115                 her.setValue((String) pair.getValue());
116                 resourceList.add(her);
117             }
118                 return resourceList;
119         } catch (Exception e) {
120             LOGGER.debug("Exception:", e);
121         }
122         return null;
123     }
124     public synchronized Set <HeatTemplateParam> getParameterList () {
125         Set <HeatTemplateParam> paramSet = new HashSet <> ();
126         @SuppressWarnings("unchecked")
127         Map <String, Object> resourceMap = (Map <String, Object>) yml.get ("parameters");
128
129         for (Entry<String, Object> stringObjectEntry : resourceMap.entrySet()) {
130             HeatTemplateParam param = new HeatTemplateParam();
131             Entry<String, Object> pair = stringObjectEntry;
132             @SuppressWarnings("unchecked")
133             Map<String, String> resourceEntry = (Map<String, String>) pair.getValue();
134             String value = null;
135             try {
136                 value = resourceEntry.get("default");
137             } catch (ClassCastException cce) {
138                 LOGGER.debug("Exception:", cce);
139                 // This exception only - the value is an integer. For what we're doing
140                 // here - we don't care - so set value to something - and it will
141                 // get marked as not being required - which is correct.
142                 //System.out.println("cce exception!");
143                 value = "300";
144                 // okay
145             }
146             param.setParamName((String) pair.getKey());
147             if (value != null) {
148                 param.setRequired(false);
149             } else {
150                 param.setRequired(true);
151             }
152             value = resourceEntry.get("type");
153             param.setParamType(value);
154
155             paramSet.add(param);
156
157         }
158         return paramSet;
159
160     }
161
162
163 }