Rework tosca converter
[clamp.git] / src / main / java / org / onap / clamp / clds / tosca / update / Extractor.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP CLAMP
4  * ================================================================================
5  * Copyright (C) 2020 AT&T Intellectual Property. All rights
6  *                             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  */
23
24 package org.onap.clamp.clds.tosca.update;
25
26 import java.util.LinkedHashMap;
27 import java.util.Map.Entry;
28 import org.yaml.snakeyaml.Yaml;
29
30 public class Extractor {
31
32     private LinkedHashMap<String, Component> allItems = new LinkedHashMap<>();
33     private String source;
34
35     @SuppressWarnings("unchecked")
36     public Extractor(String toParse) {
37         this.source = toParse;
38         getAllAsMaps();
39     }
40
41     public LinkedHashMap<String, Component> getAllItems() {
42         return allItems;
43     }
44
45     public String getSource() {
46         return source;
47     }
48
49     /**
50      * Yaml Parse gets raw policies and datatypes, in different sections : necessary to extract
51      * all entities and put them at the same level.
52      *
53      * @return an object
54      */
55     @SuppressWarnings("unchecked")
56     public LinkedHashMap<String, Object> getAllAsMaps() {
57         Yaml yaml = new Yaml();
58         Object contentFile = yaml.load(source);
59         LinkedHashMap<String, LinkedHashMap<String, Object>> file =
60                 (LinkedHashMap<String, LinkedHashMap<String, Object>>) contentFile;
61         // Get DataTypes
62         LinkedHashMap<String, Object> dataTypes = file.get("data_types");
63         // Get Policies : first, get topology and after extract policies from it
64         LinkedHashMap<String, Object> policyTypes = file.get("policy_types");
65         // Put the policies and datatypes in the same collection
66         dataTypes.putAll(policyTypes);
67         parseInComponent(dataTypes);
68         return dataTypes;
69     }
70
71     /**
72      * With all the component, get as Map, Components and Components properties are created.
73      *
74      * @param allMaps maps
75      */
76     @SuppressWarnings("unchecked")
77     public void parseInComponent(LinkedHashMap<String, Object> allMaps) {
78         //Component creations, from the file maps
79         for (Entry<String, Object> itemToParse : allMaps.entrySet()) {
80             LinkedHashMap<String, Object> componentBody = (LinkedHashMap<String, Object>) itemToParse.getValue();
81             Component component = new Component(itemToParse.getKey(), (String) componentBody.get("derived_from"),
82                     (String) componentBody.get("description"));
83             //If policy, version and type_version :
84             if (componentBody.get("type_version") != null) {
85                 component.setVersion((String) componentBody.get("type_version"));
86                 component.setTypeVersion((String) componentBody.get("type_version"));
87             }
88             //Properties creation, from the map
89             if (componentBody.get("properties") != null) {
90                 LinkedHashMap<String, Object> properties =
91                         (LinkedHashMap<String, Object>) componentBody.get("properties");
92                 for (Entry<String, Object> itemToProperty : properties.entrySet()) {
93                     Property property = new Property(itemToProperty.getKey(),
94                             (LinkedHashMap<String, Object>) itemToProperty.getValue());
95                     component.addProperties(property);
96                 }
97             }
98             this.allItems.put(component.getName(), component);
99         }
100     }
101 }