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.PrintWriter;
24 import java.io.StringWriter;
25 import java.nio.charset.StandardCharsets;
26 import java.util.Date;
27 import java.util.HashMap;
28 import java.util.List;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.servlet.http.HttpServletResponse;
34 import org.apache.commons.io.IOUtils;
35 import org.json.JSONObject;
36 import org.onap.policy.api.PEDependency;
37 import org.onap.policy.common.logging.flexlogger.FlexLogger;
38 import org.onap.policy.common.logging.flexlogger.Logger;
39 import org.onap.policy.pap.xacml.rest.util.JsonMessage;
40 import org.onap.policy.rest.dao.CommonClassDao;
41 import org.onap.policy.rest.jpa.BRMSController;
42 import org.onap.policy.rest.jpa.BRMSDependency;
43 import org.onap.policy.rest.jpa.BRMSParamTemplate;
44 import org.onap.policy.rest.jpa.UserInfo;
45 import org.onap.policy.utils.PolicyUtils;
46 import org.onap.policy.xacml.api.XACMLErrorConstants;
47 import org.springframework.beans.factory.annotation.Autowired;
48 import org.springframework.http.MediaType;
49 import org.springframework.stereotype.Controller;
50 import org.springframework.web.bind.annotation.RequestMapping;
51 import org.springframework.web.servlet.ModelAndView;
53 import com.fasterxml.jackson.databind.DeserializationFeature;
54 import com.fasterxml.jackson.databind.JsonNode;
55 import com.fasterxml.jackson.databind.ObjectMapper;
59 public class BRMSDictionaryController{
61 private static final Logger LOGGER = FlexLogger.getLogger(BRMSDictionaryController.class);
64 private static CommonClassDao commonClassDao;
67 public BRMSDictionaryController(CommonClassDao commonClassDao){
68 BRMSDictionaryController.commonClassDao = commonClassDao;
71 public BRMSDictionaryController() {}
75 public UserInfo getUserInfo(String loginId){
76 UserInfo name = (UserInfo) commonClassDao.getEntityItem(UserInfo.class, "userLoginId", loginId);
80 @RequestMapping(value={"/get_BRMSParamDataByName"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
81 public void getBRMSParamDictionaryByNameEntityData(HttpServletRequest request, HttpServletResponse response){
83 Map<String, Object> model = new HashMap<>();
84 ObjectMapper mapper = new ObjectMapper();
85 model.put("brmsParamDictionaryDatas", mapper.writeValueAsString(commonClassDao.getDataByColumn(BRMSParamTemplate.class, "ruleName")));
86 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
87 JSONObject j = new JSONObject(msg);
88 response.getWriter().write(j.toString());
91 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
95 @RequestMapping(value={"/get_BRMSParamData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
96 public void getBRMSParamDictionaryEntityData(HttpServletRequest request, HttpServletResponse response){
98 Map<String, Object> model = new HashMap<>();
99 ObjectMapper mapper = new ObjectMapper();
100 model.put("brmsParamDictionaryDatas", mapper.writeValueAsString(commonClassDao.getData(BRMSParamTemplate.class)));
101 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
102 JSONObject j = new JSONObject(msg);
103 response.addHeader("successMapKey", "success");
104 response.addHeader("operation", "getDictionary");
105 response.getWriter().write(j.toString());
108 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
109 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
110 response.addHeader("error", "dictionaryDBQuery");
114 @RequestMapping(value={"/brms_dictionary/set_BRMSParamData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
115 public void SetRuleData(HttpServletRequest request, HttpServletResponse response) throws Exception{
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={org.springframework.web.bind.annotation.RequestMethod.POST})
123 public ModelAndView saveBRMSParamDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception{
125 boolean duplicateflag = false;
126 boolean fromAPI = false;
127 if (request.getParameter("apiflag")!=null && request.getParameter("apiflag").equalsIgnoreCase("api")) {
130 ObjectMapper mapper = new ObjectMapper();
131 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
132 JsonNode root = mapper.readTree(request.getReader());
134 BRMSParamTemplate bRMSParamTemplateData;
135 String userId = null;
137 bRMSParamTemplateData = (BRMSParamTemplate)mapper.readValue(root.get("dictionaryFields").toString(), BRMSParamTemplate.class);
140 //check if update operation or create, get id for data to be updated and update attributeData
141 if (request.getParameter("operation").equals("update")) {
142 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(bRMSParamTemplateData.getRuleName(), "ruleName", BRMSParamTemplate.class);
144 BRMSParamTemplate data = (BRMSParamTemplate) duplicateData.get(0);
146 bRMSParamTemplateData.setId(id);
147 bRMSParamTemplateData.setUserCreatedBy(this.getUserInfo(userId));
150 bRMSParamTemplateData = (BRMSParamTemplate)mapper.readValue(root.get("brmsParamDictionaryData").toString(), BRMSParamTemplate.class);
151 userId = root.get("userid").textValue();
154 bRMSParamTemplateData.setRule(rule);
155 if(bRMSParamTemplateData.getId() == 0){
156 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(bRMSParamTemplateData.getRuleName(), "ruleName", BRMSParamTemplate.class);
157 if(!duplicateData.isEmpty()){
158 duplicateflag = true;
160 bRMSParamTemplateData.setUserCreatedBy(this.getUserInfo(userId));
161 commonClassDao.save(bRMSParamTemplateData);
164 commonClassDao.update(bRMSParamTemplateData);
166 response.setCharacterEncoding("UTF-8");
167 response.setContentType("application / json");
168 request.setCharacterEncoding("UTF-8");
170 String responseString = "";
172 responseString = "Duplicate";
174 responseString = mapper.writeValueAsString(BRMSDictionaryController.commonClassDao.getData(BRMSParamTemplate.class));
177 if (responseString!=null && !responseString.equals("Duplicate")) {
178 responseString = "Success";
180 ModelAndView result = new ModelAndView();
181 result.setViewName(responseString);
184 response.setCharacterEncoding("UTF-8");
185 response.setContentType("application / json");
186 request.setCharacterEncoding("UTF-8");
188 PrintWriter out = response.getWriter();
189 JSONObject j = new JSONObject("{brmsParamDictionaryDatas: " + responseString + "}");
190 out.write(j.toString());
195 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
196 response.setCharacterEncoding("UTF-8");
197 request.setCharacterEncoding("UTF-8");
198 PrintWriter out = response.getWriter();
199 out.write(e.getMessage());
204 @RequestMapping(value={"/brms_dictionary/remove_brmsParam"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
205 public ModelAndView removeBRMSParamDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception {
207 ObjectMapper mapper = new ObjectMapper();
208 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
209 JsonNode root = mapper.readTree(request.getReader());
210 BRMSParamTemplate bRMSParamTemplateData = (BRMSParamTemplate)mapper.readValue(root.get("data").toString(), BRMSParamTemplate.class);
211 commonClassDao.delete(bRMSParamTemplateData);
212 response.setCharacterEncoding("UTF-8");
213 response.setContentType("application / json");
214 request.setCharacterEncoding("UTF-8");
216 PrintWriter out = response.getWriter();
218 String responseString = mapper.writeValueAsString(BRMSDictionaryController.commonClassDao.getData(BRMSParamTemplate.class));
219 JSONObject j = new JSONObject("{brmsParamDictionaryDatas: " + responseString + "}");
220 out.write(j.toString());
225 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
226 response.setCharacterEncoding("UTF-8");
227 request.setCharacterEncoding("UTF-8");
228 PrintWriter out = response.getWriter();
229 out.write(e.getMessage());
234 @RequestMapping(value={"/get_BRMSDependencyDataByName"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
235 public void getBRMSDependencyDictionaryByNameEntityData(HttpServletRequest request, HttpServletResponse response){
237 Map<String, Object> model = new HashMap<>();
238 ObjectMapper mapper = new ObjectMapper();
239 model.put("brmsDependencyDictionaryDatas", mapper.writeValueAsString(commonClassDao.getDataByColumn(BRMSDependency.class, "dependencyName")));
240 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
241 JSONObject j = new JSONObject(msg);
242 response.getWriter().write(j.toString());
245 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
249 @RequestMapping(value={"/get_BRMSDependencyData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
250 public void getBRMSDependencyDictionaryEntityData(HttpServletRequest request, HttpServletResponse response){
252 Map<String, Object> model = new HashMap<>();
253 ObjectMapper mapper = new ObjectMapper();
254 model.put("brmsDependencyDictionaryDatas", mapper.writeValueAsString(commonClassDao.getData(BRMSDependency.class)));
255 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
256 JSONObject j = new JSONObject(msg);
257 response.addHeader("successMapKey", "success");
258 response.addHeader("operation", "getDictionary");
259 response.getWriter().write(j.toString());
262 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
263 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
264 response.addHeader("error", "dictionaryDBQuery");
268 @RequestMapping(value={"/brms_dictionary/save_BRMSDependencyData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
269 public ModelAndView saveBRMSDependencyDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception{
271 boolean duplicateflag = false;
272 LOGGER.debug("DictionaryController: saveBRMSDependencyDictionary() is called");
274 boolean fromAPI = false;
275 if (request.getParameter("apiflag")!=null && request.getParameter("apiflag").equalsIgnoreCase("api")) {
279 ObjectMapper mapper = new ObjectMapper();
280 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
281 JsonNode root = mapper.readTree(request.getReader());
283 BRMSDependency brmsDependency;
284 String userId = null;
286 brmsDependency = (BRMSDependency)mapper.readValue(root.get("dictionaryFields").toString(), BRMSDependency.class);
289 //check if update operation or create, get id for data to be updated
290 if (request.getParameter("operation").equals("update")) {
291 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsDependency.getDependencyName(), "dependencyName", BRMSDependency.class);
293 BRMSDependency data = (BRMSDependency) duplicateData.get(0);
295 brmsDependency.setId(id);
296 brmsDependency.setUserCreatedBy(this.getUserInfo(userId));
299 brmsDependency = (BRMSDependency)mapper.readValue(root.get("brmsDependencyDictionaryData").toString(), BRMSDependency.class);
300 userId = root.get("userid").textValue();
303 LOGGER.audit("the userId from the onap portal is: " + userId);
304 String responseString = null;
306 if(brmsDependency.getDependency()!=null && !brmsDependency.getDependency().trim().equals("")){
307 PEDependency dependency = null;
309 dependency = PolicyUtils.jsonStringToObject(brmsDependency.getDependency(), PEDependency.class);
311 LOGGER.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID + "wrong data given for BRMS PEDependency Dictionary : " + brmsDependency.getDependency());
313 if(dependency==null){
314 responseString = "Error";
316 if(brmsDependency.getId() == 0){
317 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsDependency.getDependencyName(), "dependencyName", BRMSDependency.class);
318 if(!duplicateData.isEmpty()){
319 duplicateflag = true;
321 brmsDependency.setUserCreatedBy(getUserInfo(userId));
322 brmsDependency.setUserModifiedBy(getUserInfo(userId));
323 LOGGER.audit("DictionaryController: got the user info now about to call Save() method on brmsDependencydao");
324 commonClassDao.save(brmsDependency);
327 brmsDependency.setUserModifiedBy(this.getUserInfo(userId));
328 brmsDependency.setModifiedDate(new Date());
329 commonClassDao.update(brmsDependency);
332 responseString = "Duplicate";
334 responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSDependency.class));
339 if (responseString!=null && !responseString.equals("Duplicate") && !responseString.equals("Error")) {
340 responseString = "Success";
342 ModelAndView result = new ModelAndView();
343 result.setViewName(responseString);
346 response.setCharacterEncoding("UTF-8");
347 response.setContentType("application / json");
348 request.setCharacterEncoding("UTF-8");
349 PrintWriter out = response.getWriter();
350 JSONObject j = new JSONObject("{brmsDependencyDictionaryDatas: " + responseString + "}");
351 out.write(j.toString());
355 } catch (Exception e){
356 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
357 response.setCharacterEncoding("UTF-8");
358 request.setCharacterEncoding("UTF-8");
359 PrintWriter out = response.getWriter();
360 out.write(e.getMessage());
365 @RequestMapping(value={"/brms_dictionary/remove_brmsDependency"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
366 public ModelAndView removeBRMSDependencyDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception {
368 ObjectMapper mapper = new ObjectMapper();
369 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
370 JsonNode root = mapper.readTree(request.getReader());
371 BRMSDependency brmsDependency = (BRMSDependency)mapper.readValue(root.get("data").toString(), BRMSDependency.class);
372 commonClassDao.delete(brmsDependency);
373 response.setCharacterEncoding("UTF-8");
374 response.setContentType("application / json");
375 request.setCharacterEncoding("UTF-8");
376 PrintWriter out = response.getWriter();
377 String responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSDependency.class));
378 JSONObject j = new JSONObject("{brmsDependencyDictionaryDatas: " + responseString + "}");
379 out.write(j.toString());
383 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
384 response.setCharacterEncoding("UTF-8");
385 request.setCharacterEncoding("UTF-8");
386 PrintWriter out = response.getWriter();
387 out.write(e.getMessage());
393 @RequestMapping(value={"/get_BRMSControllerDataByName"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
394 public void getBRMSControllerDictionaryByNameEntityData(HttpServletRequest request, HttpServletResponse response){
396 Map<String, Object> model = new HashMap<>();
397 ObjectMapper mapper = new ObjectMapper();
398 model.put("brmsControllerDictionaryDatas", mapper.writeValueAsString(commonClassDao.getDataByColumn(BRMSController.class, "controllerName")));
399 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
400 JSONObject j = new JSONObject(msg);
401 response.getWriter().write(j.toString());
404 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
408 @RequestMapping(value={"/get_BRMSControllerData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
409 public void getBRMSControllerDictionaryEntityData(HttpServletRequest request, HttpServletResponse response){
411 Map<String, Object> model = new HashMap<>();
412 ObjectMapper mapper = new ObjectMapper();
413 model.put("brmsControllerDictionaryDatas", mapper.writeValueAsString(commonClassDao.getData(BRMSController.class)));
414 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
415 JSONObject j = new JSONObject(msg);
416 response.addHeader("successMapKey", "success");
417 response.addHeader("operation", "getDictionary");
418 response.getWriter().write(j.toString());
421 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
422 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
423 response.addHeader("error", "dictionaryDBQuery");
427 @RequestMapping(value={"/brms_dictionary/save_BRMSControllerData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
428 public ModelAndView saveBRMSControllerDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception{
430 boolean duplicateflag = false;
431 LOGGER.debug("DictionaryController: saveBRMSControllerDictionary() is called");
432 boolean fromAPI = false;
433 if (request.getParameter("apiflag")!=null && request.getParameter("apiflag").equalsIgnoreCase("api")) {
436 ObjectMapper mapper = new ObjectMapper();
437 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
438 JsonNode root = mapper.readTree(request.getReader());
439 BRMSController brmsController;
440 String userId = null;
442 brmsController = (BRMSController)mapper.readValue(root.get("dictionaryFields").toString(), BRMSController.class);
444 //check if update operation or create, get id for data to be updated
445 if (request.getParameter("operation").equals("update")) {
446 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsController.getControllerName(), "controllerName", BRMSController.class);
448 BRMSController data = (BRMSController) duplicateData.get(0);
450 brmsController.setId(id);
451 brmsController.setUserCreatedBy(this.getUserInfo(userId));
454 brmsController = (BRMSController)mapper.readValue(root.get("brmsControllerDictionaryData").toString(), BRMSController.class);
455 userId = root.get("userid").textValue();
457 LOGGER.audit("the userId from the onap portal is: " + userId);
458 String responseString = null;
459 if(brmsController.getController()!=null && !brmsController.getController().trim().equals("")){
460 PEDependency dependency = null;
462 dependency = PolicyUtils.jsonStringToObject(brmsController.getController(), PEDependency.class);
464 LOGGER.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID + "wrong data given for BRMS Controller Dictionary : " + brmsController.getController());
466 if(dependency==null){
467 responseString = "Error";
469 if(brmsController.getId() == 0){
470 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsController.getControllerName(), "controllerName", BRMSController.class);
471 if(!duplicateData.isEmpty()){
472 duplicateflag = true;
474 brmsController.setUserCreatedBy(getUserInfo(userId));
475 brmsController.setUserModifiedBy(getUserInfo(userId));
476 LOGGER.audit("DictionaryController: got the user info now about to call Save() method on brmsControllerdao");
477 commonClassDao.save(brmsController);
480 brmsController.setUserModifiedBy(this.getUserInfo(userId));
481 brmsController.setModifiedDate(new Date());
482 commonClassDao.update(brmsController);
485 responseString = "Duplicate";
487 responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSController.class));
492 if (responseString!=null && !responseString.equals("Duplicate") && !responseString.equals("Error")) {
493 responseString = "Success";
495 ModelAndView result = new ModelAndView();
496 result.setViewName(responseString);
499 response.setCharacterEncoding("UTF-8");
500 response.setContentType("application / json");
501 request.setCharacterEncoding("UTF-8");
502 PrintWriter out = response.getWriter();
503 JSONObject j = new JSONObject("{brmsControllerDictionaryDatas: " + responseString + "}");
504 out.write(j.toString());
507 } catch (Exception e){
508 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
509 response.setCharacterEncoding("UTF-8");
510 request.setCharacterEncoding("UTF-8");
511 PrintWriter out = response.getWriter();
512 out.write(e.getMessage());
517 @RequestMapping(value={"/brms_dictionary/remove_brmsController"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
518 public ModelAndView removeBRMSControllerDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception {
520 ObjectMapper mapper = new ObjectMapper();
521 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
522 JsonNode root = mapper.readTree(request.getReader());
523 BRMSController brmsController = (BRMSController)mapper.readValue(root.get("data").toString(), BRMSController.class);
524 commonClassDao.delete(brmsController);
525 response.setCharacterEncoding("UTF-8");
526 response.setContentType("application / json");
527 request.setCharacterEncoding("UTF-8");
528 PrintWriter out = response.getWriter();
529 String responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSController.class));
530 JSONObject j = new JSONObject("{brmsControllerDictionaryDatas: " + responseString + "}");
531 out.write(j.toString());
535 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
536 response.setCharacterEncoding("UTF-8");
537 request.setCharacterEncoding("UTF-8");
538 PrintWriter out = response.getWriter();
539 out.write(e.getMessage());
544 public BRMSDependency getDependencyDataByID(String dependencyName){
545 return (BRMSDependency) commonClassDao.getEntityItem(BRMSDependency.class, "dependencyName", dependencyName);
548 public BRMSController getControllerDataByID(String controllerName){
549 return (BRMSController) commonClassDao.getEntityItem(BRMSController.class, "controllerName", controllerName);