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.pap.xacml.rest.controller;
23 import java.io.PrintWriter;
24 import java.io.StringWriter;
25 import java.nio.charset.StandardCharsets;
26 import java.util.HashMap;
27 import java.util.List;
30 import javax.servlet.http.HttpServletRequest;
31 import javax.servlet.http.HttpServletResponse;
33 import org.apache.commons.io.IOUtils;
34 import org.json.JSONObject;
35 import org.openecomp.policy.api.PEDependency;
36 import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
37 import org.openecomp.policy.common.logging.flexlogger.Logger;
38 import org.openecomp.policy.pap.xacml.rest.util.JsonMessage;
39 import org.openecomp.policy.rest.dao.CommonClassDao;
40 import org.openecomp.policy.rest.jpa.BRMSController;
41 import org.openecomp.policy.rest.jpa.BRMSDependency;
42 import org.openecomp.policy.rest.jpa.BRMSParamTemplate;
43 import org.openecomp.policy.rest.jpa.UserInfo;
44 import org.openecomp.policy.utils.PolicyUtils;
45 import org.openecomp.policy.xacml.api.XACMLErrorConstants;
46 import org.springframework.beans.factory.annotation.Autowired;
47 import org.springframework.http.MediaType;
48 import org.springframework.stereotype.Controller;
49 import org.springframework.web.bind.annotation.RequestMapping;
50 import org.springframework.web.servlet.ModelAndView;
52 import com.fasterxml.jackson.databind.DeserializationFeature;
53 import com.fasterxml.jackson.databind.JsonNode;
54 import com.fasterxml.jackson.databind.ObjectMapper;
58 public class BRMSDictionaryController{
60 private static final Logger LOGGER = FlexLogger.getLogger(BRMSDictionaryController.class);
63 private static CommonClassDao commonClassDao;
66 public BRMSDictionaryController(CommonClassDao commonClassDao){
67 BRMSDictionaryController.commonClassDao = commonClassDao;
70 public BRMSDictionaryController() {}
74 public UserInfo getUserInfo(String loginId){
75 UserInfo name = (UserInfo) commonClassDao.getEntityItem(UserInfo.class, "userLoginId", loginId);
79 @RequestMapping(value={"/get_BRMSParamDataByName"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
80 public void getBRMSParamDictionaryByNameEntityData(HttpServletRequest request, HttpServletResponse response){
82 Map<String, Object> model = new HashMap<String, Object>();
83 ObjectMapper mapper = new ObjectMapper();
84 model.put("brmsParamDictionaryDatas", mapper.writeValueAsString(commonClassDao.getDataByColumn(BRMSParamTemplate.class, "ruleName")));
85 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
86 JSONObject j = new JSONObject(msg);
87 response.getWriter().write(j.toString());
90 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
94 @RequestMapping(value={"/get_BRMSParamData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
95 public void getBRMSParamDictionaryEntityData(HttpServletRequest request, HttpServletResponse response){
97 Map<String, Object> model = new HashMap<String, Object>();
98 ObjectMapper mapper = new ObjectMapper();
99 model.put("brmsParamDictionaryDatas", mapper.writeValueAsString(commonClassDao.getData(BRMSParamTemplate.class)));
100 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
101 JSONObject j = new JSONObject(msg);
102 response.addHeader("successMapKey", "success");
103 response.addHeader("operation", "getDictionary");
104 response.getWriter().write(j.toString());
107 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
108 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
109 response.addHeader("error", "dictionaryDBQuery");
113 @RequestMapping(value={"/brms_dictionary/set_BRMSParamData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
114 public void SetRuleData(HttpServletRequest request, HttpServletResponse response) throws Exception{
115 StringWriter writer = new StringWriter();
116 IOUtils.copy(request.getInputStream() , writer, StandardCharsets.UTF_8);
117 String cleanStreamBoundary = writer.toString().replaceFirst("------(.*)(?s).*octet-stream", "");
118 rule = cleanStreamBoundary.substring(0, cleanStreamBoundary.lastIndexOf("end")+4);
121 @RequestMapping(value={"/brms_dictionary/save_BRMSParam"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
122 public ModelAndView saveBRMSParamDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception{
124 boolean duplicateflag = false;
125 boolean fromAPI = false;
126 if (request.getParameter("apiflag")!=null && request.getParameter("apiflag").equalsIgnoreCase("api")) {
129 ObjectMapper mapper = new ObjectMapper();
130 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
131 JsonNode root = mapper.readTree(request.getReader());
133 BRMSParamTemplate bRMSParamTemplateData;
134 String userId = null;
136 bRMSParamTemplateData = (BRMSParamTemplate)mapper.readValue(root.get("dictionaryFields").toString(), BRMSParamTemplate.class);
139 //check if update operation or create, get id for data to be updated and update attributeData
140 if (request.getParameter("operation").equals("update")) {
141 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(bRMSParamTemplateData.getRuleName(), "ruleName", BRMSParamTemplate.class);
143 BRMSParamTemplate data = (BRMSParamTemplate) duplicateData.get(0);
145 bRMSParamTemplateData.setId(id);
146 bRMSParamTemplateData.setUserCreatedBy(this.getUserInfo(userId));
149 bRMSParamTemplateData = (BRMSParamTemplate)mapper.readValue(root.get("brmsParamDictionaryData").toString(), BRMSParamTemplate.class);
150 userId = root.get("userid").textValue();
153 bRMSParamTemplateData.setRule(rule);
154 if(bRMSParamTemplateData.getId() == 0){
155 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(bRMSParamTemplateData.getRuleName(), "ruleName", BRMSParamTemplate.class);
156 if(!duplicateData.isEmpty()){
157 duplicateflag = true;
159 bRMSParamTemplateData.setUserCreatedBy(this.getUserInfo(userId));
160 commonClassDao.save(bRMSParamTemplateData);
163 commonClassDao.update(bRMSParamTemplateData);
165 response.setCharacterEncoding("UTF-8");
166 response.setContentType("application / json");
167 request.setCharacterEncoding("UTF-8");
169 String responseString = "";
171 responseString = "Duplicate";
173 responseString = mapper.writeValueAsString(BRMSDictionaryController.commonClassDao.getData(BRMSParamTemplate.class));
176 if (responseString!=null && !responseString.equals("Duplicate")) {
177 responseString = "Success";
179 ModelAndView result = new ModelAndView();
180 result.setViewName(responseString);
183 response.setCharacterEncoding("UTF-8");
184 response.setContentType("application / json");
185 request.setCharacterEncoding("UTF-8");
187 PrintWriter out = response.getWriter();
188 JSONObject j = new JSONObject("{brmsParamDictionaryDatas: " + responseString + "}");
189 out.write(j.toString());
194 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
195 response.setCharacterEncoding("UTF-8");
196 request.setCharacterEncoding("UTF-8");
197 PrintWriter out = response.getWriter();
198 out.write(e.getMessage());
203 @RequestMapping(value={"/brms_dictionary/remove_brmsParam"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
204 public ModelAndView removeBRMSParamDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception {
206 ObjectMapper mapper = new ObjectMapper();
207 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
208 JsonNode root = mapper.readTree(request.getReader());
209 BRMSParamTemplate bRMSParamTemplateData = (BRMSParamTemplate)mapper.readValue(root.get("data").toString(), BRMSParamTemplate.class);
210 commonClassDao.delete(bRMSParamTemplateData);
211 response.setCharacterEncoding("UTF-8");
212 response.setContentType("application / json");
213 request.setCharacterEncoding("UTF-8");
215 PrintWriter out = response.getWriter();
217 String responseString = mapper.writeValueAsString(BRMSDictionaryController.commonClassDao.getData(BRMSParamTemplate.class));
218 JSONObject j = new JSONObject("{brmsParamDictionaryDatas: " + responseString + "}");
219 out.write(j.toString());
224 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
225 response.setCharacterEncoding("UTF-8");
226 request.setCharacterEncoding("UTF-8");
227 PrintWriter out = response.getWriter();
228 out.write(e.getMessage());
233 @RequestMapping(value={"/get_BRMSDependencyDataByName"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
234 public void getBRMSDependencyDictionaryByNameEntityData(HttpServletRequest request, HttpServletResponse response){
236 Map<String, Object> model = new HashMap<String, Object>();
237 ObjectMapper mapper = new ObjectMapper();
238 model.put("brmsDependencyDictionaryDatas", mapper.writeValueAsString(commonClassDao.getDataByColumn(BRMSDependency.class, "dependencyName")));
239 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
240 JSONObject j = new JSONObject(msg);
241 response.getWriter().write(j.toString());
244 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<String, Object>();
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");
269 @RequestMapping(value={"/brms_dictionary/save_BRMSDependencyData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
270 public ModelAndView saveBRMSDependencyDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception{
272 boolean duplicateflag = false;
273 LOGGER.debug("DictionaryController: saveBRMSDependencyDictionary() is called");
275 boolean fromAPI = false;
276 if (request.getParameter("apiflag")!=null && request.getParameter("apiflag").equalsIgnoreCase("api")) {
280 ObjectMapper mapper = new ObjectMapper();
281 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
282 JsonNode root = mapper.readTree(request.getReader());
284 BRMSDependency brmsDependency;
285 String userId = null;
287 brmsDependency = (BRMSDependency)mapper.readValue(root.get("dictionaryFields").toString(), BRMSDependency.class);
290 //check if update operation or create, get id for data to be updated
291 if (request.getParameter("operation").equals("update")) {
292 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsDependency.getDependencyName(), "dependencyName", BRMSDependency.class);
294 BRMSDependency data = (BRMSDependency) duplicateData.get(0);
296 brmsDependency.setId(id);
297 brmsDependency.setUserCreatedBy(this.getUserInfo(userId));
300 brmsDependency = (BRMSDependency)mapper.readValue(root.get("brmsDependencyDictionaryData").toString(), BRMSDependency.class);
301 userId = root.get("userid").textValue();
304 LOGGER.audit("the userId from the ecomp portal is: " + userId);
305 String responseString = null;
307 if(brmsDependency.getDependency()!=null && !brmsDependency.getDependency().trim().equals("")){
308 PEDependency dependency = null;
310 dependency = PolicyUtils.jsonStringToObject(brmsDependency.getDependency(), PEDependency.class);
312 LOGGER.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID + "wrong data given for BRMS PEDependency Dictionary : " + brmsDependency.getDependency());
314 if(dependency==null){
315 responseString = "Error";
317 if(brmsDependency.getId() == 0){
318 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsDependency.getDependencyName(), "dependencyName", BRMSDependency.class);
319 if(!duplicateData.isEmpty()){
320 duplicateflag = true;
322 brmsDependency.setUserCreatedBy(getUserInfo(userId));
323 brmsDependency.setUserModifiedBy(getUserInfo(userId));
324 LOGGER.audit("DictionaryController: got the user info now about to call Save() method on brmsDependencydao");
325 commonClassDao.save(brmsDependency);
328 brmsDependency.setUserModifiedBy(this.getUserInfo(userId));
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<String, Object>();
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);
409 @RequestMapping(value={"/get_BRMSControllerData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
410 public void getBRMSControllerDictionaryEntityData(HttpServletRequest request, HttpServletResponse response){
412 Map<String, Object> model = new HashMap<String, Object>();
413 ObjectMapper mapper = new ObjectMapper();
414 model.put("brmsControllerDictionaryDatas", mapper.writeValueAsString(commonClassDao.getData(BRMSController.class)));
415 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
416 JSONObject j = new JSONObject(msg);
417 response.addHeader("successMapKey", "success");
418 response.addHeader("operation", "getDictionary");
419 response.getWriter().write(j.toString());
422 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
423 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
424 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 Exception{
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 ecomp 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());
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 commonClassDao.update(brmsController);
486 responseString = "Duplicate";
488 responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSController.class));
493 if (responseString!=null && !responseString.equals("Duplicate") && !responseString.equals("Error")) {
494 responseString = "Success";
496 ModelAndView result = new ModelAndView();
497 result.setViewName(responseString);
500 response.setCharacterEncoding("UTF-8");
501 response.setContentType("application / json");
502 request.setCharacterEncoding("UTF-8");
503 PrintWriter out = response.getWriter();
504 JSONObject j = new JSONObject("{brmsControllerDictionaryDatas: " + responseString + "}");
505 out.write(j.toString());
508 } catch (Exception e){
509 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
510 response.setCharacterEncoding("UTF-8");
511 request.setCharacterEncoding("UTF-8");
512 PrintWriter out = response.getWriter();
513 out.write(e.getMessage());
518 @RequestMapping(value={"/brms_dictionary/remove_brmsController"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
519 public ModelAndView removeBRMSControllerDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception {
521 ObjectMapper mapper = new ObjectMapper();
522 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
523 JsonNode root = mapper.readTree(request.getReader());
524 BRMSController brmsController = (BRMSController)mapper.readValue(root.get("data").toString(), BRMSController.class);
525 commonClassDao.delete(brmsController);
526 response.setCharacterEncoding("UTF-8");
527 response.setContentType("application / json");
528 request.setCharacterEncoding("UTF-8");
529 PrintWriter out = response.getWriter();
530 String responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSController.class));
531 JSONObject j = new JSONObject("{brmsControllerDictionaryDatas: " + responseString + "}");
532 out.write(j.toString());
536 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
537 response.setCharacterEncoding("UTF-8");
538 request.setCharacterEncoding("UTF-8");
539 PrintWriter out = response.getWriter();
540 out.write(e.getMessage());
545 public BRMSDependency getDependencyDataByID(String dependencyName){
546 return (BRMSDependency) commonClassDao.getEntityItem(BRMSDependency.class, "dependencyName", dependencyName);
549 public BRMSController getControllerDataByID(String controllerName){
550 return (BRMSController) commonClassDao.getEntityItem(BRMSController.class, "controllerName", controllerName);