X-Git-Url: https://gerrit.onap.org/r/gitweb?p=policy%2Fengine.git;a=blobdiff_plain;f=ONAP-PAP-REST%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fpap%2Fxacml%2Frest%2Fcontroller%2FDictionaryImportController.java;h=0295822131118c0023fdf089447e4e9deb4ea7a9;hp=c79f203cde02d9598c0af2b98a6ca445f9271cb6;hb=d4e3a1b394715c6386f963130e4e081d421ecd1b;hpb=49048e277bba438cf6486c1229b53f608a7af114 diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/DictionaryImportController.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/DictionaryImportController.java index c79f203cd..029582213 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/DictionaryImportController.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/DictionaryImportController.java @@ -2,14 +2,14 @@ * ============LICENSE_START======================================================= * ONAP-PAP-REST * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -19,10 +19,12 @@ */ package org.onap.policy.pap.xacml.rest.controller; - /* - * - * - * */ + +import au.com.bytecode.opencsv.CSVReader; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; + import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; @@ -36,14 +38,15 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.compress.utils.IOUtils; import org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; +import org.onap.policy.pap.xacml.rest.DictionaryNames; import org.onap.policy.rest.dao.CommonClassDao; import org.onap.policy.rest.jpa.ActionList; import org.onap.policy.rest.jpa.ActionPolicyDict; import org.onap.policy.rest.jpa.AddressGroup; import org.onap.policy.rest.jpa.Attribute; -import org.onap.policy.rest.jpa.BRMSController; -import org.onap.policy.rest.jpa.BRMSDependency; -import org.onap.policy.rest.jpa.BRMSParamTemplate; +import org.onap.policy.rest.jpa.BrmsController; +import org.onap.policy.rest.jpa.BrmsDependency; +import org.onap.policy.rest.jpa.BrmsParamTemplate; import org.onap.policy.rest.jpa.Category; import org.onap.policy.rest.jpa.ClosedLoopD2Services; import org.onap.policy.rest.jpa.ClosedLoopSite; @@ -53,661 +56,774 @@ import org.onap.policy.rest.jpa.DescriptiveScope; import org.onap.policy.rest.jpa.GroupServiceList; import org.onap.policy.rest.jpa.MicroServiceModels; import org.onap.policy.rest.jpa.OnapName; -import org.onap.policy.rest.jpa.PEPOptions; +import org.onap.policy.rest.jpa.PepOptions; import org.onap.policy.rest.jpa.PrefixList; import org.onap.policy.rest.jpa.ProtocolList; import org.onap.policy.rest.jpa.SecurityZone; import org.onap.policy.rest.jpa.ServiceList; import org.onap.policy.rest.jpa.TermList; import org.onap.policy.rest.jpa.UserInfo; -import org.onap.policy.rest.jpa.VNFType; -import org.onap.policy.rest.jpa.VSCLAction; +import org.onap.policy.rest.jpa.VnfType; +import org.onap.policy.rest.jpa.VsclAction; import org.onap.policy.rest.jpa.VarbindDictionary; import org.onap.policy.rest.jpa.Zone; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; +@Controller +public class DictionaryImportController { + private static final Logger LOGGER = FlexLogger.getLogger(DictionaryImportController.class); -import au.com.bytecode.opencsv.CSVReader; + private static CommonClassDao commonClassDao; + private static final String DESCRIPTION = "description"; + private static final String ERROR = "Error"; + private static final String DEPENDENCY = "dependency"; + @Autowired + public DictionaryImportController(CommonClassDao commonClassDao) { + setCommonClassDao(commonClassDao); + } -@Controller -public class DictionaryImportController { - private static final Logger LOGGER = FlexLogger.getLogger(DictionaryImportController.class); - - private String newFile; + public static void setCommonClassDao(CommonClassDao commonClassDao) { + DictionaryImportController.commonClassDao = commonClassDao; + } + + public DictionaryImportController() { + super(); + } + + @RequestMapping(value = {"/dictionary/import_dictionary"}, method = {RequestMethod.POST}) + public void importDictionaryData(HttpServletRequest request, HttpServletResponse response) throws IOException { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + String userId = request.getParameter("userId"); + String dictionaryName = request.getParameter("dictionaryName"); + + if (dictionaryName == null || dictionaryName.isEmpty()) { + LOGGER.error("dictionaryName is null/empty"); + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + response.getWriter().write(ERROR); + return; + } + + // fix Fortify Path Manipulation issue + if (!isValidDictionaryName(dictionaryName)) { + LOGGER.error("dictionaryName is invalid"); + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + response.getWriter().write(ERROR); + return; + } + File file = new File(dictionaryName); + try (OutputStream outputStream = new FileOutputStream(file); + FileReader fileReader = new FileReader(file.toString())) { + IOUtils.copy(request.getInputStream(), outputStream); + CSVReader csvReader = new CSVReader(fileReader); + List dictSheet = csvReader.readAll(); + if (dictionaryName.startsWith("Attribute")) { + for (int i = 1; i < dictSheet.size(); i++) { + Attribute attribute = new Attribute(""); + UserInfo userinfo = new UserInfo(); + userinfo.setUserLoginId(userId); + attribute.setUserCreatedBy(userinfo); + attribute.setUserModifiedBy(userinfo); + String[] rows = dictSheet.get(i); + for (int j = 0; j < rows.length; j++) { + if ("xacml_id".equalsIgnoreCase(dictSheet.get(0)[j]) + || "Attribute ID".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setXacmlId(rows[j]); + } + if (DESCRIPTION.equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setDescription(rows[j]); + } + if ("priority".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setPriority(rows[j]); + } + if ("datatype".equalsIgnoreCase(dictSheet.get(0)[j]) + || "Data Type".equalsIgnoreCase(dictSheet.get(0)[j])) { + Datatype dataType = new Datatype(); + if ("string".equalsIgnoreCase(rows[j])) { + dataType.setId(26); + } else if ("integer".equalsIgnoreCase(rows[j])) { + dataType.setId(12); + } else if ("double".equalsIgnoreCase(rows[j])) { + dataType.setId(25); + } else if ("boolean".equalsIgnoreCase(rows[j])) { + dataType.setId(18); + } else if ("user".equalsIgnoreCase(rows[j])) { + dataType.setId(29); + } + attribute.setDatatypeBean(dataType); + Category category = new Category(); + category.setId(5); + attribute.setCategoryBean(category); + } + if ("attribute_value".equalsIgnoreCase(dictSheet.get(0)[j]) + || "Attribute Value".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setAttributeValue(rows[j]); + } + } + commonClassDao.save(attribute); + } + } + if (dictionaryName.startsWith("ActionPolicyDictionary")) { + for (int i = 1; i < dictSheet.size(); i++) { + ActionPolicyDict attribute = new ActionPolicyDict(); + UserInfo userinfo = new UserInfo(); + userinfo.setUserLoginId(userId); + attribute.setUserCreatedBy(userinfo); + attribute.setUserModifiedBy(userinfo); + String[] rows = dictSheet.get(i); + for (int j = 0; j < rows.length; j++) { + if ("attribute_name".equalsIgnoreCase(dictSheet.get(0)[j]) + || "Attribute Name".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setAttributeName(rows[j]); + } + if ("body".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setBody(rows[j]); + } + if (DESCRIPTION.equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setDescription(rows[j]); + } + if ("headers".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setHeader(rows[j]); + } + if ("method".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setMethod(rows[j]); + } + if ("type".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setType(rows[j]); + } + if ("url".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setUrl(rows[j]); + } + } + commonClassDao.save(attribute); + } + } + if (dictionaryName.startsWith("OnapName")) { + for (int i = 1; i < dictSheet.size(); i++) { + OnapName attribute = new OnapName(); + UserInfo userinfo = new UserInfo(); + userinfo.setUserLoginId(userId); + attribute.setUserCreatedBy(userinfo); + attribute.setUserModifiedBy(userinfo); + String[] rows = dictSheet.get(i); + for (int j = 0; j < rows.length; j++) { + if ("onap_name".equalsIgnoreCase(dictSheet.get(0)[j]) + || "Onap Name".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setName(rows[j]); + } + if (DESCRIPTION.equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setDescription(rows[j]); + } + } + commonClassDao.save(attribute); + } + } + + if (dictionaryName.startsWith("MSPolicyDictionary")) { + for (int i = 1; i < dictSheet.size(); i++) { + MicroServiceModels attribute = new MicroServiceModels(); + UserInfo userinfo = new UserInfo(); + userinfo.setUserLoginId(userId); + attribute.setUserCreatedBy(userinfo); + String[] rows = dictSheet.get(i); + for (int j = 0; j < rows.length; j++) { + if ("modelName".equalsIgnoreCase(dictSheet.get(0)[j]) + || "Micro Service Model".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setModelName(rows[j]); + } + if ("version".equalsIgnoreCase(dictSheet.get(0)[j]) + || "Model Version".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setVersion(rows[j]); + } + if (DESCRIPTION.equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setDescription(rows[j]); + } + if (DEPENDENCY.equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setDependency(rows[j]); + } + if ("attributes".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setAttributes(rows[j]); + } + if ("enumValues".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setEnumValues(rows[j]); + } + if ("Ref Attributes".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setRefAttributes(rows[j]); + } + if ("Sub Attributes".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setSubAttributes(rows[j]); + } + if ("annotations".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setAnnotation(rows[j]); + } + } - private static CommonClassDao commonClassDao; - private static final String DESCRIPTION= "description"; - - @Autowired - public DictionaryImportController(CommonClassDao commonClassDao){ - DictionaryImportController.commonClassDao = commonClassDao; - } - - public DictionaryImportController(){} + commonClassDao.save(attribute); + } + } + if (dictionaryName.startsWith("OptimizationPolicyDictionary")) { + for (int i = 1; i < dictSheet.size(); i++) { + MicroServiceModels attribute = new MicroServiceModels(); + UserInfo userinfo = new UserInfo(); + userinfo.setUserLoginId(userId); + attribute.setUserCreatedBy(userinfo); + String[] rows = dictSheet.get(i); + for (int j = 0; j < rows.length; j++) { + if ("modelName".equalsIgnoreCase(dictSheet.get(0)[j]) + || "Optimization Service Model".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setModelName(rows[j]); + } + if ("version".equalsIgnoreCase(dictSheet.get(0)[j]) + || "Model Version".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setVersion(rows[j]); + } + if (DESCRIPTION.equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setDescription(rows[j]); + } + if (DEPENDENCY.equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setDependency(rows[j]); + } + if ("attributes".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setAttributes(rows[j]); + } + if ("enumValues".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setEnumValues(rows[j]); + } + if ("Ref Attributes".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setRefAttributes(rows[j]); + } + if ("Sub Attributes".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setSubAttributes(rows[j]); + } + if ("annotations".equalsIgnoreCase(dictSheet.get(0)[j])) { + attribute.setAnnotation(rows[j]); + } + } - @RequestMapping(value={"/dictionary/import_dictionary"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) - public void ImportDictionaryData(HttpServletRequest request, HttpServletResponse response) throws IOException{ - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - String userId = request.getParameter("userId"); - String dictionaryName = request.getParameter("dictionaryName"); - - if(dictionaryName == null || dictionaryName.isEmpty()){ - LOGGER.error("dictionaryName is null/empty"); - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - response.getWriter().write("Error"); - return; - } - - boolean dictionaryImportExists = false; - try{ - File file = new File(dictionaryName); - OutputStream outputStream = new FileOutputStream(file); - IOUtils.copy(request.getInputStream(), outputStream); - outputStream.close(); - this.newFile = file.toString(); - CSVReader csvReader = new CSVReader(new FileReader(this.newFile)); - List dictSheet = csvReader.readAll(); - if(dictionaryName.startsWith("Attribute")){ - dictionaryImportExists = true; - for(int i = 1; i< dictSheet.size(); i++){ - Attribute attribute = new Attribute(""); - UserInfo userinfo = new UserInfo(); - userinfo.setUserLoginId(userId); - attribute.setUserCreatedBy(userinfo); - attribute.setUserModifiedBy(userinfo); - String[] rows = dictSheet.get(i); - for (int j=0 ; j