Blueprint Generator Refactored Code Issue-ID: DCAEGEN2-2472
[dcaegen2/platform.git] / mod / bpgenerator / onap / src / main / java / org / onap / policycreate / service / PolicyModelNodeService.java
1 /*
2  *
3  *  * ============LICENSE_START=======================================================
4  *  *  org.onap.dcae
5  *  *  ================================================================================
6  *  *  Copyright (c) 2020  AT&T Intellectual Property. 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  */
23
24 package org.onap.policycreate.service;
25
26 import org.onap.blueprintgenerator.constants.Constants;
27 import org.onap.blueprintgenerator.model.componentspec.common.EntrySchema;
28 import org.onap.blueprintgenerator.model.componentspec.common.Parameters;
29 import org.onap.blueprintgenerator.model.componentspec.common.PolicySchema;
30 import org.onap.policycreate.model.PolicyModelNode;
31 import org.onap.policycreate.model.PolicyProperties;
32 import org.springframework.stereotype.Service;
33
34 import java.util.Map;
35 import java.util.ArrayList;
36 import java.util.HashMap;
37 import java.util.TreeMap;
38 import java.util.List;
39
40 /**
41  * @author : Ravi Mantena
42  * @date 10/16/2020
43  * Application: ONAP - Blueprint Generator
44  * To create Node Type, Data Type and Translate Entry Schema for Policy Model Node
45  */
46
47
48 @Service("onapPolicyModelNodeService")
49 public class PolicyModelNodeService {
50
51     // Method to create Nodes for Policy
52     public  Map<String,Object> creatNodeType(String policyName, Parameters[] params) {
53         String hasEntrySchema = "";
54         Map<String,Object> response = new HashMap<>();
55         PolicyModelNode policyModelNode = new PolicyModelNode();
56
57         Map<String, PolicyProperties> props = new TreeMap<>();
58         for(Parameters p: params) {
59             if(p.getPolicy_group() != null && p.getPolicy_group().equals(policyName)) {
60                     String name = p.getName();
61                     String type = p.getType();
62                     PolicyProperties polProps = new PolicyProperties();
63                     if(p.getPolicy_schema() != null) {
64                         polProps.setType("map");
65                         ArrayList<String> entrySchema = new ArrayList<String>();
66                         entrySchema.add("type: onap.datatypes." + name);
67                         polProps.setEntry_schema(entrySchema);
68                         hasEntrySchema = name;
69                         props.put(name, polProps);
70                     }
71                     else {
72                         polProps.setType(type);
73                         props.put(name, polProps);
74                     }
75             }
76         }
77         policyModelNode.setDerived_from(Constants.TOSCA_DATATYPES_ROOT);
78         policyModelNode.setProperties(props);
79         response.put("hasEntrySchema", hasEntrySchema);
80         response.put("policyModelNode", policyModelNode);
81         return response;
82     }
83
84     // Method to create Data Types for Policy
85     public Map<String, PolicyModelNode> createDataTypes(String param, Parameters[] parameters){
86         Map<String, PolicyModelNode> dataType = new TreeMap<>();
87         PolicyModelNode node = new PolicyModelNode();
88         node.setDerived_from(Constants.TOSCA_DATATYPES_ROOT);
89
90         Map<String, PolicyProperties> properties = new TreeMap<>();
91         Parameters par = new Parameters();
92         for(Parameters p: parameters) {
93             if(param.equals(p.getName())) {
94                 par = p;
95                 break;
96             }
97         }
98
99         for(PolicySchema pol: par.getPolicy_schema()) {
100             if(pol.getEntry_schema() != null) {
101                 PolicyProperties prop =new PolicyProperties();
102                 prop.setType("map");
103                 ArrayList<String> schema = new ArrayList<String>();
104                 schema.add("type: onap.datatypes." + pol.getName());
105                 prop.setEntry_schema(schema);
106                 properties.put(pol.getName(), prop);
107                 dataType = translateEntrySchema(dataType, pol.getEntry_schema(), pol.getName());
108             }
109             else {
110                 PolicyProperties prop = new PolicyProperties();
111                 prop.setType(pol.getType());
112                 properties.put(pol.getName(), prop);
113             }
114         }
115
116         node.setProperties(properties);
117         dataType.put("onap.datatypes." + param, node);
118         return dataType;
119     }
120
121     private Map<String, PolicyModelNode> translateEntrySchema(Map<String, PolicyModelNode> dataType, EntrySchema[] entry, String name){
122         Map<String, PolicyModelNode> data = dataType;
123         PolicyModelNode node = new PolicyModelNode();
124         node.setDerived_from(Constants.TOSCA_NODES_ROOT);
125         Map<String, PolicyProperties> properties = new TreeMap<>();
126
127         for(EntrySchema e: entry) {
128             if(e.getEntry_schema() != null) {
129                 PolicyProperties prop = new PolicyProperties();
130                 prop.setType("list");
131                 List<String> schema = new ArrayList<>();
132                 schema.add("type: onap.datatypes." + e.getName());
133                 prop.setEntry_schema(schema);
134                 properties.put(e.getName(), prop);
135                 data = translateEntrySchema(data, e.getEntry_schema(), e.getName());
136                 node.setProperties(properties);
137             } else {
138                 PolicyProperties prop = new PolicyProperties();
139                 prop.setType(e.getType());
140                 properties.put(e.getName(), prop);
141                 node.setProperties(properties);
142             }
143         }
144
145         dataType.put("onap.datatypes." + name, node);
146         return data;
147     }
148
149 }
150