BpGen refactor Code Quality Issue-ID: DCAEGEN2-2502
[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 Application: ONAP - Blueprint Generator To create Node Type, Data Type and
43  * Translate Entry Schema for Policy Model Node
44  */
45 @Service("onapPolicyModelNodeService")
46 public class PolicyModelNodeService {
47
48     /**
49      * Creates Nodes for Policy
50      *
51      * @param policyName Policy Name
52      * @param params Paramaeters
53      * @return
54      */
55     public Map<String, Object> creatNodeType(String policyName, Parameters[] params) {
56         String hasEntrySchema = "";
57         Map<String, Object> response = new HashMap<>();
58         PolicyModelNode policyModelNode = new PolicyModelNode();
59
60         Map<String, PolicyProperties> props = new TreeMap<>();
61         for (Parameters p : params) {
62             if (p.getPolicy_group() != null && p.getPolicy_group().equals(policyName)) {
63                 String name = p.getName();
64                 String type = p.getType();
65                 PolicyProperties polProps = new PolicyProperties();
66                 if (p.getPolicy_schema() != null) {
67                     polProps.setType("map");
68                     ArrayList<String> entrySchema = new ArrayList<String>();
69                     entrySchema.add("type: onap.datatypes." + name);
70                     polProps.setEntry_schema(entrySchema);
71                     hasEntrySchema = name;
72                     props.put(name, polProps);
73                 } else {
74                     polProps.setType(type);
75                     props.put(name, polProps);
76                 }
77             }
78         }
79         policyModelNode.setDerived_from(Constants.TOSCA_DATATYPES_ROOT);
80         policyModelNode.setProperties(props);
81         response.put("hasEntrySchema", hasEntrySchema);
82         response.put("policyModelNode", policyModelNode);
83         return response;
84     }
85
86     /**
87      * Creates Data Types for Policy
88      *
89      * @param param Param
90      * @param parameters Parameters
91      * @return
92      */
93     public Map<String, PolicyModelNode> createDataTypes(String param, Parameters[] parameters) {
94         Map<String, PolicyModelNode> dataType = new TreeMap<>();
95         PolicyModelNode node = new PolicyModelNode();
96         node.setDerived_from(Constants.TOSCA_DATATYPES_ROOT);
97
98         Map<String, PolicyProperties> properties = new TreeMap<>();
99         Parameters par = new Parameters();
100         for (Parameters p : parameters) {
101             if (param.equals(p.getName())) {
102                 par = p;
103                 break;
104             }
105         }
106
107         for (PolicySchema pol : par.getPolicy_schema()) {
108             if (pol.getEntry_schema() != null) {
109                 PolicyProperties prop = new PolicyProperties();
110                 prop.setType("map");
111                 List<String> schema = new ArrayList<>();
112                 schema.add("type: onap.datatypes." + pol.getName());
113                 prop.setEntry_schema(schema);
114                 properties.put(pol.getName(), prop);
115                 dataType = translateEntrySchema(dataType, pol.getEntry_schema(), pol.getName());
116             } else {
117                 PolicyProperties prop = new PolicyProperties();
118                 prop.setType(pol.getType());
119                 properties.put(pol.getName(), prop);
120             }
121         }
122
123         node.setProperties(properties);
124         dataType.put("onap.datatypes." + param, node);
125         return dataType;
126     }
127
128     private Map<String, PolicyModelNode> translateEntrySchema(
129         Map<String, PolicyModelNode> dataType, EntrySchema[] entry, String name) {
130         Map<String, PolicyModelNode> data = dataType;
131         PolicyModelNode node = new PolicyModelNode();
132         node.setDerived_from(Constants.TOSCA_NODES_ROOT);
133         Map<String, PolicyProperties> properties = new TreeMap<>();
134
135         for (EntrySchema e : entry) {
136             if (e.getEntry_schema() != null) {
137                 PolicyProperties prop = new PolicyProperties();
138                 prop.setType("list");
139                 List<String> schema = new ArrayList<>();
140                 schema.add("type: onap.datatypes." + e.getName());
141                 prop.setEntry_schema(schema);
142                 properties.put(e.getName(), prop);
143                 data = translateEntrySchema(data, e.getEntry_schema(), e.getName());
144                 node.setProperties(properties);
145             } else {
146                 PolicyProperties prop = new PolicyProperties();
147                 prop.setType(e.getType());
148                 properties.put(e.getName(), prop);
149                 node.setProperties(properties);
150             }
151         }
152
153         dataType.put("onap.datatypes." + name, node);
154         return data;
155     }
156 }