Initial OpenECOMP policy/engine commit
[policy/engine.git] / PyPDPServer / src / main / java / org / openecomp / policy / pypdp / ConfigRequest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ECOMP Policy Engine
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.policy.pypdp;
22
23 import java.io.StringWriter;
24 import java.util.ArrayList;
25 import java.util.Collection;
26 import java.util.HashMap;
27 import java.util.Map;
28 import java.util.Properties;
29 import java.util.UUID;
30
31 import javax.json.JsonObject;
32 import javax.xml.transform.Transformer;
33 import javax.xml.transform.TransformerException;
34 import javax.xml.transform.TransformerFactory;
35 import javax.xml.transform.dom.DOMSource;
36 import javax.xml.transform.stream.StreamResult;
37
38 import org.openecomp.policy.api.ConfigRequestParameters;
39 import org.openecomp.policy.api.PolicyConfig;
40 import org.openecomp.policy.api.PolicyConfigException;
41 import org.openecomp.policy.api.PolicyConfigStatus;
42 import org.openecomp.policy.api.PolicyType;
43 import org.openecomp.policy.pypdp.model_pojo.PepConfigPolicyNameRequest;
44 import org.openecomp.policy.pypdp.model_pojo.PyPolicyConfig;
45 import org.openecomp.policy.std.StdPolicyConfig;
46 import org.openecomp.policy.std.StdPolicyEngine;
47 import org.w3c.dom.Document;
48
49 import org.openecomp.policy.xacml.api.XACMLErrorConstants;
50
51 import org.openecomp.policy.common.logging.eelf.PolicyLogger;
52
53 public class ConfigRequest {
54         
55         private StdPolicyEngine pe;
56         public ConfigRequest(StdPolicyEngine pe){
57                 this.pe= pe;
58         }
59         
60         public Collection<PyPolicyConfig> run(ConfigRequestParameters pep, String requestID, String userID, String passcode) {
61                 PolicyLogger.debug("... Request Params : \n"
62                                 + "configName " + pep.getConfigName() + "\n"
63                                 + "ecompName"  + pep.getEcompName() + "\n"
64                                 + "policyName" + pep.getPolicyName() + "\n");
65                 StdPolicyConfig policyConfig = new StdPolicyConfig();
66                 Collection<PyPolicyConfig> result = new ArrayList<PyPolicyConfig>();
67                 // construct a UUID from the request string
68                 if(pep.getRequestID()==null){
69                         UUID requestUUID = null;
70                         if (requestID != null && !requestID.isEmpty()) {
71                                 try {
72                                         requestUUID = UUID.fromString(requestID);
73                                 }
74                                 catch (IllegalArgumentException e) {
75                                         requestUUID = UUID.randomUUID();
76                                         PolicyLogger.info("Generated Random UUID: " + requestUUID.toString());
77                                 }
78                         }
79                         pep.setRequestID(requestUUID);
80                 }
81                 try {
82                         PolicyLogger.debug("\n\n calling PEP.. ");
83                         Collection<PolicyConfig> pConfigs = pe.configRequest(pep, userID, passcode);
84                         for(PolicyConfig pConfig: pConfigs){
85                                 PyPolicyConfig pyPolicyConfig = checkResponse(pConfig);
86                                 result.add(pyPolicyConfig);
87                         }
88                         return result;
89                 } catch(Exception e){
90                         policyConfig.setConfigStatus(e.getMessage(), PolicyConfigStatus.CONFIG_NOT_FOUND);
91                         PyPolicyConfig pyPolicyConfig = checkResponse(policyConfig);
92                         result.add(pyPolicyConfig);
93                         return result;
94                 }
95         }
96         
97         public Collection<PyPolicyConfig> run(PepConfigPolicyNameRequest pep, String requestID, String userID, String passcode) {
98                 PolicyLogger.debug("... Request Params : \n"
99                                 + "policyName" + pep.getPolicyName() + "\n");
100                 StdPolicyConfig policyConfig = new StdPolicyConfig();
101                 Collection<PyPolicyConfig> result = new ArrayList<PyPolicyConfig>();
102                 // construct a UUID from the request string
103                 UUID requestUUID = null;
104                 if (requestID != null && !requestID.isEmpty()) {
105                         try {
106                                 requestUUID = UUID.fromString(requestID);
107                         }
108                         catch (IllegalArgumentException e) {
109                                 requestUUID = UUID.randomUUID();
110                                 PolicyLogger.info("Generated Random UUID: " + requestUUID.toString());
111                         }
112                 }
113                 if(pep.getPolicyName()!= null && !pep.getPolicyName().isEmpty()) {
114                         try {
115                                 Collection<PolicyConfig> pConfigs = pe.configPolicyName(pep.getPolicyName(), requestUUID, userID, passcode);
116                                 for(PolicyConfig pConfig: pConfigs){
117                                         PyPolicyConfig pyPolicyConfig = checkResponse(pConfig);
118                                         result.add(pyPolicyConfig);
119                                 }
120                                 return result;
121                         } catch (PolicyConfigException e) {
122                                 policyConfig.setConfigStatus(e.getMessage(), PolicyConfigStatus.CONFIG_NOT_FOUND);
123                                 PyPolicyConfig pyPolicyConfig = checkResponse(policyConfig);
124                                 result.add(pyPolicyConfig);
125                                 return result;
126                         }
127                 }
128                 else {
129                         policyConfig.setConfigStatus(XACMLErrorConstants.ERROR_DATA_ISSUE + "PolicyFile Name is empty", PolicyConfigStatus.CONFIG_NOT_FOUND);
130                         PyPolicyConfig pyPolicyConfig = checkResponse(policyConfig);
131                         result.add(pyPolicyConfig);
132                         return result;
133                 }
134         }
135
136         public PyPolicyConfig checkResponse(PolicyConfig pConfig) {
137                 PyPolicyConfig policyConfig = new PyPolicyConfig();
138                 policyConfig.setPolicyConfigMessage(pConfig.getPolicyConfigMessage());
139                 policyConfig.setPolicyConfigStatus(pConfig.getPolicyConfigStatus());
140                 policyConfig.setType(pConfig.getType());
141                 policyConfig.setPolicyName(pConfig.getPolicyName());
142                 policyConfig.setMatchingConditions(pConfig.getMatchingConditions());
143                 policyConfig.setResponseAttributes(pConfig.getResponseAttributes());
144                 policyConfig.setPolicyVersion(pConfig.getPolicyVersion());
145                 if (pConfig.getPolicyConfigStatus().equals(PolicyConfigStatus.CONFIG_RETRIEVED)) {
146                         PolicyType policyType = policyConfig.getType();
147                         if(policyType.equals(PolicyType.PROPERTIES)) {
148                                 Properties properties = pConfig.toProperties();
149                                 Map<String, String> propVal = new HashMap<String, String>();
150                                 for(String name: properties.stringPropertyNames()) {
151                                         propVal.put(name, properties.getProperty(name));
152                                 }
153                                 policyConfig.setProperty(propVal);
154                         } else if(policyType.equals(PolicyType.OTHER)) {
155                                 String other = pConfig.toOther();
156                                 policyConfig.setConfig(other);
157                         } else if (policyType.equals(PolicyType.JSON)) {
158                                 JsonObject json = pConfig.toJSON();
159                                 policyConfig.setConfig(json.toString());
160                         } else if (policyType.equals(PolicyType.XML)) {
161                                 Document document = pConfig.toXML();
162                                 DOMSource domSource = new DOMSource(document);
163                                 StringWriter writer = new StringWriter();
164                                 StreamResult result = new StreamResult(writer);
165                                 TransformerFactory tf = TransformerFactory.newInstance();
166                                 Transformer transformer;
167                                 try {
168                                         transformer = tf.newTransformer();
169                                         transformer.transform(domSource, result);
170                                         policyConfig.setConfig(writer.toString());
171                                 } catch (TransformerException e) {
172                                         policyConfig.setConfig(null);
173                                         policyConfig.setPolicyConfigMessage(XACMLErrorConstants.ERROR_SCHEMA_INVALID + "XML error in the Configuration. " + e.getMessage());
174                                         policyConfig.setPolicyConfigStatus(PolicyConfigStatus.CONFIG_NOT_FOUND);
175                                 }
176                         }
177                 } else {
178                         policyConfig.setConfig(null);
179                 }
180                 return policyConfig;
181         }
182 }