2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2019 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.onap.policy.pap.xacml.rest.controller;
23 import com.fasterxml.jackson.databind.DeserializationFeature;
24 import com.fasterxml.jackson.databind.JsonNode;
25 import com.fasterxml.jackson.databind.ObjectMapper;
27 import java.io.IOException;
28 import java.io.StringWriter;
29 import java.nio.charset.StandardCharsets;
30 import java.util.Date;
31 import java.util.List;
33 import javax.servlet.http.HttpServletRequest;
34 import javax.servlet.http.HttpServletResponse;
36 import org.apache.commons.io.IOUtils;
37 import org.onap.policy.api.PEDependency;
38 import org.onap.policy.common.logging.flexlogger.FlexLogger;
39 import org.onap.policy.common.logging.flexlogger.Logger;
40 import org.onap.policy.pap.xacml.rest.components.CreateBRMSRuleTemplate;
41 import org.onap.policy.pap.xacml.rest.util.DictionaryUtils;
42 import org.onap.policy.rest.dao.CommonClassDao;
43 import org.onap.policy.rest.jpa.BrmsController;
44 import org.onap.policy.rest.jpa.BrmsDependency;
45 import org.onap.policy.rest.jpa.BrmsParamTemplate;
46 import org.onap.policy.rest.jpa.OnapName;
47 import org.onap.policy.rest.jpa.UserInfo;
48 import org.onap.policy.utils.PolicyUtils;
49 import org.onap.policy.xacml.api.XACMLErrorConstants;
50 import org.springframework.beans.factory.annotation.Autowired;
51 import org.springframework.http.MediaType;
52 import org.springframework.stereotype.Controller;
53 import org.springframework.web.bind.annotation.RequestMapping;
54 import org.springframework.web.bind.annotation.RequestMethod;
55 import org.springframework.web.servlet.ModelAndView;
58 public class BRMSDictionaryController {
60 private static final Logger LOGGER = FlexLogger.getLogger(BRMSDictionaryController.class);
62 private static final String VALIDATIONRESPONSE = "Validation";
64 private static CommonClassDao commonClassDao;
65 private static String rule;
66 private static String successMsg = "Success";
67 private static String duplicateResponseString = "Duplicate";
68 private static String ruleName = "ruleName";
69 private static String errorMessage = "Error";
70 private static String operation = "operation";
71 private static String dictionaryFields = "dictionaryFields";
72 private static String userid = "userid";
73 private static String dependencyName = "dependencyName";
74 private static String controllerName = "controllerName";
75 private static String brmsParamDatas = "brmsParamDictionaryDatas";
76 private static String brmsDependencyDatas = "brmsDependencyDictionaryDatas";
77 private static String brmsControllerDatas = "brmsControllerDictionaryDatas";
80 public BRMSDictionaryController(CommonClassDao commonClassDao) {
81 BRMSDictionaryController.commonClassDao = commonClassDao;
84 public static void setCommonClassDao(CommonClassDao commonClassDao2) {
85 BRMSDictionaryController.commonClassDao = commonClassDao2;
88 public BRMSDictionaryController() {
92 private DictionaryUtils getDictionaryUtilsInstance() {
93 return DictionaryUtils.getDictionaryUtils();
97 value = {"/get_BRMSParamDataByName"},
98 method = {RequestMethod.GET},
99 produces = MediaType.APPLICATION_JSON_VALUE)
100 public void getBRMSParamDictionaryByNameEntityData(HttpServletResponse response) {
101 DictionaryUtils utils = getDictionaryUtilsInstance();
102 utils.getDataByEntity(response, brmsParamDatas, ruleName, BrmsParamTemplate.class);
106 value = {"/get_BRMSParamData"},
107 method = {RequestMethod.GET},
108 produces = MediaType.APPLICATION_JSON_VALUE)
109 public void getBRMSParamDictionaryEntityData(HttpServletResponse response) {
110 DictionaryUtils utils = getDictionaryUtilsInstance();
111 utils.getData(response, brmsParamDatas, BrmsParamTemplate.class);
114 @RequestMapping(value = {"/brms_dictionary/set_BRMSParamData"}, method = {RequestMethod.POST})
115 public static void setRuleData(HttpServletRequest request) throws IOException {
116 StringWriter writer = new StringWriter();
117 IOUtils.copy(request.getInputStream(), writer, StandardCharsets.UTF_8);
118 String cleanStreamBoundary = writer.toString().replaceFirst("------(.*)(?s).*octet-stream", "");
119 rule = cleanStreamBoundary.substring(0, cleanStreamBoundary.lastIndexOf("end") + 4);
122 @RequestMapping(value = {"/brms_dictionary/save_BRMSParam"}, method = {RequestMethod.POST})
123 public ModelAndView saveBRMSParamDictionary(HttpServletRequest request, HttpServletResponse response)
125 DictionaryUtils utils = getDictionaryUtilsInstance();
127 boolean fromAPI = utils.isRequestFromAPI(request);
128 ObjectMapper mapper = new ObjectMapper();
129 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
130 JsonNode root = mapper.readTree(request.getReader());
132 BrmsParamTemplate bRMSParamTemplateData;
133 String userId = null;
135 bRMSParamTemplateData =
136 mapper.readValue(root.get(dictionaryFields).toString(), BrmsParamTemplate.class);
139 bRMSParamTemplateData =
140 mapper.readValue(root.get("brmsParamDictionaryData").toString(), BrmsParamTemplate.class);
141 userId = root.get(userid).textValue();
143 UserInfo userInfo = utils.getUserInfo(userId);
145 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(bRMSParamTemplateData.getRuleName(),
146 ruleName, BrmsParamTemplate.class);
147 boolean duplicateflag = false;
148 if (!duplicateData.isEmpty()) {
149 BrmsParamTemplate data = (BrmsParamTemplate) duplicateData.get(0);
150 if (request.getParameter(operation) != null && "update".equals(request.getParameter(operation))) {
151 bRMSParamTemplateData.setId(data.getId());
152 } else if ((request.getParameter(operation) != null
153 && !"update".equals(request.getParameter(operation)))
154 || (request.getParameter(operation) == null
155 && (data.getId() != bRMSParamTemplateData.getId()))) {
156 duplicateflag = true;
159 String responseString = null;
160 boolean validation = false;
161 if (rule != null && CreateBRMSRuleTemplate.validateRuleParams(rule)) {
162 bRMSParamTemplateData.setRule(rule);
164 if (!duplicateflag) {
165 if (bRMSParamTemplateData.getId() == 0) {
166 bRMSParamTemplateData.setUserCreatedBy(userInfo);
167 commonClassDao.save(bRMSParamTemplateData);
169 commonClassDao.update(bRMSParamTemplateData);
171 responseString = mapper.writeValueAsString(commonClassDao.getData(BrmsParamTemplate.class));
173 responseString = duplicateResponseString;
178 responseString = VALIDATIONRESPONSE;
181 if (responseString != null && !(duplicateResponseString).equals(responseString)
182 && !VALIDATIONRESPONSE.equals(responseString)) {
183 responseString = successMsg;
185 ModelAndView result = new ModelAndView();
186 result.setViewName(responseString);
189 utils.setResponseData(response, brmsParamDatas, responseString);
191 } catch (Exception e) {
192 utils.setErrorResponseData(response, e);
197 @RequestMapping(value = {"/brms_dictionary/remove_brmsParam"}, method = {RequestMethod.POST})
198 public void removeBRMSParamDictionary(HttpServletRequest request, HttpServletResponse response) throws IOException {
199 DictionaryUtils utils = getDictionaryUtilsInstance();
200 utils.removeData(request, response, brmsParamDatas, BrmsParamTemplate.class);
204 value = {"/get_BRMSDependencyDataByName"},
205 method = {RequestMethod.GET},
206 produces = MediaType.APPLICATION_JSON_VALUE)
207 public void getBRMSDependencyDictionaryByNameEntityData(HttpServletResponse response) {
208 DictionaryUtils utils = getDictionaryUtilsInstance();
209 utils.getDataByEntity(response, brmsDependencyDatas, dependencyName, BrmsDependency.class);
213 value = {"/get_BRMSDependencyData"},
214 method = {RequestMethod.GET},
215 produces = MediaType.APPLICATION_JSON_VALUE)
216 public void getBRMSDependencyDictionaryEntityData(HttpServletResponse response) {
217 DictionaryUtils utils = getDictionaryUtilsInstance();
218 utils.getData(response, brmsDependencyDatas, BrmsDependency.class);
221 @RequestMapping(value = {"/brms_dictionary/save_BRMSDependencyData"}, method = {RequestMethod.POST})
222 public ModelAndView saveBRMSDependencyDictionary(HttpServletRequest request, HttpServletResponse response)
224 DictionaryUtils utils = getDictionaryUtilsInstance();
226 LOGGER.debug("DictionaryController: saveBRMSDependencyDictionary() is called");
227 boolean fromAPI = utils.isRequestFromAPI(request);
228 ObjectMapper mapper = new ObjectMapper();
229 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
230 JsonNode root = mapper.readTree(request.getReader());
232 BrmsDependency brmsDependency;
233 String userId = null;
235 brmsDependency = mapper.readValue(root.get(dictionaryFields).toString(), BrmsDependency.class);
239 mapper.readValue(root.get("brmsDependencyDictionaryData").toString(), BrmsDependency.class);
240 userId = root.get(userid).textValue();
242 UserInfo userInfo = utils.getUserInfo(userId);
244 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsDependency.getDependencyName(),
245 dependencyName, BrmsDependency.class);
246 boolean duplicateflag = false;
247 if (!duplicateData.isEmpty()) {
248 BrmsDependency data = (BrmsDependency) duplicateData.get(0);
249 if (request.getParameter(operation) != null && "update".equals(request.getParameter(operation))) {
250 brmsDependency.setId(data.getId());
251 } else if ((request.getParameter(operation) != null
252 && !"update".equals(request.getParameter(operation)))
253 || (request.getParameter(operation) == null && (data.getId() != brmsDependency.getId()))) {
254 duplicateflag = true;
257 LOGGER.audit("the userId from the onap portal is: " + userId);
258 String responseString = null;
259 if (brmsDependency.getDependency() != null && !("").equals(brmsDependency.getDependency().trim())) {
260 PEDependency dependency = null;
262 dependency = PolicyUtils.jsonStringToObject(brmsDependency.getDependency(), PEDependency.class);
263 } catch (Exception e) {
264 LOGGER.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID
265 + "wrong data given for BRMS PEDependency Dictionary : " + brmsDependency.getDependency(),
268 if (dependency == null) {
269 responseString = errorMessage;
271 if (!duplicateflag) {
272 brmsDependency.setUserModifiedBy(userInfo);
273 if (brmsDependency.getId() == 0) {
274 brmsDependency.setUserCreatedBy(userInfo);
275 commonClassDao.save(brmsDependency);
277 brmsDependency.setModifiedDate(new Date());
278 commonClassDao.update(brmsDependency);
280 responseString = mapper.writeValueAsString(commonClassDao.getData(BrmsDependency.class));
282 responseString = duplicateResponseString;
288 if (responseString != null && !duplicateResponseString.equals(responseString)
289 && !errorMessage.equals(responseString)) {
290 responseString = successMsg;
292 ModelAndView result = new ModelAndView();
293 result.setViewName(responseString);
296 utils.setResponseData(response, brmsDependencyDatas, responseString);
298 } catch (Exception e) {
299 utils.setErrorResponseData(response, e);
304 @RequestMapping(value = {"/brms_dictionary/remove_brmsDependency"}, method = {RequestMethod.POST})
305 public void removeBRMSDependencyDictionary(HttpServletRequest request, HttpServletResponse response)
307 DictionaryUtils utils = getDictionaryUtilsInstance();
308 utils.removeData(request, response, brmsDependencyDatas, BrmsDependency.class);
312 value = {"/get_BRMSControllerDataByName"},
313 method = {RequestMethod.GET},
314 produces = MediaType.APPLICATION_JSON_VALUE)
315 public void getBRMSControllerDictionaryByNameEntityData(HttpServletResponse response) {
316 DictionaryUtils utils = getDictionaryUtilsInstance();
317 utils.getDataByEntity(response, brmsControllerDatas, controllerName, BrmsController.class);
321 value = {"/get_BRMSControllerData"},
322 method = {RequestMethod.GET},
323 produces = MediaType.APPLICATION_JSON_VALUE)
324 public void getBRMSControllerDictionaryEntityData(HttpServletResponse response) {
325 DictionaryUtils utils = getDictionaryUtilsInstance();
326 utils.getData(response, brmsControllerDatas, BrmsController.class);
329 @RequestMapping(value = {"/brms_dictionary/save_BRMSControllerData"}, method = {RequestMethod.POST})
330 public ModelAndView saveBRMSControllerDictionary(HttpServletRequest request, HttpServletResponse response)
332 DictionaryUtils utils = getDictionaryUtilsInstance();
334 LOGGER.debug("DictionaryController: saveBRMSControllerDictionary() is called");
335 boolean fromAPI = utils.isRequestFromAPI(request);
336 ObjectMapper mapper = new ObjectMapper();
337 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
338 JsonNode root = mapper.readTree(request.getReader());
339 BrmsController brmsController;
340 String userId = null;
342 brmsController = mapper.readValue(root.get(dictionaryFields).toString(), BrmsController.class);
346 mapper.readValue(root.get("brmsControllerDictionaryData").toString(), BrmsController.class);
347 userId = root.get(userid).textValue();
349 UserInfo userInfo = utils.getUserInfo(userId);
351 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsController.getControllerName(),
352 controllerName, BrmsController.class);
353 boolean duplicateflag = false;
354 if (!duplicateData.isEmpty()) {
355 BrmsController data = (BrmsController) duplicateData.get(0);
356 if (request.getParameter(operation) != null && "update".equals(request.getParameter(operation))) {
357 brmsController.setId(data.getId());
358 } else if ((request.getParameter(operation) != null
359 && !"update".equals(request.getParameter(operation)))
360 || (request.getParameter(operation) == null && (data.getId() != brmsController.getId()))) {
361 duplicateflag = true;
364 String responseString = null;
365 if (brmsController.getController() != null && !("").equals(brmsController.getController().trim())) {
366 PEDependency dependency = null;
368 dependency = PolicyUtils.jsonStringToObject(brmsController.getController(), PEDependency.class);
369 } catch (Exception e) {
370 LOGGER.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID
371 + "wrong data given for BRMS Controller Dictionary : " + brmsController.getController(), e);
373 if (dependency == null) {
374 responseString = errorMessage;
376 if (!duplicateflag) {
377 brmsController.setUserModifiedBy(userInfo);
378 if (brmsController.getId() == 0) {
379 brmsController.setUserCreatedBy(userInfo);
380 commonClassDao.save(brmsController);
382 brmsController.setModifiedDate(new Date());
383 commonClassDao.update(brmsController);
385 responseString = mapper.writeValueAsString(commonClassDao.getData(OnapName.class));
387 responseString = duplicateResponseString;
392 if (responseString != null && !(duplicateResponseString).equals(responseString)
393 && !(errorMessage).equals(responseString)) {
394 responseString = successMsg;
396 ModelAndView result = new ModelAndView();
397 result.setViewName(responseString);
400 utils.setResponseData(response, brmsControllerDatas, responseString);
402 } catch (Exception e) {
403 utils.setErrorResponseData(response, e);
408 @RequestMapping(value = {"/brms_dictionary/remove_brmsController"}, method = {RequestMethod.POST})
409 public void removeBRMSControllerDictionary(HttpServletRequest request, HttpServletResponse response)
411 DictionaryUtils utils = getDictionaryUtilsInstance();
412 utils.removeData(request, response, brmsControllerDatas, BrmsController.class);
415 public BrmsDependency getDependencyDataByID(String dependencyName) {
416 return (BrmsDependency) commonClassDao.getEntityItem(BrmsDependency.class,
417 BRMSDictionaryController.dependencyName, dependencyName);
420 public BrmsController getControllerDataByID(String controllerName) {
421 return (BrmsController) commonClassDao.getEntityItem(BrmsController.class,
422 BRMSDictionaryController.controllerName, controllerName);