2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.policy.pypdp;
23 import java.io.StringWriter;
24 import java.util.ArrayList;
25 import java.util.Collection;
26 import java.util.HashMap;
28 import java.util.Properties;
29 import java.util.UUID;
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;
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;
49 import org.openecomp.policy.xacml.api.XACMLErrorConstants;
51 import org.openecomp.policy.common.logging.eelf.PolicyLogger;
53 public class ConfigRequest {
55 private StdPolicyEngine pe;
56 public ConfigRequest(StdPolicyEngine pe){
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()) {
72 requestUUID = UUID.fromString(requestID);
74 catch (IllegalArgumentException e) {
75 requestUUID = UUID.randomUUID();
76 PolicyLogger.info("Generated Random UUID: " + requestUUID.toString());
79 pep.setRequestID(requestUUID);
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);
90 policyConfig.setConfigStatus(e.getMessage(), PolicyConfigStatus.CONFIG_NOT_FOUND);
91 PyPolicyConfig pyPolicyConfig = checkResponse(policyConfig);
92 result.add(pyPolicyConfig);
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()) {
106 requestUUID = UUID.fromString(requestID);
108 catch (IllegalArgumentException e) {
109 requestUUID = UUID.randomUUID();
110 PolicyLogger.info("Generated Random UUID: " + requestUUID.toString());
113 if(pep.getPolicyName()!= null && !pep.getPolicyName().isEmpty()) {
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);
121 } catch (PolicyConfigException e) {
122 policyConfig.setConfigStatus(e.getMessage(), PolicyConfigStatus.CONFIG_NOT_FOUND);
123 PyPolicyConfig pyPolicyConfig = checkResponse(policyConfig);
124 result.add(pyPolicyConfig);
129 policyConfig.setConfigStatus(XACMLErrorConstants.ERROR_DATA_ISSUE + "PolicyFile Name is empty", PolicyConfigStatus.CONFIG_NOT_FOUND);
130 PyPolicyConfig pyPolicyConfig = checkResponse(policyConfig);
131 result.add(pyPolicyConfig);
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));
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;
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);
178 policyConfig.setConfig(null);