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.onap.policy.pap.xacml.rest.controller;
23 import java.io.IOException;
24 import java.io.PrintWriter;
25 import java.io.StringWriter;
26 import java.io.UnsupportedEncodingException;
27 import java.nio.charset.StandardCharsets;
28 import java.util.Date;
29 import java.util.HashMap;
30 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.json.JSONObject;
38 import org.onap.policy.api.PEDependency;
39 import org.onap.policy.common.logging.flexlogger.FlexLogger;
40 import org.onap.policy.common.logging.flexlogger.Logger;
41 import org.onap.policy.pap.xacml.rest.util.JsonMessage;
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.UserInfo;
47 import org.onap.policy.utils.PolicyUtils;
48 import org.onap.policy.xacml.api.XACMLErrorConstants;
49 import org.springframework.beans.factory.annotation.Autowired;
50 import org.springframework.http.MediaType;
51 import org.springframework.stereotype.Controller;
52 import org.springframework.web.bind.annotation.RequestMapping;
53 import org.springframework.web.servlet.ModelAndView;
55 import com.fasterxml.jackson.databind.DeserializationFeature;
56 import com.fasterxml.jackson.databind.JsonNode;
57 import com.fasterxml.jackson.databind.ObjectMapper;
61 public class BRMSDictionaryController{
63 private static final Logger LOGGER = FlexLogger.getLogger(BRMSDictionaryController.class);
66 private static CommonClassDao commonClassDao;
69 public BRMSDictionaryController(CommonClassDao commonClassDao){
70 BRMSDictionaryController.commonClassDao = commonClassDao;
73 public BRMSDictionaryController() {}
77 public UserInfo getUserInfo(String loginId){
78 UserInfo name = (UserInfo) commonClassDao.getEntityItem(UserInfo.class, "userLoginId", loginId);
82 @RequestMapping(value={"/get_BRMSParamDataByName"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
83 public void getBRMSParamDictionaryByNameEntityData(HttpServletRequest request, HttpServletResponse response){
85 Map<String, Object> model = new HashMap<>();
86 ObjectMapper mapper = new ObjectMapper();
87 model.put("brmsParamDictionaryDatas", mapper.writeValueAsString(commonClassDao.getDataByColumn(BRMSParamTemplate.class, "ruleName")));
88 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
89 JSONObject j = new JSONObject(msg);
90 response.getWriter().write(j.toString());
93 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
97 @RequestMapping(value={"/get_BRMSParamData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
98 public void getBRMSParamDictionaryEntityData(HttpServletRequest request, HttpServletResponse response){
100 Map<String, Object> model = new HashMap<>();
101 ObjectMapper mapper = new ObjectMapper();
102 model.put("brmsParamDictionaryDatas", mapper.writeValueAsString(commonClassDao.getData(BRMSParamTemplate.class)));
103 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
104 JSONObject j = new JSONObject(msg);
105 response.addHeader("successMapKey", "success");
106 response.addHeader("operation", "getDictionary");
107 response.getWriter().write(j.toString());
110 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
111 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
112 response.addHeader("error", "dictionaryDBQuery");
116 @RequestMapping(value={"/brms_dictionary/set_BRMSParamData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
117 public void SetRuleData(HttpServletRequest request, HttpServletResponse response) throws IOException{
118 StringWriter writer = new StringWriter();
119 IOUtils.copy(request.getInputStream() , writer, StandardCharsets.UTF_8);
120 String cleanStreamBoundary = writer.toString().replaceFirst("------(.*)(?s).*octet-stream", "");
121 rule = cleanStreamBoundary.substring(0, cleanStreamBoundary.lastIndexOf("end")+4);
124 @RequestMapping(value={"/brms_dictionary/save_BRMSParam"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
125 public ModelAndView saveBRMSParamDictionary(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException, IOException {
127 boolean duplicateflag = false;
128 boolean fromAPI = false;
129 if (request.getParameter("apiflag")!=null && request.getParameter("apiflag").equalsIgnoreCase("api")) {
132 ObjectMapper mapper = new ObjectMapper();
133 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
134 JsonNode root = mapper.readTree(request.getReader());
136 BRMSParamTemplate bRMSParamTemplateData;
137 String userId = null;
139 bRMSParamTemplateData = (BRMSParamTemplate)mapper.readValue(root.get("dictionaryFields").toString(), BRMSParamTemplate.class);
142 //check if update operation or create, get id for data to be updated and update attributeData
143 if (request.getParameter("operation").equals("update")) {
144 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(bRMSParamTemplateData.getRuleName(), "ruleName", BRMSParamTemplate.class);
146 BRMSParamTemplate data = (BRMSParamTemplate) duplicateData.get(0);
148 bRMSParamTemplateData.setId(id);
149 bRMSParamTemplateData.setUserCreatedBy(this.getUserInfo(userId));
152 bRMSParamTemplateData = (BRMSParamTemplate)mapper.readValue(root.get("brmsParamDictionaryData").toString(), BRMSParamTemplate.class);
153 userId = root.get("userid").textValue();
156 bRMSParamTemplateData.setRule(rule);
157 if(bRMSParamTemplateData.getId() == 0){
158 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(bRMSParamTemplateData.getRuleName(), "ruleName", BRMSParamTemplate.class);
159 if(!duplicateData.isEmpty()){
160 duplicateflag = true;
162 bRMSParamTemplateData.setUserCreatedBy(this.getUserInfo(userId));
163 commonClassDao.save(bRMSParamTemplateData);
166 commonClassDao.update(bRMSParamTemplateData);
168 response.setCharacterEncoding("UTF-8");
169 response.setContentType("application / json");
170 request.setCharacterEncoding("UTF-8");
172 String responseString = "";
174 responseString = "Duplicate";
176 responseString = mapper.writeValueAsString(BRMSDictionaryController.commonClassDao.getData(BRMSParamTemplate.class));
179 if (responseString!=null && !responseString.equals("Duplicate")) {
180 responseString = "Success";
182 ModelAndView result = new ModelAndView();
183 result.setViewName(responseString);
186 response.setCharacterEncoding("UTF-8");
187 response.setContentType("application / json");
188 request.setCharacterEncoding("UTF-8");
190 PrintWriter out = response.getWriter();
191 JSONObject j = new JSONObject("{brmsParamDictionaryDatas: " + responseString + "}");
192 out.write(j.toString());
197 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW , e);
198 response.setCharacterEncoding("UTF-8");
199 request.setCharacterEncoding("UTF-8");
200 PrintWriter out = response.getWriter();
201 out.write(e.getMessage());
206 @RequestMapping(value={"/brms_dictionary/remove_brmsParam"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
207 public ModelAndView removeBRMSParamDictionary(HttpServletRequest request, HttpServletResponse response)throws UnsupportedEncodingException, IOException {
209 ObjectMapper mapper = new ObjectMapper();
210 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
211 JsonNode root = mapper.readTree(request.getReader());
212 BRMSParamTemplate bRMSParamTemplateData = (BRMSParamTemplate)mapper.readValue(root.get("data").toString(), BRMSParamTemplate.class);
213 commonClassDao.delete(bRMSParamTemplateData);
214 response.setCharacterEncoding("UTF-8");
215 response.setContentType("application / json");
216 request.setCharacterEncoding("UTF-8");
218 PrintWriter out = response.getWriter();
220 String responseString = mapper.writeValueAsString(BRMSDictionaryController.commonClassDao.getData(BRMSParamTemplate.class));
221 JSONObject j = new JSONObject("{brmsParamDictionaryDatas: " + responseString + "}");
222 out.write(j.toString());
227 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
228 response.setCharacterEncoding("UTF-8");
229 request.setCharacterEncoding("UTF-8");
230 PrintWriter out = response.getWriter();
231 out.write(e.getMessage());
236 @RequestMapping(value={"/get_BRMSDependencyDataByName"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
237 public void getBRMSDependencyDictionaryByNameEntityData(HttpServletRequest request, HttpServletResponse response){
239 Map<String, Object> model = new HashMap<>();
240 ObjectMapper mapper = new ObjectMapper();
241 model.put("brmsDependencyDictionaryDatas", mapper.writeValueAsString(commonClassDao.getDataByColumn(BRMSDependency.class, "dependencyName")));
242 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
243 JSONObject j = new JSONObject(msg);
244 response.getWriter().write(j.toString());
247 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
251 @RequestMapping(value={"/get_BRMSDependencyData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
252 public void getBRMSDependencyDictionaryEntityData(HttpServletRequest request, HttpServletResponse response){
254 Map<String, Object> model = new HashMap<>();
255 ObjectMapper mapper = new ObjectMapper();
256 model.put("brmsDependencyDictionaryDatas", mapper.writeValueAsString(commonClassDao.getData(BRMSDependency.class)));
257 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
258 JSONObject j = new JSONObject(msg);
259 response.addHeader("successMapKey", "success");
260 response.addHeader("operation", "getDictionary");
261 response.getWriter().write(j.toString());
264 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
265 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
266 response.addHeader("error", "dictionaryDBQuery");
270 @RequestMapping(value={"/brms_dictionary/save_BRMSDependencyData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
271 public ModelAndView saveBRMSDependencyDictionary(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException, IOException {
273 boolean duplicateflag = false;
274 LOGGER.debug("DictionaryController: saveBRMSDependencyDictionary() is called");
276 boolean fromAPI = false;
277 if (request.getParameter("apiflag")!=null && request.getParameter("apiflag").equalsIgnoreCase("api")) {
281 ObjectMapper mapper = new ObjectMapper();
282 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
283 JsonNode root = mapper.readTree(request.getReader());
285 BRMSDependency brmsDependency;
286 String userId = null;
288 brmsDependency = (BRMSDependency)mapper.readValue(root.get("dictionaryFields").toString(), BRMSDependency.class);
291 //check if update operation or create, get id for data to be updated
292 if (request.getParameter("operation").equals("update")) {
293 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsDependency.getDependencyName(), "dependencyName", BRMSDependency.class);
295 BRMSDependency data = (BRMSDependency) duplicateData.get(0);
297 brmsDependency.setId(id);
298 brmsDependency.setUserCreatedBy(this.getUserInfo(userId));
301 brmsDependency = (BRMSDependency)mapper.readValue(root.get("brmsDependencyDictionaryData").toString(), BRMSDependency.class);
302 userId = root.get("userid").textValue();
305 LOGGER.audit("the userId from the onap portal is: " + userId);
306 String responseString = null;
308 if(brmsDependency.getDependency()!=null && !brmsDependency.getDependency().trim().equals("")){
309 PEDependency dependency = null;
311 dependency = PolicyUtils.jsonStringToObject(brmsDependency.getDependency(), PEDependency.class);
313 LOGGER.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID + "wrong data given for BRMS PEDependency Dictionary : " + brmsDependency.getDependency(),e);
315 if(dependency==null){
316 responseString = "Error";
318 if(brmsDependency.getId() == 0){
319 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsDependency.getDependencyName(), "dependencyName", BRMSDependency.class);
320 if(!duplicateData.isEmpty()){
321 duplicateflag = true;
323 brmsDependency.setUserCreatedBy(getUserInfo(userId));
324 brmsDependency.setUserModifiedBy(getUserInfo(userId));
325 LOGGER.audit("DictionaryController: got the user info now about to call Save() method on brmsDependencydao");
326 commonClassDao.save(brmsDependency);
329 brmsDependency.setUserModifiedBy(this.getUserInfo(userId));
330 brmsDependency.setModifiedDate(new Date());
331 commonClassDao.update(brmsDependency);
334 responseString = "Duplicate";
336 responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSDependency.class));
341 if (responseString!=null && !responseString.equals("Duplicate") && !responseString.equals("Error")) {
342 responseString = "Success";
344 ModelAndView result = new ModelAndView();
345 result.setViewName(responseString);
348 response.setCharacterEncoding("UTF-8");
349 response.setContentType("application / json");
350 request.setCharacterEncoding("UTF-8");
351 PrintWriter out = response.getWriter();
352 JSONObject j = new JSONObject("{brmsDependencyDictionaryDatas: " + responseString + "}");
353 out.write(j.toString());
357 } catch (Exception e){
358 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
359 response.setCharacterEncoding("UTF-8");
360 request.setCharacterEncoding("UTF-8");
361 PrintWriter out = response.getWriter();
362 out.write(e.getMessage());
367 @RequestMapping(value={"/brms_dictionary/remove_brmsDependency"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
368 public ModelAndView removeBRMSDependencyDictionary(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException, IOException {
370 ObjectMapper mapper = new ObjectMapper();
371 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
372 JsonNode root = mapper.readTree(request.getReader());
373 BRMSDependency brmsDependency = (BRMSDependency)mapper.readValue(root.get("data").toString(), BRMSDependency.class);
374 commonClassDao.delete(brmsDependency);
375 response.setCharacterEncoding("UTF-8");
376 response.setContentType("application / json");
377 request.setCharacterEncoding("UTF-8");
378 PrintWriter out = response.getWriter();
379 String responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSDependency.class));
380 JSONObject j = new JSONObject("{brmsDependencyDictionaryDatas: " + responseString + "}");
381 out.write(j.toString());
385 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
386 response.setCharacterEncoding("UTF-8");
387 request.setCharacterEncoding("UTF-8");
388 PrintWriter out = response.getWriter();
389 out.write(e.getMessage());
395 @RequestMapping(value={"/get_BRMSControllerDataByName"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
396 public void getBRMSControllerDictionaryByNameEntityData(HttpServletRequest request, HttpServletResponse response){
398 Map<String, Object> model = new HashMap<>();
399 ObjectMapper mapper = new ObjectMapper();
400 model.put("brmsControllerDictionaryDatas", mapper.writeValueAsString(commonClassDao.getDataByColumn(BRMSController.class, "controllerName")));
401 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
402 JSONObject j = new JSONObject(msg);
403 response.getWriter().write(j.toString());
406 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
410 @RequestMapping(value={"/get_BRMSControllerData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
411 public void getBRMSControllerDictionaryEntityData(HttpServletRequest request, HttpServletResponse response){
413 Map<String, Object> model = new HashMap<>();
414 ObjectMapper mapper = new ObjectMapper();
415 model.put("brmsControllerDictionaryDatas", mapper.writeValueAsString(commonClassDao.getData(BRMSController.class)));
416 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
417 JSONObject j = new JSONObject(msg);
418 response.addHeader("successMapKey", "success");
419 response.addHeader("operation", "getDictionary");
420 response.getWriter().write(j.toString());
423 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
424 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
425 response.addHeader("error", "dictionaryDBQuery");
429 @RequestMapping(value={"/brms_dictionary/save_BRMSControllerData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
430 public ModelAndView saveBRMSControllerDictionary(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException, IOException{
432 boolean duplicateflag = false;
433 LOGGER.debug("DictionaryController: saveBRMSControllerDictionary() is called");
434 boolean fromAPI = false;
435 if (request.getParameter("apiflag")!=null && request.getParameter("apiflag").equalsIgnoreCase("api")) {
438 ObjectMapper mapper = new ObjectMapper();
439 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
440 JsonNode root = mapper.readTree(request.getReader());
441 BRMSController brmsController;
442 String userId = null;
444 brmsController = (BRMSController)mapper.readValue(root.get("dictionaryFields").toString(), BRMSController.class);
446 //check if update operation or create, get id for data to be updated
447 if (request.getParameter("operation").equals("update")) {
448 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsController.getControllerName(), "controllerName", BRMSController.class);
450 BRMSController data = (BRMSController) duplicateData.get(0);
452 brmsController.setId(id);
453 brmsController.setUserCreatedBy(this.getUserInfo(userId));
456 brmsController = (BRMSController)mapper.readValue(root.get("brmsControllerDictionaryData").toString(), BRMSController.class);
457 userId = root.get("userid").textValue();
459 LOGGER.audit("the userId from the onap portal is: " + userId);
460 String responseString = null;
461 if(brmsController.getController()!=null && !brmsController.getController().trim().equals("")){
462 PEDependency dependency = null;
464 dependency = PolicyUtils.jsonStringToObject(brmsController.getController(), PEDependency.class);
466 LOGGER.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID + "wrong data given for BRMS Controller Dictionary : " + brmsController.getController(),e);
468 if(dependency==null){
469 responseString = "Error";
471 if(brmsController.getId() == 0){
472 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsController.getControllerName(), "controllerName", BRMSController.class);
473 if(!duplicateData.isEmpty()){
474 duplicateflag = true;
476 brmsController.setUserCreatedBy(getUserInfo(userId));
477 brmsController.setUserModifiedBy(getUserInfo(userId));
478 LOGGER.audit("DictionaryController: got the user info now about to call Save() method on brmsControllerdao");
479 commonClassDao.save(brmsController);
482 brmsController.setUserModifiedBy(this.getUserInfo(userId));
483 brmsController.setModifiedDate(new Date());
484 commonClassDao.update(brmsController);
487 responseString = "Duplicate";
489 responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSController.class));
494 if (responseString!=null && !responseString.equals("Duplicate") && !responseString.equals("Error")) {
495 responseString = "Success";
497 ModelAndView result = new ModelAndView();
498 result.setViewName(responseString);
501 response.setCharacterEncoding("UTF-8");
502 response.setContentType("application / json");
503 request.setCharacterEncoding("UTF-8");
504 PrintWriter out = response.getWriter();
505 JSONObject j = new JSONObject("{brmsControllerDictionaryDatas: " + responseString + "}");
506 out.write(j.toString());
509 } catch (Exception e){
510 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
511 response.setCharacterEncoding("UTF-8");
512 request.setCharacterEncoding("UTF-8");
513 PrintWriter out = response.getWriter();
514 out.write(e.getMessage());
519 @RequestMapping(value={"/brms_dictionary/remove_brmsController"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
520 public ModelAndView removeBRMSControllerDictionary(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException, IOException{
522 ObjectMapper mapper = new ObjectMapper();
523 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
524 JsonNode root = mapper.readTree(request.getReader());
525 BRMSController brmsController = (BRMSController)mapper.readValue(root.get("data").toString(), BRMSController.class);
526 commonClassDao.delete(brmsController);
527 response.setCharacterEncoding("UTF-8");
528 response.setContentType("application / json");
529 request.setCharacterEncoding("UTF-8");
530 PrintWriter out = response.getWriter();
531 String responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSController.class));
532 JSONObject j = new JSONObject("{brmsControllerDictionaryDatas: " + responseString + "}");
533 out.write(j.toString());
537 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
538 response.setCharacterEncoding("UTF-8");
539 request.setCharacterEncoding("UTF-8");
540 PrintWriter out = response.getWriter();
541 out.write(e.getMessage());
546 public BRMSDependency getDependencyDataByID(String dependencyName){
547 return (BRMSDependency) commonClassDao.getEntityItem(BRMSDependency.class, "dependencyName", dependencyName);
550 public BRMSController getControllerDataByID(String controllerName){
551 return (BRMSController) commonClassDao.getEntityItem(BRMSController.class, "controllerName", controllerName);