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=========================================================
20 package org.onap.policy.pdp.rest.api.services;
22 import java.util.UUID;
24 import javax.json.JsonException;
25 import javax.json.JsonObject;
27 import org.onap.policy.api.DictionaryParameters;
28 import org.onap.policy.api.DictionaryResponse;
29 import org.onap.policy.api.PolicyException;
30 import org.onap.policy.common.logging.flexlogger.FlexLogger;
31 import org.onap.policy.common.logging.flexlogger.Logger;
32 import org.onap.policy.pdp.rest.api.utils.PolicyApiUtils;
33 import org.onap.policy.std.StdDictionaryResponse;
34 import org.onap.policy.xacml.api.XACMLErrorConstants;
35 import org.springframework.http.HttpStatus;
37 public class GetDictionaryService {
38 private static final Logger LOGGER = FlexLogger.getLogger(GetDictionaryService.class.getName());
40 private DictionaryResponse dictionaryResponse = null;
41 private HttpStatus status = HttpStatus.BAD_REQUEST;
42 private String message = null;
43 private DictionaryParameters dictionaryParameters = null;
45 public GetDictionaryService(DictionaryParameters dictionaryParameters,
47 this.dictionaryParameters = dictionaryParameters;
48 if(dictionaryParameters.getRequestID()==null){
49 UUID requestUUID = null;
50 if (requestID != null && !requestID.isEmpty()) {
52 requestUUID = UUID.fromString(requestID);
53 } catch (IllegalArgumentException e) {
54 requestUUID = UUID.randomUUID();
55 LOGGER.info("Generated Random UUID: " + requestUUID.toString(), e);
58 requestUUID = UUID.randomUUID();
59 LOGGER.info("Generated Random UUID: " + requestUUID.toString());
61 this.dictionaryParameters.setRequestID(requestUUID);
66 }catch(PolicyException e){
67 StdDictionaryResponse dictionaryResponse = new StdDictionaryResponse();
68 dictionaryResponse.setResponseMessage(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
69 this.dictionaryResponse = dictionaryResponse;
70 status = HttpStatus.BAD_REQUEST;
74 private void specialCheck() {
75 if(dictionaryResponse!=null && (dictionaryResponse.getResponseMessage()!=null && dictionaryResponse.getResponseMessage().contains("PE300"))){
76 status = HttpStatus.BAD_REQUEST;
80 private void run() throws PolicyException{
83 LOGGER.error(message);
84 throw new PolicyException(message);
88 status = HttpStatus.OK;
89 dictionaryResponse = processResult();
91 LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
92 status = HttpStatus.BAD_REQUEST;
93 throw new PolicyException(e);
97 private DictionaryResponse processResult() throws PolicyException{
98 StdDictionaryResponse response = new StdDictionaryResponse();
99 PAPServices papServices = new PAPServices();
100 String result = (String) papServices.callPAP(null, new String[] {"operation=get", "apiflag=api", "dictionaryType="+dictionaryParameters.getDictionary()}, dictionaryParameters.getRequestID(), "dictionaryItem");
102 if (result!=null && result.contains("data")) {
103 String jsonString = formatDictionaryJson(result);
104 String responseMessage = result.substring(0, 82);
105 JsonObject json = null;
107 json = PolicyApiUtils.stringToJsonObject(jsonString.replace("\\\\\\", "\\"));
108 String datas = json.getString("data").replaceFirst("\"\\[", "[");
109 int i = datas.lastIndexOf("]");
111 datas = new StringBuilder(datas).replace(i, i+2,"]").toString();
113 json = PolicyApiUtils.stringToJsonObject(datas);
114 } catch(JsonException| IllegalStateException e){
115 message = XACMLErrorConstants.ERROR_DATA_ISSUE+ " improper Dictionary JSON object : " + dictionaryParameters.getDictionaryJson();
116 LOGGER.error(message, e);
117 response.setResponseMessage(message);
118 response.setResponseCode(400);
121 response.setResponseCode(papServices.getResponseCode());
122 response.setDictionaryJson(json);
123 response.setResponseMessage(responseMessage);
125 response.setResponseCode(400);
126 response.setResponseMessage(result);
127 if(result!=null && result.contains("PE200")){
128 status=HttpStatus.INTERNAL_SERVER_ERROR;
130 status=HttpStatus.BAD_REQUEST;
136 private String formatDictionaryJson(String result) {
137 String jsonString = result.substring(82);
138 String dictionary = dictionaryParameters.getDictionary();
140 switch (dictionary) {
142 jsonString = jsonString.replace("onapNameDictionaryDatas", "DictionaryDatas");
145 jsonString = jsonString.replace("attributeDictionaryDatas", "DictionaryDatas");
148 jsonString = jsonString.replace("actionPolicyDictionaryDatas", "DictionaryDatas");
150 case "BRMSParamTemplate":
151 jsonString = jsonString.replace("brmsParamDictionaryDatas", "DictionaryDatas");
154 jsonString = jsonString.replace("vsclActionDictionaryDatas", "DictionaryDatas");
157 jsonString = jsonString.replace("vnfTypeDictionaryDatas", "DictionaryDatas");
160 jsonString = jsonString.replace("pepOptionsDictionaryDatas", "DictionaryDatas");
163 jsonString = jsonString.replace("varbindDictionaryDatas", "DictionaryDatas");
166 jsonString = jsonString.replace("closedLoopServiceDictionaryDatas", "DictionaryDatas");
169 jsonString = jsonString.replace("closedLoopSiteDictionaryDatas", "DictionaryDatas");
172 jsonString = jsonString.replace("settingsDictionaryDatas", "DictionaryDatas");
174 case "RainyDayTreatments":
175 jsonString = jsonString.replace("rainyDayDictionaryDatas", "DictionaryDatas");
177 case "DescriptiveScope":
178 jsonString = jsonString.replace("descriptiveScopeDictionaryDatas", "DictionaryDatas");
181 jsonString = jsonString.replace("enforcerDictionaryDatas", "DictionaryDatas");
184 jsonString = jsonString.replace("actionListDictionaryDatas", "DictionaryDatas");
187 jsonString = jsonString.replace("protocolListDictionaryDatas", "DictionaryDatas");
190 jsonString = jsonString.replace("zoneDictionaryDatas", "DictionaryDatas");
193 jsonString = jsonString.replace("securityZoneDictionaryDatas", "DictionaryDatas");
196 jsonString = jsonString.replace("prefixListDictionaryDatas", "DictionaryDatas");
199 jsonString = jsonString.replace("addressGroupDictionaryDatas", "DictionaryDatas");
202 jsonString = jsonString.replace("serviceGroupDictionaryDatas", "DictionaryDatas");
205 jsonString = jsonString.replace("serviceListDictionaryDatas", "DictionaryDatas");
209 case "FirewallRuleList":
211 jsonString = jsonString.replace("termListDictionaryDatas", "DictionaryDatas");
213 case "MicroServiceLocation":
214 jsonString = jsonString.replace("microServiceLocationDictionaryDatas", "DictionaryDatas");
216 case "MicroServiceConfigName":
217 jsonString = jsonString.replace("microServiceCongigNameDictionaryDatas", "DictionaryDatas");
220 jsonString = jsonString.replace("dcaeUUIDDictionaryDatas", "DictionaryDatas");
222 case "MicroServiceModels":
223 jsonString = jsonString.replace("microServiceModelsDictionaryDatas", "DictionaryDatas");
225 case "PolicyScopeService":
226 jsonString = jsonString.replace("psServiceDictionaryDatas", "DictionaryDatas");
228 case "PolicyScopeResource":
229 jsonString = jsonString.replace("psResourceDictionaryDatas", "DictionaryDatas");
231 case "PolicyScopeType":
232 jsonString = jsonString.replace("psTypeDictionaryDatas", "DictionaryDatas");
234 case "PolicyScopeClosedLoop":
235 jsonString = jsonString.replace("psClosedLoopDictionaryDatas", "DictionaryDatas");
237 case "GroupPolicyScopeList":
238 jsonString = jsonString.replace("groupPolicyScopeListDatas", "DictionaryDatas");
241 jsonString = jsonString.replace("riskTypeDictionaryDatas", "DictionaryDatas");
243 case "SafePolicyWarning":
244 jsonString = jsonString.replace("safePolicyWarningDatas", "DictionaryDatas");
246 case "MicroServiceDictionary":
247 jsonString = jsonString.replace("microServiceDictionaryDatas", "DictionaryDatas");
255 private boolean getValidation() {
256 if(dictionaryParameters==null){
257 message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Dictionary Parameters are not given.";
260 if(dictionaryParameters.getDictionaryType()==null || dictionaryParameters.getDictionaryType().toString().trim().isEmpty()){
261 message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Dictionary Type given.";
264 if(dictionaryParameters.getDictionary()==null || dictionaryParameters.getDictionary().trim().isEmpty()){
265 message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Dictionary given.";
271 public DictionaryResponse getResult() {
272 return dictionaryResponse;
275 public HttpStatus getResponseCode() {