X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=BRMSGateway%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2FbrmsInterface%2FBRMSPush.java;h=86cd066b8edb082976c200ecebc78d23fbb9fefb;hb=d1aa00c101648ecfea24f01b379d3c1cfaff7b4c;hp=6e8588acbc467fd5e4940cd28eec91af284f1a78;hpb=79a9cadfca4bb99472bc36dcdfb3f8effb8a281e;p=policy%2Fengine.git diff --git a/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java b/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java index 6e8588acb..86cd066b8 100644 --- a/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java +++ b/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2018 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. @@ -46,6 +46,7 @@ import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.jar.JarEntry; import java.util.jar.JarFile; +import java.util.regex.Pattern; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; @@ -73,7 +74,6 @@ import org.onap.policy.api.PolicyException; import org.onap.policy.brmsInterface.jpa.BRMSGroupInfo; import org.onap.policy.brmsInterface.jpa.BRMSPolicyInfo; import org.onap.policy.brmsInterface.jpa.DependencyInfo; -import org.onap.policy.common.im.AdministrativeStateException; import org.onap.policy.common.im.IntegrityMonitor; import org.onap.policy.common.logging.eelf.MessageCodes; import org.onap.policy.common.logging.eelf.PolicyLogger; @@ -104,11 +104,21 @@ import com.fasterxml.jackson.core.JsonProcessingException; @SuppressWarnings("deprecation") public class BRMSPush { - private static final Logger LOGGER = FlexLogger.getLogger(BRMSPush.class.getName()); + private static final String GROUP_NAMES = "groupNames"; + private static final String DROOLS_APPS_TEMPLATE_GROUP = "org.onap.policy.drools-applications.controlloop.templates"; + private static final String DROOLS_APPS_MODEL_GROUP = "org.onap.policy.drools-applications.controlloop.common.model-impl"; + private static final String META_INF = "META-INF"; + private static final String KMODULE_XML_FILE = "kmodule.xml"; + private static final String POM_XML_FILE = "pom.xml"; + private static final String VERSION_0_1_0 = "0.1.0"; + private static final String RULES = "rules"; + private static final String RESOURCES = "resources"; + private static final Logger LOGGER = FlexLogger.getLogger(BRMSPush.class.getName()); private static final String PROJECTSLOCATION = "RuleProjects"; private static final String[] GOALS = { "clean", "deploy" }; - private static final String DEFAULT_VERSION = "1.1.0-SNAPSHOT"; + private static final String DEFAULT_VERSION = "1.2.0-SNAPSHOT"; private static final String DEPENDENCY_FILE = "dependency.json"; + private static final String BRMSPERSISTENCE = "brmsEclipselink.persistencexml"; private static Map modifiedGroups = new HashMap<>(); private static IntegrityMonitor im; @@ -188,8 +198,10 @@ public class BRMSPush { } catch (Exception e) { LOGGER.error("Error starting BackUpMonitor: " + e); } - if(!config.containsKey(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML)){ + if(!config.containsKey(BRMSPERSISTENCE)){ config.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistenceBRMS.xml"); + } else { + config.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, config.getProperty(BRMSPERSISTENCE,"META-INF/persistenceBRMS.xml")); } EntityManagerFactory emf = Persistence.createEntityManagerFactory("BRMSGW", config); em = emf.createEntityManager(); @@ -363,6 +375,11 @@ public class BRMSPush { if (flag) syncGroupInfo(); } + + public void resetDS(){ + resetModifiedGroups(); + controllers = new ArrayList<>(); + } private static void resetModifiedGroups() { modifiedGroups = new HashMap<>(); @@ -383,38 +400,38 @@ public class BRMSPush { // Pick selected Value String userControllerName = null; ArrayList userDependencies = new ArrayList<>(); - for (String key : responseAttributes.keySet()) { + for (Map.Entry entry: responseAttributes.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); if (key.equals(policyKeyID)) { - selectedName = responseAttributes.get(key); + selectedName = value; } // kmodule configurations else if ("kSessionName".equals(key)) { - kSessionName = responseAttributes.get(key); + kSessionName = value; } // Check User Specific values. if ("$controller:".equals(key)) { try { - PEDependency dependency = PolicyUtils.jsonStringToObject(responseAttributes.get(key), + PEDependency dependency = PolicyUtils.jsonStringToObject(value, PEDependency.class); userControllerName = key.replaceFirst("$controller:", ""); + LOGGER.info("addRule: userControllerName - " + userControllerName + ", dependency: - " + dependency); addToGroup(userControllerName, dependency); } catch (Exception e) { LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while resolving Controller: " + e); } - } else if ("$dependency$".equals(key)) { - String value = responseAttributes.get(key); - if (value.startsWith("[") && value.endsWith("]")) { - value = value.substring(1, value.length() - 1).trim(); - List dependencyStrings = Arrays.asList(value.split("},{")); - for (String dependencyString : dependencyStrings) { - try { - userDependencies - .add(PolicyUtils.jsonStringToObject(dependencyString, PEDependency.class)); - } catch (Exception e) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW - + "Error while resolving Dependencies: " + e); - } + } else if ("$dependency$".equals(key) && value.startsWith("[") && value.endsWith("]")) { + value = value.substring(1, value.length() - 1).trim(); + List dependencyStrings = Arrays.asList(value.split(Pattern.quote("},{"))); + for (String dependencyString : dependencyStrings) { + try { + userDependencies + .add(PolicyUtils.jsonStringToObject(dependencyString, PEDependency.class)); + } catch (Exception e) { + LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + + "Error while resolving Dependencies: " + e); } } } @@ -435,7 +452,8 @@ public class BRMSPush { // If the key is not got as parameters set by the user, setting the default value for kSessionName as // closedLoop if (kSessionName == null) { - if (selectedName == defaultName) { + LOGGER.info("kSessionName is null, selectedName is : " + selectedName ); + if (selectedName.equalsIgnoreCase(defaultName)) { kSessionName = "closedloop"; } else { kSessionName = "closedloop-" + selectedName; @@ -481,9 +499,9 @@ public class BRMSPush { // Check if the Project is in Sync. If not get the latest Version. syncProject(selectedName); createProject(PROJECTSLOCATION + File.separator + getArtifactID(selectedName) + File.separator + "src" - + File.separator + "main" + File.separator + "resources", kSessionName); + + File.separator + "main" + File.separator + RESOURCES, kSessionName); copyDataToFile(PROJECTSLOCATION + File.separator + getArtifactID(selectedName) + File.separator + "src" - + File.separator + "main" + File.separator + "resources" + File.separator + "rules" + File.separator + + File.separator + "main" + File.separator + RESOURCES + File.separator + RULES + File.separator + name + ".drl", rule); addToPolicy(name, selectedName); } @@ -498,18 +516,18 @@ public class BRMSPush { Query query = em.createQuery("select b from BRMSPolicyInfo as b where b.policyName = :pn"); query.setParameter("pn", policyName); List pList = query.getResultList(); - boolean createFlag = false; + boolean create = false; BRMSPolicyInfo brmsPolicyInfo = new BRMSPolicyInfo(); if (!pList.isEmpty()) { // Already exists. brmsPolicyInfo = (BRMSPolicyInfo) pList.get(0); if (!brmsPolicyInfo.getControllerName().getControllerName().equals(controllerName)) { - createFlag = true; + create = true; } } else { - createFlag = true; + create = true; } - if (createFlag) { + if (create) { query = em.createQuery("select b from BRMSGroupInfo as b where b.controllerName = :cn"); query.setParameter("cn", controllerName); List bList = query.getResultList(); @@ -533,7 +551,7 @@ public class BRMSPush { if (version == null) { LOGGER.error("Error getting local version for the given Controller Name:" + selectedName + " going with Default value"); - version = "0.1.0"; + version = VERSION_0_1_0; } String nextVersion = incrementVersion(version); boolean outOfSync = checkRemoteSync(selectedName, nextVersion); @@ -554,19 +572,22 @@ public class BRMSPush { String fileName = "rule.jar"; try { website = new URL(artifact.getResourceURI()); - ReadableByteChannel rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(fileName); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - extractJar(fileName, dirName); - new File(fileName).delete(); - } catch (IOException e) { - LOGGER.error("Error while downloading the project to File System. " + e.getMessage(), e); + try( ReadableByteChannel rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(fileName)){ + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + extractJar(fileName, dirName); + new File(fileName).delete(); + }catch (IOException e) { + LOGGER.error("Error while downloading the project to File System. " + e.getMessage(), e); + } + + } catch (IOException e1) { + LOGGER.error("Error while retrieve the artifact. " + e1.getMessage(), e1); } } - private void extractJar(String jarFileName, String artifactId) throws IOException { - JarFile jar = new JarFile(jarFileName); +private void extractJar(String jarFileName, String artifactId){ + try (JarFile jar = new JarFile(jarFileName)) { Enumeration enumEntries = jar.entries(); while (enumEntries.hasMoreElements()) { JarEntry file = (JarEntry) enumEntries.nextElement(); @@ -574,36 +595,38 @@ public class BRMSPush { String fileName = file.getName().substring(file.getName().lastIndexOf("/") + 1); if (file.getName().endsWith(".drl")) { String path = PROJECTSLOCATION + File.separator + artifactId + File.separator + "src" + File.separator - + "main" + File.separator + "resources" + File.separator + "rules"; + + "main" + File.separator + RESOURCES + File.separator + RULES; new File(path).mkdirs(); if (syncFlag && policyMap.containsKey(fileName.replace(".drl", ""))) { f = new File(path + File.separator + fileName); } else { f = new File(path + File.separator + fileName); } - } else if (file.getName().endsWith("pom.xml")) { + } else if (file.getName().endsWith(POM_XML_FILE)) { String path = PROJECTSLOCATION + File.separator + artifactId; new File(path).mkdirs(); f = new File(path + File.separator + fileName); - } else if (file.getName().endsWith("kmodule.xml")) { + } else if (file.getName().endsWith(KMODULE_XML_FILE)) { String path = PROJECTSLOCATION + File.separator + artifactId + File.separator + "src" + File.separator - + "main" + File.separator + "resources" + File.separator + "META-INF"; + + "main" + File.separator + RESOURCES + File.separator + META_INF; new File(path).mkdirs(); f = new File(path + File.separator + fileName); } if (f != null) { - InputStream is = jar.getInputStream(file); - FileOutputStream fos = new FileOutputStream(f); + try (InputStream is = jar.getInputStream(file); FileOutputStream fos = new FileOutputStream(f)) { while (is.available() > 0) { fos.write(is.read()); } - fos.close(); - is.close(); LOGGER.info(fileName + " Created.."); + } catch (IOException e) { + LOGGER.info("exception Occured" + e); + } } - } - jar.close(); - } + } + } catch (IOException e) { + LOGGER.info("exception Occured" + e); + } + } private NexusArtifact getLatestArtifactFromNexus(String selectedName) { List artifacts = getArtifactFromNexus(selectedName, null); @@ -683,13 +706,13 @@ public class BRMSPush { } private void setVersion(String selectedName) { - String newVersion = "0.1.0"; + String newVersion = VERSION_0_1_0; createFlag = false; NexusArtifact artifact = getLatestArtifactFromNexus(selectedName); if (artifact != null) { newVersion = incrementVersion(artifact.getVersion()); } - if ("0.1.0".equals(newVersion)) { + if (VERSION_0_1_0.equals(newVersion)) { createFlag = true; } setVersion(newVersion, selectedName); @@ -728,8 +751,6 @@ public class BRMSPush { // Invoke their Maven process. try { im.startTransaction(); - } catch (AdministrativeStateException e) { - LOGGER.error("Error while starting Transaction " + e); } catch (Exception e) { LOGGER.error("Error while starting Transaction " + e); } @@ -739,11 +760,12 @@ public class BRMSPush { InvocationResult result = null; String group = entry.getKey(); try { + LOGGER.info("PushRules: ModifiedGroups, Key: " + group + ", Value: " + entry.getValue()); InvocationRequest request = new DefaultInvocationRequest(); setVersion(group); createPom(group); request.setPomFile(new File( - PROJECTSLOCATION + File.separator + getArtifactID(group) + File.separator + "pom.xml")); + PROJECTSLOCATION + File.separator + getArtifactID(group) + File.separator + POM_XML_FILE)); request.setGoals(Arrays.asList(GOALS)); Invoker invoker = new DefaultInvoker(); result = invoker.execute(request); @@ -827,9 +849,9 @@ public class BRMSPush { ControllerPOJO controllerPOJO = new ControllerPOJO(); controllerPOJO.setName(controllerName); controllerPOJO.setOperation("lock"); - List controllers = new ArrayList<>(); - controllers.add(controllerPOJO); - sendNotification(controllers); + List controllerPojos = new ArrayList<>(); + controllerPojos.add(controllerPOJO); + sendNotification(controllerPojos); } private void sendNotification(List controllers) { @@ -908,7 +930,7 @@ public class BRMSPush { Writer writer = null; try { writer = WriterFactory.newXmlWriter( - new File(PROJECTSLOCATION + File.separator + getArtifactID(name) + File.separator + "pom.xml")); + new File(PROJECTSLOCATION + File.separator + getArtifactID(name) + File.separator + POM_XML_FILE)); MavenXpp3Writer pomWriter = new MavenXpp3Writer(); pomWriter.write(writer, model); } catch (Exception e) { @@ -951,59 +973,59 @@ public class BRMSPush { String version = StringEscapeUtils.escapeJava(brmsdependencyversion); Dependency demoDependency = new Dependency(); - demoDependency.setGroupId("org.onap.policy.drools-applications"); - demoDependency.setArtifactId("demo"); + demoDependency.setGroupId(DROOLS_APPS_TEMPLATE_GROUP); + demoDependency.setArtifactId("template.demo"); demoDependency.setVersion(version); dependencyList.add(demoDependency); Dependency controlloopDependency = new Dependency(); - controlloopDependency.setGroupId("org.onap.policy.drools-applications"); + controlloopDependency.setGroupId(DROOLS_APPS_MODEL_GROUP); controlloopDependency.setArtifactId("events"); controlloopDependency.setVersion(version); dependencyList.add(controlloopDependency); Dependency restDependency = new Dependency(); - restDependency.setGroupId("org.onap.policy.drools-applications"); - restDependency.setArtifactId("rest"); + restDependency.setGroupId(DROOLS_APPS_MODEL_GROUP); + restDependency.setArtifactId("controlloop.common.model-impl.rest"); restDependency.setVersion(version); dependencyList.add(restDependency); Dependency appcDependency = new Dependency(); - appcDependency.setGroupId("org.onap.policy.drools-applications"); - appcDependency.setArtifactId("appc"); + appcDependency.setGroupId(DROOLS_APPS_MODEL_GROUP); + appcDependency.setArtifactId("controlloop.common.model-impl.appc"); appcDependency.setVersion(version); dependencyList.add(appcDependency); Dependency aaiDependency = new Dependency(); - aaiDependency.setGroupId("org.onap.policy.drools-applications"); - aaiDependency.setArtifactId("aai"); + aaiDependency.setGroupId(DROOLS_APPS_MODEL_GROUP); + aaiDependency.setArtifactId("controlloop.common.model-impl.aai"); aaiDependency.setVersion(version); dependencyList.add(aaiDependency); Dependency msoDependency = new Dependency(); - msoDependency.setGroupId("org.onap.policy.drools-applications"); - msoDependency.setArtifactId("mso"); + msoDependency.setGroupId(DROOLS_APPS_MODEL_GROUP); + msoDependency.setArtifactId("controlloop.common.model-impl.so"); msoDependency.setVersion(version); dependencyList.add(msoDependency); Dependency trafficgeneratorDependency = new Dependency(); - trafficgeneratorDependency.setGroupId("org.onap.policy.drools-applications"); - trafficgeneratorDependency.setArtifactId("trafficgenerator"); + trafficgeneratorDependency.setGroupId(DROOLS_APPS_MODEL_GROUP); + trafficgeneratorDependency.setArtifactId("controlloop.common.model-impl.trafficgenerator"); trafficgeneratorDependency.setVersion(version); dependencyList.add(trafficgeneratorDependency); return dependencyList; } private void createProject(String path, String ksessionName) { - new File(path + File.separator + "rules").mkdirs(); - new File(path + File.separator + "META-INF").mkdirs(); - if (!Files.exists(Paths.get(path + File.separator + "META-INF" + File.separator + "kmodule.xml"))) { + new File(path + File.separator + RULES).mkdirs(); + new File(path + File.separator + META_INF).mkdirs(); + if (!Files.exists(Paths.get(path + File.separator + META_INF + File.separator + KMODULE_XML_FILE))) { // Hard coding XML for PDP Drools to accept our Rules. String xml = "" + "\n" + "" + "\n" + "" + "\n" + "" + "\n" + ""; - copyDataToFile(path + File.separator + "META-INF" + File.separator + "kmodule.xml", xml); + copyDataToFile(path + File.separator + META_INF + File.separator + KMODULE_XML_FILE, xml); } } @@ -1019,20 +1041,21 @@ public class BRMSPush { private void readGroups(Properties config) throws PolicyException { String[] groupNames; - if (!config.containsKey("groupNames") || config.getProperty("groupNames")==null){ + String groupNamesError = "groupNames property is missing or empty from the property file "; + if (!config.containsKey(GROUP_NAMES) || config.getProperty(GROUP_NAMES)==null){ throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE - + "groupNames property is missing or empty from the property file "); + + groupNamesError); } - if (config.getProperty("groupNames").contains(",")) { - groupNames = config.getProperty("groupNames").replaceAll(" ", "").split(","); + if (config.getProperty(GROUP_NAMES).contains(",")) { + groupNames = config.getProperty(GROUP_NAMES).replaceAll(" ", "").split(","); } else { - groupNames = new String[] { config.getProperty("groupNames").replaceAll(" ", "") }; + groupNames = new String[] { config.getProperty(GROUP_NAMES).replaceAll(" ", "") }; } if (groupNames == null || groupNames.length == 0) { LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE - + "groupNames property is missing or empty from the property file "); + + groupNamesError); throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE - + "groupNames property is missing or empty from the property file "); + + groupNamesError); } groupMap = new HashMap<>(); for (int counter = 0; counter < groupNames.length; counter++) { @@ -1100,7 +1123,7 @@ public class BRMSPush { private void getNameAndSetRemove(String controllerName, String policyName) { String artifactName = getArtifactID(controllerName); String ruleFolder = PROJECTSLOCATION + File.separator + artifactName + File.separator + "src" + File.separator - + "main" + File.separator + "resources" + File.separator + "rules"; + + "main" + File.separator + RESOURCES + File.separator + RULES; File file = new File(ruleFolder + File.separator + policyName + ".drl"); if (file.delete()) { LOGGER.info("Deleted File.. " + file.getAbsolutePath()); @@ -1151,7 +1174,7 @@ public class BRMSPush { } } - public int URLListSize() { + public int urlListSize() { if (repURLs != null) { return repURLs.size(); } else