diff options
Diffstat (limited to 'ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components')
16 files changed, 2312 insertions, 3709 deletions
diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/ActionPolicy.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/ActionPolicy.java index b6e003c91..b6a959bfc 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/ActionPolicy.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/ActionPolicy.java @@ -26,14 +26,12 @@ import java.io.FileWriter; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; import javax.persistence.Query; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType; @@ -52,17 +50,13 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter; +import org.openecomp.policy.pap.xacml.rest.XACMLPapServlet; import org.openecomp.policy.pap.xacml.rest.util.JPAUtils; +import org.openecomp.policy.rest.adapter.PolicyRestAdapter; import org.openecomp.policy.rest.jpa.ActionPolicyDict; import org.openecomp.policy.rest.jpa.Datatype; import org.openecomp.policy.rest.jpa.FunctionDefinition; - import org.openecomp.policy.xacml.api.XACMLErrorConstants; - import org.openecomp.policy.common.logging.eelf.MessageCodes; import org.openecomp.policy.common.logging.eelf.PolicyLogger; import org.openecomp.policy.common.logging.flexlogger.FlexLogger; @@ -71,14 +65,11 @@ import org.openecomp.policy.common.logging.flexlogger.Logger; public class ActionPolicy extends Policy { /** - * Config Fields + * ActionPolicy Fields */ - private static final Logger logger = FlexLogger.getLogger(ConfigPolicy.class); - + private static final Logger LOGGER = FlexLogger.getLogger(ActionPolicy.class); + public static final String JSON_CONFIG = "JSON"; - public static final String XML_CONFIG = "XML"; - public static final String PROPERTIES_CONFIG = "PROPERTIES"; - public static final String OTHER_CONFIG = "OTHER"; public static final String PDP_ACTION = "PDP"; public static final String PEP_ACTION = "PEP"; @@ -95,6 +86,9 @@ public class ActionPolicy extends Policy { public static final String URL_ATTRIBUTEID = "url"; public static final String BODY_ATTRIBUTEID = "body"; + public static boolean isAttribute = false; + + List<String> dynamicLabelRuleAlgorithms = new LinkedList<String>(); List<String> dynamicFieldFunctionRuleAlgorithms = new LinkedList<String>(); List<String> dynamicFieldOneRuleAlgorithms = new LinkedList<String>(); @@ -102,6 +96,7 @@ public class ActionPolicy extends Policy { protected Map<String, String> dropDownMap = new HashMap<String, String>(); + public ActionPolicy() { super(); } @@ -119,6 +114,11 @@ public class ActionPolicy extends Policy { return successMap; } + if(!ActionPolicy.isAttribute) { + successMap.put("invalidAttribute", "Action Attrbute was not in the database."); + return successMap; + } + if(!isPreparedToSave()){ //Prep and configure the policy for saving prepareToSave(); @@ -126,12 +126,8 @@ public class ActionPolicy extends Policy { // Until here we prepared the data and here calling the method to create xml. Path newPolicyPath = null; - newPolicyPath = Paths.get(policyAdapter.getParentPath().toString(), policyName); + newPolicyPath = Paths.get(policyAdapter.getNewFileName()); successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject() ); - if (successMap.containsKey("success")) { - Path finalPolicyPath = getFinalPolicyPath(); - policyAdapter.setFinalPolicyPath(finalPolicyPath.toString()); - } return successMap; } @@ -147,12 +143,7 @@ public class ActionPolicy extends Policy { int version = 0; String policyID = policyAdapter.getPolicyID(); - - if (policyAdapter.isEditPolicy()) { - version = policyAdapter.getHighestVersion() + 1; - } else { - version = 1; - } + version = policyAdapter.getHighestVersion(); // Create the Instance for pojo, PolicyType object is used in marshalling. if (policyAdapter.getPolicyType().equals("Action")) { @@ -164,38 +155,23 @@ public class ActionPolicy extends Policy { policyAdapter.setData(policyConfig); } + policyName = policyAdapter.getNewFileName(); + if (policyAdapter.getData() != null) { - - // Save off everything - // making ready all the required elements to generate the action policy xml. - // Get the uniqueness for policy name. - Path newFile = getNextFilename(Paths.get(policyAdapter.getParentPath().toString()), policyAdapter.getPolicyType(), policyAdapter.getPolicyName(), version); - if (newFile == null) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Policy already Exists, cannot create the policy."); - PolicyLogger.error("Policy already Exists, cannot create the policy."); - setPolicyExists(true); - return false; - } - policyName = newFile.getFileName().toString(); - // Action body is optional so checking value provided or not - //String actionBodyString = policyAdapter.getActionBody(); String comboDictValue = policyAdapter.getActionAttribute(); String actionBody = getActionPolicyDict(comboDictValue).getBody(); - if(!(actionBody==null || "".equals(actionBody))){ + if(!(actionBody==null || "".equals(actionBody))){ saveActionBody(policyName, actionBody); - } - - // Make sure the filename ends with an extension - if (policyName.endsWith(".xml") == false) { - policyName = policyName + ".xml"; + } else { + if(!isAttribute){ + LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Could not find " + comboDictValue + " in the ActionPolicyDict table."); + return false; + } } PolicyType actionPolicy = (PolicyType) policyAdapter.getData(); - actionPolicy.setDescription(policyAdapter.getPolicyDescription()); - actionPolicy.setRuleCombiningAlgId(policyAdapter.getRuleCombiningAlgId()); AllOfType allOf = new AllOfType(); @@ -252,7 +228,6 @@ public class ActionPolicy extends Policy { condition.setExpression(new ObjectFactory().createApply(actionApply)); isCompound = true; } - } // if rule algorithm not a compound if (!isCompound) { @@ -265,8 +240,6 @@ public class ActionPolicy extends Policy { actionPolicy.getCombinerParametersOrRuleCombinerParametersOrVariableDefinition().add(rule); policyAdapter.setPolicyData(actionPolicy); } else { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + "Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); } @@ -276,69 +249,25 @@ public class ActionPolicy extends Policy { // Saving the json Configurations file if exists at server location for action policy. private void saveActionBody(String policyName, String actionBodyData) { - int version = 0; - int highestVersion = 0; - String domain = getParentPathSubScopeDir(); - String path = domain.replace('\\', '.'); - String removeExtension = policyName.substring(0, policyName.indexOf(".xml")); - String removeVersion = removeExtension.substring(0, removeExtension.indexOf(".")); - if (policyAdapter.isEditPolicy()) { - highestVersion = policyAdapter.getHighestVersion(); - if(highestVersion != 0){ - version = highestVersion + 1; - } - } else { - version = 1; - } - if(path.contains("/")){ - path = domain.replace('/', '.'); - logger.info("print the path:" +path); - } try { - - File file = new File(ACTION_HOME + File.separator + path + "." + removeVersion + "." + version + ".json"); - - if (logger.isDebugEnabled()) - logger.debug("The action body is at " + file.getAbsolutePath()); - - // if file doesn't exists, then create it - if (!file.exists()) { - file.createNewFile(); - } - File configHomeDir = new File(ACTION_HOME); - File[] listOfFiles = configHomeDir.listFiles(); - if (listOfFiles != null){ - for(File eachFile : listOfFiles){ - if(eachFile.isFile()){ - String fileNameWithoutExtension = FilenameUtils.removeExtension(eachFile.getName()); - String actionFileNameWithoutExtension = FilenameUtils.removeExtension(path + "." + policyName); - if (fileNameWithoutExtension.equals(actionFileNameWithoutExtension)){ - //delete the file - if (logger.isInfoEnabled()) - logger.info("Deleting action body is at " + eachFile.getAbsolutePath()); - eachFile.delete(); - } - } - } + if(policyName.endsWith(".xml")){ + policyName = policyName.replace(".xml", ""); } + File file = new File(ACTION_HOME+ File.separator + policyName + ".json"); FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); bw.write(actionBodyData); bw.close(); - - if (logger.isInfoEnabled()) { - logger.info("Action Body is succesfully saved at " + file.getAbsolutePath()); + if (LOGGER.isInfoEnabled()) { + LOGGER.info("Action Body is succesfully saved at " + file.getAbsolutePath()); } } catch (IOException e) { e.printStackTrace(); } - } // Data required for obligation part is setting here. private ObligationExpressionsType getObligationExpressions() { - - // TODO: add code to get all these values from dictionary ObligationExpressionsType obligations = new ObligationExpressionsType(); ObligationExpressionType obligation = new ObligationExpressionType(); @@ -407,17 +336,7 @@ public class ActionPolicy extends Policy { AttributeValueType jsonURLAttributeValue = new AttributeValueType(); jsonURLAttributeValue.setDataType(URI_DATATYPE); - final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString());; - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex1 = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex1, policyDir.length()); - logger.info("print the main domain value"+policyDir); - String path = policyDir.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir.replace('/', '.'); - logger.info("print the path:" +path); - } - jsonURLAttributeValue.getContent().add(CONFIG_URL + "/Action/" + path + "." +FilenameUtils.removeExtension(policyName) + ".json"); + jsonURLAttributeValue.getContent().add(CONFIG_URL + "/Action/" + policyName + ".json"); assignmentJsonURL.setExpression(new ObjectFactory().createAttributeValue(jsonURLAttributeValue)); obligation.getAttributeAssignmentExpression().add(assignmentJsonURL); @@ -428,7 +347,6 @@ public class ActionPolicy extends Policy { if(headerVal != null && !headerVal.equals("")){ // parse it on : to get number of headers String[] result = headerVal.split(":"); - System.out.println(Arrays.toString(result)); for (String eachString : result){ // parse each value on = String[] textFieldVals = eachString.split("="); @@ -567,9 +485,8 @@ public class ActionPolicy extends Policy { private Map<String,String> createDropDownMap(){ JPAUtils jpaUtils = null; try { - jpaUtils = JPAUtils.getJPAUtilsInstance(policyAdapter.getEntityManagerFactory()); + jpaUtils = JPAUtils.getJPAUtilsInstance(XACMLPapServlet.getEmf()); } catch (Exception e) { - // TODO Auto-generated catch block e.printStackTrace(); } Map<Datatype, List<FunctionDefinition>> functionMap = jpaUtils.getFunctionDatatypeMap(); @@ -587,32 +504,19 @@ public class ActionPolicy extends Policy { private ActionPolicyDict getActionPolicyDict(String attributeName){ ActionPolicyDict retObj = new ActionPolicyDict(); - //EntityManagerFactory emf = policyAdapter.getEntityManagerFactory(); - //EntityManager em = emf.createEntityManager(); - EntityManager em = policyAdapter.getEntityManagerFactory().createEntityManager(); + EntityManager em = XACMLPapServlet.getEmf().createEntityManager(); Query getActionPolicyDicts = em.createNamedQuery("ActionPolicyDict.findAll"); List<?> actionPolicyDicts = getActionPolicyDicts.getResultList(); for (Object id : actionPolicyDicts) { - //ActionPolicyDict actionPolicyList = actionPolicyDicts.getItem(id).getEntity(); ActionPolicyDict actionPolicy = (ActionPolicyDict) id; if(attributeName.equals(actionPolicy.getAttributeName())){ + isAttribute = true; retObj = actionPolicy; break; } } - - try{ - em.getTransaction().commit(); - } catch(Exception e){ - try{ - em.getTransaction().rollback(); - } catch(Exception e2){ - e2.printStackTrace(); - } - } em.close(); - return retObj; } @@ -621,6 +525,4 @@ public class ActionPolicy extends Policy { return policyAdapter.getPolicyData(); } - - } diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/AutoPushPolicy.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/AutoPushPolicy.java index 61498e2ac..4d4859349 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/AutoPushPolicy.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/AutoPushPolicy.java @@ -28,21 +28,16 @@ import java.util.Iterator; import java.util.Properties; import java.util.Set; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.openecomp.policy.common.logging.eelf.MessageCodes; import org.openecomp.policy.common.logging.eelf.PolicyLogger; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; +import org.openecomp.policy.common.logging.flexlogger.FlexLogger; import org.openecomp.policy.common.logging.flexlogger.Logger; - -import org.openecomp.policy.xacml.api.XACMLErrorConstants; import org.openecomp.policy.xacml.api.pap.EcompPDPGroup; import org.openecomp.policy.xacml.api.pap.PAPPolicyEngine; - -import com.att.research.xacml.api.pap.PAPEngine; -import com.att.research.xacml.api.pap.PDPPolicy; import org.openecomp.policy.xacml.std.pap.StdPDPGroup; import org.openecomp.policy.xacml.std.pap.StdPDPPolicy; + +import com.att.research.xacml.api.pap.PDPPolicy; /** * Auto Push Policy based on the property file properties. * @@ -50,7 +45,7 @@ import org.openecomp.policy.xacml.std.pap.StdPDPPolicy; */ public class AutoPushPolicy { - private static final Logger logger = FlexLogger.getLogger(AutoPushPolicy.class); + private static final Logger LOGGER = FlexLogger.getLogger(AutoPushPolicy.class); private String filePath = null; private Properties properties; @@ -94,8 +89,8 @@ public class AutoPushPolicy { if(policyId.contains("\\")){ policyId = policyId.replace("\\", "."); } - logger.info("Policy ID : " + policyId); - logger.info("Policy Name : " + policyName); + LOGGER.info("Policy ID : " + policyId); + LOGGER.info("Policy Name : " + policyName); // Read in Groups for(EcompPDPGroup pdpGroup: papEngine.getEcompPDPGroups()){ String groupName = pdpGroup.getName(); @@ -121,8 +116,6 @@ public class AutoPushPolicy { } } } catch (Exception e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while processing the auto push for " + policyToCreateUpdate +"\n " + e.getMessage()); PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "AutoPushPolicy", "Error while processing the auto push for " + policyToCreateUpdate); } return changedGroups; @@ -133,15 +126,13 @@ public class AutoPushPolicy { properties.load(new FileInputStream(propFile)); oldModified = propFile.lastModified(); } catch (Exception e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while loading in the auto push properties file. " + propFile.toString()); PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "AutoPushPolicy", "Error while loading in the auto push properties file."); } } private StdPDPGroup addToGroup(String policyId, String policyName, String policyToCreateUpdate, StdPDPGroup pdpGroup) throws Exception{ // Add to group. Send Notification. - StdPDPPolicy policy = new StdPDPPolicy(policyId, true, policyName, Paths.get(policyToCreateUpdate).toUri()); + StdPDPPolicy policy = new StdPDPPolicy(policyId, true, policyName, null); //Get the current policies from the Group and Add the new one Set<PDPPolicy> currentPoliciesInGroup = pdpGroup.getPolicies(); Set<PDPPolicy> policies = new HashSet<PDPPolicy>(); @@ -156,7 +147,7 @@ public class AutoPushPolicy { for (PDPPolicy existingPolicy : currentPoliciesInGroup) { if (existingPolicy.getId().equals(selPolicy.getId())) { pdpGroup.removePolicyFromGroup(existingPolicy); - logger.debug("Removing policy: " + existingPolicy); + LOGGER.debug("Removing policy: " + existingPolicy); break; } } diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/ClosedLoopPolicy.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/ClosedLoopPolicy.java index 8c3e34d6e..c2ab845ae 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/ClosedLoopPolicy.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/ClosedLoopPolicy.java @@ -31,9 +31,15 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; -import java.util.StringTokenizer; -import javax.json.stream.JsonGenerationException; +import org.apache.commons.io.FilenameUtils; +import org.openecomp.policy.common.logging.eelf.MessageCodes; +import org.openecomp.policy.common.logging.eelf.PolicyLogger; +import org.openecomp.policy.common.logging.flexlogger.FlexLogger; +import org.openecomp.policy.common.logging.flexlogger.Logger; +import org.openecomp.policy.rest.adapter.PolicyRestAdapter; + +import com.att.research.xacml.std.IdentifierImpl; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionsType; @@ -47,26 +53,11 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObjectFactory; import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; - -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter; - -import com.att.research.xacml.std.IdentifierImpl; - -import org.openecomp.policy.common.logging.eelf.MessageCodes; -import org.openecomp.policy.common.logging.eelf.PolicyLogger; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; +import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; public class ClosedLoopPolicy extends Policy { - - /** - * Config Fields - */ - private static final Logger logger = FlexLogger.getLogger(ConfigPolicy.class); + + private static final Logger LOGGER = FlexLogger.getLogger(ClosedLoopPolicy.class); public ClosedLoopPolicy() { super(); @@ -77,13 +68,7 @@ public class ClosedLoopPolicy extends Policy { } //save configuration of the policy based on the policyname - private void saveConfigurations(String policyName, String prevPolicyName, String jsonBody) { - String domain = getParentPathSubScopeDir(); - String path = domain.replace('\\', '.'); - if(path.contains("/")){ - path = domain.replace('/', '.'); - logger.info("print the path:" +path); - } + private void saveConfigurations(String policyName, String jsonBody) { try { String body = jsonBody; try { @@ -91,27 +76,24 @@ public class ClosedLoopPolicy extends Policy { //Remove the trapMaxAge in Verification Signature body = body.replace(",\"trapMaxAge\":null", ""); }catch(Exception e){ - logger.debug("No Trap Max Age in JSON body"); + LOGGER.debug("No Trap Max Age in JSON body"); } this.policyAdapter.setJsonBody(body); } catch (Exception e) { e.printStackTrace(); } - System.out.println(body); if(policyName.endsWith(".xml")){ - policyName = policyName.substring(0, policyName.lastIndexOf(".xml")); + policyName = policyName.replace(".xml", ""); } - PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator+path + "."+ policyName +".json"); + PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator+ policyName +".json"); out.println(body); out.close(); - } catch (JsonGenerationException e) { + } catch (Exception e) { + LOGGER.error("Exception Occured while writing Configuration Data"+e); e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - + } } //Utility to read json data from the existing file to a string @@ -147,13 +129,9 @@ public class ClosedLoopPolicy extends Policy { // Until here we prepared the data and here calling the method to create xml. Path newPolicyPath = null; - newPolicyPath = Paths.get(policyAdapter.getParentPath().toString(), policyName); + newPolicyPath = Paths.get(policyAdapter.getNewFileName()); successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject()); - if (successMap.containsKey("success")) { - Path finalPolicyPath = getFinalPolicyPath(); - policyAdapter.setFinalPolicyPath(finalPolicyPath.toString()); - } return successMap; } @@ -169,12 +147,7 @@ public class ClosedLoopPolicy extends Policy { int version = 0; String policyID = policyAdapter.getPolicyID(); - - if (policyAdapter.isEditPolicy()) { - version = policyAdapter.getHighestVersion() + 1; - } else { - version = 1; - } + version = policyAdapter.getHighestVersion(); // Create the Instance for pojo, PolicyType object is used in marshalling. if (policyAdapter.getPolicyType().equals("Config")) { @@ -185,86 +158,11 @@ public class ClosedLoopPolicy extends Policy { policyConfig.setTarget(new TargetType()); policyAdapter.setData(policyConfig); } - + policyName = policyAdapter.getNewFileName(); if (policyAdapter.getData() != null) { - - //delete the closed loop draft file and configuration file, if validation is success after editing the draft policy - String prevPolicyName = null; - if(policyAdapter.isEditPolicy()){ - prevPolicyName = "Config_Fault_" + policyAdapter.getPolicyName() + "." + policyAdapter.getHighestVersion() + ".xml"; - - if (policyAdapter.isDraft()) { - policyName = "Config_Fault_" + policyAdapter.getPolicyName() + "_Draft"; - } else { - policyName = "Config_Fault_" + policyAdapter.getPolicyName(); - } - - //delete the closed loop draft configuration file, if validation is success after editing the draft policy - final Path gitPath = Paths.get(policyAdapter.getUserGitPath()); - String policyDir = policyAdapter.getParentPath(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - logger.info("print the main domain value"+policyDir); - String path = policyDir.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir.replace('/', '.'); - logger.info("print the path:" +path); - } - String fileName = FilenameUtils.removeExtension(policyName); - - final String tempPath = path; - String fileLocation = null; - if (fileName != null && fileName.contains("Config_Fault_")) { - fileLocation = CONFIG_HOME; - } - // Get the file from the saved location - File dir = new File(fileLocation); - File[] listOfFiles = dir.listFiles(); - for (File file : listOfFiles) { - String configFile = null; - if(!policyAdapter.isDraft()){ - configFile = fileName + "_Draft"; - }else{ - configFile = fileName; - } - if (file.isFile() && file.getName().contains( tempPath + "." + configFile)) { - try { - if (file.delete() == false) { - throw new Exception( - "No known error, Delete failed"); - } - } catch (Exception e) { - logger.error("Failed to Delete file: " - + e.getLocalizedMessage()); - } - } - } - } - - // Save off everything - // making ready all the required elements to generate the action policy xml. - // Get the uniqueness for policy name. - String policyName1 = null; - if(policyAdapter.isDraft()){ - policyName1 = policyAdapter.getPolicyName() + "_Draft"; - }else{ - policyName1 = policyAdapter.getPolicyName(); - } - - Path newFile = this.getNextLoopFilename(Paths.get(policyAdapter.getParentPath()), policyAdapter.getPolicyType(), policyAdapter.getConfigPolicyType(), policyName1, version); - if (newFile == null) { - //TODO:EELF Cleanup - Remove logger - //logger.error("File already exists, cannot create the policy."); - PolicyLogger.error("File already exists, cannot create the policy."); - setPolicyExists(true); - return false; - } - - policyName = newFile.getFileName().toString(); - // Save the Configurations file with the policy name with extention based on selection. String jsonBody = policyAdapter.getJsonBody(); - saveConfigurations(policyName, prevPolicyName, jsonBody); + saveConfigurations(policyName, jsonBody); // Make sure the filename ends with an extension if (policyName.endsWith(".xml") == false) { @@ -278,10 +176,7 @@ public class ClosedLoopPolicy extends Policy { faultPolicy.setRuleCombiningAlgId(policyAdapter.getRuleCombiningAlgId()); AllOfType allOfOne = new AllOfType(); - File policyFilePath = new File(policyAdapter.getParentPath().toString(), policyName); - String policyDir = policyFilePath.getParentFile().getName(); - String fileName = FilenameUtils.removeExtension(policyName); - fileName = policyDir + "." + fileName + ".xml"; + String fileName = policyAdapter.getNewFileName(); String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); @@ -331,8 +226,6 @@ public class ClosedLoopPolicy extends Policy { try { accessURI = new URI(ACTION_ID); } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(e.getStackTrace()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "CreateClosedLoopPolicy", "Exception creating ACCESS URI"); } accessAttributeDesignator.setCategory(CATEGORY_ACTION); @@ -352,8 +245,6 @@ public class ClosedLoopPolicy extends Policy { try { closedURI = new URI(RESOURCE_ID); } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(e.getStackTrace()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "CreateClosedLoopPolicy", "Exception creating closed URI"); } closedAttributeDesignator.setCategory(CATEGORY_RESOURCE); @@ -378,8 +269,6 @@ public class ClosedLoopPolicy extends Policy { policyAdapter.setPolicyData(faultPolicy); } else { - //TODO:EELF Cleanup - Remove logger - //logger.error("Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); PolicyLogger.error("Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); } @@ -405,7 +294,6 @@ public class ClosedLoopPolicy extends Policy { assignment1.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue)); advice.getAttributeAssignmentExpression().add(assignment1); - final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString()); // For Config file Url if configurations are provided. AttributeAssignmentExpressionType assignment2 = new AttributeAssignmentExpressionType(); assignment2.setAttributeId("URLID"); @@ -414,17 +302,7 @@ public class ClosedLoopPolicy extends Policy { AttributeValueType AttributeValue = new AttributeValueType(); AttributeValue.setDataType(URI_DATATYPE); - String policyDir1 = policyAdapter.getParentPath().toString(); - int startIndex1 = policyDir1.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir1 = policyDir1.substring(startIndex1, policyDir1.length()); - logger.info("print the main domain value"+policyDir1); - String path = policyDir1.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir1.replace('/', '.'); - logger.info("print the path:" +path); - } - - String content = CONFIG_URL +"/Config/" + path + "." + getConfigFile(policyName); + String content = CONFIG_URL +"/Config/" + getConfigFile(policyName); System.out.println("URL value :" + content); AttributeValue.getContent().add(content); assignment2.setExpression(new ObjectFactory().createAttributeValue(AttributeValue)); @@ -437,25 +315,8 @@ public class ClosedLoopPolicy extends Policy { AttributeValueType attributeValue3 = new AttributeValueType(); attributeValue3.setDataType(STRING_DATATYPE); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - StringTokenizer tokenizer = null; - StringBuffer buffer = new StringBuffer(); - if (policyDir.contains("\\")) { - tokenizer = new StringTokenizer(policyDir, "\\"); - } else { - tokenizer = new StringTokenizer(policyDir, "/"); - } - if (tokenizer != null) { - while (tokenizer.hasMoreElements()) { - String value = tokenizer.nextToken(); - buffer.append(value); - buffer.append("."); - } - } fileName = FilenameUtils.removeExtension(fileName); - fileName = buffer.toString() + fileName + ".xml"; + fileName = fileName + ".xml"; String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); @@ -477,7 +338,7 @@ public class ClosedLoopPolicy extends Policy { advice.getAttributeAssignmentExpression().add(assignment4); AttributeAssignmentExpressionType assignment5 = new AttributeAssignmentExpressionType(); - assignment5.setAttributeId("matching:" + this.ECOMPID); + assignment5.setAttributeId("matching:" + ECOMPID); assignment5.setCategory(CATEGORY_RESOURCE); assignment5.setIssuer(""); diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/ConfigPolicy.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/ConfigPolicy.java index a339b1564..ff8045890 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/ConfigPolicy.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/ConfigPolicy.java @@ -32,7 +32,6 @@ import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; import java.util.Scanner; -import java.util.StringTokenizer; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; @@ -53,30 +52,25 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; import org.apache.commons.io.FilenameUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter; import org.openecomp.policy.common.logging.eelf.MessageCodes; import org.openecomp.policy.common.logging.eelf.PolicyLogger; - +import org.openecomp.policy.common.logging.flexlogger.FlexLogger; +import org.openecomp.policy.common.logging.flexlogger.Logger; +import org.openecomp.policy.rest.adapter.PolicyRestAdapter; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; -import org.openecomp.policy.xacml.api.XACMLErrorConstants; import com.att.research.xacml.std.IdentifierImpl; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - public class ConfigPolicy extends Policy { /** * Config Fields */ - private static final Logger logger = FlexLogger.getLogger(ConfigPolicy.class); + private static final Logger LOGGER = FlexLogger.getLogger(ConfigPolicy.class); public static final String JSON_CONFIG = "JSON"; public static final String XML_CONFIG = "XML"; @@ -92,65 +86,25 @@ public class ConfigPolicy extends Policy { public ConfigPolicy(PolicyRestAdapter policyAdapter){ this.policyAdapter = policyAdapter; } - + // Saving the Configurations file at server location for config policy. protected void saveConfigurations(String policyName) { - final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString()); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - logger.info("print the main domain value"+policyDir); - String path = policyDir.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir.replace('/', '.'); - logger.info("print the path:" +path); - } - try { - File file; - String configFileName = getConfigFile(policyName); - if(CONFIG_HOME.contains("\\")) - { - file = new File(CONFIG_HOME + "\\" + path + "."+ configFileName); - } - else - { - file = new File(CONFIG_HOME + "/" + path + "."+ configFileName); - } - - // if file doesnt exists, then create it - if (!file.exists()) { - file.createNewFile(); - } - - - File configHomeDir = new File(CONFIG_HOME); - File[] listOfFiles = configHomeDir.listFiles(); - if (listOfFiles != null){ - for(File eachFile : listOfFiles){ - if(eachFile.isFile()){ - String fileNameWithoutExtension = FilenameUtils.removeExtension(eachFile.getName()); - String configFileNameWithoutExtension = FilenameUtils.removeExtension(path + "." + configFileName); - if (fileNameWithoutExtension.equals(configFileNameWithoutExtension)){ - //delete the file - eachFile.delete(); - } - } - } - } - - FileWriter fw = new FileWriter(file.getAbsoluteFile()); + String fileName = getConfigFile(policyName); + FileWriter fw = new FileWriter(CONFIG_HOME + File.separator + fileName); BufferedWriter bw = new BufferedWriter(fw); bw.write(configBodyData); bw.close(); - if (logger.isDebugEnabled()) { - logger.debug("Configuration is succesfully saved"); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Configuration is succesfully saved"); } } catch (IOException e) { + LOGGER.error("Exception Occured while writing Configuration Data"+e); e.printStackTrace(); } } + // Here we are adding the extension for the configurations file based on the // config type selection for saving. private String getConfigFile(String filename) { @@ -177,6 +131,7 @@ public class ConfigPolicy extends Policy { return filename; } + // Validations for Config form /* * FORM VALIDATION WILL BE DONE BY THE PAP-ADMIN before creating JSON object... @@ -295,12 +250,8 @@ public class ConfigPolicy extends Policy { // Until here we prepared the data and here calling the method to create xml. Path newPolicyPath = null; - newPolicyPath = Paths.get(policyAdapter.getParentPath().toString(), policyName); - successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject() ); - if (successMap.containsKey("success")) { - Path finalPolicyPath = getFinalPolicyPath(); - policyAdapter.setFinalPolicyPath(finalPolicyPath.toString()); - } + newPolicyPath = Paths.get(policyAdapter.getNewFileName()); + successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject()); return successMap; } @@ -310,18 +261,12 @@ public class ConfigPolicy extends Policy { public boolean prepareToSave() throws Exception{ if(isPreparedToSave()){ - //we have already done this return true; } - + int version = 0; String policyID = policyAdapter.getPolicyID(); - - if (policyAdapter.isEditPolicy()) { - version = policyAdapter.getHighestVersion() + 1; - } else { - version = 1; - } + version = policyAdapter.getHighestVersion(); // Create the Instance for pojo, PolicyType object is used in marshalling. if (policyAdapter.getPolicyType().equals("Config")) { @@ -333,52 +278,19 @@ public class ConfigPolicy extends Policy { policyAdapter.setData(policyConfig); } + policyName = policyAdapter.getNewFileName(); + configBodyData = policyAdapter.getConfigBodyData(); + saveConfigurations(policyName); + if (policyAdapter.getData() != null) { - - // Save off everything - // making ready all the required elements to generate the action policy xml. - // Get the uniqueness for policy name. - Path newFile = getNextFilename(Paths.get(policyAdapter.getParentPath().toString()), policyAdapter.getPolicyType(), policyAdapter.getPolicyName(), version); - if (newFile == null) { - //TODO:EELF Cleanup - Remove logger - //logger.error("File already exists"); - PolicyLogger.error("File alrady exists"); - setPolicyExists(true); - return false; - } - policyName = newFile.getFileName().toString(); - - // Body is optional so checking. - configBodyData = policyAdapter.getConfigBodyData(); - if (!configBodyData.equals("")) { - // Save the Configurations file with the policy name with extention based on selection. - saveConfigurations(policyName); - } - - // Make sure the filename ends with an extension - if (policyName.endsWith(".xml") == false) { - policyName = policyName + ".xml"; - } - - PolicyType configPolicy = (PolicyType) policyAdapter.getData(); configPolicy.setDescription(policyAdapter.getPolicyDescription()); configPolicy.setRuleCombiningAlgId(policyAdapter.getRuleCombiningAlgId()); AllOfType allOfOne = new AllOfType(); - final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString()); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - logger.info("print the main domain value "+policyDir); - String path = policyDir.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir.replace('/', '.'); - logger.info("print the path:" +path); - } - String fileName = FilenameUtils.removeExtension(policyName); - fileName = path + "." + fileName + ".xml"; + + String fileName = policyAdapter.getNewFileName(); String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); @@ -389,17 +301,13 @@ public class ConfigPolicy extends Policy { // Adding the matches to AllOfType element Match for Ecomp allOf.getMatch().add(createMatch("ECOMPName", policyAdapter.getEcompName())); // Match for riskType - allOf.getMatch().add( - createDynamicMatch("RiskType", policyAdapter.getRiskType())); + allOf.getMatch().add(createDynamicMatch("RiskType", policyAdapter.getRiskType())); // Match for riskLevel - allOf.getMatch().add( - createDynamicMatch("RiskLevel", String.valueOf(policyAdapter.getRiskLevel()))); + allOf.getMatch().add(createDynamicMatch("RiskLevel", String.valueOf(policyAdapter.getRiskLevel()))); // Match for riskguard - allOf.getMatch().add( - createDynamicMatch("guard", policyAdapter.getGuard())); + allOf.getMatch().add(createDynamicMatch("guard", policyAdapter.getGuard())); // Match for ttlDate - allOf.getMatch().add( - createDynamicMatch("TTLDate", policyAdapter.getTtlDate())); + allOf.getMatch().add(createDynamicMatch("TTLDate", policyAdapter.getTtlDate())); // Match for ConfigName allOf.getMatch().add(createMatch("ConfigName", policyAdapter.getConfigName())); @@ -425,7 +333,6 @@ public class ConfigPolicy extends Policy { RuleType rule = new RuleType(); rule.setRuleId(policyAdapter.getRuleID()); - rule.setEffect(EffectType.PERMIT); // Create Target in Rule @@ -439,11 +346,9 @@ public class ConfigPolicy extends Policy { accessMatch.setAttributeValue(accessAttributeValue); AttributeDesignatorType accessAttributeDesignator = new AttributeDesignatorType(); URI accessURI = null; - try { + try{ accessURI = new URI(ACTION_ID); - } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getStackTrace()); + }catch(URISyntaxException e){ PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "ConfigPolicy", "Exception creating ACCESS URI"); } accessAttributeDesignator.setCategory(CATEGORY_ACTION); @@ -460,11 +365,9 @@ public class ConfigPolicy extends Policy { configMatch.setAttributeValue(configAttributeValue); AttributeDesignatorType configAttributeDesignator = new AttributeDesignatorType(); URI configURI = null; - try { + try{ configURI = new URI(RESOURCE_ID); - } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getStackTrace()); + }catch(URISyntaxException e){ PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "ConfigPolicy", "Exception creating Config URI"); } configAttributeDesignator.setCategory(CATEGORY_RESOURCE); @@ -489,8 +392,6 @@ public class ConfigPolicy extends Policy { policyAdapter.setPolicyData(configPolicy); } else { - //TODO:EELF Cleanup - Remove logger - //logger.error("Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); PolicyLogger.error("Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); } setPreparedToSave(true); @@ -516,7 +417,6 @@ public class ConfigPolicy extends Policy { assignment1.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue)); advice.getAttributeAssignmentExpression().add(assignment1); - final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString()); // For Config file Url if configurations are provided. if (policyAdapter.getConfigType() != null) { @@ -527,18 +427,7 @@ public class ConfigPolicy extends Policy { AttributeValueType AttributeValue = new AttributeValueType(); AttributeValue.setDataType(URI_DATATYPE); - String policyDir1 = policyAdapter.getParentPath().toString(); - int startIndex1 = policyDir1.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir1 = policyDir1.substring(startIndex1, policyDir1.length()); - logger.info("print the main domain value"+policyDir1); - String path = policyDir1.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir1.replace('/', '.'); - logger.info("print the path:" +path); - } - - String content = "$URL" + "/Config/" + path + "." + getConfigFile(policyName); - System.out.println("URL value :" + content); + String content = "$URL" + "/Config/" + getConfigFile(policyName); AttributeValue.getContent().add(content); assignment2.setExpression(new ObjectFactory().createAttributeValue(AttributeValue)); @@ -550,25 +439,9 @@ public class ConfigPolicy extends Policy { AttributeValueType attributeValue3 = new AttributeValueType(); attributeValue3.setDataType(STRING_DATATYPE); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - StringTokenizer tokenizer = null; - StringBuffer buffer = new StringBuffer(); - if (policyDir.contains("\\")) { - tokenizer = new StringTokenizer(policyDir, "\\"); - } else { - tokenizer = new StringTokenizer(policyDir, "/"); - } - if (tokenizer != null) { - while (tokenizer.hasMoreElements()) { - String value = tokenizer.nextToken(); - buffer.append(value); - buffer.append("."); - } - } + fileName = FilenameUtils.removeExtension(fileName); - fileName = buffer.toString() + fileName + ".xml"; + fileName = fileName + ".xml"; String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); @@ -590,7 +463,7 @@ public class ConfigPolicy extends Policy { advice.getAttributeAssignmentExpression().add(assignment4); AttributeAssignmentExpressionType assignment5 = new AttributeAssignmentExpressionType(); - assignment5.setAttributeId("matching:" + this.ECOMPID); + assignment5.setAttributeId("matching:" + ECOMPID); assignment5.setCategory(CATEGORY_RESOURCE); assignment5.setIssuer(""); @@ -602,7 +475,7 @@ public class ConfigPolicy extends Policy { advice.getAttributeAssignmentExpression().add(assignment5); AttributeAssignmentExpressionType assignment6 = new AttributeAssignmentExpressionType(); - assignment6.setAttributeId("matching:" + this.CONFIGID); + assignment6.setAttributeId("matching:" + CONFIGID); assignment6.setCategory(CATEGORY_RESOURCE); assignment6.setIssuer(""); @@ -680,7 +553,6 @@ public class ConfigPolicy extends Policy { advice.getAttributeAssignmentExpression().add(assignment11); - advices.getAdviceExpression().add(advice); return advices; } diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateBRMSRuleTemplate.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateBRMSRuleTemplate.java new file mode 100644 index 000000000..2f122647d --- /dev/null +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateBRMSRuleTemplate.java @@ -0,0 +1,73 @@ +/*- + * ============LICENSE_START======================================================= + * ECOMP-PAP-REST + * ================================================================================ + * Copyright (C) 2017 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. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.openecomp.policy.pap.xacml.rest.components; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.openecomp.policy.common.logging.flexlogger.FlexLogger; +import org.openecomp.policy.common.logging.flexlogger.Logger; +import org.openecomp.policy.rest.dao.CommonClassDao; +import org.openecomp.policy.rest.jpa.BRMSParamTemplate; +import org.openecomp.policy.rest.jpa.UserInfo; +import org.openecomp.policy.utils.PolicyUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class CreateBRMSRuleTemplate { + private static final Logger LOGGER = FlexLogger.getLogger(CreateBRMSRuleTemplate.class); + private static CommonClassDao commonClassDao; + + @Autowired + public CreateBRMSRuleTemplate(CommonClassDao commonClassDao){ + CreateBRMSRuleTemplate.commonClassDao = commonClassDao; + } + + public CreateBRMSRuleTemplate() {} + + public Map<String, String> addRule(String rule, String ruleName, String description, String userID) { + Map<String,String> responseMap = new HashMap<String,String>(); + if(rule!=null && !PolicyUtils.brmsRawValidate(rule).contains("[ERR")){ + List<Object> duplicateData = commonClassDao.checkDuplicateEntry(ruleName, "ruleName", BRMSParamTemplate.class); + if(duplicateData!=null && !duplicateData.isEmpty()){ + LOGGER.error("Import new service failed. Service already exists"); + responseMap.put("DBError", "EXISTS"); + return responseMap; + }else{ + BRMSParamTemplate brmsParamTemplate = new BRMSParamTemplate(); + brmsParamTemplate.setDescription(description); + brmsParamTemplate.setRuleName(ruleName); + brmsParamTemplate.setRule(rule); + UserInfo userCreatedBy = (UserInfo) commonClassDao.getEntityItem(UserInfo.class, "userLoginId", userID); + brmsParamTemplate.setUserCreatedBy(userCreatedBy); + commonClassDao.save(brmsParamTemplate); + LOGGER.info("Template created with " + ruleName + " by " + userID); + } + responseMap.put("success", "success"); + }else{ + LOGGER.debug("Error during validating the rule for creating record for BRMS Param Template"); + responseMap.put("error", "VALIDATION"); + } + return responseMap; + } + +} diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateBrmsParamPolicy.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateBrmsParamPolicy.java index 6e18da524..0aaf1b1d2 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateBrmsParamPolicy.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateBrmsParamPolicy.java @@ -26,7 +26,6 @@ import java.io.PrintWriter; import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -35,14 +34,26 @@ import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; -import java.util.StringTokenizer; +import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.regex.Matcher; + +import org.apache.commons.io.FilenameUtils; +import org.openecomp.policy.common.logging.eelf.MessageCodes; +import org.openecomp.policy.common.logging.eelf.PolicyLogger; +import org.openecomp.policy.common.logging.flexlogger.FlexLogger; +import org.openecomp.policy.common.logging.flexlogger.Logger; +import org.openecomp.policy.pap.xacml.rest.controller.BRMSDictionaryController; +import org.openecomp.policy.rest.XACMLRestProperties; +import org.openecomp.policy.rest.adapter.PolicyRestAdapter; + +import com.att.research.xacml.std.IdentifierImpl; +import com.att.research.xacml.util.XACMLProperties; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionsType; @@ -56,26 +67,11 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObjectFactory; import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; - -import org.apache.commons.io.FilenameUtils; -import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter; -import org.openecomp.policy.rest.XACMLRestProperties; - -import com.att.research.xacml.std.IdentifierImpl; -import com.att.research.xacml.util.XACMLProperties; - -import org.openecomp.policy.common.logging.eelf.MessageCodes; -import org.openecomp.policy.common.logging.eelf.PolicyLogger; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; +import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; public class CreateBrmsParamPolicy extends Policy { - /** - * Config Fields - */ - private static final Logger logger = FlexLogger - .getLogger(CreateBrmsParamPolicy.class); + + private static final Logger LOGGER = FlexLogger.getLogger(CreateBrmsParamPolicy.class); /* * These are the parameters needed for DB access from the PAP @@ -95,16 +91,14 @@ public class CreateBrmsParamPolicy extends Policy { } - public String expandConfigBody(String ruleContents, - Map<String, String> brmsParamBody - ) { + public String expandConfigBody(String ruleContents, Map<String, String> brmsParamBody) { Set<String> keySet= new HashSet<String>(); Map<String,String> copyMap=new HashMap<>(); copyMap.putAll(brmsParamBody); - copyMap.put("policyName", policyAdapter.getPolicyName()); - copyMap.put("policyScope", policyAdapter.getPolicyScope()); + copyMap.put("policyName", policyName.substring(0, policyName.replace(".xml", "").lastIndexOf("."))); + copyMap.put("policyScope", policyAdapter.getDomainDir()); copyMap.put("policyVersion",policyAdapter.getHighestVersion().toString()); //Finding all the keys in the Map data-structure. @@ -127,90 +121,11 @@ public class CreateBrmsParamPolicy extends Policy { } ruleContents=m.replaceAll(finalInput); } - System.out.println(ruleContents); return ruleContents; } - // Saving the Configurations file at server location for config policy. - protected void saveConfigurations(String policyName, String prevPolicyName, - String ruleBody) { - final Path gitPath = Paths.get(policyAdapter.getUserGitPath() - .toString()); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) - + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - logger.info("print the main domain value" + policyDir); - String path = policyDir.replace('\\', '.'); - if (path.contains("/")) { - path = policyDir.replace('/', '.'); - logger.info("print the path:" + path); - } - - - String configFileName = getConfigFile(policyName); - try{ - // Getting the previous policy Config Json file to be used for - // updating the dictionary tables - if (policyAdapter.isEditPolicy()) { - - String prevConfigFileName = getConfigFile(prevPolicyName); - - File oldFile; - if (CONFIG_HOME.contains("\\")) { - oldFile = new File(CONFIG_HOME + "\\" + path + "." - + prevConfigFileName); - } else { - oldFile = new File(CONFIG_HOME + "/" + path + "." - + prevConfigFileName); - } - - String filepath = oldFile.toString(); - - String prevJsonBody = readFile(filepath, StandardCharsets.UTF_8); - policyAdapter.setPrevJsonBody(prevJsonBody); - } - - File configHomeDir = new File(CONFIG_HOME); - File[] listOfFiles = configHomeDir.listFiles(); - if (listOfFiles != null) { - for (File eachFile : listOfFiles) { - if (eachFile.isFile()) { - String fileNameWithoutExtension = FilenameUtils - .removeExtension(eachFile.getName()); - String configFileNameWithoutExtension = FilenameUtils - .removeExtension(configFileName); - if (fileNameWithoutExtension - .equals(configFileNameWithoutExtension)) { - // delete the file - eachFile.delete(); - } - } - } - } - } - catch(IOException e){ - - } - try { - - if (policyName.endsWith(".xml")) { - policyName = policyName.substring(0, - policyName.lastIndexOf(".xml")); - } - PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator - + path + "." + policyName + ".txt"); - String expandedBody=expandConfigBody(ruleBody,policyAdapter.getBrmsParamBody()); - out.println(expandedBody); - out.close(); - - } catch (Exception e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e); - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsParamPolicy", "Exception saving configuration file"); - } - } + // Utility to read json data from the existing file to a string static String readFile(String path, Charset encoding) throws IOException { @@ -218,6 +133,27 @@ public class CreateBrmsParamPolicy extends Policy { return new String(encoded, encoding); } + + // Saving the Configurations file at server location for config policy. + protected void saveConfigurations(String policyName, String ruleBody) { + try { + if (policyName.endsWith(".xml")) { + policyName = policyName.substring(0, + policyName.lastIndexOf(".xml")); + } + PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator + policyName + ".txt"); + String expandedBody=expandConfigBody(ruleBody,policyAdapter.getBrmsParamBody()); + out.println(expandedBody); + policyAdapter.setJsonBody(expandedBody); + policyAdapter.setConfigBodyData(expandedBody); + out.close(); + + + } catch (Exception e) { + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsParamPolicy", "Exception saving configuration file"); + } + } + // Here we are adding the extension for the configurations file based on the // config type selection for saving. @@ -255,30 +191,17 @@ public class CreateBrmsParamPolicy extends Policy { // Until here we prepared the data and here calling the method to create // xml. Path newPolicyPath = null; - newPolicyPath = Paths.get(policyAdapter.getParentPath().toString(), - policyName); + newPolicyPath = Paths.get(policyAdapter.getNewFileName()); Boolean dbIsUpdated = true; successMap = new HashMap<String, String>(); if (dbIsUpdated) { - successMap = createPolicy(newPolicyPath, - getCorrectPolicyDataObject()); + successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject()); } else { - //TODO:EELF Cleanup - Remove logger - //logger.error("Failed to Update the Database Dictionary Tables."); PolicyLogger.error("Failed to Update the Database Dictionary Tables."); - - // remove the new json file - String jsonBody = policyAdapter.getPrevJsonBody(); - saveConfigurations(policyName, "", jsonBody); successMap.put("error", "DB UPDATE"); } - - if (successMap.containsKey("success")) { - Path finalPolicyPath = getFinalPolicyPath(); - policyAdapter.setFinalPolicyPath(finalPolicyPath.toString()); - } return successMap; } @@ -313,22 +236,17 @@ public class CreateBrmsParamPolicy extends Policy { } rs.close(); }catch (ClassNotFoundException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(e.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "CreateBrmsParamPolicy", "Exception querying BRMSParamTemplate"); - System.out.println(e.getMessage()); - } catch (SQLException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(e.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "CreateBrmsParamPolicy", "Exception querying BRMSParamTemplate"); - System.out.println(e.getMessage()); } finally { try{ if (con!=null) con.close(); if (rs!=null) rs.close(); if (st!=null) st.close(); - } catch (Exception ex){} + } catch (Exception ex){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, ex, "CreateBrmsParamPolicy", "Exception querying BRMSParamTemplate"); + } } return ruleTemplate; @@ -421,8 +339,6 @@ public class CreateBrmsParamPolicy extends Policy { } } } catch (Exception e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e); PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "CreateBrmsParamPolicy", "Exception parsing file in findType"); } } @@ -443,13 +359,7 @@ public class CreateBrmsParamPolicy extends Policy { int version = 0; String policyID = policyAdapter.getPolicyID(); - - if (policyAdapter.isEditPolicy()) { - // version = Integer.parseInt(policyAdapter.getVersion()) + 1; - version = policyAdapter.getHighestVersion() + 1; - } else { - version = 1; - } + version = policyAdapter.getHighestVersion(); // Create the Instance for pojo, PolicyType object is used in // marshalling. @@ -462,33 +372,9 @@ public class CreateBrmsParamPolicy extends Policy { policyAdapter.setData(policyConfig); } - if (policyAdapter.getData() != null) { - - // Save off everything - // making ready all the required elements to generate the action - // policy xml. - // Get the uniqueness for policy name. - String prevPolicyName = null; - if (policyAdapter.isEditPolicy()) { - prevPolicyName = "Config_BRMS_Param_" + policyAdapter.getPolicyName() - + "." + policyAdapter.getHighestVersion() + ".xml"; - } - - Path newFile = getNextFilename( - Paths.get(policyAdapter.getParentPath().toString()), - (policyAdapter.getPolicyType() + "_BRMS_Param"), - policyAdapter.getPolicyName(), version); - - if (newFile == null) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Policy already Exists, cannot create the policy."); - PolicyLogger.error("Policy already Exists, cannot create the policy."); - setPolicyExists(true); - return false; - } - policyName = newFile.getFileName().toString(); - - + policyName = policyAdapter.getNewFileName(); + + if (policyAdapter.getData() != null) { Map<String,String> ruleAndUIValue= policyAdapter.getBrmsParamBody(); String tempateValue= ruleAndUIValue.get("templateName"); String valueFromDictionary= getValueFromDictionary(tempateValue); @@ -504,7 +390,7 @@ public class CreateBrmsParamPolicy extends Policy { body = "/* Autogenerated Code Please Don't change/remove this comment section. This is for the UI purpose. \n\t " + "<$%BRMSParamTemplate=" + tempateValue + "%$> \n */ \n"; body = body + valueFromDictionary + "\n"; - generatedRule = "rule \"Params\" \n\tsalience 1000 \n\twhen\n\tthen\n\t\tParams params = new Params();"; + generatedRule = "rule \"" +policyName.substring(0, policyName.replace(".xml", "").lastIndexOf(".")) +".Params\" \n\tsalience 1000 \n\twhen\n\tthen\n\t\tParams params = new Params();"; //We first read the map data structure(ruleAndUIValue) received from the PAP-ADMIN //We ignore if the key is "templateName as we are interested only in the UI fields and its value. @@ -537,22 +423,18 @@ public class CreateBrmsParamPolicy extends Policy { generatedRule = generatedRule + "\n\t\tinsert(params);\nend"; - logger.info("New rule generated with :" + generatedRule); + LOGGER.info("New rule generated with :" + generatedRule); body = body + generatedRule; } catch (Exception e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e); PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsParamPolicy", "Exception saving policy"); } } catch (Exception e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e); PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsParamPolicy", "Exception saving policy"); } - saveConfigurations(policyName,prevPolicyName,body); - + saveConfigurations(policyName,body); + // Make sure the filename ends with an extension if (policyName.endsWith(".xml") == false) { policyName = policyName + ".xml"; @@ -562,17 +444,12 @@ public class CreateBrmsParamPolicy extends Policy { configPolicy.setDescription(policyAdapter.getPolicyDescription()); - configPolicy.setRuleCombiningAlgId(policyAdapter - .getRuleCombiningAlgId()); + configPolicy.setRuleCombiningAlgId(policyAdapter.getRuleCombiningAlgId()); AllOfType allOfOne = new AllOfType(); - File policyFilePath = new File(policyAdapter.getParentPath() - .toString(), policyName); - String policyDir = policyFilePath.getParentFile().getName(); - String fileName = FilenameUtils.removeExtension(policyName); - fileName = policyDir + "." + fileName + ".xml"; - String name = fileName.substring(fileName.lastIndexOf("\\") + 1, - fileName.length()); + + String fileName = policyAdapter.getNewFileName(); + String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); @@ -583,22 +460,16 @@ public class CreateBrmsParamPolicy extends Policy { AllOfType allOf = new AllOfType(); // Match for ECOMPName - allOf.getMatch().add( - createMatch("ECOMPName", policyAdapter.getEcompName())); - allOf.getMatch().add( - createMatch("ConfigName", policyAdapter.getConfigName())); + allOf.getMatch().add(createMatch("ECOMPName", policyAdapter.getEcompName())); + allOf.getMatch().add(createMatch("ConfigName", policyAdapter.getConfigName())); // Match for riskType - allOf.getMatch().add( - createDynamicMatch("RiskType", policyAdapter.getRiskType())); + allOf.getMatch().add(createDynamicMatch("RiskType", policyAdapter.getRiskType())); // Match for riskLevel - allOf.getMatch().add( - createDynamicMatch("RiskLevel", String.valueOf(policyAdapter.getRiskLevel()))); + allOf.getMatch().add(createDynamicMatch("RiskLevel", String.valueOf(policyAdapter.getRiskLevel()))); // Match for riskguard - allOf.getMatch().add( - createDynamicMatch("guard", policyAdapter.getGuard())); + allOf.getMatch().add(createDynamicMatch("guard", policyAdapter.getGuard())); // Match for ttlDate - allOf.getMatch().add( - createDynamicMatch("TTLDate", policyAdapter.getTtlDate())); + allOf.getMatch().add(createDynamicMatch("TTLDate", policyAdapter.getTtlDate())); AnyOfType anyOf = new AnyOfType(); anyOf.getAllOf().add(allOfOne); anyOf.getAllOf().add(allOf); @@ -628,9 +499,6 @@ public class CreateBrmsParamPolicy extends Policy { try { accessURI = new URI(ACTION_ID); } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE - //+ e.getStackTrace()); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsParamPolicy", "Exception creating ACCESS URI"); } accessAttributeDesignator.setCategory(CATEGORY_ACTION); @@ -653,16 +521,12 @@ public class CreateBrmsParamPolicy extends Policy { try { configURI = new URI(RESOURCE_ID); } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE - //+ e.getStackTrace()); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsParamPolicy", "Exception creating Config URI"); } configAttributeDesignator.setCategory(CATEGORY_RESOURCE); configAttributeDesignator.setDataType(STRING_DATATYPE); - configAttributeDesignator.setAttributeId(new IdentifierImpl( - configURI).stringValue()); + configAttributeDesignator.setAttributeId(new IdentifierImpl(configURI).stringValue()); configMatch.setAttributeDesignator(configAttributeDesignator); configMatch.setMatchId(FUNCTION_STRING_EQUAL_IGNORE); @@ -684,9 +548,6 @@ public class CreateBrmsParamPolicy extends Policy { policyAdapter.setPolicyData(configPolicy); } else { - //TODO:EELF Cleanup - Remove logger - //logger.error("Unsupported data object." - //+ policyAdapter.getData().getClass().getCanonicalName()); PolicyLogger.error("Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); } @@ -717,26 +578,14 @@ public class CreateBrmsParamPolicy extends Policy { // For Config file Url if configurations are provided. // URL ID Assignment - final Path gitPath = Paths.get(policyAdapter.getUserGitPath() - .toString()); AttributeAssignmentExpressionType assignment2 = new AttributeAssignmentExpressionType(); assignment2.setAttributeId("URLID"); assignment2.setCategory(CATEGORY_RESOURCE); assignment2.setIssuer(""); AttributeValueType AttributeValue = new AttributeValueType(); AttributeValue.setDataType(URI_DATATYPE); - String policyDir1 = policyAdapter.getParentPath().toString(); - int startIndex1 = policyDir1.indexOf(gitPath.toString()) - + gitPath.toString().length() + 1; - policyDir1 = policyDir1.substring(startIndex1, policyDir1.length()); - logger.info("print the main domain value" + policyDir1); - String path = policyDir1.replace('\\', '.'); - if (path.contains("/")) { - path = policyDir1.replace('/', '.'); - logger.info("print the path:" + path); - } - String content = CONFIG_URL + "/Config/" + path + "." - + getConfigFile(policyName); + + String content = CONFIG_URL + "/Config/"+ getConfigFile(policyName); AttributeValue.getContent().add(content); assignment2.setExpression(new ObjectFactory() @@ -750,34 +599,14 @@ public class CreateBrmsParamPolicy extends Policy { assignment3.setIssuer(""); AttributeValueType attributeValue3 = new AttributeValueType(); attributeValue3.setDataType(STRING_DATATYPE); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) - + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - StringTokenizer tokenizer = null; - StringBuffer buffer = new StringBuffer(); - if (policyDir.contains("\\")) { - tokenizer = new StringTokenizer(policyDir, "\\"); - } else { - tokenizer = new StringTokenizer(policyDir, "/"); - } - if (tokenizer != null) { - while (tokenizer.hasMoreElements()) { - String value = tokenizer.nextToken(); - buffer.append(value); - buffer.append("."); - } - } fileName = FilenameUtils.removeExtension(fileName); - fileName = buffer.toString() + fileName + ".xml"; - System.out.println(fileName); + fileName = fileName + ".xml"; String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); } - System.out.println(name); attributeValue3.getContent().add(name); assignment3.setExpression(new ObjectFactory() .createAttributeValue(attributeValue3)); @@ -797,7 +626,7 @@ public class CreateBrmsParamPolicy extends Policy { // Ecomp Name Assignment AttributeAssignmentExpressionType assignment5 = new AttributeAssignmentExpressionType(); - assignment5.setAttributeId("matching:" + this.ECOMPID); + assignment5.setAttributeId("matching:" + ECOMPID); assignment5.setCategory(CATEGORY_RESOURCE); assignment5.setIssuer(""); AttributeValueType configNameAttributeValue5 = new AttributeValueType(); @@ -810,7 +639,7 @@ public class CreateBrmsParamPolicy extends Policy { //Config Name Assignment AttributeAssignmentExpressionType assignment6 = new AttributeAssignmentExpressionType(); - assignment6.setAttributeId("matching:" + this.CONFIGID); + assignment6.setAttributeId("matching:" +CONFIGID); assignment6.setCategory(CATEGORY_RESOURCE); assignment6.setIssuer(""); AttributeValueType configNameAttributeValue6 = new AttributeValueType(); @@ -818,22 +647,31 @@ public class CreateBrmsParamPolicy extends Policy { configNameAttributeValue6.getContent().add(policyAdapter.getConfigName()); assignment6.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue6)); advice.getAttributeAssignmentExpression().add(assignment6); - + // Adding Controller Information. + if(policyAdapter.getBrmsController()!=null){ + BRMSDictionaryController brmsDicitonaryController = new BRMSDictionaryController(); + advice.getAttributeAssignmentExpression().add( + createResponseAttributes("controller:"+ policyAdapter.getBrmsController(), + brmsDicitonaryController.getControllerDataByID(policyAdapter.getBrmsController()).getController())); + } + + // Adding Dependencies. + if(policyAdapter.getBrmsDependency()!=null){ + BRMSDictionaryController brmsDicitonaryController = new BRMSDictionaryController(); + ArrayList<String> dependencies = new ArrayList<String>(); + StringBuilder key = new StringBuilder(); + for(String dependencyName: policyAdapter.getBrmsDependency()){ + dependencies.add(brmsDicitonaryController.getDependencyDataByID(dependencyName).getDependency()); + key.append(dependencyName + ","); + } + advice.getAttributeAssignmentExpression().add( + createResponseAttributes("dependencies:"+key.toString(), dependencies.toString())); + } + + // Dynamic Field Config Attributes. Map<String, String> dynamicFieldConfigAttributes = policyAdapter.getDynamicFieldConfigAttributes(); for (String keyField : dynamicFieldConfigAttributes.keySet()) { - String key = keyField; - String value = dynamicFieldConfigAttributes.get(key); - AttributeAssignmentExpressionType assignment7 = new AttributeAssignmentExpressionType(); - assignment7.setAttributeId("key:" + key); - assignment7.setCategory(CATEGORY_RESOURCE); - assignment7.setIssuer(""); - - AttributeValueType configNameAttributeValue7 = new AttributeValueType(); - configNameAttributeValue7.setDataType(STRING_DATATYPE); - configNameAttributeValue7.getContent().add(value); - assignment7.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue7)); - - advice.getAttributeAssignmentExpression().add(assignment7); + advice.getAttributeAssignmentExpression().add(createResponseAttributes("key:"+keyField, dynamicFieldConfigAttributes.get(keyField))); } //Risk Attributes @@ -893,4 +731,16 @@ public class CreateBrmsParamPolicy extends Policy { public Object getCorrectPolicyDataObject() { return policyAdapter.getData(); } + + private AttributeAssignmentExpressionType createResponseAttributes(String key, String value){ + AttributeAssignmentExpressionType assignment7 = new AttributeAssignmentExpressionType(); + assignment7.setAttributeId(key); + assignment7.setCategory(CATEGORY_RESOURCE); + assignment7.setIssuer(""); + AttributeValueType configNameAttributeValue7 = new AttributeValueType(); + configNameAttributeValue7.setDataType(STRING_DATATYPE); + configNameAttributeValue7.getContent().add(value); + assignment7.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue7)); + return assignment7; + } } diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateBrmsRawPolicy.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateBrmsRawPolicy.java index d77abf0f1..dfd647c6e 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateBrmsRawPolicy.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateBrmsRawPolicy.java @@ -27,13 +27,20 @@ import java.io.PrintWriter; import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; -import java.util.StringTokenizer; + +import org.apache.commons.io.FilenameUtils; +import org.openecomp.policy.common.logging.eelf.MessageCodes; +import org.openecomp.policy.common.logging.eelf.PolicyLogger; +import org.openecomp.policy.pap.xacml.rest.controller.BRMSDictionaryController; +import org.openecomp.policy.rest.adapter.PolicyRestAdapter; + +import com.att.research.xacml.std.IdentifierImpl; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionsType; @@ -49,29 +56,9 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; -import org.apache.commons.io.FilenameUtils; -import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter; - -import com.att.research.xacml.std.IdentifierImpl; - -import org.openecomp.policy.common.logging.eelf.MessageCodes; -import org.openecomp.policy.common.logging.eelf.PolicyLogger; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - public class CreateBrmsRawPolicy extends Policy { - /** - * Config Fields - */ - private static final Logger logger = FlexLogger - .getLogger(CreateBrmsRawPolicy.class); - - public static final String JSON_CONFIG = "JSON"; - public static final String XML_CONFIG = "XML"; - public static final String PROPERTIES_CONFIG = "PROPERTIES"; - public static final String OTHER_CONFIG = "OTHER"; - + public CreateBrmsRawPolicy() { super(); } @@ -82,104 +69,19 @@ public class CreateBrmsRawPolicy extends Policy { } - // Saving the Configurations file at server location for config policy. - protected void saveConfigurations(String policyName, String prevPolicyName, - String jsonBody) { - final Path gitPath = Paths.get(policyAdapter.getUserGitPath() - .toString()); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) - + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - logger.info("print the main domain value" + policyDir); - String path = policyDir.replace('\\', '.'); - if (path.contains("/")) { - path = policyDir.replace('/', '.'); - logger.info("print the path:" + path); - } - + // Saving the Configurations file at server location for CreateBrmsRawPolicy policy. + protected void saveConfigurations(String policyName, String jsonBody) { try { - String configFileName = getConfigFile(policyName); - - File file; - if (CONFIG_HOME.contains("\\")) { - file = new File(CONFIG_HOME + "\\" + path + "." - + configFileName); - } else { - file = new File(CONFIG_HOME + "/" + path + "." + configFileName); - } - - // if file doesnt exists, then create it - if (!file.exists()) { - file.createNewFile(); - } - - // Getting the previous policy Config Json file to be used for - // updating the dictionary tables - if (policyAdapter.isEditPolicy()) { - - String prevConfigFileName = getConfigFile(prevPolicyName); - - File oldFile; - if (CONFIG_HOME.contains("\\")) { - oldFile = new File(CONFIG_HOME + "\\" + path + "." - + prevConfigFileName); - } else { - oldFile = new File(CONFIG_HOME + "/" + path + "." - + prevConfigFileName); - } - - String filepath = oldFile.toString(); - - String prevJsonBody = readFile(filepath, StandardCharsets.UTF_8); - policyAdapter.setPrevJsonBody(prevJsonBody); - } - - File configHomeDir = new File(CONFIG_HOME); - File[] listOfFiles = configHomeDir.listFiles(); - if (listOfFiles != null) { - for (File eachFile : listOfFiles) { - if (eachFile.isFile()) { - String fileNameWithoutExtension = FilenameUtils - .removeExtension(eachFile.getName()); - String configFileNameWithoutExtension = FilenameUtils - .removeExtension(configFileName); - if (fileNameWithoutExtension - .equals(configFileNameWithoutExtension)) { - // delete the file - eachFile.delete(); - } - } - } + if (policyName.endsWith(".xml")) { + policyName = policyName.substring(0, + policyName.lastIndexOf(".xml")); } + PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator + policyName + ".txt"); + out.println(jsonBody); + out.close(); - /*FileWriter fw = new FileWriter(file.getAbsoluteFile()); - BufferedWriter bw = new BufferedWriter(fw); - bw.write(jsonBody); - bw.close(); - if (logger.isDebugEnabled()) { - logger.debug("Configuration is succesfully saved"); - }*/ - - try { - - if (policyName.endsWith(".xml")) { - policyName = policyName.substring(0, - policyName.lastIndexOf(".xml")); - } - PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator - + path + "." + policyName + ".txt"); - out.println(jsonBody); - out.close(); - - } catch (Exception e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e); - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsRawPolicy", "Exception saving configurations file"); - } - - } catch (IOException e) { - e.printStackTrace(); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsRawPolicy", "Exception saving configurations file"); } } @@ -227,8 +129,7 @@ public class CreateBrmsRawPolicy extends Policy { // Until here we prepared the data and here calling the method to create // xml. Path newPolicyPath = null; - newPolicyPath = Paths.get(policyAdapter.getParentPath().toString(), - policyName); + newPolicyPath = Paths.get(policyAdapter.getNewFileName()); Boolean dbIsUpdated = true; @@ -237,20 +138,10 @@ public class CreateBrmsRawPolicy extends Policy { successMap = createPolicy(newPolicyPath, getCorrectPolicyDataObject()); } else { - //TODO:EELF Cleanup - Remove logger - //logger.error("Failed to Update the Database Dictionary Tables."); PolicyLogger.error("Failed to Update the Database Dictionary Tables."); - - // remove the new json file - String jsonBody = policyAdapter.getPrevJsonBody(); - saveConfigurations(policyName, "", jsonBody); successMap.put("error", "DB UPDATE"); } - if (successMap.containsKey("success")) { - Path finalPolicyPath = getFinalPolicyPath(); - policyAdapter.setFinalPolicyPath(finalPolicyPath.toString()); - } return successMap; } @@ -268,13 +159,7 @@ public class CreateBrmsRawPolicy extends Policy { int version = 0; String policyID = policyAdapter.getPolicyID(); - - if (policyAdapter.isEditPolicy()) { - // version = Integer.parseInt(policyAdapter.getVersion()) + 1; - version = policyAdapter.getHighestVersion() + 1; - } else { - version = 1; - } + version = policyAdapter.getHighestVersion(); // Create the Instance for pojo, PolicyType object is used in // marshalling. @@ -287,36 +172,12 @@ public class CreateBrmsRawPolicy extends Policy { policyAdapter.setData(policyConfig); } + policyName = policyAdapter.getNewFileName(); + if (policyAdapter.getData() != null) { - - // Save off everything - // making ready all the required elements to generate the action - // policy xml. - // Get the uniqueness for policy name. - String prevPolicyName = null; - if (policyAdapter.isEditPolicy()) { - prevPolicyName = "Config_BRMS_Raw_" + policyAdapter.getPolicyName() - + "." + policyAdapter.getHighestVersion() + ".xml"; - } - //if (!policyAdapter.isEditPolicy()) { - Path newFile = getNextFilename( - Paths.get(policyAdapter.getParentPath().toString()), - (policyAdapter.getPolicyType() + "_BRMS_Raw"), - policyAdapter.getPolicyName(), version); - - if (newFile == null) { - //TODO:EELF Cleanup - Remove logger - //logger.error("File already exists, cannot create the policy."); - PolicyLogger.error("File already exists, cannot create the policy."); - setPolicyExists(true); - return false; - } - policyName = newFile.getFileName().toString(); - //} - //String jsonBody = policyAdapter.getJsonBody(); String configBody=policyAdapter.getConfigBodyData(); - saveConfigurations(policyName, prevPolicyName, configBody); + saveConfigurations(policyName, configBody); // Make sure the filename ends with an extension if (policyName.endsWith(".xml") == false) { @@ -327,17 +188,11 @@ public class CreateBrmsRawPolicy extends Policy { configPolicy.setDescription(policyAdapter.getPolicyDescription()); - configPolicy.setRuleCombiningAlgId(policyAdapter - .getRuleCombiningAlgId()); + configPolicy.setRuleCombiningAlgId(policyAdapter.getRuleCombiningAlgId()); AllOfType allOfOne = new AllOfType(); - File policyFilePath = new File(policyAdapter.getParentPath() - .toString(), policyName); - String policyDir = policyFilePath.getParentFile().getName(); - String fileName = FilenameUtils.removeExtension(policyName); - fileName = policyDir + "." + fileName + ".xml"; - String name = fileName.substring(fileName.lastIndexOf("\\") + 1, - fileName.length()); + String fileName = policyAdapter.getNewFileName(); + String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); @@ -348,22 +203,16 @@ public class CreateBrmsRawPolicy extends Policy { AllOfType allOf = new AllOfType(); // Match for ECOMPName - allOf.getMatch().add( - createMatch("ECOMPName", policyAdapter.getEcompName())); - allOf.getMatch().add( - createMatch("ConfigName", policyAdapter.getConfigName())); + allOf.getMatch().add(createMatch("ECOMPName", policyAdapter.getEcompName())); + allOf.getMatch().add(createMatch("ConfigName", policyAdapter.getConfigName())); // Match for riskType - allOf.getMatch().add( - createDynamicMatch("RiskType", policyAdapter.getRiskType())); + allOf.getMatch().add(createDynamicMatch("RiskType", policyAdapter.getRiskType())); // Match for riskLevel - allOf.getMatch().add( - createDynamicMatch("RiskLevel", String.valueOf(policyAdapter.getRiskLevel()))); + allOf.getMatch().add(createDynamicMatch("RiskLevel", String.valueOf(policyAdapter.getRiskLevel()))); // Match for riskguard - allOf.getMatch().add( - createDynamicMatch("guard", policyAdapter.getGuard())); + allOf.getMatch().add(createDynamicMatch("guard", policyAdapter.getGuard())); // Match for ttlDate - allOf.getMatch().add( - createDynamicMatch("TTLDate", policyAdapter.getTtlDate())); + allOf.getMatch().add(createDynamicMatch("TTLDate", policyAdapter.getTtlDate())); AnyOfType anyOf = new AnyOfType(); anyOf.getAllOf().add(allOfOne); anyOf.getAllOf().add(allOf); @@ -393,9 +242,6 @@ public class CreateBrmsRawPolicy extends Policy { try { accessURI = new URI(ACTION_ID); } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE - //+ e.getStackTrace()); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsRawPolicy", "Exception creating ACCESS URI"); } accessAttributeDesignator.setCategory(CATEGORY_ACTION); @@ -418,9 +264,6 @@ public class CreateBrmsRawPolicy extends Policy { try { configURI = new URI(RESOURCE_ID); } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE - //+ e.getStackTrace()); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsRawPolicy", "Exception creating Config URI"); } @@ -449,9 +292,6 @@ public class CreateBrmsRawPolicy extends Policy { policyAdapter.setPolicyData(configPolicy); } else { - //TODO:EELF Cleanup - Remove logger - //logger.error("Unsupported data object." - //+ policyAdapter.getData().getClass().getCanonicalName()); PolicyLogger.error("Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); } @@ -482,26 +322,14 @@ public class CreateBrmsRawPolicy extends Policy { // For Config file Url if configurations are provided. // URL ID Assignment - final Path gitPath = Paths.get(policyAdapter.getUserGitPath() - .toString()); AttributeAssignmentExpressionType assignment2 = new AttributeAssignmentExpressionType(); assignment2.setAttributeId("URLID"); assignment2.setCategory(CATEGORY_RESOURCE); assignment2.setIssuer(""); AttributeValueType AttributeValue = new AttributeValueType(); AttributeValue.setDataType(URI_DATATYPE); - String policyDir1 = policyAdapter.getParentPath().toString(); - int startIndex1 = policyDir1.indexOf(gitPath.toString()) - + gitPath.toString().length() + 1; - policyDir1 = policyDir1.substring(startIndex1, policyDir1.length()); - logger.info("print the main domain value" + policyDir1); - String path = policyDir1.replace('\\', '.'); - if (path.contains("/")) { - path = policyDir1.replace('/', '.'); - logger.info("print the path:" + path); - } - String content = CONFIG_URL + "/Config/" + path + "." - + getConfigFile(policyName); + + String content = CONFIG_URL + "/Config/" + getConfigFile(policyName); AttributeValue.getContent().add(content); assignment2.setExpression(new ObjectFactory() @@ -515,26 +343,8 @@ public class CreateBrmsRawPolicy extends Policy { assignment3.setIssuer(""); AttributeValueType attributeValue3 = new AttributeValueType(); attributeValue3.setDataType(STRING_DATATYPE); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) - + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - StringTokenizer tokenizer = null; - StringBuffer buffer = new StringBuffer(); - if (policyDir.contains("\\")) { - tokenizer = new StringTokenizer(policyDir, "\\"); - } else { - tokenizer = new StringTokenizer(policyDir, "/"); - } - if (tokenizer != null) { - while (tokenizer.hasMoreElements()) { - String value = tokenizer.nextToken(); - buffer.append(value); - buffer.append("."); - } - } fileName = FilenameUtils.removeExtension(fileName); - fileName = buffer.toString() + fileName + ".xml"; + fileName = fileName + ".xml"; System.out.println(fileName); String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); @@ -562,7 +372,7 @@ public class CreateBrmsRawPolicy extends Policy { // Ecomp Name Assignment AttributeAssignmentExpressionType assignment5 = new AttributeAssignmentExpressionType(); - assignment5.setAttributeId("matching:" + this.ECOMPID); + assignment5.setAttributeId("matching:" + ECOMPID); assignment5.setCategory(CATEGORY_RESOURCE); assignment5.setIssuer(""); AttributeValueType configNameAttributeValue5 = new AttributeValueType(); @@ -575,7 +385,7 @@ public class CreateBrmsRawPolicy extends Policy { //Config Name Assignment AttributeAssignmentExpressionType assignment6 = new AttributeAssignmentExpressionType(); - assignment6.setAttributeId("matching:" + this.CONFIGID); + assignment6.setAttributeId("matching:" + CONFIGID); assignment6.setCategory(CATEGORY_RESOURCE); assignment6.setIssuer(""); AttributeValueType configNameAttributeValue6 = new AttributeValueType(); @@ -584,21 +394,31 @@ public class CreateBrmsRawPolicy extends Policy { assignment6.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue6)); advice.getAttributeAssignmentExpression().add(assignment6); + // Adding Controller Information. + if(policyAdapter.getBrmsController()!=null){ + BRMSDictionaryController brmsDicitonaryController = new BRMSDictionaryController(); + advice.getAttributeAssignmentExpression().add( + createResponseAttributes("controller:"+ policyAdapter.getBrmsController(), + brmsDicitonaryController.getControllerDataByID(policyAdapter.getBrmsController()).getController())); + } + + // Adding Dependencies. + if(policyAdapter.getBrmsDependency()!=null){ + BRMSDictionaryController brmsDicitonaryController = new BRMSDictionaryController(); + ArrayList<String> dependencies = new ArrayList<String>(); + StringBuilder key = new StringBuilder(); + for(String dependencyName: policyAdapter.getBrmsDependency()){ + dependencies.add(brmsDicitonaryController.getDependencyDataByID(dependencyName).getDependency()); + key.append(dependencyName + ","); + } + advice.getAttributeAssignmentExpression().add( + createResponseAttributes("dependencies:"+key.toString(), dependencies.toString())); + } + + // Dynamic Field Config Attributes. Map<String, String> dynamicFieldConfigAttributes = policyAdapter.getDynamicFieldConfigAttributes(); for (String keyField : dynamicFieldConfigAttributes.keySet()) { - String key = keyField; - String value = dynamicFieldConfigAttributes.get(key); - AttributeAssignmentExpressionType assignment7 = new AttributeAssignmentExpressionType(); - assignment7.setAttributeId("key:" + key); - assignment7.setCategory(CATEGORY_RESOURCE); - assignment7.setIssuer(""); - - AttributeValueType configNameAttributeValue7 = new AttributeValueType(); - configNameAttributeValue7.setDataType(STRING_DATATYPE); - configNameAttributeValue7.getContent().add(value); - assignment7.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue7)); - - advice.getAttributeAssignmentExpression().add(assignment7); + advice.getAttributeAssignmentExpression().add(createResponseAttributes("key:"+keyField, dynamicFieldConfigAttributes.get(keyField))); } //Risk Attributes @@ -658,4 +478,16 @@ public class CreateBrmsRawPolicy extends Policy { public Object getCorrectPolicyDataObject() { return policyAdapter.getData(); } + + private AttributeAssignmentExpressionType createResponseAttributes(String key, String value){ + AttributeAssignmentExpressionType assignment7 = new AttributeAssignmentExpressionType(); + assignment7.setAttributeId(key); + assignment7.setCategory(CATEGORY_RESOURCE); + assignment7.setIssuer(""); + AttributeValueType configNameAttributeValue7 = new AttributeValueType(); + configNameAttributeValue7.setDataType(STRING_DATATYPE); + configNameAttributeValue7.getContent().add(value); + assignment7.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue7)); + return assignment7; + } } diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateClosedLoopPerformanceMetrics.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateClosedLoopPerformanceMetrics.java index 578efc228..5eb3493f2 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateClosedLoopPerformanceMetrics.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateClosedLoopPerformanceMetrics.java @@ -22,7 +22,6 @@ package org.openecomp.policy.pap.xacml.rest.components; import java.io.File; -import java.io.IOException; import java.io.PrintWriter; import java.net.URI; import java.net.URISyntaxException; @@ -30,9 +29,6 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; -import java.util.StringTokenizer; - -import javax.json.stream.JsonGenerationException; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionsType; @@ -49,25 +45,14 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; import org.apache.commons.io.FilenameUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter; - -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import com.att.research.xacml.std.IdentifierImpl; - import org.openecomp.policy.common.logging.eelf.MessageCodes; import org.openecomp.policy.common.logging.eelf.PolicyLogger; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; +import org.openecomp.policy.rest.adapter.PolicyRestAdapter; + +import com.att.research.xacml.std.IdentifierImpl; public class CreateClosedLoopPerformanceMetrics extends Policy { - /** - * Config Fields - */ - private static final Logger logger = FlexLogger.getLogger(ConfigPolicy.class); - public CreateClosedLoopPerformanceMetrics() { super(); } @@ -77,13 +62,7 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { } //save configuration of the policy based on the policyname - private void saveConfigurations(String policyName, String prevPolicyName, String jsonBody) { - String domain = getParentPathSubScopeDir(); - String path = domain.replace('\\', '.'); - if(path.contains("/")){ - path = domain.replace('/', '.'); - logger.info("print the path:" +path); - } + private void saveConfigurations(String policyName, String jsonBody) { try { String body = null; try { @@ -91,21 +70,18 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { } catch (Exception e) { e.printStackTrace(); } - - System.out.println(body); if(policyName.endsWith(".xml")){ policyName = policyName.substring(0, policyName.lastIndexOf(".xml")); } - PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator+path + "."+ policyName +".json"); + PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator + "."+ policyName +".json"); out.println(body); + policyAdapter.setJsonBody(body); + policyAdapter.setConfigBodyData(body); out.close(); - } catch (JsonGenerationException e) { - e.printStackTrace(); - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); } - } //getting the policy name and setting to configuration on adding .json @@ -120,13 +96,13 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { @Override public Map<String, String> savePolicies() throws Exception { - + Map<String, String> successMap = new HashMap<String,String>(); if(isPolicyExists()){ successMap.put("EXISTS", "This Policy already exist on the PAP"); return successMap; } - + if(!isPreparedToSave()){ //Prep and configure the policy for saving prepareToSave(); @@ -134,12 +110,10 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { // Until here we prepared the data and here calling the method to create xml. Path newPolicyPath = null; - newPolicyPath = Paths.get(policyAdapter.getParentPath().toString(), policyName); - successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject() ); - if (successMap.containsKey("success")) { - Path finalPolicyPath = getFinalPolicyPath(); - policyAdapter.setFinalPolicyPath(finalPolicyPath.toString()); - } + newPolicyPath = Paths.get(policyAdapter.getNewFileName()); + + successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject()); + return successMap; } @@ -155,12 +129,7 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { int version = 0; String policyID = policyAdapter.getPolicyID(); - - if (policyAdapter.isEditPolicy()) { - version = policyAdapter.getHighestVersion() + 1; - } else { - version = 1; - } + version = policyAdapter.getHighestVersion(); // Create the Instance for pojo, PolicyType object is used in marshalling. if (policyAdapter.getPolicyType().equals("Config")) { @@ -171,32 +140,11 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { policyConfig.setTarget(new TargetType()); policyAdapter.setData(policyConfig); } - + policyName = policyAdapter.getNewFileName(); if (policyAdapter.getData() != null) { - - // Save off everything - // making ready all the required elements to generate the action policy xml. - // Get the uniqueness for policy name. - String prevPolicyName = null; - if(policyAdapter.isEditPolicy()){ - prevPolicyName = "Config_PM_" + policyAdapter.getPolicyName() + "." + policyAdapter.getHighestVersion() + ".xml"; - } - - Path newFile = this.getNextLoopFilename(Paths.get(policyAdapter.getParentPath()), policyAdapter.getPolicyType(), policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), version); - - if (newFile == null) { - //TODO:EELF Cleanup - Remove logger - //logger.error("File already exists, cannot create the policy."); - PolicyLogger.error("File already exists, cannot create the policy."); - setPolicyExists(true); - return false; - } - - policyName = newFile.getFileName().toString(); - // Save the Configurations file with the policy name with extention based on selection. String jsonBody = policyAdapter.getJsonBody(); - saveConfigurations(policyName, prevPolicyName, jsonBody); + saveConfigurations(policyName, jsonBody); // Make sure the filename ends with an extension if (policyName.endsWith(".xml") == false) { @@ -211,18 +159,7 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { configPolicy.setRuleCombiningAlgId(policyAdapter.getRuleCombiningAlgId()); AllOfType allOfOne = new AllOfType(); - final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString()); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - logger.info("print the main domain value "+policyDir); - String path = policyDir.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir.replace('/', '.'); - logger.info("print the path:" +path); - } - String fileName = FilenameUtils.removeExtension(policyName); - fileName = path + "." + fileName + ".xml"; + String fileName = policyAdapter.getNewFileName(); String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); @@ -276,8 +213,6 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { try { accessURI = new URI(ACTION_ID); } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getStackTrace()); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateClosedLoopPerformanceMetrics", "Exception creating ACCESS URI"); } accessAttributeDesignator.setCategory(CATEGORY_ACTION); @@ -297,8 +232,6 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { try { configURI = new URI(RESOURCE_ID); } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getStackTrace()); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateClosedLoopPerformanceMetrics", "Exception creating Config URI"); } configAttributeDesignator.setCategory(CATEGORY_RESOURCE); @@ -323,8 +256,6 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { policyAdapter.setPolicyData(configPolicy); } else { - //TODO:EELF Cleanup - Remove logger - //logger.error("Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); PolicyLogger.error("Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); } setPreparedToSave(true); @@ -350,7 +281,6 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { assignment1.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue)); advice.getAttributeAssignmentExpression().add(assignment1); - final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString()); // For Config file Url if configurations are provided. AttributeAssignmentExpressionType assignment2 = new AttributeAssignmentExpressionType(); assignment2.setAttributeId("URLID"); @@ -359,17 +289,7 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { AttributeValueType AttributeValue = new AttributeValueType(); AttributeValue.setDataType(URI_DATATYPE); - String policyDir1 = policyAdapter.getParentPath().toString(); - int startIndex1 = policyDir1.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir1 = policyDir1.substring(startIndex1, policyDir1.length()); - logger.info("print the main domain value"+policyDir1); - String path = policyDir1.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir1.replace('/', '.'); - logger.info("print the path:" +path); - } - String content = CONFIG_URL +"/Config/" + path + "." + getConfigFile(policyName); - System.out.println("URL value :" + content); + String content = CONFIG_URL +"/Config/"+ getConfigFile(policyName); AttributeValue.getContent().add(content); assignment2.setExpression(new ObjectFactory().createAttributeValue(AttributeValue)); @@ -381,25 +301,8 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { AttributeValueType attributeValue3 = new AttributeValueType(); attributeValue3.setDataType(STRING_DATATYPE); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - StringTokenizer tokenizer = null; - StringBuffer buffer = new StringBuffer(); - if (policyDir.contains("\\")) { - tokenizer = new StringTokenizer(policyDir, "\\"); - } else { - tokenizer = new StringTokenizer(policyDir, "/"); - } - if (tokenizer != null) { - while (tokenizer.hasMoreElements()) { - String value = tokenizer.nextToken(); - buffer.append(value); - buffer.append("."); - } - } fileName = FilenameUtils.removeExtension(fileName); - fileName = buffer.toString() + fileName + ".xml"; + fileName = fileName + ".xml"; String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); @@ -499,7 +402,6 @@ public class CreateClosedLoopPerformanceMetrics extends Policy { @Override public Object getCorrectPolicyDataObject() { - // TODO Auto-generated method stub return policyAdapter.getPolicyData(); } diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateNewMicroSerivceModel.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateNewMicroSerivceModel.java index 73479fd2b..c1740ae30 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateNewMicroSerivceModel.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/CreateNewMicroSerivceModel.java @@ -41,33 +41,25 @@ import java.util.zip.ZipFile; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -//import org.eclipse.emf.common.util.URI; -//import org.eclipse.emf.ecore.EPackage; -//import org.eclipse.emf.ecore.resource.Resource; -//import org.eclipse.emf.ecore.resource.ResourceSet; -//import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; -//import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; +import org.openecomp.policy.common.logging.eelf.MessageCodes; +import org.openecomp.policy.common.logging.eelf.PolicyLogger; +import org.openecomp.policy.common.logging.flexlogger.FlexLogger; +import org.openecomp.policy.common.logging.flexlogger.Logger; +import org.openecomp.policy.pap.xacml.rest.XACMLPapServlet; import org.openecomp.policy.rest.XACMLRestProperties; import org.openecomp.policy.rest.jpa.MicroServiceModels; import org.openecomp.policy.rest.jpa.UserInfo; import org.openecomp.policy.rest.util.MSAttributeObject; -import org.openecomp.policy.rest.util.MSModelUtitils; +import org.openecomp.policy.rest.util.MSModelUtils; +import org.openecomp.policy.rest.util.MSModelUtils.MODEL_TYPE; import com.att.research.xacml.util.XACMLProperties; -import org.openecomp.policy.common.logging.eelf.MessageCodes; -import org.openecomp.policy.common.logging.eelf.PolicyLogger; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - public class CreateNewMicroSerivceModel { private static final Logger logger = FlexLogger.getLogger(CreateNewMicroSerivceModel.class); private MicroServiceModels newModel = null; private HashMap<String,MSAttributeObject > classMap = new HashMap<String,MSAttributeObject>(); - private String directory; - + /* * These are the parameters needed for DB access from the PAP */ @@ -76,15 +68,14 @@ public class CreateNewMicroSerivceModel { private static String papDbUser = null; private static String papDbPassword = null; - MSModelUtitils utils = new MSModelUtitils(); + MSModelUtils utils = new MSModelUtils(XACMLPapServlet.msEcompName, XACMLPapServlet.msPolicyName); public CreateNewMicroSerivceModel(String fileName, String serviceName, String string, String version) { super(); } public CreateNewMicroSerivceModel(String importFile, String modelName, String description, String version, String randomID) { - - Map<String, String> successMap = new HashMap<String,String>(); + this.newModel = new MicroServiceModels(); this.newModel.setDescription(description); this.newModel.setVersion(version); @@ -100,11 +91,10 @@ public class CreateNewMicroSerivceModel { extractFolder(randomID + ".zip"); File directory = new File("ExtractDir" + File.separator + randomID); List<File> fileList = listModelFiles(directory.toString()); - //get all the files from a directory - File[] fList = directory.listFiles(); + //get all the files from a director for (File file : fileList){ if (file.isFile()){ - tempMap = utils.processEpackage(file.getAbsolutePath()); + tempMap = utils.processEpackage(file.getAbsolutePath(), MODEL_TYPE.XMI); classMap.putAll(tempMap); } } @@ -118,16 +108,12 @@ public class CreateNewMicroSerivceModel { logger.error("Failed to unzip model file " + randomID); } }else { - tempMap = utils.processEpackage("ExtractDir" + File.separator + randomID+".xmi"); + tempMap = utils.processEpackage("ExtractDir" + File.separator + randomID+".xmi", MODEL_TYPE.XMI); classMap.putAll(tempMap); cleanUpFile = "ExtractDir" + File.separator + randomID+".xmi"; File deleteFile = new File(cleanUpFile); deleteFile.delete(); } - - // addValuesToNewModel(); - - } private List<File> listModelFiles(String directoryName) { @@ -144,6 +130,7 @@ public class CreateNewMicroSerivceModel { return resultList; } + @SuppressWarnings("rawtypes") private void extractFolder(String zipFile) { int BUFFER = 2048; File file = new File(zipFile); @@ -152,7 +139,6 @@ public class CreateNewMicroSerivceModel { try { zip = new ZipFile("ExtractDir" + File.separator +file); String newPath = zipFile.substring(0, zipFile.length() - 4); - this.directory = "ExtractDir" + File.separator + zipFile.substring(0, zipFile.length() - 4); new File(newPath).mkdir(); Enumeration zipFileEntries = zip.entries(); @@ -232,11 +218,14 @@ public class CreateNewMicroSerivceModel { this.newModel.setSub_attributes(subAttribute); this.newModel.setAttributes(mainClass.getAttribute().toString().replace("{", "").replace("}", "")); this.newModel.setRef_attributes(mainClass.getRefAttribute().toString().replace("{", "").replace("}", "")); + this.newModel.setEnumValues(mainClass.getEnumType().toString().replace("{", "").replace("}", "")); + this.newModel.setAnnotation(mainClass.getMatchingSet().toString().replace("{", "").replace("}", "")); successMap.put("success", "success"); return successMap; } + @SuppressWarnings("resource") public Map<String, String> saveImportService(){ Map<String, String> successMap = new HashMap<String,String>(); @@ -275,21 +264,19 @@ public class CreateNewMicroSerivceModel { ID++; } - insertQuery = "INSERT INTO MicroServiceModels (ID, modelName, Dependency, DESCRIPTION, attributes, ref_attributes, sub_attributes, version, imported_by) " - + "VALUES("+ID+",'"+modelName+"','"+ this.newModel.getDependency()+"','"+this.newModel.getDescription()+"','"+this.newModel.getAttributes()+ - "','"+this.newModel.getRef_attributes()+"','"+this.newModel.getSub_attributes()+"','"+version+"','"+imported_by+"')"; + String newDependency = "[" + this.newModel.getDependency() + "]"; + this.newModel.setDependency(newDependency); + insertQuery = "INSERT INTO MicroServiceModels (ID, modelName, Dependency, DESCRIPTION, attributes, ref_attributes, sub_attributes, version, imported_by, enumValues, annotation) " + + "VALUES("+ID+",'"+modelName+"','"+ this.newModel.getDependency()+"','"+this.newModel.getDescription()+"','"+this.newModel.getAttributes()+ + "','"+this.newModel.getRef_attributes()+"','"+this.newModel.getSub_attributes()+"','"+version+"','"+imported_by+"','"+this.newModel.getEnumValues()+"','"+this.newModel.getAnnotation()+"')"; st.executeUpdate(insertQuery); successMap.put("success", "success"); } rs.close(); }catch (ClassNotFoundException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(e.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "saveImportService", "Exception querying MicroServiceModels"); successMap.put("DBError", "Error Query"); } catch (SQLException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(e.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "saveImportService", "Exception querying MicroServiceModels"); successMap.put("DBError", "Error Query"); } finally { @@ -297,7 +284,9 @@ public class CreateNewMicroSerivceModel { if (con!=null) con.close(); if (rs!=null) rs.close(); if (st!=null) st.close(); - } catch (Exception ex){} + } catch (Exception ex){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, ex, "saveImportService", "Exception querying MicroServiceModels"); + } } return successMap; diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/DecisionPolicy.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/DecisionPolicy.java index 822768f6d..b7b47cf28 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/DecisionPolicy.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/DecisionPolicy.java @@ -50,9 +50,11 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.VariableDefinitionType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.VariableReferenceType; -import org.apache.commons.io.FilenameUtils; -import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter; +import org.openecomp.policy.common.logging.eelf.MessageCodes; +import org.openecomp.policy.common.logging.eelf.PolicyLogger; +import org.openecomp.policy.pap.xacml.rest.XACMLPapServlet; import org.openecomp.policy.pap.xacml.rest.util.JPAUtils; +import org.openecomp.policy.rest.adapter.PolicyRestAdapter; import org.openecomp.policy.rest.jpa.Datatype; import org.openecomp.policy.rest.jpa.DecisionSettings; import org.openecomp.policy.rest.jpa.FunctionDefinition; @@ -60,48 +62,15 @@ import org.openecomp.policy.xacml.std.pip.engines.aaf.AAFEngine; import com.att.research.xacml.std.IdentifierImpl; -import org.openecomp.policy.common.logging.eelf.MessageCodes; -import org.openecomp.policy.common.logging.eelf.PolicyLogger; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - public class DecisionPolicy extends Policy { - /** - * Config Fields - */ - private static final Logger logger = FlexLogger.getLogger(ConfigPolicy.class); - - public static final String JSON_CONFIG = "JSON"; - public static final String XML_CONFIG = "XML"; - public static final String PROPERTIES_CONFIG = "PROPERTIES"; - public static final String OTHER_CONFIG = "OTHER"; - - public static final String PDP_ACTION = "PDP"; - public static final String PEP_ACTION = "PEP"; - public static final String TYPE_ACTION = "REST"; - - public static final String GET_METHOD = "GET"; - public static final String PUT_METHOD = "PUT"; - public static final String POST_METHOD = "POST"; - - public static final String PERFORMER_ATTRIBUTEID = "performer"; - public static final String TYPE_ATTRIBUTEID = "type"; - public static final String METHOD_ATTRIBUTEID = "method"; - public static final String HEADERS_ATTRIBUTEID = "headers"; - public static final String URL_ATTRIBUTEID = "url"; - public static final String BODY_ATTRIBUTEID = "body"; - public static final String FUNCTION_NOT = "urn:oasis:names:tc:xacml:1.0:function:not"; - private static final String AAFProvider = "AAF"; - //private static final String CustomProvider = "Custom"; List<String> dynamicLabelRuleAlgorithms = new LinkedList<String>(); List<String> dynamicFieldComboRuleAlgorithms = new LinkedList<String>(); List<String> dynamicFieldOneRuleAlgorithms = new LinkedList<String>(); List<String> dynamicFieldTwoRuleAlgorithms = new LinkedList<String>(); - //List<Object> dynamicVariableList = new LinkedList<Object>(); List<String> dataTypeList = new LinkedList<String>(); protected Map<String, String> dropDownMap = new HashMap<String, String>(); @@ -117,13 +86,13 @@ public class DecisionPolicy extends Policy { @Override public Map<String, String> savePolicies() throws Exception { - + Map<String, String> successMap = new HashMap<String,String>(); if(isPolicyExists()){ successMap.put("EXISTS", "This Policy already exist on the PAP"); return successMap; } - + if(!isPreparedToSave()){ //Prep and configure the policy for saving prepareToSave(); @@ -131,12 +100,9 @@ public class DecisionPolicy extends Policy { // Until here we prepared the data and here calling the method to create xml. Path newPolicyPath = null; - newPolicyPath = Paths.get(policyAdapter.getParentPath().toString(), policyName); - successMap = createPolicy(newPolicyPath, getCorrectPolicyDataObject()); - if (successMap.containsKey("success")) { - Path finalPolicyPath = getFinalPolicyPath(); - policyAdapter.setFinalPolicyPath(finalPolicyPath.toString()); - } + newPolicyPath = Paths.get(policyAdapter.getNewFileName()); + + successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject()); return successMap; } @@ -152,12 +118,7 @@ public class DecisionPolicy extends Policy { int version = 0; String policyID = policyAdapter.getPolicyID(); - - if (policyAdapter.isEditPolicy()) { - version = policyAdapter.getHighestVersion() + 1; - } else { - version = 1; - } + version = policyAdapter.getHighestVersion(); // Create the Instance for pojo, PolicyType object is used in marshalling. if (policyAdapter.getPolicyType().equals("Decision")) { @@ -168,45 +129,16 @@ public class DecisionPolicy extends Policy { policyConfig.setTarget(new TargetType()); policyAdapter.setData(policyConfig); } + policyName = policyAdapter.getNewFileName(); if (policyAdapter.getData() != null) { - - // Save off everything - // making ready all the required elements to generate the action policy xml. - // Get the uniqueness for policy name. - Path newFile = getNextFilename(Paths.get(policyAdapter.getParentPath().toString()), policyAdapter.getPolicyType(), policyAdapter.getPolicyName(), version); - if (newFile == null) { - //TODO:EELF Cleanup - Remove logger - //logger.error("File already exists, cannot create the policy."); - PolicyLogger.error("File already exists, cannot create the policy."); - setPolicyExists(true); - return false; - } - policyName = newFile.getFileName().toString(); - - // Make sure the filename ends with an extension - if (policyName.endsWith(".xml") == false) { - policyName = policyName + ".xml"; - } - PolicyType decisionPolicy = (PolicyType) policyAdapter.getData(); decisionPolicy.setDescription(policyAdapter.getPolicyDescription()); decisionPolicy.setRuleCombiningAlgId(policyAdapter.getRuleCombiningAlgId()); AllOfType allOfOne = new AllOfType(); - final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString()); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - logger.info("print the main domain value "+policyDir); - String path = policyDir.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir.replace('/', '.'); - logger.info("print the path:" +path); - } - String fileName = FilenameUtils.removeExtension(policyName); - fileName = path + "." + fileName + ".xml"; + String fileName = policyAdapter.getNewFileName(); String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); @@ -219,7 +151,7 @@ public class DecisionPolicy extends Policy { allOf.getMatch().add(createMatch("ECOMPName", (policyAdapter.getEcompName()))); Map<String, String> dynamicFieldComponentAttributes = policyAdapter.getDynamicFieldConfigAttributes(); - if(policyAdapter.getProviderComboBox()!=null && policyAdapter.getProviderComboBox().equals(AAFProvider)){ + if(policyAdapter.getRuleProvider()!=null && policyAdapter.getRuleProvider().equals(AAFProvider)){ dynamicFieldComponentAttributes = new HashMap<String,String>(); } @@ -267,7 +199,7 @@ public class DecisionPolicy extends Policy { private DecisionSettings findDecisionSettingsBySettingId(String settingId) { DecisionSettings decisionSetting = null; - EntityManager em = policyAdapter.getEntityManagerFactory().createEntityManager(); + EntityManager em = XACMLPapServlet.getEmf().createEntityManager(); Query getDecisionSettings = em.createNamedQuery("DecisionSettings.findAll"); List<?> decisionSettingsList = getDecisionSettings.getResultList(); @@ -306,8 +238,6 @@ public class DecisionPolicy extends Policy { try { accessURI = new URI(ACTION_ID); } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getStackTrace()); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "DecisionPolicy", "Exception creating ACCESS URI"); } accessAttributeDesignator.setCategory(CATEGORY_ACTION); @@ -322,7 +252,7 @@ public class DecisionPolicy extends Policy { dynamicFieldTwoRuleAlgorithms = policyAdapter.getDynamicRuleAlgorithmField2(); dropDownMap = createDropDownMap(); - if(policyAdapter.getProviderComboBox()!=null && policyAdapter.getProviderComboBox().equals(AAFProvider)){ + if(policyAdapter.getRuleProvider()!=null && policyAdapter.getRuleProvider().equals(AAFProvider)){ // Values for AAF Provider are here for XML Creation. ConditionType condition = new ConditionType(); ApplyType decisionApply = new ApplyType(); @@ -429,8 +359,6 @@ public class DecisionPolicy extends Policy { policyAdapter.setPolicyData(decisionPolicy); } else { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Unsupported data object."+ policyAdapter.getData().getClass().getCanonicalName()); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + "Unsupported data object."+ policyAdapter.getData().getClass().getCanonicalName()); } @@ -589,9 +517,8 @@ public class DecisionPolicy extends Policy { private Map<String,String> createDropDownMap(){ JPAUtils jpaUtils = null; try { - jpaUtils = JPAUtils.getJPAUtilsInstance(policyAdapter.getEntityManagerFactory()); + jpaUtils = JPAUtils.getJPAUtilsInstance(XACMLPapServlet.getEmf()); } catch (Exception e) { - // TODO Auto-generated catch block e.printStackTrace(); } Map<Datatype, List<FunctionDefinition>> functionMap = jpaUtils.getFunctionDatatypeMap(); @@ -627,7 +554,5 @@ public class DecisionPolicy extends Policy { public Object getCorrectPolicyDataObject() { return policyAdapter.getData(); } - - - + } diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/FirewallConfigPolicy.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/FirewallConfigPolicy.java index ad7525b85..509da0b61 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/FirewallConfigPolicy.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/FirewallConfigPolicy.java @@ -28,7 +28,6 @@ import java.io.StringReader; import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -38,16 +37,15 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; +import java.util.List; import java.util.Map; -import java.util.StringTokenizer; import javax.json.Json; import javax.json.JsonArray; -import javax.json.JsonException; import javax.json.JsonObject; import javax.json.JsonReader; -import javax.json.JsonString; -import javax.json.JsonValue; +import javax.persistence.EntityManager; +import javax.persistence.Query; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionsType; @@ -64,33 +62,25 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; import org.apache.commons.io.FilenameUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter; -import org.openecomp.policy.rest.XACMLRestProperties; import org.openecomp.policy.common.logging.eelf.MessageCodes; import org.openecomp.policy.common.logging.eelf.PolicyLogger; +import org.openecomp.policy.common.logging.flexlogger.FlexLogger; +import org.openecomp.policy.common.logging.flexlogger.Logger; +import org.openecomp.policy.pap.xacml.rest.XACMLPapServlet; +import org.openecomp.policy.rest.XACMLRestProperties; +import org.openecomp.policy.rest.adapter.PolicyRestAdapter; +import org.openecomp.policy.rest.jpa.PolicyEntity; -import org.openecomp.policy.xacml.api.XACMLErrorConstants; import com.att.research.xacml.std.IdentifierImpl; import com.att.research.xacml.util.XACMLProperties; import com.fasterxml.jackson.databind.JsonNode; import com.github.fge.jackson.JsonLoader; import com.github.fge.jsonpatch.JsonPatch; import com.github.fge.jsonpatch.diff.JsonDiff; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; public class FirewallConfigPolicy extends Policy { - /** - * Config Fields - */ - private static final Logger logger = FlexLogger.getLogger(FirewallConfigPolicy.class); - public static final String JSON_CONFIG = "JSON"; - public static final String XML_CONFIG = "XML"; - public static final String PROPERTIES_CONFIG = "PROPERTIES"; - public static final String OTHER_CONFIG = "OTHER"; + private static final Logger LOGGER = FlexLogger.getLogger(FirewallConfigPolicy.class); /* * These are the parameters needed for DB access from the PAP @@ -111,79 +101,17 @@ public class FirewallConfigPolicy extends Policy { } // Saving the Configurations file at server location for config policy. - protected void saveConfigurations(String policyName, String prevPolicyName, String jsonBody) { - final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString()); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - logger.info("print the main domain value"+policyDir); - String path = policyDir.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir.replace('/', '.'); - logger.info("print the path:" +path); - } - - try { - String configFileName = getConfigFile(policyName); - - File file; - if(CONFIG_HOME.contains("\\")) - { - file = new File(CONFIG_HOME + "\\" + path + "."+ configFileName); - } - else - { - file = new File(CONFIG_HOME + "/" + path + "."+ configFileName); - } - - // if file doesnt exists, then create it - if (!file.exists()) { - file.createNewFile(); - } - - //Getting the previous policy Config Json file to be used for updating the dictionary tables - if (policyAdapter.isEditPolicy()) { - - String prevConfigFileName = getConfigFile(prevPolicyName); - - File oldFile; - if(CONFIG_HOME.contains("\\")) - { - oldFile = new File(CONFIG_HOME + "\\" + path + "."+ prevConfigFileName); - } - else - { - oldFile = new File(CONFIG_HOME + "/" + path + "."+ prevConfigFileName); - } - - String filepath = oldFile.toString(); - - String prevJsonBody = readFile(filepath, StandardCharsets.UTF_8); - policyAdapter.setPrevJsonBody(prevJsonBody); + protected void saveConfigurations(String policyName, String jsonBody) { + try{ + if(policyName.endsWith(".xml")){ + policyName = policyName.replace(".xml", ""); } - - - File configHomeDir = new File(CONFIG_HOME); - File[] listOfFiles = configHomeDir.listFiles(); - if (listOfFiles != null){ - for(File eachFile : listOfFiles){ - if(eachFile.isFile()){ - String fileNameWithoutExtension = FilenameUtils.removeExtension(eachFile.getName()); - String configFileNameWithoutExtension = FilenameUtils.removeExtension(configFileName); - if (fileNameWithoutExtension.equals(configFileNameWithoutExtension)){ - //delete the file - eachFile.delete(); - } - } - } - } - - FileWriter fw = new FileWriter(file.getAbsoluteFile()); + FileWriter fw = new FileWriter(CONFIG_HOME + File.separator + policyName + ".json"); BufferedWriter bw = new BufferedWriter(fw); bw.write(jsonBody); bw.close(); - if (logger.isDebugEnabled()) { - logger.debug("Configuration is succesfully saved"); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("Configuration is succesfully saved"); } } catch (IOException e) { e.printStackTrace(); @@ -197,19 +125,6 @@ public class FirewallConfigPolicy extends Policy { return new String(encoded, encoding); } - - // Here we are adding the extension for the configurations file based on the - // config type selection for saving. - private String getConfigFile(String filename) { - filename = FilenameUtils.removeExtension(filename); - if (filename.endsWith(".json")) { - filename = filename.substring(0, filename.length() - 4); - } - - filename=filename+".json"; - return filename; - } - // Validations for Config form public boolean validateConfigForm() { @@ -222,52 +137,46 @@ public class FirewallConfigPolicy extends Policy { @Override public Map<String, String> savePolicies() throws Exception { - + Map<String, String> successMap = new HashMap<String,String>(); if(isPolicyExists()){ successMap.put("EXISTS", "This Policy already exist on the PAP"); return successMap; } - + if(!isPreparedToSave()){ prepareToSave(); } - + // Until here we prepared the data and here calling the method to create xml. Path newPolicyPath = null; - newPolicyPath = Paths.get(policyAdapter.getParentPath().toString(), policyName); + newPolicyPath = Paths.get(policyAdapter.getNewFileName()); Boolean dbIsUpdated = false; - if (policyAdapter.getApiflag().equalsIgnoreCase("admin")){ - dbIsUpdated = true; - } else { + if (policyAdapter.getApiflag() != null && policyAdapter.getApiflag().equalsIgnoreCase("admin")){ if (policyAdapter.isEditPolicy()) { dbIsUpdated = updateFirewallDictionaryData(policyAdapter.getJsonBody(), policyAdapter.getPrevJsonBody()); } else { dbIsUpdated = insertFirewallDicionaryData(policyAdapter.getJsonBody()); } + } else { + dbIsUpdated = true; } - + if(dbIsUpdated) { - successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject() ); + successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject()); } else { - //TODO:EELF Cleanup - Remove logger - //logger.error("Failed to Update the Database Dictionary Tables."); PolicyLogger.error("Failed to Update the Database Dictionary Tables."); - + //remove the new json file String jsonBody = policyAdapter.getPrevJsonBody(); if (jsonBody!=null){ - saveConfigurations(policyName, "", jsonBody); + saveConfigurations(policyName, jsonBody); } else { - saveConfigurations(policyName, "", ""); + saveConfigurations(policyName, ""); } successMap.put("fwdberror", "DB UPDATE"); } - - if (successMap.containsKey("success")) { - Path finalPolicyPath = getFinalPolicyPath(); - policyAdapter.setFinalPolicyPath(finalPolicyPath.toString()); - } + return successMap; } @@ -283,12 +192,7 @@ public class FirewallConfigPolicy extends Policy { int version = 0; String policyID = policyAdapter.getPolicyID(); - - if (policyAdapter.isEditPolicy()) { - version = policyAdapter.getHighestVersion() + 1; - } else { - version = 1; - } + version = policyAdapter.getHighestVersion(); // Create the Instance for pojo, PolicyType object is used in marshalling. if (policyAdapter.getPolicyType().equals("Config")) { @@ -299,31 +203,33 @@ public class FirewallConfigPolicy extends Policy { policyConfig.setTarget(new TargetType()); policyAdapter.setData(policyConfig); } - + policyName = policyAdapter.getNewFileName(); + + //String oldPolicyName = policyName.replace(".xml", ""); + String scope = policyName.substring(0, policyName.indexOf(".")); + String dbPolicyName = policyName.substring(policyName.indexOf(".")+1).replace(".xml", ""); + + int oldversion = Integer.parseInt(dbPolicyName.substring(dbPolicyName.lastIndexOf(".")+1)); + dbPolicyName = dbPolicyName.substring(0, dbPolicyName.lastIndexOf(".")+1); + //String scope = oldPolicyName.substring(0, oldPolicyName.lastIndexOf(".")); + //scope = scope.substring(0, scope.lastIndexOf(".")); + if(oldversion > 1){ + oldversion = oldversion - 1; + dbPolicyName = dbPolicyName + oldversion + ".xml"; + } + EntityManager em = XACMLPapServlet.getEmf().createEntityManager(); + Query createPolicyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:policyName"); + createPolicyQuery.setParameter("scope", scope); + createPolicyQuery.setParameter("policyName", dbPolicyName); + List<?> createPolicyQueryList = createPolicyQuery.getResultList(); + if(!createPolicyQueryList.isEmpty()){ + PolicyEntity entitydata = (PolicyEntity) createPolicyQueryList.get(0); + policyAdapter.setPrevJsonBody(entitydata.getConfigurationData().getConfigBody()); + } + em.close(); if (policyAdapter.getData() != null) { - - // Save off everything - // making ready all the required elements to generate the action policy xml. - // Get the uniqueness for policy name. - String prevPolicyName = null; - if(policyAdapter.isEditPolicy()){ - prevPolicyName = "Config_FW_" + policyAdapter.getPolicyName() + "." + policyAdapter.getHighestVersion() + ".xml"; - } - - Path newFile = getNextFilename(Paths.get(policyAdapter.getParentPath().toString()), - (policyAdapter.getPolicyType() + "_FW"), policyAdapter.getPolicyName(), version); - - if (newFile == null) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Policy already Exists, cannot create the policy."); - PolicyLogger.error("Policy already Exists, cannot create the policy."); - setPolicyExists(true); - return false; - } - policyName = newFile.getFileName().toString(); - String jsonBody = policyAdapter.getJsonBody(); - saveConfigurations(policyName, prevPolicyName, jsonBody); + saveConfigurations(policyName, jsonBody); // Make sure the filename ends with an extension if (policyName.endsWith(".xml") == false) { @@ -337,10 +243,7 @@ public class FirewallConfigPolicy extends Policy { configPolicy.setRuleCombiningAlgId(policyAdapter.getRuleCombiningAlgId()); AllOfType allOfOne = new AllOfType(); - File policyFilePath = new File(policyAdapter.getParentPath().toString(), policyName); - String policyDir = policyFilePath.getParentFile().getName(); - String fileName = FilenameUtils.removeExtension(policyName); - fileName = policyDir + "." + fileName + ".xml"; + String fileName = policyAdapter.getNewFileName(); String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); @@ -391,8 +294,6 @@ public class FirewallConfigPolicy extends Policy { try { accessURI = new URI(ACTION_ID); } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getStackTrace()); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "FirewallConfigPolicy", "Exception creating ACCESS URI"); } accessAttributeDesignator.setCategory(CATEGORY_ACTION); @@ -414,8 +315,6 @@ public class FirewallConfigPolicy extends Policy { try { configURI = new URI(RESOURCE_ID); } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getStackTrace()); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "FirewallConfigPolicy", "Exception creating Config URI"); } @@ -441,8 +340,6 @@ public class FirewallConfigPolicy extends Policy { policyAdapter.setPolicyData(configPolicy); } else { - //TODO:EELF Cleanup - Remove logger - //logger.error("Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); PolicyLogger.error("Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); } setPreparedToSave(true); @@ -470,23 +367,13 @@ public class FirewallConfigPolicy extends Policy { // For Config file Url if configurations are provided. //URL ID Assignment - final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString()); AttributeAssignmentExpressionType assignment2 = new AttributeAssignmentExpressionType(); assignment2.setAttributeId("URLID"); assignment2.setCategory(CATEGORY_RESOURCE); assignment2.setIssuer(""); AttributeValueType AttributeValue = new AttributeValueType(); - AttributeValue.setDataType(URI_DATATYPE); - String policyDir1 = policyAdapter.getParentPath().toString(); - int startIndex1 = policyDir1.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir1 = policyDir1.substring(startIndex1, policyDir1.length()); - logger.info("print the main domain value"+policyDir1); - String path = policyDir1.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir1.replace('/', '.'); - logger.info("print the path:" +path); - } - String content = CONFIG_URL + "/Config/" + path + "." + getConfigFile(policyName); + AttributeValue.setDataType(URI_DATATYPE); + String content = CONFIG_URL + "/Config/" + policyName + ".json"; AttributeValue.getContent().add(content); assignment2.setExpression(new ObjectFactory().createAttributeValue(AttributeValue)); @@ -499,31 +386,12 @@ public class FirewallConfigPolicy extends Policy { assignment3.setIssuer(""); AttributeValueType attributeValue3 = new AttributeValueType(); attributeValue3.setDataType(STRING_DATATYPE); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - StringTokenizer tokenizer = null; - StringBuffer buffer = new StringBuffer(); - if (policyDir.contains("\\")) { - tokenizer = new StringTokenizer(policyDir, "\\"); - } else { - tokenizer = new StringTokenizer(policyDir, "/"); - } - if (tokenizer != null) { - while (tokenizer.hasMoreElements()) { - String value = tokenizer.nextToken(); - buffer.append(value); - buffer.append("."); - } - } fileName = FilenameUtils.removeExtension(fileName); - fileName = buffer.toString() + fileName + ".xml"; - System.out.println(fileName); + fileName = fileName + ".xml"; String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); } - System.out.println(name); attributeValue3.getContent().add(name); assignment3.setExpression(new ObjectFactory().createAttributeValue(attributeValue3)); advice.getAttributeAssignmentExpression().add(assignment3); @@ -541,7 +409,7 @@ public class FirewallConfigPolicy extends Policy { //Ecomp Name Assignment AttributeAssignmentExpressionType assignment5 = new AttributeAssignmentExpressionType(); - assignment5.setAttributeId("matching:" + this.ECOMPID); + assignment5.setAttributeId("matching:" + ECOMPID); assignment5.setCategory(CATEGORY_RESOURCE); assignment5.setIssuer(""); AttributeValueType configNameAttributeValue5 = new AttributeValueType(); @@ -551,7 +419,7 @@ public class FirewallConfigPolicy extends Policy { //Config Name Assignment AttributeAssignmentExpressionType assignment6 = new AttributeAssignmentExpressionType(); - assignment6.setAttributeId("matching:" + this.CONFIGID); + assignment6.setAttributeId("matching:" + CONFIGID); assignment6.setCategory(CATEGORY_RESOURCE); assignment6.setIssuer(""); AttributeValueType configNameAttributeValue6 = new AttributeValueType(); @@ -608,9 +476,6 @@ public class FirewallConfigPolicy extends Policy { assignment10.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue10)); advice.getAttributeAssignmentExpression().add(assignment10); - - int index = 0; - advices.getAdviceExpression().add(advice); return advices; } @@ -628,7 +493,6 @@ public class FirewallConfigPolicy extends Policy { JsonArray firewallRules = null; JsonArray serviceGroup = null; JsonArray addressGroup = null; - String securityZone=null; Connection con = null; Statement st = null; @@ -652,35 +516,9 @@ public class FirewallConfigPolicy extends Policy { firewallRules = json.getJsonArray("firewallRuleList"); serviceGroup = json.getJsonArray("serviceGroups"); addressGroup = json.getJsonArray("addressGroups"); - securityZone=json.getString("primaryParentZoneId").toString(); - logger.info("Parent child: securityZone from JSON: "+securityZone); String insertQuery = null; - //Inserting childPolicy and its parent to the FWChildToParent DB table - if(securityZone!=null){ - //Its a child Policy. - //Retrieve the parent name from the securityZone Id - String retrieveParentQuery= "select parent from fwparent where securityZone='"; - - retrieveParentQuery=retrieveParentQuery+securityZone+"';"; - logger.info("Parent child: Query to retrieve parent "+retrieveParentQuery); - rs = st.executeQuery(retrieveParentQuery); - - String parent=null; - if(rs.next()){ - parent = rs.getString("parent"); - } - rs.close(); - - - String insertQueryChildTable="INSERT INTO FWChildToParent(child, parent) VALUES ('"; - insertQueryChildTable=insertQueryChildTable+policyAdapter.getPolicyName()+"','"+parent+"');"; - logger.info("Parent child: Insert child and parent to DB: "+insertQueryChildTable); - st.executeUpdate(insertQueryChildTable); - - } - /* * Inserting firewallRuleList data into the Terms, SecurityZone, and Action tables */ @@ -707,9 +545,7 @@ public class FirewallConfigPolicy extends Policy { actionID = rs.getInt("ID"); } rs.close(); - - int i = 0; - for(JsonValue jsonValue : firewallRules) { + for(int i = 0;i<firewallRules.size();i++) { //increment ID Primary Keys termID = termID + 1; @@ -738,8 +574,8 @@ public class FirewallConfigPolicy extends Policy { JsonArray fromZoneArray = ruleListobj.getJsonArray("fromZones"); String fromZoneString = null; - int fromZoneIndex = 0; - for (JsonValue fromZoneJsonValue : fromZoneArray) { + + for (int fromZoneIndex = 0;fromZoneIndex<fromZoneArray.size(); fromZoneIndex++) { String value = fromZoneArray.get(fromZoneIndex).toString(); value = value.replace("\"", ""); @@ -750,17 +586,13 @@ public class FirewallConfigPolicy extends Policy { fromZoneString = value; } - fromZoneIndex++; - } String fromZoneInsert = "'"+fromZoneString+"'"; //getting toZone Array field from the firewallRulesList JsonArray toZoneArray = ruleListobj.getJsonArray("toZones"); String toZoneString = null; - - int toZoneIndex = 0; - for (JsonValue toZoneJsonValue : toZoneArray) { + for (int toZoneIndex = 0; toZoneIndex<toZoneArray.size(); toZoneIndex++) { String value = toZoneArray.get(toZoneIndex).toString(); value = value.replace("\"", ""); @@ -771,17 +603,13 @@ public class FirewallConfigPolicy extends Policy { toZoneString = value; } - toZoneIndex++; - } String toZoneInsert = "'"+toZoneString+"'"; //getting sourceList Array fields from the firewallRulesList JsonArray srcListArray = ruleListobj.getJsonArray("sourceList"); String srcListString = null; - - int srcListIndex = 0; - for (JsonValue srcListJsonValue : srcListArray) { + for (int srcListIndex = 0; srcListIndex< srcListArray.size(); srcListIndex++) { JsonObject srcListObj = srcListArray.getJsonObject(srcListIndex); String type = srcListObj.get("type").toString().replace("\"", ""); @@ -805,17 +633,13 @@ public class FirewallConfigPolicy extends Policy { srcListString = value; } - srcListIndex++; - } String srcListInsert = "'"+srcListString+"'"; //getting destinationList Array fields from the firewallRulesList JsonArray destListArray = ruleListobj.getJsonArray("destinationList"); String destListString = null; - - int destListIndex = 0; - for (JsonValue destListJsonValue : destListArray) { + for (int destListIndex = 0; destListIndex <destListArray.size(); destListIndex++) { JsonObject destListObj = destListArray.getJsonObject(destListIndex); String type = destListObj.get("type").toString().replace("\"", ""); @@ -837,17 +661,13 @@ public class FirewallConfigPolicy extends Policy { } else { destListString = value; } - - destListIndex++; } String destListInsert = "'"+destListString+"'"; //getting destServices Array fields from the firewallRulesList JsonArray destServicesArray = ruleListobj.getJsonArray("destServices"); String destPortListString = null; - - int destPortListIndex = 0; - for (JsonValue destListJsonValue : destServicesArray) { + for (int destPortListIndex = 0; destPortListIndex < destServicesArray.size(); destPortListIndex++) { JsonObject destServicesObj = destServicesArray.getJsonObject(destPortListIndex); String type = destServicesObj.get("type").toString().replace("\"", ""); @@ -869,8 +689,6 @@ public class FirewallConfigPolicy extends Policy { } else { destPortListString = value; } - - destPortListIndex++; } String destPortListInsert = "'"+destPortListString+"'"; @@ -889,8 +707,6 @@ public class FirewallConfigPolicy extends Policy { st.addBatch(actionSql); st.executeBatch(); - - i++; } } @@ -929,9 +745,7 @@ public class FirewallConfigPolicy extends Policy { portID = rs.getInt("ID"); } rs.close(); - - int i = 0; - for(JsonValue jsonValue : serviceGroup) { + for(int i = 0; i < serviceGroup.size() ; i++) { /* * Populate ArrayLists with values from the JSON @@ -965,9 +779,7 @@ public class FirewallConfigPolicy extends Policy { serviceListID = serviceListID + 1; String name = null; - - int membersIndex = 0; - for (JsonValue membersValue : membersArray) { + for (int membersIndex = 0; membersIndex< membersArray.size(); membersIndex++) { JsonObject membersObj = membersArray.getJsonObject(membersIndex); //String value = membersObj.get("name").toString(); String type = membersObj.get("type").toString().replace("\"", ""); @@ -990,8 +802,6 @@ public class FirewallConfigPolicy extends Policy { } else { name = value; } - - membersIndex++; } String nameInsert = "'"+name+"'"; @@ -1034,11 +844,7 @@ public class FirewallConfigPolicy extends Policy { st.executeBatch(); - } - - - - i++; + } } } @@ -1060,11 +866,7 @@ public class FirewallConfigPolicy extends Policy { addressID = rs.getInt("ID"); } rs.close(); - - - int i = 0; - for(JsonValue jsonValue : addressGroup) { - + for(int i = 0; i < addressGroup.size(); i++) { /* * Populate ArrayLists with values from the JSON */ @@ -1082,9 +884,7 @@ public class FirewallConfigPolicy extends Policy { String prefixIP = null; String type = null; - - int membersIndex = 0; - for (JsonValue membersValue : membersArray) { + for (int membersIndex = 0; membersIndex < membersArray.size(); membersIndex++) { JsonObject membersObj = membersArray.getJsonObject(membersIndex); //String value = membersObj.get("value").toString(); type = membersObj.get("type").toString().replace("\"", ""); @@ -1107,8 +907,6 @@ public class FirewallConfigPolicy extends Policy { } else { prefixIP = value; } - - membersIndex++; } String prefixList = "'"+prefixIP+"'"; @@ -1135,8 +933,6 @@ public class FirewallConfigPolicy extends Policy { //Execute the queries to Insert data st.executeUpdate(insertQuery); - - i++; } } @@ -1169,15 +965,11 @@ public class FirewallConfigPolicy extends Policy { st.executeBatch(); } catch (ClassNotFoundException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(e.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "FirewallConfigPolicy", "Exception building Firewall queries "); System.out.println(e.getMessage()); return false; } catch (SQLException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(e.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "FirewallConfigPolicy", "Exception executing Firewall queries"); System.out.println(e.getMessage()); return false; @@ -1246,8 +1038,8 @@ public class FirewallConfigPolicy extends Policy { JsonNode jsonDiff = createPatch(jsonBody, prevJsonBody); - int i = 0; - for (JsonNode node : jsonDiff) { + + for (int i = 0; i<jsonDiff.size(); i++) { //String path = jsonDiff.get(i).asText(); String jsonpatch = jsonDiff.get(i).toString(); @@ -1278,13 +1070,10 @@ public class FirewallConfigPolicy extends Policy { } rs.close(); - String insertQuery = null; - /* * Inserting firewallRuleList data into the Terms, SecurityZone, and Action tables */ - int ri = 0; - for(JsonValue jsonValue : firewallRules) { + for(int ri = 0; ri < firewallRules.size(); ri++) { //increment ID Primary Keys termID = termID + 1; @@ -1313,8 +1102,7 @@ public class FirewallConfigPolicy extends Policy { JsonArray fromZoneArray = ruleListobj.getJsonArray("fromZones"); String fromZoneString = null; - int fromZoneIndex = 0; - for (JsonValue fromZoneJsonValue : fromZoneArray) { + for (int fromZoneIndex = 0; fromZoneIndex<fromZoneArray.size() ; fromZoneIndex++) { String value = fromZoneArray.get(fromZoneIndex).toString(); value = value.replace("\"", ""); @@ -1325,8 +1113,6 @@ public class FirewallConfigPolicy extends Policy { fromZoneString = value; } - fromZoneIndex++; - } String fromZoneInsert = "'"+fromZoneString+"'"; @@ -1334,8 +1120,8 @@ public class FirewallConfigPolicy extends Policy { JsonArray toZoneArray = ruleListobj.getJsonArray("toZones"); String toZoneString = null; - int toZoneIndex = 0; - for (JsonValue toZoneJsonValue : toZoneArray) { + + for (int toZoneIndex = 0; toZoneIndex < toZoneArray.size(); toZoneIndex++) { String value = toZoneArray.get(toZoneIndex).toString(); value = value.replace("\"", ""); @@ -1346,16 +1132,12 @@ public class FirewallConfigPolicy extends Policy { toZoneString = value; } - toZoneIndex++; - } String toZoneInsert = "'"+toZoneString+"'"; //getting sourceList Array fields from the firewallRulesList JsonArray srcListArray = ruleListobj.getJsonArray("sourceList"); String srcListString = null; - - int srcListIndex = 0; - for (JsonValue srcListJsonValue : srcListArray) { + for (int srcListIndex = 0; srcListIndex<srcListArray.size(); srcListIndex++) { JsonObject srcListObj = srcListArray.getJsonObject(srcListIndex); String type = srcListObj.get("type").toString().replace("\"", ""); @@ -1379,17 +1161,13 @@ public class FirewallConfigPolicy extends Policy { srcListString = value; } - srcListIndex++; - } String srcListInsert = "'"+srcListString+"'"; //getting destinationList Array fields from the firewallRulesList JsonArray destListArray = ruleListobj.getJsonArray("destinationList"); String destListString = null; - - int destListIndex = 0; - for (JsonValue destListJsonValue : destListArray) { + for (int destListIndex = 0; destListIndex<destListArray.size(); destListIndex ++) { JsonObject destListObj = destListArray.getJsonObject(destListIndex); String type = destListObj.get("type").toString().replace("\"", ""); @@ -1411,17 +1189,13 @@ public class FirewallConfigPolicy extends Policy { } else { destListString = value; } - - destListIndex++; } String destListInsert = "'"+destListString+"'"; //getting destServices Array fields from the firewallRulesList JsonArray destServicesArray = ruleListobj.getJsonArray("destServices"); String destPortListString = null; - - int destPortListIndex = 0; - for (JsonValue destListJsonValue : destServicesArray) { + for (int destPortListIndex = 0; destPortListIndex < destServicesArray.size(); destPortListIndex++) { JsonObject destServicesObj = destServicesArray.getJsonObject(destPortListIndex); String type = destServicesObj.get("type").toString().replace("\"", ""); @@ -1443,8 +1217,6 @@ public class FirewallConfigPolicy extends Policy { } else { destPortListString = value; } - - destPortListIndex++; } String destPortListInsert = "'"+destPortListString+"'"; @@ -1471,10 +1243,7 @@ public class FirewallConfigPolicy extends Policy { actionSql = actionSql.replace('"', '\''); st.addBatch(actionSql); } - st.executeBatch(); - - ri++; } } @@ -1515,9 +1284,7 @@ public class FirewallConfigPolicy extends Policy { /* * Inserting serviceGroups data into the ServiceGroup, ServiceList, ProtocolList, and PortList tables */ - int si = 0; - for(JsonValue jsonValue : serviceGroup) { - + for(int si = 0; si < serviceGroup.size(); si++) { /* * Populate ArrayLists with values from the JSON */ @@ -1552,10 +1319,8 @@ public class FirewallConfigPolicy extends Policy { rs.close(); //increment ID Primary Keys serviceListID = serviceListID + 1; - String name = null; - int membersIndex = 0; - for (JsonValue membersValue : membersArray) { + for (int membersIndex = 0; membersIndex < membersArray.size(); membersIndex++) { JsonObject membersObj = membersArray.getJsonObject(membersIndex); String type = membersObj.get("type").toString().replace("\"", ""); @@ -1577,8 +1342,6 @@ public class FirewallConfigPolicy extends Policy { } else { name = value; } - - membersIndex++; } String nameInsert = "'"+name+"'"; @@ -1640,15 +1403,9 @@ public class FirewallConfigPolicy extends Policy { st.addBatch(portSql); } rs.close(); - st.executeBatch(); - - } - - - si++; + } } - } if (path.contains("addressGroups")) { @@ -1671,9 +1428,7 @@ public class FirewallConfigPolicy extends Policy { rs.close(); String insertQuery = null; - - int ai = 0; - for(JsonValue jsonValue : addressGroup) { + for(int ai=0; ai < addressGroup.size() ; ai++) { /* * Populate ArrayLists with values from the JSON @@ -1692,8 +1447,7 @@ public class FirewallConfigPolicy extends Policy { String prefixIP = null; String type = null; - int membersIndex = 0; - for (JsonValue membersValue : membersArray) { + for (int membersIndex=0; membersIndex < membersArray.size(); membersIndex++) { JsonObject membersObj = membersArray.getJsonObject(membersIndex); type = membersObj.get("type").toString().replace("\"", ""); @@ -1715,8 +1469,6 @@ public class FirewallConfigPolicy extends Policy { } else { prefixIP = value; } - - membersIndex++; } String prefixList = "'"+prefixIP+"'"; @@ -1753,20 +1505,13 @@ public class FirewallConfigPolicy extends Policy { + "VALUES("+prefixID+","+addressGroupName+","+prefixList+","+description+")"; } - - //Replace double quote with single quote insertQuery = insertQuery.replace('"', '\''); //Execute the queries to Insert data st.executeUpdate(insertQuery); - - ai++; - } - + } } - - i++; } /* @@ -1797,15 +1542,11 @@ public class FirewallConfigPolicy extends Policy { st.executeBatch(); } catch (ClassNotFoundException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(e.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "FirewallConfigPolicy", "Exception building Firewall queries"); System.out.println(e.getMessage()); return false; } catch (SQLException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(e.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "FirewallConfigPolicy", "Exception executing Firewall queries"); System.out.println(e.getMessage()); return false; diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/MicroServiceConfigPolicy.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/MicroServiceConfigPolicy.java index c65b0be9d..c5fdc18cc 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/MicroServiceConfigPolicy.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/MicroServiceConfigPolicy.java @@ -21,17 +21,35 @@ package org.openecomp.policy.pap.xacml.rest.components; import java.io.File; -import java.io.IOException; import java.io.PrintWriter; import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Path; import java.nio.file.Paths; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; -import java.util.StringTokenizer; +import java.util.Map.Entry; -import javax.json.stream.JsonGenerationException; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang.StringUtils; +import org.openecomp.policy.common.logging.eelf.MessageCodes; +import org.openecomp.policy.common.logging.eelf.PolicyLogger; +import org.openecomp.policy.common.logging.flexlogger.FlexLogger; +import org.openecomp.policy.common.logging.flexlogger.Logger; +import org.openecomp.policy.rest.XACMLRestProperties; +import org.openecomp.policy.rest.adapter.PolicyRestAdapter; + +import com.att.research.xacml.std.IdentifierImpl; +import com.att.research.xacml.util.XACMLProperties; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Splitter; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionsType; @@ -45,27 +63,21 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObjectFactory; import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; - -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter; - -import org.openecomp.policy.xacml.api.XACMLErrorConstants; -import com.att.research.xacml.std.IdentifierImpl; - -import org.openecomp.policy.common.logging.eelf.MessageCodes; -import org.openecomp.policy.common.logging.eelf.PolicyLogger; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; +import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; public class MicroServiceConfigPolicy extends Policy { - /** - * Config Fields - */ - private static final Logger logger = FlexLogger.getLogger(ConfigPolicy.class); + private static final Logger LOGGER = FlexLogger.getLogger(MicroServiceConfigPolicy.class); + + /* + * These are the parameters needed for DB access from the PAP + */ + private static String papDbDriver = null; + private static String papDbUrl = null; + private static String papDbUser = null; + private static String papDbPassword = null; + private static Map<String, String> mapAttribute = new HashMap<String,String>(); + private static Map<String, String> matchMap = new HashMap<String,String>(); public MicroServiceConfigPolicy() { super(); @@ -76,56 +88,30 @@ public class MicroServiceConfigPolicy extends Policy { } //save configuration of the policy based on the policyname - private void saveConfigurations(String policyName, String prevPolicyName, String jsonBody) { - String domain = getParentPathSubScopeDir(); - String path = domain.replace('\\', '.'); - if(path.contains("/")){ - path = domain.replace('/', '.'); - logger.info("print the path:" +path); - } + private void saveConfigurations(String policyName, String jsonBody) { try { - String body = null; - try { - body = jsonBody; - } catch (Exception e) { - e.printStackTrace(); - } - - System.out.println(body); if(policyName.endsWith(".xml")){ - policyName = policyName.substring(0, policyName.lastIndexOf(".xml")); + policyName = policyName.replace(".xml", ""); } - PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator+path + "."+ policyName +".json"); - out.println(body); + PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator + policyName +".json"); + out.println(jsonBody); out.close(); - - } catch (JsonGenerationException e) { - e.printStackTrace(); - } catch (IOException e) { + } catch (Exception e) { + LOGGER.error("Exception Occured While writing Configuration data"+e); e.printStackTrace(); - } - + } } - //getting the policy name and setting to configuration on adding .json - private String getConfigFile(String filename) { - filename = FilenameUtils.removeExtension(filename); - if (filename.endsWith(".xml")) { - filename = filename.substring(0, filename.length() - 4); - } - filename = filename +".json"; - return filename; - } @Override public Map<String, String> savePolicies() throws Exception { - + Map<String, String> successMap = new HashMap<String,String>(); if(isPolicyExists()){ successMap.put("EXISTS", "This Policy already exist on the PAP"); return successMap; } - + if(!isPreparedToSave()){ //Prep and configure the policy for saving prepareToSave(); @@ -133,12 +119,10 @@ public class MicroServiceConfigPolicy extends Policy { // Until here we prepared the data and here calling the method to create xml. Path newPolicyPath = null; - newPolicyPath = Paths.get(policyAdapter.getParentPath().toString(), policyName); - successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject() ); - if (successMap.containsKey("success")) { - Path finalPolicyPath = getFinalPolicyPath(); - policyAdapter.setFinalPolicyPath(finalPolicyPath.toString()); - } + newPolicyPath = Paths.get(policyAdapter.getNewFileName()); + + successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject()); + return successMap; } @@ -154,12 +138,7 @@ public class MicroServiceConfigPolicy extends Policy { int version = 0; String policyID = policyAdapter.getPolicyID(); - - if (policyAdapter.isEditPolicy()) { - version = policyAdapter.getHighestVersion() + 1; - } else { - version = 1; - } + version = policyAdapter.getHighestVersion(); // Create the Instance for pojo, PolicyType object is used in marshalling. if (policyAdapter.getPolicyType().equals("Config")) { @@ -170,33 +149,11 @@ public class MicroServiceConfigPolicy extends Policy { policyConfig.setTarget(new TargetType()); policyAdapter.setData(policyConfig); } - + policyName = policyAdapter.getNewFileName(); if (policyAdapter.getData() != null) { - - // Save off everything - // making ready all the required elements to generate the action policy xml. - // Get the uniqueness for policy name. - String prevPolicyName = null; - if(policyAdapter.isEditPolicy()){ - prevPolicyName = "Config_MS_" + policyAdapter.getPolicyName() + "." + policyAdapter.getHighestVersion() + ".xml"; - } - - Path newFile = this.getNextLoopFilename(Paths.get(policyAdapter.getParentPath()), policyAdapter.getPolicyType(), - policyAdapter.getConfigPolicyType(), policyAdapter.getPolicyName(), version); - - if (newFile == null) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Policy already Exists, cannot create the policy."); - PolicyLogger.error("Policy already Exists, cannot create the policy."); - setPolicyExists(true); - return false; - } - - policyName = newFile.getFileName().toString(); - // Save the Configurations file with the policy name with extention based on selection. String jsonBody = policyAdapter.getJsonBody(); - saveConfigurations(policyName, prevPolicyName, jsonBody); + saveConfigurations(policyName, jsonBody); // Make sure the filename ends with an extension if (policyName.endsWith(".xml") == false) { @@ -211,23 +168,35 @@ public class MicroServiceConfigPolicy extends Policy { configPolicy.setRuleCombiningAlgId(policyAdapter.getRuleCombiningAlgId()); AllOfType allOfOne = new AllOfType(); - final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString()); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - logger.info("print the main domain value "+policyDir); - String path = policyDir.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir.replace('/', '.'); - logger.info("print the path:" +path); - } - String fileName = FilenameUtils.removeExtension(policyName); - fileName = path + "." + fileName + ".xml"; + String fileName = policyAdapter.getNewFileName(); String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); } + //setup values for pulling out matching attributes + ObjectMapper mapper = new ObjectMapper(); + JsonNode rootNode = mapper.readTree(policyAdapter.getJsonBody()); + String matching = null; + + if (policyAdapter.getTtlDate()==null){ + policyAdapter.setTtlDate("NA"); + } + if (policyAdapter.getServiceType().contains("-v")){ + matching = getValueFromDictionary(policyAdapter.getServiceType()); + } else { + String jsonVersion = StringUtils.replaceEach(rootNode.get("version").toString(), new String[]{"\""}, new String[]{""}); + matching = getValueFromDictionary(policyAdapter.getServiceType() + "-v" + jsonVersion); + } + + matchMap = new HashMap<String,String>(); + if (matching != null && !matching.isEmpty()){ + matchMap = Splitter.on(",").withKeyValueSeparator("=").split(matching); + if(policyAdapter.getJsonBody() != null){ + pullMatchValue(rootNode); + } + } + // Match for policyName allOfOne.getMatch().add(createMatch("PolicyName", name)); @@ -235,14 +204,26 @@ public class MicroServiceConfigPolicy extends Policy { // Adding the matches to AllOfType element Match for Ecomp allOf.getMatch().add(createMatch("ECOMPName", policyAdapter.getEcompName())); - // Match for ConfigName - allOf.getMatch().add(createMatch("ConfigName", policyAdapter.getConfigName())); - // Match for Service - allOf.getMatch().add(createDynamicMatch("service", policyAdapter.getServiceType())); - // Match for uuid - allOf.getMatch().add(createDynamicMatch("uuid", policyAdapter.getUuid())); - // Match for location - allOf.getMatch().add(createDynamicMatch("location", policyAdapter.getLocation())); + if (matchMap==null || matchMap.isEmpty()){ + // Match for ConfigName + allOf.getMatch().add(createMatch("ConfigName", policyAdapter.getConfigName())); + // Match for Service + allOf.getMatch().add(createDynamicMatch("service", policyAdapter.getServiceType())); + // Match for uuid + allOf.getMatch().add(createDynamicMatch("uuid", policyAdapter.getUuid())); + // Match for location + allOf.getMatch().add(createDynamicMatch("location", policyAdapter.getLocation())); + }else { + for (Entry<String, String> matchValue : matchMap.entrySet()){ + String value = matchValue.getValue(); + String key = matchValue.getKey().trim(); + if (value.contains("matching-true")){ + if (mapAttribute.containsKey(key)){ + allOf.getMatch().add(createDynamicMatch(key, mapAttribute.get(key))); + } + } + } + } // Match for riskType allOf.getMatch().add( createDynamicMatch("RiskType", policyAdapter.getRiskType())); @@ -285,8 +266,6 @@ public class MicroServiceConfigPolicy extends Policy { try { accessURI = new URI(ACTION_ID); } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getStackTrace()); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "MicroServiceConfigPolicy", "Exception creating ACCESS URI"); } accessAttributeDesignator.setCategory(CATEGORY_ACTION); @@ -306,8 +285,6 @@ public class MicroServiceConfigPolicy extends Policy { try { configURI = new URI(RESOURCE_ID); } catch (URISyntaxException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getStackTrace()); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "MicroServiceConfigPolicy", "Exception creating Config URI"); } configAttributeDesignator.setCategory(CATEGORY_RESOURCE); @@ -332,14 +309,80 @@ public class MicroServiceConfigPolicy extends Policy { policyAdapter.setPolicyData(configPolicy); } else { - //TODO:EELF Cleanup - Remove logger - //logger.error("Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); PolicyLogger.error("Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); } setPreparedToSave(true); return true; } + private void pullMatchValue(JsonNode rootNode) { + Iterator<Map.Entry<String, JsonNode>> fieldsIterator = rootNode.fields(); + String newValue = null; + while (fieldsIterator.hasNext()) { + Map.Entry<String, JsonNode> field = fieldsIterator.next(); + final String key = field.getKey(); + final JsonNode value = field.getValue(); + if (value.isContainerNode() && !value.isArray()) { + pullMatchValue(value); // RECURSIVE CALL + } else { + newValue = StringUtils.replaceEach(value.toString(), new String[]{"[", "]", "\""}, new String[]{"", "", ""}); + mapAttribute.put(key, newValue); + } + } + + } + + private String getValueFromDictionary(String service){ + + Connection con = null; + Statement st = null; + ResultSet rs = null; + + String modelName = service.split("-v")[0]; + String modelVersion = service.split("-v")[1]; + + + /* + * Retrieve the property values for db access from the xacml.pap.properties + */ + papDbDriver = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_DRIVER); + papDbUrl = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_URL); + papDbUser = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_USER); + papDbPassword = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_PASSWORD); + + String ruleTemplate=null; + + try { + //Get DB Connection + Class.forName(papDbDriver); + con = DriverManager.getConnection(papDbUrl,papDbUser,papDbPassword); + st = con.createStatement(); + + String queryString = "Select * from MicroServiceModels where modelName=\"" + modelName + + "\" AND version=\"" + modelVersion+"\""; + + + rs = st.executeQuery(queryString); + if(rs.next()){ + ruleTemplate=rs.getString("annotation"); + } + rs.close(); + }catch (ClassNotFoundException e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "MicroServiceModels", "Exception querying MicroServiceModels"); + } catch (SQLException e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "MicroServiceModels", "Exception querying MicroServiceModels"); + } finally { + try{ + if (con!=null) con.close(); + if (rs!=null) rs.close(); + if (st!=null) st.close(); + } catch (Exception ex){ + LOGGER.error("Exception Occured While Closing the Database Connection"+ex); + } + } + return ruleTemplate; + + } // Data required for Advice part is setting here. private AdviceExpressionsType getAdviceExpressions(int version, String fileName) { AdviceExpressionsType advices = new AdviceExpressionsType(); @@ -358,7 +401,6 @@ public class MicroServiceConfigPolicy extends Policy { assignment1.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue)); advice.getAttributeAssignmentExpression().add(assignment1); - final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString()); // For Config file Url if configurations are provided. AttributeAssignmentExpressionType assignment2 = new AttributeAssignmentExpressionType(); assignment2.setAttributeId("URLID"); @@ -367,17 +409,13 @@ public class MicroServiceConfigPolicy extends Policy { AttributeValueType AttributeValue = new AttributeValueType(); AttributeValue.setDataType(URI_DATATYPE); - String policyDir1 = policyAdapter.getParentPath().toString(); - int startIndex1 = policyDir1.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir1 = policyDir1.substring(startIndex1, policyDir1.length()); - logger.info("print the main domain value"+policyDir1); - String path = policyDir1.replace('\\', '.'); - if(path.contains("/")){ - path = policyDir1.replace('/', '.'); - logger.info("print the path:" +path); + String configName; + if(policyName.endsWith(".xml")){ + configName = policyName.replace(".xml", ""); + }else{ + configName = policyName; } - String content = CONFIG_URL +"/Config/" + path + "." + getConfigFile(policyName); - System.out.println("URL value :" + content); + String content = CONFIG_URL +"/Config/" + configName + ".json"; AttributeValue.getContent().add(content); assignment2.setExpression(new ObjectFactory().createAttributeValue(AttributeValue)); @@ -389,25 +427,8 @@ public class MicroServiceConfigPolicy extends Policy { AttributeValueType attributeValue3 = new AttributeValueType(); attributeValue3.setDataType(STRING_DATATYPE); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - StringTokenizer tokenizer = null; - StringBuffer buffer = new StringBuffer(); - if (policyDir.contains("\\")) { - tokenizer = new StringTokenizer(policyDir, "\\"); - } else { - tokenizer = new StringTokenizer(policyDir, "/"); - } - if (tokenizer != null) { - while (tokenizer.hasMoreElements()) { - String value = tokenizer.nextToken(); - buffer.append(value); - buffer.append("."); - } - } fileName = FilenameUtils.removeExtension(fileName); - fileName = buffer.toString() + fileName + ".xml"; + fileName = fileName + ".xml"; String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); if ((name == null) || (name.equals(""))) { name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); @@ -429,7 +450,7 @@ public class MicroServiceConfigPolicy extends Policy { advice.getAttributeAssignmentExpression().add(assignment4); AttributeAssignmentExpressionType assignment5 = new AttributeAssignmentExpressionType(); - assignment5.setAttributeId("matching:" + this.ECOMPID); + assignment5.setAttributeId("matching:" + ECOMPID); assignment5.setCategory(CATEGORY_RESOURCE); assignment5.setIssuer(""); @@ -440,53 +461,78 @@ public class MicroServiceConfigPolicy extends Policy { advice.getAttributeAssignmentExpression().add(assignment5); - AttributeAssignmentExpressionType assignment6 = new AttributeAssignmentExpressionType(); - assignment6.setAttributeId("matching:" + this.CONFIGID); - assignment6.setCategory(CATEGORY_RESOURCE); - assignment6.setIssuer(""); - - AttributeValueType configNameAttributeValue6 = new AttributeValueType(); - configNameAttributeValue6.setDataType(STRING_DATATYPE); - configNameAttributeValue6.getContent().add(policyAdapter.getConfigName()); - assignment6.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue6)); - - advice.getAttributeAssignmentExpression().add(assignment6); - AttributeAssignmentExpressionType assignment7 = new AttributeAssignmentExpressionType(); - assignment7.setAttributeId("matching:service"); - assignment7.setCategory(CATEGORY_RESOURCE); - assignment7.setIssuer(""); - - AttributeValueType configNameAttributeValue7 = new AttributeValueType(); - configNameAttributeValue7.setDataType(STRING_DATATYPE); - configNameAttributeValue7.getContent().add(policyAdapter.getServiceType()); - assignment7.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue7)); - - advice.getAttributeAssignmentExpression().add(assignment7); - - AttributeAssignmentExpressionType assignment8 = new AttributeAssignmentExpressionType(); - assignment8.setAttributeId("matching:uuid"); - assignment8.setCategory(CATEGORY_RESOURCE); - assignment8.setIssuer(""); - - AttributeValueType configNameAttributeValue8 = new AttributeValueType(); - configNameAttributeValue8.setDataType(STRING_DATATYPE); - configNameAttributeValue8.getContent().add(policyAdapter.getUuid()); - assignment8.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue8)); - - advice.getAttributeAssignmentExpression().add(assignment8); + AttributeAssignmentExpressionType assignment7 = new AttributeAssignmentExpressionType(); + assignment7.setAttributeId("matching:service"); + assignment7.setCategory(CATEGORY_RESOURCE); + assignment7.setIssuer(""); + + AttributeValueType configNameAttributeValue7 = new AttributeValueType(); + configNameAttributeValue7.setDataType(STRING_DATATYPE); + configNameAttributeValue7.getContent().add(policyAdapter.getServiceType()); + assignment7.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue7)); + + advice.getAttributeAssignmentExpression().add(assignment7); + + if (matchMap==null || matchMap.isEmpty()){ + AttributeAssignmentExpressionType assignment6 = new AttributeAssignmentExpressionType(); + assignment6.setAttributeId("matching:" + CONFIGID); + assignment6.setCategory(CATEGORY_RESOURCE); + assignment6.setIssuer(""); + + AttributeValueType configNameAttributeValue6 = new AttributeValueType(); + configNameAttributeValue6.setDataType(STRING_DATATYPE); + configNameAttributeValue6.getContent().add(policyAdapter.getConfigName()); + assignment6.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue6)); + + advice.getAttributeAssignmentExpression().add(assignment6); + + + AttributeAssignmentExpressionType assignment8 = new AttributeAssignmentExpressionType(); + assignment8.setAttributeId("matching:uuid"); + assignment8.setCategory(CATEGORY_RESOURCE); + assignment8.setIssuer(""); + + AttributeValueType configNameAttributeValue8 = new AttributeValueType(); + configNameAttributeValue8.setDataType(STRING_DATATYPE); + configNameAttributeValue8.getContent().add(policyAdapter.getUuid()); + assignment8.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue8)); + + advice.getAttributeAssignmentExpression().add(assignment8); + + AttributeAssignmentExpressionType assignment9 = new AttributeAssignmentExpressionType(); + assignment9.setAttributeId("matching:Location"); + assignment9.setCategory(CATEGORY_RESOURCE); + assignment9.setIssuer(""); + + AttributeValueType configNameAttributeValue9 = new AttributeValueType(); + configNameAttributeValue9.setDataType(STRING_DATATYPE); + configNameAttributeValue9.getContent().add(policyAdapter.getLocation()); + assignment9.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue9)); + + advice.getAttributeAssignmentExpression().add(assignment9); + } else { + for (Entry<String, String> matchValue : matchMap.entrySet()){ + String value = matchValue.getValue(); + String key = matchValue.getKey().trim(); + if (value.contains("matching-true")){ + if (mapAttribute.containsKey(key)){ + AttributeAssignmentExpressionType assignment9 = new AttributeAssignmentExpressionType(); + assignment9.setAttributeId("matching:" + key); + assignment9.setCategory(CATEGORY_RESOURCE); + assignment9.setIssuer(""); + + AttributeValueType configNameAttributeValue9 = new AttributeValueType(); + configNameAttributeValue9.setDataType(STRING_DATATYPE); + configNameAttributeValue9.getContent().add(mapAttribute.get(key)); + assignment9.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue9)); + + advice.getAttributeAssignmentExpression().add(assignment9); + + } + } + } + } - AttributeAssignmentExpressionType assignment9 = new AttributeAssignmentExpressionType(); - assignment9.setAttributeId("matching:Location"); - assignment9.setCategory(CATEGORY_RESOURCE); - assignment9.setIssuer(""); - - AttributeValueType configNameAttributeValue9 = new AttributeValueType(); - configNameAttributeValue9.setDataType(STRING_DATATYPE); - configNameAttributeValue9.getContent().add(policyAdapter.getLocation()); - assignment9.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue9)); - - advice.getAttributeAssignmentExpression().add(assignment9); - AttributeAssignmentExpressionType assignment10 = new AttributeAssignmentExpressionType(); assignment10.setAttributeId("Priority"); assignment10.setCategory(CATEGORY_RESOURCE); @@ -531,7 +577,7 @@ public class MicroServiceConfigPolicy extends Policy { AttributeValueType configNameAttributeValue13 = new AttributeValueType(); configNameAttributeValue13.setDataType(STRING_DATATYPE); - configNameAttributeValue13.getContent().add(policyAdapter.getRiskLevel()); + configNameAttributeValue13.getContent().add(policyAdapter.getGuard()); assignment13.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue13)); advice.getAttributeAssignmentExpression().add(assignment13); @@ -556,6 +602,4 @@ public class MicroServiceConfigPolicy extends Policy { public Object getCorrectPolicyDataObject() { return policyAdapter.getPolicyData(); } - - } diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/Policy.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/Policy.java index 09c90de68..0f8ccfba0 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/Policy.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/Policy.java @@ -41,24 +41,18 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; import org.apache.commons.io.FilenameUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.json.JSONObject; -import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter; +import org.openecomp.policy.common.logging.eelf.MessageCodes; +import org.openecomp.policy.common.logging.eelf.PolicyLogger; import org.openecomp.policy.rest.XACMLRestProperties; +import org.openecomp.policy.rest.adapter.PolicyRestAdapter; +import org.openecomp.policy.xacml.util.XACMLPolicyWriter; -import org.openecomp.policy.xacml.api.XACMLErrorConstants; import com.att.research.xacml.std.IdentifierImpl; -import org.openecomp.policy.xacml.util.XACMLPolicyWriter; import com.att.research.xacml.util.XACMLProperties; import com.att.research.xacmlatt.pdp.policy.PolicyDef; import com.att.research.xacmlatt.pdp.policy.dom.DOMPolicyDef; -import org.openecomp.policy.common.logging.eelf.MessageCodes; -import org.openecomp.policy.common.logging.eelf.PolicyLogger; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; - public abstract class Policy { /** @@ -70,22 +64,21 @@ public abstract class Policy { public static final String ECOMPID = "ECOMPName"; public static final String CONFIGID = "ConfigName"; public static final String CLOSEDLOOPID = "ServiceType"; - + public static final String CONFIG_POLICY = "Config"; public static final String ACTION_POLICY = "Action"; public static final String DECISION_POLICY = "Decision"; protected String policyName = null; - private static final Logger logger = FlexLogger.getLogger(Policy.class); - - boolean isValidForm = true; - + + protected boolean isValidForm = true; + private Path finalPolicyPath = null; - + private boolean preparedToSave = false; - + private boolean policyExists = false; - + public Path getFinalPolicyPath() { return finalPolicyPath; } @@ -94,362 +87,318 @@ public abstract class Policy { this.finalPolicyPath = finalPolicyPath; } - // Constants Used in XML Creation - public static final String CATEGORY_RECIPIENT_SUBJECT = "urn:oasis:names:tc:xacml:1.0:subject-category:recipient-subject"; - public static final String CATEGORY_RESOURCE = "urn:oasis:names:tc:xacml:3.0:attribute-category:resource"; - public static final String CATEGORY_ACTION = "urn:oasis:names:tc:xacml:3.0:attribute-category:action"; - public static final String CATEGORY_ACCESS_SUBJECT = "urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"; - public static final String ACTION_ID = "urn:oasis:names:tc:xacml:1.0:action:action-id"; - public static final String SUBJECT_ID = "urn:oasis:names:tc:xacml:1.0:subject:subject-id"; - public static final String RESOURCE_ID = "urn:oasis:names:tc:xacml:1.0:resource:resource-id"; - public static final String FUNTION_INTEGER_ONE_AND_ONLY = "urn:oasis:names:tc:xacml:1.0:function:integer-one-and-only"; - public static final String FUNCTION_STRING_ONE_AND_ONLY = "urn:oasis:names:tc:xacml:1.0:function:string-one-and-only"; - public static final String FUNCTION_BOOLEAN_ONE_AND_ONLY = "urn:oasis:names:tc:xacml:1.0:function:boolean-one-and-only"; - public static final String FUNCTION_STRING_EQUAL = "urn:oasis:names:tc:xacml:1.0:function:string-equal"; - public static final String FUNCTION_STRING_REGEX_MATCH = "org.openecomp.function.regex-match"; - public static final String FUNCTION_STRING_EQUAL_IGNORE = "urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case"; - public static final String INTEGER_DATATYPE = "http://www.w3.org/2001/XMLSchema#integer"; - public static final String BOOLEAN_DATATYPE = "http://www.w3.org/2001/XMLSchema#boolean"; - public static final String STRING_DATATYPE = "http://www.w3.org/2001/XMLSchema#string"; - public static final String URI_DATATYPE = "http://www.w3.org/2001/XMLSchema#anyURI"; - public static final String RULE_VARIABLE = "var:"; - public static final String EMPTY_STRING = ""; - private static final String String = null; - - public static String CONFIG_HOME = null; - public static String ACTION_HOME = null; - public static String CONFIG_URL = null; - - protected Map<String, String> performer = new HashMap<String, String>(); - - private static String actionHome = null; - private static String configHome = null; - - public PolicyRestAdapter policyAdapter = null; - String ruleID = ""; - - public Policy() { - CONFIG_HOME = getConfigHome(); - ACTION_HOME = getActionHome(); - CONFIG_URL = "$URL"; - performer.put("PDP", "PDPAction"); - performer.put("PEP", "PEPAction"); + // Constants Used in XML Creation + public static final String CATEGORY_RECIPIENT_SUBJECT = "urn:oasis:names:tc:xacml:1.0:subject-category:recipient-subject"; + public static final String CATEGORY_RESOURCE = "urn:oasis:names:tc:xacml:3.0:attribute-category:resource"; + public static final String CATEGORY_ACTION = "urn:oasis:names:tc:xacml:3.0:attribute-category:action"; + public static final String CATEGORY_ACCESS_SUBJECT = "urn:oasis:names:tc:xacml:1.0:subject-category:access-subject"; + public static final String ACTION_ID = "urn:oasis:names:tc:xacml:1.0:action:action-id"; + public static final String SUBJECT_ID = "urn:oasis:names:tc:xacml:1.0:subject:subject-id"; + public static final String RESOURCE_ID = "urn:oasis:names:tc:xacml:1.0:resource:resource-id"; + public static final String FUNTION_INTEGER_ONE_AND_ONLY = "urn:oasis:names:tc:xacml:1.0:function:integer-one-and-only"; + public static final String FUNCTION_STRING_ONE_AND_ONLY = "urn:oasis:names:tc:xacml:1.0:function:string-one-and-only"; + public static final String FUNCTION_BOOLEAN_ONE_AND_ONLY = "urn:oasis:names:tc:xacml:1.0:function:boolean-one-and-only"; + public static final String FUNCTION_STRING_EQUAL = "urn:oasis:names:tc:xacml:1.0:function:string-equal"; + public static final String FUNCTION_STRING_REGEX_MATCH = "org.openecomp.function.regex-match"; + public static final String FUNCTION_STRING_EQUAL_IGNORE = "urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case"; + public static final String INTEGER_DATATYPE = "http://www.w3.org/2001/XMLSchema#integer"; + public static final String BOOLEAN_DATATYPE = "http://www.w3.org/2001/XMLSchema#boolean"; + public static final String STRING_DATATYPE = "http://www.w3.org/2001/XMLSchema#string"; + public static final String URI_DATATYPE = "http://www.w3.org/2001/XMLSchema#anyURI"; + public static final String RULE_VARIABLE = "var:"; + public static final String EMPTY_STRING = ""; + private static final String String = null; + + public static String CONFIG_HOME = null; + public static String ACTION_HOME = null; + public static String CONFIG_URL = null; + + protected Map<String, String> performer = new HashMap<String, String>(); + + private static String actionHome = null; + private static String configHome = null; + + public PolicyRestAdapter policyAdapter = null; + String ruleID = ""; + + public Policy() { + CONFIG_HOME = getConfigHome(); + ACTION_HOME = getActionHome(); + CONFIG_URL = "$URL"; + performer.put("PDP", "PDPAction"); + performer.put("PEP", "PEPAction"); + } + + //Each policy type seems to either use policyData or data field policy adapter when + //getting the xml to save the policy. Instead of keep this hardcoded in the save method, + //this method makes it usable outside. + /** + * Return the data field of the PolicyAdapter that will be used when saving this policy + * with the savePolicies method. + * @return Either the PolicyAdapter.getData() or PolicyAdapter.getPolicyData() + */ + public abstract Object getCorrectPolicyDataObject(); + public abstract Map<String, String> savePolicies() throws Exception; + + //This is the method for preparing the policy for saving. We have broken it out + //separately because the fully configured policy is used for multiple things + public abstract boolean prepareToSave() throws Exception; + + + // create match for ecomp and config name + protected MatchType createMatch(String key, String value) { + MatchType match = new MatchType(); + + AttributeValueType attributeValue = new AttributeValueType(); + attributeValue.setDataType(STRING_DATATYPE); + attributeValue.getContent().add(value); + match.setAttributeValue(attributeValue); + AttributeDesignatorType attributeDesignator = new AttributeDesignatorType(); + URI uri = null; + try { + uri = new URI(key); + } catch (URISyntaxException e) { + e.printStackTrace(); } + attributeDesignator.setCategory(CATEGORY_ACCESS_SUBJECT); + attributeDesignator.setDataType(STRING_DATATYPE); + attributeDesignator.setAttributeId(new IdentifierImpl(uri).stringValue()); + match.setAttributeDesignator(attributeDesignator); + match.setMatchId(FUNCTION_STRING_REGEX_MATCH); + return match; + } - //Each policy type seems to either use policyData or data field policy adapter when - //getting the xml to save the policy. Instead of keep this hardcoded in the save method, - //this method makes it usable outside. - /** - * Return the data field of the PolicyAdapter that will be used when saving this policy - * with the savePolicies method. - * @return Either the PolicyAdapter.getData() or PolicyAdapter.getPolicyData() - */ - public abstract Object getCorrectPolicyDataObject(); - public abstract Map<String, String> savePolicies() throws Exception; - - //This is the method for preparing the policy for saving. We have broken it out - //separately because the fully configured policy is used for multiple things - public abstract boolean prepareToSave() throws Exception; - - - // create match for ecomp and config name - protected MatchType createMatch(String key, String value) { - MatchType match = new MatchType(); - - AttributeValueType attributeValue = new AttributeValueType(); - attributeValue.setDataType(STRING_DATATYPE); - attributeValue.getContent().add(value); - match.setAttributeValue(attributeValue); - AttributeDesignatorType attributeDesignator = new AttributeDesignatorType(); - URI uri = null; - try { - uri = new URI(key); - } catch (URISyntaxException e) { - e.printStackTrace(); - } - attributeDesignator.setCategory(CATEGORY_ACCESS_SUBJECT); - attributeDesignator.setDataType(STRING_DATATYPE); - attributeDesignator.setAttributeId(new IdentifierImpl(uri).stringValue()); - match.setAttributeDesignator(attributeDesignator); - match.setMatchId(FUNCTION_STRING_REGEX_MATCH); - return match; + // Creating the match for dynamically added components. + protected MatchType createDynamicMatch(String key, String value) { + MatchType dynamicMatch = new MatchType(); + AttributeValueType dynamicAttributeValue = new AttributeValueType(); + String dataType = null; + dataType = STRING_DATATYPE; + dynamicAttributeValue.setDataType(dataType); + dynamicAttributeValue.getContent().add(value); + dynamicMatch.setAttributeValue(dynamicAttributeValue); + + AttributeDesignatorType dynamicAttributeDesignator = new AttributeDesignatorType(); + + URI dynamicURI = null; + try { + dynamicURI = new URI(key); + } catch (URISyntaxException e) { + e.printStackTrace();// log msg } - - // Creating the match for dynamically added components. - protected MatchType createDynamicMatch(String key, String value) { - MatchType dynamicMatch = new MatchType(); - AttributeValueType dynamicAttributeValue = new AttributeValueType(); - //Attribute attribute = findAttributeByAttributeId(key); - String dataType = null; - // if (value.matches("[0-9]+")) { - // dataType = INTEGER_DATATYPE; - // } else { - // dataType = STRING_DATATYPE; - // } - dataType = STRING_DATATYPE; - dynamicAttributeValue.setDataType(dataType); - dynamicAttributeValue.getContent().add(value); - dynamicMatch.setAttributeValue(dynamicAttributeValue); - - AttributeDesignatorType dynamicAttributeDesignator = new AttributeDesignatorType(); - - URI dynamicURI = null; - try { - dynamicURI = new URI(key); - } catch (URISyntaxException e) { - e.printStackTrace();// log msg - } - dynamicAttributeDesignator.setCategory(CATEGORY_RESOURCE); - dynamicAttributeDesignator.setDataType(dataType); - dynamicAttributeDesignator.setAttributeId(new IdentifierImpl(dynamicURI).stringValue()); - dynamicMatch.setAttributeDesignator(dynamicAttributeDesignator); - dynamicMatch.setMatchId(FUNCTION_STRING_REGEX_MATCH); + dynamicAttributeDesignator.setCategory(CATEGORY_RESOURCE); + dynamicAttributeDesignator.setDataType(dataType); + dynamicAttributeDesignator.setAttributeId(new IdentifierImpl(dynamicURI).stringValue()); + dynamicMatch.setAttributeDesignator(dynamicAttributeDesignator); + dynamicMatch.setMatchId(FUNCTION_STRING_REGEX_MATCH); + + return dynamicMatch; + } - return dynamicMatch; + //validation for numeric + protected boolean isNumeric(String str){ + for (char c : str.toCharArray()){ + if (!Character.isDigit(c)) return false; } + return true; + } - //validation for numeric - protected boolean isNumeric(String str) - { - for (char c : str.toCharArray()) - { - if (!Character.isDigit(c)) return false; - } - return true; + // Validation for json. + protected static boolean isJSONValid(String data) { + try { + new JSONObject(data); + InputStream stream = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8)); + JsonReader jsonReader = Json.createReader(stream); + System.out.println("Json Value is: " + jsonReader.read().toString() ); + } catch (Exception e) { + return false; } - - // Validation for json. - protected static boolean isJSONValid(String data) { - try { - new JSONObject(data); - InputStream stream = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8)); - JsonReader jsonReader = Json.createReader(stream); - System.out.println("Json Value is: " + jsonReader.read().toString() ); - } catch (Exception e) { - return false; + return true; + } + + // the Policy Name as Unique One throws error + @SuppressWarnings("static-access") + protected Path getNextFilename(Path parent, String policyType, String polcyFileName, Integer version) { + policyType = FilenameUtils.removeExtension(policyType); + polcyFileName = FilenameUtils.removeExtension(polcyFileName); + Path newFile = null; + String policyDir = EMPTY_STRING; + String absolutePath = parent.toString(); + if (absolutePath != null && !absolutePath.equals(EMPTY_STRING)) { + policyDir = absolutePath.substring(absolutePath.lastIndexOf("\\") + 1, absolutePath.length()); + if (policyDir == null || policyDir.equals(EMPTY_STRING)) { + policyDir = absolutePath.substring(absolutePath.lastIndexOf("/") + 1, absolutePath.length()); } - return true; } - - // the Policy Name as Unique One throws error - protected Path getNextFilename(Path parent, String policyType, String polcyFileName, Integer version) { - policyType = FilenameUtils.removeExtension(policyType); - polcyFileName = FilenameUtils.removeExtension(polcyFileName); - Path newFile = null; - String policyDir = EMPTY_STRING; - String absolutePath = parent.toString(); - if (absolutePath != null && !absolutePath.equals(EMPTY_STRING)) { - policyDir = absolutePath.substring(absolutePath.lastIndexOf("\\") + 1, absolutePath.length()); - if (policyDir == null || policyDir.equals(EMPTY_STRING)) { - policyDir = absolutePath.substring(absolutePath.lastIndexOf("/") + 1, absolutePath.length()); - } - } - String fileName = "default"; - if (policyDir != null && !policyDir.equals(EMPTY_STRING)) { - fileName = policyType + "_" + String.format(polcyFileName) + "." + version + ".xml"; - } - if (fileName != null) { - newFile = Paths.get(parent.toString(), fileName); - } - if (Files.notExists(newFile)) { - return newFile; - } - return null; + String fileName = "default"; + if (policyDir != null && !policyDir.equals(EMPTY_STRING)) { + fileName = policyType + "_" + String.format(polcyFileName) + "." + version + ".xml"; + } + if (fileName != null) { + newFile = Paths.get(parent.toString(), fileName); } - - protected Path getNextLoopFilename(Path parentPath, String policyType, - String policyConfigType, String policyFileName, Integer version) { - policyType = FilenameUtils.removeExtension(policyType); - policyConfigType = FilenameUtils.removeExtension(policyConfigType); - policyFileName = FilenameUtils.removeExtension(policyFileName); - Path newFile = null; - String policyDir = EMPTY_STRING; - String absolutePath = parentPath.toString(); - if (absolutePath != null && !absolutePath.equals(EMPTY_STRING)) { - policyDir = absolutePath.substring(absolutePath.lastIndexOf("\\") + 1, absolutePath.length()); - if (policyDir == null || policyDir.equals(EMPTY_STRING)) { - policyDir = absolutePath.substring(absolutePath.lastIndexOf("/") + 1, absolutePath.length()); - } - } + if (Files.notExists(newFile)) { + return newFile; + } + return null; + } - String fileName = "default"; - if (policyDir != null && !policyDir.equals(EMPTY_STRING)) { - if(policyConfigType.equals("ClosedLoop_PM")){ - fileName = policyType + "_" + "PM" + "_" +java.lang.String.format(policyFileName) + "." +version +".xml"; - }else if(policyConfigType.equals("ClosedLoop_Fault")){ - fileName = policyType + "_" + "Fault" + "_" +java.lang.String.format(policyFileName) + "." + version + ".xml"; - }else if(policyConfigType.equals("ClosedLoop_Fault")){ - fileName = policyType + "_" + "Fault" + "_" +java.lang.String.format(policyFileName) + "." + version + ".xml"; - }else if(policyConfigType.equals("DCAE Micro Service")){ - fileName = policyType + "_" + "MS" + "_" + java.lang.String.format(policyFileName) + "." + version + ".xml"; - } - } - if (fileName != null) { - newFile = Paths.get(parentPath.toString(), fileName); - } - if (Files.notExists(newFile)) { - return newFile; + protected Path getNextLoopFilename(Path parentPath, String policyType, String policyConfigType, String policyFileName, Integer version) { + policyType = FilenameUtils.removeExtension(policyType); + policyConfigType = FilenameUtils.removeExtension(policyConfigType); + policyFileName = FilenameUtils.removeExtension(policyFileName); + Path newFile = null; + String policyDir = EMPTY_STRING; + String absolutePath = parentPath.toString(); + if (absolutePath != null && !absolutePath.equals(EMPTY_STRING)) { + policyDir = absolutePath.substring(absolutePath.lastIndexOf("\\") + 1, absolutePath.length()); + if (policyDir == null || policyDir.equals(EMPTY_STRING)) { + policyDir = absolutePath.substring(absolutePath.lastIndexOf("/") + 1, absolutePath.length()); } - return null; } - - - //create policy once all the validations are completed - protected Map<String, String> createPolicy(final Path policyPath, final Object policyData) { - Map<String, String> success = new HashMap<String, String>(); - // - // Is the root a PolicySet or Policy? - // - - if (policyData instanceof PolicyType) { - // - // Write it out - // - //Does not need to be XACMLPolicyWriterWithPapNotify since it is already in the PAP - //and this transaction is intercepted up stream. - InputStream inputStream = XACMLPolicyWriter.getXmlAsInputStream((PolicyType) policyData); - try { - PolicyDef policyDef = DOMPolicyDef.load(inputStream); - if (policyDef != null) { - //This is does not need to be XACMLPolicyWriterWithPapNotification since it is already in the PAP - //and the transaction was intercepted up stream - finalPolicyPath = XACMLPolicyWriter.writePolicyFile(policyPath, (PolicyType) policyData); - this.setFinalPolicyPath(finalPolicyPath); - } else{ - success.put("validation", "PolicyDef Validation Failed"); - } - } catch (Exception e) { - success.put("error", "Validation Failed"); - } - - } else { - //TODO:EELF Cleanup - Remove logger - //logger.error("Unknown data type sent back."); - PolicyLogger.error("Unknown data type sent back."); - return success; + + String fileName = "default"; + if (policyDir != null && !policyDir.equals(EMPTY_STRING)) { + if(policyConfigType.equals("ClosedLoop_PM")){ + fileName = policyType + "_" + "PM" + "_" +java.lang.String.format(policyFileName) + "." +version +".xml"; + }else if(policyConfigType.equals("ClosedLoop_Fault")){ + fileName = policyType + "_" + "Fault" + "_" +java.lang.String.format(policyFileName) + "." + version + ".xml"; + }else if(policyConfigType.equals("ClosedLoop_Fault")){ + fileName = policyType + "_" + "Fault" + "_" +java.lang.String.format(policyFileName) + "." + version + ".xml"; + }else if(policyConfigType.equals("Micro Service")){ + fileName = policyType + "_" + "MS" + "_" + java.lang.String.format(policyFileName) + "." + version + ".xml"; } + } + if (fileName != null) { + newFile = Paths.get(parentPath.toString(), fileName); + } + if (Files.notExists(newFile)) { + return newFile; + } + return null; + } + + + //create policy once all the validations are completed + protected Map<String, String> createPolicy(final Path policyPath, final Object policyData) { + Map<String, String> success = new HashMap<String, String>(); + // + // Is the root a PolicySet or Policy? + // + + if (policyData instanceof PolicyType) { // - // Did it get written? + // Write it out // - if (finalPolicyPath == null || !Files.exists(finalPolicyPath)) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Failed to write policy file."); - PolicyLogger.error("Failed to write policy file."); - return success; - } + //Does not need to be XACMLPolicyWriterWithPapNotify since it is already in the PAP + //and this transaction is intercepted up stream. + InputStream inputStream = XACMLPolicyWriter.getXmlAsInputStream((PolicyType) policyData); try { - success.put("success", "success"); - } finally { - // vaadin framework will handle exception. + PolicyDef policyDef = DOMPolicyDef.load(inputStream); + if (policyDef == null) { + success.put("validation", "PolicyDef Validation Failed"); + }else{ + success.put("success", "success"); + } + } catch (Exception e) { + success.put("error", "Validation Failed"); } + } else { + PolicyLogger.error("Unknown data type sent back."); return success; } - - public static String getConfigHome(){ - try { - loadWebapps(); - } catch (Exception e) { - return null; - } - return configHome; + return success; + } + + public static String getConfigHome(){ + try { + loadWebapps(); + } catch (Exception e) { + return null; } - - public static String getActionHome(){ - try { - loadWebapps(); - } catch (Exception e) { - return null; - } - return actionHome; + return configHome; + } + + public static String getActionHome(){ + try { + loadWebapps(); + } catch (Exception e) { + return null; } - - private static void loadWebapps() throws Exception{ - if(actionHome == null || configHome == null){ - Path webappsPath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS)); - //Sanity Check - if (webappsPath == null) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Invalid Webapps Path Location property : " + XACMLRestProperties.PROP_PAP_WEBAPPS); - PolicyLogger.error("Invalid Webapps Path Location property : " + XACMLRestProperties.PROP_PAP_WEBAPPS); - throw new Exception("Invalid Webapps Path Location property : " + XACMLRestProperties.PROP_PAP_WEBAPPS); - } - Path webappsPathConfig; - Path webappsPathAction; - if(webappsPath.toString().contains("\\")) - { - webappsPathConfig = Paths.get(webappsPath.toString()+"\\Config"); - webappsPathAction = Paths.get(webappsPath.toString()+"\\Action"); - } - else - { - webappsPathConfig = Paths.get(webappsPath.toString()+"/Config"); - webappsPathAction = Paths.get(webappsPath.toString()+"/Action"); - } - if (Files.notExists(webappsPathConfig)) - { - try { - Files.createDirectories(webappsPathConfig); - } catch (IOException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to create config directory: " - //+ webappsPathConfig.toAbsolutePath().toString(), e); - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "Policy", "Failed to create config directory"); - } + return actionHome; + } + + private static void loadWebapps() throws Exception{ + if(actionHome == null || configHome == null){ + Path webappsPath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS)); + //Sanity Check + if (webappsPath == null) { + PolicyLogger.error("Invalid Webapps Path Location property : " + XACMLRestProperties.PROP_PAP_WEBAPPS); + throw new Exception("Invalid Webapps Path Location property : " + XACMLRestProperties.PROP_PAP_WEBAPPS); + } + Path webappsPathConfig; + Path webappsPathAction; + if(webappsPath.toString().contains("\\")){ + webappsPathConfig = Paths.get(webappsPath.toString()+"\\Config"); + webappsPathAction = Paths.get(webappsPath.toString()+"\\Action"); + }else{ + webappsPathConfig = Paths.get(webappsPath.toString()+"/Config"); + webappsPathAction = Paths.get(webappsPath.toString()+"/Action"); + } + if(Files.notExists(webappsPathConfig)){ + try { + Files.createDirectories(webappsPathConfig); + } catch (IOException e) { + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "Policy", "Failed to create config directory"); } - if (Files.notExists(webappsPathAction)) - { - try { - Files.createDirectories(webappsPathAction); - } catch (IOException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to create config directory: " - //+ webappsPathAction.toAbsolutePath().toString(), e); - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "Policy", "Failed to create config directory"); - } + } + if(Files.notExists(webappsPathAction)){ + try { + Files.createDirectories(webappsPathAction); + } catch (IOException e) { + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "Policy", "Failed to create config directory"); } - actionHome = webappsPathAction.toString(); - configHome = webappsPathConfig.toString(); } + actionHome = webappsPathAction.toString(); + configHome = webappsPathConfig.toString(); } - - protected String getParentPathSubScopeDir() { - - final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString()); - String policyDir = policyAdapter.getParentPath().toString(); - int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; - policyDir = policyDir.substring(startIndex, policyDir.length()); - - return policyDir; - } + } + protected String getParentPathSubScopeDir() { + final Path gitPath = Paths.get(policyAdapter.getUserGitPath().toString()); + String policyDir = policyAdapter.getParentPath().toString(); + int startIndex = policyDir.indexOf(gitPath.toString()) + gitPath.toString().length() + 1; + policyDir = policyDir.substring(startIndex, policyDir.length()); + return policyDir; + } - public boolean validateConfigForm() { - // TODO Auto-generated method stub - return true; - } - /** - * @return the preparedToSave - */ - public boolean isPreparedToSave() { - return preparedToSave; - } + public boolean validateConfigForm() { + return true; + } - /** - * @param preparedToSave the preparedToSave to set - */ - protected void setPreparedToSave(boolean preparedToSave) { - this.preparedToSave = preparedToSave; - } + /** + * @return the preparedToSave + */ + public boolean isPreparedToSave() { + return preparedToSave; + } + + /** + * @param preparedToSave the preparedToSave to set + */ + protected void setPreparedToSave(boolean preparedToSave) { + this.preparedToSave = preparedToSave; + } + + public boolean isPolicyExists() { + return policyExists; + } + + public void setPolicyExists(boolean policyExists) { + this.policyExists = policyExists; + } - public boolean isPolicyExists() { - return policyExists; - } - public void setPolicyExists(boolean policyExists) { - this.policyExists = policyExists; - } - - } diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/PolicyDBDao.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/PolicyDBDao.java index bdd7534d8..a63dacbfe 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/PolicyDBDao.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/PolicyDBDao.java @@ -22,6 +22,7 @@ package org.openecomp.policy.pap.xacml.rest.components; import java.io.ByteArrayInputStream; import java.io.File; +import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; @@ -68,14 +69,18 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathFactory; +import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; + import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import org.openecomp.policy.common.logging.eelf.MessageCodes; +import org.openecomp.policy.common.logging.eelf.PolicyLogger; +import org.openecomp.policy.common.logging.flexlogger.FlexLogger; +import org.openecomp.policy.common.logging.flexlogger.Logger; import org.openecomp.policy.pap.xacml.rest.XACMLPapServlet; -import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter; import org.openecomp.policy.rest.XACMLRestProperties; +import org.openecomp.policy.rest.adapter.PolicyRestAdapter; import org.openecomp.policy.rest.jpa.ActionBodyEntity; import org.openecomp.policy.rest.jpa.ConfigurationDataEntity; import org.openecomp.policy.rest.jpa.DatabaseLockEntity; @@ -85,31 +90,20 @@ import org.openecomp.policy.rest.jpa.PolicyDBDaoEntity; import org.openecomp.policy.rest.jpa.PolicyEntity; import org.openecomp.policy.rest.jpa.PolicyVersion; import org.openecomp.policy.rest.util.Webapps; -import org.openecomp.policy.common.logging.eelf.MessageCodes; -import org.openecomp.policy.common.logging.eelf.PolicyLogger; - -import org.xml.sax.InputSource; - -import org.openecomp.policy.xacml.api.XACMLErrorConstants; import org.openecomp.policy.xacml.api.pap.EcompPDP; import org.openecomp.policy.xacml.api.pap.EcompPDPGroup; import org.openecomp.policy.xacml.api.pap.PAPPolicyEngine; - -import com.att.research.xacml.api.pap.PAPEngine; -import com.att.research.xacml.api.pap.PAPException; -import com.att.research.xacml.api.pap.PDP; -//import com.att.research.xacml.api.pap.PDPGroup; -import com.att.research.xacml.api.pap.PDPPolicy; import org.openecomp.policy.xacml.std.pap.StdPDPGroup; import org.openecomp.policy.xacml.std.pap.StdPDPPolicy; import org.openecomp.policy.xacml.util.XACMLPolicyScanner; import org.openecomp.policy.xacml.util.XACMLPolicyWriter; -import com.att.research.xacml.util.XACMLProperties; - import org.w3c.dom.Document; -import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; -import org.openecomp.policy.common.logging.flexlogger.FlexLogger; -import org.openecomp.policy.common.logging.flexlogger.Logger; +import org.xml.sax.InputSource; + +import com.att.research.xacml.api.pap.PAPException; +import com.att.research.xacml.api.pap.PDP; +import com.att.research.xacml.api.pap.PDPPolicy; +import com.att.research.xacml.util.XACMLProperties; public class PolicyDBDao { private static final Logger logger = FlexLogger.getLogger(PolicyDBDao.class); @@ -117,13 +111,13 @@ public class PolicyDBDao { private EntityManagerFactory emf; private static PolicyDBDao currentInstance = null; private PAPPolicyEngine papEngine; - + public static final String JSON_CONFIG = "JSON"; public static final String XML_CONFIG = "XML"; public static final String PROPERTIES_CONFIG = "PROPERTIES"; public static final String OTHER_CONFIG = "OTHER"; public static final String AUDIT_USER = "audit"; - + /** * Get an instance of a PolicyDBDao. It creates one if it does not exist. * Only one instance is allowed to be created per server. @@ -142,7 +136,7 @@ public class PolicyDBDao { } return currentInstance; } - + /** * Gets the current instance of PolicyDBDao. * @return The instance of PolicyDBDao or throws exception if the given instance is null. @@ -161,14 +155,12 @@ public class PolicyDBDao { private PolicyDBDao(EntityManagerFactory emf){ logger.debug("PolicyDBDao(EntityManagerFactory emf) as PolicyDBDao("+emf+") called"); this.emf = emf; - + //not needed in this release if(!register()){ - //TODO:EELF Cleanup - Remove logger - //logger.error("This server's PolicyDBDao instance could not be registered and may not reveive updates"); PolicyLogger.error("This server's PolicyDBDao instance could not be registered and may not reveive updates"); } - + otherServers = getRemotePolicyDBDaoList(); if(logger.isDebugEnabled()){ logger.debug("Number of remote PolicyDBDao instances: "+otherServers.size()); @@ -176,42 +168,40 @@ public class PolicyDBDao { if(otherServers.size() < 1){ logger.warn("List of PolicyDBDao servers is empty or could not be retrieved"); } - //otherServers = new LinkedList(); - //otherServers.add((Object)"http://localhost:8071/pap/"); } - + //not static because we are going to be using the instance's emf //waitTime in ms to wait for lock, or -1 to wait forever (no) private void startTransactionSynced(EntityManager entityMgr,int waitTime){ logger.debug("\n\nstartTransactionSynced(EntityManager entityMgr,int waitTime) as " + "\n startTransactionSynced("+entityMgr+","+waitTime+") called\n\n"); DatabaseLockEntity lock = null; - + entityMgr.setProperty("javax.persistence.query.timeout", waitTime); entityMgr.getTransaction().begin(); - + + if(logger.isDebugEnabled()){ + Map<String,Object> properties = entityMgr.getProperties(); + logger.debug("\n\nstartTransactionSynced():" + + "\n entityManager.getProperties() = " + properties + + "\n\n"); + } + try{ if(logger.isDebugEnabled()){ - Map<String,Object> properties = entityMgr.getProperties(); logger.debug("\n\nstartTransactionSynced():" - + "\n entityManager.getProperties() = " + properties + + "\n ATTEMPT to get the DB lock" + "\n\n"); } - try{ - if(logger.isDebugEnabled()){ - logger.debug("\n\nstartTransactionSynced():" - + "\n ATTEMPT to get the DB lock" - + "\n\n"); - } - lock = entityMgr.find(DatabaseLockEntity.class, 1, LockModeType.PESSIMISTIC_WRITE); - if(logger.isDebugEnabled()){ - logger.debug("\n\nstartTransactionSynced():" - + "\n GOT the DB lock" - + "\n\n"); - } - } catch(Exception e){ - System.out.println("Could not get lock entity"); - e.printStackTrace(); + lock = entityMgr.find(DatabaseLockEntity.class, 1, LockModeType.PESSIMISTIC_WRITE); + if(logger.isDebugEnabled()){ + logger.debug("\n\nstartTransactionSynced():" + + "\n GOT the DB lock" + + "\n\n"); } + } catch(Exception e){ + System.out.println("Could not get lock entity"); + e.printStackTrace(); + } if(lock == null){ throw new IllegalStateException("The lock row does not exist in the table. Please create a primary key with value = 1."); } @@ -229,31 +219,29 @@ public class PolicyDBDao { try{ Query getPolicyDBDaoEntityQuery = em.createNamedQuery("PolicyDBDaoEntity.findAll"); policyDBDaoEntityList = getPolicyDBDaoEntityQuery.getResultList(); - + } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception on: getPolicyDBDaoEntityQuery.getResultList()",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Exception querying for other registered PolicyDBDaos"); logger.warn("List of remote PolicyDBDaos will be empty"); } try{ - em.getTransaction().commit(); + em.getTransaction().commit(); } catch(Exception e){ try{ em.getTransaction().rollback(); } catch(Exception e2){ - + } } em.close(); return policyDBDaoEntityList; } - + public PolicyDBDaoTransaction getNewTransaction(){ logger.debug("getNewTransaction() as getNewTransaction() called"); return (PolicyDBDaoTransaction)(new PolicyDBDaoTransactionInstance()); } - + /* * Because the normal transactions are not used in audits, we can use the same transaction * mechanism to get a transaction and obtain the emlock and the DB lock. We just need to @@ -268,8 +256,8 @@ public class PolicyDBDao { int auditTimeoutMs = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_AUDIT_TIMEOUT)); return (PolicyDBDaoTransaction)(new PolicyDBDaoTransactionInstance(auditTimeoutMs, auditWaitMs)); } - - + + /** * Checks if two strings are equal. Null strings ARE allowed. * @param one A String or null to compare @@ -285,7 +273,7 @@ public class PolicyDBDao { } return one.equals(two); } - + /** * Computes the scope in dotted format based on an absolute path and a path that divides the scope. * @param fullPath An absolute path including scope folders and other folders(does not have to be absolute, must just contain scope and other folders before) @@ -344,7 +332,7 @@ public class PolicyDBDao { //if there is no comma, for some reason there is no username and password, so don't try to cut them off return urlUserPass; } - + private static String encryptPassword(String password) throws Exception{ Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, aesKey()); @@ -352,7 +340,7 @@ public class PolicyDBDao { System.out.println(encryption); return new String(Base64.getMimeEncoder().encode(encryption),"UTF-8"); } - + private static String decryptPassword(String encryptedPassword) throws Exception{ Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, aesKey()); @@ -386,8 +374,6 @@ public class PolicyDBDao { em.getTransaction().commit(); em.close(); } catch(Exception e2){ - //TODO:EELF Cleanup - Remove logger - //logger.error("COULD NOT CREATE DATABASELOCK ROW. WILL TRY ONE MORE TIME \n\n Exception: \n" + e2); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "COULD NOT CREATE DATABASELOCK ROW. WILL TRY ONE MORE TIME"); e2.printStackTrace(); } @@ -396,10 +382,7 @@ public class PolicyDBDao { try{ startTransactionSynced(em, 1000); } catch(Exception e3){ - //still not working String msg = "DATABASE LOCKING NOT WORKING. CONCURRENCY CONTROL NOT WORKING"; - //TODO:EELF Cleanup - Remove logger - //logger.error(msg); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e3, "PolicyDBDao", msg); throw new IllegalStateException("msg" + "\n" + e3); } @@ -410,56 +393,35 @@ public class PolicyDBDao { Query getPolicyDBDaoEntityQuery = em.createQuery("SELECT e FROM PolicyDBDaoEntity e WHERE e.policyDBDaoUrl=:url"); getPolicyDBDaoEntityQuery.setParameter("url", url[0]); if(foundPolicyDBDaoEntity == null){ - //em.getTransaction().begin(); PolicyDBDaoEntity newPolicyDBDaoEntity = new PolicyDBDaoEntity(); em.persist(newPolicyDBDaoEntity); newPolicyDBDaoEntity.setPolicyDBDaoUrl(url[0]); newPolicyDBDaoEntity.setDescription("PAP server at "+url[0]); newPolicyDBDaoEntity.setUsername(url[1]); try{ - newPolicyDBDaoEntity.setPassword(encryptPassword(url[2])); + newPolicyDBDaoEntity.setPassword(encryptPassword(url[2])); } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Could not encrypt PAP password",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not encrypt PAP password"); } - /* try{ em.getTransaction().commit(); - } catch(RollbackException e){ - logger.error("Caught RollbackException during PolicyDBDao Registration on: em.getTransaction().commit()",e); - em.close(); - return false; - } catch(Exception e2){ - logger.error("Caught Exception during PolicyDBDao Registration on: em.getTransaction().commit()",e2); - em.close(); - return false; - } - */ - try{ - em.getTransaction().commit(); - } catch(Exception e){ - try{ - em.getTransaction().rollback(); - } catch(Exception e2){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Could not add new PolicyDBDao to the database",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Could not add new PolicyDBDao to the database"); - } + } catch(Exception e){ + try{ + em.getTransaction().rollback(); + } catch(Exception e2){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Could not add new PolicyDBDao to the database"); } + } } else { - //em.getTransaction().begin(); //just want to update in order to change modified date String encryptedPassword = null; try{ - encryptedPassword = encryptPassword(url[2]); + encryptedPassword = encryptPassword(url[2]); } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Could not encrypt PAP password",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not encrypt PAP password"); } if(url[1] != null && !stringEquals(url[1], foundPolicyDBDaoEntity.getUsername())){ - foundPolicyDBDaoEntity.setUsername(url[1]); + foundPolicyDBDaoEntity.setUsername(url[1]); } if(encryptedPassword != null && !stringEquals(encryptedPassword, foundPolicyDBDaoEntity.getPassword())){ foundPolicyDBDaoEntity.setPassword(encryptedPassword); @@ -467,28 +429,13 @@ public class PolicyDBDao { foundPolicyDBDaoEntity.preUpdate(); try{ em.getTransaction().commit(); - } catch(Exception e){ - try{ - em.getTransaction().rollback(); - } catch(Exception e2){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Could not update PolicyDBDao in the database",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Could not update PolicyDBDao in the database"); - } + } catch(Exception e){ + try{ + em.getTransaction().rollback(); + } catch(Exception e2){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Could not update PolicyDBDao in the database"); } - /* - try{ - em.getTransaction().commit(); - } catch(RollbackException e){ - logger.error("Caught RollbackException during PolicyDBDao Registration on: em.getTransaction().commit()",e); - em.close(); - return false; - } catch(Exception e2){ - logger.error("Caught Exception during PolicyDBDao Registration on: em.getTransaction().commit()",e2); - em.getTransaction().rollback(); - return false; } - */ } em.close(); logger.debug("\nPolicyDBDao.register(). Success!!\n"); @@ -500,12 +447,12 @@ public class PolicyDBDao { public void notifyOthers(long entityId, String entityType, String newGroupId){ logger.debug("notifyOthers(long entityId, String entityType, long newGroupId) as notifyOthers("+entityId+","+entityType+","+newGroupId+") called"); LinkedList<Thread> notifyThreads = new LinkedList<Thread>(); - + //we're going to run notiftions in parellel threads to speed things up for(Object obj : otherServers){ Thread newNotifyThread = new Thread(new NotifyOtherThread(obj, entityId, entityType, newGroupId)); - + newNotifyThread.start(); notifyThreads.add(newNotifyThread); @@ -520,7 +467,7 @@ public class PolicyDBDao { } } - + } private class NotifyOtherThread implements Runnable { @@ -542,7 +489,7 @@ public class PolicyDBDao { String username = dbdEntity.getUsername(); String password; try{ - password = decryptPassword(dbdEntity.getPassword()); + password = decryptPassword(dbdEntity.getPassword()); } catch(Exception e){ //if we can't decrypt, might as well try it anyway password = dbdEntity.getPassword(); @@ -551,8 +498,6 @@ public class PolicyDBDao { String encoding = encoder.encodeToString((username+":"+password).getBytes(StandardCharsets.UTF_8)); HttpURLConnection connection = null; UUID requestID = UUID.randomUUID(); - //loggingContext.setRequestID(requestID.toString()); - //loggingContext.transactionStarted(); URL url; try { String papUrl = getPapUrlUserPass()[0]; @@ -575,7 +520,7 @@ public class PolicyDBDao { return; } if(newGroupId == null){ - url = new URL(((String)o)+"?policydbdaourl="+papUrl+"&entityid="+entityId+"&entitytype="+entityType); + url = new URL(((String)o)+"?policydbdaourl="+papUrl+"&entityid="+entityId+"&entitytype="+entityType); } else { url = new URL(((String)o)+"?policydbdaourl="+papUrl+"&entityid="+entityId+"&entitytype="+entityType+"&extradata="+newGroupId); } @@ -596,45 +541,45 @@ public class PolicyDBDao { // // Setup our method and headers // - try { + try { connection.setRequestMethod("PUT"); } catch (ProtocolException e) { //why would this error ever occur? logger.warn("Caught ProtocolException on connection.setRequestMethod(\"PUT\");",e); return; } - connection.setRequestProperty("Authorization", "Basic " + encoding); + connection.setRequestProperty("Authorization", "Basic " + encoding); connection.setRequestProperty("Accept", "text/x-java-properties"); - connection.setRequestProperty("Content-Type", "text/x-java-properties"); - connection.setRequestProperty("requestID", requestID.toString()); - int readTimeout; - try{ - readTimeout = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_NOTIFY_TIMEOUT)); - - } catch(Exception e){ - logger.error("xacml.rest.pap.notify.timeoutms property not set, using a default."); - readTimeout = 10000; - } - connection.setReadTimeout(readTimeout); - connection.setConnectTimeout(readTimeout); - connection.setUseCaches(false); - // - // Adding this in. It seems the HttpUrlConnection class does NOT - // properly forward our headers for POST re-direction. It does so - // for a GET re-direction. - // - // So we need to handle this ourselves. - // - connection.setInstanceFollowRedirects(false); + connection.setRequestProperty("Content-Type", "text/x-java-properties"); + connection.setRequestProperty("requestID", requestID.toString()); + int readTimeout; + try{ + readTimeout = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_NOTIFY_TIMEOUT)); + + } catch(Exception e){ + logger.error("xacml.rest.pap.notify.timeoutms property not set, using a default."); + readTimeout = 10000; + } + connection.setReadTimeout(readTimeout); + connection.setConnectTimeout(readTimeout); + connection.setUseCaches(false); + // + // Adding this in. It seems the HttpUrlConnection class does NOT + // properly forward our headers for POST re-direction. It does so + // for a GET re-direction. + // + // So we need to handle this ourselves. + // + connection.setInstanceFollowRedirects(false); connection.setDoOutput(true); connection.setDoInput(true); - try { + try { connection.connect(); } catch (Exception e) { logger.warn("Caught exception on: connection.connect()",e); return; } - try { + try { if (connection.getResponseCode() == 200) { logger.info("Received response 200 from pap server on notify"); //notified = true; @@ -644,12 +589,12 @@ public class PolicyDBDao { } catch (Exception e) { logger.warn("Caught Exception on: connection.getResponseCode() ", e); } - - + + connection.disconnect(); } } - + private static String getElementFromXMLString(String element, String xml) { InputSource source = new InputSource(new StringReader(xml)); @@ -661,14 +606,14 @@ public class PolicyDBDao { XPathFactory xpathFactory = XPathFactory.newInstance(); XPath xpath = xpathFactory.newXPath(); - + if (element.endsWith("/")){ element = element.substring(0, element.length() -1); } description = xpath.evaluate("/Policy" + element + "/text()", document); }catch(Exception e){ - + } @@ -686,20 +631,19 @@ public class PolicyDBDao { XPathFactory xpathFactory = XPathFactory.newInstance(); XPath xpath = xpathFactory.newXPath(); - + description = xpath.evaluate(expression, document); }catch(Exception e){ - + } System.out.println("description_" + description); return description; } - + private static String getDescriptionFromXacml(String xacmlData){ - //FIXME completely untested. Probably not a good idea to use. UPDATE: kind of tested String openTag = "<Description>"; String closeTag = "</Description>"; int descIndex = xacmlData.indexOf(openTag); @@ -707,39 +651,72 @@ public class PolicyDBDao { String desc = xacmlData.substring(descIndex+openTag.length(),endDescIndex); return desc; } + private final String POLICY_NOTIFICATION = "policy"; private final String PDP_NOTIFICATION = "pdp"; private final String GROUP_NOTIFICATION = "group"; public void handleIncomingHttpNotification(String url, String entityId, String entityType, String extraData, XACMLPapServlet xacmlPapServlet){ logger.info("DBDao url: " + url + " has reported an update on "+entityType+" entity "+entityId); PolicyDBDaoTransaction transaction = this.getNewTransaction(); + //although its named retries, this is the total number of tries + int retries; + try{ + retries = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_INCOMINGNOTIFICATION_TRIES)); + + } catch(Exception e){ + logger.error("xacml.rest.pap.incomingnotification.tries property not set, using a default of 3."); + retries = 3; + } + //if someone sets it to some dumb value, we need to make sure it will try at least once + if(retries < 1){ + retries = 1; + } + int pauseBetweenRetries = 1000; switch(entityType){ - + case POLICY_NOTIFICATION: - try{ - handleIncomingPolicyChange(url, entityId,extraData); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught exception on handleIncomingPolicyChange("+url+", "+entityId+", "+extraData+")",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught exception on handleIncomingPolicyChange("+url+", "+entityId+", "+extraData+")"); + for(int i=0; i<retries;i++){ + try{ + handleIncomingPolicyChange(url, entityId,extraData); + break; + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught exception on handleIncomingPolicyChange("+url+", "+entityId+", "+extraData+")"); + } + try{ + Thread.sleep(pauseBetweenRetries); + }catch(InterruptedException ie){ + break; + } } break; case PDP_NOTIFICATION: - try{ - handleIncomingPdpChange(url, entityId, transaction); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught exception on handleIncomingPdpChange("+url+", "+entityId+", "+transaction+")",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught exception on handleIncomingPdpChange("+url+", "+entityId+", "+transaction+")"); + for(int i=0; i<retries;i++){ + try{ + handleIncomingPdpChange(url, entityId, transaction); + break; + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught exception on handleIncomingPdpChange("+url+", "+entityId+", "+transaction+")"); + } + try{ + Thread.sleep(pauseBetweenRetries); + }catch(InterruptedException ie){ + break; + } } break; case GROUP_NOTIFICATION: - try{ - handleIncomingGroupChange(url, entityId, extraData, transaction, xacmlPapServlet); - }catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught exception on handleIncomingGroupChange("+url+", "+entityId+", "+extraData+", "+transaction+", "+xacmlPapServlet+")",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught exception on handleIncomingGroupChange("+url+", "+entityId+", "+extraData+", "+transaction+", "+xacmlPapServlet+")"); + for(int i=0; i<retries;i++){ + try{ + handleIncomingGroupChange(url, entityId, extraData, transaction, xacmlPapServlet); + break; + }catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught exception on handleIncomingGroupChange("+url+", "+entityId+", "+extraData+", "+transaction+", "+xacmlPapServlet+")"); + } + try{ + Thread.sleep(pauseBetweenRetries); + }catch(InterruptedException ie){ + break; + } } break; } @@ -747,7 +724,6 @@ public class PolicyDBDao { transaction.rollbackTransaction(); } private void handleIncomingGroupChange(String url, String groupId, String extraData,PolicyDBDaoTransaction transaction,XACMLPapServlet xacmlPapServlet) throws PAPException{ - GroupEntity groupRecord = null; long groupIdLong = -1; try{ @@ -756,10 +732,8 @@ public class PolicyDBDao { throw new IllegalArgumentException("groupId "+groupId+" cannot be parsed into a long"); } try{ - groupRecord = transaction.getGroup(groupIdLong); + groupRecord = transaction.getGroup(groupIdLong); } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to get pdp group record with transaction.getGroup("+groupIdLong+");",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get pdp group record with transaction.getGroup("+groupIdLong+");"); throw new PAPException("Could not get local group "+groupIdLong); } @@ -773,7 +747,6 @@ public class PolicyDBDao { localGroup = papEngine.getGroup(groupRecord.getGroupId()); } catch (Exception e) { logger.warn("Caught PAPException trying to get local pdp group with papEngine.getGroup("+groupId+");",e); - //throw new PAPException("Could not get local group "+groupId); } if(localGroup == null && extraData != null){ //here we can try to load an old group id from the extraData @@ -786,21 +759,15 @@ public class PolicyDBDao { if(localGroup != null && groupRecord.isDeleted()){ EcompPDPGroup newLocalGroup = null; if(extraData != null){ - try { - newLocalGroup = papEngine.getGroup(extraData); - } catch (PAPException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PAPException trying to get new pdp group with papEngine.getGroup("+extraData+");",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to get new pdp group with papEngine.getGroup("+extraData+");"); - //throw new PAPException("Could not get new local group "+newGroupId); - - } + try { + newLocalGroup = papEngine.getGroup(extraData); + } catch (PAPException e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to get new pdp group with papEngine.getGroup("+extraData+");"); + } } try { papEngine.removeGroup(localGroup, newLocalGroup); } catch (NullPointerException | PAPException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PAPException trying to get remove pdp group with papEngine.removeGroup("+localGroup+", "+newLocalGroup+");",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to get remove pdp group with papEngine.removeGroup("+localGroup+", "+newLocalGroup+");"); throw new PAPException("Could not remove group "+groupId); } @@ -810,19 +777,14 @@ public class PolicyDBDao { try { papEngine.newGroup(groupRecord.getgroupName(), groupRecord.getDescription()); } catch (NullPointerException | PAPException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PAPException trying to create pdp group with papEngine.newGroup(groupRecord.getgroupName(), groupRecord.getDescription());",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to create pdp group with papEngine.newGroup(groupRecord.getgroupName(), groupRecord.getDescription());"); throw new PAPException("Could not create group "+groupRecord); } try { localGroup = papEngine.getGroup(groupRecord.getGroupId()); } catch (PAPException e1) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PAPException trying to get pdp group we just created with papEngine.getGroup(groupRecord.getGroupId());\nAny PDPs or policies in the new group may not have been added",e1); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "Caught PAPException trying to get pdp group we just created with papEngine.getGroup(groupRecord.getGroupId());\nAny PDPs or policies in the new group may not have been added"); return; - //throw new PAPException("Could not get group "+groupRecord); } //add possible pdps to group List<?> pdpsInGroup = transaction.getPdpsInGroup(Long.parseLong(groupRecord.getGroupId())); @@ -831,8 +793,6 @@ public class PolicyDBDao { try { papEngine.newPDP(pdp.getPdpId(), localGroup, pdp.getPdpName(), pdp.getDescription(), pdp.getJmxPort()); } catch (NullPointerException | PAPException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PAPException trying to get create pdp with papEngine.newPDP(pdp.getPdpId(), localGroup, pdp.getPdpName(), pdp.getDescription(), pdp.getJmxPort());",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to get create pdp with papEngine.newPDP(pdp.getPdpId(), localGroup, pdp.getPdpName(), pdp.getDescription(), pdp.getJmxPort());"); throw new PAPException("Could not create pdp "+pdp); } @@ -855,8 +815,6 @@ public class PolicyDBDao { papEngine.SetDefaultGroup(localGroup); return; } catch (PAPException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PAPException trying to set default group with papEngine.SetDefaultGroup("+localGroupClone+");",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to set default group with papEngine.SetDefaultGroup("+localGroupClone+");"); throw new PAPException("Could not set default group to "+localGroupClone); } @@ -877,16 +835,14 @@ public class PolicyDBDao { } if(needToUpdate){ try { - + papEngine.updateGroup(localGroupClone); } catch (PAPException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PAPException trying to update group with papEngine.updateGroup("+localGroupClone+");",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to update group with papEngine.updateGroup("+localGroupClone+");"); throw new PAPException("Could not update group "+localGroupClone); } } - + } //call command that corresponds to the change that was made } @@ -916,8 +872,7 @@ public class PolicyDBDao { try { policyStream.close(); } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + PolicyLogger.error(e.getMessage()); } } } @@ -927,22 +882,40 @@ public class PolicyDBDao { group.setPolicies(newPolicySet); } return didUpdate; - + } private String removeExtensionAndVersionFromPolicyName(String originalPolicyName){ - String policyName = originalPolicyName; - try{ - policyName = removeFileExtension(policyName); - policyName = policyName.substring(0,policyName.lastIndexOf('.')); - if(isNullOrEmpty(policyName)){ - throw new Exception(); - } - } catch(Exception e){ - policyName = originalPolicyName; - } - return policyName; - } - + return getPolicyNameAndVersionFromPolicyFileName(originalPolicyName)[0]; + } + + /** + * Splits apart the policy name and version from a policy file path + * @param originalPolicyName: a policy file name ex: Config_policy.2.xml + * @return An array [0]: The policy name, [1]: the policy version, as a string + */ + private String[] getPolicyNameAndVersionFromPolicyFileName(String originalPolicyName){ + String policyName = originalPolicyName; + String[] nameAndVersion = new String[2]; + try{ + policyName = removeFileExtension(policyName); + nameAndVersion[0] = policyName.substring(0,policyName.lastIndexOf('.')); + if(isNullOrEmpty(nameAndVersion[0])){ + throw new Exception(); + } + } catch(Exception e){ + nameAndVersion[0] = originalPolicyName; + } + try{ + nameAndVersion[1] = policyName.substring(policyName.lastIndexOf('.')+1); + if(isNullOrEmpty(nameAndVersion[1])){ + throw new Exception(); + } + } catch(Exception e){ + nameAndVersion[1] = "1"; + } + return nameAndVersion; + } + private void handleIncomingPdpChange(String url, String pdpId, PolicyDBDaoTransaction transaction) throws PAPException{ //get pdp long pdpIdLong = -1; @@ -953,10 +926,8 @@ public class PolicyDBDao { } PdpEntity pdpRecord = null; try{ - pdpRecord = transaction.getPdp(pdpIdLong); + pdpRecord = transaction.getPdp(pdpIdLong); }catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to get pdp record with transaction.getPdp("+pdpIdLong+");",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get pdp record with transaction.getPdp("+pdpIdLong+");"); throw new PAPException("Could not get local pdp "+pdpIdLong); } @@ -973,8 +944,6 @@ public class PolicyDBDao { try { papEngine.removePDP((EcompPDP) localPdp); } catch (PAPException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PAPException trying to get remove pdp with papEngine.removePDP("+localPdp+");",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to get remove pdp with papEngine.removePDP("+localPdp+");"); throw new PAPException("Could not remove pdp "+pdpId); } @@ -982,21 +951,16 @@ public class PolicyDBDao { else if(localPdp == null){ //add new pdp //get group - EcompPDPGroup localGroup = null; try { localGroup = papEngine.getGroup(pdpRecord.getGroup().getGroupId()); } catch (PAPException e1) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PAPException trying to get local group to add pdp to with papEngine.getGroup(pdpRecord.getGroup().getGroupId());",e1); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "Caught PAPException trying to get local group to add pdp to with papEngine.getGroup(pdpRecord.getGroup().getGroupId());"); throw new PAPException("Could not get local group"); } try { papEngine.newPDP(pdpRecord.getPdpId(), localGroup, pdpRecord.getPdpName(), pdpRecord.getDescription(), pdpRecord.getJmxPort()); } catch (NullPointerException | PAPException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PAPException trying to create pdp with papEngine.newPDP("+pdpRecord.getPdpId()+", "+localGroup+", "+pdpRecord.getPdpName()+", "+pdpRecord.getDescription()+", "+pdpRecord.getJmxPort()+");",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to create pdp with papEngine.newPDP("+pdpRecord.getPdpId()+", "+localGroup+", "+pdpRecord.getPdpName()+", "+pdpRecord.getDescription()+", "+pdpRecord.getJmxPort()+");"); throw new PAPException("Could not create pdp "+pdpRecord); } @@ -1012,33 +976,28 @@ public class PolicyDBDao { needToUpdate = true; } String localPdpGroupId = null; - try{ - localPdpGroupId = papEngine.getPDPGroup((EcompPDP) localPdp).getId(); - } catch(PAPException e){ - //could be null or something, just warn at this point - logger.warn("Caught PAPException trying to get id of local group that pdp is in with localPdpGroupId = papEngine.getPDPGroup(localPdp).getId();",e); - //throw new PAPException("Could not get local group"); - } - if(!stringEquals(localPdpGroupId,pdpRecord.getGroup().getGroupId())){ - EcompPDPGroup newPdpGroup = null; - try{ - newPdpGroup = papEngine.getGroup(pdpRecord.getGroup().getGroupId()); - }catch(PAPException e){ - //ok, now we have an issue. Time to stop things - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PAPException trying to get id of local group to move pdp to with papEngine.getGroup(pdpRecord.getGroup().getGroupId());",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to get id of local group to move pdp to with papEngine.getGroup(pdpRecord.getGroup().getGroupId());"); - throw new PAPException("Could not get local group"); - } - try{ - papEngine.movePDP((EcompPDP) localPdp, newPdpGroup); - }catch(PAPException e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PAPException trying to move pdp with papEngine.movePDP(localPdp, newPdpGroup);",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to move pdp with papEngine.movePDP(localPdp, newPdpGroup);"); - throw new PAPException("Could not move pdp "+localPdp); - } - } + try{ + localPdpGroupId = papEngine.getPDPGroup((EcompPDP) localPdp).getId(); + } catch(PAPException e){ + //could be null or something, just warn at this point + logger.warn("Caught PAPException trying to get id of local group that pdp is in with localPdpGroupId = papEngine.getPDPGroup(localPdp).getId();",e); + } + if(!stringEquals(localPdpGroupId,pdpRecord.getGroup().getGroupId())){ + EcompPDPGroup newPdpGroup = null; + try{ + newPdpGroup = papEngine.getGroup(pdpRecord.getGroup().getGroupId()); + }catch(PAPException e){ + //ok, now we have an issue. Time to stop things + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to get id of local group to move pdp to with papEngine.getGroup(pdpRecord.getGroup().getGroupId());"); + throw new PAPException("Could not get local group"); + } + try{ + papEngine.movePDP((EcompPDP) localPdp, newPdpGroup); + }catch(PAPException e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to move pdp with papEngine.movePDP(localPdp, newPdpGroup);"); + throw new PAPException("Could not move pdp "+localPdp); + } + } if(((PdpEntity) localPdp).getJmxPort() != pdpRecord.getJmxPort()){ ((PdpEntity) localPdp).setJmxPort(pdpRecord.getJmxPort()); needToUpdate = true; @@ -1047,8 +1006,6 @@ public class PolicyDBDao { try { papEngine.updatePDP((EcompPDP) localPdp); } catch (PAPException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PAPException trying to update pdp with papEngine.updatePdp("+localPdp+");",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PAPException trying to update pdp with papEngine.updatePdp("+localPdp+");"); throw new PAPException("Could not update pdp "+localPdp); } @@ -1061,16 +1018,16 @@ public class PolicyDBDao { EntityManager em = emf.createEntityManager(); Query getPolicyEntityQuery = em.createNamedQuery("PolicyEntity.FindById"); getPolicyEntityQuery.setParameter("id", Long.valueOf(policyId)); - + @SuppressWarnings("unchecked") List<PolicyEntity> policies = getPolicyEntityQuery.getResultList(); PolicyEntity policy = null; if (policies.size() > 0){ policy = policies.get(0); } - + String policyRepo = buildPolicyScopeDirectory(policy); - + Path policyPath = Paths.get(policyRepo); String action = "unknown action"; try { @@ -1080,19 +1037,19 @@ public class PolicyDBDao { action = "delete"; Path newPath = Paths.get(policyPath.toString(), policy.getPolicyName()); Files.deleteIfExists(newPath); - + Path subFile = null; - + if (policy.getConfigurationData()!= null){ subFile = getPolicySubFile(policy.getConfigurationData().getConfigurationName(), "Config"); }else if(policy.getActionBodyEntity()!= null){ subFile = getPolicySubFile(policy.getActionBodyEntity().getActionBodyName(), "Action"); } - + if(subFile != null){ Files.deleteIfExists(subFile); } - + }else{ logger.debug("Updating/Creating Policy: " + policy.getPolicyName()); action = "update"; @@ -1102,215 +1059,240 @@ public class PolicyDBDao { if(!isNullOrEmpty(oldPathString)){ try{ String[] scopeName = getScopeAndNameAndType(oldPathString); - Path oldPath = Paths.get(buildPolicyScopeDirectory(scopeName[0]),scopeName[1]); - Files.delete(oldPath.toAbsolutePath()); + Path oldPath = Paths.get(buildPolicyScopeDirectory(scopeName[0]),scopeName[1]); + Files.delete(oldPath.toAbsolutePath()); }catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Could not delete the old policy before rename: "+oldPathString,e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not delete the old policy before rename: "+oldPathString); } } Object policyData = XACMLPolicyScanner.readPolicy(IOUtils.toInputStream(policy.getPolicyData())); XACMLPolicyWriter.writePolicyFile(newPath, (PolicyType) policyData); - + if (policy.getConfigurationData()!= null){ if(!isNullOrEmpty(oldPathString)){ try{ - String[] oldPolicyScopeName = getScopeAndNameAndType(oldPathString); - String oldConfigFileName = getConfigFile(oldPolicyScopeName[1],oldPolicyScopeName[0],policy.getConfigurationData().getConfigType()); - Path oldConfigFilePath = getPolicySubFile(oldConfigFileName, "Config"); - logger.debug("Trying to delete: "+oldConfigFilePath.toString()); - Files.delete(oldConfigFilePath); + String[] oldPolicyScopeName = getScopeAndNameAndType(oldPathString); + String oldConfigFileName = getConfigFile(oldPolicyScopeName[1],policy.getConfigurationData().getConfigType()); + Path oldConfigFilePath = getPolicySubFile(oldConfigFileName, "Config"); + logger.debug("Trying to delete: "+oldConfigFilePath.toString()); + Files.delete(oldConfigFilePath); }catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Could not delete the old policy config before rename for policy: "+oldPathString,e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not delete the old policy config before rename for policy: "+oldPathString); } } writePolicySubFile(policy, "Config"); - + }else if(policy.getActionBodyEntity()!= null){ if(!isNullOrEmpty(oldPathString)){ try{ - String[] oldPolicyScopeName = getScopeAndNameAndType(oldPathString); - String oldActionFileName = getConfigFile(oldPolicyScopeName[1],oldPolicyScopeName[0],ConfigPolicy.JSON_CONFIG); - Path oldActionFilePath = getPolicySubFile(oldActionFileName, "Action"); - logger.debug("Trying to delete: "+oldActionFilePath.toString()); - Files.delete(oldActionFilePath); + String[] oldPolicyScopeName = getScopeAndNameAndType(oldPathString); + String oldActionFileName = getConfigFile(oldPolicyScopeName[1],ConfigPolicy.JSON_CONFIG); + Path oldActionFilePath = getPolicySubFile(oldActionFileName, "Action"); + logger.debug("Trying to delete: "+oldActionFilePath.toString()); + Files.delete(oldActionFilePath); }catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Could not delete the old policy action body before rename for policy: "+oldPathString,e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not delete the old policy action body before rename for policy: "+oldPathString); } } writePolicySubFile(policy, "Action"); } - + } } catch (IOException e1) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Error occurred while performing [" + action + "] of Policy File: " + policy.getPolicyName(), e1); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "Error occurred while performing [" + action + "] of Policy File: " + policy.getPolicyName()); } } - - //FIXME error correcting and logs + private void createGroupsFromDatabase(){ //get list of groups boolean foundDefault = false; //need to avoid infinite loop, just in case boolean alreadyRunAdd = false; while(!foundDefault){ - - EntityManager em = emf.createEntityManager(); - Query getGroups = em.createQuery("SELECT g FROM GroupEntity g WHERE g.deleted=:deleted"); - getGroups.setParameter("deleted", false); - List<?> groups = getGroups.getResultList(); - em.close(); - //make a folder for each group in pdps folders - Path pdpsPath = Paths.get("pdps"); - try { - FileUtils.forceDelete(pdpsPath.toFile()); - } catch (Exception e) { - e.printStackTrace(); - } - try { - FileUtils.forceMkdir(pdpsPath.toFile()); - } catch (Exception e) { - e.printStackTrace(); - } - Properties propertyFileProperties = new Properties(); - String groupList = ""; - String defaultGroup = ""; - for(Object o : groups){ - GroupEntity group = (GroupEntity)o; - Path groupPath = Paths.get(pdpsPath.toString(), group.getGroupId()); - try { - FileUtils.forceMkdir(groupPath.toFile()); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - Properties policyProperties = new Properties(); - String rootPolicies = ""; - for(PolicyEntity policy : group.getPolicies()){ - Path newPolicyPath = Paths.get(groupPath.toString(),getPdpPolicyName(policy.getPolicyName(),policy.getScope())); - File newPolicyFile = newPolicyPath.toFile(); + + EntityManager em = emf.createEntityManager(); + Query getGroups = em.createQuery("SELECT g FROM GroupEntity g WHERE g.deleted=:deleted"); + getGroups.setParameter("deleted", false); + List<?> groups = getGroups.getResultList(); + em.close(); + //make a folder for each group in pdps folders + Path pdpsPath = Paths.get(XACMLProperties.getProperty("xacml.pap.pdps")); + if(!pdpsPath.toFile().exists()){ try { - newPolicyFile.createNewFile(); + FileUtils.forceMkdir(pdpsPath.toFile()); + } catch (IOException e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not make the new pdps folder; one does not exist"); + } + } + Properties propertyFileProperties = new Properties(); + String groupList = ""; + String defaultGroup = ""; + HashSet<String> currentGroupPaths = new HashSet<String>(); + for(Object o : groups){ + GroupEntity group = (GroupEntity)o; + Path groupPath = Paths.get(pdpsPath.toString(), group.getGroupId()); + currentGroupPaths.add(groupPath.getFileName().toString()); + if(groupPath.toFile().exists()){ + try { + FileUtils.forceDelete(Paths.get(groupPath.toString(), "xacml.policy.properties").toFile()); + } catch (IOException e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not delete old xacml.policy.properties file"); + } + File[] xmlFiles = groupPath.toFile().listFiles(new FileFilter(){ + + @Override + public boolean accept(File pathname) { + return pathname.toString().endsWith(".xml"); + } + + }); + for(File deleteMe : xmlFiles){ + try { + FileUtils.forceDelete(deleteMe); + } catch (IOException e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not delete one of the policy files that we are going to replace: "+deleteMe.toString()); + } + } + } else { + try { + FileUtils.forceMkdir(groupPath.toFile()); } catch (IOException e) { - // TODO Auto-generated catch block e.printStackTrace(); } - try { - FileOutputStream policyFileStream = new FileOutputStream(newPolicyFile); + } + Properties policyProperties = new Properties(); + String rootPolicies = ""; + for(PolicyEntity policy : group.getPolicies()){ + Path newPolicyPath = Paths.get(groupPath.toString(),getPdpPolicyName(policy.getPolicyName(),policy.getScope())); + File newPolicyFile = newPolicyPath.toFile(); + try { + newPolicyFile.createNewFile(); + } catch (IOException e) { + PolicyLogger.error(e.getMessage()); + } + try { + FileOutputStream policyFileStream = new FileOutputStream(newPolicyFile); policyFileStream.write(policy.getPolicyData().getBytes("UTF-8")); - policyFileStream.close(); + policyFileStream.close(); + } catch (IOException e) { + PolicyLogger.error(e.getMessage()); + } + policyProperties.setProperty(getPdpPolicyName(policy.getPolicyName(),policy.getScope())+".name",removeExtensionAndVersionFromPolicyName(policy.getPolicyName())); + rootPolicies += ",".concat(getPdpPolicyName(policy.getPolicyName(),policy.getScope())); + } + Path xacmlPolicyPropertiesPath = Paths.get(groupPath.toString(),"xacml.policy.properties"); + File xacmlPolicyPropertiesFile = xacmlPolicyPropertiesPath.toFile(); + if(rootPolicies.length() > 0){ + rootPolicies = rootPolicies.substring(1); + } + policyProperties.setProperty("xacml.referencedPolicies", ""); + policyProperties.setProperty("xacml.rootPolicies", rootPolicies); + + try { + xacmlPolicyPropertiesFile.createNewFile(); } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + PolicyLogger.error(e.getMessage()); + } + try { + FileOutputStream xacmlPolicyPropertiesFileStream = new FileOutputStream(xacmlPolicyPropertiesFile); + policyProperties.store(xacmlPolicyPropertiesFileStream, ""); + xacmlPolicyPropertiesFileStream.close(); + } catch (IOException e) { + PolicyLogger.error(e.getMessage()); + } + + em = emf.createEntityManager(); + Query getPdpsQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.groupEntity=:group AND p.deleted=:deleted"); + getPdpsQuery.setParameter("group", group); + getPdpsQuery.setParameter("deleted", false); + List<?> pdps = getPdpsQuery.getResultList(); + em.close(); + String pdpLine = ""; + for(Object o2 : pdps){ + PdpEntity pdp = (PdpEntity)o2; + pdpLine += ",".concat(pdp.getPdpId()); + propertyFileProperties.setProperty(pdp.getPdpId()+".description",pdp.getDescription()); + propertyFileProperties.setProperty(pdp.getPdpId()+".jmxport",String.valueOf(pdp.getJmxPort())); + propertyFileProperties.setProperty(pdp.getPdpId()+".name",pdp.getPdpName()); + } + if(pdpLine.length() > 0){ + pdpLine = pdpLine.substring(1); + } + propertyFileProperties.setProperty(group.getGroupId()+".description", group.getDescription()); + propertyFileProperties.setProperty(group.getGroupId()+".name", group.getgroupName()); + propertyFileProperties.setProperty(group.getGroupId()+".pdps",pdpLine); + groupList += ",".concat(group.getGroupId()); + if(group.isDefaultGroup()){ + defaultGroup = group.getGroupId(); + foundDefault = true; + } + } + //check the list of directories in the pdps folder and make sure none should be deleted + File[] filesInPdpsFolder = pdpsPath.toFile().listFiles(new FileFilter(){ + @Override + public boolean accept(File pathname) { + return pathname.isDirectory(); + } + }); + for(File f : filesInPdpsFolder){ + if(f.isDirectory()){ + if(!currentGroupPaths.contains(f.toPath().getFileName().toString())){ + try { + FileUtils.forceDelete(f); + } catch (IOException e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not delete pdp group folder, which has been deleted from the database"); + } + } + } + } + if(!foundDefault && !alreadyRunAdd){ + alreadyRunAdd = true; + //add default group to db + try{ + em = emf.createEntityManager(); + em.getTransaction().begin(); + GroupEntity newDefaultGroup = new GroupEntity(); + em.persist(newDefaultGroup); + newDefaultGroup.setDescription("The default group where new PDP's are put."); + newDefaultGroup.setGroupId("default"); + newDefaultGroup.setGroupName("default"); + newDefaultGroup.setDefaultGroup(true); + newDefaultGroup.setCreatedBy("automaticallyAdded"); + newDefaultGroup.setModifiedBy("automaticallyAdded"); + em.flush(); + em.getTransaction().commit(); + continue; + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not add a new default group to the database"); } - policyProperties.setProperty(getPdpPolicyName(policy.getPolicyName(),policy.getScope())+".name",removeExtensionAndVersionFromPolicyName(policy.getPolicyName())); - rootPolicies += ",".concat(getPdpPolicyName(policy.getPolicyName(),policy.getScope())); } - Path xacmlPolicyPropertiesPath = Paths.get(groupPath.toString(),"xacml.policy.properties"); - File xacmlPolicyPropertiesFile = xacmlPolicyPropertiesPath.toFile(); - if(rootPolicies.length() > 0){ - rootPolicies = rootPolicies.substring(1); + + Path xacmlPropertiesPath = Paths.get(pdpsPath.toString(),"xacml.properties"); + File xacmlPropertiesFile = xacmlPropertiesPath.toFile(); + if(groupList.length()>0){ + groupList = groupList.substring(1); } - policyProperties.setProperty("xacml.referencedPolicies", ""); - policyProperties.setProperty("xacml.rootPolicies", rootPolicies); - + propertyFileProperties.setProperty("xacml.pap.groups",groupList); + propertyFileProperties.setProperty("xacml.pap.groups.default",defaultGroup); + try { + FileUtils.forceDelete(xacmlPropertiesFile); + } catch (IOException e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not delete the old xacml.properties file"); + } try { - xacmlPolicyPropertiesFile.createNewFile(); + xacmlPropertiesFile.createNewFile(); } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + PolicyLogger.error(e.getMessage()); } try { - FileOutputStream xacmlPolicyPropertiesFileStream = new FileOutputStream(xacmlPolicyPropertiesFile); - //xacmlPolicyPropertiesFileStream.write(xacmlPolicyProperties.getBytes("UTF-8")); - policyProperties.store(xacmlPolicyPropertiesFileStream, ""); - xacmlPolicyPropertiesFileStream.close(); + FileOutputStream xacmlPropertiesFileStream = new FileOutputStream(xacmlPropertiesFile); + propertyFileProperties.store(xacmlPropertiesFileStream, ""); + xacmlPropertiesFileStream.close(); } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - em = emf.createEntityManager(); - Query getPdpsQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.groupEntity=:group AND p.deleted=:deleted"); - getPdpsQuery.setParameter("group", group); - getPdpsQuery.setParameter("deleted", false); - List<?> pdps = getPdpsQuery.getResultList(); - em.close(); - String pdpLine = ""; - for(Object o2 : pdps){ - PdpEntity pdp = (PdpEntity)o2; - pdpLine += ",".concat(pdp.getPdpId()); - propertyFileProperties.setProperty(pdp.getPdpId()+".description",pdp.getDescription()); - propertyFileProperties.setProperty(pdp.getPdpId()+".jmxport",String.valueOf(pdp.getJmxPort())); - propertyFileProperties.setProperty(pdp.getPdpId()+".name",pdp.getPdpName()); - } - if(pdpLine.length() > 0){ - pdpLine = pdpLine.substring(1); - } - propertyFileProperties.setProperty(group.getGroupId()+".description", group.getDescription()); - propertyFileProperties.setProperty(group.getGroupId()+".name", group.getgroupName()); - propertyFileProperties.setProperty(group.getGroupId()+".pdps",pdpLine); - groupList += ",".concat(group.getGroupId()); - if(group.isDefaultGroup()){ - defaultGroup = group.getGroupId(); - foundDefault = true; - } - } - if(!foundDefault && !alreadyRunAdd){ - alreadyRunAdd = true; - //add default group to db - try{ - em = emf.createEntityManager(); - em.getTransaction().begin(); - GroupEntity newDefaultGroup = new GroupEntity(); - em.persist(newDefaultGroup); - newDefaultGroup.setDescription("The default group where new PDP's are put."); - newDefaultGroup.setGroupId("default"); - newDefaultGroup.setGroupName("default"); - newDefaultGroup.setDefaultGroup(true); - newDefaultGroup.setCreatedBy("automaticallyAdded"); - newDefaultGroup.setModifiedBy("automaticallyAdded"); - em.flush(); - em.getTransaction().commit(); - continue; - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Could not add a new default group to the database",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not add a new default group to the database"); + PolicyLogger.error(e.getMessage()); } - } - - Path xacmlPropertiesPath = Paths.get(pdpsPath.toString(),"xacml.properties"); - File xacmlPropertiesFile = xacmlPropertiesPath.toFile(); - if(groupList.length()>0){ - groupList = groupList.substring(1); - } - propertyFileProperties.setProperty("xacml.pap.groups",groupList); - propertyFileProperties.setProperty("xacml.pap.groups.default",defaultGroup); - try { - xacmlPropertiesFile.createNewFile(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - try { - FileOutputStream xacmlPropertiesFileStream = new FileOutputStream(xacmlPropertiesFile); - //xacmlPropertiesFileStream.write(fileContents.getBytes("UTF-8")); - propertyFileProperties.store(xacmlPropertiesFileStream, ""); - xacmlPropertiesFileStream.close(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - //if we get this far down, something went wrong and we don't want to get stuck in the loop - foundDefault = true; + //if we get this far down, something went wrong and we don't want to get stuck in the loop + foundDefault = true; } //put policies in group folder //create xacml.policy.properties in each folder with list of policies in that folder @@ -1318,8 +1300,6 @@ public class PolicyDBDao { //create xacml.properties with list of groups and pdps and other info } - - //FIXME error checking and logging private String getPdpPolicyName(String name, String scope){ String finalName = ""; finalName += scope; @@ -1331,28 +1311,22 @@ public class PolicyDBDao { private String removeFileExtension(String fileName){ return fileName.substring(0, fileName.lastIndexOf('.')); } - + private String buildPolicyScopeDirectory(PolicyEntity policy){ String repo = buildPolicyDirectory(); String policyScope = policy.getScope(); if(policyScope == null){ policyScope = ""; - //TODO:EELF Cleanup - Remove logger - //logger.error("buildPolicyScopeDirectory("+policy+") computed null policyScope. Using blank."); PolicyLogger.error("buildPolicyScopeDirectory("+policy+") computed null policyScope. Using blank."); } else { policyScope = policyScope.replace(".", FileSystems.getDefault().getSeparator()); } if(policyScope == null){ policyScope = ""; - //TODO:EELF Cleanup - Remove logger - //logger.error("buildPolicyScopeDirectory("+policy+") computed null policyScope. Using blank."); PolicyLogger.error("buildPolicyScopeDirectory("+policy+") computed null policyScope. Using blank."); } if(repo == null){ - //TODO:EELF Cleanup - Remove logger - //logger.error("buildPolicyScopeDirectory("+policy+") received null repo. Using blank."); PolicyLogger.error("buildPolicyScopeDirectory("+policy+") received null repo. Using blank."); repo = ""; } @@ -1360,8 +1334,6 @@ public class PolicyDBDao { if(returnPath != null){ return returnPath.toString(); } else { - //TODO:EELF Cleanup - Remove logger - //logger.error("buildPolicyScopeDirectory("+policy+") computed null path"); PolicyLogger.error("buildPolicyScopeDirectory("+policy+") received null repo. Using blank."); return ""; } @@ -1372,25 +1344,20 @@ public class PolicyDBDao { String repo = buildPolicyDirectory(); policyScope = policyScope.replace(".", FileSystems.getDefault().getSeparator()); return repo + FileSystems.getDefault().getSeparator() + policyScope; - + } - + private static String buildPolicyDirectory(){ Path workspacePath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WORKSPACE), getDefaultWorkspace()); Path repositoryPath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_REPOSITORY)); Path gitPath = Paths.get(workspacePath.toString(), repositoryPath.getFileName().toString()); - - /* - * Getting and Setting the parent path for Admin Console use when reading the policy files - */ - //domain chosen by the client to store the policy action files - //String domain = policy.getDomainDir(); - - - - //getting the fullpath of the gitPath and convert to string - String policyDir = gitPath.toAbsolutePath().toString(); - + + /* + * Getting and Setting the parent path for Admin Console use when reading the policy files + */ + //getting the fullpath of the gitPath and convert to string + String policyDir = gitPath.toAbsolutePath().toString(); + if(policyDir.contains("\\")){ policyDir = policyDir.replace("XACML-PAP-REST", "XACML-PAP-ADMIN"); @@ -1399,32 +1366,32 @@ public class PolicyDBDao { policyDir = policyDir.replace("pap", "console"); } } - logger.debug("policyDir: " + policyDir); + logger.debug("policyDir: " + policyDir); return policyDir; } - + private Path getPolicySubFile(String filename, String subFileType){ logger.debug("getPolicySubFile(" + filename + ", " + subFileType + ")"); Path filePath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS).toString(), subFileType); File file = null; - + filename = FilenameUtils.removeExtension(filename); - + for(File tmpFile : filePath.toFile().listFiles()){ if (FilenameUtils.removeExtension(tmpFile.getName()).equals(filename)){ file = tmpFile; } } - + Path finalPath = null; if (file!= null){ finalPath = Paths.get(file.getAbsolutePath()); } - + logger.debug("end of getPolicySubFile: " + finalPath); return finalPath; } - + private boolean writePolicySubFile(PolicyEntity policy, String policyType){ logger.info("writePolicySubFile with policyName[" + policy.getPolicyName() + "] and policyType[" + policyType + "]"); String type = null; @@ -1434,10 +1401,10 @@ public class PolicyDBDao { type = "Config"; subTypeName = FilenameUtils.removeExtension(policy.getConfigurationData().getConfigurationName()); subTypeBody = policy.getConfigurationData().getConfigBody(); - + String configType = policy.getConfigurationData().getConfigType(); - - + + if (configType != null) { if (configType.equals(JSON_CONFIG)) { subTypeName = subTypeName + ".json"; @@ -1452,13 +1419,13 @@ public class PolicyDBDao { subTypeName = subTypeName + ".txt"; } } - + }else if (policyType.equalsIgnoreCase("action")){ type = "Action"; subTypeName = policy.getActionBodyEntity().getActionBodyName(); subTypeBody = policy.getActionBodyEntity().getActionBody(); - - + + } Path filePath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS).toString(), type); @@ -1466,28 +1433,26 @@ public class PolicyDBDao { subTypeBody = ""; } boolean success = false; - try { - Files.deleteIfExists(Paths.get(filePath.toString(), subTypeName)); - File file = Paths.get(filePath.toString(),subTypeName).toFile(); - file.createNewFile(); - FileWriter fileWriter = new FileWriter(file, false); // false to overwrite - fileWriter.write(subTypeBody); - fileWriter.close(); - success = true; + try { + Files.deleteIfExists(Paths.get(filePath.toString(), subTypeName)); + File file = Paths.get(filePath.toString(),subTypeName).toFile(); + file.createNewFile(); + FileWriter fileWriter = new FileWriter(file, false); // false to overwrite + fileWriter.write(subTypeBody); + fileWriter.close(); + success = true; + + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Exception occured while creating Configuration File for Policy : " + policy.getPolicyName()); + } - } catch (Exception e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Exception occured while creating Configuration File for Policy : " + policy.getPolicyName(), e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Exception occured while creating Configuration File for Policy : " + policy.getPolicyName()); - } - return success; - + } - + private String getPolicySubType(String filename){ String type = null; - + if (filename != null) { if (FilenameUtils.getExtension(filename).equalsIgnoreCase("json")) { type = ConfigPolicy.JSON_CONFIG; @@ -1502,36 +1467,34 @@ public class PolicyDBDao { type = ConfigPolicy.OTHER_CONFIG; } } - + return type; - + } - - + + private void convertFileToDBEntry(Path path){ logger.info("convertFileToDBEntry"); - + if(path.toString().contains(".git")){ return; } - + String filename = path.getFileName().toString(); if (filename.contains(".svnignore")){ return; } String[] scopeAndName = getScopeAndNameAndType(path.toString()); - + if(scopeAndName == null){ - //TODO:EELF Cleanup - Remove logger - //logger.error("convertFileToDBEntry error: getScopeAndNameAndType(" + path.toString() + " is null!"); PolicyLogger.error("convertFileToDBEntry error: getScopeAndNameAndType(" + path.toString() + " is null!"); return; } EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); - + PolicyEntity policy = new PolicyEntity(); em.persist(policy); String policyScope = scopeAndName[0]; @@ -1548,18 +1511,16 @@ public class PolicyDBDao { //we want the last index +1 because we don't want the dot version = Integer.parseInt(newName.substring(newName.lastIndexOf(".")+1)); } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Could not get the policy version number from "+newName); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not get the policy version number from "+newName); } newName = newScope + File.separator + newName.substring(0, newName.lastIndexOf(".")); Query query = em.createNamedQuery("PolicyVersion.findByPolicyName"); query.setParameter("pname", newName); - + List<?> result = query.getResultList(); PolicyVersion versionEntity = null; - + if (!result.isEmpty()) { logger.info("Result is not empty"); versionEntity = (PolicyVersion) result.get(0); @@ -1570,7 +1531,7 @@ public class PolicyDBDao { logger.info("result is empty"); Calendar calendar = Calendar.getInstance(); Timestamp createdDate = new Timestamp(calendar.getTime().getTime()); - + versionEntity = new PolicyVersion(); em.persist(versionEntity); versionEntity.setPolicyName(newName); @@ -1581,21 +1542,19 @@ public class PolicyDBDao { versionEntity.setCreatedDate(createdDate); versionEntity.setModifiedDate(createdDate); } - - + + try { String policyContent = new String(Files.readAllBytes(path)); policy.setDescription(getElementFromXMLString("/Description", policyContent)); policy.setPolicyData(policyContent); } catch (IOException e1) { - //TODO:EELF Cleanup - Remove logger - //logger.error("convertFileToDBEntry error settingPolicyData: " + e1.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "convertFileToDBEntry error settingPolicyData"); em.getTransaction().rollback(); em.close(); return; } - + if((scopeAndName[2].equalsIgnoreCase("Config"))){ String scopeName = scopeAndName[0] + "." + scopeAndName[1]; Path subFilePath = getPolicySubFile(scopeName, scopeAndName[2]); @@ -1610,10 +1569,8 @@ public class PolicyDBDao { configData.setCreatedBy(AUDIT_USER); configData.setModifiedBy(AUDIT_USER); policy.setConfigurationData(configData); - + } catch (Exception e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("convertFileToDBEntry error for Config policy: " + e.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "convertFileToDBEntry error for Config policy"); em.getTransaction().rollback(); em.close(); @@ -1631,10 +1588,8 @@ public class PolicyDBDao { actionBody.setCreatedBy(AUDIT_USER); actionBody.setModifiedBy(AUDIT_USER); policy.setActionBodyEntity(actionBody); - + } catch (Exception e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("convertFileToDBEntry error for Action policy: " + e.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "convertFileToDBEntry error for Action policy"); em.getTransaction().rollback(); em.close(); @@ -1645,7 +1600,7 @@ public class PolicyDBDao { em.getTransaction().commit(); em.close(); } - + private void deleteAllPolicyTables(){ EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); @@ -1659,9 +1614,9 @@ public class PolicyDBDao { deletePolicyVersionEntityTableUpdate.executeUpdate(); em.getTransaction().commit(); em.close(); - + } - + public void auditLocalDatabase(PAPPolicyEngine papEngine2){ logger.debug("PolicyDBDao.auditLocalDatabase() is called"); Path webappsPath = Paths.get(buildPolicyDirectory()); @@ -1672,13 +1627,11 @@ public class PolicyDBDao { Files.walk(webappsPath).filter(Files::isRegularFile).forEach(this::convertFileToDBEntry); auditGroups(papEngine2); } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("auditLocalDatabase() error: " + e.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "auditLocalDatabase() error"); e.printStackTrace(); } } - + /** * Audits and loads the local file system to match the database version. */ @@ -1700,8 +1653,6 @@ public class PolicyDBDao { Path repoWithScope = Paths.get(webappsPath.toString(), XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DOMAIN)); Files.createDirectories(repoWithScope); } catch (IOException e2) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Error occurred while creating / clearing Config and Policy filesystem directories", e2); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Error occurred while creating / clearing Config and Policy filesystem directories"); } @@ -1739,14 +1690,12 @@ public class PolicyDBDao { XACMLPolicyWriter.writePolicyFile(newPath, (PolicyType) policyData); } } catch (Exception e1) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Error occurred while creating Policy File: " + name, e1); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "Error occurred while creating Policy File: " + name); } } createGroupsFromDatabase(); } - + public void deleteAllGroupTables(){ logger.debug("PolicyDBDao.deleteAllGroupTables() called"); EntityManager em = emf.createEntityManager(); @@ -1754,95 +1703,89 @@ public class PolicyDBDao { Query deletePdpEntityEntityTableUpdate = em.createNamedQuery("PdpEntity.deleteAll"); deletePdpEntityEntityTableUpdate.executeUpdate(); - + Query deleteGroupEntityTableUpdate = em.createNamedQuery("GroupEntity.deleteAll"); deleteGroupEntityTableUpdate.executeUpdate(); - + em.getTransaction().commit(); em.close(); } - + @SuppressWarnings("unchecked") public void auditGroups(PAPPolicyEngine papEngine2){ logger.debug("PolicyDBDao.auditGroups() called"); - + EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); final String AUDIT_STR = "Audit"; try{ Set<EcompPDPGroup> groups = papEngine2.getEcompPDPGroups(); - + for (EcompPDPGroup grp : groups){ try{ - GroupEntity groupEntity = new GroupEntity(); - em.persist(groupEntity); - groupEntity.setGroupName(grp.getName()); - groupEntity.setDescription(grp.getDescription()); - groupEntity.setDefaultGroup(grp.isDefaultGroup()); - groupEntity.setCreatedBy(AUDIT_STR); - groupEntity.setGroupId(createNewPDPGroupId(grp.getId())); - groupEntity.setModifiedBy(AUDIT_STR); - Set<EcompPDP> pdps = grp.getEcompPdps(); - - for(EcompPDP pdp : pdps){ - PdpEntity pdpEntity = new PdpEntity(); - em.persist(pdpEntity); - pdpEntity.setGroup(groupEntity); - pdpEntity.setJmxPort(pdp.getJmxPort()); - pdpEntity.setPdpId(pdp.getId()); - pdpEntity.setPdpName(pdp.getName()); - pdpEntity.setModifiedBy(AUDIT_STR); - pdpEntity.setCreatedBy(AUDIT_STR); - - } - - Set<PDPPolicy> policies = grp.getPolicies(); - - for(PDPPolicy policy : policies){ - try{ - String[] stringArray = getNameScopeAndVersionFromPdpPolicy(policy.getId()); - List<PolicyEntity> policyEntityList; - Query getPolicyEntitiesQuery = em.createNamedQuery("PolicyEntity.findByNameAndScope"); - getPolicyEntitiesQuery.setParameter("name", stringArray[0]); - getPolicyEntitiesQuery.setParameter("scope", stringArray[1]); - - policyEntityList = getPolicyEntitiesQuery.getResultList(); - PolicyEntity policyEntity = null; - if(policyEntityList.size() < 1){ - policyEntity = addPolicyThatOnlyExistsInPdpGroup(policy.getId(),Paths.get("pdps",grp.getId(),policy.getId()),em); - } else { - policyEntity = policyEntityList.get(0); - } - if(policyEntity != null){ - groupEntity.addPolicyToGroup(policyEntity); + GroupEntity groupEntity = new GroupEntity(); + em.persist(groupEntity); + groupEntity.setGroupName(grp.getName()); + groupEntity.setDescription(grp.getDescription()); + groupEntity.setDefaultGroup(grp.isDefaultGroup()); + groupEntity.setCreatedBy(AUDIT_STR); + groupEntity.setGroupId(createNewPDPGroupId(grp.getId())); + groupEntity.setModifiedBy(AUDIT_STR); + Set<EcompPDP> pdps = grp.getEcompPdps(); + + for(EcompPDP pdp : pdps){ + PdpEntity pdpEntity = new PdpEntity(); + em.persist(pdpEntity); + pdpEntity.setGroup(groupEntity); + pdpEntity.setJmxPort(pdp.getJmxPort()); + pdpEntity.setPdpId(pdp.getId()); + pdpEntity.setPdpName(pdp.getName()); + pdpEntity.setModifiedBy(AUDIT_STR); + pdpEntity.setCreatedBy(AUDIT_STR); + } - }catch(Exception e2){ - //TODO:EELF Cleanup - Remove logger - //logger.error("ERROR: " + e2); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Exception auditGroups inner catch"); + + Set<PDPPolicy> policies = grp.getPolicies(); + + for(PDPPolicy policy : policies){ + try{ + String[] stringArray = getNameScopeAndVersionFromPdpPolicy(policy.getId()); + List<PolicyEntity> policyEntityList; + Query getPolicyEntitiesQuery = em.createNamedQuery("PolicyEntity.findByNameAndScope"); + getPolicyEntitiesQuery.setParameter("name", stringArray[0]); + getPolicyEntitiesQuery.setParameter("scope", stringArray[1]); + + policyEntityList = getPolicyEntitiesQuery.getResultList(); + PolicyEntity policyEntity = null; + if(policyEntityList.size() < 1){ + policyEntity = addPolicyThatOnlyExistsInPdpGroup(policy.getId(),Paths.get(XACMLProperties.getProperty("xacml.pap.pdps"),grp.getId(),policy.getId()),em); + } else { + policyEntity = policyEntityList.get(0); + } + if(policyEntity != null){ + groupEntity.addPolicyToGroup(policyEntity); + } + }catch(Exception e2){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Exception auditGroups inner catch"); + } } - } }catch(Exception e1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("ERROR: " + e1); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "Exception auditGroups middle catch"); } } }catch(Exception e){ em.getTransaction().rollback(); - //TODO:EELF Cleanup - Remove logger - //logger.error("ERROR: " + e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Exception auditGroups outer catch"); em.close(); return; } - + em.getTransaction().commit(); em.close(); - + } - + private PolicyEntity addPolicyThatOnlyExistsInPdpGroup(String polId, Path path,EntityManager em){ String filename = path.getFileName().toString(); if (filename.contains(".svnignore")){ @@ -1850,15 +1793,12 @@ public class PolicyDBDao { } String[] scopeAndName = getNameScopeAndVersionFromPdpPolicy(polId); - + if(scopeAndName == null){ - //TODO:EELF Cleanup - Remove logger - //logger.error("convertFileToDBEntry error: getScopeAndNameAndType(" + polId.toString() + " is null!"); PolicyLogger.error("convertFileToDBEntry error: getScopeAndNameAndType(" + polId.toString() + " is null!"); return null; } - PolicyEntity policy = new PolicyEntity(); em.persist(policy); String policyScope = scopeAndName[1]; @@ -1868,39 +1808,31 @@ public class PolicyDBDao { policy.setCreatedBy(AUDIT_USER); policy.setModifiedBy(AUDIT_USER); policy.setDeleted(true); - + try { String policyContent = new String(Files.readAllBytes(path)); policy.setDescription(getElementFromXMLString("/Description", policyContent)); policy.setPolicyData(policyContent); em.flush(); - //em.getTransaction().commit(); } catch (IOException e1) { - // TODO Auto-generated catch block - //TODO:EELF Cleanup - Remove logger - //logger.error("convertFileToDBEntry error settingPolicyData: " + e1.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "convertFileToDBEntry error settingPolicyData"); return null; } - //em.close(); return policy; } - - private String getConfigFile(String filename, String scope, PolicyRestAdapter policy){ + + private String getConfigFile(String filename, PolicyRestAdapter policy){ if(policy == null){ - return getConfigFile(filename, scope, (String)null); + return getConfigFile(filename, (String)null); } - return getConfigFile(filename, scope, policy.getConfigType()); + return getConfigFile(filename, policy.getConfigType()); } //copied from ConfigPolicy.java and modified // Here we are adding the extension for the configurations file based on the // config type selection for saving. - private String getConfigFile(String filename, String scope, String configType) { - logger.debug("getConfigFile(String filename, String scope, String configType) as getConfigFile("+filename+", "+scope+", "+configType+") called"); + private String getConfigFile(String filename, String configType) { + logger.debug("getConfigFile(String filename, String scope, String configType) as getConfigFile("+filename+", "+configType+") called"); filename = FilenameUtils.removeExtension(filename); -// if (filename.endsWith(".xml")) { -// filename = filename.substring(0, filename.length() - 4); -// } String id = configType; if (id != null) { @@ -1917,9 +1849,9 @@ public class PolicyDBDao { filename = filename + ".txt"; } } - return scope + "." + filename; + return filename; } - + /** * Constructs the file name of a policy. * @param policy The name of a policy (ex: mypolicy1) @@ -1939,7 +1871,7 @@ public class PolicyDBDao { String concats = namePrefix + "_" +policy.getPolicyName() + ".xml"; return concats; } - + private String stripPolicyName(String policyFileName){ String policyName = policyFileName; try{ @@ -1950,17 +1882,16 @@ public class PolicyDBDao { } return policyName; } - //FIXME error check, logs + private String[] getNameScopeAndVersionFromPdpPolicy(String fileName){ String[] splitByDots = fileName.split("\\."); if(splitByDots.length < 3){ - //throw something + //should we throw something return null; } String policyName = splitByDots[splitByDots.length-3]; String version = splitByDots[splitByDots.length-2]; //policy names now include version - policyName += "."+version +".xml"; String scope = ""; for(int i=0;i<splitByDots.length-3;i++){ scope += ".".concat(splitByDots[i]); @@ -1970,12 +1901,12 @@ public class PolicyDBDao { scope = scope.substring(1); } String[] returnArray = new String[3]; - returnArray[0] = policyName; + returnArray[0] = policyName + "." + version + ".xml"; returnArray[2] = version; returnArray[1] = scope; return returnArray; } - + /** * Constructs the complete repository path based on the properties files * @return The repository path @@ -1988,7 +1919,7 @@ public class PolicyDBDao { logger.debug("after gitPath: " + gitPath); return gitPath.toString(); } - + //copied from StdEngine.java public static String createNewPDPGroupId(String name) { String id = name; @@ -2010,7 +1941,7 @@ public class PolicyDBDao { return id; } - + /** * Checks if any of the given strings are empty or null * @param strings One or more Strings (or nulls) to check if they are null or empty @@ -2027,16 +1958,16 @@ public class PolicyDBDao { } return false; } - + /** * Computes the scope, name, and type of a policy based on its file path * @param path The file path of the policy (including the xml policy file) - * @return A string array of size 3. 1: the scope of the policy 2: the name of the policy (Config_mypol.xml) 3: the type (Config). Or, null if the path can not be parsed. + * @return A string array of size 3. 1: the scope of the policy 2: the name of the policy (Config_mypol.xml) 3: the type (Config). Or, null if the path can not be parsed. */ private static String[] getScopeAndNameAndType(String path){ logger.debug("getScopeAndNameAndType(String path) as getScopeAndNameAndType("+path+") called"); if(path == null){ - + } String gitPath = getGitPath(); @@ -2064,7 +1995,7 @@ public class PolicyDBDao { return null; } String scopeAndName = path.substring(path.indexOf(gitPath)+gitPath.length()); - + logger.debug("scopeAndName: " + scopeAndName); String policyType = null; String[] policyTypes = {"Config_","Action_","Decision_"}; @@ -2116,7 +2047,7 @@ public class PolicyDBDao { return returnArray; } - + private class PolicyDBDaoTransactionInstance implements PolicyDBDaoTransaction { private EntityManager em; private final Object emLock = new Object(); @@ -2126,7 +2057,7 @@ public class PolicyDBDao { String newGroupId; private boolean operationRun = false; private final Thread transactionTimer; - + private PolicyDBDaoTransactionInstance(){ //call the constructor with arguments this(Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_TIMEOUT)), @@ -2137,8 +2068,8 @@ public class PolicyDBDao { private PolicyDBDaoTransactionInstance(int transactionTimeout, int transactionWaitTime){ if(logger.isDebugEnabled()){ logger.debug("\n\nPolicyDBDaoTransactionInstance() as PolicyDBDaoTransactionInstance() called:" - + "\n transactionTimeout = " + transactionTimeout - + "\n transactionWaitTime = " + transactionWaitTime + "\n\n"); + + "\n transactionTimeout = " + transactionTimeout + + "\n transactionWaitTime = " + transactionWaitTime + "\n\n"); } this.em = emf.createEntityManager(); policyId = -1; @@ -2187,12 +2118,12 @@ public class PolicyDBDao { } rollbackTransaction(); } - + } - + transactionTimer = new Thread(new TransactionTimer(transactionTimeout),"transactionTimerThread"); transactionTimer.start(); - + } @@ -2201,14 +2132,10 @@ public class PolicyDBDao { } private void checkBeforeOperationRun(boolean justCheckOpen){ if(!isTransactionOpen()){ - //TODO:EELF Cleanup - Remove logger - //logger.error("There is no transaction currently open"); PolicyLogger.error("There is no transaction currently open"); throw new IllegalStateException("There is no transaction currently open"); } if(operationRun && !justCheckOpen){ - //TODO:EELF Cleanup - Remove logger - //logger.error("An operation has already been performed and the current transaction should be committed"); PolicyLogger.error("An operation has already been performed and the current transaction should be committed"); throw new IllegalStateException("An operation has already been performed and the current transaction should be committed"); } @@ -2220,9 +2147,8 @@ public class PolicyDBDao { logger.debug("commitTransaction() as commitTransaction() called"); if(!isTransactionOpen()){ logger.warn("There is no open transaction to commit"); - //throw new IllegalStateException("There is no open transaction to commit"); try{ - em.close(); + em.close(); } catch(Exception e){ e.printStackTrace(); } @@ -2231,29 +2157,22 @@ public class PolicyDBDao { try{ em.getTransaction().commit(); } catch(RollbackException e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught RollbackException on em.getTransaction().commit()",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught RollbackException on em.getTransaction().commit()"); throw new PersistenceException("The commit failed. Message:\n"+e.getMessage()); } em.close(); - //FIXME need to revisit + // need to revisit if(policyId >= 0){ - if(newGroupId != null){ try{ notifyOthers(policyId,POLICY_NOTIFICATION,newGroupId); } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception on notifyOthers("+policyId+","+POLICY_NOTIFICATION+","+newGroupId+")",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on notifyOthers("+policyId+","+POLICY_NOTIFICATION+","+newGroupId+")"); } } else { try{ notifyOthers(policyId,POLICY_NOTIFICATION); } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception on notifyOthers("+policyId+","+POLICY_NOTIFICATION+")",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on notifyOthers("+policyId+","+POLICY_NOTIFICATION+")"); } } @@ -2261,21 +2180,17 @@ public class PolicyDBDao { if(groupId >= 0){ //we don't want commit to fail just because this does if(newGroupId != null){ - try{ - notifyOthers(groupId,GROUP_NOTIFICATION,newGroupId); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception on notifyOthers("+groupId+","+GROUP_NOTIFICATION+","+newGroupId+")",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on notifyOthers("+groupId+","+GROUP_NOTIFICATION+","+newGroupId+")"); - } + try{ + notifyOthers(groupId,GROUP_NOTIFICATION,newGroupId); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on notifyOthers("+groupId+","+GROUP_NOTIFICATION+","+newGroupId+")"); + } } else { - try{ - notifyOthers(groupId,GROUP_NOTIFICATION); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception on notifyOthers("+groupId+","+GROUP_NOTIFICATION+")",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on notifyOthers("+groupId+","+GROUP_NOTIFICATION+")"); - } + try{ + notifyOthers(groupId,GROUP_NOTIFICATION); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on notifyOthers("+groupId+","+GROUP_NOTIFICATION+")"); + } } } if(pdpId >= 0){ @@ -2283,8 +2198,6 @@ public class PolicyDBDao { try{ notifyOthers(pdpId,PDP_NOTIFICATION); } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception on notifyOthers("+pdpId+","+PDP_NOTIFICATION+")",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on notifyOthers("+pdpId+","+PDP_NOTIFICATION+")"); } } @@ -2293,7 +2206,7 @@ public class PolicyDBDao { transactionTimer.interrupt(); } } - + @Override public void rollbackTransaction() { logger.debug("rollbackTransaction() as rollbackTransaction() called"); @@ -2301,17 +2214,13 @@ public class PolicyDBDao { if(isTransactionOpen()){ try{ - em.getTransaction().rollback(); + em.getTransaction().rollback(); } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Could not rollback transaction"); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not rollback transaction"); } try{ em.close(); }catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Could not close EntityManager"); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not close EntityManager"); } @@ -2335,239 +2244,211 @@ public class PolicyDBDao { logger.debug("createPolicy(PolicyRestAdapter policy, String username, String policyScope, String policyName, String policyDataString) as createPolicy("+policy+", "+username+", "+policyScope+", "+policyName+", "+policyDataString+") called"); synchronized(emLock){ checkBeforeOperationRun(); - //em.getTransaction().begin(); - //FIXME if the policy is already found but deleted, when we update it should we reset the created by and version number? - Query createPolicyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:policyName"); - createPolicyQuery.setParameter("scope", policyScope); - createPolicyQuery.setParameter("policyName", policyName); - //createPolicyQuery.setParameter("deleted", false); - List<?> createPolicyQueryList = createPolicyQuery.getResultList(); - PolicyEntity newPolicyEntity; - boolean update; - if(createPolicyQueryList.size() < 1){ - newPolicyEntity = new PolicyEntity(); - update = false; - } else if(createPolicyQueryList.size() > 1){ - //something went wrong - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one policy with the same scope, name, and deleted status were found in the database"); - PolicyLogger.error("Somehow, more than one policy with the same scope, name, and deleted status were found in the database"); - throw new PersistenceException("Somehow, more than one policy with the same scope, name, and deleted status were found in the database"); - } else { - newPolicyEntity = (PolicyEntity)createPolicyQueryList.get(0); - update = true; - } - - ActionBodyEntity newActionBodyEntity = null; - if(policy.getPolicyType().equals("Action")){ - boolean abupdate = false; - if(newPolicyEntity.getActionBodyEntity() == null){ - newActionBodyEntity = new ActionBodyEntity(); - }else{ - newActionBodyEntity = em.find(ActionBodyEntity.class, newPolicyEntity.getActionBodyEntity().getActionBodyId()); - abupdate = true; - } - - if(newActionBodyEntity != null){ - if(!abupdate){ - em.persist(newActionBodyEntity); - } - //build the file path - //trim the .xml off the end - String policyNameClean = FilenameUtils.removeExtension(policyName); - String actionBodyName = policyScope + "." + policyNameClean + ".json"; - Path actionBodyPath = Paths.get(Webapps.getActionHome(), actionBodyName); - if(logger.isDebugEnabled()){ - logger.debug("\nPolicyDBDao.createPolicy" - + "\n actionBodyPath = " + actionBodyPath); + String configName = policyName; + if(policyName.contains("Config_")){ + policyName = policyName.replace(".Config_", ":Config_"); + }else if(policyName.contains("Action_")){ + policyName = policyName.replace(".Action_", ":Action_"); + }else if(policyName.contains("Decision_")){ + policyName = policyName.replace(".Decision_", ":Decision_"); + } + policyName = policyName.split(":")[1]; + Query createPolicyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:policyName"); + createPolicyQuery.setParameter("scope", policyScope); + createPolicyQuery.setParameter("policyName", policyName); + List<?> createPolicyQueryList = createPolicyQuery.getResultList(); + PolicyEntity newPolicyEntity; + boolean update; + if(createPolicyQueryList.size() < 1){ + newPolicyEntity = new PolicyEntity(); + update = false; + } else if(createPolicyQueryList.size() > 1){ + PolicyLogger.error("Somehow, more than one policy with the same scope, name, and deleted status were found in the database"); + throw new PersistenceException("Somehow, more than one policy with the same scope, name, and deleted status were found in the database"); + } else { + newPolicyEntity = (PolicyEntity)createPolicyQueryList.get(0); + update = true; + } + + ActionBodyEntity newActionBodyEntity = null; + if(policy.getPolicyType().equals("Action")){ + boolean abupdate = false; + if(newPolicyEntity.getActionBodyEntity() == null){ + newActionBodyEntity = new ActionBodyEntity(); + }else{ + newActionBodyEntity = em.find(ActionBodyEntity.class, newPolicyEntity.getActionBodyEntity().getActionBodyId()); + abupdate = true; } - //get the action body - String actionBodyString = null; - String actionBodyPathStr = null; - InputStream fileContentStream = null; - - if (Files.exists(actionBodyPath)) { - try { - actionBodyPathStr = (actionBodyPath != null ? actionBodyPath.toString() : null); - fileContentStream = new FileInputStream(actionBodyPathStr); - actionBodyString = IOUtils.toString(fileContentStream); - if(logger.isDebugEnabled()){ - logger.debug("\nPolicyDBDao.createPolicy" - + "\n actionBodyPathStr = " + actionBodyPathStr - + "\n actionBodyString = " + actionBodyString); + + if(newActionBodyEntity != null){ + if(!abupdate){ + em.persist(newActionBodyEntity); + } + //build the file path + //trim the .xml off the end + String policyNameClean = FilenameUtils.removeExtension(configName); + String actionBodyName = policyNameClean + ".json"; + Path actionBodyPath = Paths.get(Webapps.getActionHome(), actionBodyName); + if(logger.isDebugEnabled()){ + logger.debug("\nPolicyDBDao.createPolicy" + + "\n actionBodyPath = " + actionBodyPath); + } + //get the action body + String actionBodyString = null; + String actionBodyPathStr = null; + InputStream fileContentStream = null; + + if (Files.exists(actionBodyPath)) { + try { + actionBodyPathStr = (actionBodyPath != null ? actionBodyPath.toString() : null); + fileContentStream = new FileInputStream(actionBodyPathStr); + actionBodyString = IOUtils.toString(fileContentStream); + if(logger.isDebugEnabled()){ + logger.debug("\nPolicyDBDao.createPolicy" + + "\n actionBodyPathStr = " + actionBodyPathStr + + "\n actionBodyString = " + actionBodyString); + } + } catch (FileNotFoundException e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught FileNotFoundException on new actionBodyPathStr FileInputStream("+actionBodyPathStr+")"); + throw new IllegalArgumentException("The actionBodyPathStr file path " + actionBodyPathStr + " does not exist" + + "\nEXCEPTION: " + e); + } catch(IOException e2){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Caught IOException on actionBodyPath newIOUtils.toString("+fileContentStream+")"); + throw new IllegalArgumentException("The actionBodyPath file path cannot be read" + fileContentStream + + "\nEXCEPTION: " + e2); + } finally { + IOUtils.closeQuietly(fileContentStream); + } + + if(actionBodyString == null){ + throw new IllegalArgumentException("The file path (" + actionBodyPathStr + ") cannot be read"); } - } catch (FileNotFoundException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught FileNotFoundException on new actionBodyPathStr FileInputStream("+actionBodyPathStr+")",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught FileNotFoundException on new actionBodyPathStr FileInputStream("+actionBodyPathStr+")"); - throw new IllegalArgumentException("The actionBodyPathStr file path " + actionBodyPathStr + " does not exist" - + "\nEXCEPTION: " + e); - } catch(IOException e2){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught IOException on actionBodyPath newIOUtils.toString("+fileContentStream+")",e2); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Caught IOException on actionBodyPath newIOUtils.toString("+fileContentStream+")"); - throw new IllegalArgumentException("The actionBodyPath file path cannot be read" + fileContentStream - + "\nEXCEPTION: " + e2); - } finally { - IOUtils.closeQuietly(fileContentStream); + } else { + actionBodyString = "{}"; } - - if(actionBodyString == null){ - throw new IllegalArgumentException("The file path (" + actionBodyPathStr + ") cannot be read"); + + newActionBodyEntity.setActionBody(actionBodyString); + newActionBodyEntity.setActionBodyName(actionBodyName); + newActionBodyEntity.setModifiedBy("PolicyDBDao.createPolicy()"); + newActionBodyEntity.setDeleted(false); + if(!abupdate){ + newActionBodyEntity.setCreatedBy("PolicyDBDao.createPolicy()"); } - - } else { - actionBodyString = "{}"; + if(logger.isDebugEnabled()){ + logger.debug("\nPolicyDBDao.createPolicy" + + "\n newActionBodyEntity.getActionBody() = " + newActionBodyEntity.getActionBody() + + "\n newActionBodyEntity.getActionBodyName() = " + newActionBodyEntity.getActionBodyName() + + "\n newActionBodyEntity.getModifiedBy() = " + newActionBodyEntity.getModifiedBy() + + "\n newActionBodyEntity.getCreatedBy() = " + newActionBodyEntity.getCreatedBy() + + "\n newActionBodyEntity.isDeleted() = " + newActionBodyEntity.isDeleted() + + "\n FLUSHING to DB"); + } + //push the actionBodyEntity to the DB + em.flush(); + }else{ + //newActionBodyEntity == null + //We have a actionBody in the policy but we found no actionBody in the DB + String msg = "\n\nPolicyDBDao.createPolicy - Incoming Action policy had an " + + "actionBody, but it could not be found in the DB for update." + + "\n policyScope = " + policyScope + + "\n policyName = " + policyName + "\n\n"; + PolicyLogger.error("PolicyDBDao.createPolicy - Incoming Action policy had an actionBody, but it could not be found in the DB for update: policyName = " + policyName); + throw new IllegalArgumentException(msg); } + } - newActionBodyEntity.setActionBody(actionBodyString); - newActionBodyEntity.setActionBodyName(actionBodyName); - newActionBodyEntity.setModifiedBy("PolicyDBDao.createPolicy()"); - newActionBodyEntity.setDeleted(false); - if(!abupdate){ - newActionBodyEntity.setCreatedBy("PolicyDBDao.createPolicy()"); + ConfigurationDataEntity newConfigurationDataEntity; + if(policy.getPolicyType().equals("Config")){ + boolean configUpdate; + if(newPolicyEntity.getConfigurationData() == null){ + newConfigurationDataEntity = new ConfigurationDataEntity(); + configUpdate = false; + } else { + newConfigurationDataEntity = em.find(ConfigurationDataEntity.class, newPolicyEntity.getConfigurationData().getConfigurationDataId()); + configUpdate = true; } - if(logger.isDebugEnabled()){ - logger.debug("\nPolicyDBDao.createPolicy" - + "\n newActionBodyEntity.getActionBody() = " + newActionBodyEntity.getActionBody() - + "\n newActionBodyEntity.getActionBodyName() = " + newActionBodyEntity.getActionBodyName() - + "\n newActionBodyEntity.getModifiedBy() = " + newActionBodyEntity.getModifiedBy() - + "\n newActionBodyEntity.getCreatedBy() = " + newActionBodyEntity.getCreatedBy() - + "\n newActionBodyEntity.isDeleted() = " + newActionBodyEntity.isDeleted() - + "\n FLUSHING to DB"); + + if(newConfigurationDataEntity != null){ + if(!configUpdate){ + em.persist(newConfigurationDataEntity); + } + if(!stringEquals(newConfigurationDataEntity.getConfigurationName(),getConfigFile(configName,policy))){ + newConfigurationDataEntity.setConfigurationName(getConfigFile(configName,policy)); + } + if(newConfigurationDataEntity.getConfigType() == null || !newConfigurationDataEntity.getConfigType().equals(policy.getConfigType())){ + newConfigurationDataEntity.setConfigType(policy.getConfigType()); + } + if(!configUpdate){ + newConfigurationDataEntity.setCreatedBy(username); + } + if(newConfigurationDataEntity.getModifiedBy() == null || !newConfigurationDataEntity.getModifiedBy().equals(username)){ + newConfigurationDataEntity.setModifiedBy(username); + } + if(newConfigurationDataEntity.getDescription() == null || !newConfigurationDataEntity.getDescription().equals("")){ + newConfigurationDataEntity.setDescription(""); + } + if(newConfigurationDataEntity.getConfigBody() == null || newConfigurationDataEntity.getConfigBody().isEmpty() || + (!newConfigurationDataEntity.getConfigBody().equals(policy.getConfigBodyData()))){ + //hopefully one of these won't be null + if(policy.getConfigBodyData() == null || policy.getConfigBodyData().isEmpty()){ + newConfigurationDataEntity.setConfigBody(policy.getJsonBody()); + }else{ + newConfigurationDataEntity.setConfigBody(policy.getConfigBodyData()); + } + } + if(newConfigurationDataEntity.isDeleted() == true){ + newConfigurationDataEntity.setDeleted(false); + } + + em.flush(); + }else{ + //We have a configurationData body in the policy but we found no configurationData body in the DB + String msg = "\n\nPolicyDBDao.createPolicy - Incoming Config policy had a " + + "configurationData body, but it could not be found in the DB for update." + + "\n policyScope = " + policyScope + + "\n policyName = " + policyName + "\n\n"; + PolicyLogger.error("PolicyDBDao.createPolicy - Incoming Config policy had a configurationData body, but it could not be found in the DB for update: policyName = " + policyName); + throw new IllegalArgumentException(msg); } - //push the actionBodyEntity to the DB - em.flush(); - }else{ - //newActionBodyEntity == null - //We have a actionBody in the policy but we found no actionBody in the DB - String msg = "\n\nPolicyDBDao.createPolicy - Incoming Action policy had an " - + "actionBody, but it could not be found in the DB for update." - + "\n policyScope = " + policyScope - + "\n policyName = " + policyName + "\n\n"; - //TODO:EELF Cleanup - Remove logger - //logger.error(msg); - PolicyLogger.error("PolicyDBDao.createPolicy - Incoming Action policy had an actionBody, but it could not be found in the DB for update: policyName = " + policyName); - throw new IllegalArgumentException(msg); - } - } - - ConfigurationDataEntity newConfigurationDataEntity; - if(policy.getPolicyType().equals("Config")){ - boolean configUpdate; - if(newPolicyEntity.getConfigurationData() == null){ - newConfigurationDataEntity = new ConfigurationDataEntity(); - configUpdate = false; + } else { - newConfigurationDataEntity = em.find(ConfigurationDataEntity.class, newPolicyEntity.getConfigurationData().getConfigurationDataId()); - configUpdate = true; + newConfigurationDataEntity = null; + } + if(!update){ + em.persist(newPolicyEntity); } - if(newConfigurationDataEntity != null){ - if(!configUpdate){ - em.persist(newConfigurationDataEntity); - } - //ConfigPolicy configPolicy = (ConfigPolicy)policy; - if(!stringEquals(newConfigurationDataEntity.getConfigurationName(),getConfigFile(policyName,policyScope,policy))){ - newConfigurationDataEntity.setConfigurationName(getConfigFile(policyName,policyScope,policy)); - } - if(newConfigurationDataEntity.getConfigType() == null || !newConfigurationDataEntity.getConfigType().equals(policy.getConfigType())){ - newConfigurationDataEntity.setConfigType(policy.getConfigType()); - } - if(!configUpdate){ - newConfigurationDataEntity.setCreatedBy(username); - } - if(newConfigurationDataEntity.getModifiedBy() == null || !newConfigurationDataEntity.getModifiedBy().equals(username)){ - newConfigurationDataEntity.setModifiedBy(username); - } - if(newConfigurationDataEntity.getDescription() == null || !newConfigurationDataEntity.getDescription().equals("")){ - newConfigurationDataEntity.setDescription(""); - } - if(newConfigurationDataEntity.getConfigBody() == null || newConfigurationDataEntity.getConfigBody().isEmpty() || - (!newConfigurationDataEntity.getConfigBody().equals(policy.getConfigBodyData()))){ - //hopefully one of these won't be null - if(policy.getConfigBodyData() == null){ - newConfigurationDataEntity.setConfigBody(policy.getJsonBody()); - }else{ - newConfigurationDataEntity.setConfigBody(policy.getConfigBodyData()); - } - } - if(newConfigurationDataEntity.isDeleted() == true){ - newConfigurationDataEntity.setDeleted(false); - } + policyId = newPolicyEntity.getPolicyId(); - em.flush(); - }else{//newConfigurationDataEntity == null - //We have a configurationData body in the policy but we found no configurationData body - //in the DB - String msg = "\n\nPolicyDBDao.createPolicy - Incoming Config policy had a " - + "configurationData body, but it could not be found in the DB for update." - + "\n policyScope = " + policyScope - + "\n policyName = " + policyName + "\n\n"; - //TODO:EELF Cleanup - Remove logger - //logger.error(msg); - PolicyLogger.error("PolicyDBDao.createPolicy - Incoming Config policy had a configurationData body, but it could not be found in the DB for update: policyName = " + policyName); - throw new IllegalArgumentException(msg); - } - - } else { - newConfigurationDataEntity = null; - } - if(!update){ - em.persist(newPolicyEntity); - } - - policyId = newPolicyEntity.getPolicyId(); - //policy version is now part of policy name - /* - if(update){ - try{ - String versionString = evaluateXPath("Policy/@Version", policyDataString); - int versionNum = Integer.parseInt(versionString); - if(versionNum < 1){ - throw new NumberFormatException(); - } - newPolicyEntity.setPolicyVersion(versionNum); - } catch(Exception e){ - if(newPolicyEntity.isDeleted()){ - newPolicyEntity.resetPolicyVersion(); - } else { - newPolicyEntity.advancePolicyVersion(); - } + if(!stringEquals(newPolicyEntity.getPolicyName(),policyName)){ + newPolicyEntity.setPolicyName(policyName); + } + if(!stringEquals(newPolicyEntity.getCreatedBy(),username)){ + newPolicyEntity.setCreatedBy(username); + } + if(!stringEquals(newPolicyEntity.getDescription(),policy.getPolicyDescription())){ + newPolicyEntity.setDescription(policy.getPolicyDescription()); } - + if(!stringEquals(newPolicyEntity.getModifiedBy(),username)){ + newPolicyEntity.setModifiedBy(username); + } + if(!stringEquals(newPolicyEntity.getPolicyData(),policyDataString)){ + newPolicyEntity.setPolicyData(policyDataString); + } + if(!stringEquals(newPolicyEntity.getScope(),policyScope)){ + newPolicyEntity.setScope(policyScope); + } + if(newPolicyEntity.isDeleted() == true){ + newPolicyEntity.setDeleted(false); + } + newPolicyEntity.setConfigurationData(newConfigurationDataEntity); + newPolicyEntity.setActionBodyEntity(newActionBodyEntity); + - } - */ - if(!stringEquals(newPolicyEntity.getPolicyName(),policyName)){ - newPolicyEntity.setPolicyName(policyName); - } - if(!stringEquals(newPolicyEntity.getCreatedBy(),username)){ - newPolicyEntity.setCreatedBy(username); - } - if(!stringEquals(newPolicyEntity.getDescription(),policy.getPolicyDescription())){ - newPolicyEntity.setDescription(policy.getPolicyDescription()); - } - if(!stringEquals(newPolicyEntity.getModifiedBy(),username)){ - newPolicyEntity.setModifiedBy(username); - } - if(!stringEquals(newPolicyEntity.getPolicyData(),policyDataString)){ - newPolicyEntity.setPolicyData(policyDataString); - } - if(!stringEquals(newPolicyEntity.getScope(),policyScope)){ - newPolicyEntity.setScope(policyScope); - } - if(newPolicyEntity.isDeleted() == true){ - newPolicyEntity.setDeleted(false); - } - newPolicyEntity.setConfigurationData(newConfigurationDataEntity); - newPolicyEntity.setActionBodyEntity(newActionBodyEntity); - - em.flush(); this.policyId = newPolicyEntity.getPolicyId(); } - + return; } @@ -2586,7 +2467,7 @@ public class PolicyDBDao { synchronized(emLock){ checkBeforeOperationRun(true); - //check if group exists + //check if group exists String policyId; Query policyQuery; if(!isNullOrEmpty(policyName,scope)){ @@ -2599,45 +2480,36 @@ public class PolicyDBDao { policyQuery = em.createNamedQuery("PolicyEntity.FindById"); policyQuery.setParameter("id", policyId); } - List<?> policyQueryList; - try{ - policyQueryList = policyQuery.getResultList(); - }catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to get policy with policyQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get policy with policyQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get policy "+policyId); - } - if(policyQueryList.size() < 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Policy does not exist with id "+policyId); - PolicyLogger.error("Policy does not exist with id "+policyId); - throw new PersistenceException("Group policy is being added to does not exist with id "+policyId); - } else if(policyQueryList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one policy with the id "+policyId+" were found in the database"); - PolicyLogger.error("Somehow, more than one policy with the id "+policyId+" were found in the database"); - throw new PersistenceException("Somehow, more than one policy with the id "+policyId+" were found in the database"); - } + List<?> policyQueryList; + try{ + policyQueryList = policyQuery.getResultList(); + }catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get policy with policyQuery.getResultList()"); + throw new PersistenceException("Query failed trying to get policy "+policyId); + } + if(policyQueryList.size() < 1){ + PolicyLogger.error("Policy does not exist with id "+policyId); + throw new PersistenceException("Group policy is being added to does not exist with id "+policyId); + } else if(policyQueryList.size() > 1){ + PolicyLogger.error("Somehow, more than one policy with the id "+policyId+" were found in the database"); + throw new PersistenceException("Somehow, more than one policy with the id "+policyId+" were found in the database"); + } return (PolicyEntity)policyQueryList.get(0); } } - + @Override public void renamePolicy(String oldPath, String newPath,String username){ String[] oldPolicy = getScopeAndNameAndType(oldPath); String[] newPolicy = getScopeAndNameAndType(newPath); if(oldPolicy == null || newPolicy == null){ - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Could not parse one or more of the path names: " - //+oldPath+", "+newPath); PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW+"Could not parse one or more of the path names: " +oldPath+", "+newPath); throw new IllegalArgumentException("Could not parse one or more of the path names"); } synchronized (emLock) { checkBeforeOperationRun(); - + PolicyEntity existingPolicy; boolean existingPolicyDeleted = false; List<?> groups = null; @@ -2651,15 +2523,14 @@ public class PolicyDBDao { throw new IllegalArgumentException("The policy named "+existingPolicy.getPolicyName()+" already exists, cannot rename policy: "+newPolicy); } else if(existingPolicy != null && existingPolicy.isDeleted()){ try{ - Query getGroups = em.createQuery("SELECT g FROM GroupEntity g JOIN g.policies p WHERE p.policyId=:pid"); + Query getGroups = em.createQuery("SELECT g FROM GroupEntity g JOIN g.policies p WHERE p.policyId=:pid"); - getGroups.setParameter("pid", existingPolicy.getPolicyId()); - groups = getGroups.getResultList(); + getGroups.setParameter("pid", existingPolicy.getPolicyId()); + groups = getGroups.getResultList(); }catch(Exception e){ groups = new LinkedList<GroupEntity>(); } for(Object o : groups){ - GroupEntity group = (GroupEntity)o; group.removePolicyFromGroup(existingPolicy); } @@ -2669,8 +2540,8 @@ public class PolicyDBDao { logger.error("Error while removing the policy from groups: "+existingPolicy.getPolicyName()); } try{ - em.remove(existingPolicy); - em.flush(); + em.remove(existingPolicy); + em.flush(); }catch(Exception e){ logger.error("Could not remove the existing deleted policy: "+existingPolicy.getPolicyName()); } @@ -2678,78 +2549,70 @@ public class PolicyDBDao { //create the new policy //for each of the groups, add the new policy } - - PolicyEntity policyToRename; - try{ - policyToRename = getPolicy(oldPolicy[1],oldPolicy[0]); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Could not get policy record to rename: " - //+oldPolicy[1],e); - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "PolicyDBDao", "Could not get policy record to rename: " - +oldPolicy[1]); - throw new PersistenceException("Could not get policy record to rename"); - } - String policyDataString = null; - InputStream fileContentStream = null; - String policyFilePath = Paths.get(oldPath).toAbsolutePath().toString(); - //I want to try the old path first, then if it doesn't work, try the new path - for(int i=0;i<2;i++){ - try { - fileContentStream = new FileInputStream(policyFilePath); - policyDataString = IOUtils.toString(fileContentStream); - } catch (FileNotFoundException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught FileNotFoundException on new FileInputStream("+policyFilePath+")",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught FileNotFoundException on new FileInputStream("+policyFilePath+")"); - //if we can't find the oldPath, we'll try the new path - if(i == 0){ - policyFilePath = Paths.get(newPath).toAbsolutePath().toString(); - continue; - } - throw new IllegalArgumentException("The file path does not exist"); - } catch(IOException e2){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught IOException on newIOUtils.toString("+fileContentStream+")",e2); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Caught IOException on newIOUtils.toString("+fileContentStream+")"); - throw new IllegalArgumentException("The file path cannot be read"); - } finally { - IOUtils.closeQuietly(fileContentStream); - } - if(policyDataString == null){ - throw new IllegalArgumentException("The file path cannot be read"); - } - //escape the loop - i=2; - } - policyToRename.setPolicyName(newPolicy[1]); - policyToRename.setPolicyData(policyDataString); - policyToRename.setScope(newPolicy[0]); - policyToRename.setModifiedBy(username); - if(policyToRename.getConfigurationData() != null){ - //String configType = getPolicySubType(policyToRename.getConfigurationData().getConfigurationName()); - String configType = policyToRename.getConfigurationData().getConfigType(); - policyToRename.getConfigurationData().setConfigurationName(getConfigFile(newPolicy[1], newPolicy[0], configType)); - policyToRename.getConfigurationData().setModifiedBy(username); - } - if(policyToRename.getActionBodyEntity() != null){ - String newActionName = newPolicy[0]+"."+removeFileExtension(newPolicy[1])+".json"; - policyToRename.getActionBodyEntity().setActionBodyName(newActionName); - policyToRename.getActionBodyEntity().setModifiedBy(username); - } - if(existingPolicyDeleted){ - for(Object o : groups){ - - GroupEntity group = (GroupEntity)o; - group.addPolicyToGroup(policyToRename); + + PolicyEntity policyToRename; + try{ + policyToRename = getPolicy(oldPolicy[1],oldPolicy[0]); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "PolicyDBDao", "Could not get policy record to rename: " + +oldPolicy[1]); + throw new PersistenceException("Could not get policy record to rename"); + } + String policyDataString = null; + InputStream fileContentStream = null; + String policyFilePath = Paths.get(oldPath).toAbsolutePath().toString(); + //I want to try the old path first, then if it doesn't work, try the new path + for(int i=0;i<2;i++){ + try { + fileContentStream = new FileInputStream(policyFilePath); + policyDataString = IOUtils.toString(fileContentStream); + } catch (FileNotFoundException e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught FileNotFoundException on new FileInputStream("+policyFilePath+")"); + //if we can't find the oldPath, we'll try the new path + if(i == 0){ + policyFilePath = Paths.get(newPath).toAbsolutePath().toString(); + continue; + } + throw new IllegalArgumentException("The file path does not exist"); + } catch(IOException e2){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Caught IOException on newIOUtils.toString("+fileContentStream+")"); + throw new IllegalArgumentException("The file path cannot be read"); + } finally { + IOUtils.closeQuietly(fileContentStream); + } + if(policyDataString == null){ + throw new IllegalArgumentException("The file path cannot be read"); + } + //escape the loop + i=2; + } + policyToRename.setPolicyName(newPolicy[1]); + policyToRename.setPolicyData(policyDataString); + policyToRename.setScope(newPolicy[0]); + policyToRename.setModifiedBy(username); + if(policyToRename.getConfigurationData() != null){ + String configType = policyToRename.getConfigurationData().getConfigType(); + policyToRename.getConfigurationData().setConfigurationName(getConfigFile(newPolicy[1], configType)); + policyToRename.getConfigurationData().setModifiedBy(username); + } + if(policyToRename.getActionBodyEntity() != null){ + String newActionName = newPolicy[0]+"."+removeFileExtension(newPolicy[1])+".json"; + policyToRename.getActionBodyEntity().setActionBodyName(newActionName); + policyToRename.getActionBodyEntity().setModifiedBy(username); + } + if(existingPolicyDeleted){ + for(Object o : groups){ + + GroupEntity group = (GroupEntity)o; + group.addPolicyToGroup(policyToRename); + } } - } - em.flush(); - this.policyId = policyToRename.getPolicyId(); - this.newGroupId = oldPath; + em.flush(); + this.policyId = policyToRename.getPolicyId(); + this.newGroupId = oldPath; } } - + @Override public GroupEntity getGroup(long groupKey){ logger.debug("getGroup(int groupKey) as getGroup("+groupKey+") called"); @@ -2758,33 +2621,27 @@ public class PolicyDBDao { } synchronized(emLock){ checkBeforeOperationRun(true); - //check if group exists - Query groupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupKey=:groupKey"); - groupQuery.setParameter("groupKey", groupKey); - List<?> groupQueryList; - try{ - groupQueryList = groupQuery.getResultList(); - }catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to get group with groupQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get group with groupQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get group "+groupKey); - } - if(groupQueryList.size() < 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Group does not exist with groupKey "+groupKey); - PolicyLogger.error("Group does not exist with groupKey "+groupKey); - throw new PersistenceException("Group does not exist with groupKey "+groupKey); - } else if(groupQueryList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one group with the groupKey "+groupKey+" were found in the database"); - PolicyLogger.error("Somehow, more than one group with the groupKey "+groupKey+" were found in the database"); - throw new PersistenceException("Somehow, more than one group with the groupKey "+groupKey+" were found in the database"); - } + //check if group exists + Query groupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupKey=:groupKey"); + groupQuery.setParameter("groupKey", groupKey); + List<?> groupQueryList; + try{ + groupQueryList = groupQuery.getResultList(); + }catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get group with groupQuery.getResultList()"); + throw new PersistenceException("Query failed trying to get group "+groupKey); + } + if(groupQueryList.size() < 1){ + PolicyLogger.error("Group does not exist with groupKey "+groupKey); + throw new PersistenceException("Group does not exist with groupKey "+groupKey); + } else if(groupQueryList.size() > 1){ + PolicyLogger.error("Somehow, more than one group with the groupKey "+groupKey+" were found in the database"); + throw new PersistenceException("Somehow, more than one group with the groupKey "+groupKey+" were found in the database"); + } return (GroupEntity)groupQueryList.get(0); } } - + @Override public GroupEntity getGroup(String groupId){ logger.debug("getGroup(String groupId) as getGroup("+groupId+") called"); @@ -2793,29 +2650,23 @@ public class PolicyDBDao { } synchronized(emLock){ checkBeforeOperationRun(true); - //check if group exists - Query groupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId"); - groupQuery.setParameter("groupId", groupId); - List<?> groupQueryList; - try{ - groupQueryList = groupQuery.getResultList(); - }catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to get group with groupQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get group with groupQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get group "+groupId); - } - if(groupQueryList.size() < 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Group does not exist with id "+groupId); - PolicyLogger.error("Group does not exist with id "+groupId); - throw new PersistenceException("Group does not exist with id "+groupId); - } else if(groupQueryList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one group with the id "+groupId+" were found in the database"); - PolicyLogger.error("Somehow, more than one group with the id "+groupId+" were found in the database"); - throw new PersistenceException("Somehow, more than one group with the id "+groupId+" were found in the database"); - } + //check if group exists + Query groupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId"); + groupQuery.setParameter("groupId", groupId); + List<?> groupQueryList; + try{ + groupQueryList = groupQuery.getResultList(); + }catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get group with groupQuery.getResultList()"); + throw new PersistenceException("Query failed trying to get group "+groupId); + } + if(groupQueryList.size() < 1){ + PolicyLogger.error("Group does not exist with id "+groupId); + throw new PersistenceException("Group does not exist with id "+groupId); + } else if(groupQueryList.size() > 1){ + PolicyLogger.error("Somehow, more than one group with the id "+groupId+" were found in the database"); + throw new PersistenceException("Somehow, more than one group with the id "+groupId+" were found in the database"); + } return (GroupEntity)groupQueryList.get(0); } } @@ -2840,51 +2691,37 @@ public class PolicyDBDao { } synchronized(emLock){ checkBeforeOperationRun(true); - //check if group exists - Query pdpQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpKey=:pdpKey"); - pdpQuery.setParameter("pdpKey", pdpKey); - List<?> pdpQueryList; - try{ - pdpQueryList = pdpQuery.getResultList(); - }catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to get pdp with pdpQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get pdp with pdpQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get pdp "+pdpKey); - } - if(pdpQueryList.size() < 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Pdp does not exist with pdpKey "+pdpKey); - PolicyLogger.error("Pdp does not exist with pdpKey "+pdpKey); - throw new PersistenceException("Pdp does not exist with pdpKey "+pdpKey); - } else if(pdpQueryList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one pdp with the pdpKey "+pdpKey+" were found in the database"); - PolicyLogger.error("Somehow, more than one pdp with the pdpKey "+pdpKey+" were found in the database"); - throw new PersistenceException("Somehow, more than one pdp with the pdpKey "+pdpKey+" were found in the database"); - } + //check if group exists + Query pdpQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpKey=:pdpKey"); + pdpQuery.setParameter("pdpKey", pdpKey); + List<?> pdpQueryList; + try{ + pdpQueryList = pdpQuery.getResultList(); + }catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get pdp with pdpQuery.getResultList()"); + throw new PersistenceException("Query failed trying to get pdp "+pdpKey); + } + if(pdpQueryList.size() < 1){ + PolicyLogger.error("Pdp does not exist with pdpKey "+pdpKey); + throw new PersistenceException("Pdp does not exist with pdpKey "+pdpKey); + } else if(pdpQueryList.size() > 1){ + PolicyLogger.error("Somehow, more than one pdp with the pdpKey "+pdpKey+" were found in the database"); + throw new PersistenceException("Somehow, more than one pdp with the pdpKey "+pdpKey+" were found in the database"); + } return (PdpEntity)pdpQueryList.get(0); } } - //FIXME: maybe this should be boolean public void deletePolicy(String policyToDeletes){ synchronized(emLock){ -// if(isTransactionOpen()){ -// logger.error("A transaction is already open which has not been committed"); -// throw new IllegalStateException("A transaction is already open which has not been committed"); -// } checkBeforeOperationRun(); - logger.debug("deletePolicy(String policyToDeletes) as deletePolicy("+policyToDeletes+") called"); - String[] scopeNameAndType = getScopeAndNameAndType(policyToDeletes); - if(scopeNameAndType == null){ - throw new IllegalArgumentException("Could not parse file path"); - } - String realScope = scopeNameAndType[0]; - String realName = scopeNameAndType[1]; -// if(isTransactionOpen()){ -// throw new IllegalStateException("A transaction is already open which has not been committed"); -// } + logger.debug("deletePolicy(String policyToDeletes) as deletePolicy("+policyToDeletes+") called"); + String[] scopeNameAndType = getScopeAndNameAndType(policyToDeletes); + if(scopeNameAndType == null){ + throw new IllegalArgumentException("Could not parse file path"); + } + String realScope = scopeNameAndType[0]; + String realName = scopeNameAndType[1]; Query deletePolicyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:policyName AND p.deleted=:deleted"); deletePolicyQuery.setParameter("scope",realScope); deletePolicyQuery.setParameter("policyName", realName); @@ -2894,12 +2731,9 @@ public class PolicyDBDao { logger.warn("The policy being deleted could not be found."); return; } else if(deletePolicyQueryList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one policy with the same scope, name, and deleted status were found in the database"); PolicyLogger.error("Somehow, more than one policy with the same scope, name, and deleted status were found in the database"); throw new PersistenceException("Somehow, more than one policy with the same scope, name, and deleted status were found in the database"); } else { - //em.getTransaction().begin(); PolicyEntity policyToDelete = (PolicyEntity)deletePolicyQueryList.get(0); policyToDelete.setDeleted(true); if(policyToDelete.getConfigurationData() != null){ @@ -2914,21 +2748,21 @@ public class PolicyDBDao { abe.setDeleted(true); } } - + em.flush(); this.policyId = policyToDelete.getPolicyId(); - + } } } - + @Override public boolean isTransactionOpen() { logger.debug("isTransactionOpen() as isTransactionOpen() called"); synchronized(emLock){ - return em.isOpen() && em.getTransaction().isActive(); + return em.isOpen() && em.getTransaction().isActive(); } } @@ -2938,9 +2772,6 @@ public class PolicyDBDao { String[] oldPolicyData = getScopeAndNameAndType(oldPolicyPath); String[] newPolicyData = getScopeAndNameAndType(newPolicyPath); if(oldPolicyData == null || newPolicyData == null){ - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Could not parse one or more of the path names: " - //+oldPolicyPath+", "+newPolicyPath); PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW+"Could not parse one or more of the path names: " +oldPolicyPath+", "+newPolicyPath); throw new IllegalArgumentException("Could not parse the oldPolicyPath or newPolicyPath"); @@ -2949,12 +2780,9 @@ public class PolicyDBDao { try{ oldPolicy = getPolicy(oldPolicyData[1],oldPolicyData[0]); }catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Could not get policy record to clone: " - //+oldPolicyData[1],e); PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "PolicyDBDao", "Could not get policy record to clone: " +oldPolicyData[1]); - throw new PersistenceException("Could not get policy record to clone"); + throw new PersistenceException("Could not get policy record to clone"); } ConfigurationDataEntity clonedConfig = null; if(oldPolicy.getConfigurationData() != null){ @@ -2963,7 +2791,7 @@ public class PolicyDBDao { clonedConfig.setConfigBody(oldPolicy.getConfigurationData().getConfigBody()); clonedConfig.setConfigType(oldPolicy.getConfigurationData().getConfigType()); clonedConfig.setCreatedBy(username); - clonedConfig.setConfigurationName(getConfigFile(newPolicyData[1], newPolicyData[0], oldPolicy.getConfigurationData().getConfigType())); + clonedConfig.setConfigurationName(getConfigFile(newPolicyData[1], oldPolicy.getConfigurationData().getConfigType())); clonedConfig.setDescription(oldPolicy.getConfigurationData().getDescription()); clonedConfig.setModifiedBy(username); em.flush(); @@ -2978,10 +2806,10 @@ public class PolicyDBDao { clonedAction.setModifiedBy(username); em.flush(); } - - + + } - + @Override public void createPolicy(String filePath, String username) { logger.debug("createPolicy(String filePath, String username) as createPolicy("+filePath+","+username+") called"); @@ -3001,8 +2829,6 @@ public class PolicyDBDao { policyName = stripPolicyName(policyName); }catch(IllegalArgumentException e){ if(scopeAndName[2].equals("Config")){ - //TODO:EELF Cleanup - Remove logger - //logger.error(e.getMessage()); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Exception calling stripPolicyName with policy name: "+policyName); throw new IllegalArgumentException(e.getMessage(),e); } else { @@ -3016,13 +2842,9 @@ public class PolicyDBDao { fileContentStream = new FileInputStream(filePath); policyDataString = IOUtils.toString(fileContentStream); } catch (FileNotFoundException e) { - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught FileNotFoundException on new FileInputStream("+filePath+")",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught FileNotFoundException on new FileInputStream("+filePath+")"); throw new IllegalArgumentException("The file path does not exist"); } catch(IOException e2){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught IOException on newIOUtils.toString("+fileContentStream+")",e2); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, "PolicyDBDao", "Caught IOException on newIOUtils.toString("+fileContentStream+")"); throw new IllegalArgumentException("The file path cannot be read"); } finally { @@ -3032,10 +2854,10 @@ public class PolicyDBDao { throw new IllegalArgumentException("The file path cannot be read"); } try{ - String policyDescription = getElementFromXMLString("/Description", policyDataString); - if(policyDescription != null){ - policy.setPolicyDescription(policyDescription); - } + String policyDescription = getElementFromXMLString("/Description", policyDataString); + if(policyDescription != null){ + policy.setPolicyDescription(policyDescription); + } } catch(Exception e){ logger.warn("Could not get description from the policy file"); } @@ -3043,13 +2865,11 @@ public class PolicyDBDao { //this method is not used for config, since there is no way to get config info (could be modified to) String configPath; try{ - configPath = evaluateXPath("/Policy/Rule/AdviceExpressions/AdviceExpression[contains(@AdviceId,'ID')]/AttributeAssignmentExpression[@AttributeId='URLID']/AttributeValue/text()", policyDataString); - if(configPath == null){ - throw new NullPointerException("configPath is null"); - } + configPath = evaluateXPath("/Policy/Rule/AdviceExpressions/AdviceExpression[contains(@AdviceId,'ID')]/AttributeAssignmentExpression[@AttributeId='URLID']/AttributeValue/text()", policyDataString); + if(configPath == null){ + throw new NullPointerException("configPath is null"); + } } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Could not get config file path from policy file",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not get config file path from policy file"); throw new IllegalArgumentException("Could not get config file path from policy file"); } @@ -3063,6 +2883,7 @@ public class PolicyDBDao { } createPolicy(policy,username,scopeAndName[0],scopeAndName[1],policyDataString); } + private String processConfigPath(String configPath){ String webappsPath = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS); if(webappsPath == null){ @@ -3072,7 +2893,7 @@ public class PolicyDBDao { configPath = configPath.replace("$URL", webappsPath); //make sure the correct slashes are in try{ - configPath = Paths.get(configPath).toString(); + configPath = Paths.get(configPath).toString(); } catch(InvalidPathException e){ logger.error("Invalid config path: "+configPath); throw new IllegalArgumentException("Invalid config path: "+configPath); @@ -3099,12 +2920,11 @@ public class PolicyDBDao { } return configDataString; } - + @Override public void createPolicy(Policy policy, String username){ logger.debug("createPolicy(PolicyRestAdapter policy, String username) as createPolicy("+policy+","+username+") called"); - String policyScope = computeScope(policy.policyAdapter.getParentPath(),policy.policyAdapter.getUserGitPath()); - + String policyScope = policy.policyAdapter.getDomainDir().replace(File.separator, "."); //Does not need to be XACMLPolicyWriterWithPapNotify since it is already in the PAP //and this transaction is intercepted up stream. InputStream policyXmlStream = XACMLPolicyWriter.getXmlAsInputStream((PolicyType)policy.getCorrectPolicyDataObject()); @@ -3113,8 +2933,6 @@ public class PolicyDBDao { policyDataString = IOUtils.toString(policyXmlStream); } catch (IOException e) { policyDataString = "could not read"; - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught IOException on IOUtils.toString("+policyXmlStream+")",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught IOException on IOUtils.toString("+policyXmlStream+")"); throw new IllegalArgumentException("Cannot parse the policy xml from the PolicyRestAdapter."); } @@ -3125,10 +2943,10 @@ public class PolicyDBDao { } else if (policy.policyAdapter.getPolicyType().equalsIgnoreCase("Action")) { configPath = evaluateXPath("/Policy/Rule/ObligationExpressions/ObligationExpression[contains(@ObligationId, " +policy.policyAdapter.getActionAttribute()+ ")]/AttributeAssignmentExpression[@AttributeId='body']/AttributeValue/text()", policyDataString); } - + String prefix = null; if (policy.policyAdapter.getPolicyType().equalsIgnoreCase("Config")) { - + prefix = configPath.substring(configPath.indexOf(policyScope+".")+policyScope.concat(".").length(), configPath.indexOf(policy.policyAdapter.getPolicyName())); if(isNullOrEmpty(policy.policyAdapter.getConfigBodyData())){ String configData = ""; @@ -3145,25 +2963,18 @@ public class PolicyDBDao { } policy.policyAdapter.setConfigBodyData(configData); } - } else if (policy.policyAdapter.getPolicyType().equalsIgnoreCase("Action")) { - prefix = "Action_"; - } else if (policy.policyAdapter.getPolicyType().equalsIgnoreCase("Decision")) { - prefix = "Decision_"; } - + if(!(policy.policyAdapter.getData() instanceof PolicyType)){ - //TODO:EELF Cleanup - Remove logger - //logger.error("The data field is not an instance of PolicyType"); PolicyLogger.error("The data field is not an instance of PolicyType"); throw new IllegalArgumentException("The data field is not an instance of PolicyType"); } - String finalName = prefix+policy.policyAdapter.getPolicyName()+"."+((PolicyType)policy.policyAdapter.getData()).getVersion()+".xml"; + String finalName = policyScope + "." + prefix+policy.policyAdapter.getPolicyName()+"."+((PolicyType)policy.policyAdapter.getData()).getVersion()+".xml"; if(policy.policyAdapter.getConfigType() == null || policy.policyAdapter.getConfigType().equals("")){ - //we need to make it //get the config file extension String ext = ""; if (configPath != null) { @@ -3171,7 +2982,7 @@ public class PolicyDBDao { ext = configPath.substring(configPath.lastIndexOf('.'), configPath.length());; } } - + if(ext.contains("txt")){ policy.policyAdapter.setConfigType(OTHER_CONFIG); } else if(ext.contains("json")){ @@ -3187,9 +2998,9 @@ public class PolicyDBDao { } } createPolicy(policy.policyAdapter, username, policyScope,finalName,policyDataString); - + } - + @Override public void close(){ synchronized(emLock){ @@ -3210,11 +3021,6 @@ public class PolicyDBDao { @Override public void createGroup(String groupId, String groupName, String groupDescription, String username) { logger.debug("deletePolicy(String policyToDeletes) as createGroup("+groupId+", "+groupName+", "+groupDescription+") called"); -// if(isTransactionOpen()){ -// logger.error("A transaction is already open which has not been committed"); -// throw new IllegalStateException("A transaction is already open which has not been committed"); -// } - //parameter check if(isNullOrEmpty(groupId, groupName, username)){ throw new IllegalArgumentException("groupId, groupName, and username must not be null or empty"); } @@ -3224,47 +3030,36 @@ public class PolicyDBDao { synchronized(emLock){ checkBeforeOperationRun(); - Query checkGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); - checkGroupQuery.setParameter("groupId", groupId); - checkGroupQuery.setParameter("deleted", false); - List<?> checkGroupQueryList; - try{ - checkGroupQueryList = checkGroupQuery.getResultList(); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception on checkGroupQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on checkGroupQuery.getResultList()"); - throw new PersistenceException("Query failed trying to check for existing group"); - } - if(checkGroupQueryList.size() > 0){ - //TODO:EELF Cleanup - Remove logger - //logger.error("The group being added already exists with id "+groupId); - PolicyLogger.error("The group being added already exists with id "+groupId); - throw new PersistenceException("The group being added already exists with id "+groupId); - } - //em.getTransaction().begin(); - GroupEntity newGroup = new GroupEntity(); - em.persist(newGroup); - newGroup.setCreatedBy(username); - newGroup.setModifiedBy(username); - newGroup.setGroupName(groupName); - newGroup.setGroupId(groupId); - newGroup.setDescription(groupDescription); - - em.flush(); - this.groupId = newGroup.getGroupKey(); + Query checkGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); + checkGroupQuery.setParameter("groupId", groupId); + checkGroupQuery.setParameter("deleted", false); + List<?> checkGroupQueryList; + try{ + checkGroupQueryList = checkGroupQuery.getResultList(); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on checkGroupQuery.getResultList()"); + throw new PersistenceException("Query failed trying to check for existing group"); + } + if(checkGroupQueryList.size() > 0){ + PolicyLogger.error("The group being added already exists with id "+groupId); + throw new PersistenceException("The group being added already exists with id "+groupId); + } + GroupEntity newGroup = new GroupEntity(); + em.persist(newGroup); + newGroup.setCreatedBy(username); + newGroup.setModifiedBy(username); + newGroup.setGroupName(groupName); + newGroup.setGroupId(groupId); + newGroup.setDescription(groupDescription); + + em.flush(); + this.groupId = newGroup.getGroupKey(); } } @Override public void updateGroup(EcompPDPGroup group, String username){ logger.debug("updateGroup(PDPGroup group) as updateGroup("+group+","+username+") called"); -// if(isTransactionOpen()){ -// logger.error("A transaction is already open which has not been committed"); -// throw new IllegalStateException("A transaction is already open which has not been committed"); -// } - - //parameter check if(group == null){ throw new IllegalArgumentException("PDPGroup group must not be null"); } @@ -3274,103 +3069,86 @@ public class PolicyDBDao { synchronized(emLock){ checkBeforeOperationRun(); - Query getGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); - getGroupQuery.setParameter("groupId", group.getId()); - getGroupQuery.setParameter("deleted", false); - List<?> getGroupQueryList; - try{ - getGroupQueryList = getGroupQuery.getResultList(); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception on getGroupQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on getGroupQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get group "+group.getId()+" for editing"); - } - if(getGroupQueryList.size() < 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("The group cannot be found to update with id "+group.getId()); - PolicyLogger.error("The group cannot be found to update with id "+group.getId()); - throw new PersistenceException("The group cannot be found to update with id "+group.getId()); - } else if(getGroupQueryList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database"); - PolicyLogger.error("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database"); - throw new PersistenceException("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database"); - } - //em.getTransaction().begin(); - GroupEntity groupToUpdate = (GroupEntity)getGroupQueryList.get(0); - if(!stringEquals(groupToUpdate.getModifiedBy(), username)){ - groupToUpdate.setModifiedBy(username); - } - if(group.getDescription() != null && !stringEquals(group.getDescription(),groupToUpdate.getDescription())){ - groupToUpdate.setDescription(group.getDescription()); - } - //let's find out what policies have been deleted - StdPDPGroup oldGroup = null; - try { - oldGroup = (StdPDPGroup) papEngine.getGroup(group.getId()); - } catch (PAPException e1) { - //TODO:EELF Cleanup - Remove logger - //logger.error("We cannot get the group from the papEngine to delete policies",e1); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "We cannot get the group from the papEngine to delete policies"); - } - if(oldGroup == null){ - //TODO:EELF Cleanup - Remove logger - //logger.error("We cannot get the group from the papEngine to delete policies"); - PolicyLogger.error("We cannot get the group from the papEngine to delete policies"); - } else { - - Set<String> newPolicySet = new HashSet<String>(group.getPolicies().size()); - //a multiple of n runtime is faster than n^2, so I am using a hashset to do the comparison - for(PDPPolicy pol: group.getPolicies()){ - newPolicySet.add(pol.getId()); - } - for(PDPPolicy pol : oldGroup.getPolicies()){ - //should be fast since getPolicies uses a HashSet in StdPDPGroup - if(!newPolicySet.contains(pol.getId())){ - String[] scopeAndName = getNameScopeAndVersionFromPdpPolicy(pol.getId()); - PolicyEntity policyToDelete; - try{ - policyToDelete = getPolicy(scopeAndName[0],scopeAndName[1]); - }catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Could not get policy to remove: "+pol.getId(),e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not get policy to remove: "+pol.getId()); - throw new PersistenceException("Could not get policy to remove: "+pol.getId()); - } - groupToUpdate.getPolicies().remove(policyToDelete); - - } - } - } - if(group.getName() != null && !stringEquals(group.getName(),groupToUpdate.getgroupName())){ - //we need to check if the new id exists in the database - String newGroupId = createNewPDPGroupId(group.getName()); - Query checkGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); - checkGroupQuery.setParameter("groupId", newGroupId); - checkGroupQuery.setParameter("deleted", false); - List<?> checkGroupQueryList; + Query getGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); + getGroupQuery.setParameter("groupId", group.getId()); + getGroupQuery.setParameter("deleted", false); + List<?> getGroupQueryList; try{ - checkGroupQueryList = checkGroupQuery.getResultList(); + getGroupQueryList = getGroupQuery.getResultList(); } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception on checkGroupQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on checkGroupQuery.getResultList()"); - throw new PersistenceException("Query failed trying to check for existing group"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on getGroupQuery.getResultList()"); + throw new PersistenceException("Query failed trying to get group "+group.getId()+" for editing"); } - if(checkGroupQueryList.size() != 0){ - //TODO:EELF Cleanup - Remove logger - //logger.error("The new group name already exists, group id "+newGroupId); - PolicyLogger.error("The new group name already exists, group id "+newGroupId); - throw new PersistenceException("The new group name already exists, group id "+newGroupId); + if(getGroupQueryList.size() < 1){ + PolicyLogger.error("The group cannot be found to update with id "+group.getId()); + throw new PersistenceException("The group cannot be found to update with id "+group.getId()); + } else if(getGroupQueryList.size() > 1){ + PolicyLogger.error("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database"); + throw new PersistenceException("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database"); } - groupToUpdate.setGroupId(newGroupId); - groupToUpdate.setGroupName(group.getName()); - this.newGroupId = group.getId(); - } - - em.flush(); - this.groupId = groupToUpdate.getGroupKey(); + GroupEntity groupToUpdate = (GroupEntity)getGroupQueryList.get(0); + if(!stringEquals(groupToUpdate.getModifiedBy(), username)){ + groupToUpdate.setModifiedBy(username); + } + if(group.getDescription() != null && !stringEquals(group.getDescription(),groupToUpdate.getDescription())){ + groupToUpdate.setDescription(group.getDescription()); + } + //let's find out what policies have been deleted + StdPDPGroup oldGroup = null; + try { + oldGroup = (StdPDPGroup) papEngine.getGroup(group.getId()); + } catch (PAPException e1) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, "PolicyDBDao", "We cannot get the group from the papEngine to delete policies"); + } + if(oldGroup == null){ + PolicyLogger.error("We cannot get the group from the papEngine to delete policies"); + } else { + + Set<String> newPolicySet = new HashSet<String>(group.getPolicies().size()); + //a multiple of n runtime is faster than n^2, so I am using a hashset to do the comparison + for(PDPPolicy pol: group.getPolicies()){ + newPolicySet.add(pol.getId()); + } + for(PDPPolicy pol : oldGroup.getPolicies()){ + //should be fast since getPolicies uses a HashSet in StdPDPGroup + if(!newPolicySet.contains(pol.getId())){ + String[] scopeAndName = getNameScopeAndVersionFromPdpPolicy(pol.getId()); + PolicyEntity policyToDelete; + try{ + policyToDelete = getPolicy(scopeAndName[0],scopeAndName[1]); + }catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Could not get policy to remove: "+pol.getId()); + throw new PersistenceException("Could not get policy to remove: "+pol.getId()); + } + groupToUpdate.getPolicies().remove(policyToDelete); + + } + } + } + if(group.getName() != null && !stringEquals(group.getName(),groupToUpdate.getgroupName())){ + //we need to check if the new id exists in the database + String newGroupId = createNewPDPGroupId(group.getName()); + Query checkGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); + checkGroupQuery.setParameter("groupId", newGroupId); + checkGroupQuery.setParameter("deleted", false); + List<?> checkGroupQueryList; + try{ + checkGroupQueryList = checkGroupQuery.getResultList(); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on checkGroupQuery.getResultList()"); + throw new PersistenceException("Query failed trying to check for existing group"); + } + if(checkGroupQueryList.size() != 0){ + PolicyLogger.error("The new group name already exists, group id "+newGroupId); + throw new PersistenceException("The new group name already exists, group id "+newGroupId); + } + groupToUpdate.setGroupId(newGroupId); + groupToUpdate.setGroupName(group.getName()); + this.newGroupId = group.getId(); + } + + em.flush(); + this.groupId = groupToUpdate.getGroupKey(); } } @@ -3383,76 +3161,60 @@ public class PolicyDBDao { if(!(pdpDescription instanceof String)){ pdpDescription = ""; } -// if(isTransactionOpen()){ -// logger.error("A transaction is already open which has not been committed"); -// throw new IllegalStateException("A transaction is already open which has not been committed"); -// } - synchronized(emLock){ checkBeforeOperationRun(); - Query checkGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); - checkGroupQuery.setParameter("groupId", groupID); - checkGroupQuery.setParameter("deleted", false); - List<?> checkGroupQueryList; - try{ - checkGroupQueryList = checkGroupQuery.getResultList(); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to check for existing group on checkGroupQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check for existing group on checkGroupQuery.getResultList()"); - throw new PersistenceException("Query failed trying to check for existing group"); - } - if(checkGroupQueryList.size() != 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("The group does not exist"); - PolicyLogger.error("The group does not exist"); - throw new PersistenceException("The group does not exist"); - } - Query checkDuplicateQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted"); - checkDuplicateQuery.setParameter("pdpId", pdpID); - checkDuplicateQuery.setParameter("deleted", false); - List<?> checkDuplicateList; - try{ - checkDuplicateList = checkDuplicateQuery.getResultList(); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to check for duplicate PDP "+pdpID+" on checkDuplicateQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check for duplicate PDP "+pdpID+" on checkDuplicateQuery.getResultList()"); - throw new PersistenceException("Query failed trying to check for duplicate PDP "+pdpID); - } - PdpEntity newPdp; - if(checkDuplicateList.size() > 0){ - logger.warn("PDP already exists with id "+pdpID); - newPdp = (PdpEntity)checkDuplicateList.get(0); - } else { - newPdp = new PdpEntity(); - em.persist(newPdp); - } + Query checkGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); + checkGroupQuery.setParameter("groupId", groupID); + checkGroupQuery.setParameter("deleted", false); + List<?> checkGroupQueryList; + try{ + checkGroupQueryList = checkGroupQuery.getResultList(); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check for existing group on checkGroupQuery.getResultList()"); + throw new PersistenceException("Query failed trying to check for existing group"); + } + if(checkGroupQueryList.size() != 1){ + PolicyLogger.error("The group does not exist"); + throw new PersistenceException("The group does not exist"); + } + Query checkDuplicateQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted"); + checkDuplicateQuery.setParameter("pdpId", pdpID); + checkDuplicateQuery.setParameter("deleted", false); + List<?> checkDuplicateList; + try{ + checkDuplicateList = checkDuplicateQuery.getResultList(); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check for duplicate PDP "+pdpID+" on checkDuplicateQuery.getResultList()"); + throw new PersistenceException("Query failed trying to check for duplicate PDP "+pdpID); + } + PdpEntity newPdp; + if(checkDuplicateList.size() > 0){ + logger.warn("PDP already exists with id "+pdpID); + newPdp = (PdpEntity)checkDuplicateList.get(0); + } else { + newPdp = new PdpEntity(); + em.persist(newPdp); + } + + newPdp.setCreatedBy(username); + newPdp.setDeleted(false); + newPdp.setDescription(pdpDescription); + newPdp.setGroup((GroupEntity)checkGroupQueryList.get(0)); + newPdp.setJmxPort(pdpJmxPort); + newPdp.setModifiedBy(username); + newPdp.setPdpId(pdpID); + newPdp.setPdpName(pdpName); - newPdp.setCreatedBy(username); - newPdp.setDeleted(false); - newPdp.setDescription(pdpDescription); - newPdp.setGroup((GroupEntity)checkGroupQueryList.get(0)); - newPdp.setJmxPort(pdpJmxPort); - newPdp.setModifiedBy(username); - newPdp.setPdpId(pdpID); - newPdp.setPdpName(pdpName); - - em.flush(); - this.pdpId = newPdp.getPdpKey(); + em.flush(); + this.pdpId = newPdp.getPdpKey(); } } - + @Override public void updatePdp(EcompPDP pdp, String username){ logger.debug("updatePdp(PDP pdp, String username) as updatePdp("+pdp+","+username+") called"); -// if(isTransactionOpen()){ -// logger.error("A transaction is already open which has not been committed"); -// throw new IllegalStateException("A transaction is already open which has not been committed"); -// } - //parameter check if(pdp == null){ throw new IllegalArgumentException("PDP pdp must not be null"); } @@ -3462,187 +3224,150 @@ public class PolicyDBDao { synchronized(emLock){ checkBeforeOperationRun(); - Query getPdpQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted"); - getPdpQuery.setParameter("pdpId", pdp.getId()); - getPdpQuery.setParameter("deleted", false); - List<?> getPdpQueryList; - try{ - getPdpQueryList = getPdpQuery.getResultList(); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception on getPdpQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on getPdpQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get PDP "+pdp.getId()); - } - if(getPdpQueryList.size() < 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("The pdp cannot be found to update with id "+pdp.getId()); - PolicyLogger.error("The pdp cannot be found to update with id "+pdp.getId()); - throw new PersistenceException("The pdp cannot be found to update with id "+pdp.getId()); - } else if(getPdpQueryList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database"); - PolicyLogger.error("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database"); - throw new PersistenceException("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database"); - } - //em.getTransaction().begin(); - PdpEntity pdpToUpdate = (PdpEntity)getPdpQueryList.get(0); - if(!stringEquals(pdpToUpdate.getModifiedBy(), username)){ - pdpToUpdate.setModifiedBy(username); - } - if(pdp.getDescription() != null && !stringEquals(pdp.getDescription(),pdpToUpdate.getDescription())){ - pdpToUpdate.setDescription(pdp.getDescription()); - } - if(pdp.getName() != null && !stringEquals(pdp.getName(),pdpToUpdate.getPdpName())){ - pdpToUpdate.setPdpName(pdp.getName()); - } - if(pdp.getJmxPort() != null && !pdp.getJmxPort().equals(pdpToUpdate.getJmxPort())){ - pdpToUpdate.setJmxPort(pdp.getJmxPort()); - } - - em.flush(); - this.pdpId = pdpToUpdate.getPdpKey(); + Query getPdpQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted"); + getPdpQuery.setParameter("pdpId", pdp.getId()); + getPdpQuery.setParameter("deleted", false); + List<?> getPdpQueryList; + try{ + getPdpQueryList = getPdpQuery.getResultList(); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on getPdpQuery.getResultList()"); + throw new PersistenceException("Query failed trying to get PDP "+pdp.getId()); + } + if(getPdpQueryList.size() < 1){ + PolicyLogger.error("The pdp cannot be found to update with id "+pdp.getId()); + throw new PersistenceException("The pdp cannot be found to update with id "+pdp.getId()); + } else if(getPdpQueryList.size() > 1){ + PolicyLogger.error("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database"); + throw new PersistenceException("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database"); + } + PdpEntity pdpToUpdate = (PdpEntity)getPdpQueryList.get(0); + if(!stringEquals(pdpToUpdate.getModifiedBy(), username)){ + pdpToUpdate.setModifiedBy(username); + } + if(pdp.getDescription() != null && !stringEquals(pdp.getDescription(),pdpToUpdate.getDescription())){ + pdpToUpdate.setDescription(pdp.getDescription()); + } + if(pdp.getName() != null && !stringEquals(pdp.getName(),pdpToUpdate.getPdpName())){ + pdpToUpdate.setPdpName(pdp.getName()); + } + if(pdp.getJmxPort() != null && !pdp.getJmxPort().equals(pdpToUpdate.getJmxPort())){ + pdpToUpdate.setJmxPort(pdp.getJmxPort()); + } + + em.flush(); + this.pdpId = pdpToUpdate.getPdpKey(); } } - + @Override public void movePdp(EcompPDP pdp, EcompPDPGroup group, String username){ logger.debug("movePdp(PDP pdp, PDPGroup group, String username) as movePdp("+pdp+","+group+","+username+") called"); -// if(isTransactionOpen()){ -// logger.error("A transaction is already open which has not been committed"); -// throw new IllegalStateException("A transaction is already open which has not been committed"); -// } if(pdp == null || group == null){ throw new IllegalArgumentException("PDP pdp and PDPGroup group must not be null"); } if(isNullOrEmpty(username,pdp.getId(),group.getId())){ throw new IllegalArgumentException("pdp.getId(), group.getId(), and username must not be null or empty"); } - + synchronized(emLock){ checkBeforeOperationRun(); - //check if pdp exists - Query getPdpQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted"); - getPdpQuery.setParameter("pdpId", pdp.getId()); - getPdpQuery.setParameter("deleted", false); - List<?> getPdpQueryList; - try{ - getPdpQueryList = getPdpQuery.getResultList(); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception on getPdpQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on getPdpQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get pdp to move with id "+pdp.getId()); - } - if(getPdpQueryList.size() < 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("The pdp cannot be found to move with id "+pdp.getId()); - PolicyLogger.error("The pdp cannot be found to move with id "+pdp.getId()); - throw new PersistenceException("The pdp cannot be found to move with id "+pdp.getId()); - } else if(getPdpQueryList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database"); - PolicyLogger.error("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database"); - throw new PersistenceException("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database"); - } - - //check if new group exists - Query checkGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); - checkGroupQuery.setParameter("groupId", group.getId()); - checkGroupQuery.setParameter("deleted", false); - List<?> checkGroupQueryList; - try{ - checkGroupQueryList = checkGroupQuery.getResultList(); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to get group on checkGroupQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get group on checkGroupQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get new group "+group.getId()); - } - if(checkGroupQueryList.size() != 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("The group "+group.getId()+" does not exist"); - PolicyLogger.error("The group "+group.getId()+" does not exist"); - throw new PersistenceException("The group "+group.getId()+" does not exist"); - } - GroupEntity groupToMoveInto = (GroupEntity)checkGroupQueryList.get(0); - //move it - //em.getTransaction().begin(); - PdpEntity pdpToUpdate = (PdpEntity)getPdpQueryList.get(0); - pdpToUpdate.setGroup(groupToMoveInto); - if(!stringEquals(pdpToUpdate.getModifiedBy(), username)){ - pdpToUpdate.setModifiedBy(username); - } - - em.flush(); - this.pdpId = pdpToUpdate.getPdpKey(); + //check if pdp exists + Query getPdpQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted"); + getPdpQuery.setParameter("pdpId", pdp.getId()); + getPdpQuery.setParameter("deleted", false); + List<?> getPdpQueryList; + try{ + getPdpQueryList = getPdpQuery.getResultList(); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on getPdpQuery.getResultList()"); + throw new PersistenceException("Query failed trying to get pdp to move with id "+pdp.getId()); + } + if(getPdpQueryList.size() < 1){ + PolicyLogger.error("The pdp cannot be found to move with id "+pdp.getId()); + throw new PersistenceException("The pdp cannot be found to move with id "+pdp.getId()); + } else if(getPdpQueryList.size() > 1){ + PolicyLogger.error("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database"); + throw new PersistenceException("Somehow, more than one pdp with the same id "+pdp.getId()+" and deleted status were found in the database"); + } + + //check if new group exists + Query checkGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); + checkGroupQuery.setParameter("groupId", group.getId()); + checkGroupQuery.setParameter("deleted", false); + List<?> checkGroupQueryList; + try{ + checkGroupQueryList = checkGroupQuery.getResultList(); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get group on checkGroupQuery.getResultList()"); + throw new PersistenceException("Query failed trying to get new group "+group.getId()); + } + if(checkGroupQueryList.size() != 1){ + PolicyLogger.error("The group "+group.getId()+" does not exist"); + throw new PersistenceException("The group "+group.getId()+" does not exist"); + } + GroupEntity groupToMoveInto = (GroupEntity)checkGroupQueryList.get(0); + PdpEntity pdpToUpdate = (PdpEntity)getPdpQueryList.get(0); + pdpToUpdate.setGroup(groupToMoveInto); + if(!stringEquals(pdpToUpdate.getModifiedBy(), username)){ + pdpToUpdate.setModifiedBy(username); + } + + em.flush(); + this.pdpId = pdpToUpdate.getPdpKey(); } } - + @Override public void changeDefaultGroup(EcompPDPGroup group, String username){ logger.debug("changeDefaultGroup(PDPGroup group, String username) as changeDefaultGroup("+group+","+username+") called"); -// if(isTransactionOpen()){ -// logger.error("A transaction is already open which has not been committed"); -// throw new IllegalStateException("A transaction is already open which has not been committed"); -// } - //parameter check if(group == null){ throw new IllegalArgumentException("PDPGroup group must not be null"); } if(isNullOrEmpty(group.getId(),username)){ throw new IllegalArgumentException("group.getId() and username must not be null or empty"); } - + synchronized(emLock){ checkBeforeOperationRun(); - Query getGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); - getGroupQuery.setParameter("groupId", group.getId()); - getGroupQuery.setParameter("deleted", false); - List<?> getGroupQueryList; - try{ - getGroupQueryList = getGroupQuery.getResultList(); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception on getGroupQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on getGroupQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get group "+group.getId()); - } - if(getGroupQueryList.size() < 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("The group cannot be found to set default with id "+group.getId()); - PolicyLogger.error("The group cannot be found to set default with id "+group.getId()); - throw new PersistenceException("The group cannot be found to set default with id "+group.getId()); - } else if(getGroupQueryList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database"); - PolicyLogger.error("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database"); - throw new PersistenceException("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database"); - } - //em.getTransaction().begin(); - GroupEntity newDefaultGroup = (GroupEntity)getGroupQueryList.get(0); - newDefaultGroup.setDefaultGroup(true); - if(!stringEquals(newDefaultGroup.getModifiedBy(), username)){ - newDefaultGroup.setModifiedBy(username); - } - - em.flush(); - this.groupId = newDefaultGroup.getGroupKey(); - Query setAllGroupsNotDefault = em.createQuery("UPDATE GroupEntity g SET g.defaultGroup=:defaultGroup WHERE g.deleted=:deleted AND g.groupKey<>:groupKey"); - //not going to set modified by for all groups - setAllGroupsNotDefault.setParameter("defaultGroup", false); - setAllGroupsNotDefault.setParameter("deleted", false); - setAllGroupsNotDefault.setParameter("groupKey", newDefaultGroup.getGroupKey()); - try{ - logger.info("set " + setAllGroupsNotDefault.executeUpdate() + " groups as not default"); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception on setAllGroupsNotDefault.executeUpdate()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on setAllGroupsNotDefault.executeUpdate()"); - throw new PersistenceException("Could not set all other groups default to false"); - } - - em.flush(); + Query getGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); + getGroupQuery.setParameter("groupId", group.getId()); + getGroupQuery.setParameter("deleted", false); + List<?> getGroupQueryList; + try{ + getGroupQueryList = getGroupQuery.getResultList(); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on getGroupQuery.getResultList()"); + throw new PersistenceException("Query failed trying to get group "+group.getId()); + } + if(getGroupQueryList.size() < 1){ + PolicyLogger.error("The group cannot be found to set default with id "+group.getId()); + throw new PersistenceException("The group cannot be found to set default with id "+group.getId()); + } else if(getGroupQueryList.size() > 1){ + PolicyLogger.error("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database"); + throw new PersistenceException("Somehow, more than one group with the same id "+group.getId()+" and deleted status were found in the database"); + } + GroupEntity newDefaultGroup = (GroupEntity)getGroupQueryList.get(0); + newDefaultGroup.setDefaultGroup(true); + if(!stringEquals(newDefaultGroup.getModifiedBy(), username)){ + newDefaultGroup.setModifiedBy(username); + } + + em.flush(); + this.groupId = newDefaultGroup.getGroupKey(); + Query setAllGroupsNotDefault = em.createQuery("UPDATE GroupEntity g SET g.defaultGroup=:defaultGroup WHERE g.deleted=:deleted AND g.groupKey<>:groupKey"); + //not going to set modified by for all groups + setAllGroupsNotDefault.setParameter("defaultGroup", false); + setAllGroupsNotDefault.setParameter("deleted", false); + setAllGroupsNotDefault.setParameter("groupKey", newDefaultGroup.getGroupKey()); + try{ + logger.info("set " + setAllGroupsNotDefault.executeUpdate() + " groups as not default"); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception on setAllGroupsNotDefault.executeUpdate()"); + throw new PersistenceException("Could not set all other groups default to false"); + } + + em.flush(); } } @@ -3650,10 +3375,6 @@ public class PolicyDBDao { @Override public void deleteGroup(EcompPDPGroup group, EcompPDPGroup moveToGroup, String username) throws PAPException { logger.debug("deleteGroup(PDPGroup group, PDPGroup moveToGroup, String username) as deleteGroup("+group+", "+moveToGroup+","+username+") called"); -// if(isTransactionOpen()){ -// logger.error("A transaction is already open which has not been committed"); -// throw new IllegalStateException("A transaction is already open which has not been committed"); -// } if(group == null){ throw new IllegalArgumentException("PDPGroup group cannot be null"); } @@ -3662,35 +3383,29 @@ public class PolicyDBDao { } if(group.isDefaultGroup()){ - //TODO:EELF Cleanup - Remove logger - //logger.error("The default group "+group.getId()+" was attempted to be deleted. It cannot be."); PolicyLogger.error("The default group "+group.getId()+" was attempted to be deleted. It cannot be."); throw new PAPException("You cannot delete the default group."); } synchronized(emLock){ checkBeforeOperationRun(); - Query deleteGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); - deleteGroupQuery.setParameter("groupId", group.getId()); - deleteGroupQuery.setParameter("deleted", false); - List<?> deleteGroupQueryList; - try{ - deleteGroupQueryList = deleteGroupQuery.getResultList(); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to check if group exists deleteGroupQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check if group exists deleteGroupQuery.getResultList()"); - throw new PersistenceException("Query failed trying to check if group exists"); - } - if(deleteGroupQueryList.size() < 1){ - logger.warn("The group could not be found with id " + group.getId()); - return; - } else if(deleteGroupQueryList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one group with the id "+group.getId()+" were found in the database that are not deleted"); - PolicyLogger.error("Somehow, more than one group with the id "+group.getId()+" were found in the database that are not deleted"); - throw new PersistenceException("Somehow, more than one group with the id "+group.getId()+" were found in the database that are not deleted"); - } - + Query deleteGroupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); + deleteGroupQuery.setParameter("groupId", group.getId()); + deleteGroupQuery.setParameter("deleted", false); + List<?> deleteGroupQueryList; + try{ + deleteGroupQueryList = deleteGroupQuery.getResultList(); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check if group exists deleteGroupQuery.getResultList()"); + throw new PersistenceException("Query failed trying to check if group exists"); + } + if(deleteGroupQueryList.size() < 1){ + logger.warn("The group could not be found with id " + group.getId()); + return; + } else if(deleteGroupQueryList.size() > 1){ + PolicyLogger.error("Somehow, more than one group with the id "+group.getId()+" were found in the database that are not deleted"); + throw new PersistenceException("Somehow, more than one group with the id "+group.getId()+" were found in the database that are not deleted"); + } + Query pdpsInGroupQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.groupEntity=:group and p.deleted=:deleted"); pdpsInGroupQuery.setParameter("group", ((GroupEntity)deleteGroupQueryList.get(0))); pdpsInGroupQuery.setParameter("deleted", false); @@ -3698,12 +3413,9 @@ public class PolicyDBDao { try{ pdpsInGroupList = pdpsInGroupQuery.getResultList(); } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to get PDPs in group on pdpsInGroupQuery.getResultList()",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to get PDPs in group on pdpsInGroupQuery.getResultList()"); throw new PersistenceException("Query failed trying to get PDPs in group"); } - //em.getTransaction().begin(); if(pdpsInGroupList.size() > 0){ if(moveToGroup != null){ Query checkMoveToGroupQuery = em.createQuery("SELECT o FROM GroupEntity o WHERE o.groupId=:groupId AND o.deleted=:deleted"); @@ -3713,19 +3425,13 @@ public class PolicyDBDao { try{ checkMoveToGroupList = checkMoveToGroupQuery.getResultList(); } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to check if group exists checkMoveToGroupQuery.getResultList()",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check if group exists checkMoveToGroupQuery.getResultList()"); throw new PersistenceException("Query failed trying to check if group exists"); } if(checkMoveToGroupList.size() < 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("The group could not be found with id " + moveToGroup.getId()); PolicyLogger.error("The group could not be found with id " + moveToGroup.getId()); throw new PersistenceException("The group could not be found with id " + moveToGroup.getId()); } else if(checkMoveToGroupList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one group with the id "+moveToGroup.getId()+" were found in the database that are not deleted"); PolicyLogger.error("Somehow, more than one group with the id "+moveToGroup.getId()+" were found in the database that are not deleted"); throw new PersistenceException("Somehow, more than one group with the id "+moveToGroup.getId()+" were found in the database that are not deleted"); } else { @@ -3737,113 +3443,95 @@ public class PolicyDBDao { pdp.setModifiedBy(username); } try{ - - em.flush(); - this.newGroupId = newGroup.getGroupId(); + + em.flush(); + this.newGroupId = newGroup.getGroupId(); } catch(PersistenceException e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught PersistenceException trying to set pdp group to null on em.flush()",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught PersistenceException trying to set pdp group to null on em.flush()"); throw new PersistenceException("Query failed trying to set pdp group to "); } } } } else { - //TODO:EELF Cleanup - Remove logger - //logger.error("Group "+group.getId()+" is trying to be delted with PDPs. No group was provided to move them to"); PolicyLogger.error("Group "+group.getId()+" is trying to be delted with PDPs. No group was provided to move them to"); throw new PAPException("Group has PDPs. Must provide a group for them to move to"); } } - + //delete group here - GroupEntity groupToDelete = (GroupEntity)deleteGroupQueryList.get(0); groupToDelete.setDeleted(true); if(!stringEquals(groupToDelete.getModifiedBy(), username)){ groupToDelete.setModifiedBy(username); } - - //try{ - em.flush(); this.groupId = groupToDelete.getGroupKey(); - //return; - //} catch(PersistenceException pe){ - //logger.error("Database error while marking policy or config as deleted"); - //throw new PersistenceException("Database error while marking policy or config as deleted"); - //} - } } + } @Override public void addPolicyToGroup(String groupID, String policyID, String username) { logger.debug("addPolicyToGroup(String groupID, String policyID, String username) as addPolicyToGroup("+groupID+", "+policyID+","+username+") called"); -// if(isTransactionOpen()){ -// logger.error("A transaction is already open which has not been committed"); -// throw new IllegalStateException("A transaction is already open which has not been committed"); -// } if(isNullOrEmpty(groupID, policyID, username)){ throw new IllegalArgumentException("groupID, policyID, and username must not be null or empty"); } synchronized(emLock){ checkBeforeOperationRun(); - //check if group exists - Query groupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); - groupQuery.setParameter("groupId", groupID); - groupQuery.setParameter("deleted", false); - List<?> groupQueryList; - try{ - groupQueryList = groupQuery.getResultList(); - }catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to check if group exists groupQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check if group exists groupQuery.getResultList()"); - throw new PersistenceException("Query failed trying to check if group "+groupID+" exists"); - } - if(groupQueryList.size() < 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Group policy is being added to does not exist with id "+groupID); - PolicyLogger.error("Group policy is being added to does not exist with id "+groupID); - throw new PersistenceException("Group policy is being added to does not exist with id "+groupID); - } else if(groupQueryList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one group with the id "+groupID+" were found in the database that are not deleted"); - PolicyLogger.error("Somehow, more than one group with the id "+groupID+" were found in the database that are not deleted"); - throw new PersistenceException("Somehow, more than one group with the id "+groupID+" were found in the database that are not deleted"); - } - //we need to convert the form of the policy id that is used groups into the form that is used - //for the database. (com.Config_mypol.1.xml) to (Config_mypol.xml) - String[] policyNameScopeAndVersion = getNameScopeAndVersionFromPdpPolicy(policyID); - Query policyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.policyName=:policyName AND p.scope=:scope AND p.deleted=:deleted"); - policyQuery.setParameter("policyName", policyNameScopeAndVersion[0]); - policyQuery.setParameter("scope", policyNameScopeAndVersion[1]); - policyQuery.setParameter("deleted", false); - List<?> policyQueryList; - try{ - policyQueryList = policyQuery.getResultList(); - } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to check if policy exists policyQuery.getResultList()",e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check if policy exists policyQuery.getResultList()"); - throw new PersistenceException("Query failed trying to check if policy "+policyNameScopeAndVersion[0]+" exists"); - } - if(policyQueryList.size() < 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Policy being added to the group does not exist with policy id "+policyNameScopeAndVersion[0]); - PolicyLogger.error("Policy being added to the group does not exist with policy id "+policyNameScopeAndVersion[0]); - throw new PersistenceException("Policy being added to the group does not exist with policy id "+policyNameScopeAndVersion[0]); - } else if(policyQueryList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one policy with the id "+policyNameScopeAndVersion[0]+" were found in the database that are not deleted"); - PolicyLogger.error("Somehow, more than one policy with the id "+policyNameScopeAndVersion[0]+" were found in the database that are not deleted"); - throw new PersistenceException("Somehow, more than one group with the id "+policyNameScopeAndVersion[0]+" were found in the database that are not deleted"); - } - //em.getTransaction().begin(); - GroupEntity group = (GroupEntity)groupQueryList.get(0); - PolicyEntity policy = (PolicyEntity)policyQueryList.get(0); - group.addPolicyToGroup(policy); - em.flush(); + //check if group exists + Query groupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); + groupQuery.setParameter("groupId", groupID); + groupQuery.setParameter("deleted", false); + List<?> groupQueryList; + try{ + groupQueryList = groupQuery.getResultList(); + }catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check if group exists groupQuery.getResultList()"); + throw new PersistenceException("Query failed trying to check if group "+groupID+" exists"); + } + if(groupQueryList.size() < 1){ + PolicyLogger.error("Group policy is being added to does not exist with id "+groupID); + throw new PersistenceException("Group policy is being added to does not exist with id "+groupID); + } else if(groupQueryList.size() > 1){ + PolicyLogger.error("Somehow, more than one group with the id "+groupID+" were found in the database that are not deleted"); + throw new PersistenceException("Somehow, more than one group with the id "+groupID+" were found in the database that are not deleted"); + } + //we need to convert the form of the policy id that is used groups into the form that is used + //for the database. (com.Config_mypol.1.xml) to (Config_mypol.xml) + String[] policyNameScopeAndVersion = getNameScopeAndVersionFromPdpPolicy(policyID); + Query policyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.policyName=:policyName AND p.scope=:scope AND p.deleted=:deleted"); + policyQuery.setParameter("policyName", policyNameScopeAndVersion[0]); + policyQuery.setParameter("scope", policyNameScopeAndVersion[1]); + policyQuery.setParameter("deleted", false); + List<?> policyQueryList; + try{ + policyQueryList = policyQuery.getResultList(); + } catch(Exception e){ + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check if policy exists policyQuery.getResultList()"); + throw new PersistenceException("Query failed trying to check if policy "+policyNameScopeAndVersion[0]+" exists"); + } + if(policyQueryList.size() < 1){ + PolicyLogger.error("Policy being added to the group does not exist with policy id "+policyNameScopeAndVersion[0]); + throw new PersistenceException("Policy being added to the group does not exist with policy id "+policyNameScopeAndVersion[0]); + } else if(policyQueryList.size() > 1){ + PolicyLogger.error("Somehow, more than one policy with the id "+policyNameScopeAndVersion[0]+" were found in the database that are not deleted"); + throw new PersistenceException("Somehow, more than one group with the id "+policyNameScopeAndVersion[0]+" were found in the database that are not deleted"); + } + GroupEntity group = (GroupEntity)groupQueryList.get(0); + PolicyEntity policy = (PolicyEntity)policyQueryList.get(0); + Iterator<PolicyEntity> policyIt = group.getPolicies().iterator(); + String policyName = getPolicyNameAndVersionFromPolicyFileName(policy.getPolicyName())[0]; + try{ + while(policyIt.hasNext()){ + PolicyEntity pol = policyIt.next(); + if(getPolicyNameAndVersionFromPolicyFileName(pol.getPolicyName())[0].equals(policyName)){ + policyIt.remove(); + } + } + }catch(Exception e){ + PolicyLogger.error("Could not delete old versions for policy "+policy.getPolicyName()+", ID: "+policy.getPolicyId()); + } + group.addPolicyToGroup(policy); + em.flush(); } } @@ -3851,10 +3539,6 @@ public class PolicyDBDao { @Override public void removePdpFromGroup(String pdpID, String username) { logger.debug("removePdpFromGroup(String pdpID, String username) as removePdpFromGroup("+pdpID+","+username+") called"); -// if(isTransactionOpen()){ -// logger.error("A transaction is already open which has not been committed"); -// throw new IllegalStateException("A transaction is already open which has not been committed"); -// } if(isNullOrEmpty(pdpID,username)){ throw new IllegalArgumentException("pdpID and username must not be null or empty"); } @@ -3867,47 +3551,43 @@ public class PolicyDBDao { try{ pdpList = pdpQuery.getResultList(); } catch(Exception e){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Caught Exception trying to check if pdp exists pdpQuery.getResultList()",e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "PolicyDBDao", "Caught Exception trying to check if pdp exists pdpQuery.getResultList()"); throw new PersistenceException("Query failed trying to check if pdp "+pdpID+" exists"); } if(pdpList.size() > 1){ - //TODO:EELF Cleanup - Remove logger - //logger.error("Somehow, more than one pdp with the id "+pdpID+" were found in the database that are not deleted"); PolicyLogger.error("Somehow, more than one pdp with the id "+pdpID+" were found in the database that are not deleted"); throw new PersistenceException("Somehow, more than one pdp with the id "+pdpID+" were found in the database that are not deleted"); } else if(pdpList.size() < 1){ - //logger.warn("Pdp being removed does not exist with id "+pdpID); PolicyLogger.error("Pdp being removed does not exist with id "+pdpID); return; } - //em.getTransaction().begin(); PdpEntity pdp = (PdpEntity)pdpList.get(0); pdp.setGroup(null); if(!stringEquals(pdp.getModifiedBy(),username)){ pdp.setModifiedBy(username); } pdp.setDeleted(true); - + em.flush(); this.pdpId = pdp.getPdpKey(); } } } - - + + private static String getDefaultWorkspace(){ return "admin"; } - + private PolicyDBDao(){ - + } + public static PolicyDBDaoTestClass getPolicyDBDaoTestClass(){ return new PolicyDBDao().new PolicyDBDaoTestClass(); } + final class PolicyDBDaoTestClass { String[] getScopeAndNameAndType(final String path){ return PolicyDBDao.getScopeAndNameAndType(path); @@ -3916,7 +3596,7 @@ public class PolicyDBDao { return PolicyDBDao.getGitPath(); } String getConfigFile(String filename, String scope, PolicyRestAdapter policy){ - return PolicyDBDao.this.getConfigFile(filename, scope, policy); + return PolicyDBDao.this.getConfigFile(filename, policy); } String computeScope(String fullPath, String pathToExclude){ return PolicyDBDao.computeScope(fullPath, pathToExclude); @@ -3930,7 +3610,9 @@ public class PolicyDBDao { String getDescriptionFromXacml(String xacmlData){ return PolicyDBDao.getDescriptionFromXacml(xacmlData); } - + String[] getPolicyNameAndVersionFromPolicyFileName(String originalPolicyName){ + return PolicyDBDao.this.getPolicyNameAndVersionFromPolicyFileName(originalPolicyName); + } } - -} + +}
\ No newline at end of file diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/PolicyDBDaoTransaction.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/PolicyDBDaoTransaction.java index 4e9ddb489..5ab036db8 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/PolicyDBDaoTransaction.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/PolicyDBDaoTransaction.java @@ -21,19 +21,15 @@ package org.openecomp.policy.pap.xacml.rest.components; import java.util.List; -import java.util.Set; import javax.persistence.PersistenceException; -import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter; import org.openecomp.policy.rest.jpa.GroupEntity; import org.openecomp.policy.rest.jpa.PdpEntity; import org.openecomp.policy.xacml.api.pap.EcompPDP; import org.openecomp.policy.xacml.api.pap.EcompPDPGroup; import com.att.research.xacml.api.pap.PAPException; -//import com.att.research.xacml.api.pap.PDP; -//import com.att.research.xacml.api.pap.PDPGroup; public interface PolicyDBDaoTransaction { diff --git a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/package-info.java b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/package-info.java index 98e1bd985..007f08d36 100644 --- a/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/package-info.java +++ b/ECOMP-PAP-REST/src/main/java/org/openecomp/policy/pap/xacml/rest/components/package-info.java @@ -18,10 +18,4 @@ * ============LICENSE_END========================================================= */ -/** - * - */ -/** - * - */ package org.openecomp.policy.pap.xacml.rest.components; |