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<>();
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<>();
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<>();
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);
248 @RequestMapping(value={"/get_BRMSDependencyData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
249 public void getBRMSDependencyDictionaryEntityData(HttpServletRequest request, HttpServletResponse response){
251 Map<String, Object> model = new HashMap<>();
252 ObjectMapper mapper = new ObjectMapper();
253 model.put("brmsDependencyDictionaryDatas", mapper.writeValueAsString(commonClassDao.getData(BRMSDependency.class)));
254 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
255 JSONObject j = new JSONObject(msg);
256 response.addHeader("successMapKey", "success");
257 response.addHeader("operation", "getDictionary");
258 response.getWriter().write(j.toString());
261 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
262 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
263 response.addHeader("error", "dictionaryDBQuery");
267 @RequestMapping(value={"/brms_dictionary/save_BRMSDependencyData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
268 public ModelAndView saveBRMSDependencyDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception{
270 boolean duplicateflag = false;
271 LOGGER.debug("DictionaryController: saveBRMSDependencyDictionary() is called");
273 boolean fromAPI = false;
274 if (request.getParameter("apiflag")!=null && request.getParameter("apiflag").equalsIgnoreCase("api")) {
278 ObjectMapper mapper = new ObjectMapper();
279 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
280 JsonNode root = mapper.readTree(request.getReader());
282 BRMSDependency brmsDependency;
283 String userId = null;
285 brmsDependency = (BRMSDependency)mapper.readValue(root.get("dictionaryFields").toString(), BRMSDependency.class);
288 //check if update operation or create, get id for data to be updated
289 if (request.getParameter("operation").equals("update")) {
290 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsDependency.getDependencyName(), "dependencyName", BRMSDependency.class);
292 BRMSDependency data = (BRMSDependency) duplicateData.get(0);
294 brmsDependency.setId(id);
295 brmsDependency.setUserCreatedBy(this.getUserInfo(userId));
298 brmsDependency = (BRMSDependency)mapper.readValue(root.get("brmsDependencyDictionaryData").toString(), BRMSDependency.class);
299 userId = root.get("userid").textValue();
302 LOGGER.audit("the userId from the ecomp portal is: " + userId);
303 String responseString = null;
305 if(brmsDependency.getDependency()!=null && !brmsDependency.getDependency().trim().equals("")){
306 PEDependency dependency = null;
308 dependency = PolicyUtils.jsonStringToObject(brmsDependency.getDependency(), PEDependency.class);
310 LOGGER.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID + "wrong data given for BRMS PEDependency Dictionary : " + brmsDependency.getDependency());
312 if(dependency==null){
313 responseString = "Error";
315 if(brmsDependency.getId() == 0){
316 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsDependency.getDependencyName(), "dependencyName", BRMSDependency.class);
317 if(!duplicateData.isEmpty()){
318 duplicateflag = true;
320 brmsDependency.setUserCreatedBy(getUserInfo(userId));
321 brmsDependency.setUserModifiedBy(getUserInfo(userId));
322 LOGGER.audit("DictionaryController: got the user info now about to call Save() method on brmsDependencydao");
323 commonClassDao.save(brmsDependency);
326 brmsDependency.setUserModifiedBy(this.getUserInfo(userId));
327 commonClassDao.update(brmsDependency);
330 responseString = "Duplicate";
332 responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSDependency.class));
337 if (responseString!=null && !responseString.equals("Duplicate") && !responseString.equals("Error")) {
338 responseString = "Success";
340 ModelAndView result = new ModelAndView();
341 result.setViewName(responseString);
344 response.setCharacterEncoding("UTF-8");
345 response.setContentType("application / json");
346 request.setCharacterEncoding("UTF-8");
347 PrintWriter out = response.getWriter();
348 JSONObject j = new JSONObject("{brmsDependencyDictionaryDatas: " + responseString + "}");
349 out.write(j.toString());
353 } catch (Exception e){
354 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
355 response.setCharacterEncoding("UTF-8");
356 request.setCharacterEncoding("UTF-8");
357 PrintWriter out = response.getWriter();
358 out.write(e.getMessage());
363 @RequestMapping(value={"/brms_dictionary/remove_brmsDependency"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
364 public ModelAndView removeBRMSDependencyDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception {
366 ObjectMapper mapper = new ObjectMapper();
367 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
368 JsonNode root = mapper.readTree(request.getReader());
369 BRMSDependency brmsDependency = (BRMSDependency)mapper.readValue(root.get("data").toString(), BRMSDependency.class);
370 commonClassDao.delete(brmsDependency);
371 response.setCharacterEncoding("UTF-8");
372 response.setContentType("application / json");
373 request.setCharacterEncoding("UTF-8");
374 PrintWriter out = response.getWriter();
375 String responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSDependency.class));
376 JSONObject j = new JSONObject("{brmsDependencyDictionaryDatas: " + responseString + "}");
377 out.write(j.toString());
381 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
382 response.setCharacterEncoding("UTF-8");
383 request.setCharacterEncoding("UTF-8");
384 PrintWriter out = response.getWriter();
385 out.write(e.getMessage());
391 @RequestMapping(value={"/get_BRMSControllerDataByName"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
392 public void getBRMSControllerDictionaryByNameEntityData(HttpServletRequest request, HttpServletResponse response){
394 Map<String, Object> model = new HashMap<>();
395 ObjectMapper mapper = new ObjectMapper();
396 model.put("brmsControllerDictionaryDatas", mapper.writeValueAsString(commonClassDao.getDataByColumn(BRMSController.class, "controllerName")));
397 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
398 JSONObject j = new JSONObject(msg);
399 response.getWriter().write(j.toString());
402 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
406 @RequestMapping(value={"/get_BRMSControllerData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
407 public void getBRMSControllerDictionaryEntityData(HttpServletRequest request, HttpServletResponse response){
409 Map<String, Object> model = new HashMap<>();
410 ObjectMapper mapper = new ObjectMapper();
411 model.put("brmsControllerDictionaryDatas", mapper.writeValueAsString(commonClassDao.getData(BRMSController.class)));
412 JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
413 JSONObject j = new JSONObject(msg);
414 response.addHeader("successMapKey", "success");
415 response.addHeader("operation", "getDictionary");
416 response.getWriter().write(j.toString());
419 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
420 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
421 response.addHeader("error", "dictionaryDBQuery");
425 @RequestMapping(value={"/brms_dictionary/save_BRMSControllerData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
426 public ModelAndView saveBRMSControllerDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception{
428 boolean duplicateflag = false;
429 LOGGER.debug("DictionaryController: saveBRMSControllerDictionary() is called");
430 boolean fromAPI = false;
431 if (request.getParameter("apiflag")!=null && request.getParameter("apiflag").equalsIgnoreCase("api")) {
434 ObjectMapper mapper = new ObjectMapper();
435 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
436 JsonNode root = mapper.readTree(request.getReader());
437 BRMSController brmsController;
438 String userId = null;
440 brmsController = (BRMSController)mapper.readValue(root.get("dictionaryFields").toString(), BRMSController.class);
442 //check if update operation or create, get id for data to be updated
443 if (request.getParameter("operation").equals("update")) {
444 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsController.getControllerName(), "controllerName", BRMSController.class);
446 BRMSController data = (BRMSController) duplicateData.get(0);
448 brmsController.setId(id);
449 brmsController.setUserCreatedBy(this.getUserInfo(userId));
452 brmsController = (BRMSController)mapper.readValue(root.get("brmsControllerDictionaryData").toString(), BRMSController.class);
453 userId = root.get("userid").textValue();
455 LOGGER.audit("the userId from the ecomp portal is: " + userId);
456 String responseString = null;
457 if(brmsController.getController()!=null && !brmsController.getController().trim().equals("")){
458 PEDependency dependency = null;
460 dependency = PolicyUtils.jsonStringToObject(brmsController.getController(), PEDependency.class);
462 LOGGER.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID + "wrong data given for BRMS Controller Dictionary : " + brmsController.getController());
464 if(dependency==null){
465 responseString = "Error";
467 if(brmsController.getId() == 0){
468 List<Object> duplicateData = commonClassDao.checkDuplicateEntry(brmsController.getControllerName(), "controllerName", BRMSController.class);
469 if(!duplicateData.isEmpty()){
470 duplicateflag = true;
472 brmsController.setUserCreatedBy(getUserInfo(userId));
473 brmsController.setUserModifiedBy(getUserInfo(userId));
474 LOGGER.audit("DictionaryController: got the user info now about to call Save() method on brmsControllerdao");
475 commonClassDao.save(brmsController);
478 brmsController.setUserModifiedBy(this.getUserInfo(userId));
479 commonClassDao.update(brmsController);
482 responseString = "Duplicate";
484 responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSController.class));
489 if (responseString!=null && !responseString.equals("Duplicate") && !responseString.equals("Error")) {
490 responseString = "Success";
492 ModelAndView result = new ModelAndView();
493 result.setViewName(responseString);
496 response.setCharacterEncoding("UTF-8");
497 response.setContentType("application / json");
498 request.setCharacterEncoding("UTF-8");
499 PrintWriter out = response.getWriter();
500 JSONObject j = new JSONObject("{brmsControllerDictionaryDatas: " + responseString + "}");
501 out.write(j.toString());
504 } catch (Exception e){
505 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
506 response.setCharacterEncoding("UTF-8");
507 request.setCharacterEncoding("UTF-8");
508 PrintWriter out = response.getWriter();
509 out.write(e.getMessage());
514 @RequestMapping(value={"/brms_dictionary/remove_brmsController"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
515 public ModelAndView removeBRMSControllerDictionary(HttpServletRequest request, HttpServletResponse response) throws Exception {
517 ObjectMapper mapper = new ObjectMapper();
518 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
519 JsonNode root = mapper.readTree(request.getReader());
520 BRMSController brmsController = (BRMSController)mapper.readValue(root.get("data").toString(), BRMSController.class);
521 commonClassDao.delete(brmsController);
522 response.setCharacterEncoding("UTF-8");
523 response.setContentType("application / json");
524 request.setCharacterEncoding("UTF-8");
525 PrintWriter out = response.getWriter();
526 String responseString = mapper.writeValueAsString(commonClassDao.getData(BRMSController.class));
527 JSONObject j = new JSONObject("{brmsControllerDictionaryDatas: " + responseString + "}");
528 out.write(j.toString());
532 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
533 response.setCharacterEncoding("UTF-8");
534 request.setCharacterEncoding("UTF-8");
535 PrintWriter out = response.getWriter();
536 out.write(e.getMessage());
541 public BRMSDependency getDependencyDataByID(String dependencyName){
542 return (BRMSDependency) commonClassDao.getEntityItem(BRMSDependency.class, "dependencyName", dependencyName);
545 public BRMSController getControllerDataByID(String controllerName){
546 return (BRMSController) commonClassDao.getEntityItem(BRMSController.class, "controllerName", controllerName);