diff options
author | 2018-08-13 17:18:45 +0000 | |
---|---|---|
committer | 2018-08-13 17:18:45 +0000 | |
commit | a54ec0fce0cb5032d373e811d830cdd027b0dd9c (patch) | |
tree | 0b72b99dbdcf19a1f45f586da860dc442c4b4958 /ONAP-PAP-REST/src/main/java/org | |
parent | 6ed1731fa2ce340d745dc2d39ffc6a066f50fbc2 (diff) | |
parent | 4c38ea083e71d3be81b57a2c865572837fb72379 (diff) |
Merge "Fix comparison issues in onap pap rest"
Diffstat (limited to 'ONAP-PAP-REST/src/main/java/org')
13 files changed, 2461 insertions, 2067 deletions
diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java index 4406ad3da..680c4d579 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java @@ -7,9 +7,9 @@ * 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. @@ -41,6 +41,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Properties; import java.util.Scanner; import java.util.Set; @@ -108,14 +109,15 @@ import com.google.common.base.Splitter; */ @WebServlet( description = "Implements the XACML PAP RESTful API.", - urlPatterns = { "/" }, - loadOnStartup=1, + urlPatterns = {"/"}, + loadOnStartup = 1, initParams = { - @WebInitParam(name = "XACML_PROPERTIES_NAME", value = "xacml.pap.properties", description = "The location of the properties file holding configuration information.") + @WebInitParam(name = "XACML_PROPERTIES_NAME", value = "xacml.pap.properties", + description = "The location of the properties file holding configuration information.") }) public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeListener, Runnable { private static final long serialVersionUID = 1L; - private static final Logger LOGGER = FlexLogger.getLogger(XACMLPapServlet.class); + private static final Logger LOGGER = FlexLogger.getLogger(XACMLPapServlet.class); // audit (transaction) LOGGER private static final Logger auditLogger = FlexLogger.getLogger("auditLogger"); //Persistence Unit for JPA @@ -210,32 +212,42 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList */ setCommonProperties(); String papSiteName = XACMLProperties.getProperty(XACMLRestProperties.PAP_SITE_NAME); - if(papSiteName == null){ - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papSiteName property entry"); + if (papSiteName == null) { + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, "XACMLPapServlet", + " ERROR: Bad papSiteName property entry"); throw new PAPException("papSiteName is null"); } String papNodeType = XACMLProperties.getProperty(XACMLRestProperties.PAP_NODE_TYPE); - if(papNodeType == null){ - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papNodeType property entry"); + if (papNodeType == null) { + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, "XACMLPapServlet", + " ERROR: Bad papNodeType property entry"); throw new PAPException("papNodeType is null"); } //Integer will throw an exception of anything is missing or unrecognized int papTransWait = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_WAIT)); - int papTransTimeout = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_TIMEOUT)); - int papAuditTimeout = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_AUDIT_TIMEOUT)); + int papTransTimeout = + Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_TIMEOUT)); + int papAuditTimeout = + Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_AUDIT_TIMEOUT)); //Boolean will default to false if anything is missing or unrecognized - boolean papAuditFlag = Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_RUN_AUDIT_FLAG)); - boolean papFileSystemAudit = Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_AUDIT_FLAG)); + boolean papAuditFlag = + Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_RUN_AUDIT_FLAG)); + boolean papFileSystemAudit = + Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_AUDIT_FLAG)); String papDependencyGroups = XACMLProperties.getProperty(XACMLRestProperties.PAP_DEPENDENCY_GROUPS); - if(papDependencyGroups == null){ + if (papDependencyGroups == null) { throw new PAPException("papDependencyGroups is null"); } setPAPDependencyGroups(papDependencyGroups); //Integer will throw an exception of anything is missing or unrecognized - int fpMonitorInterval = Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.FP_MONITOR_INTERVAL)); - int failedCounterThreshold = Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD)); - int testTransInterval = Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.TEST_TRANS_INTERVAL)); - int writeFpcInterval = Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.WRITE_FPC_INTERVAL)); + int fpMonitorInterval = + Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.FP_MONITOR_INTERVAL)); + int failedCounterThreshold = + Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD)); + int testTransInterval = + Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.TEST_TRANS_INTERVAL)); + int writeFpcInterval = + Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.WRITE_FPC_INTERVAL)); LOGGER.debug("\n\n\n**************************************" + "\n*************************************" + "\n" @@ -268,15 +280,17 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList + "properties = " + properties + "\n\n**************************************"); } catch (IOException e) { - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "XACMLPapServlet", " Error loading properties with: " - + "XACMLProperties.getProperties()"); + PolicyLogger + .error(MessageCodes.ERROR_DATA_ISSUE, e, "XACMLPapServlet", " Error loading properties with: " + + "XACMLProperties.getProperties()"); throw new ServletException(e.getMessage(), e.getCause()); } // Create an IntegrityMonitor - if(properties.getProperty(PERSISTENCE_JDBC_PWD) != null ){ - properties.setProperty(PERSISTENCE_JDBC_PWD, CryptoUtils.decryptTxtNoExStr(properties.getProperty(PERSISTENCE_JDBC_PWD, ""))); + if (properties.getProperty(PERSISTENCE_JDBC_PWD) != null) { + properties.setProperty(PERSISTENCE_JDBC_PWD, + CryptoUtils.decryptTxtNoExStr(properties.getProperty(PERSISTENCE_JDBC_PWD, ""))); } - im = IntegrityMonitor.getInstance(papResourceName,properties); + im = IntegrityMonitor.getInstance(papResourceName, properties); // Create an IntegrityAudit ia = new IntegrityAudit(papResourceName, AUDIT_PAP_PERSISTENCE_UNIT, properties); ia.startAuditThread(); @@ -288,7 +302,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList //Create the policyDBDao setPolicyDBDao(); // Load our PAP engine, first create a factory - ONAPPapEngineFactory factory = ONAPPapEngineFactory.newInstance(XACMLProperties.getProperty(XACMLProperties.PROP_PAP_PAPENGINEFACTORY)); + ONAPPapEngineFactory factory = ONAPPapEngineFactory + .newInstance(XACMLProperties.getProperty(XACMLProperties.PROP_PAP_PAPENGINEFACTORY)); // The factory knows how to go about creating a PAP Engine setPAPEngine((PAPPolicyEngine) factory.newEngine()); PolicyDBDaoTransaction addNewGroup = null; @@ -311,7 +326,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } } policyDBDao.setPapEngine((PAPPolicyEngine) XACMLPapServlet.papEngine); - if (Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_RUN_AUDIT_FLAG))){ + if (Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_RUN_AUDIT_FLAG))) { /* * Auditing the local File System groups to be in sync with the Database */ @@ -324,18 +339,19 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList //get the current filesystem group and update from the database if needed StdPDPGroup group = (StdPDPGroup) papEngine.getDefaultGroup(); StdPDPGroup updatedGroup = policyDBDao.auditLocalFileSystem(group); - if(updatedGroup!=null) { + if (updatedGroup != null) { papEngine.updateGroup(updatedGroup); - } + } LOGGER.info("PapServlet: updated group is " + papEngine.getDefaultGroup().toString()); - + //release the transaction lock auditTrans.close(); } // Sanity check for URL. if (XACMLPapServlet.papURL == null) { - throw new PAPException("The property " + XACMLRestProperties.PROP_PAP_URL + " is not valid: " + XACMLPapServlet.papURL); + throw new PAPException("The property " + XACMLRestProperties.PROP_PAP_URL + " is not valid: " + + XACMLPapServlet.papURL); } // Configurable - have the PAP servlet initiate sending the latest PDP policy/pip configuration // to all its known PDP nodes. @@ -347,10 +363,12 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } catch (FactoryException | PAPException e) { PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", " Failed to create engine"); - throw new ServletException (XACMLErrorConstants.ERROR_SYSTEM_ERROR + "PAP not initialized; error: "+e); + throw new ServletException(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "PAP not initialized; error: " + e); } catch (Exception e) { - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", " Failed to create engine - unexpected error"); - throw new ServletException (XACMLErrorConstants.ERROR_SYSTEM_ERROR + "PAP not initialized; unexpected error: "+e); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", + " Failed to create engine - unexpected error"); + throw new ServletException( + XACMLErrorConstants.ERROR_SYSTEM_ERROR + "PAP not initialized; unexpected error: " + e); } } @@ -359,7 +377,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList initiateThread.start(); } - private static void mapperWriteValue(ObjectMapper mapper, HttpServletResponse response, Object value) { + private static void mapperWriteValue(ObjectMapper mapper, HttpServletResponse response, Object value) { try { mapper.writeValue(response.getOutputStream(), value); } catch (Exception e) { @@ -377,14 +395,15 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList try { policyDBDao = PolicyDBDao.getPolicyDBDaoInstance(getEmf()); } catch (Exception e) { - throw new ServletException("Unable to Create Policy DBDao Instance",e); + throw new ServletException("Unable to Create Policy DBDao Instance", e); } } private static void setEMF(Properties properties) throws ServletException { emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT, properties); if (emf == null) { - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Error creating entity manager factory with persistence unit: " + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + + " Error creating entity manager factory with persistence unit: " + PERSISTENCE_UNIT); throw new ServletException("Unable to create Entity Manager Factory"); } @@ -399,24 +418,26 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } private static void setPAPDependencyGroups(String papDependencyGroups) throws PAPException { - try{ + try { //Now we have flattened the array into a simple comma-separated list papDependencyGroupsFlatArray = papDependencyGroups.split("[;,]"); //clean up the entries - for (int i = 0 ; i < papDependencyGroupsFlatArray.length ; i ++){ + for (int i = 0; i < papDependencyGroupsFlatArray.length; i++) { papDependencyGroupsFlatArray[i] = papDependencyGroupsFlatArray[i].trim(); } - try{ - if(XACMLProperties.getProperty(XACMLRestProperties.PAP_INTEGRITY_AUDIT_PERIOD_SECONDS) != null){ - papIntegrityAuditPeriodSeconds = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PAP_INTEGRITY_AUDIT_PERIOD_SECONDS).trim()); + try { + if (XACMLProperties.getProperty(XACMLRestProperties.PAP_INTEGRITY_AUDIT_PERIOD_SECONDS) != null) { + papIntegrityAuditPeriodSeconds = Integer.parseInt( + XACMLProperties.getProperty(XACMLRestProperties.PAP_INTEGRITY_AUDIT_PERIOD_SECONDS).trim()); } - }catch(Exception e){ + } catch (Exception e) { String msg = "integrity_audit_period_seconds "; LOGGER.error("\n\nERROR: " + msg + "Bad property entry: " + e.getMessage() + "\n"); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "XACMLPapServlet", " ERROR: " + msg +"Bad property entry"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "XACMLPapServlet", + " ERROR: " + msg + "Bad property entry"); throw e; } - }catch(Exception e){ + } catch (Exception e) { PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "XACMLPapServlet", " ERROR: Bad property entry"); throw new PAPException(e); } @@ -426,46 +447,52 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList setConfigHome(); setActionHome(); papDbDriver = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_DRIVER); - if(papDbDriver == null){ - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papDbDriver property entry"); + if (papDbDriver == null) { + PolicyLogger + .error(MessageCodes.ERROR_DATA_ISSUE, "XACMLPapServlet", " ERROR: Bad papDbDriver property entry"); throw new PAPException("papDbDriver is null"); } setPapDbDriver(papDbDriver); papDbUrl = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_URL); - if(papDbUrl == null){ - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papDbUrl property entry"); + if (papDbUrl == null) { + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, "XACMLPapServlet", " ERROR: Bad papDbUrl property entry"); throw new PAPException("papDbUrl is null"); } setPapDbUrl(papDbUrl); papDbUser = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_USER); - if(papDbUser == null){ - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papDbUser property entry"); + if (papDbUser == null) { + PolicyLogger + .error(MessageCodes.ERROR_DATA_ISSUE, "XACMLPapServlet", " ERROR: Bad papDbUser property entry"); throw new PAPException("papDbUser is null"); } setPapDbUser(papDbUser); - papDbPassword = CryptoUtils.decryptTxtNoExStr(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_PASSWORD, "")); - if(papDbPassword == null){ - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papDbPassword property entry"); + papDbPassword = CryptoUtils + .decryptTxtNoExStr(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_PASSWORD, "")); + if (papDbPassword == null) { + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, "XACMLPapServlet", + " ERROR: Bad papDbPassword property entry"); throw new PAPException("papDbPassword is null"); } setPapDbPassword(papDbPassword); papResourceName = XACMLProperties.getProperty(XACMLRestProperties.PAP_RESOURCE_NAME); - if(papResourceName == null){ - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papResourceName property entry"); + if (papResourceName == null) { + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, "XACMLPapServlet", + " ERROR: Bad papResourceName property entry"); throw new PAPException("papResourceName is null"); } environment = XACMLProperties.getProperty("ENVIRONMENT", "DEVL"); //Micro Service Properties - msOnapName=XACMLProperties.getProperty("xacml.policy.msOnapName"); + msOnapName = XACMLProperties.getProperty("xacml.policy.msOnapName"); setMsOnapName(msOnapName); - msPolicyName=XACMLProperties.getProperty("xacml.policy.msPolicyName"); + msPolicyName = XACMLProperties.getProperty("xacml.policy.msPolicyName"); setMsPolicyName(msPolicyName); // PDPId File location XACMLPapServlet.pdpFile = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_IDFILE); if (XACMLPapServlet.pdpFile == null) { PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " The PDP Id Authentication File Property is not valid: " - + XACMLRestProperties.PROP_PDP_IDFILE); - throw new PAPException("The PDP Id Authentication File Property :"+ XACMLRestProperties.PROP_PDP_IDFILE+ " is not Valid. "); + + XACMLRestProperties.PROP_PDP_IDFILE); + throw new PAPException("The PDP Id Authentication File Property :" + XACMLRestProperties.PROP_PDP_IDFILE + + " is not Valid. "); } } @@ -481,7 +508,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList /** * @see Servlet#destroy() - * + * <p> * Depending on how this servlet is run, we may or may not care about cleaning up the resources. * For now we assume that we do care. */ @@ -514,16 +541,17 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList /** * Called by: - * - PDP nodes to register themselves with the PAP, and - * - Admin Console to make changes in the PDP Groups. + * - PDP nodes to register themselves with the PAP, and + * - Admin Console to make changes in the PDP Groups. * * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { ONAPLoggingContext loggingContext = ONAPLoggingUtils.getLoggingContextForRequest(request, baseLoggingContext); loggingContext.transactionStarted(); loggingContext.setServiceName("PAP.post"); - if ((loggingContext.getRequestID() == null) || (loggingContext.getRequestID() == "")){ + if ((loggingContext.getRequestID() == null) || (Objects.equals(loggingContext.getRequestID(), ""))) { UUID requestID = UUID.randomUUID(); loggingContext.setRequestID(requestID.toString()); PolicyLogger.info("requestID not provided in call to XACMLPapSrvlet (doPost) so we generated one"); @@ -536,18 +564,18 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList im.startTransaction(); loggingContext.metricEnded(); PolicyLogger.metrics("XACMLPapServlet doPost im startTransaction"); - } catch (AdministrativeStateException ae){ + } catch (AdministrativeStateException ae) { String message = "POST interface called for PAP " + papResourceName + " but it has an Administrative" + " state of " + im.getStateManager().getAdminState() - + "\n Exception Message: " + PolicyUtils.CATCH_EXCEPTION; + + "\n Exception Message: " + PolicyUtils.CATCH_EXCEPTION; LOGGER.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message, ae); loggingContext.metricEnded(); PolicyLogger.metrics("XACMLPapServlet doPost im startTransaction"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return; - }catch (StandbyStatusException se) { + } catch (StandbyStatusException se) { String message = "POST interface called for PAP " + papResourceName + " but it has a Standby Status" + " of " + im.getStateManager().getStandbyStatus() + "\n Exception Message: " + se.getMessage(); @@ -556,7 +584,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.metrics("XACMLPapServlet doPost im startTransaction"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return; } catch (IntegrityMonitorException e) { String message = "POST interface called for PAP " + papResourceName + " but an exception occurred" @@ -566,7 +594,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.metrics("XACMLPapServlet doPost im startTransaction"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return; } try { @@ -579,16 +607,16 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList request.getInputStream(); String groupId = request.getParameter("groupId"); String apiflag = request.getParameter("apiflag"); - if(groupId != null) { + if (groupId != null) { // Is this from the Admin Console or API? - if(apiflag!=null && apiflag.equalsIgnoreCase("api")) { + if (apiflag != null && apiflag.equalsIgnoreCase("api")) { // this is from the API so we need to check the client credentials before processing the request - if(!authorizeRequest(request)){ + if (!authorizeRequest(request)) { String message = "PEP not Authorized for making this Request!!"; PolicyLogger.error(MessageCodes.ERROR_PERMISSIONS + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_FORBIDDEN, message); + setResponseError(response, HttpServletResponse.SC_FORBIDDEN, message); im.endTransaction(); return; } @@ -614,11 +642,13 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList if (pdp == null) { LOGGER.info("Unknown PDP: " + id); // Check PDP ID - if(CheckPDP.validateID(id)){ + if (CheckPDP.validateID(id)) { pdpTransaction = policyDBDao.getNewTransaction(); try { - pdpTransaction.addPdpToGroup(id, XACMLPapServlet.papEngine.getDefaultGroup().getId(), id, "Registered on first startup", Integer.parseInt(jmxport), "PDP autoregister"); - XACMLPapServlet.papEngine.newPDP(id, XACMLPapServlet.papEngine.getDefaultGroup(), id, "Registered on first startup", Integer.parseInt(jmxport)); + pdpTransaction.addPdpToGroup(id, XACMLPapServlet.papEngine.getDefaultGroup().getId(), id, + "Registered on first startup", Integer.parseInt(jmxport), "PDP autoregister"); + XACMLPapServlet.papEngine.newPDP(id, XACMLPapServlet.papEngine.getDefaultGroup(), id, + "Registered on first startup", Integer.parseInt(jmxport)); } catch (NullPointerException | PAPException | IllegalArgumentException | IllegalStateException | PersistenceException | PolicyDBException e) { pdpTransaction.rollbackTransaction(); String message = "Failed to create new PDP for id: " + id; @@ -630,13 +660,13 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList return; } // get the PDP we just created - try{ + try { pdp = XACMLPapServlet.papEngine.getPDP(id); - }catch(PAPException e){ + } catch (PAPException e) { LOGGER.error(e); } if (pdp == null) { - if(pdpTransaction != null){ + if (pdpTransaction != null) { pdpTransaction.rollbackTransaction(); } String message = "Failed to create new PDP for id: " + id; @@ -648,42 +678,47 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList return; } } else { - String message = "PDP is Unauthorized to Connect to PAP: "+ id; + String message = "PDP is Unauthorized to Connect to PAP: " + id; loggingContext.transactionEnded(); PolicyLogger.error(MessageCodes.ERROR_PERMISSIONS + " " + message); - setResponseError(response, HttpServletResponse.SC_UNAUTHORIZED, "PDP not Authorized to connect to this PAP. Please contact the PAP Admin for registration."); + setResponseError(response, HttpServletResponse.SC_UNAUTHORIZED, + "PDP not Authorized to connect to this PAP. Please contact the PAP Admin for registration" + + "."); PolicyLogger.audit("Transaction Failed - See Error.log"); im.endTransaction(); return; } - try{ + try { loggingContext.metricStarted(); pdpTransaction.commitTransaction(); loggingContext.metricEnded(); PolicyLogger.metrics("XACMLPapServlet doPost commitTransaction"); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", "Could not commit transaction to put pdp in the database"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", + "Could not commit transaction to put pdp in the database"); } } - if (jmxport != null && jmxport != ""){ - try{ + if (jmxport != null && !Objects.equals(jmxport, "")) { + try { ((StdPDP) pdp).setJmxPort(Integer.valueOf(jmxport)); - }catch(NumberFormatException e){ + } catch (NumberFormatException e) { LOGGER.error(e); } } // Get the PDP's Group - OnapPDPGroup group =null; - try{ - group= XACMLPapServlet.papEngine.getPDPGroup((OnapPDP) pdp); - }catch(PAPException e){ + OnapPDPGroup group = null; + try { + group = XACMLPapServlet.papEngine.getPDPGroup((OnapPDP) pdp); + } catch (PAPException e) { LOGGER.error(e); } if (group == null) { - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW + " PDP not associated with any group, even the default"); + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW + + " PDP not associated with any group, even the default"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response, HttpServletResponse.SC_UNAUTHORIZED, "PDP not associated with any group, even the default"); + setResponseError(response, HttpServletResponse.SC_UNAUTHORIZED, + "PDP not associated with any group, even the default"); im.endTransaction(); return; } @@ -693,9 +728,9 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList Properties pipconfig = group.getPipConfigProperties(); // Get the current policy/pip configuration that the PDP has Properties pdpProperties = new Properties(); - try{ + try { pdpProperties.load(request.getInputStream()); - }catch(IOException e){ + } catch (IOException e) { LOGGER.error(e); } LOGGER.info("PDP Current Properties: " + pdpProperties.toString()); @@ -712,33 +747,33 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList // retrieve them. this.populatePolicyURL(request.getRequestURL(), policies); // Copy the properties to the output stream - try{ + try { policies.store(response.getOutputStream(), ""); - }catch(IOException e){ + } catch (IOException e) { LOGGER.error(e); } } if (pipconfig != null) { // Copy the properties to the output stream - try{ + try { pipconfig.store(response.getOutputStream(), ""); - }catch(IOException e){ + } catch (IOException e) { LOGGER.error(e); } } // We are good - and we are sending them information response.setStatus(HttpServletResponse.SC_OK); - try{ + try { setPDPSummaryStatus(pdp, PDPStatus.Status.OUT_OF_SYNCH); - }catch(PAPException e){ + } catch (PAPException e) { LOGGER.error(e); } } else { // Tell them they are good response.setStatus(HttpServletResponse.SC_NO_CONTENT); - try{ + try { setPDPSummaryStatus(pdp, PDPStatus.Status.UP_TO_DATE); - }catch(PAPException e){ + } catch (PAPException e) { LOGGER.error(e); } } @@ -751,7 +786,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList auditLogger.info("Success"); PolicyLogger.audit("Transaction Ended Successfully"); } catch (PAPException | IOException | NumberFormatException e) { - if(pdpTransaction != null){ + if (pdpTransaction != null) { pdpTransaction.rollbackTransaction(); } LOGGER.debug(XACMLErrorConstants.ERROR_PROCESS_FLOW + "POST exception: " + e, e); @@ -767,233 +802,237 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList im.endTransaction(); } - private void setResponseError(HttpServletResponse response,int responseCode, String message) { + private void setResponseError(HttpServletResponse response, int responseCode, String message) { try { - if(message != null && !message.isEmpty()){ - response.sendError(responseCode, message); + if (message != null && !message.isEmpty()) { + response.sendError(responseCode, message); } } catch (IOException e) { LOGGER.error("Error setting Error response Header ", e); } - return; } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { ONAPLoggingContext loggingContext = ONAPLoggingUtils.getLoggingContextForRequest(request, baseLoggingContext); loggingContext.transactionStarted(); loggingContext.setServiceName("PAP.get"); - if ((loggingContext.getRequestID() == null) || (loggingContext.getRequestID() == "")){ + if ((loggingContext.getRequestID() == null) || (Objects.equals(loggingContext.getRequestID(), ""))) { UUID requestID = UUID.randomUUID(); loggingContext.setRequestID(requestID.toString()); PolicyLogger.info("requestID not provided in call to XACMLPapSrvlet (doGet) so we generated one"); } else { PolicyLogger.info("requestID was provided in call to XACMLPapSrvlet (doGet)"); } - loggingContext.metricStarted(); - XACMLRest.dumpRequest(request); - loggingContext.metricEnded(); - PolicyLogger.metrics("XACMLPapServlet doGet dumpRequest"); - String pathInfo = request.getRequestURI(); - LOGGER.info("path info: " + pathInfo); - if (pathInfo != null){ - //DO NOT do a im.startTransaction for the test request - if (pathInfo.equals("/pap/test")) { - try { - testService(loggingContext, response); - } catch (IOException e) { - LOGGER.debug(e); - } - return; + loggingContext.metricStarted(); + XACMLRest.dumpRequest(request); + loggingContext.metricEnded(); + PolicyLogger.metrics("XACMLPapServlet doGet dumpRequest"); + String pathInfo = request.getRequestURI(); + LOGGER.info("path info: " + pathInfo); + if (pathInfo != null) { + //DO NOT do a im.startTransaction for the test request + if (pathInfo.equals("/pap/test")) { + try { + testService(loggingContext, response); + } catch (IOException e) { + LOGGER.debug(e); } - } - //This im.startTransaction() covers all other Get transactions - try { - loggingContext.metricStarted(); - im.startTransaction(); - loggingContext.metricEnded(); - PolicyLogger.metrics("XACMLPapServlet doGet im startTransaction"); - } catch (AdministrativeStateException ae){ - String message = "GET interface called for PAP " + papResourceName + " but it has an Administrative" - + " state of " + im.getStateManager().getAdminState() - + "\n Exception Message: " + ae.getMessage(); - LOGGER.info(message, ae); - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message); - loggingContext.transactionEnded(); - PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); - return; - }catch (StandbyStatusException se) { - String message = "GET interface called for PAP " + papResourceName + " but it has a Standby Status" - + " of " + im.getStateManager().getStandbyStatus() - + "\n Exception Message: " + se.getMessage(); - LOGGER.info(message, se); - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message); - loggingContext.transactionEnded(); - PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); - return; - } catch (IntegrityMonitorException e) { - String message = "GET interface called for PAP " + papResourceName + " but an exception occurred" - + "\n Exception Message: " + e.getMessage(); - LOGGER.info(message, e); - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message); - loggingContext.transactionEnded(); - PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return; } - // Request from the API to get the gitPath - String apiflag = request.getParameter("apiflag"); - if (apiflag!=null) { - if(authorizeRequest(request)){ - APIRequestHandler apiRequestHandler = new APIRequestHandler(); - try{ - loggingContext.metricStarted(); - apiRequestHandler.doGet(request,response, apiflag); - loggingContext.metricEnded(); - PolicyLogger.metrics("XACMLPapServlet doGet apiRequestHandler doGet"); - }catch(IOException e){ - LOGGER.error(e); - } - loggingContext.transactionEnded(); - PolicyLogger.audit("Transaction Ended Successfully"); - im.endTransaction(); - return; - } else { - String message = "PEP not Authorized for making this Request!! \n Contact Administrator for this Scope. "; - PolicyLogger.error(MessageCodes.ERROR_PERMISSIONS + " " + message); - loggingContext.transactionEnded(); - PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response, HttpServletResponse.SC_FORBIDDEN, message); - im.endTransaction(); - return; - } - } - // Is this from the Admin Console? - String groupId = request.getParameter("groupId"); - if (groupId != null) { - // this is from the Admin Console, so handle separately - try{ + } + //This im.startTransaction() covers all other Get transactions + try { + loggingContext.metricStarted(); + im.startTransaction(); + loggingContext.metricEnded(); + PolicyLogger.metrics("XACMLPapServlet doGet im startTransaction"); + } catch (AdministrativeStateException ae) { + String message = "GET interface called for PAP " + papResourceName + " but it has an Administrative" + + " state of " + im.getStateManager().getAdminState() + + "\n Exception Message: " + ae.getMessage(); + LOGGER.info(message, ae); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message); + loggingContext.transactionEnded(); + PolicyLogger.audit("Transaction Failed - See Error.log"); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); + return; + } catch (StandbyStatusException se) { + String message = "GET interface called for PAP " + papResourceName + " but it has a Standby Status" + + " of " + im.getStateManager().getStandbyStatus() + + "\n Exception Message: " + se.getMessage(); + LOGGER.info(message, se); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message); + loggingContext.transactionEnded(); + PolicyLogger.audit("Transaction Failed - See Error.log"); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); + return; + } catch (IntegrityMonitorException e) { + String message = "GET interface called for PAP " + papResourceName + " but an exception occurred" + + "\n Exception Message: " + e.getMessage(); + LOGGER.info(message, e); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message); + loggingContext.transactionEnded(); + PolicyLogger.audit("Transaction Failed - See Error.log"); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); + return; + } + // Request from the API to get the gitPath + String apiflag = request.getParameter("apiflag"); + if (apiflag != null) { + if (authorizeRequest(request)) { + APIRequestHandler apiRequestHandler = new APIRequestHandler(); + try { loggingContext.metricStarted(); - doACGet(request, response, groupId, loggingContext); + apiRequestHandler.doGet(request, response, apiflag); loggingContext.metricEnded(); - PolicyLogger.metrics("XACMLPapServlet doGet doACGet"); - } catch(IOException e){ + PolicyLogger.metrics("XACMLPapServlet doGet apiRequestHandler doGet"); + } catch (IOException e) { LOGGER.error(e); } loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Ended Successfully"); im.endTransaction(); return; - } - // Get the PDP's ID - String id = this.getPDPID(request); - LOGGER.info("doGet from: " + id); - // Get the PDP Object - OnapPDP pdp = null; - try{ - pdp = XACMLPapServlet.papEngine.getPDP(id); - }catch(PAPException e){ - LOGGER.error(e); - } - // Is it known? - if (pdp == null) { - // Check if request came from localhost - if (request.getRemoteHost().equals("localhost") || - request.getRemoteHost().equals(request.getLocalAddr())) { - // Return status information - basically all the groups - loggingContext.setServiceName("PAP.getGroups"); - Set<OnapPDPGroup> groups = null; - try { - groups = papEngine.getOnapPDPGroups(); - } catch(PAPException e) { - LOGGER.debug(e); - PolicyLogger.error(MessageCodes.ERROR_UNKNOWN, e, "XACMLPapServlet", " GET exception"); - loggingContext.transactionEnded(); - PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); - im.endTransaction(); - return; - } - // convert response object to JSON and include in the response - mapperWriteValue(new ObjectMapper(), response, groups); - response.setHeader("content-type", "application/json"); - response.setStatus(HttpServletResponse.SC_OK); - loggingContext.transactionEnded(); - PolicyLogger.audit("Transaction Ended Successfully"); - im.endTransaction(); - return; - } - String message = "Unknown PDP: " + id + " from " + request.getRemoteHost() + " us: " + request.getLocalAddr(); + } else { + String message = + "PEP not Authorized for making this Request!! \n Contact Administrator for this Scope. "; PolicyLogger.error(MessageCodes.ERROR_PERMISSIONS + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response, HttpServletResponse.SC_UNAUTHORIZED, message); + setResponseError(response, HttpServletResponse.SC_FORBIDDEN, message); im.endTransaction(); return; } - loggingContext.setServiceName("PAP.getPolicy"); - // Get the PDP's Group - OnapPDPGroup group = null; + } + // Is this from the Admin Console? + String groupId = request.getParameter("groupId"); + if (groupId != null) { + // this is from the Admin Console, so handle separately try { - group = XACMLPapServlet.papEngine.getPDPGroup((OnapPDP) pdp); - } catch (PAPException e) { - LOGGER.error(e); - } - if (group == null) { - String message = "No group associated with pdp " + pdp.getId(); - LOGGER.warn(XACMLErrorConstants.ERROR_PERMISSIONS + message); - loggingContext.transactionEnded(); - PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response, HttpServletResponse.SC_UNAUTHORIZED, message); - im.endTransaction(); - return; - } - // Which policy do they want? - String policyId = request.getParameter("id"); - if (policyId == null) { - String message = "Did not specify an id for the policy"; - LOGGER.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + message); - loggingContext.transactionEnded(); - PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_NOT_FOUND, message); - im.endTransaction(); - return; - } - PDPPolicy policy = group.getPolicy(policyId); - if (policy == null) { - String message = "Unknown policy: " + policyId; - LOGGER.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + message); - loggingContext.transactionEnded(); - PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_NOT_FOUND, message); - im.endTransaction(); - return; - } - try{ - LOGGER.warn("PolicyDebugging: Policy Validity: " + policy.isValid() + "\n " - + "Policy Name : " + policy.getName() + "\n Policy URI: " + policy.getLocation().toString()); - } catch (PAPException| IOException e){ + loggingContext.metricStarted(); + doACGet(request, response, groupId, loggingContext); + loggingContext.metricEnded(); + PolicyLogger.metrics("XACMLPapServlet doGet doACGet"); + } catch (IOException e) { LOGGER.error(e); } - try (InputStream is = new FileInputStream(((StdPDPGroup)group).getDirectory().toString()+File.separator+policyId); OutputStream os = response.getOutputStream()) { - // Send the policy back - IOUtils.copy(is, os); + loggingContext.transactionEnded(); + PolicyLogger.audit("Transaction Ended Successfully"); + im.endTransaction(); + return; + } + // Get the PDP's ID + String id = this.getPDPID(request); + LOGGER.info("doGet from: " + id); + // Get the PDP Object + OnapPDP pdp = null; + try { + pdp = XACMLPapServlet.papEngine.getPDP(id); + } catch (PAPException e) { + LOGGER.error(e); + } + // Is it known? + if (pdp == null) { + // Check if request came from localhost + if (request.getRemoteHost().equals("localhost") || + request.getRemoteHost().equals(request.getLocalAddr())) { + // Return status information - basically all the groups + loggingContext.setServiceName("PAP.getGroups"); + Set<OnapPDPGroup> groups = null; + try { + groups = papEngine.getOnapPDPGroups(); + } catch (PAPException e) { + LOGGER.debug(e); + PolicyLogger.error(MessageCodes.ERROR_UNKNOWN, e, "XACMLPapServlet", " GET exception"); + loggingContext.transactionEnded(); + PolicyLogger.audit("Transaction Failed - See Error.log"); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); + im.endTransaction(); + return; + } + // convert response object to JSON and include in the response + mapperWriteValue(new ObjectMapper(), response, groups); + response.setHeader("content-type", "application/json"); response.setStatus(HttpServletResponse.SC_OK); loggingContext.transactionEnded(); - auditLogger.info("Success"); PolicyLogger.audit("Transaction Ended Successfully"); - } catch (IOException e) { - String message = "Failed to open policy id " + policyId; - LOGGER.debug(e); - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message); - loggingContext.transactionEnded(); - PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_NOT_FOUND, message); + im.endTransaction(); + return; } + String message = + "Unknown PDP: " + id + " from " + request.getRemoteHost() + " us: " + request.getLocalAddr(); + PolicyLogger.error(MessageCodes.ERROR_PERMISSIONS + " " + message); + loggingContext.transactionEnded(); + PolicyLogger.audit("Transaction Failed - See Error.log"); + setResponseError(response, HttpServletResponse.SC_UNAUTHORIZED, message); + im.endTransaction(); + return; + } + loggingContext.setServiceName("PAP.getPolicy"); + // Get the PDP's Group + OnapPDPGroup group = null; + try { + group = XACMLPapServlet.papEngine.getPDPGroup((OnapPDP) pdp); + } catch (PAPException e) { + LOGGER.error(e); + } + if (group == null) { + String message = "No group associated with pdp " + pdp.getId(); + LOGGER.warn(XACMLErrorConstants.ERROR_PERMISSIONS + message); + loggingContext.transactionEnded(); + PolicyLogger.audit("Transaction Failed - See Error.log"); + setResponseError(response, HttpServletResponse.SC_UNAUTHORIZED, message); + im.endTransaction(); + return; + } + // Which policy do they want? + String policyId = request.getParameter("id"); + if (policyId == null) { + String message = "Did not specify an id for the policy"; + LOGGER.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + message); + loggingContext.transactionEnded(); + PolicyLogger.audit("Transaction Failed - See Error.log"); + setResponseError(response, HttpServletResponse.SC_NOT_FOUND, message); + im.endTransaction(); + return; + } + PDPPolicy policy = group.getPolicy(policyId); + if (policy == null) { + String message = "Unknown policy: " + policyId; + LOGGER.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + message); + loggingContext.transactionEnded(); + PolicyLogger.audit("Transaction Failed - See Error.log"); + setResponseError(response, HttpServletResponse.SC_NOT_FOUND, message); + im.endTransaction(); + return; + } + try { + LOGGER.warn("PolicyDebugging: Policy Validity: " + policy.isValid() + "\n " + + "Policy Name : " + policy.getName() + "\n Policy URI: " + policy.getLocation().toString()); + } catch (PAPException | IOException e) { + LOGGER.error(e); + } + try (InputStream is = new FileInputStream( + ((StdPDPGroup) group).getDirectory().toString() + File.separator + policyId); + OutputStream os = response.getOutputStream()) { + // Send the policy back + IOUtils.copy(is, os); + response.setStatus(HttpServletResponse.SC_OK); + loggingContext.transactionEnded(); + auditLogger.info("Success"); + PolicyLogger.audit("Transaction Ended Successfully"); + } catch (IOException e) { + String message = "Failed to open policy id " + policyId; + LOGGER.debug(e); + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message); + loggingContext.transactionEnded(); + PolicyLogger.audit("Transaction Failed - See Error.log"); + setResponseError(response, HttpServletResponse.SC_NOT_FOUND, message); + } loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Ended"); im.endTransaction(); @@ -1002,11 +1041,12 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList /** * @see HttpServlet#doPut(HttpServletRequest request, HttpServletResponse response) */ - protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + protected void doPut(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { ONAPLoggingContext loggingContext = ONAPLoggingUtils.getLoggingContextForRequest(request, baseLoggingContext); loggingContext.transactionStarted(); loggingContext.setServiceName("PAP.put"); - if ((loggingContext.getRequestID() == null) || (loggingContext.getRequestID() == "")){ + if ((loggingContext.getRequestID() == null) || (Objects.equals(loggingContext.getRequestID(), ""))) { UUID requestID = UUID.randomUUID(); loggingContext.setRequestID(requestID.toString()); PolicyLogger.info("requestID not provided in call to XACMLPapSrvlet (doPut) so we generated one"); @@ -1022,10 +1062,10 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList String message = "PUT interface called for PAP " + papResourceName; if (e instanceof AdministrativeStateException) { message += " but it has an Administrative state of " - + im.getStateManager().getAdminState(); + + im.getStateManager().getAdminState(); } else if (e instanceof StandbyStatusException) { message += " but it has a Standby Status of " - + im.getStateManager().getStandbyStatus(); + + im.getStateManager().getStandbyStatus(); } else { message += " but an exception occurred"; @@ -1036,7 +1076,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return; } @@ -1048,13 +1088,13 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList String apiflag = request.getParameter("apiflag"); //This would occur if a PolicyDBDao notification was received String policyDBDaoRequestUrl = request.getParameter("policydbdaourl"); - if(policyDBDaoRequestUrl != null){ - LOGGER.info("XACMLPapServlet: PolicyDBDao Notification received." ); + if (policyDBDaoRequestUrl != null) { + LOGGER.info("XACMLPapServlet: PolicyDBDao Notification received."); String policyDBDaoRequestEntityId = request.getParameter("entityid"); String policyDBDaoRequestEntityType = request.getParameter("entitytype"); String policyDBDaoRequestExtraData = request.getParameter("extradata"); - if(policyDBDaoRequestEntityId == null || policyDBDaoRequestEntityType == null){ - setResponseError(response,400, "entityid or entitytype not supplied"); + if (policyDBDaoRequestEntityId == null || policyDBDaoRequestEntityType == null) { + setResponseError(response, 400, "entityid or entitytype not supplied"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Ended Successfully"); im.endTransaction(); @@ -1062,7 +1102,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } loggingContext.metricStarted(); LOGGER.info("XACMLPapServlet: Calling PolicyDBDao to handlIncomingHttpNotification"); - policyDBDao.handleIncomingHttpNotification(policyDBDaoRequestUrl,policyDBDaoRequestEntityId,policyDBDaoRequestEntityType,policyDBDaoRequestExtraData,this); + policyDBDao.handleIncomingHttpNotification(policyDBDaoRequestUrl, policyDBDaoRequestEntityId, + policyDBDaoRequestEntityType, policyDBDaoRequestExtraData, this); loggingContext.metricEnded(); PolicyLogger.metrics("XACMLPapServlet doPut handle incoming http notification"); response.setStatus(200); @@ -1076,24 +1117,25 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList */ String importService = request.getParameter("importService"); if (importService != null) { - if(authorizeRequest(request)){ + if (authorizeRequest(request)) { APIRequestHandler apiRequestHandler = new APIRequestHandler(); - try{ + try { loggingContext.metricStarted(); apiRequestHandler.doPut(request, response, importService); loggingContext.metricEnded(); PolicyLogger.metrics("XACMLPapServlet doPut apiRequestHandler doPut"); - }catch(IOException e){ + } catch (IOException e) { LOGGER.error(e); } im.endTransaction(); return; } else { - String message = "PEP not Authorized for making this Request!! \n Contact Administrator for this Scope. "; - LOGGER.error(XACMLErrorConstants.ERROR_PERMISSIONS + message ); + String message = + "PEP not Authorized for making this Request!! \n Contact Administrator for this Scope. "; + LOGGER.error(XACMLErrorConstants.ERROR_PERMISSIONS + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_FORBIDDEN, message); + setResponseError(response, HttpServletResponse.SC_FORBIDDEN, message); return; } } @@ -1104,7 +1146,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList if (acURLString != null) { loggingContext.setServiceName("AC:PAP.register"); // remember this Admin Console for future updates - if ( ! adminConsoleURLStringList.contains(acURLString)) { + if (!adminConsoleURLStringList.contains(acURLString)) { adminConsoleURLStringList.add(acURLString); } if (LOGGER.isDebugEnabled()) { @@ -1124,19 +1166,20 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList */ String groupId = request.getParameter("groupId"); if (groupId != null) { - if(apiflag!=null){ - if(!authorizeRequest(request)){ - String message = "PEP not Authorized for making this Request!! \n Contact Administrator for this Scope. "; + if (apiflag != null) { + if (!authorizeRequest(request)) { + String message = + "PEP not Authorized for making this Request!! \n Contact Administrator for this Scope. "; PolicyLogger.error(MessageCodes.ERROR_PERMISSIONS + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_FORBIDDEN, message); + setResponseError(response, HttpServletResponse.SC_FORBIDDEN, message); return; } - if(apiflag.equalsIgnoreCase("addPolicyToGroup")){ - try{ + if (apiflag.equalsIgnoreCase("addPolicyToGroup")) { + try { updateGroupsFromAPI(request, response, groupId, loggingContext); - }catch(IOException e){ + } catch (IOException e) { LOGGER.error(e); } loggingContext.transactionEnded(); @@ -1162,10 +1205,10 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList // // Request is for policy validation and creation // - if (apiflag != null && apiflag.equalsIgnoreCase("admin")){ + if (apiflag != null && apiflag.equalsIgnoreCase("admin")) { // this request is from the Admin Console SavePolicyHandler savePolicyHandler = SavePolicyHandler.getInstance(); - try{ + try { loggingContext.metricStarted(); savePolicyHandler.doPolicyAPIPut(request, response); loggingContext.metricEnded(); @@ -1179,9 +1222,9 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList return; } else if (apiflag != null && "api".equalsIgnoreCase(apiflag)) { // this request is from the Policy Creation API - if(authorizeRequest(request)){ + if (authorizeRequest(request)) { APIRequestHandler apiRequestHandler = new APIRequestHandler(); - try{ + try { loggingContext.metricStarted(); apiRequestHandler.doPut(request, response, request.getHeader("ClientScope")); loggingContext.metricEnded(); @@ -1198,7 +1241,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_PERMISSIONS + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_FORBIDDEN, message); + setResponseError(response, HttpServletResponse.SC_FORBIDDEN, message); im.endTransaction(); return; } @@ -1208,7 +1251,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Request does not have groupId or apiflag"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_BAD_REQUEST, "Request does not have groupId or apiflag"); + setResponseError(response, HttpServletResponse.SC_BAD_REQUEST, "Request does not have groupId or apiflag"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See error.log"); im.endTransaction(); @@ -1217,11 +1260,12 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList /** * @see HttpServlet#doDelete(HttpServletRequest request, HttpServletResponse response) */ - protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + protected void doDelete(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { ONAPLoggingContext loggingContext = ONAPLoggingUtils.getLoggingContextForRequest(request, baseLoggingContext); loggingContext.transactionStarted(); loggingContext.setServiceName("PAP.delete"); - if ((loggingContext.getRequestID() == null) || (loggingContext.getRequestID() == "")){ + if ((loggingContext.getRequestID() == null) || (Objects.equals(loggingContext.getRequestID(), ""))) { UUID requestID = UUID.randomUUID(); loggingContext.setRequestID(requestID.toString()); PolicyLogger.info("requestID not provided in call to XACMLPapSrvlet (doDelete) so we generated one"); @@ -1233,7 +1277,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList im.startTransaction(); loggingContext.metricEnded(); PolicyLogger.metrics("XACMLPapServlet doDelete im startTransaction"); - } catch (AdministrativeStateException ae){ + } catch (AdministrativeStateException ae) { String message = "DELETE interface called for PAP " + papResourceName + " but it has an Administrative" + " state of " + im.getStateManager().getAdminState() + "\n Exception Message: " + ae.getMessage(); @@ -1241,9 +1285,9 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return; - }catch (StandbyStatusException se) { + } catch (StandbyStatusException se) { String message = "PUT interface called for PAP " + papResourceName + " but it has a Standby Status" + " of " + im.getStateManager().getStandbyStatus() + "\n Exception Message: " + se.getMessage(); @@ -1251,7 +1295,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return; } catch (IntegrityMonitorException e) { String message = "PUT interface called for PAP " + papResourceName + " but an exception occurred" @@ -1260,7 +1304,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return; } loggingContext.metricStarted(); @@ -1271,13 +1315,14 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList String apiflag = request.getParameter("apiflag"); if (groupId != null) { // Is this from the Admin Console or API? - if(apiflag!=null) { - if(!authorizeRequest(request)){ - String message = "PEP not Authorized for making this Request!! \n Contact Administrator for this Scope. "; + if (apiflag != null) { + if (!authorizeRequest(request)) { + String message = + "PEP not Authorized for making this Request!! \n Contact Administrator for this Scope. "; PolicyLogger.error(MessageCodes.ERROR_PERMISSIONS + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_FORBIDDEN, message); + setResponseError(response, HttpServletResponse.SC_FORBIDDEN, message); return; } APIRequestHandler apiRequestHandler = new APIRequestHandler(); @@ -1287,15 +1332,15 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList loggingContext.metricEnded(); PolicyLogger.metrics("XACMLPapServlet doDelete apiRequestHandler doDelete"); } catch (Exception e) { - LOGGER.error("Exception Occured"+e); + LOGGER.error("Exception Occured" + e); } - if(apiRequestHandler.getNewGroup()!=null){ + if (apiRequestHandler.getNewGroup() != null) { groupChanged(apiRequestHandler.getNewGroup(), loggingContext); } return; } // this is from the Admin Console, so handle separately - try{ + try { loggingContext.metricStarted(); doACDelete(request, response, groupId, loggingContext); loggingContext.metricEnded(); @@ -1312,7 +1357,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Request does not have groupId"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_BAD_REQUEST, "Request does not have groupId"); + setResponseError(response, HttpServletResponse.SC_BAD_REQUEST, "Request does not have groupId"); im.endTransaction(); } @@ -1320,7 +1365,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList String localRootPolicies = policies.getProperty(XACMLProperties.PROP_ROOTPOLICIES); String localReferencedPolicies = policies.getProperty(XACMLProperties.PROP_REFERENCEDPOLICIES); if (localRootPolicies == null || localReferencedPolicies == null) { - LOGGER.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + "Missing property on PAP server: RootPolicies="+localRootPolicies+" ReferencedPolicies="+localReferencedPolicies); + LOGGER.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + "Missing property on PAP server: RootPolicies=" + + localRootPolicies + " ReferencedPolicies=" + localReferencedPolicies); return false; } // Compare the policies and pipconfig properties to the pdpProperties @@ -1373,7 +1419,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList String pdpJMMX = request.getHeader(XACMLRestProperties.PROP_PDP_HTTP_HEADER_JMX_PORT); if (pdpJMMX == null || pdpJMMX.isEmpty()) { // Should send back its port for identification - LOGGER.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + "PDP did not send custom header for JMX Port so the value of 0 is assigned"); + LOGGER.warn(XACMLErrorConstants.ERROR_DATA_ISSUE + + "PDP did not send custom header for JMX Port so the value of 0 is assigned"); return null; } return pdpJMMX; @@ -1389,7 +1436,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList * @throws ServletException * @throws IOException */ - public void updateGroupsFromAPI(HttpServletRequest request, HttpServletResponse response, String groupId, ONAPLoggingContext loggingContext) throws IOException { + public void updateGroupsFromAPI(HttpServletRequest request, HttpServletResponse response, String groupId, + ONAPLoggingContext loggingContext) throws IOException { PolicyDBDaoTransaction acPutTransaction = policyDBDao.getNewTransaction(); PolicyLogger.audit("PolicyDBDaoTransaction started for updateGroupsFromAPI"); try { @@ -1400,7 +1448,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList String json = null; java.util.Scanner scanner = new java.util.Scanner(request.getInputStream()); scanner.useDelimiter("\\A"); - json = scanner.hasNext() ? scanner.next() : ""; + json = scanner.hasNext() ? scanner.next() : ""; scanner.close(); PolicyLogger.info("pushPolicy request from API: " + json); @@ -1413,8 +1461,9 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList currentPoliciesInGroup = group.getPolicies(); //If the selected policy is in the group we must remove the old version of it LOGGER.info("Removing old version of the policy"); - for(PDPPolicy existingPolicy : currentPoliciesInGroup) { - if (existingPolicy.getName().equals(policy.getName()) && !existingPolicy.getId().equals(policy.getId())){ + for (PDPPolicy existingPolicy : currentPoliciesInGroup) { + if (existingPolicy.getName().equals(policy.getName()) && + !existingPolicy.getId().equals(policy.getId())) { group.removePolicy(existingPolicy); LOGGER.info("Removing policy: " + existingPolicy); break; @@ -1423,23 +1472,24 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList // Assume that this is an update of an existing PDP Group loggingContext.setServiceName("PolicyEngineAPI:PAP.updateGroup"); - try{ + try { acPutTransaction.updateGroup(group, "XACMLPapServlet.doACPut"); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " Error while updating group in the database: " - +"group="+group.getId()); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", + " Error while updating group in the database: " + + "group=" + group.getId()); throw new PAPException(e.getMessage()); } LOGGER.info("Calling updatGroup() with new group"); papEngine.updateGroup(group); String policyId = "empty"; - if(policy !=null && policy.getId() != null){ + if (policy != null && policy.getId() != null) { policyId = policy.getId(); } - if(!policyId.matches(REGEX) ){ + if (!policyId.matches(REGEX)) { response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.addHeader("error",ADD_GROUP_ERROR); + response.addHeader("error", ADD_GROUP_ERROR); response.addHeader("message", "Policy Id is not valid"); return; } @@ -1464,7 +1514,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList loggingContext.transactionEnded(); LOGGER.info("Success"); - if (policy != null && ((policy.getId().contains("Config_MS_")) || (policy.getId().contains("BRMS_Param")))) { + if (policy != null && + ((policy.getId().contains("Config_MS_")) || (policy.getId().contains("BRMS_Param")))) { PushPolicyHandler pushPolicyHandler = PushPolicyHandler.getInstance(); if (pushPolicyHandler.preSafetyCheck(policy, configHome)) { LOGGER.debug("Precheck Successful."); @@ -1472,18 +1523,17 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } PolicyLogger.audit("Transaction Ended Successfully"); - return; } catch (PAPException e) { acPutTransaction.rollbackTransaction(); PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " API PUT exception"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - String message = XACMLErrorConstants.ERROR_PROCESS_FLOW + "Exception in request to update group from API - See Error.log on on the PAP."; + String message = XACMLErrorConstants.ERROR_PROCESS_FLOW + + "Exception in request to update group from API - See Error.log on on the PAP."; setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.addHeader("error",ADD_GROUP_ERROR); + response.addHeader("error", ADD_GROUP_ERROR); response.addHeader("message", message); - return; } } @@ -1497,18 +1547,20 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList * @throws ServletException * @throws IOException */ - private void doACPost(HttpServletRequest request, HttpServletResponse response, String groupId, ONAPLoggingContext loggingContext) throws ServletException, IOException { + private void doACPost(HttpServletRequest request, HttpServletResponse response, String groupId, + ONAPLoggingContext loggingContext) throws ServletException, IOException { PolicyDBDaoTransaction doACPostTransaction = null; try { String groupName = request.getParameter("groupName"); String groupDescription = request.getParameter("groupDescription"); String apiflag = request.getParameter("apiflag"); if (groupName != null && groupDescription != null) { - // Args: group=<groupId> groupName=<name> groupDescription=<description> <= create a new group + // Args: group=<groupId> groupName=<name> groupDescription=<description> <= create + // a new group loggingContext.setServiceName("AC:PAP.createGroup"); String unescapedName = null; String unescapedDescription = null; - try{ + try { unescapedName = URLDecoder.decode(groupName, "UTF-8"); unescapedDescription = URLDecoder.decode(groupDescription, "UTF-8"); } catch (UnsupportedEncodingException e) { @@ -1516,7 +1568,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } PolicyDBDaoTransaction newGroupTransaction = policyDBDao.getNewTransaction(); try { - newGroupTransaction.createGroup(PolicyDBDao.createNewPDPGroupId(unescapedName), unescapedName, unescapedDescription,"XACMLPapServlet.doACPost"); + newGroupTransaction.createGroup(PolicyDBDao.createNewPDPGroupId(unescapedName), unescapedName, + unescapedDescription, "XACMLPapServlet.doACPost"); papEngine.newGroup(unescapedName, unescapedDescription); loggingContext.metricStarted(); newGroupTransaction.commitTransaction(); @@ -1524,10 +1577,12 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.metrics("XACMLPapServlet doACPost commitTransaction"); } catch (Exception e) { newGroupTransaction.rollbackTransaction(); - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " Unable to create new group"); + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", + " Unable to create new group"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Unable to create new group '" + groupId + "'"); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, + "Unable to create new group '" + groupId + "'"); return; } response.setStatus(HttpServletResponse.SC_NO_CONTENT); @@ -1548,30 +1603,30 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } // for all remaining POST operations the group must exist before the operation can be done OnapPDPGroup group = null; - try{ + try { group = papEngine.getGroup(groupId); - } catch (PAPException e){ + } catch (PAPException e) { LOGGER.error(e); } if (group == null) { String message = "Unknown groupId '" + groupId + "'"; //for fixing Header Manipulation of Fortify issue - if(!message.matches(REGEX)){ + if (!message.matches(REGEX)) { response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.addHeader("error",ADD_GROUP_ERROR); + response.addHeader("error", ADD_GROUP_ERROR); response.addHeader("message", "GroupId Id is not valid"); return; } PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - if (apiflag!=null){ + if (apiflag != null) { response.addHeader("error", "unknownGroupId"); response.addHeader("operation", "push"); response.addHeader("message", message); response.setStatus(HttpServletResponse.SC_NOT_FOUND); } else { - setResponseError(response,HttpServletResponse.SC_NOT_FOUND, message); + setResponseError(response, HttpServletResponse.SC_NOT_FOUND, message); } return; } @@ -1579,7 +1634,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList // If the request contains a policyId then we know we are pushing the policy to PDP if (request.getParameter("policyId") != null) { - if(apiflag!=null){ + if (apiflag != null) { loggingContext.setServiceName("PolicyEngineAPI:PAP.postPolicy"); LOGGER.info("PushPolicy Request From The API"); } else { @@ -1593,7 +1648,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList try { //Copying the policy to the file system and updating groups in database LOGGER.info("PapServlet: calling PolicyDBDao.addPolicyToGroup()"); - updatedGroup = addPolicyToGroupTransaction.addPolicyToGroup(group.getId(), policyId,"XACMLPapServlet.doACPost"); + updatedGroup = addPolicyToGroupTransaction + .addPolicyToGroup(group.getId(), policyId, "XACMLPapServlet.doACPost"); loggingContext.metricStarted(); addPolicyToGroupTransaction.commitTransaction(); loggingContext.metricEnded(); @@ -1602,30 +1658,31 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } catch (Exception e) { addPolicyToGroupTransaction.rollbackTransaction(); - String message = "Policy '" + policyId + "' not copied to group '" + groupId +"': " + e; + String message = "Policy '" + policyId + "' not copied to group '" + groupId + "': " + e; //for fixing Header Manipulation of Fortify issue - if(!message.matches(REGEX)){ + if (!message.matches(REGEX)) { response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.addHeader("error",ADD_GROUP_ERROR); + response.addHeader("error", ADD_GROUP_ERROR); response.addHeader("message", "Policy Id is not valid"); return; } PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - if (apiflag!=null){ + if (apiflag != null) { response.addHeader("error", "policyCopyError"); response.addHeader("message", message); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } else { - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); } return; } - if(apiflag != null){ + if (apiflag != null) { /* - * If request comes from the API we need to run the PolicyDBDao updateGroup() to notify other paps of the change. + * If request comes from the API we need to run the PolicyDBDao updateGroup() to notify other + * paps of the change. * The GUI does this from the POLICY-SDK-APP code. */ @@ -1635,7 +1692,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList // get the request content into a String and read the inputStream into a buffer java.util.Scanner scanner = new java.util.Scanner(request.getInputStream()); scanner.useDelimiter("\\A"); - String json = scanner.hasNext() ? scanner.next() : ""; + String json = scanner.hasNext() ? scanner.next() : ""; scanner.close(); // convert Object sent as JSON into local object @@ -1647,11 +1704,12 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList // Assume that this is an update of an existing PDP Group loggingContext.setServiceName("PolicyEngineAPI:PAP.updateGroup"); - try{ + try { acPutTransaction.updateGroup(updatedGroup, "XACMLPapServlet.doACPut"); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " Error occurred when notifying PAPs of a group change: " - + e); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", + " Error occurred when notifying PAPs of a group change: " + + e); throw new PAPException(e.getMessage()); } @@ -1672,11 +1730,12 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.metrics("XACMLPapServlet updateGroupsFromAPI notifyAC"); // Group changed to send notification to PDPs, which might include changing the policies - groupChanged(updatedGroup,loggingContext); + groupChanged(updatedGroup, loggingContext); loggingContext.transactionEnded(); LOGGER.info("Success"); - if (policy != null && ((policy.getName().contains("Config_MS_")) || (policy.getId().contains("BRMS_Param")))) { + if (policy != null && ((policy.getName().contains("Config_MS_")) || + (policy.getId().contains("BRMS_Param")))) { PushPolicyHandler pushPolicyHandler = PushPolicyHandler.getInstance(); if (pushPolicyHandler.preSafetyCheck(policy, configHome)) { LOGGER.debug("Precheck Successful."); @@ -1691,11 +1750,12 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " API PUT exception"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - String message = XACMLErrorConstants.ERROR_PROCESS_FLOW + "Exception occurred when updating the group from API."; + String message = XACMLErrorConstants.ERROR_PROCESS_FLOW + + "Exception occurred when updating the group from API."; LOGGER.error(message); setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.addHeader("error",ADD_GROUP_ERROR); + response.addHeader("error", ADD_GROUP_ERROR); response.addHeader("message", message); return; } @@ -1712,13 +1772,14 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList auditLogger.info("Success"); LOGGER.info("Transaction Ended Successfully"); - return; } else if (request.getParameter("default") != null) { // Args: group=<groupId> default=true <= make default // change the current default group to be the one identified in the request. loggingContext.setServiceName("AC:PAP.setDefaultGroup"); - // This is a POST operation rather than a PUT "update group" because of the side-effect that the current default group is also changed. - // It should never be the case that multiple groups are currently marked as the default, but protect against that anyway. + // This is a POST operation rather than a PUT "update group" because of the side-effect that the + // current default group is also changed. + // It should never be the case that multiple groups are currently marked as the default, but protect + // against that anyway. PolicyDBDaoTransaction setDefaultGroupTransaction = policyDBDao.getNewTransaction(); try { setDefaultGroupTransaction.changeDefaultGroup(group, "XACMLPapServlet.doACPost"); @@ -1732,7 +1793,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " Unable to set group"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Unable to set group '" + groupId + "' to default"); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, + "Unable to set group '" + groupId + "' to default"); return; } response.setStatus(HttpServletResponse.SC_NO_CONTENT); @@ -1740,8 +1802,10 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList LOGGER.debug("Group '" + groupId + "' set to be default"); } // Notify the Admin Consoles that something changed - // For now the AC cannot handle anything more detailed than the whole set of PDPGroups, so just notify on that - //TODO - Future: FIGURE OUT WHAT LEVEL TO NOTIFY: 2 groups or entire set - currently notify AC to update whole configuration of all groups + // For now the AC cannot handle anything more detailed than the whole set of PDPGroups, so just + // notify on that + //TODO - Future: FIGURE OUT WHAT LEVEL TO NOTIFY: 2 groups or entire set - currently notify AC to + // update whole configuration of all groups loggingContext.metricStarted(); notifyAC(); // This does not affect any PDPs in the existing groups, so no need to notify them of this change @@ -1750,7 +1814,6 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList loggingContext.transactionEnded(); auditLogger.info("Success"); LOGGER.info("Transaction Ended Successfully"); - return; } else if (request.getParameter("pdpId") != null) { doACPostTransaction = policyDBDao.getNewTransaction(); // Args: group=<groupId> pdpId=<pdpId> <= move PDP to group @@ -1758,25 +1821,26 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList String pdpId = request.getParameter("pdpId"); OnapPDP pdp = papEngine.getPDP(pdpId); OnapPDPGroup originalGroup = papEngine.getPDPGroup((OnapPDP) pdp); - try{ + try { doACPostTransaction.movePdp(pdp, group, "XACMLPapServlet.doACPost"); - }catch(Exception e){ + } catch (Exception e) { doACPostTransaction.rollbackTransaction(); PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " Error while moving pdp in the database: " - +"pdp="+pdp.getId()+",to group="+group.getId()); + + "pdp=" + pdp.getId() + ",to group=" + group.getId()); throw new PAPException(e.getMessage()); } papEngine.movePDP((OnapPDP) pdp, group); response.setStatus(HttpServletResponse.SC_NO_CONTENT); if (LOGGER.isDebugEnabled()) { - LOGGER.debug("PDP '" + pdp.getId() +"' moved to group '" + group.getId() + "' set to be default"); + LOGGER.debug("PDP '" + pdp.getId() + "' moved to group '" + group.getId() + "' set to be default"); } // update the status of both the original group and the new one - ((StdPDPGroup)originalGroup).resetStatus(); - ((StdPDPGroup)group).resetStatus(); + ((StdPDPGroup) originalGroup).resetStatus(); + ((StdPDPGroup) group).resetStatus(); // Notify the Admin Consoles that something changed - // For now the AC cannot handle anything more detailed than the whole set of PDPGroups, so just notify on that + // For now the AC cannot handle anything more detailed than the whole set of PDPGroups, so just + // notify on that loggingContext.metricStarted(); notifyAC(); loggingContext.metricEnded(); @@ -1790,14 +1854,12 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList loggingContext.transactionEnded(); auditLogger.info("Success"); PolicyLogger.audit("Transaction Ended Successfully"); - return; } } catch (PAPException e) { PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " AC POST exception"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); - return; + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } } @@ -1811,7 +1873,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList * @throws ServletException * @throws IOException */ - private void doACGet(HttpServletRequest request, HttpServletResponse response, String groupId, ONAPLoggingContext loggingContext) throws IOException { + private void doACGet(HttpServletRequest request, HttpServletResponse response, String groupId, + ONAPLoggingContext loggingContext) throws IOException { try { String parameterDefault = request.getParameter("default"); String pdpId = request.getParameter("pdpId"); @@ -1823,15 +1886,15 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList loggingContext.setServiceName("AC:PAP.getDefaultGroup"); OnapPDPGroup group = papEngine.getDefaultGroup(); // convert response object to JSON and include in the response - mapperWriteValue(new ObjectMapper(), response, group); + mapperWriteValue(new ObjectMapper(), response, group); if (LOGGER.isDebugEnabled()) { LOGGER.debug("GET Default group req from '" + request.getRequestURL() + "'"); } response.setStatus(HttpServletResponse.SC_OK); response.setHeader("content-type", "application/json"); - try{ + try { response.getOutputStream().close(); - } catch (IOException e){ + } catch (IOException e) { LOGGER.error(e); } loggingContext.transactionEnded(); @@ -1844,21 +1907,21 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList // Request is for the (unspecified) group containing a given PDP loggingContext.setServiceName("AC:PAP.getPDP"); OnapPDP pdp = null; - try{ + try { pdp = papEngine.getPDP(pdpId); - }catch(PAPException e){ + } catch (PAPException e) { LOGGER.error(e); } // convert response object to JSON and include in the response - mapperWriteValue(new ObjectMapper(), response, pdp); + mapperWriteValue(new ObjectMapper(), response, pdp); if (LOGGER.isDebugEnabled()) { LOGGER.debug("GET pdp '" + pdpId + "' req from '" + request.getRequestURL() + "'"); } response.setStatus(HttpServletResponse.SC_OK); response.setHeader("content-type", "application/json"); - try{ + try { response.getOutputStream().close(); - } catch (IOException e){ + } catch (IOException e) { LOGGER.error(e); } loggingContext.transactionEnded(); @@ -1868,23 +1931,23 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } else { // Request is for the group containing a given PDP loggingContext.setServiceName("AC:PAP.getGroupForPDP"); - OnapPDPGroup group =null; - try{ + OnapPDPGroup group = null; + try { OnapPDP pdp = papEngine.getPDP(pdpId); group = papEngine.getPDPGroup((OnapPDP) pdp); - }catch(PAPException e){ + } catch (PAPException e) { LOGGER.error(e); } // convert response object to JSON and include in the response - mapperWriteValue(new ObjectMapper(), response, group); + mapperWriteValue(new ObjectMapper(), response, group); if (LOGGER.isDebugEnabled()) { LOGGER.debug("GET PDP '" + pdpId + "' Group req from '" + request.getRequestURL() + "'"); } response.setStatus(HttpServletResponse.SC_OK); response.setHeader("content-type", "application/json"); - try{ + try { response.getOutputStream().close(); - } catch (IOException e){ + } catch (IOException e) { LOGGER.error(e); } loggingContext.transactionEnded(); @@ -1898,23 +1961,23 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList Set<OnapPDPGroup> groups = null; try { groups = papEngine.getOnapPDPGroups(); - } catch(PAPException e) { + } catch (PAPException e) { PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " AC Get exception"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); return; } // convert response object to JSON and include in the response - mapperWriteValue(new ObjectMapper(), response, groups); + mapperWriteValue(new ObjectMapper(), response, groups); if (LOGGER.isDebugEnabled()) { LOGGER.debug("GET All groups req"); } response.setStatus(HttpServletResponse.SC_OK); response.setHeader("content-type", "application/json"); - try{ + try { response.getOutputStream().close(); - } catch (IOException e){ + } catch (IOException e) { LOGGER.error(e); } loggingContext.transactionEnded(); @@ -1925,24 +1988,24 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } // for all other GET operations the group must exist before the operation can be done OnapPDPGroup group = null; - try{ + try { group = papEngine.getGroup(groupId); - } catch(PAPException e){ + } catch (PAPException e) { LOGGER.error(e); } if (group == null) { String message = "Unknown groupId '" + groupId + "'"; //for fixing Header Manipulation of Fortify issue - if(!message.matches(REGEX)){ + if (!message.matches(REGEX)) { response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.addHeader("error",ADD_GROUP_ERROR); + response.addHeader("error", ADD_GROUP_ERROR); response.addHeader("message", "Group Id is not valid"); return; } PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_NOT_FOUND, message); + setResponseError(response, HttpServletResponse.SC_NOT_FOUND, message); return; } // Figure out which request this is based on the parameters @@ -1954,20 +2017,20 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " GET Policy not implemented"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_BAD_REQUEST, "GET Policy not implemented"); + setResponseError(response, HttpServletResponse.SC_BAD_REQUEST, "GET Policy not implemented"); } else { // No other parameters, so return the identified Group loggingContext.setServiceName("AC:PAP.getGroup"); // convert response object to JSON and include in the response - mapperWriteValue(new ObjectMapper(), response, group); + mapperWriteValue(new ObjectMapper(), response, group); if (LOGGER.isDebugEnabled()) { LOGGER.debug("GET group '" + group.getId() + "' req from '" + request.getRequestURL() + "'"); } response.setStatus(HttpServletResponse.SC_OK); response.setHeader("content-type", "application/json"); - try{ + try { response.getOutputStream().close(); - } catch (IOException e){ + } catch (IOException e) { LOGGER.error(e); } loggingContext.transactionEnded(); @@ -1976,7 +2039,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList return; } // Currently there are no other GET calls from the AC. - // The AC uses the "GET All Groups" operation to fill its local cache and uses that cache for all other GETs without calling the PAP. + // The AC uses the "GET All Groups" operation to fill its local cache and uses that cache for all other + // GETs without calling the PAP. // Other GETs that could be called: // Specific Group (groupId=<groupId>) // A Policy (groupId=<groupId> policyId=<policyId>) @@ -1984,13 +2048,12 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " UNIMPLEMENTED "); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_BAD_REQUEST, "UNIMPLEMENTED"); + setResponseError(response, HttpServletResponse.SC_BAD_REQUEST, "UNIMPLEMENTED"); } catch (PAPException e) { PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " AC Get exception"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); - return; + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } } @@ -2004,7 +2067,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList * @throws ServletException * @throws IOException */ - private void doACPut(HttpServletRequest request, HttpServletResponse response, String groupId, ONAPLoggingContext loggingContext) throws IOException { + private void doACPut(HttpServletRequest request, HttpServletResponse response, String groupId, + ONAPLoggingContext loggingContext) throws IOException { PolicyDBDaoTransaction acPutTransaction = policyDBDao.getNewTransaction(); try { // for PUT operations the group may or may not need to exist before the operation can be done @@ -2016,19 +2080,20 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_NOT_FOUND, message); + setResponseError(response, HttpServletResponse.SC_NOT_FOUND, message); return; } if (request.getParameter("policy") != null) { - // group=<groupId> policy=<policyId> contents=policy file <= Create new policy file in group dir, or replace it if it already exists (do not touch properties) + // group=<groupId> policy=<policyId> contents=policy file <= Create new policy + // file in group dir, or replace it if it already exists (do not touch properties) loggingContext.setServiceName("AC:PAP.putPolicy"); - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " PARTIALLY IMPLEMENTED!!! ACTUAL CHANGES SHOULD BE MADE BY PAP SERVLET!!! "); + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + + " PARTIALLY IMPLEMENTED!!! ACTUAL CHANGES SHOULD BE MADE BY PAP SERVLET!!! "); response.setStatus(HttpServletResponse.SC_NO_CONTENT); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); auditLogger.info("Success"); PolicyLogger.audit("Transaction Ended Successfully"); - return; } else if (request.getParameter("pdpId") != null) { // ARGS: group=<groupId> pdpId=<pdpId/URL> <= create a new PDP or Update an Existing one String pdpId = request.getParameter("pdpId"); @@ -2040,12 +2105,12 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList // get the request content into a String String json = null; // read the inputStream into a buffer (trick found online scans entire input looking for end-of-file) - try{ + try { Scanner scanner = new Scanner(request.getInputStream()); scanner.useDelimiter("\\A"); - json = scanner.hasNext() ? scanner.next() : ""; + json = scanner.hasNext() ? scanner.next() : ""; scanner.close(); - }catch(IOException e){ + } catch (IOException e) { LOGGER.error(e); } LOGGER.info("JSON request from AC: " + json); @@ -2054,54 +2119,58 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList Object objectFromJSON = null; try { objectFromJSON = mapper.readValue(json, StdPDP.class); - } catch(Exception e) { + } catch (Exception e) { LOGGER.error(e); } if (pdpId == null || objectFromJSON == null || - ! (objectFromJSON instanceof StdPDP) || - ((StdPDP)objectFromJSON).getId() == null || - ! ((StdPDP)objectFromJSON).getId().equals(pdpId)) { - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " PDP new/update had bad input. pdpId=" + pdpId + " objectFromJSON="+objectFromJSON); + !(objectFromJSON instanceof StdPDP) || + ((StdPDP) objectFromJSON).getId() == null || + !((StdPDP) objectFromJSON).getId().equals(pdpId)) { + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " PDP new/update had bad input. pdpId=" + pdpId + + " objectFromJSON=" + objectFromJSON); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Bad input pdpid for object:"+objectFromJSON); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, + "Bad input pdpid for object:" + objectFromJSON); } StdPDP pdp = (StdPDP) objectFromJSON; - if(pdp != null){ + if (pdp != null) { OnapPDP oPDP = null; - try{ + try { oPDP = papEngine.getPDP(pdpId); - }catch (PAPException e){ + } catch (PAPException e) { LOGGER.error(e); } if (oPDP == null) { // this is a request to create a new PDP object - try{ + try { acPutTransaction.addPdpToGroup(pdp.getId(), group.getId(), pdp.getName(), - pdp.getDescription(), pdp.getJmxPort(),"XACMLPapServlet.doACPut"); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " Error while adding pdp to group in the database: " - +"pdp="+ (pdp.getId()) +",to group="+group.getId()); + pdp.getDescription(), pdp.getJmxPort(), "XACMLPapServlet.doACPut"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", + " Error while adding pdp to group in the database: " + + "pdp=" + (pdp.getId()) + ",to group=" + group.getId()); throw new PAPException(e.getMessage()); } - try{ + try { papEngine.newPDP(pdp.getId(), group, pdp.getName(), pdp.getDescription(), pdp.getJmxPort()); - }catch(PAPException e){ + } catch (PAPException e) { LOGGER.error(e); } } else { - try{ + try { acPutTransaction.updatePdp(pdp, "XACMLPapServlet.doACPut"); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " Error while updating pdp in the database: " - +"pdp="+ pdp.getId()); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", + " Error while updating pdp in the database: " + + "pdp=" + pdp.getId()); throw new PAPException(e.getMessage()); } // this is a request to update the pdp - try{ + try { papEngine.updatePDP(pdp); - }catch(PAPException e){ + } catch (PAPException e) { LOGGER.error(e); } } @@ -2110,7 +2179,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList LOGGER.debug("PDP '" + pdpId + "' created/updated"); } // adjust the group's state including the new PDP - ((StdPDPGroup)group).resetStatus(); + ((StdPDPGroup) group).resetStatus(); // tell the Admin Consoles there is a change loggingContext.metricStarted(); notifyAC(); @@ -2125,24 +2194,24 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList loggingContext.transactionEnded(); auditLogger.info("Success"); PolicyLogger.audit("Transaction Ended Successfully"); - return; - }else{ - try{ - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, "XACMLPapServlet", " Error while adding pdp to group in the database: " - +"pdp=null" + ",to group="+group.getId()); + } else { + try { + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, "XACMLPapServlet", + " Error while adding pdp to group in the database: " + + "pdp=null" + ",to group=" + group.getId()); throw new PAPException("PDP is null"); - } catch(Exception e){ - throw new PAPException("PDP is null" + e.getMessage() +e); + } catch (Exception e) { + throw new PAPException("PDP is null" + e.getMessage() + e); } } } else if (request.getParameter("pipId") != null) { - // group=<groupId> pipId=<pipEngineId> contents=pip properties <= add a PIP to pip config, or replace it if it already exists (lenient operation) + // group=<groupId> pipId=<pipEngineId> contents=pip properties <= add a + // PIP to pip config, or replace it if it already exists (lenient operation) loggingContext.setServiceName("AC:PAP.putPIP"); PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " UNIMPLEMENTED"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_BAD_REQUEST, "UNIMPLEMENTED"); - return; + setResponseError(response, HttpServletResponse.SC_BAD_REQUEST, "UNIMPLEMENTED"); } else { // Assume that this is an update of an existing PDP Group // ARGS: group=<groupId> <= Update an Existing Group @@ -2150,12 +2219,12 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList // get the request content into a String String json = null; // read the inputStream into a buffer (trick found online scans entire input looking for end-of-file) - try{ + try { Scanner scanner = new Scanner(request.getInputStream()); scanner.useDelimiter("\\A"); - json = scanner.hasNext() ? scanner.next() : ""; + json = scanner.hasNext() ? scanner.next() : ""; scanner.close(); - }catch(IOException e){ + } catch (IOException e) { LOGGER.error(e); } LOGGER.info("JSON request from AC: " + json); @@ -2163,44 +2232,47 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList ObjectMapper mapper = new ObjectMapper(); Object objectFromJSON = null; try { - objectFromJSON = mapper.readValue(json, StdPDPGroup.class); - } catch(Exception e) { + objectFromJSON = mapper.readValue(json, StdPDPGroup.class); + } catch (Exception e) { LOGGER.error(e); } - if (objectFromJSON == null || ! (objectFromJSON instanceof StdPDPGroup) || - ! ((StdPDPGroup)objectFromJSON).getId().equals(group.getId())) { - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Group update had bad input. id=" + group.getId() + " objectFromJSON="+objectFromJSON); + if (objectFromJSON == null || !(objectFromJSON instanceof StdPDPGroup) || + !((StdPDPGroup) objectFromJSON).getId().equals(group.getId())) { + PolicyLogger + .error(MessageCodes.ERROR_DATA_ISSUE + " Group update had bad input. id=" + group.getId() + + " objectFromJSON=" + objectFromJSON); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Bad input id for object:"+objectFromJSON); + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, + "Bad input id for object:" + objectFromJSON); } // The Path on the PAP side is not carried on the RESTful interface with the AC // (because it is local to the PAP) // so we need to fill that in before submitting the group for update - if(objectFromJSON != null){ - ((StdPDPGroup)objectFromJSON).setDirectory(((StdPDPGroup)group).getDirectory()); + if (objectFromJSON != null) { + ((StdPDPGroup) objectFromJSON).setDirectory(((StdPDPGroup) group).getDirectory()); } - try{ - if("delete".equals(((StdPDPGroup)objectFromJSON).getOperation())){ - acPutTransaction.updateGroup((StdPDPGroup)objectFromJSON, "XACMLPapServlet.doDelete"); + try { + if ("delete".equals(((StdPDPGroup) objectFromJSON).getOperation())) { + acPutTransaction.updateGroup((StdPDPGroup) objectFromJSON, "XACMLPapServlet.doDelete"); } else { - acPutTransaction.updateGroup((StdPDPGroup)objectFromJSON, "XACMLPapServlet.doACPut"); + acPutTransaction.updateGroup((StdPDPGroup) objectFromJSON, "XACMLPapServlet.doACPut"); } - } catch(Exception e){ + } catch (Exception e) { PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW + " Error while updating group in the database: " - +"group="+group.getId()); + + "group=" + group.getId()); LOGGER.error(e); throw new PAPException(e.getMessage()); } PushPolicyHandler pushPolicyHandler = PushPolicyHandler.getInstance(); - OnapPDPGroup updatedGroup = (StdPDPGroup)objectFromJSON; + OnapPDPGroup updatedGroup = (StdPDPGroup) objectFromJSON; if (pushPolicyHandler.preSafetyCheck(updatedGroup, configHome)) { LOGGER.debug("Precheck Successful."); } - try{ - papEngine.updateGroup((StdPDPGroup)objectFromJSON); - }catch(PAPException e){ + try { + papEngine.updateGroup((StdPDPGroup) objectFromJSON); + } catch (PAPException e) { LOGGER.error(e); } response.setStatus(HttpServletResponse.SC_NO_CONTENT); @@ -2221,7 +2293,6 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList loggingContext.transactionEnded(); auditLogger.info("Success"); PolicyLogger.audit("Transaction Ended Successfully"); - return; } } catch (PAPException e) { LOGGER.debug(e); @@ -2229,8 +2300,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " AC PUT exception"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); - return; + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } } @@ -2244,7 +2314,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList * @throws ServletException * @throws IOException */ - private void doACDelete(HttpServletRequest request, HttpServletResponse response, String groupId, ONAPLoggingContext loggingContext) throws IOException { + private void doACDelete(HttpServletRequest request, HttpServletResponse response, String groupId, + ONAPLoggingContext loggingContext) throws IOException { PolicyDBDaoTransaction removePdpOrGroupTransaction = policyDBDao.getNewTransaction(); try { // for all DELETE operations the group must exist before the operation can be done @@ -2255,34 +2326,34 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_NOT_FOUND, "Unknown groupId '" + groupId +"'"); + setResponseError(response, HttpServletResponse.SC_NOT_FOUND, "Unknown groupId '" + groupId + "'"); return; } // determine the operation needed based on the parameters in the request if (request.getParameter("policy") != null) { - // group=<groupId> policy=<policyId> [delete=<true|false>] <= delete policy file from group + // group=<groupId> policy=<policyId> [delete=<true|false>] <= delete policy file from + // group loggingContext.setServiceName("AC:PAP.deletePolicy"); PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " UNIMPLEMENTED"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_BAD_REQUEST, "UNIMPLEMENTED"); - return; + setResponseError(response, HttpServletResponse.SC_BAD_REQUEST, "UNIMPLEMENTED"); } else if (request.getParameter("pdpId") != null) { // ARGS: group=<groupId> pdpId=<pdpId> <= delete PDP String pdpId = request.getParameter("pdpId"); OnapPDP pdp = papEngine.getPDP(pdpId); - try{ - removePdpOrGroupTransaction.removePdpFromGroup(pdp.getId(),"XACMLPapServlet.doACDelete"); - } catch(Exception e){ + try { + removePdpOrGroupTransaction.removePdpFromGroup(pdp.getId(), "XACMLPapServlet.doACDelete"); + } catch (Exception e) { throw new PAPException(e); } - try{ + try { papEngine.removePDP((OnapPDP) pdp); - }catch(PAPException e){ + } catch (PAPException e) { LOGGER.error(e); } // adjust the status of the group, which may have changed when we removed this PDP - ((StdPDPGroup)group).resetStatus(); + ((StdPDPGroup) group).resetStatus(); response.setStatus(HttpServletResponse.SC_NO_CONTENT); loggingContext.metricStarted(); notifyAC(); @@ -2297,23 +2368,22 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList loggingContext.transactionEnded(); auditLogger.info("Success"); PolicyLogger.audit("Transaction Ended Successfully"); - return; } else if (request.getParameter("pipId") != null) { // group=<groupId> pipId=<pipEngineId> <= delete PIP config for given engine loggingContext.setServiceName("AC:PAP.deletePIPConfig"); PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " UNIMPLEMENTED"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_BAD_REQUEST, "UNIMPLEMENTED"); - return; + setResponseError(response, HttpServletResponse.SC_BAD_REQUEST, "UNIMPLEMENTED"); } else { - // ARGS: group=<groupId> movePDPsToGroupId=<movePDPsToGroupId> <= delete a group and move all its PDPs to the given group + // ARGS: group=<groupId> movePDPsToGroupId=<movePDPsToGroupId> <= delete a group and + // move all its PDPs to the given group String moveToGroupId = request.getParameter("movePDPsToGroupId"); OnapPDPGroup moveToGroup = null; if (moveToGroupId != null) { - try{ + try { moveToGroup = papEngine.getGroup(moveToGroupId); - }catch(PAPException e){ + } catch (PAPException e) { LOGGER.error(e); } } @@ -2321,15 +2391,16 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList Set<OnapPDP> movedPDPs = new HashSet<>(); movedPDPs.addAll(group.getOnapPdps()); // do the move/remove - try{ - removePdpOrGroupTransaction.deleteGroup(group, moveToGroup,"XACMLPapServlet.doACDelete"); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.ERROR_UNKNOWN, e, "XACMLPapServlet", " Failed to delete PDP Group. Exception"); + try { + removePdpOrGroupTransaction.deleteGroup(group, moveToGroup, "XACMLPapServlet.doACDelete"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.ERROR_UNKNOWN, e, "XACMLPapServlet", + " Failed to delete PDP Group. Exception"); throw new PAPException(e.getMessage()); } - try{ + try { papEngine.removeGroup(group, moveToGroup); - }catch(PAPException e){ + } catch (PAPException e) { LOGGER.error(e); } response.setStatus(HttpServletResponse.SC_NO_CONTENT); @@ -2348,37 +2419,36 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList loggingContext.transactionEnded(); auditLogger.info("Success"); PolicyLogger.audit("Transaction Ended Successfully"); - return; } } catch (PAPException e) { removePdpOrGroupTransaction.rollbackTransaction(); PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " AC DELETE exception"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); - return; + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } } /** * Heartbeat thread - periodically check on PDPs' status - * + * <p> * Heartbeat with all known PDPs. - * + * <p> * Implementation note: - * + * <p> * The PDPs are contacted Sequentially, not in Parallel. - * + * <p> * If we did this in parallel using multiple threads we would simultaneously use - * - 1 thread and - * - 1 connection + * - 1 thread and + * - 1 connection * for EACH PDP. * This could become a resource problem since we already use multiple threads and connections for updating the PDPs * when user changes occur. * Using separate threads can also make it tricky dealing with timeouts on PDPs that are non-responsive. - * + * <p> * The Sequential operation does a heartbeat request to each PDP one at a time. - * This has the flaw that any PDPs that do not respond will hold up the entire heartbeat sequence until they timeout. + * This has the flaw that any PDPs that do not respond will hold up the entire heartbeat sequence until they + * timeout. * If there are a lot of non-responsive PDPs and the timeout is large-ish (the default is 20 seconds) * it could take a long time to cycle through all of the PDPs. * That means that this may not notice a PDP being down in a predictable time. @@ -2401,14 +2471,16 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList public Heartbeat(PAPPolicyEngine papEngine2) { papEngine = papEngine2; - this.heartbeatInterval = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_HEARTBEAT_INTERVAL, "10000")); - this.heartbeatTimeout = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_HEARTBEAT_TIMEOUT, "10000")); + this.heartbeatInterval = Integer.parseInt( + XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_HEARTBEAT_INTERVAL, "10000")); + this.heartbeatTimeout = Integer.parseInt( + XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_HEARTBEAT_TIMEOUT, "10000")); } @Override public void run() { // Set ourselves as running - synchronized(this) { + synchronized (this) { this.isRunning = true; } HashMap<String, URL> idToURLMap = new HashMap<>(); @@ -2418,7 +2490,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList Thread.sleep(heartbeatInterval); // get the list of PDPs (may have changed since last time) pdps.clear(); - synchronized(papEngine) { + synchronized (papEngine) { try { for (OnapPDPGroup g : papEngine.getOnapPDPGroups()) { for (OnapPDP p : g.getOnapPdps()) { @@ -2426,7 +2498,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } } } catch (PAPException e) { - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", "Heartbeat unable to read PDPs from PAPEngine"); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", + "Heartbeat unable to read PDPs from PAPEngine"); } } // Check for shutdown @@ -2449,13 +2522,14 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList String fullURLString = null; try { // Check PDP ID - if(CheckPDP.validateID(pdp.getId())){ + if (CheckPDP.validateID(pdp.getId())) { fullURLString = pdp.getId() + "?type=hb"; pdpURL = new URL(fullURLString); idToURLMap.put(pdp.getId(), pdpURL); } } catch (MalformedURLException e) { - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "XACMLPapServlet", " PDP id '" + fullURLString + "' is not a valid URL"); + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "XACMLPapServlet", + " PDP id '" + fullURLString + "' is not a valid URL"); continue; } } @@ -2464,14 +2538,14 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList HttpURLConnection connection = null; try { // Open up the connection - if(pdpURL != null){ - connection = (HttpURLConnection)pdpURL.openConnection(); + if (pdpURL != null) { + connection = (HttpURLConnection) pdpURL.openConnection(); // Setup our method and headers connection.setRequestMethod("GET"); connection.setConnectTimeout(heartbeatTimeout); // Authentication String encoding = CheckPDP.getEncoding(pdp.getId()); - if(encoding !=null){ + if (encoding != null) { connection.setRequestProperty("Authorization", "Basic " + encoding); } // Do the connect @@ -2484,34 +2558,42 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } else { // anything else is an unexpected result newStatus = PDPStatus.Status.UNKNOWN.toString(); - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " Heartbeat connect response code " + connection.getResponseCode() + ": " + pdp.getId()); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + + " Heartbeat connect response code " + connection.getResponseCode() + ": " + + pdp.getId()); } } } catch (UnknownHostException e) { newStatus = PDPStatus.Status.NO_SUCH_HOST.toString(); - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", " Heartbeat '" + pdp.getId() + "' NO_SUCH_HOST"); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", + " Heartbeat '" + pdp.getId() + "' NO_SUCH_HOST"); } catch (SocketTimeoutException e) { newStatus = PDPStatus.Status.CANNOT_CONNECT.toString(); - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", " Heartbeat '" + pdp.getId() + "' connection timeout"); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", + " Heartbeat '" + pdp.getId() + "' connection timeout"); } catch (ConnectException e) { newStatus = PDPStatus.Status.CANNOT_CONNECT.toString(); - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", " Heartbeat '" + pdp.getId() + "' cannot connect"); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", + " Heartbeat '" + pdp.getId() + "' cannot connect"); } catch (Exception e) { newStatus = PDPStatus.Status.UNKNOWN.toString(); - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", "Heartbeat '" + pdp.getId() + "' connect exception"); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", + "Heartbeat '" + pdp.getId() + "' connect exception"); } finally { // cleanup the connection - if(connection != null) + if (connection != null) connection.disconnect(); } - if ( ! pdp.getStatus().getStatus().toString().equals(newStatus)) { + if (!pdp.getStatus().getStatus().toString().equals(newStatus)) { if (LOGGER.isDebugEnabled()) { - LOGGER.debug("previous status='" + pdp.getStatus().getStatus()+"' new Status='" + newStatus + "'"); + LOGGER.debug("previous status='" + pdp.getStatus().getStatus() + "' new Status='" + + newStatus + "'"); } try { setPDPSummaryStatus(pdp, newStatus); } catch (PAPException e) { - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", "Unable to set state for PDP '" + pdp.getId()); + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", + "Unable to set state for PDP '" + pdp.getId()); } changeSeen = true; } @@ -2543,12 +2625,12 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } private void setPDPSummaryStatus(OnapPDP pdp, String newStatus) throws PAPException { - synchronized(papEngine) { + synchronized (papEngine) { StdPDPStatus status = new StdPDPStatus(); status.setStatus(PDPStatus.Status.valueOf(newStatus)); - ((StdPDP)pdp).setStatus(status); + ((StdPDP) pdp).setStatus(status); // now adjust the group - StdPDPGroup group = (StdPDPGroup)papEngine.getPDPGroup((OnapPDP) pdp); + StdPDPGroup group = (StdPDPGroup) papEngine.getPDPGroup((OnapPDP) pdp); // if the PDP was just deleted it may transiently exist but not be in a group if (group != null) { group.resetStatus(); @@ -2605,22 +2687,24 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } @Override - public void pdpChanged(OnapPDP pdp) { + public void pdpChanged(OnapPDP pdp) { // kick off a thread to do an event notification for each PDP. // This needs to be on a separate thread so that PDPs that do not respond (down, non-existent, etc) - // do not block the PSP response to the AC, which would freeze the GUI until all PDPs sequentially respond or time-out. + // do not block the PSP response to the AC, which would freeze the GUI until all PDPs sequentially respond or + // time-out. Thread t = new Thread(new UpdatePDPThread(pdp)); - if(CheckPDP.validateID(pdp.getId())){ + if (CheckPDP.validateID(pdp.getId())) { t.start(); } } - public void pdpChanged(OnapPDP pdp, ONAPLoggingContext loggingContext) { + public void pdpChanged(OnapPDP pdp, ONAPLoggingContext loggingContext) { // kick off a thread to do an event notification for each PDP. // This needs to be on a separate thread so that PDPs that do not respond (down, non-existent, etc) - // do not block the PSP response to the AC, which would freeze the GUI until all PDPs sequentially respond or time-out. + // do not block the PSP response to the AC, which would freeze the GUI until all PDPs sequentially respond or + // time-out. Thread t = new Thread(new UpdatePDPThread(pdp, loggingContext)); - if(CheckPDP.validateID(pdp.getId())){ + if (CheckPDP.validateID(pdp.getId())) { t.start(); } } @@ -2636,8 +2720,9 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList public UpdatePDPThread(OnapPDP pdp, ONAPLoggingContext loggingContext) { this.pdp = pdp; - if ((loggingContext != null) && (loggingContext.getRequestID() != null || loggingContext.getRequestID() == "")) { - this.requestId = loggingContext.getRequestID(); + if ((loggingContext != null) && (loggingContext.getRequestID() != null || + Objects.equals(loggingContext.getRequestID(), ""))) { + this.requestId = loggingContext.getRequestID(); } this.loggingContext = loggingContext; } @@ -2648,40 +2733,47 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList // get a new logging context for the thread try { if (this.loggingContext == null) { - loggingContext = new ONAPLoggingContext(baseLoggingContext); + loggingContext = new ONAPLoggingContext(baseLoggingContext); } } catch (Exception e) { - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", " Failed to send property file to " + pdp.getId()); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", + " Failed to send property file to " + pdp.getId()); // Since this is a server-side error, it probably does not reflect a problem on the client, // so do not change the PDP status. return; } try { loggingContext.setServiceName("PAP:PDP.putConfig"); - // If a requestId was provided, use it, otherwise generate one; post to loggingContext to be used later when calling PDP - if ((requestId == null) || (requestId == "")) { + // If a requestId was provided, use it, otherwise generate one; post to loggingContext to be used + // later when calling PDP + if ((requestId == null) || (Objects.equals(requestId, ""))) { UUID requestID = UUID.randomUUID(); loggingContext.setRequestID(requestID.toString()); - PolicyLogger.info("requestID not provided in call to XACMLPapSrvlet (UpdatePDPThread) so we generated one: " + loggingContext.getRequestID()); + PolicyLogger + .info("requestID not provided in call to XACMLPapSrvlet (UpdatePDPThread) so we generated" + + " one: " + + loggingContext.getRequestID()); } else { loggingContext.setRequestID(requestId); - PolicyLogger.info("requestID was provided in call to XACMLPapSrvlet (UpdatePDPThread): " + loggingContext.getRequestID()); + PolicyLogger.info("requestID was provided in call to XACMLPapSrvlet (UpdatePDPThread): " + + loggingContext.getRequestID()); } loggingContext.transactionStarted(); // the Id of the PDP is its URL if (LOGGER.isDebugEnabled()) { LOGGER.debug("creating url for id '" + pdp.getId() + "'"); } - //TODO - currently always send both policies and pips. Do we care enough to add code to allow sending just one or the other? + //TODO - currently always send both policies and pips. Do we care enough to add code to allow + // sending just one or the other? //TODO (need to change "cache=", implying getting some input saying which to change) URL url = new URL(pdp.getId() + "?cache=all"); // Open up the connection - connection = (HttpURLConnection)url.openConnection(); + connection = (HttpURLConnection) url.openConnection(); // Setup our method and headers connection.setRequestMethod("PUT"); // Authentication String encoding = CheckPDP.getEncoding(pdp.getId()); - if(encoding !=null){ + if (encoding != null) { connection.setRequestProperty("Authorization", "Basic " + encoding); } connection.setRequestProperty("Content-Type", "text/x-java-properties"); @@ -2705,13 +2797,15 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList group.getPolicyProperties().store(os, ""); Properties policyLocations = new Properties(); for (PDPPolicy policy : group.getPolicies()) { - policyLocations.put(policy.getId() + ".url", XACMLPapServlet.papURL + "?id=" + policy.getId()); + policyLocations + .put(policy.getId() + ".url", XACMLPapServlet.papURL + "?id=" + policy.getId()); } policyLocations.store(os, ""); group.getPipConfigProperties().store(os, ""); } } catch (Exception e) { - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", " Failed to send property file to " + pdp.getId()); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", + " Failed to send property file to " + pdp.getId()); // Since this is a server-side error, it probably does not reflect a problem on the client, // so do not change the PDP status. return; @@ -2734,27 +2828,34 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.audit("Transaction Success. PDP is configured correctly."); setPDPSummaryStatus(pdp, PDPStatus.Status.OUT_OF_SYNCH); } else { - LOGGER.warn("Failed: " + connection.getResponseCode() + " message: " + connection.getResponseMessage()); + LOGGER.warn("Failed: " + connection.getResponseCode() + " message: " + + connection.getResponseMessage()); loggingContext.transactionEnded(); - auditLogger.warn("Failed: " + connection.getResponseCode() + " message: " + connection.getResponseMessage()); - PolicyLogger.audit("Transaction Failed: " + connection.getResponseCode() + " message: " + connection.getResponseMessage()); + auditLogger.warn("Failed: " + connection.getResponseCode() + " message: " + + connection.getResponseMessage()); + PolicyLogger.audit("Transaction Failed: " + connection.getResponseCode() + " message: " + + connection.getResponseMessage()); setPDPSummaryStatus(pdp, PDPStatus.Status.UNKNOWN); } } catch (Exception e) { LOGGER.debug(e); - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", " Unable to sync config with PDP '" + pdp.getId() + "'"); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", + " Unable to sync config with PDP '" + pdp.getId() + "'"); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed: Unable to sync config with PDP '" + pdp.getId() + "': " + e); try { setPDPSummaryStatus(pdp, PDPStatus.Status.UNKNOWN); } catch (PAPException e1) { LOGGER.debug(e1); - PolicyLogger.audit("Transaction Failed: Unable to set status of PDP " + pdp.getId() + " to UNKNOWN: " + e); - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", " Unable to set status of PDP '" + pdp.getId() + "' to UNKNOWN"); + PolicyLogger + .audit("Transaction Failed: Unable to set status of PDP " + pdp.getId() + " to UNKNOWN: " + + e); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", + " Unable to set status of PDP '" + pdp.getId() + "' to UNKNOWN"); } } finally { // cleanup the connection - if(connection != null){ + if (connection != null) { connection.disconnect(); } // tell the AC to update it's status info @@ -2783,17 +2884,19 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList HttpURLConnection connection = null; try { acURL += "?PAPNotification=true"; - //TODO - Currently we just tell AC that "Something changed" without being specific. Do we want to tell it which group/pdp changed? + //TODO - Currently we just tell AC that "Something changed" without being specific. Do we want + // to tell it which group/pdp changed? //TODO - If so, put correct parameters into the Query string here acURL += "&objectType=all" + "&action=update"; if (LOGGER.isDebugEnabled()) { LOGGER.debug("creating url for id '" + acURL + "'"); } - //TODO - currently always send both policies and pips. Do we care enough to add code to allow sending just one or the other? + //TODO - currently always send both policies and pips. Do we care enough to add code to allow + // sending just one or the other? //TODO (need to change "cache=", implying getting some input saying which to change) - URL url = new URL(acURL ); + URL url = new URL(acURL); // Open up the connection - connection = (HttpURLConnection)url.openConnection(); + connection = (HttpURLConnection) url.openConnection(); // Setup our method and headers connection.setRequestMethod("PUT"); connection.setRequestProperty("Content-Type", "text/x-java-properties"); @@ -2812,15 +2915,17 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList if (connection.getResponseCode() == 204) { LOGGER.info("Success. We updated correctly."); } else { - LOGGER.warn(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Failed: " + connection.getResponseCode() + " message: " + connection.getResponseMessage()); + LOGGER.warn(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Failed: " + connection.getResponseCode() + + " message: " + connection.getResponseMessage()); } } catch (Exception e) { - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", " Unable to sync config AC '" + acURL + "'"); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", + " Unable to sync config AC '" + acURL + "'"); disconnectedACs.add(acURL); } finally { // cleanup the connection - if(connection != null) + if (connection != null) connection.disconnect(); } } @@ -2831,7 +2936,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } } - private void testService(ONAPLoggingContext loggingContext, HttpServletResponse response) throws IOException{ + private void testService(ONAPLoggingContext loggingContext, HttpServletResponse response) throws IOException { LOGGER.info("Test request received"); try { im.evaluateSanity(); @@ -2841,8 +2946,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); response.setStatus(HttpServletResponse.SC_OK); - return; - }catch (ForwardProgressException | AdministrativeStateException | StandbyStatusException e){ + } catch (ForwardProgressException | AdministrativeStateException | StandbyStatusException e) { String submsg; if (e instanceof ForwardProgressException) { submsg = " is not making forward progress."; @@ -2858,12 +2962,11 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); - setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); - return; - }catch (Exception e) { + setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); + } catch (Exception e) { //A subsystem is not making progress, is locked, standby or is not responding String eMsg = e.getMessage(); - if(eMsg == null){ + if (eMsg == null) { eMsg = "No Exception Message"; } String message = "GET:/pap/test called and PAP " + papResourceName + " has had a subsystem failure." @@ -2874,21 +2977,20 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList PolicyLogger.audit("Transaction Failed - See Error.log"); //Get the specific list of subsystems that failed String ssFailureList = null; - for(String failedSS : papDependencyGroupsFlatArray){ - if(eMsg.contains(failedSS)){ - if(ssFailureList == null){ + for (String failedSS : papDependencyGroupsFlatArray) { + if (eMsg.contains(failedSS)) { + if (ssFailureList == null) { ssFailureList = failedSS; - }else{ - ssFailureList = ssFailureList.concat(","+failedSS); + } else { + ssFailureList = ssFailureList.concat("," + failedSS); } } } - if(ssFailureList == null){ + if (ssFailureList == null) { ssFailureList = "UnknownSubSystem"; } response.addHeader("X-ONAP-SubsystemFailure", ssFailureList); setResponseError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); - return; } } @@ -2898,29 +3000,31 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList private boolean authorizeRequest(HttpServletRequest request) { String clientCredentials = request.getHeader(ENVIRONMENT_HEADER); // Check if the Client is Authorized. - if(clientCredentials!=null && clientCredentials.equalsIgnoreCase(environment)){ + if (clientCredentials != null && clientCredentials.equalsIgnoreCase(environment)) { return true; - }else{ + } else { return false; } } - private static void loadWebapps() throws PAPException{ - if(actionHome == null || configHome == null){ + private static void loadWebapps() throws PAPException { + 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 PAPException("Invalid Webapps Path Location property : " + XACMLRestProperties.PROP_PAP_WEBAPPS); + throw new PAPException( + "Invalid Webapps Path Location property : " + XACMLRestProperties.PROP_PAP_WEBAPPS); } - Path webappsPathConfig = Paths.get(webappsPath.toString()+File.separator+"Config"); - Path webappsPathAction = Paths.get(webappsPath.toString()+File.separator+"Action"); + Path webappsPathConfig = Paths.get(webappsPath.toString() + File.separator + "Config"); + Path webappsPathAction = Paths.get(webappsPath.toString() + File.separator + "Action"); if (Files.notExists(webappsPathConfig)) { try { Files.createDirectories(webappsPathConfig); } catch (IOException e) { - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", "Failed to create config directory: " - + webappsPathConfig.toAbsolutePath().toString()); + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", + "Failed to create config directory: " + + webappsPathConfig.toAbsolutePath().toString()); } } if (Files.notExists(webappsPathAction)) { @@ -2936,7 +3040,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList } } - public static String getConfigHome(){ + public static String getConfigHome() { try { loadWebapps(); } catch (PAPException e) { @@ -2946,11 +3050,11 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList return configHome; } - private static void setConfigHome(){ + private static void setConfigHome() { configHome = getConfigHome(); } - public static String getActionHome(){ + public static String getActionHome() { try { loadWebapps(); } catch (PAPException e) { @@ -2960,7 +3064,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList return actionHome; } - private static void setActionHome(){ + private static void setActionHome() { actionHome = getActionHome(); } @@ -2972,21 +3076,22 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList return ia; } - public static String getPDPFile(){ + public static String getPDPFile() { return XACMLPapServlet.pdpFile; } - public static String getPersistenceUnit(){ + public static String getPersistenceUnit() { return PERSISTENCE_UNIT; } - public static PAPPolicyEngine getPAPEngine(){ + public static PAPPolicyEngine getPAPEngine() { return papEngine; } - public static PolicyDBDaoTransaction getDbDaoTransaction(){ + public static PolicyDBDaoTransaction getDbDaoTransaction() { return policyDBDao.getNewTransaction(); } + public static String getPapDbDriver() { return papDbDriver; } diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ActionPolicy.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ActionPolicy.java index 9f84a4eac..571a82036 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ActionPolicy.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ActionPolicy.java @@ -7,9 +7,9 @@ * 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. @@ -30,6 +30,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Objects; import org.onap.policy.common.logging.eelf.MessageCodes; import org.onap.policy.common.logging.eelf.PolicyLogger; @@ -56,17 +57,17 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObligationExpressionType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObligationExpressionsType; 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 oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; public class ActionPolicy extends Policy { - + /** * ActionPolicy Fields */ private static final Logger LOGGER = FlexLogger.getLogger(ActionPolicy.class); - + public static final String JSON_CONFIG = "JSON"; - + public static final String PDP_ACTION = "PDP"; public static final String PEP_ACTION = "PEP"; public static final String TYPE_ACTION = "REST"; @@ -81,46 +82,46 @@ public class ActionPolicy extends Policy { public static final String HEADERS_ATTRIBUTEID = "headers"; public static final String URL_ATTRIBUTEID = "url"; public static final String BODY_ATTRIBUTEID = "body"; - + List<String> dynamicLabelRuleAlgorithms = new LinkedList<>(); List<String> dynamicFieldFunctionRuleAlgorithms = new LinkedList<>(); List<String> dynamicFieldOneRuleAlgorithms = new LinkedList<>(); List<String> dynamicFieldTwoRuleAlgorithms = new LinkedList<>(); - - + private CommonClassDao commonClassDao; - + private static boolean isAttribute = false; - private synchronized static boolean getAttribute () { + + private synchronized static boolean getAttribute() { return isAttribute; } - + public ActionPolicy() { super(); } - - public ActionPolicy(PolicyRestAdapter policyAdapter, CommonClassDao commonClassDao){ + + public ActionPolicy(PolicyRestAdapter policyAdapter, CommonClassDao commonClassDao) { this.policyAdapter = policyAdapter; this.commonClassDao = commonClassDao; } @Override public Map<String, String> savePolicies() throws PAPException { - + Map<String, String> successMap = new HashMap<>(); - if(isPolicyExists()){ + if (isPolicyExists()) { successMap.put("EXISTS", "This Policy already exist on the PAP"); return successMap; } - - if(!ActionPolicy.getAttribute()) { + + if (!ActionPolicy.getAttribute()) { successMap.put("invalidAttribute", "Action Attrbute was not in the database."); return successMap; } - - if(!isPreparedToSave()){ + + if (!isPreparedToSave()) { //Prep and configure the policy for saving prepareToSave(); } @@ -128,24 +129,24 @@ 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.getNewFileName()); - successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject() ); - return successMap; + successMap = createPolicy(newPolicyPath, getCorrectPolicyDataObject()); + return successMap; } - + //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 @Override - public boolean prepareToSave() throws PAPException{ + public boolean prepareToSave() throws PAPException { - if(isPreparedToSave()){ + if (isPreparedToSave()) { //we have already done this return true; } - + int version = 0; String policyID = policyAdapter.getPolicyID(); version = policyAdapter.getHighestVersion(); - + // Create the Instance for pojo, PolicyType object is used in marshalling. if (policyAdapter.getPolicyType().equals("Action")) { PolicyType policyConfig = new PolicyType(); @@ -155,34 +156,36 @@ public class ActionPolicy extends Policy { policyConfig.setTarget(new TargetType()); policyAdapter.setData(policyConfig); } - + policyName = policyAdapter.getNewFileName(); - + if (policyAdapter.getData() != null) { // Action body is optional so checking value provided or not String comboDictValue = policyAdapter.getActionAttribute(); String actionBody = policyAdapter.getActionBody(); setAttribute(false); - //if actionBody is null or empty then we know the ActionAttribute in the request does not exist in the dictionary - if(!(actionBody==null || "".equals(actionBody))){ + //if actionBody is null or empty then we know the ActionAttribute in the request does not exist in the + // dictionary + if (!(actionBody == null || "".equals(actionBody))) { saveActionBody(policyName, actionBody); setAttribute(true); } else { - if(!getAttribute()){ - LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Could not find " + comboDictValue + " in the ActionPolicyDict table."); + if (!getAttribute()) { + 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(); - + Map<String, String> dynamicFieldComponentAttributes = policyAdapter.getDynamicFieldConfigAttributes(); - + // If there is any dynamic field attributes create the matches here for (String keyField : dynamicFieldComponentAttributes.keySet()) { String key = keyField; @@ -196,21 +199,21 @@ public class ActionPolicy extends Policy { TargetType target = new TargetType(); target.getAnyOf().add(anyOf); - + // Adding the target to the policy element actionPolicy.setTarget(target); - + RuleType rule = new RuleType(); rule.setRuleId(policyAdapter.getRuleID()); rule.setEffect(EffectType.PERMIT); rule.setTarget(new TargetType()); - + dynamicLabelRuleAlgorithms = policyAdapter.getDynamicRuleAlgorithmLabels(); dynamicFieldFunctionRuleAlgorithms = policyAdapter.getDynamicRuleAlgorithmCombo(); dynamicFieldOneRuleAlgorithms = policyAdapter.getDynamicRuleAlgorithmField1(); dynamicFieldTwoRuleAlgorithms = policyAdapter.getDynamicRuleAlgorithmField2(); - + // Rule attributes are optional and dynamic so check and add them to condition. if (dynamicLabelRuleAlgorithms != null && !dynamicLabelRuleAlgorithms.isEmpty()) { boolean isCompound = false; @@ -222,7 +225,7 @@ public class ActionPolicy extends Policy { if (dynamicFieldOneRuleAlgorithms.get(index).equals(labelAttr)) { ApplyType actionApply = new ApplyType(); - String selectedFunction = dynamicFieldFunctionRuleAlgorithms.get(index).toString(); + String selectedFunction = dynamicFieldFunctionRuleAlgorithms.get(index); String value1 = dynamicFieldOneRuleAlgorithms.get(index); String value2 = dynamicFieldTwoRuleAlgorithms.get(index); actionApply.setFunctionId(getFunctionDefinitionId(selectedFunction)); @@ -234,7 +237,8 @@ public class ActionPolicy extends Policy { } // if rule algorithm not a compound if (!isCompound) { - condition.setExpression(new ObjectFactory().createApply(getInnerActionApply(dynamicLabelRuleAlgorithms.get(index).toString()))); + condition.setExpression(new ObjectFactory().createApply(getInnerActionApply( + dynamicLabelRuleAlgorithms.get(index)))); } rule.setCondition(condition); } @@ -242,34 +246,35 @@ public class ActionPolicy extends Policy { rule.setObligationExpressions(getObligationExpressions()); actionPolicy.getCombinerParametersOrRuleCombinerParametersOrVariableDefinition().add(rule); policyAdapter.setPolicyData(actionPolicy); - } else { - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + "Unsupported data object." + policyAdapter.getData().getClass().getCanonicalName()); - } + } else { + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + "Unsupported data object." + Objects + .requireNonNull(policyAdapter.getData()).getClass().getCanonicalName()); + } setPreparedToSave(true); return true; } - + private static synchronized void setAttribute(boolean b) { isAttribute = b; } // Saving the json Configurations file if exists at server location for action policy. private void saveActionBody(String policyName, String actionBodyData) { - if(policyName.endsWith(".xml")){ - policyName = policyName.replace(".xml", ""); - } - File file = new File(ACTION_HOME+ File.separator + policyName + ".json"); - try(BufferedWriter bw = new BufferedWriter(new FileWriter(file.getAbsoluteFile()))) { + if (policyName.endsWith(".xml")) { + policyName = policyName.replace(".xml", ""); + } + File file = new File(ACTION_HOME + File.separator + policyName + ".json"); + try (BufferedWriter bw = new BufferedWriter(new FileWriter(file.getAbsoluteFile()))) { bw.write(actionBodyData); if (LOGGER.isInfoEnabled()) { LOGGER.info("Action Body is succesfully saved at " + file.getAbsolutePath()); } } catch (IOException e) { - LOGGER.error("Exception Occured"+e); + LOGGER.error("Exception Occured" + e); } } - + // Data required for obligation part is setting here. private ObligationExpressionsType getObligationExpressions() { ObligationExpressionsType obligations = new ObligationExpressionsType(); @@ -331,7 +336,7 @@ public class ActionPolicy extends Policy { obligation.getAttributeAssignmentExpression().add(assignmentMethod); // Add JSON_URL Assignment: - String actionBody = policyAdapter.getActionBody(); + String actionBody = policyAdapter.getActionBody(); if (actionBody != null) { AttributeAssignmentExpressionType assignmentJsonURL = new AttributeAssignmentExpressionType(); assignmentJsonURL.setAttributeId(BODY_ATTRIBUTEID); @@ -339,28 +344,29 @@ public class ActionPolicy extends Policy { AttributeValueType jsonURLAttributeValue = new AttributeValueType(); jsonURLAttributeValue.setDataType(URI_DATATYPE); - jsonURLAttributeValue.getContent().add(CONFIG_URL + "/Action/" + policyName + ".json"); + jsonURLAttributeValue.getContent().add(CONFIG_URL + "/Action/" + policyName + ".json"); assignmentJsonURL.setExpression(new ObjectFactory().createAttributeValue(jsonURLAttributeValue)); obligation.getAttributeAssignmentExpression().add(assignmentJsonURL); } String headerVal = policyAdapter.getActionDictHeader(); - if(headerVal != null && !headerVal.trim().isEmpty()){ + if (headerVal != null && !headerVal.trim().isEmpty()) { // parse it on : to get number of headers String[] result = headerVal.split(":"); - for (String eachString : result){ + for (String eachString : result) { // parse each value on = String[] textFieldVals = eachString.split("="); - obligation.getAttributeAssignmentExpression().add(addDynamicHeaders(textFieldVals[0], textFieldVals[1])); + obligation.getAttributeAssignmentExpression() + .add(addDynamicHeaders(textFieldVals[0], textFieldVals[1])); } } - + obligations.getObligationExpression().add(obligation); return obligations; } - + // if compound setting the inner apply here protected ApplyType getInnerActionApply(String value1Label) { ApplyType actionApply = new ApplyType(); @@ -368,7 +374,7 @@ public class ActionPolicy extends Policy { // check the index for the label. for (String labelAttr : dynamicLabelRuleAlgorithms) { if (labelAttr.equals(value1Label)) { - String value1 = dynamicFieldOneRuleAlgorithms.get(index).toString(); + String value1 = dynamicFieldOneRuleAlgorithms.get(index); // check if the row contains label again for (String labelValue : dynamicLabelRuleAlgorithms) { if (labelValue.equals(value1)) { @@ -404,11 +410,15 @@ public class ActionPolicy extends Policy { attributeDesignator2.setCategory(CATEGORY_RESOURCE); // Here set actual field values - attributeDesignator1.setAttributeId(value1.contains("resource:") ? value1.substring(9): value1.substring(8)); - attributeDesignator2.setAttributeId(value1.contains("resource:") ? value1.substring(9): value1.substring(8)); + attributeDesignator1 + .setAttributeId(value1.contains("resource:") ? value1.substring(9) : value1.substring(8)); + attributeDesignator2 + .setAttributeId(value1.contains("resource:") ? value1.substring(9) : value1.substring(8)); - innerActionApply1.getExpression().add(new ObjectFactory().createAttributeDesignator(attributeDesignator1)); - innerActionApply2.getExpression().add(new ObjectFactory().createAttributeDesignator(attributeDesignator2)); + innerActionApply1.getExpression() + .add(new ObjectFactory().createAttributeDesignator(attributeDesignator1)); + innerActionApply2.getExpression() + .add(new ObjectFactory().createAttributeDesignator(attributeDesignator2)); actionApply.getExpression().add(new ObjectFactory().createApply(innerActionApply1)); actionApply.getExpression().add(new ObjectFactory().createApply(innerActionApply2)); @@ -440,13 +450,16 @@ public class ActionPolicy extends Policy { attributeDesignator.setAttributeId(attributeId); } actionConditionAttributeValue.getContent().add(attributeValue); - innerActionApply.getExpression().add(new ObjectFactory().createAttributeDesignator(attributeDesignator)); + innerActionApply.getExpression() + .add(new ObjectFactory().createAttributeDesignator(attributeDesignator)); // Decide the order of element based the values. if (attributeId.equals(value1)) { actionApply.getExpression().add(new ObjectFactory().createApply(innerActionApply)); - actionApply.getExpression().add(new ObjectFactory().createAttributeValue(actionConditionAttributeValue)); + actionApply.getExpression() + .add(new ObjectFactory().createAttributeValue(actionConditionAttributeValue)); } else { - actionApply.getExpression().add(new ObjectFactory().createAttributeValue(actionConditionAttributeValue)); + actionApply.getExpression() + .add(new ObjectFactory().createAttributeValue(actionConditionAttributeValue)); actionApply.getExpression().add(new ObjectFactory().createApply(innerActionApply)); } } @@ -467,7 +480,7 @@ public class ActionPolicy extends Policy { actionApply.getExpression().add(new ObjectFactory().createApply(getInnerActionApply(value2))); return actionApply; } - + // Adding the dynamic headers if any private AttributeAssignmentExpressionType addDynamicHeaders(String header, String value) { AttributeAssignmentExpressionType assignmentHeaders = new AttributeAssignmentExpressionType(); @@ -486,10 +499,11 @@ public class ActionPolicy extends Policy { public Object getCorrectPolicyDataObject() { return policyAdapter.getPolicyData(); } - - public String getFunctionDefinitionId(String key){ - FunctionDefinition object = (FunctionDefinition) commonClassDao.getDataById(FunctionDefinition.class, "short_name", key); - if(object != null){ + + public String getFunctionDefinitionId(String key) { + FunctionDefinition object = + (FunctionDefinition) commonClassDao.getDataById(FunctionDefinition.class, "short_name", key); + if (object != null) { return object.getXacmlid(); } return null; diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ClosedLoopPolicy.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ClosedLoopPolicy.java index e446c2af3..8ca4dfa01 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ClosedLoopPolicy.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ClosedLoopPolicy.java @@ -7,9 +7,9 @@ * 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. @@ -54,7 +54,7 @@ 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 oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; public class ClosedLoopPolicy extends Policy { @@ -64,24 +64,24 @@ public class ClosedLoopPolicy extends Policy { super(); } - public ClosedLoopPolicy(PolicyRestAdapter policyAdapter){ + public ClosedLoopPolicy(PolicyRestAdapter policyAdapter) { this.policyAdapter = policyAdapter; } //save configuration of the policy based on the policyname private void saveConfigurations(String policyName, String jsonBody) { - if(policyName.endsWith(".xml")){ - policyName = policyName.replace(".xml", ""); - } - try (PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator+ policyName +".json")){ + if (policyName.endsWith(".xml")) { + policyName = policyName.replace(".xml", ""); + } + try (PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator + policyName + ".json")) { String body = jsonBody; //Remove the trapMaxAge in Verification Signature body = body.replace(",\"trapMaxAge\":null", ""); this.policyAdapter.setJsonBody(body); out.println(body); } catch (Exception e) { - LOGGER.error("Exception Occured while writing Configuration Data"+e); + LOGGER.error("Exception Occured while writing Configuration Data" + e); } } @@ -107,12 +107,12 @@ public class ClosedLoopPolicy extends Policy { public Map<String, String> savePolicies() throws PAPException { Map<String, String> successMap = new HashMap<>(); - if(isPolicyExists()){ + if (isPolicyExists()) { successMap.put("EXISTS", "This Policy already exist on the PAP"); return successMap; } - if(!isPreparedToSave()){ + if (!isPreparedToSave()) { prepareToSave(); } @@ -120,16 +120,16 @@ public class ClosedLoopPolicy extends Policy { Path newPolicyPath = null; newPolicyPath = Paths.get(policyAdapter.getNewFileName()); - successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject()); + successMap = createPolicy(newPolicyPath, getCorrectPolicyDataObject()); return successMap; } //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 @Override - public boolean prepareToSave() throws PAPException{ + public boolean prepareToSave() throws PAPException { - if(isPreparedToSave()){ + if (isPreparedToSave()) { //we have already done this return true; } @@ -166,9 +166,9 @@ public class ClosedLoopPolicy extends Policy { AllOfType allOfOne = new AllOfType(); String fileName = policyAdapter.getNewFileName(); - String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); + String name = fileName.substring(fileName.lastIndexOf("\\") + 1); if ((name == null) || (name.equals(""))) { - name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); + name = fileName.substring(fileName.lastIndexOf("/") + 1); } allOfOne.getMatch().add(createMatch("PolicyName", name)); AllOfType allOf = new AllOfType(); @@ -215,7 +215,8 @@ public class ClosedLoopPolicy extends Policy { try { accessURI = new URI(ACTION_ID); } catch (URISyntaxException e) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "CreateClosedLoopPolicy", "Exception creating ACCESS URI"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "CreateClosedLoopPolicy", + "Exception creating ACCESS URI"); } accessAttributeDesignator.setCategory(CATEGORY_ACTION); accessAttributeDesignator.setDataType(STRING_DATATYPE); @@ -234,7 +235,8 @@ public class ClosedLoopPolicy extends Policy { try { closedURI = new URI(RESOURCE_ID); } catch (URISyntaxException e) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "CreateClosedLoopPolicy", "Exception creating closed URI"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "CreateClosedLoopPolicy", + "Exception creating closed URI"); } closedAttributeDesignator.setCategory(CATEGORY_RESOURCE); closedAttributeDesignator.setDataType(STRING_DATATYPE); @@ -291,7 +293,7 @@ public class ClosedLoopPolicy extends Policy { AttributeValueType AttributeValue = new AttributeValueType(); AttributeValue.setDataType(URI_DATATYPE); - String content = CONFIG_URL +"/Config/" + 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)); @@ -306,9 +308,9 @@ public class ClosedLoopPolicy extends Policy { attributeValue3.setDataType(STRING_DATATYPE); fileName = FilenameUtils.removeExtension(fileName); fileName = fileName + ".xml"; - String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); + String name = fileName.substring(fileName.lastIndexOf("\\") + 1); if ((name == null) || (name.equals(""))) { - name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); + name = fileName.substring(fileName.lastIndexOf("/") + 1); } attributeValue3.getContent().add(name); assignment3.setExpression(new ObjectFactory().createAttributeValue(attributeValue3)); @@ -388,7 +390,6 @@ public class ClosedLoopPolicy extends Policy { advice.getAttributeAssignmentExpression().add(assignment9); - advices.getAdviceExpression().add(advice); return advices; } diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ConfigPolicy.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ConfigPolicy.java index 6c66898e3..0cd263800 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ConfigPolicy.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/ConfigPolicy.java @@ -8,9 +8,9 @@ * 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. @@ -75,20 +75,20 @@ public class ConfigPolicy extends Policy { super(); } - public ConfigPolicy(PolicyRestAdapter policyAdapter){ + public ConfigPolicy(PolicyRestAdapter policyAdapter) { this.policyAdapter = policyAdapter; } // Saving the Configurations file at server location for config policy. protected void saveConfigurations(String policyName) { String fileName = getConfigFile(policyName); - try(BufferedWriter bw = new BufferedWriter(new FileWriter(CONFIG_HOME + File.separator + fileName))) { + try (BufferedWriter bw = new BufferedWriter(new FileWriter(CONFIG_HOME + File.separator + fileName))) { bw.write(configBodyData); if (LOGGER.isDebugEnabled()) { LOGGER.debug("Configuration is succesfully saved"); } } catch (IOException e) { - LOGGER.error("Exception Occured while writing Configuration Data"+e); + LOGGER.error("Exception Occured while writing Configuration Data" + e); } } @@ -144,7 +144,7 @@ public class ConfigPolicy extends Policy { isValidForm = false; } } else if (id.equals(PROPERTIES_CONFIG)) { - if (!PolicyUtils.isPropValid(configBodyData)||configBodyData.equals("")) { + if (!PolicyUtils.isPropValid(configBodyData) || configBodyData.equals("")) { isValidForm = false; } } else if (id.equals(OTHER_CONFIG)) { @@ -161,12 +161,12 @@ public class ConfigPolicy extends Policy { public Map<String, String> savePolicies() throws PAPException { Map<String, String> successMap = new HashMap<>(); - if(isPolicyExists()){ + if (isPolicyExists()) { successMap.put("EXISTS", "This Policy already exist on the PAP"); return successMap; } - if(!isPreparedToSave()){ + if (!isPreparedToSave()) { //Prep and configure the policy for saving prepareToSave(); } @@ -174,16 +174,16 @@ 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.getNewFileName()); - successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject()); + successMap = createPolicy(newPolicyPath, getCorrectPolicyDataObject()); return successMap; } //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 @Override - public boolean prepareToSave() throws PAPException{ + public boolean prepareToSave() throws PAPException { - if(isPreparedToSave()){ + if (isPreparedToSave()) { return true; } @@ -214,9 +214,9 @@ public class ConfigPolicy extends Policy { AllOfType allOfOne = new AllOfType(); String fileName = policyAdapter.getNewFileName(); - String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); + String name = fileName.substring(fileName.lastIndexOf("\\") + 1); if ((name == null) || (name.equals(""))) { - name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); + name = fileName.substring(fileName.lastIndexOf("/") + 1); } allOfOne.getMatch().add(createMatch("PolicyName", name)); AllOfType allOf = new AllOfType(); @@ -269,9 +269,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){ + } catch (URISyntaxException e) { PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "ConfigPolicy", "Exception creating ACCESS URI"); } accessAttributeDesignator.setCategory(CATEGORY_ACTION); @@ -288,9 +288,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){ + } catch (URISyntaxException e) { PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "ConfigPolicy", "Exception creating Config URI"); } configAttributeDesignator.setCategory(CATEGORY_RESOURCE); @@ -365,9 +365,9 @@ public class ConfigPolicy extends Policy { fileName = FilenameUtils.removeExtension(fileName); fileName = fileName + ".xml"; - String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); + String name = fileName.substring(fileName.lastIndexOf("\\") + 1); if ((name == null) || (name.equals(""))) { - name = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); + name = fileName.substring(fileName.lastIndexOf("/") + 1); } attributeValue3.getContent().add(name); assignment3.setExpression(new ObjectFactory().createAttributeValue(attributeValue3)); diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/CreateBrmsParamPolicy.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/CreateBrmsParamPolicy.java index 3d9a779e3..6a0c92650 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/CreateBrmsParamPolicy.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/CreateBrmsParamPolicy.java @@ -7,9 +7,9 @@ * 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. @@ -66,7 +66,7 @@ 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 oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; public class CreateBrmsParamPolicy extends Policy { @@ -84,37 +84,36 @@ public class CreateBrmsParamPolicy extends Policy { public String expandConfigBody(String ruleContents, Map<String, String> brmsParamBody) { - Map<String,String> copyMap=new HashMap<>(); + Map<String, String> copyMap = new HashMap<>(); copyMap.putAll(brmsParamBody); copyMap.put("policyName", policyName.substring(0, policyName.replace(".xml", "").lastIndexOf('.'))); copyMap.put("policyScope", policyAdapter.getDomainDir()); - copyMap.put("policyVersion",policyAdapter.getHighestVersion().toString()); - copyMap.put("unique", ("p"+policyName+UUID.randomUUID().toString()).replaceAll("[^A-Za-z0-9]", "")); + copyMap.put("policyVersion", policyAdapter.getHighestVersion().toString()); + copyMap.put("unique", ("p" + policyName + UUID.randomUUID().toString()).replaceAll("[^A-Za-z0-9]", "")); //Finding all the keys in the Map data-structure. Iterator<String> iterator = copyMap.keySet().iterator(); Pattern p; Matcher m; - while(iterator.hasNext()) { + while (iterator.hasNext()) { //Converting the first character of the key into a lower case. - String input= iterator.next(); - String output = Character.toLowerCase(input.charAt(0)) + + String input = iterator.next(); + String output = Character.toLowerCase(input.charAt(0)) + (input.length() > 1 ? input.substring(1) : ""); //Searching for a pattern in the String using the key. - p=Pattern.compile("\\$\\{"+output+"\\}"); - m=p.matcher(ruleContents); + p = Pattern.compile("\\$\\{" + output + "\\}"); + m = p.matcher(ruleContents); //Replacing the value with the inputs provided by the user in the editor. String finalInput = copyMap.get(input); - if(finalInput.contains("$")){ + if (finalInput.contains("$")) { finalInput = finalInput.replace("$", "\\$"); } - ruleContents=m.replaceAll(finalInput); + ruleContents = m.replaceAll(finalInput); } return ruleContents; } - // Utility to read json data from the existing file to a string static String readFile(String path, Charset encoding) throws IOException { byte[] encoded = Files.readAllBytes(Paths.get(path)); @@ -127,13 +126,14 @@ public class CreateBrmsParamPolicy extends Policy { policyName = policyName.substring(0, policyName.lastIndexOf(".xml")); } try (PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator + policyName + ".txt")) { - String expandedBody=expandConfigBody(ruleBody,policyAdapter.getBrmsParamBody()); + 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"); + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsParamPolicy", + "Exception saving configuration file"); } } @@ -163,7 +163,7 @@ public class CreateBrmsParamPolicy extends Policy { public Map<String, String> savePolicies() throws PAPException { Map<String, String> successMap = new HashMap<>(); - if(isPolicyExists()){ + if (isPolicyExists()) { successMap.put("EXISTS", "This Policy already exist on the PAP"); return successMap; } @@ -175,8 +175,8 @@ public class CreateBrmsParamPolicy extends Policy { // xml. Path newPolicyPath = null; newPolicyPath = Paths.get(policyAdapter.getNewFileName()); - successMap = createPolicy(newPolicyPath,getCorrectPolicyDataObject()); - if(successMap == null){ + successMap = createPolicy(newPolicyPath, getCorrectPolicyDataObject()); + if (successMap == null) { successMap = new HashMap<>(); PolicyLogger.error("Failed to Update the Database Dictionary Tables."); successMap.put("error", "DB UPDATE"); @@ -184,14 +184,14 @@ public class CreateBrmsParamPolicy extends Policy { return successMap; } - private String getValueFromDictionary(String templateName){ + private String getValueFromDictionary(String templateName) { String ruleTemplate = null; CommonClassDaoImpl dbConnection = new CommonClassDaoImpl(); - String queryString="from BRMSParamTemplate where param_template_name= :templateName"; + String queryString = "from BRMSParamTemplate where param_template_name= :templateName"; SimpleBindings params = new SimpleBindings(); params.put("templateName", templateName); List<Object> result = dbConnection.getDataByQuery(queryString, params); - if(!result.isEmpty()){ + if (!result.isEmpty()) { BRMSParamTemplate template = (BRMSParamTemplate) result.get(0); ruleTemplate = template.getRule(); } @@ -199,14 +199,14 @@ public class CreateBrmsParamPolicy extends Policy { } protected Map<String, String> findType(String rule) { - Map<String, String> mapFieldType= new HashMap<>(); - if(rule!=null){ + Map<String, String> mapFieldType = new HashMap<>(); + if (rule != null) { try { StringBuilder params = new StringBuilder(); Boolean flag = false; Boolean comment = false; String lines[] = rule.split("\n"); - for(String line : lines){ + for (String line : lines) { if (line.isEmpty() || line.startsWith("//")) { continue; } @@ -214,8 +214,8 @@ public class CreateBrmsParamPolicy extends Policy { comment = true; continue; } - if (line.contains("//") && !(line.contains("http://") || line.contains("https://"))){ - line = line.split("\\/\\/")[0]; + if (line.contains("//") && !(line.contains("http://") || line.contains("https://"))) { + line = line.split("\\/\\/")[0]; } if (line.contains("/*")) { comment = true; @@ -264,7 +264,7 @@ public class CreateBrmsParamPolicy extends Policy { if (i == 0) { caption = components[i]; } - if(caption.equals("")){ + if (caption.equals("")) { break; } String nextComponent = ""; @@ -286,7 +286,8 @@ public class CreateBrmsParamPolicy extends Policy { } } } catch (Exception e) { - PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "CreateBrmsParamPolicy", "Exception parsing file in findType"); + PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "CreateBrmsParamPolicy", + "Exception parsing file in findType"); } } return mapFieldType; @@ -322,30 +323,32 @@ public class CreateBrmsParamPolicy extends Policy { policyName = policyAdapter.getNewFileName(); if (policyAdapter.getData() != null) { - Map<String,String> ruleAndUIValue= policyAdapter.getBrmsParamBody(); - String templateValue= ruleAndUIValue.get("templateName"); - String valueFromDictionary= getValueFromDictionary(templateValue); + Map<String, String> ruleAndUIValue = policyAdapter.getBrmsParamBody(); + String templateValue = ruleAndUIValue.get("templateName"); + String valueFromDictionary = getValueFromDictionary(templateValue); StringBuilder body = new StringBuilder(); try { - body.append("/* Autogenerated Code Please Don't change/remove this comment section. This is for the UI purpose. \n\t " + - "<$%BRMSParamTemplate=" + templateValue + "%$> \n"); + body.append( + "/* Autogenerated Code Please Don't change/remove this comment section. This is for the UI " + + "purpose. \n\t " + + "<$%BRMSParamTemplate=" + templateValue + "%$> \n"); body.append("<%$Values="); for (Map.Entry<String, String> entry : ruleAndUIValue.entrySet()) { String uiKey = entry.getKey(); - if(!"templateName".equals(uiKey)) { - body.append(uiKey+":-:"+entry.getValue()+":|:"); + if (!"templateName".equals(uiKey)) { + body.append(uiKey + ":-:" + entry.getValue() + ":|:"); } } body.append("$%> \n*/ \n"); body.append(valueFromDictionary + "\n"); - } - catch (Exception e) { - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsParamPolicy", "Exception saving policy"); + } catch (Exception e) { + PolicyLogger + .error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsParamPolicy", "Exception saving policy"); } - saveConfigurations(policyName,body.toString()); + saveConfigurations(policyName, body.toString()); // Make sure the filename ends with an extension if (!policyName.endsWith(".xml")) { @@ -361,10 +364,10 @@ public class CreateBrmsParamPolicy extends Policy { AllOfType allOfOne = new AllOfType(); String fileName = policyAdapter.getNewFileName(); - String name = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length()); + String name = fileName.substring(fileName.lastIndexOf("\\") + 1); if ((name == null) || (name.equals(""))) { - name = fileName.substring(fileName.lastIndexOf("/") + 1, - fileName.length()); + name = fileName.substring(fileName.lastIndexOf("/") + 1 + ); } allOfOne.getMatch().add(createMatch("PolicyName", name)); @@ -411,7 +414,8 @@ public class CreateBrmsParamPolicy extends Policy { try { accessURI = new URI(ACTION_ID); } catch (URISyntaxException e) { - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsParamPolicy", "Exception creating ACCESS URI"); + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsParamPolicy", + "Exception creating ACCESS URI"); } accessAttributeDesignator.setCategory(CATEGORY_ACTION); accessAttributeDesignator.setDataType(STRING_DATATYPE); @@ -433,7 +437,8 @@ public class CreateBrmsParamPolicy extends Policy { try { configURI = new URI(RESOURCE_ID); } catch (URISyntaxException e) { - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsParamPolicy", "Exception creating Config URI"); + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsParamPolicy", + "Exception creating Config URI"); } configAttributeDesignator.setCategory(CATEGORY_RESOURCE); @@ -469,7 +474,7 @@ public class CreateBrmsParamPolicy extends Policy { // Data required for Advice part is setting here. private AdviceExpressionsType getAdviceExpressions(int version, - String fileName) { + String fileName) { //Policy Config ID Assignment AdviceExpressionsType advices = new AdviceExpressionsType(); @@ -497,7 +502,7 @@ public class CreateBrmsParamPolicy extends Policy { AttributeValueType attributeValue = new AttributeValueType(); attributeValue.setDataType(URI_DATATYPE); - String content = CONFIG_URL + "/Config/"+ getConfigFile(policyName); + String content = CONFIG_URL + "/Config/" + getConfigFile(policyName); attributeValue.getContent().add(content); assignment2.setExpression(new ObjectFactory() @@ -513,11 +518,11 @@ public class CreateBrmsParamPolicy extends Policy { attributeValue3.setDataType(STRING_DATATYPE); fileName = FilenameUtils.removeExtension(fileName); fileName = fileName + ".xml"; - String name = fileName.substring(fileName.lastIndexOf("\\") + 1, - fileName.length()); + String name = fileName.substring(fileName.lastIndexOf("\\") + 1 + ); if ((name == null) || (name.equals(""))) { - name = fileName.substring(fileName.lastIndexOf("/") + 1, - fileName.length()); + name = fileName.substring(fileName.lastIndexOf("/") + 1 + ); } attributeValue3.getContent().add(name); assignment3.setExpression(new ObjectFactory() @@ -551,7 +556,7 @@ public class CreateBrmsParamPolicy extends Policy { //Config Name Assignment AttributeAssignmentExpressionType assignment6 = new AttributeAssignmentExpressionType(); - assignment6.setAttributeId("matching:" +CONFIGID); + assignment6.setAttributeId("matching:" + CONFIGID); assignment6.setCategory(CATEGORY_RESOURCE); assignment6.setIssuer(""); AttributeValueType configNameAttributeValue6 = new AttributeValueType(); @@ -560,30 +565,32 @@ public class CreateBrmsParamPolicy extends Policy { assignment6.setExpression(new ObjectFactory().createAttributeValue(configNameAttributeValue6)); advice.getAttributeAssignmentExpression().add(assignment6); // Adding Controller Information. - if(policyAdapter.getBrmsController()!=null){ + if (policyAdapter.getBrmsController() != null) { BRMSDictionaryController brmsDicitonaryController = new BRMSDictionaryController(); advice.getAttributeAssignmentExpression().add( - createResponseAttributes("controller:"+ policyAdapter.getBrmsController(), - brmsDicitonaryController.getControllerDataByID(policyAdapter.getBrmsController()).getController())); + createResponseAttributes("controller:" + policyAdapter.getBrmsController(), + brmsDicitonaryController.getControllerDataByID(policyAdapter.getBrmsController()) + .getController())); } - + // Adding Dependencies. - if(policyAdapter.getBrmsDependency()!=null){ + if (policyAdapter.getBrmsDependency() != null) { BRMSDictionaryController brmsDicitonaryController = new BRMSDictionaryController(); ArrayList<String> dependencies = new ArrayList<>(); StringBuilder key = new StringBuilder(); - for(String dependencyName: policyAdapter.getBrmsDependency()){ + for (String dependencyName : policyAdapter.getBrmsDependency()) { dependencies.add(brmsDicitonaryController.getDependencyDataByID(dependencyName).getDependency()); key.append(dependencyName + ","); } advice.getAttributeAssignmentExpression().add( - createResponseAttributes("dependencies:"+key.toString(), dependencies.toString())); + createResponseAttributes("dependencies:" + key.toString(), dependencies.toString())); } - + // Dynamic Field Config Attributes. Map<String, String> dynamicFieldConfigAttributes = policyAdapter.getDynamicFieldConfigAttributes(); for (Entry<String, String> map : dynamicFieldConfigAttributes.entrySet()) { - advice.getAttributeAssignmentExpression().add(createResponseAttributes("key:"+map.getKey(), map.getValue())); + advice.getAttributeAssignmentExpression() + .add(createResponseAttributes("key:" + map.getKey(), map.getValue())); } //Risk Attributes @@ -644,7 +651,7 @@ public class CreateBrmsParamPolicy extends Policy { return policyAdapter.getData(); } - private AttributeAssignmentExpressionType createResponseAttributes(String key, String value){ + private AttributeAssignmentExpressionType createResponseAttributes(String key, String value) { AttributeAssignmentExpressionType assignment7 = new AttributeAssignmentExpressionType(); assignment7.setAttributeId(key); assignment7.setCategory(CATEGORY_RESOURCE); diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/CreateBrmsRawPolicy.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/CreateBrmsRawPolicy.java index 7290f4cd8..efa28b2bb 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/CreateBrmsRawPolicy.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/CreateBrmsRawPolicy.java @@ -7,9 +7,9 @@ * 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. @@ -60,6 +60,8 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType; public class CreateBrmsRawPolicy extends Policy { + private static final String EMPTY_STRING = ""; + public CreateBrmsRawPolicy() { super(); } @@ -73,14 +75,15 @@ public class CreateBrmsRawPolicy extends Policy { // Saving the Configurations file at server location for CreateBrmsRawPolicy policy. protected void saveConfigurations(String policyName, String jsonBody) { - if (policyName.endsWith(".xml")) { - policyName = policyName.substring(0, - policyName.lastIndexOf(".xml")); - } - try (PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator + policyName + ".txt")){ + if (policyName.endsWith(".xml")) { + policyName = policyName.substring(0, + policyName.lastIndexOf(".xml")); + } + try (PrintWriter out = new PrintWriter(CONFIG_HOME + File.separator + policyName + ".txt")) { out.println(jsonBody); } catch (Exception e) { - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsRawPolicy", "Exception saving configurations file"); + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "CreateBrmsRawPolicy", + "Exception saving configurations file"); } } @@ -117,7 +120,7 @@ public class CreateBrmsRawPolicy extends Policy { public Map<String, String> savePolicies() throws PAPException { Map<String, String> successMap = new HashMap<>(); - if(isPolicyExists()){ + if (isPolicyExists()) { successMap.put("EXISTS", "This Policy already exist on the PAP"); return successMap; } @@ -145,7 +148,7 @@ public class CreateBrmsRawPolicy extends Policy { // separately because the fully configured policy is used for multiple // things @Override - public boolean prepareToSave() throws PAPException { + public boolean prepareToSave() { if (isPreparedToSave()) { // we have already done this @@ -158,7 +161,7 @@ public class CreateBrmsRawPolicy extends Policy { // Create the Instance for pojo, PolicyType object is used in // marshalling. - if (policyAdapter.getPolicyType().equals("Config")) { + if ("Config".equals(policyAdapter.getPolicyType())) { PolicyType policyConfig = new PolicyType(); policyConfig.setVersion(Integer.toString(version)); @@ -170,12 +173,11 @@ public class CreateBrmsRawPolicy extends Policy { policyName = policyAdapter.getNewFileName(); if (policyAdapter.getData() != null) { - //String jsonBody = policyAdapter.getJsonBody(); - String configBody=policyAdapter.getConfigBodyData(); + String configBody = policyAdapter.getConfigBodyData(); saveConfigurations(policyName, configBody); // Make sure the filename ends with an extension - if (policyName.endsWith(".xml") == false) { + if (!policyName.endsWith(".xml")) { policyName = policyName + ".xml"; } @@ -187,10 +189,9 @@ public class CreateBrmsRawPolicy extends Policy { AllOfType allOfOne = new AllOfType(); 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()); + String name = fileName.substring(fileName.lastIndexOf("\\") + 1); + if (EMPTY_STRING.equals(name)) { + name = fileName.substring(fileName.lastIndexOf("/") + 1); } allOfOne.getMatch().add(createMatch("PolicyName", name)); @@ -213,10 +214,10 @@ public class CreateBrmsRawPolicy extends Policy { anyOf.getAllOf().add(allOf); TargetType target = new TargetType(); - ((TargetType) target).getAnyOf().add(anyOf); + target.getAnyOf().add(anyOf); // Adding the target to the policy element - configPolicy.setTarget((TargetType) target); + configPolicy.setTarget(target); RuleType rule = new RuleType(); rule.setRuleId(policyAdapter.getRuleID()); @@ -237,7 +238,8 @@ public class CreateBrmsRawPolicy extends Policy { try { accessURI = new URI(ACTION_ID); } catch (URISyntaxException e) { - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsRawPolicy", "Exception creating ACCESS URI"); + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsRawPolicy", + "Exception creating ACCESS URI"); } accessAttributeDesignator.setCategory(CATEGORY_ACTION); accessAttributeDesignator.setDataType(STRING_DATATYPE); @@ -259,7 +261,8 @@ public class CreateBrmsRawPolicy extends Policy { try { configURI = new URI(RESOURCE_ID); } catch (URISyntaxException e) { - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsRawPolicy", "Exception creating Config URI"); + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "CreateBrmsRawPolicy", + "Exception creating Config URI"); } configAttributeDesignator.setCategory(CATEGORY_RESOURCE); @@ -296,7 +299,7 @@ public class CreateBrmsRawPolicy extends Policy { // Data required for Advice part is setting here. private AdviceExpressionsType getAdviceExpressions(int version, - String fileName) { + String fileName) { // Policy Config ID Assignment AdviceExpressionsType advices = new AdviceExpressionsType(); @@ -307,7 +310,7 @@ public class CreateBrmsRawPolicy extends Policy { AttributeAssignmentExpressionType assignment1 = new AttributeAssignmentExpressionType(); assignment1.setAttributeId("type"); assignment1.setCategory(CATEGORY_RESOURCE); - assignment1.setIssuer(""); + assignment1.setIssuer(EMPTY_STRING); AttributeValueType configNameAttributeValue = new AttributeValueType(); configNameAttributeValue.setDataType(STRING_DATATYPE); configNameAttributeValue.getContent().add("Configuration"); @@ -320,7 +323,7 @@ public class CreateBrmsRawPolicy extends Policy { AttributeAssignmentExpressionType assignment2 = new AttributeAssignmentExpressionType(); assignment2.setAttributeId("URLID"); assignment2.setCategory(CATEGORY_RESOURCE); - assignment2.setIssuer(""); + assignment2.setIssuer(EMPTY_STRING); AttributeValueType AttributeValue = new AttributeValueType(); AttributeValue.setDataType(URI_DATATYPE); @@ -335,17 +338,15 @@ public class CreateBrmsRawPolicy extends Policy { AttributeAssignmentExpressionType assignment3 = new AttributeAssignmentExpressionType(); assignment3.setAttributeId("PolicyName"); assignment3.setCategory(CATEGORY_RESOURCE); - assignment3.setIssuer(""); + assignment3.setIssuer(EMPTY_STRING); AttributeValueType attributeValue3 = new AttributeValueType(); attributeValue3.setDataType(STRING_DATATYPE); fileName = FilenameUtils.removeExtension(fileName); fileName = fileName + ".xml"; System.out.println(fileName); - String name = fileName.substring(fileName.lastIndexOf("\\") + 1, - fileName.length()); - if ((name == null) || (name.equals(""))) { - name = fileName.substring(fileName.lastIndexOf("/") + 1, - fileName.length()); + String name = fileName.substring(fileName.lastIndexOf("\\") + 1); + if (EMPTY_STRING.equals(name)) { + name = fileName.substring(fileName.lastIndexOf("/") + 1); } System.out.println(name); attributeValue3.getContent().add(name); @@ -357,7 +358,7 @@ public class CreateBrmsRawPolicy extends Policy { AttributeAssignmentExpressionType assignment4 = new AttributeAssignmentExpressionType(); assignment4.setAttributeId("VersionNumber"); assignment4.setCategory(CATEGORY_RESOURCE); - assignment4.setIssuer(""); + assignment4.setIssuer(EMPTY_STRING); AttributeValueType configNameAttributeValue4 = new AttributeValueType(); configNameAttributeValue4.setDataType(STRING_DATATYPE); configNameAttributeValue4.getContent().add(Integer.toString(version)); @@ -369,7 +370,7 @@ public class CreateBrmsRawPolicy extends Policy { AttributeAssignmentExpressionType assignment5 = new AttributeAssignmentExpressionType(); assignment5.setAttributeId("matching:" + ONAPID); assignment5.setCategory(CATEGORY_RESOURCE); - assignment5.setIssuer(""); + assignment5.setIssuer(EMPTY_STRING); AttributeValueType configNameAttributeValue5 = new AttributeValueType(); configNameAttributeValue5.setDataType(STRING_DATATYPE); configNameAttributeValue5.getContent().add(policyAdapter.getOnapName()); @@ -382,7 +383,7 @@ public class CreateBrmsRawPolicy extends Policy { AttributeAssignmentExpressionType assignment6 = new AttributeAssignmentExpressionType(); assignment6.setAttributeId("matching:" + CONFIGID); assignment6.setCategory(CATEGORY_RESOURCE); - assignment6.setIssuer(""); + assignment6.setIssuer(EMPTY_STRING); AttributeValueType configNameAttributeValue6 = new AttributeValueType(); configNameAttributeValue6.setDataType(STRING_DATATYPE); configNameAttributeValue6.getContent().add(policyAdapter.getConfigName()); @@ -390,37 +391,40 @@ public class CreateBrmsRawPolicy extends Policy { advice.getAttributeAssignmentExpression().add(assignment6); // Adding Controller Information. - if(policyAdapter.getBrmsController()!=null){ + if (policyAdapter.getBrmsController() != null) { BRMSDictionaryController brmsDicitonaryController = new BRMSDictionaryController(); advice.getAttributeAssignmentExpression().add( - createResponseAttributes("controller:"+ policyAdapter.getBrmsController(), - brmsDicitonaryController.getControllerDataByID(policyAdapter.getBrmsController()).getController())); + createResponseAttributes("controller:" + policyAdapter.getBrmsController(), + brmsDicitonaryController.getControllerDataByID(policyAdapter.getBrmsController()) + .getController())); } - + // Adding Dependencies. - if(policyAdapter.getBrmsDependency()!=null){ + if (policyAdapter.getBrmsDependency() != null) { BRMSDictionaryController brmsDicitonaryController = new BRMSDictionaryController(); ArrayList<String> dependencies = new ArrayList<>(); StringBuilder key = new StringBuilder(); - for(String dependencyName: policyAdapter.getBrmsDependency()){ + for (String dependencyName : policyAdapter.getBrmsDependency()) { dependencies.add(brmsDicitonaryController.getDependencyDataByID(dependencyName).getDependency()); - key.append(dependencyName + ","); + key.append(dependencyName).append(","); } advice.getAttributeAssignmentExpression().add( - createResponseAttributes("dependencies:"+key.toString(), dependencies.toString())); + createResponseAttributes("dependencies:" + key.toString(), dependencies.toString())); } - + // Dynamic Field Config Attributes. Map<String, String> dynamicFieldConfigAttributes = policyAdapter.getDynamicFieldConfigAttributes(); - for (String keyField : dynamicFieldConfigAttributes.keySet()) { - advice.getAttributeAssignmentExpression().add(createResponseAttributes("key:"+keyField, dynamicFieldConfigAttributes.get(keyField))); + for (Map.Entry<String, String> entry : dynamicFieldConfigAttributes.entrySet()) { + String keyField = entry.getKey(); + advice.getAttributeAssignmentExpression() + .add(createResponseAttributes("key:" + keyField, entry.getValue())); } //Risk Attributes AttributeAssignmentExpressionType assignment8 = new AttributeAssignmentExpressionType(); assignment8.setAttributeId("RiskType"); assignment8.setCategory(CATEGORY_RESOURCE); - assignment8.setIssuer(""); + assignment8.setIssuer(EMPTY_STRING); AttributeValueType configNameAttributeValue8 = new AttributeValueType(); configNameAttributeValue8.setDataType(STRING_DATATYPE); @@ -432,7 +436,7 @@ public class CreateBrmsRawPolicy extends Policy { AttributeAssignmentExpressionType assignment9 = new AttributeAssignmentExpressionType(); assignment9.setAttributeId("RiskLevel"); assignment9.setCategory(CATEGORY_RESOURCE); - assignment9.setIssuer(""); + assignment9.setIssuer(EMPTY_STRING); AttributeValueType configNameAttributeValue9 = new AttributeValueType(); configNameAttributeValue9.setDataType(STRING_DATATYPE); @@ -444,7 +448,7 @@ public class CreateBrmsRawPolicy extends Policy { AttributeAssignmentExpressionType assignment10 = new AttributeAssignmentExpressionType(); assignment10.setAttributeId("guard"); assignment10.setCategory(CATEGORY_RESOURCE); - assignment10.setIssuer(""); + assignment10.setIssuer(EMPTY_STRING); AttributeValueType configNameAttributeValue10 = new AttributeValueType(); configNameAttributeValue10.setDataType(STRING_DATATYPE); @@ -456,7 +460,7 @@ public class CreateBrmsRawPolicy extends Policy { AttributeAssignmentExpressionType assignment11 = new AttributeAssignmentExpressionType(); assignment11.setAttributeId("TTLDate"); assignment11.setCategory(CATEGORY_RESOURCE); - assignment11.setIssuer(""); + assignment11.setIssuer(EMPTY_STRING); AttributeValueType configNameAttributeValue11 = new AttributeValueType(); configNameAttributeValue11.setDataType(STRING_DATATYPE); @@ -474,11 +478,11 @@ public class CreateBrmsRawPolicy extends Policy { return policyAdapter.getData(); } - private AttributeAssignmentExpressionType createResponseAttributes(String key, String value){ + private AttributeAssignmentExpressionType createResponseAttributes(String key, String value) { AttributeAssignmentExpressionType assignment7 = new AttributeAssignmentExpressionType(); assignment7.setAttributeId(key); assignment7.setCategory(CATEGORY_RESOURCE); - assignment7.setIssuer(""); + assignment7.setIssuer(EMPTY_STRING); AttributeValueType configNameAttributeValue7 = new AttributeValueType(); configNameAttributeValue7.setDataType(STRING_DATATYPE); configNameAttributeValue7.getContent().add(value); diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/PolicyDBDao.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/PolicyDBDao.java index 1b786ed6a..cedefb04e 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/PolicyDBDao.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/components/PolicyDBDao.java @@ -95,7 +95,7 @@ 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); + private static final Logger logger = FlexLogger.getLogger(PolicyDBDao.class); private List<?> otherServers; private EntityManagerFactory emf; private static PolicyDBDao currentInstance = null; @@ -111,8 +111,10 @@ public class PolicyDBDao { public static final String action = "Action"; private static final String groupIdVar = "groupId"; private static final String deletedVar = "deleted"; - private static final String groupEntitySelectQuery = "SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"; - private static final String pdpEntitySelectQuery = "SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted"; + private static final String groupEntitySelectQuery = + "SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"; + private static final String pdpEntitySelectQuery = + "SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted"; private static final String groupCannotBeFound = "The group could not be found with id "; private static final String foundInDBNotDeleted = " were found in the database that are not deleted"; private static final String moreThanOnePDP = "Somehow, more than one pdp with the same id "; @@ -135,14 +137,16 @@ public class PolicyDBDao { /** * Get an instance of a PolicyDBDao. It creates one if it does not exist. * Only one instance is allowed to be created per server. + * * @param emf The EntityFactoryManager to be used for database connections * @return The new instance of PolicyDBDao or throw exception if the given emf is null. - * @throws IllegalStateException if a PolicyDBDao has already been constructed. Call getPolicyDBDaoInstance() to get this. + * @throws IllegalStateException if a PolicyDBDao has already been constructed. Call getPolicyDBDaoInstance() to + * get this. */ - public static PolicyDBDao getPolicyDBDaoInstance(EntityManagerFactory emf){ - logger.debug("getPolicyDBDaoInstance(EntityManagerFactory emf) as getPolicyDBDaoInstance("+emf+") called"); - if(currentInstance == null){ - if(emf != null){ + public static PolicyDBDao getPolicyDBDaoInstance(EntityManagerFactory emf) { + logger.debug("getPolicyDBDaoInstance(EntityManagerFactory emf) as getPolicyDBDaoInstance(" + emf + ") called"); + if (currentInstance == null) { + if (emf != null) { currentInstance = new PolicyDBDao(emf); return currentInstance; } @@ -153,100 +157,108 @@ public class PolicyDBDao { /** * Gets the current instance of PolicyDBDao. + * * @return The instance of PolicyDBDao or throws exception if the given instance is null. - * @throws IllegalStateException if a PolicyDBDao instance is null. Call createPolicyDBDaoInstance(EntityManagerFactory emf) to get this. + * @throws IllegalStateException if a PolicyDBDao instance is null. Call createPolicyDBDaoInstance + * (EntityManagerFactory emf) to get this. */ - public static PolicyDBDao getPolicyDBDaoInstance(){ + public static PolicyDBDao getPolicyDBDaoInstance() { logger.debug("getPolicyDBDaoInstance() as getPolicyDBDaoInstance() called"); - if(currentInstance != null){ + if (currentInstance != null) { return currentInstance; } - throw new IllegalStateException("The PolicyDBDao.currentInstance is Null. Use getPolicyDBDao(EntityManagerFactory emf)"); + throw new IllegalStateException( + "The PolicyDBDao.currentInstance is Null. Use getPolicyDBDao(EntityManagerFactory emf)"); } - public void setPapEngine(PAPPolicyEngine papEngine2){ + public void setPapEngine(PAPPolicyEngine papEngine2) { this.papEngine = papEngine2; } - private PolicyDBDao(EntityManagerFactory emf){ - logger.debug("PolicyDBDao(EntityManagerFactory emf) as PolicyDBDao("+emf+") called"); + private PolicyDBDao(EntityManagerFactory emf) { + logger.debug("PolicyDBDao(EntityManagerFactory emf) as PolicyDBDao(" + emf + ") called"); this.emf = emf; //not needed in this release - if(!register()){ - PolicyLogger.error("This server's PolicyDBDao instance could not be registered and may not reveive updates"); + if (!register()) { + 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()); + if (logger.isDebugEnabled()) { + logger.debug("Number of remote PolicyDBDao instances: " + otherServers.size()); } - if(otherServers.isEmpty()){ + if (otherServers.isEmpty()) { logger.warn("List of PolicyDBDao servers is empty or could not be retrieved"); } } //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){ + private void startTransactionSynced(EntityManager entityMgr, int waitTime) { logger.debug("\n\nstartTransactionSynced(EntityManager entityMgr,int waitTime) as " - + "\n startTransactionSynced("+entityMgr+","+waitTime+") called\n\n"); + + "\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(); + if (logger.isDebugEnabled()) { + Map<String, Object> properties = entityMgr.getProperties(); logger.debug("\n\nstartTransactionSynced():" + "\n entityManager.getProperties() = " + properties + "\n\n"); } - try{ - if(logger.isDebugEnabled()){ + 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()){ + if (logger.isDebugEnabled()) { logger.debug("\n\nstartTransactionSynced():" + "\n GOT the DB lock" + "\n\n"); } - } catch(Exception e){ + } catch (Exception e) { System.out.println("Could not get lock entity"); - logger.error("Exception Occured"+e); + logger.error("Exception Occured" + e); } - if(lock == null){ - throw new IllegalStateException("The lock row does not exist in the table. Please create a primary key with value = 1."); + if (lock == null) { + throw new IllegalStateException( + "The lock row does not exist in the table. Please create a primary key with value = 1."); } } + /** * Gets the list of other registered PolicyDBDaos from the database + * * @return List (type PolicyDBDaoEntity) of other PolicyDBDaos */ - private List<?> getRemotePolicyDBDaoList(){ + private List<?> getRemotePolicyDBDaoList() { logger.debug("getRemotePolicyDBDaoList() as getRemotePolicyDBDaoList() called"); List<?> policyDBDaoEntityList = new LinkedList<>(); EntityManager em = emf.createEntityManager(); startTransactionSynced(em, 1000); - try{ + try { Query getPolicyDBDaoEntityQuery = em.createNamedQuery("PolicyDBDaoEntity.findAll"); policyDBDaoEntityList = getPolicyDBDaoEntityQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Exception querying for other registered PolicyDBDaos"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Exception querying for other registered PolicyDBDaos"); logger.warn("List of remote PolicyDBDaos will be empty", e); } - try{ + try { em.getTransaction().commit(); - } catch(Exception e){ + } catch (Exception e) { logger.warn("List of remote PolicyDBDaos will be empty", e); - try{ + try { em.getTransaction().rollback(); - } catch(Exception e2){ + } catch (Exception e2) { logger.debug("List of remote PolicyDBDaos will be empty", e2); } } @@ -254,7 +266,7 @@ public class PolicyDBDao { return policyDBDaoEntityList; } - public PolicyDBDaoTransaction getNewTransaction(){ + public PolicyDBDaoTransaction getNewTransaction() { logger.debug("getNewTransaction() as getNewTransaction() called"); return new PolicyDBDaoTransactionInstance(); } @@ -265,7 +277,7 @@ public class PolicyDBDao { * provide different transaction timeout values in ms because the audit will run longer * than normal transactions. */ - public PolicyDBDaoTransaction getNewAuditTransaction(){ + public PolicyDBDaoTransaction getNewAuditTransaction() { logger.debug("getNewAuditTransaction() as getNewAuditTransaction() called"); //Use the standard transaction wait time in ms int auditWaitMs = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_WAIT)); @@ -277,15 +289,16 @@ public class PolicyDBDao { /** * Checks if two strings are equal. Null strings ARE allowed. + * * @param one A String or null to compare * @param two A String or null to compare */ - private static boolean stringEquals(String one, String two){ - logger.debug("stringEquals(String one, String two) as stringEquals("+one+", "+two+") called"); - if(one == null && two == null){ + private static boolean stringEquals(String one, String two) { + logger.debug("stringEquals(String one, String two) as stringEquals(" + one + ", " + two + ") called"); + if (one == null && two == null) { return true; } - if(one == null || two == null){ + if (one == null || two == null) { return false; } return one.equals(two); @@ -293,34 +306,35 @@ public class PolicyDBDao { /** * Returns the url of this local pap server, removing the username and password, if they are present + * * @return The url of this local pap server */ - private String[] getPapUrlUserPass(){ + private String[] getPapUrlUserPass() { logger.debug("getPapUrl() as getPapUrl() called"); String url = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL); - if(url == null){ + if (url == null) { return null; } return splitPapUrlUserPass(url); } - private String[] splitPapUrlUserPass(String url){ + private String[] splitPapUrlUserPass(String url) { String[] urlUserPass = new String[3]; String[] commaSplit = url.split(","); urlUserPass[0] = commaSplit[0]; - if(commaSplit.length > 2){ + if (commaSplit.length > 2) { urlUserPass[1] = commaSplit[1]; urlUserPass[2] = commaSplit[2]; } - if(urlUserPass[1] == null || "".equals(urlUserPass[1])){ + if (urlUserPass[1] == null || "".equals(urlUserPass[1])) { String usernamePropertyValue = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_USERID); - if(usernamePropertyValue != null){ + if (usernamePropertyValue != null) { urlUserPass[1] = usernamePropertyValue; } } - if(urlUserPass[2] == null || "".equals(urlUserPass[2])){ + if (urlUserPass[2] == null || "".equals(urlUserPass[2])) { String passwordPropertyValue = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_PASS); - if(passwordPropertyValue != null){ + if (passwordPropertyValue != null) { urlUserPass[2] = passwordPropertyValue; } } @@ -330,38 +344,40 @@ public class PolicyDBDao { /** * Register the PolicyDBDao instance in the PolicyDBDaoEntity table + * * @return Boolean, were we able to register? */ - private boolean register(){ + private boolean register() { logger.debug("register() as register() called"); String[] url = getPapUrlUserPass(); //--- check URL length - if(url == null || url.length<3){ + if (url == null || url.length < 3) { return false; } EntityManager em = emf.createEntityManager(); - try{ + try { startTransactionSynced(em, 1000); - } catch(IllegalStateException e){ - logger.debug ("\nPolicyDBDao.register() caught an IllegalStateException: \n" +e + "\n"); + } catch (IllegalStateException e) { + logger.debug("\nPolicyDBDao.register() caught an IllegalStateException: \n" + e + "\n"); DatabaseLockEntity lock; lock = em.find(DatabaseLockEntity.class, 1); - if(lock==null){ + if (lock == null) { lock = new DatabaseLockEntity(); em.persist(lock); lock.setKey(1); - try{ + try { em.flush(); em.getTransaction().commit(); em.close(); - } catch(Exception e2){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, policyDBDaoVar, "COULD NOT CREATE DATABASELOCK ROW. WILL TRY ONE MORE TIME"); + } catch (Exception e2) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, policyDBDaoVar, + "COULD NOT CREATE DATABASELOCK ROW. WILL TRY ONE MORE TIME"); } em = emf.createEntityManager(); - try{ + try { startTransactionSynced(em, 1000); - } catch(Exception e3){ + } catch (Exception e3) { String msg = "DATABASE LOCKING NOT WORKING. CONCURRENCY CONTROL NOT WORKING"; PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e3, policyDBDaoVar, msg); throw new IllegalStateException("msg" + "\n" + e3); @@ -370,52 +386,55 @@ public class PolicyDBDao { } logger.debug("\nPolicyDBDao.register. Database locking and concurrency control is initialized\n"); PolicyDBDaoEntity foundPolicyDBDaoEntity = em.find(PolicyDBDaoEntity.class, url[0]); - Query getPolicyDBDaoEntityQuery = em.createQuery("SELECT e FROM PolicyDBDaoEntity e WHERE e.policyDBDaoUrl=:url"); + Query getPolicyDBDaoEntityQuery = + em.createQuery("SELECT e FROM PolicyDBDaoEntity e WHERE e.policyDBDaoUrl=:url"); getPolicyDBDaoEntityQuery.setParameter("url", url[0]); // encrypt the password String txt = null; - try{ + try { txt = CryptoUtils.encryptTxt(url[2].getBytes(StandardCharsets.UTF_8)); - } catch(Exception e){ + } catch (Exception e) { logger.debug(e); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Could not encrypt PAP password"); } - if(foundPolicyDBDaoEntity == null){ + if (foundPolicyDBDaoEntity == null) { PolicyDBDaoEntity newPolicyDBDaoEntity = new PolicyDBDaoEntity(); em.persist(newPolicyDBDaoEntity); newPolicyDBDaoEntity.setPolicyDBDaoUrl(url[0]); - newPolicyDBDaoEntity.setDescription("PAP server at "+url[0]); + newPolicyDBDaoEntity.setDescription("PAP server at " + url[0]); newPolicyDBDaoEntity.setUsername(url[1]); newPolicyDBDaoEntity.setPassword(txt); - try{ + try { em.getTransaction().commit(); - } catch(Exception e){ + } catch (Exception e) { logger.debug(e); - try{ + try { em.getTransaction().rollback(); - } catch(Exception e2){ + } catch (Exception e2) { logger.debug(e2); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, policyDBDaoVar, "Could not add new PolicyDBDao to the database"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, policyDBDaoVar, + "Could not add new PolicyDBDao to the database"); } } } else { //just want to update in order to change modified date - if(url[1] != null && !stringEquals(url[1], foundPolicyDBDaoEntity.getUsername())){ + if (url[1] != null && !stringEquals(url[1], foundPolicyDBDaoEntity.getUsername())) { foundPolicyDBDaoEntity.setUsername(url[1]); } - if(txt != null && !stringEquals(txt, foundPolicyDBDaoEntity.getPassword())){ + if (txt != null && !stringEquals(txt, foundPolicyDBDaoEntity.getPassword())) { foundPolicyDBDaoEntity.setPassword(txt); } foundPolicyDBDaoEntity.preUpdate(); - try{ + try { em.getTransaction().commit(); - } catch(Exception e){ + } catch (Exception e) { logger.debug(e); - try{ + try { em.getTransaction().rollback(); - } catch(Exception e2){ + } catch (Exception e2) { logger.debug(e2); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, policyDBDaoVar, "Could not update PolicyDBDao in the database"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, policyDBDaoVar, + "Could not update PolicyDBDao in the database"); } } } @@ -425,62 +444,66 @@ public class PolicyDBDao { } private class NotifyOtherThread implements Runnable { - public NotifyOtherThread(Object obj, long entityId, String entityType, String newGroupId){ + public NotifyOtherThread(Object obj, long entityId, String entityType, String newGroupId) { this.obj = obj; this.entityId = entityId; this.entityType = entityType; this.newGroupId = newGroupId; } + private Object obj; private long entityId; private String entityType; private String newGroupId; + @Override - public void run(){ + public void run() { //naming of 'o' is for backwards compatibility with the rest of the function - PolicyDBDaoEntity dbdEntity = (PolicyDBDaoEntity)obj; + PolicyDBDaoEntity dbdEntity = (PolicyDBDaoEntity) obj; String o = dbdEntity.getPolicyDBDaoUrl(); String username = dbdEntity.getUsername(); String txt; - try{ + try { txt = new String(CryptoUtils.decryptTxt(dbdEntity.getPassword()), StandardCharsets.UTF_8); - } catch(Exception e){ + } catch (Exception e) { logger.debug(e); //if we can't decrypt, might as well try it anyway txt = dbdEntity.getPassword(); } Base64.Encoder encoder = Base64.getEncoder(); - String encoding = encoder.encodeToString((username+":"+txt).getBytes(StandardCharsets.UTF_8)); + String encoding = encoder.encodeToString((username + ":" + txt).getBytes(StandardCharsets.UTF_8)); HttpURLConnection connection = null; UUID requestID = UUID.randomUUID(); URL url; String papUrl; try { String[] papUrlUserPass = getPapUrlUserPass(); - if(papUrlUserPass == null ){ + if (papUrlUserPass == null) { papUrl = "undefined"; } else { papUrl = papUrlUserPass[0]; } - logger.debug("We are going to try to notify "+o); + logger.debug("We are going to try to notify " + o); //is this our own url? String ourUrl = o; - try{ - ourUrl = splitPapUrlUserPass((String)o)[0]; - }catch(Exception e){ + try { + ourUrl = splitPapUrlUserPass((String) o)[0]; + } catch (Exception e) { logger.debug(e); } - if(o == null){ + if (o == null) { o = "undefined"; } - if(papUrl.equals(ourUrl)){ - logger.debug(o+" is our url, skipping notify"); + if (papUrl.equals(ourUrl)) { + logger.debug(o + " is our url, skipping notify"); return; } - if(newGroupId == null){ - url = new URL(o+"?policydbdaourl="+papUrl+"&entityid="+entityId+"&entitytype="+entityType); + if (newGroupId == null) { + url = new URL(o + "?policydbdaourl=" + papUrl + "&entityid=" + entityId + "&entitytype=" + + entityType); } else { - url = new URL(o+"?policydbdaourl="+papUrl+"&entityid="+entityId+"&entitytype="+entityType+"&extradata="+newGroupId); + url = new URL(o + "?policydbdaourl=" + papUrl + "&entityid=" + entityId + "&entitytype=" + + entityType + "&extradata=" + newGroupId); } } catch (MalformedURLException e) { logger.warn("Caught MalformedURLException on: new URL()", e); @@ -490,11 +513,11 @@ public class PolicyDBDao { // Open up the connection // logger.info("PolicyDBDao: NotifyOtherThread: notifying other PAPs of an update"); - logger.info("Connecting with url: "+url); + logger.info("Connecting with url: " + url); try { - connection = (HttpURLConnection)url.openConnection(); + connection = (HttpURLConnection) url.openConnection(); } catch (Exception e) { - logger.warn("Caught exception on: url.openConnection()",e); + logger.warn("Caught exception on: url.openConnection()", e); return; } // @@ -504,7 +527,7 @@ public class PolicyDBDao { connection.setRequestMethod("PUT"); } catch (ProtocolException e) { //why would this error ever occur? - logger.warn("Caught ProtocolException on connection.setRequestMethod(\"PUT\");",e); + logger.warn("Caught ProtocolException on connection.setRequestMethod(\"PUT\");", e); return; } connection.setRequestProperty("Authorization", "Basic " + encoding); @@ -512,9 +535,10 @@ public class PolicyDBDao { 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){ + 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.", e); readTimeout = 10000; } @@ -534,14 +558,15 @@ public class PolicyDBDao { try { connection.connect(); } catch (Exception e) { - logger.warn("Caught exception on: connection.connect()",e); + logger.warn("Caught exception on: connection.connect()", e); return; } try { if (connection.getResponseCode() == 200) { logger.info("PolicyDBDao: NotifyOtherThread received response 200 from pap server on notify"); } else { - logger.warn("PolicyDBDao: NotifyOtherThread connection response code not 200, received: "+connection.getResponseCode()); + logger.warn("PolicyDBDao: NotifyOtherThread connection response code not 200, received: " + + connection.getResponseCode()); } } catch (Exception e) { logger.warn("Caught Exception on: connection.getResponseCode() ", e); @@ -556,7 +581,7 @@ public class PolicyDBDao { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); String description = ""; - try{ + try { DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(source); @@ -564,8 +589,8 @@ public class PolicyDBDao { XPath xpath = xpathFactory.newXPath(); description = xpath.evaluate(expression, document); - }catch(Exception e){ - logger.error("Exception Occured while evaluating path"+e); + } catch (Exception e) { + logger.error("Exception Occured while evaluating path" + e); } return description; } @@ -573,70 +598,79 @@ public class PolicyDBDao { private static final String POLICY_NOTIFICATION = "policy"; private static final String PDP_NOTIFICATION = "pdp"; private static 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); + + 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."+e); + 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." + e); retries = 3; } //if someone sets it to some dumb value, we need to make sure it will try at least once - if(retries < 1){ + if (retries < 1) { retries = 1; } int pauseBetweenRetries = 1000; - switch(entityType){ + switch (entityType) { case POLICY_NOTIFICATION: - for(int i=0; i<retries;i++){ - try{ + for (int i = 0; i < retries; i++) { + try { handleIncomingPolicyChange(entityId); break; - } catch(Exception e){ + } catch (Exception e) { logger.debug(e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught exception on handleIncomingPolicyChange("+url+", "+entityId+", "+extraData+")"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught exception on handleIncomingPolicyChange(" + url + ", " + entityId + ", " + + extraData + ")"); } - try{ + try { Thread.sleep(pauseBetweenRetries); - }catch(InterruptedException ie){ + } catch (InterruptedException ie) { Thread.currentThread().interrupt(); break; } } break; case PDP_NOTIFICATION: - for(int i=0; i<retries;i++){ - try{ + for (int i = 0; i < retries; i++) { + try { handleIncomingPdpChange(entityId, transaction); break; - } catch(Exception e){ + } catch (Exception e) { logger.debug(e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught exception on handleIncomingPdpChange("+url+", "+entityId+", "+transaction+")"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught exception on handleIncomingPdpChange(" + url + ", " + entityId + ", " + + transaction + ")"); } - try{ + try { Thread.sleep(pauseBetweenRetries); - }catch(InterruptedException ie){ + } catch (InterruptedException ie) { Thread.currentThread().interrupt(); break; } } break; case GROUP_NOTIFICATION: - for(int i=0; i<retries;i++){ - try{ + for (int i = 0; i < retries; i++) { + try { handleIncomingGroupChange(entityId, extraData, transaction); break; - }catch(Exception e){ + } catch (Exception e) { logger.debug(e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught exception on handleIncomingGroupChange("+url+", "+entityId+", "+extraData+", "+transaction+", "+xacmlPapServlet+")"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught exception on handleIncomingGroupChange(" + url + ", " + entityId + ", " + + extraData + ", " + transaction + ", " + xacmlPapServlet + ")"); } - try{ + try { Thread.sleep(pauseBetweenRetries); - }catch(InterruptedException ie){ + } catch (InterruptedException ie) { Thread.currentThread().interrupt(); break; } @@ -647,21 +681,23 @@ public class PolicyDBDao { transaction.rollbackTransaction(); } - private void handleIncomingGroupChange(String groupId, String extraData,PolicyDBDaoTransaction transaction) throws PAPException, PolicyDBException{ + private void handleIncomingGroupChange(String groupId, String extraData, PolicyDBDaoTransaction transaction) + throws PAPException, PolicyDBException { GroupEntity groupRecord = null; long groupIdLong = -1; - try{ + try { groupIdLong = Long.parseLong(groupId); - } catch(NumberFormatException e){ - throw new IllegalArgumentException("groupId "+groupId+" cannot be parsed into a long"); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("groupId " + groupId + " cannot be parsed into a long"); } - try{ + try { groupRecord = transaction.getGroup(groupIdLong); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get pdp group record with transaction.getGroup("+groupIdLong+");"); - throw new PAPException("Could not get local group "+groupIdLong); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception trying to get pdp group record with transaction.getGroup(" + groupIdLong + ");"); + throw new PAPException("Could not get local group " + groupIdLong); } - if(groupRecord == null){ + if (groupRecord == null) { throw new PersistenceException("The group record returned is null"); } //compare to local fs @@ -670,139 +706,164 @@ public class PolicyDBDao { try { localGroup = papEngine.getGroup(groupRecord.getGroupId()); } catch (Exception e) { - logger.warn("Caught PAPException trying to get local pdp group with papEngine.getGroup("+groupId+");",e); + logger.warn("Caught PAPException trying to get local pdp group with papEngine.getGroup(" + groupId + ");", + e); } - if(localGroup == null && extraData != null){ + if (localGroup == null && extraData != null) { //here we can try to load an old group id from the extraData - try{ + try { localGroup = papEngine.getGroup(extraData); - }catch(Exception e){ - logger.warn("Caught PAPException trying to get local pdp group with papEngine.getGroup("+extraData+");",e); + } catch (Exception e) { + logger.warn( + "Caught PAPException trying to get local pdp group with papEngine.getGroup(" + extraData + ");", + e); } } - if(localGroup != null && groupRecord.isDeleted()){ + if (localGroup != null && groupRecord.isDeleted()) { OnapPDPGroup newLocalGroup = null; - if(extraData != null){ + if (extraData != null) { try { newLocalGroup = papEngine.getGroup(extraData); } catch (PAPException e) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to get new pdp group with papEngine.getGroup("+extraData+");"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught PAPException trying to get new pdp group with papEngine.getGroup(" + extraData + + ");"); } } try { papEngine.removeGroup(localGroup, newLocalGroup); } catch (NullPointerException | PAPException e) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to get remove pdp group with papEngine.removeGroup("+localGroup+", "+newLocalGroup+");"); - throw new PAPException("Could not remove group "+groupId); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught PAPException trying to get remove pdp group with papEngine.removeGroup(" + localGroup + + ", " + newLocalGroup + ");"); + throw new PAPException("Could not remove group " + groupId); } - } - else if(localGroup == null){ + } else if (localGroup == null) { //creating a new group try { papEngine.newGroup(groupRecord.getgroupName(), groupRecord.getDescription()); } catch (NullPointerException | PAPException e) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to create pdp group with papEngine.newGroup(groupRecord.getgroupName(), groupRecord.getDescription());"); - throw new PAPException("Could not create group "+groupRecord); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "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) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, "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"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, + "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; } //add possible pdps to group List<?> pdpsInGroup = transaction.getPdpsInGroup(Long.parseLong(groupRecord.getGroupId())); - for(Object pdpO : pdpsInGroup){ - PdpEntity pdp = (PdpEntity)pdpO; + for (Object pdpO : pdpsInGroup) { + PdpEntity pdp = (PdpEntity) pdpO; try { - papEngine.newPDP(pdp.getPdpId(), localGroup, pdp.getPdpName(), pdp.getDescription(), pdp.getJmxPort()); + papEngine.newPDP(pdp.getPdpId(), localGroup, pdp.getPdpName(), pdp.getDescription(), + pdp.getJmxPort()); } catch (NullPointerException | PAPException e) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "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); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "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); } } //add possible policies to group (filesystem only, apparently) } else { - if(!(localGroup instanceof StdPDPGroup)){ + if (!(localGroup instanceof StdPDPGroup)) { throw new PAPException("group is not a StdPDPGroup"); } //clone the object //because it will be comparing the new group to its own version - StdPDPGroup localGroupClone = new StdPDPGroup(localGroup.getId(),localGroup.isDefaultGroup(),localGroup.getName(),localGroup.getDescription(),((StdPDPGroup)localGroup).getDirectory()); + StdPDPGroup localGroupClone = + new StdPDPGroup(localGroup.getId(), localGroup.isDefaultGroup(), localGroup.getName(), + localGroup.getDescription(), ((StdPDPGroup) localGroup).getDirectory()); localGroupClone.setOnapPdps(localGroup.getOnapPdps()); localGroupClone.setPipConfigs(localGroup.getPipConfigs()); localGroupClone.setStatus(localGroup.getStatus()); //we are updating a group or adding a policy or changing default //set default if it should be - if(!localGroupClone.isDefaultGroup() && groupRecord.isDefaultGroup()){ + if (!localGroupClone.isDefaultGroup() && groupRecord.isDefaultGroup()) { try { papEngine.setDefaultGroup(localGroup); return; } catch (PAPException e) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to set default group with papEngine.SetDefaultGroup("+localGroupClone+");"); - throw new PAPException("Could not set default group to "+localGroupClone); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught PAPException trying to set default group with papEngine.SetDefaultGroup(" + + localGroupClone + ");"); + throw new PAPException("Could not set default group to " + localGroupClone); } } boolean needToUpdate = false; - if(updateGroupPoliciesInFileSystem(localGroupClone,localGroup, groupRecord, transaction)){ + if (updateGroupPoliciesInFileSystem(localGroupClone, localGroup, groupRecord, transaction)) { needToUpdate = true; } - if(!stringEquals(localGroupClone.getId(),groupRecord.getGroupId()) || !stringEquals(localGroupClone.getName(),groupRecord.getgroupName())){ + if (!stringEquals(localGroupClone.getId(), groupRecord.getGroupId()) || + !stringEquals(localGroupClone.getName(), groupRecord.getgroupName())) { //changing ids //we do not want to change the id, the papEngine will do this for us, it needs to know the old id localGroupClone.setName(groupRecord.getgroupName()); needToUpdate = true; } - if(!stringEquals(localGroupClone.getDescription(),groupRecord.getDescription())){ + if (!stringEquals(localGroupClone.getDescription(), groupRecord.getDescription())) { localGroupClone.setDescription(groupRecord.getDescription()); needToUpdate = true; } - if(needToUpdate){ + if (needToUpdate) { try { papEngine.updateGroup(localGroupClone); } catch (PAPException e) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to update group with papEngine.updateGroup("+localGroupClone+");"); - throw new PAPException("Could not update group "+localGroupClone); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught PAPException trying to update group with papEngine.updateGroup(" + localGroupClone + + ");"); + throw new PAPException("Could not update group " + localGroupClone); } } } } - //this will also handle removes, since incoming pdpGroup has no policies internally, we are just going to add them all in from the db - private boolean updateGroupPoliciesInFileSystem(OnapPDPGroup pdpGroup,OnapPDPGroup oldPdpGroup, GroupEntity groupRecord, PolicyDBDaoTransaction transaction) throws PAPException, PolicyDBException{ - if(!(pdpGroup instanceof StdPDPGroup)){ + //this will also handle removes, since incoming pdpGroup has no policies internally, we are just going to add + // them all in from the db + private boolean updateGroupPoliciesInFileSystem(OnapPDPGroup pdpGroup, OnapPDPGroup oldPdpGroup, + GroupEntity groupRecord, PolicyDBDaoTransaction transaction) + throws PAPException, PolicyDBException { + if (!(pdpGroup instanceof StdPDPGroup)) { throw new PAPException("group is not a StdPDPGroup"); } - StdPDPGroup group = (StdPDPGroup)pdpGroup; + StdPDPGroup group = (StdPDPGroup) pdpGroup; //this must always be true since we don't explicitly know when a delete is occuring boolean didUpdate = true; - HashMap<String,PDPPolicy> currentPolicySet = new HashMap<>(oldPdpGroup.getPolicies().size()); + HashMap<String, PDPPolicy> currentPolicySet = new HashMap<>(oldPdpGroup.getPolicies().size()); HashSet<PDPPolicy> newPolicySet = new HashSet<>(); - for(PDPPolicy pdpPolicy : oldPdpGroup.getPolicies()){ + for (PDPPolicy pdpPolicy : oldPdpGroup.getPolicies()) { currentPolicySet.put(pdpPolicy.getId(), pdpPolicy); } - for(PolicyEntity policy : groupRecord.getPolicies()){ + for (PolicyEntity policy : groupRecord.getPolicies()) { String pdpPolicyName = getPdpPolicyName(policy.getPolicyName(), policy.getScope()); - if(group.getPolicy(pdpPolicyName) == null){ + if (group.getPolicy(pdpPolicyName) == null) { didUpdate = true; - if(currentPolicySet.containsKey(pdpPolicyName)){ + if (currentPolicySet.containsKey(pdpPolicyName)) { newPolicySet.add(currentPolicySet.get(pdpPolicyName)); - } else{ - logger.info("PolicyDBDao: Adding the new policy to the PDP group after notification: " + pdpPolicyName); + } else { + logger.info( + "PolicyDBDao: Adding the new policy to the PDP group after notification: " + pdpPolicyName); InputStream policyStream = new ByteArrayInputStream(policy.getPolicyData().getBytes()); - group.copyPolicyToFile(pdpPolicyName,policyStream); - ((StdPDPPolicy)(group.getPolicy(pdpPolicyName))).setName(removeExtensionAndVersionFromPolicyName(pdpPolicyName)); + group.copyPolicyToFile(pdpPolicyName, policyStream); + ((StdPDPPolicy) (group.getPolicy(pdpPolicyName))) + .setName(removeExtensionAndVersionFromPolicyName(pdpPolicyName)); try { policyStream.close(); } catch (IOException e) { didUpdate = false; - PolicyLogger.error(e.getMessage() +e); + PolicyLogger.error(e.getMessage() + e); } } } } logger.info("PolicyDBDao: Adding updated policies to group after notification."); - if(didUpdate){ + if (didUpdate) { newPolicySet.addAll(group.getPolicies()); group.setPolicies(newPolicySet); } @@ -813,47 +874,55 @@ public class PolicyDBDao { * This method is called during all pushPolicy transactions and makes sure the file system * group is in sync with the database groupentity */ - private StdPDPGroup synchronizeGroupPoliciesInFileSystem(StdPDPGroup pdpGroup, GroupEntity groupentity) throws PAPException, PolicyDBException{ + private StdPDPGroup synchronizeGroupPoliciesInFileSystem(StdPDPGroup pdpGroup, GroupEntity groupentity) + throws PAPException, PolicyDBException { - HashMap<String,PDPPolicy> currentPolicyMap = new HashMap<>(); + HashMap<String, PDPPolicy> currentPolicyMap = new HashMap<>(); HashSet<String> newPolicyIdSet = new HashSet<>(); HashSet<PDPPolicy> newPolicySet = new HashSet<>(); - for(PDPPolicy pdpPolicy : pdpGroup.getPolicies()){ + for (PDPPolicy pdpPolicy : pdpGroup.getPolicies()) { currentPolicyMap.put(pdpPolicy.getId(), pdpPolicy); } - for(PolicyEntity policy : groupentity.getPolicies()){ + for (PolicyEntity policy : groupentity.getPolicies()) { String pdpPolicyId = getPdpPolicyName(policy.getPolicyName(), policy.getScope()); newPolicyIdSet.add(pdpPolicyId); - if(currentPolicyMap.containsKey(pdpPolicyId)){ + if (currentPolicyMap.containsKey(pdpPolicyId)) { newPolicySet.add(currentPolicyMap.get(pdpPolicyId)); } else { //convert PolicyEntity object to PDPPolicy String name = pdpPolicyId.replace(".xml", ""); name = name.substring(0, name.lastIndexOf('.')); InputStream policyStream = new ByteArrayInputStream(policy.getPolicyData().getBytes()); - pdpGroup.copyPolicyToFile(pdpPolicyId,name,policyStream); + pdpGroup.copyPolicyToFile(pdpPolicyId, name, policyStream); URI location = Paths.get(pdpGroup.getDirectory().toAbsolutePath().toString(), pdpPolicyId).toUri(); StdPDPPolicy newPolicy = null; try { - newPolicy = new StdPDPPolicy(pdpPolicyId, true, removeExtensionAndVersionFromPolicyName(pdpPolicyId),location); + newPolicy = + new StdPDPPolicy(pdpPolicyId, true, removeExtensionAndVersionFromPolicyName(pdpPolicyId), + location); newPolicySet.add(newPolicy); } catch (Exception e) { logger.debug(e); - PolicyLogger.error("PolicyDBDao: Exception occurred while creating the StdPDPPolicy newPolicy object " + e.getMessage()); + PolicyLogger + .error("PolicyDBDao: Exception occurred while creating the StdPDPPolicy newPolicy object " + + e.getMessage()); } } } - for(String id : currentPolicyMap.keySet()) { - if(!newPolicyIdSet.contains(id)){ + for (String id : currentPolicyMap.keySet()) { + if (!newPolicyIdSet.contains(id)) { try { Files.delete(Paths.get(currentPolicyMap.get(id).getLocation())); } catch (Exception e) { logger.debug(e); - PolicyLogger.error("PolicyDBDao: Exception occurred while attempting to delete the old version of the policy file from the group. " + e.getMessage()); + PolicyLogger + .error("PolicyDBDao: Exception occurred while attempting to delete the old version of the" + + " policy file from the group. " + + e.getMessage()); } } } @@ -864,139 +933,156 @@ public class PolicyDBDao { return pdpGroup; } - private String removeExtensionAndVersionFromPolicyName(String originalPolicyName) throws PolicyDBException{ + private String removeExtensionAndVersionFromPolicyName(String originalPolicyName) throws PolicyDBException { 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) throws PolicyDBException{ + private String[] getPolicyNameAndVersionFromPolicyFileName(String originalPolicyName) throws PolicyDBException { String policyName = originalPolicyName; String[] nameAndVersion = new String[2]; - try{ + try { policyName = removeFileExtension(policyName); - nameAndVersion[0] = policyName.substring(0,policyName.lastIndexOf('.')); - if(isNullOrEmpty(nameAndVersion[0])){ + nameAndVersion[0] = policyName.substring(0, policyName.lastIndexOf('.')); + if (isNullOrEmpty(nameAndVersion[0])) { throw new PolicyDBException(); } - } catch(Exception e){ + } catch (Exception e) { nameAndVersion[0] = originalPolicyName; logger.debug(e); } - try{ - nameAndVersion[1] = policyName.substring(policyName.lastIndexOf('.')+1); - if(isNullOrEmpty(nameAndVersion[1])){ + try { + nameAndVersion[1] = policyName.substring(policyName.lastIndexOf('.') + 1); + if (isNullOrEmpty(nameAndVersion[1])) { throw new PolicyDBException(); } - } catch(Exception e){ + } catch (Exception e) { nameAndVersion[1] = "1"; logger.debug(e); } return nameAndVersion; } - private void handleIncomingPdpChange(String pdpId, PolicyDBDaoTransaction transaction) throws PAPException{ + private void handleIncomingPdpChange(String pdpId, PolicyDBDaoTransaction transaction) throws PAPException { //get pdp long pdpIdLong = -1; - try{ + try { pdpIdLong = Long.parseLong(pdpId); - }catch(NumberFormatException e){ - throw new IllegalArgumentException("pdpId "+pdpId+" cannot be parsed into a long"); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("pdpId " + pdpId + " cannot be parsed into a long"); } PdpEntity pdpRecord = null; - try{ + try { pdpRecord = transaction.getPdp(pdpIdLong); - }catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get pdp record with transaction.getPdp("+pdpIdLong+");"); - throw new PAPException("Could not get local pdp "+pdpIdLong); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception trying to get pdp record with transaction.getPdp(" + pdpIdLong + ");"); + throw new PAPException("Could not get local pdp " + pdpIdLong); } - if(pdpRecord == null){ + if (pdpRecord == null) { throw new PersistenceException("The pdpRecord returned is null"); } PDP localPdp = null; try { localPdp = papEngine.getPDP(pdpRecord.getPdpId()); } catch (PAPException e) { - logger.warn("Caught PAPException trying to get local pdp with papEngine.getPDP("+pdpId+");",e); + logger.warn("Caught PAPException trying to get local pdp with papEngine.getPDP(" + pdpId + ");", e); } - if(localPdp != null && pdpRecord.isDeleted()){ + if (localPdp != null && pdpRecord.isDeleted()) { try { papEngine.removePDP((OnapPDP) localPdp); } catch (PAPException e) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to get remove pdp with papEngine.removePDP("+localPdp+");"); - throw new PAPException("Could not remove pdp "+pdpId); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught PAPException trying to get remove pdp with papEngine.removePDP(" + localPdp + ");"); + throw new PAPException("Could not remove pdp " + pdpId); } - } - else if(localPdp == null){ + } else if (localPdp == null) { //add new pdp //get group OnapPDPGroup localGroup = null; try { localGroup = papEngine.getGroup(pdpRecord.getGroup().getGroupId()); } catch (PAPException e1) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, "Caught PAPException trying to get local group to add pdp to with papEngine.getGroup(pdpRecord.getGroup().getGroupId());"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, + "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()); + papEngine.newPDP(pdpRecord.getPdpId(), localGroup, pdpRecord.getPdpName(), pdpRecord.getDescription(), + pdpRecord.getJmxPort()); } catch (NullPointerException | PAPException e) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "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); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "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); } } else { boolean needToUpdate = false; - if(!stringEquals(localPdp.getId(),pdpRecord.getPdpId()) || !stringEquals(localPdp.getName(),pdpRecord.getPdpName())){ + if (!stringEquals(localPdp.getId(), pdpRecord.getPdpId()) || + !stringEquals(localPdp.getName(), pdpRecord.getPdpName())) { //again, we don't want to change the id, the papEngine will do this localPdp.setName(pdpRecord.getPdpName()); needToUpdate = true; } - if(!stringEquals(localPdp.getDescription(),pdpRecord.getDescription())){ + if (!stringEquals(localPdp.getDescription(), pdpRecord.getDescription())) { localPdp.setDescription(pdpRecord.getDescription()); needToUpdate = true; } String localPdpGroupId = null; - try{ + try { localPdpGroupId = papEngine.getPDPGroup((OnapPDP) localPdp).getId(); - } catch(PAPException e){ + } 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); + 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())){ + if (!stringEquals(localPdpGroupId, pdpRecord.getGroup().getGroupId())) { OnapPDPGroup newPdpGroup = null; - try{ + try { newPdpGroup = papEngine.getGroup(pdpRecord.getGroup().getGroupId()); - }catch(PAPException e){ + } catch (PAPException e) { //ok, now we have an issue. Time to stop things - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to get id of local group to move pdp to with papEngine.getGroup(pdpRecord.getGroup().getGroupId());"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "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{ + try { papEngine.movePDP((OnapPDP) localPdp, newPdpGroup); - }catch(PAPException e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to move pdp with papEngine.movePDP(localPdp, newPdpGroup);"); - throw new PAPException("Could not move pdp "+localPdp); + } catch (PAPException e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "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()){ + if (((PdpEntity) localPdp).getJmxPort() != pdpRecord.getJmxPort()) { ((PdpEntity) localPdp).setJmxPort(pdpRecord.getJmxPort()); needToUpdate = true; } - if(needToUpdate){ + if (needToUpdate) { try { papEngine.updatePDP((OnapPDP) localPdp); } catch (PAPException e) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PAPException trying to update pdp with papEngine.updatePdp("+localPdp+");"); - throw new PAPException("Could not update pdp "+localPdp); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught PAPException trying to update pdp with papEngine.updatePdp(" + localPdp + ");"); + throw new PAPException("Could not update pdp " + localPdp); } } } //compare to local situation //call command to update } - private void handleIncomingPolicyChange(String policyId){ + + private void handleIncomingPolicyChange(String policyId) { String policyName = null; EntityManager em = emf.createEntityManager(); Query getPolicyEntityQuery = em.createNamedQuery("PolicyEntity.FindById"); @@ -1005,38 +1091,39 @@ public class PolicyDBDao { @SuppressWarnings("unchecked") List<PolicyEntity> policies = getPolicyEntityQuery.getResultList(); PolicyEntity policy = null; - if (!policies.isEmpty()){ + if (!policies.isEmpty()) { policy = policies.get(0); } String action = "unknown action"; try { - if(policy != null){ + if (policy != null) { policyName = policy.getPolicyName(); logger.info("Deleting old Policy Config File for " + policy.getPolicyName()); action = "delete"; Path subFile = null; - if (policy.getConfigurationData()!= null){ + if (policy.getConfigurationData() != null) { subFile = getPolicySubFile(policy.getConfigurationData().getConfigurationName(), config); - }else if(policy.getActionBodyEntity()!= null){ + } else if (policy.getActionBodyEntity() != null) { subFile = getPolicySubFile(policy.getActionBodyEntity().getActionBodyName(), action); } - if(subFile != null){ + if (subFile != null) { Files.deleteIfExists(subFile); } - if (policy.getConfigurationData()!= null){ + if (policy.getConfigurationData() != null) { writePolicySubFile(policy, config); - }else if(policy.getActionBodyEntity()!= null){ + } else if (policy.getActionBodyEntity() != null) { writePolicySubFile(policy, action); } } } catch (IOException e1) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, "Error occurred while performing [" + action + "] of Policy File: " + policyName); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, + "Error occurred while performing [" + action + "] of Policy File: " + policyName); } } - private String getPdpPolicyName(String name, String scope){ + private String getPdpPolicyName(String name, String scope) { String finalName = ""; finalName += scope; finalName += "."; @@ -1044,11 +1131,12 @@ public class PolicyDBDao { finalName += ".xml"; return finalName; } - private String removeFileExtension(String fileName){ + + private String removeFileExtension(String fileName) { return fileName.substring(0, fileName.lastIndexOf('.')); } - private Path getPolicySubFile(String inputFileName, String subFileType){ + private Path getPolicySubFile(String inputFileName, String subFileType) { String filename = inputFileName; logger.info("getPolicySubFile(" + filename + ", " + subFileType + ")"); Path filePath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS), subFileType); @@ -1056,14 +1144,14 @@ public class PolicyDBDao { filename = FilenameUtils.removeExtension(filename); - for(File tmpFile : filePath.toFile().listFiles()){ - if (FilenameUtils.removeExtension(tmpFile.getName()).equals(filename)){ + for (File tmpFile : filePath.toFile().listFiles()) { + if (FilenameUtils.removeExtension(tmpFile.getName()).equals(filename)) { file = tmpFile; } } Path finalPath = null; - if (file!= null){ + if (file != null) { finalPath = Paths.get(file.getAbsolutePath()); } @@ -1071,12 +1159,13 @@ public class PolicyDBDao { return finalPath; } - private boolean writePolicySubFile(PolicyEntity policy, String policyType){ - logger.info("writePolicySubFile with policyName[" + policy.getPolicyName() + "] and policyType[" + policyType + "]"); + private boolean writePolicySubFile(PolicyEntity policy, String policyType) { + logger.info("writePolicySubFile with policyName[" + policy.getPolicyName() + "] and policyType[" + policyType + + "]"); String type = null; String subTypeName = null; String subTypeBody = null; - if (config.equalsIgnoreCase(policyType)){ + if (config.equalsIgnoreCase(policyType)) { type = config; subTypeName = FilenameUtils.removeExtension(policy.getConfigurationData().getConfigurationName()); subTypeBody = policy.getConfigurationData().getConfigBody(); @@ -1097,47 +1186,48 @@ public class PolicyDBDao { subTypeName = subTypeName + ".txt"; } } - }else if (action.equalsIgnoreCase(policyType)){ + } else if (action.equalsIgnoreCase(policyType)) { type = action; subTypeName = policy.getActionBodyEntity().getActionBodyName(); subTypeBody = policy.getActionBodyEntity().getActionBody(); } Path filePath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS).toString(), type); - if(subTypeBody == null){ + if (subTypeBody == null) { subTypeBody = ""; } boolean success = false; try { Files.deleteIfExists(Paths.get(filePath.toString(), subTypeName)); - File file = Paths.get(filePath.toString(),subTypeName).toFile(); + File file = Paths.get(filePath.toString(), subTypeName).toFile(); boolean value = file.createNewFile(); - logger.debug("New file created successfully"+value); - try(FileWriter fileWriter = new FileWriter(file, false)){ + logger.debug("New file created successfully" + value); + try (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, policyDBDaoVar, "Exception occured while creating Configuration File for Policy : " + policy.getPolicyName()); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Exception occured while creating Configuration File for Policy : " + policy.getPolicyName()); } return success; } - public void auditLocalDatabase(PAPPolicyEngine papEngine2){ + public void auditLocalDatabase(PAPPolicyEngine papEngine2) { logger.debug("PolicyDBDao.auditLocalDatabase() is called"); - try{ + try { deleteAllGroupTables(); auditGroups(papEngine2); - } catch(Exception e){ + } catch (Exception e) { PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "auditLocalDatabase() error"); - logger.error("Exception Occured"+e); + logger.error("Exception Occured" + e); } } - public StdPDPGroup auditLocalFileSystem(StdPDPGroup group){ + public StdPDPGroup auditLocalFileSystem(StdPDPGroup group) { logger.info("Starting Local File System group audit"); EntityManager em = emf.createEntityManager(); @@ -1149,8 +1239,8 @@ public class PolicyDBDao { groupQuery.setParameter(groupIdVar, group.getId()); groupQuery.setParameter(deletedVar, false); List<?> groupQueryList = groupQuery.getResultList(); - if(groupQueryList!=null && !groupQueryList.isEmpty()){ - GroupEntity dbgroup = (GroupEntity)groupQueryList.get(0); + if (groupQueryList != null && !groupQueryList.isEmpty()) { + GroupEntity dbgroup = (GroupEntity) groupQueryList.get(0); updatedGroup = synchronizeGroupPoliciesInFileSystem(group, dbgroup); logger.info("Group was updated during file system audit: " + updatedGroup.toString()); } @@ -1158,8 +1248,9 @@ public class PolicyDBDao { logger.error(e); } catch (Exception e) { logger.error(e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check if group exists groupQuery.getResultList()"); - throw new PersistenceException("Query failed trying to check if group "+group.getId()+" exists"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception trying to check if group exists groupQuery.getResultList()"); + throw new PersistenceException("Query failed trying to check if group " + group.getId() + " exists"); } em.getTransaction().commit(); @@ -1169,7 +1260,7 @@ public class PolicyDBDao { } - public void deleteAllGroupTables(){ + public void deleteAllGroupTables() { logger.debug("PolicyDBDao.deleteAllGroupTables() called"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); @@ -1185,18 +1276,18 @@ public class PolicyDBDao { } @SuppressWarnings("unchecked") - public void auditGroups(PAPPolicyEngine papEngine2){ + public void auditGroups(PAPPolicyEngine papEngine2) { logger.debug("PolicyDBDao.auditGroups() called"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); final String AUDIT_STR = "Audit"; - try{ + try { Set<OnapPDPGroup> groups = papEngine2.getOnapPDPGroups(); - for (OnapPDPGroup grp : groups){ - try{ + for (OnapPDPGroup grp : groups) { + try { GroupEntity groupEntity = new GroupEntity(); em.persist(groupEntity); groupEntity.setGroupName(grp.getName()); @@ -1205,9 +1296,9 @@ public class PolicyDBDao { groupEntity.setCreatedBy(AUDIT_STR); groupEntity.setGroupId(createNewPDPGroupId(grp.getId())); groupEntity.setModifiedBy(AUDIT_STR); - Set<OnapPDP> pdps = grp.getOnapPdps(); + Set<OnapPDP> pdps = grp.getOnapPdps(); - for(OnapPDP pdp : pdps){ + for (OnapPDP pdp : pdps) { PdpEntity pdpEntity = new PdpEntity(); em.persist(pdpEntity); pdpEntity.setGroup(groupEntity); @@ -1221,11 +1312,12 @@ public class PolicyDBDao { Set<PDPPolicy> policies = grp.getPolicies(); - for(PDPPolicy policy : policies){ - try{ + for (PDPPolicy policy : policies) { + try { String[] stringArray = getNameScopeAndVersionFromPdpPolicy(policy.getId()); - if(stringArray == null) { - throw new IllegalArgumentException("Invalid input - policyID must contain name, scope and version"); + if (stringArray == null) { + throw new IllegalArgumentException( + "Invalid input - policyID must contain name, scope and version"); } List<PolicyEntity> policyEntityList; Query getPolicyEntitiesQuery = em.createNamedQuery("PolicyEntity.findByNameAndScope"); @@ -1234,21 +1326,23 @@ public class PolicyDBDao { policyEntityList = getPolicyEntitiesQuery.getResultList(); PolicyEntity policyEntity = null; - if(!policyEntityList.isEmpty()){ + if (!policyEntityList.isEmpty()) { policyEntity = policyEntityList.get(0); } - if(policyEntity != null){ + if (policyEntity != null) { groupEntity.addPolicyToGroup(policyEntity); } - }catch(Exception e2){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, policyDBDaoVar, "Exception auditGroups inner catch"); + } catch (Exception e2) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e2, policyDBDaoVar, + "Exception auditGroups inner catch"); } } - }catch(Exception e1){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, "Exception auditGroups middle catch"); + } catch (Exception e1) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, + "Exception auditGroups middle catch"); } } - }catch(Exception e){ + } catch (Exception e) { em.getTransaction().rollback(); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Exception auditGroups outer catch"); em.close(); @@ -1260,18 +1354,21 @@ public class PolicyDBDao { } - private String getConfigFile(String filename, PolicyRestAdapter policy){ - if(policy == null){ - return getConfigFile(filename, (String)null); + private String getConfigFile(String filename, PolicyRestAdapter policy) { + if (policy == null) { + return getConfigFile(filename, (String) null); } 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 inputFilename, String configType) { String filename = inputFilename; - logger.debug("getConfigFile(String filename, String scope, String configType) as getConfigFile("+filename+", "+configType+") called"); + logger.debug( + "getConfigFile(String filename, String scope, String configType) as getConfigFile(" + filename + ", " + + configType + ") called"); filename = FilenameUtils.removeExtension(filename); String id = configType; @@ -1292,20 +1389,20 @@ public class PolicyDBDao { return filename; } - private String[] getNameScopeAndVersionFromPdpPolicy(String fileName){ + private String[] getNameScopeAndVersionFromPdpPolicy(String fileName) { String[] splitByDots = fileName.split("\\."); - if(splitByDots.length < 3){ + if (splitByDots.length < 3) { return null; } - String policyName = splitByDots[splitByDots.length-3]; - String version = splitByDots[splitByDots.length-2]; + String policyName = splitByDots[splitByDots.length - 3]; + String version = splitByDots[splitByDots.length - 2]; //policy names now include version String scope = ""; - for(int i=0;i<splitByDots.length-3;i++){ + for (int i = 0; i < splitByDots.length - 3; i++) { scope += ".".concat(splitByDots[i]); } //remove the first dot - if(scope.length() > 0){ + if (scope.length() > 0) { scope = scope.substring(1); } String[] returnArray = new String[3]; @@ -1338,12 +1435,13 @@ public class PolicyDBDao { /** * 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 * @return true if one or more of the given strings are empty or null */ - public static boolean isNullOrEmpty(String... strings){ - for(String s : strings){ - if(s == null || "".equals(s)){ + public static boolean isNullOrEmpty(String... strings) { + for (String s : strings) { + if (s == null || "".equals(s)) { return true; } } @@ -1361,15 +1459,16 @@ public class PolicyDBDao { private boolean operationRun = false; private final Thread transactionTimer; - private PolicyDBDaoTransactionInstance(){ + private PolicyDBDaoTransactionInstance() { //call the constructor with arguments this(Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_TIMEOUT)), Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_WAIT))); } + //timeout is how long the transaction can sit before rolling back //wait time is how long to wait for the transaction to start before throwing an exception - private PolicyDBDaoTransactionInstance(int transactionTimeout, int transactionWaitTime){ - if(logger.isDebugEnabled()){ + private PolicyDBDaoTransactionInstance(int transactionTimeout, int transactionWaitTime) { + if (logger.isDebugEnabled()) { logger.debug("\n\nPolicyDBDaoTransactionInstance() as PolicyDBDaoTransactionInstance() called:" + "\n transactionTimeout = " + transactionTimeout + "\n transactionWaitTime = " + transactionWaitTime + "\n\n"); @@ -1379,24 +1478,27 @@ public class PolicyDBDao { groupId = -1; pdpId = -1; newGroupId = null; - synchronized(emLock){ - try{ - startTransactionSynced(this.em,transactionWaitTime); - } catch(Exception e){ + synchronized (emLock) { + try { + startTransactionSynced(this.em, transactionWaitTime); + } catch (Exception e) { logger.debug(e); - throw new PersistenceException("Could not lock transaction within "+transactionWaitTime+" milliseconds"); + throw new PersistenceException( + "Could not lock transaction within " + transactionWaitTime + " milliseconds"); } } class TransactionTimer implements Runnable { private int sleepTime; - public TransactionTimer(int timeout){ + + public TransactionTimer(int timeout) { this.sleepTime = timeout; } + @Override public void run() { - if(logger.isDebugEnabled()){ - Date date= new java.util.Date(); + if (logger.isDebugEnabled()) { + Date date = new java.util.Date(); logger.debug("\n\nTransactionTimer.run() - SLEEPING: " + "\n sleepTime (ms) = " + sleepTime + "\n TimeStamp = " + date.getTime() @@ -1406,8 +1508,8 @@ public class PolicyDBDao { Thread.sleep(sleepTime); } catch (InterruptedException e) { //probably, the transaction was completed, the last thing we want to do is roll back - if(logger.isDebugEnabled()){ - Date date= new java.util.Date(); + if (logger.isDebugEnabled()) { + Date date = new java.util.Date(); logger.debug("\n\nTransactionTimer.run() - WAKE Interrupt: " + "\n TimeStamp = " + date.getTime() + "\n\n"); @@ -1415,8 +1517,8 @@ public class PolicyDBDao { Thread.currentThread().interrupt(); return; } - if(logger.isDebugEnabled()){ - Date date= new java.util.Date(); + if (logger.isDebugEnabled()) { + Date date = new java.util.Date(); logger.debug("\n\nTransactionTimer.run() - WAKE Timeout: " + "\n TimeStamp = " + date.getTime() + "\n\n"); @@ -1426,88 +1528,101 @@ public class PolicyDBDao { } - transactionTimer = new Thread(new TransactionTimer(transactionTimeout),"transactionTimerThread"); + transactionTimer = new Thread(new TransactionTimer(transactionTimeout), "transactionTimerThread"); transactionTimer.start(); } - private void checkBeforeOperationRun(){ + private void checkBeforeOperationRun() { checkBeforeOperationRun(false); } - private void checkBeforeOperationRun(boolean justCheckOpen){ - if(!isTransactionOpen()){ + + private void checkBeforeOperationRun(boolean justCheckOpen) { + if (!isTransactionOpen()) { PolicyLogger.error("There is no transaction currently open"); throw new IllegalStateException("There is no transaction currently open"); } - if(operationRun && !justCheckOpen){ - 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"); + if (operationRun && !justCheckOpen) { + 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"); } operationRun = true; } + @Override public void commitTransaction() { - synchronized(emLock){ + synchronized (emLock) { logger.debug("commitTransaction() as commitTransaction() called"); - if(!isTransactionOpen()){ + if (!isTransactionOpen()) { logger.warn("There is no open transaction to commit"); - try{ + try { em.close(); - } catch(Exception e){ - logger.error("Exception Occured"+e); + } catch (Exception e) { + logger.error("Exception Occured" + e); } return; } - try{ + try { em.getTransaction().commit(); - } catch(RollbackException e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught RollbackException on em.getTransaction().commit()"); - throw new PersistenceException("The commit failed. Message:\n"+e.getMessage()); + } catch (RollbackException e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught RollbackException on em.getTransaction().commit()"); + throw new PersistenceException("The commit failed. Message:\n" + e.getMessage()); } em.close(); // need to revisit - if(policyId >= 0){ - if(newGroupId != null){ - try{ - notifyOthers(policyId,POLICY_NOTIFICATION,newGroupId); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on notifyOthers("+policyId+","+POLICY_NOTIFICATION+","+newGroupId+")"); + if (policyId >= 0) { + if (newGroupId != null) { + try { + notifyOthers(policyId, POLICY_NOTIFICATION, newGroupId); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception on notifyOthers(" + policyId + "," + POLICY_NOTIFICATION + "," + + newGroupId + ")"); } } else { - try{ - notifyOthers(policyId,POLICY_NOTIFICATION); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on notifyOthers("+policyId+","+POLICY_NOTIFICATION+")"); + try { + notifyOthers(policyId, POLICY_NOTIFICATION); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception on notifyOthers(" + policyId + "," + POLICY_NOTIFICATION + ")"); } } } - if(groupId >= 0){ + 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){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on notifyOthers("+groupId+","+GROUP_NOTIFICATION+","+newGroupId+")"); + if (newGroupId != null) { + try { + notifyOthers(groupId, GROUP_NOTIFICATION, newGroupId); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception on notifyOthers(" + groupId + "," + GROUP_NOTIFICATION + "," + + newGroupId + ")"); } } else { - try{ - notifyOthers(groupId,GROUP_NOTIFICATION); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on notifyOthers("+groupId+","+GROUP_NOTIFICATION+")"); + try { + notifyOthers(groupId, GROUP_NOTIFICATION); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception on notifyOthers(" + groupId + "," + GROUP_NOTIFICATION + ")"); } } } - if(pdpId >= 0){ + if (pdpId >= 0) { //we don't want commit to fail just because this does - try{ - notifyOthers(pdpId,PDP_NOTIFICATION); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on notifyOthers("+pdpId+","+PDP_NOTIFICATION+")"); + try { + notifyOthers(pdpId, PDP_NOTIFICATION); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception on notifyOthers(" + pdpId + "," + PDP_NOTIFICATION + ")"); } } } - if(transactionTimer != null){ + if (transactionTimer != null) { transactionTimer.interrupt(); } } @@ -1515,201 +1630,230 @@ public class PolicyDBDao { @Override public void rollbackTransaction() { logger.debug("rollbackTransaction() as rollbackTransaction() called"); - synchronized(emLock){ - if(isTransactionOpen()){ + synchronized (emLock) { + if (isTransactionOpen()) { - try{ + try { em.getTransaction().rollback(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Could not rollback transaction"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Could not rollback transaction"); } - try{ + try { em.close(); - }catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Could not close EntityManager"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Could not close EntityManager"); } } else { - try{ + try { em.close(); - }catch(Exception e){ + } catch (Exception e) { logger.warn("Could not close already closed transaction", e); } } } - if(transactionTimer != null){ + if (transactionTimer != null) { transactionTimer.interrupt(); } } - private void createPolicy(PolicyRestAdapter policy, String username, String policyScope, String inputPolicyName, String policyDataString) { + private void createPolicy(PolicyRestAdapter policy, String username, String policyScope, String inputPolicyName, + String policyDataString) { String policyName = inputPolicyName; - logger.debug("createPolicy(PolicyRestAdapter policy, String username, String policyScope, String policyName, String policyDataString) as createPolicy("+policy+", "+username+", "+policyScope+", "+policyName+", "+policyDataString+") called"); - synchronized(emLock){ + logger.debug( + "createPolicy(PolicyRestAdapter policy, String username, String policyScope, String policyName, " + + "String policyDataString) as createPolicy(" + + policy + ", " + username + ", " + policyScope + ", " + policyName + ", " + + policyDataString + ") called"); + synchronized (emLock) { checkBeforeOperationRun(); String configName = policyName; - if(policyName.contains("Config_")){ + if (policyName.contains("Config_")) { policyName = policyName.replace(".Config_", ":Config_"); - }else if(policyName.contains("Action_")){ + } else if (policyName.contains("Action_")) { policyName = policyName.replace(".Action_", ":Action_"); - }else if(policyName.contains("Decision_")){ + } 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"); + 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.isEmpty()){ + if (createPolicyQueryList.isEmpty()) { 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 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); + newPolicyEntity = (PolicyEntity) createPolicyQueryList.get(0); update = true; } ActionBodyEntity newActionBodyEntity = null; - if(policy.getPolicyType().equals(action)){ + if (policy.getPolicyType().equals(action)) { boolean abupdate = false; - if(newPolicyEntity.getActionBodyEntity() == null){ + if (newPolicyEntity.getActionBodyEntity() == null) { newActionBodyEntity = new ActionBodyEntity(); - }else{ - newActionBodyEntity = em.find(ActionBodyEntity.class, newPolicyEntity.getActionBodyEntity().getActionBodyId()); + } else { + newActionBodyEntity = em.find(ActionBodyEntity.class, + newPolicyEntity.getActionBodyEntity().getActionBodyId()); abupdate = true; } - if(newActionBodyEntity != null){ - if(!abupdate){ + 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"; + String actionBodyName = policyNameClean + ".json"; //get the action body String actionBodyString = policy.getActionBody(); - if(actionBodyString == null){ + if (actionBodyString == null) { actionBodyString = "{}"; } newActionBodyEntity.setActionBody(actionBodyString); newActionBodyEntity.setActionBodyName(actionBodyName); newActionBodyEntity.setModifiedBy("PolicyDBDao.createPolicy()"); newActionBodyEntity.setDeleted(false); - if(!abupdate){ + if (!abupdate) { newActionBodyEntity.setCreatedBy("PolicyDBDao.createPolicy()"); } - if(logger.isDebugEnabled()){ + if (logger.isDebugEnabled()) { logger.debug("\nPolicyDBDao.createPolicy" - + "\n newActionBodyEntity.getActionBody() = " + newActionBodyEntity.getActionBody() - + "\n newActionBodyEntity.getActionBodyName() = " + newActionBodyEntity.getActionBodyName() - + "\n newActionBodyEntity.getModifiedBy() = " + newActionBodyEntity.getModifiedBy() + + "\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{ + } 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); + 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)){ + if (policy.getPolicyType().equals(config)) { boolean configUpdate; - if(newPolicyEntity.getConfigurationData() == null){ + if (newPolicyEntity.getConfigurationData() == null) { newConfigurationDataEntity = new ConfigurationDataEntity(); configUpdate = false; } else { - newConfigurationDataEntity = em.find(ConfigurationDataEntity.class, newPolicyEntity.getConfigurationData().getConfigurationDataId()); + newConfigurationDataEntity = em.find(ConfigurationDataEntity.class, + newPolicyEntity.getConfigurationData().getConfigurationDataId()); configUpdate = true; } - if(newConfigurationDataEntity != null){ - if(!configUpdate){ + if (newConfigurationDataEntity != null) { + if (!configUpdate) { em.persist(newConfigurationDataEntity); } - if(!stringEquals(newConfigurationDataEntity.getConfigurationName(),getConfigFile(configName,policy))){ - newConfigurationDataEntity.setConfigurationName(getConfigFile(configName,policy)); + if (!stringEquals(newConfigurationDataEntity.getConfigurationName(), + getConfigFile(configName, policy))) { + newConfigurationDataEntity.setConfigurationName(getConfigFile(configName, policy)); } - if(newConfigurationDataEntity.getConfigType() == null || !newConfigurationDataEntity.getConfigType().equals(policy.getConfigType())){ + if (newConfigurationDataEntity.getConfigType() == null || + !newConfigurationDataEntity.getConfigType().equals(policy.getConfigType())) { newConfigurationDataEntity.setConfigType(policy.getConfigType()); } - if(!configUpdate){ + if (!configUpdate) { newConfigurationDataEntity.setCreatedBy(username); } - if(newConfigurationDataEntity.getModifiedBy() == null || !newConfigurationDataEntity.getModifiedBy().equals(username)){ + if (newConfigurationDataEntity.getModifiedBy() == null || + !newConfigurationDataEntity.getModifiedBy().equals(username)) { newConfigurationDataEntity.setModifiedBy(username); } - if(newConfigurationDataEntity.getDescription() == null || !newConfigurationDataEntity.getDescription().equals("")){ + if (newConfigurationDataEntity.getDescription() == null || + !newConfigurationDataEntity.getDescription().equals("")) { newConfigurationDataEntity.setDescription(""); } - if(newConfigurationDataEntity.getConfigBody() == null || newConfigurationDataEntity.getConfigBody().isEmpty() || - (!newConfigurationDataEntity.getConfigBody().equals(policy.getConfigBodyData()))){ + 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()){ + if (policy.getConfigBodyData() == null || policy.getConfigBodyData().isEmpty()) { newConfigurationDataEntity.setConfigBody(policy.getJsonBody()); - }else{ + } else { newConfigurationDataEntity.setConfigBody(policy.getConfigBodyData()); } } - if(newConfigurationDataEntity.isDeleted()){ + if (newConfigurationDataEntity.isDeleted()) { newConfigurationDataEntity.setDeleted(false); } em.flush(); - }else{ - //We have a configurationData body in the policy but we found no configurationData body in the DB + } 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); + 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){ + if (!update) { em.persist(newPolicyEntity); } policyId = newPolicyEntity.getPolicyId(); - if(!stringEquals(newPolicyEntity.getPolicyName(),policyName)){ + if (!stringEquals(newPolicyEntity.getPolicyName(), policyName)) { newPolicyEntity.setPolicyName(policyName); } - if(!stringEquals(newPolicyEntity.getCreatedBy(),username)){ + if (!stringEquals(newPolicyEntity.getCreatedBy(), username)) { newPolicyEntity.setCreatedBy(username); } - if(!stringEquals(newPolicyEntity.getDescription(),policy.getPolicyDescription())){ + if (!stringEquals(newPolicyEntity.getDescription(), policy.getPolicyDescription())) { newPolicyEntity.setDescription(policy.getPolicyDescription()); } - if(!stringEquals(newPolicyEntity.getModifiedBy(),username)){ + if (!stringEquals(newPolicyEntity.getModifiedBy(), username)) { newPolicyEntity.setModifiedBy(username); } - if(!stringEquals(newPolicyEntity.getPolicyData(),policyDataString)){ + if (!stringEquals(newPolicyEntity.getPolicyData(), policyDataString)) { newPolicyEntity.setPolicyData(policyDataString); } - if(!stringEquals(newPolicyEntity.getScope(),policyScope)){ + if (!stringEquals(newPolicyEntity.getScope(), policyScope)) { newPolicyEntity.setScope(policyScope); } - if(newPolicyEntity.isDeleted() == true){ + if (newPolicyEntity.isDeleted() == true) { newPolicyEntity.setDeleted(false); } newPolicyEntity.setConfigurationData(newConfigurationDataEntity); @@ -1718,120 +1862,128 @@ public class PolicyDBDao { em.flush(); this.policyId = newPolicyEntity.getPolicyId(); } - return; } @SuppressWarnings("unused") - public PolicyEntity getPolicy(int policyID){ - return getPolicy(policyID,null,null); + public PolicyEntity getPolicy(int policyID) { + return getPolicy(policyID, null, null); } - public PolicyEntity getPolicy(String policyName,String scope){ - return getPolicy(-1,policyName,scope); + + public PolicyEntity getPolicy(String policyName, String scope) { + return getPolicy(-1, policyName, scope); } - private PolicyEntity getPolicy(int policyID, String policyName,String scope){ - logger.debug("getPolicy(int policyId, String policyName) as getPolicy("+policyID+","+policyName+") called"); - if(policyID < 0 && isNullOrEmpty(policyName,scope)){ - throw new IllegalArgumentException("policyID must be at least 0 or policyName must be not null or blank"); + + private PolicyEntity getPolicy(int policyID, String policyName, String scope) { + logger.debug("getPolicy(int policyId, String policyName) as getPolicy(" + policyID + "," + policyName + + ") called"); + if (policyID < 0 && isNullOrEmpty(policyName, scope)) { + throw new IllegalArgumentException( + "policyID must be at least 0 or policyName must be not null or blank"); } - synchronized(emLock){ + synchronized (emLock) { checkBeforeOperationRun(true); //check if group exists String policyId; Query policyQuery; - if(!isNullOrEmpty(policyName,scope)){ + if (!isNullOrEmpty(policyName, scope)) { policyId = policyName; - policyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.policyName=:name AND p.scope=:scope"); + policyQuery = + em.createQuery("SELECT p FROM PolicyEntity p WHERE p.policyName=:name AND p.scope=:scope"); policyQuery.setParameter("name", policyId); policyQuery.setParameter("scope", scope); - } else{ + } else { policyId = String.valueOf(policyID); policyQuery = em.createNamedQuery("PolicyEntity.FindById"); policyQuery.setParameter("id", policyId); } List<?> policyQueryList; - try{ + try { policyQueryList = policyQuery.getResultList(); - }catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get policy with policyQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get policy "+policyId); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception trying to get policy with policyQuery.getResultList()"); + throw new PersistenceException("Query failed trying to get policy " + policyId); } - if(policyQueryList.isEmpty()){ - 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(duplicatePolicyId+policyId+foundInDB); - throw new PersistenceException(duplicatePolicyId+policyId+foundInDB); + if (policyQueryList.isEmpty()) { + 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(duplicatePolicyId + policyId + foundInDB); + throw new PersistenceException(duplicatePolicyId + policyId + foundInDB); } - return (PolicyEntity)policyQueryList.get(0); + return (PolicyEntity) policyQueryList.get(0); } } @Override - public GroupEntity getGroup(long groupKey){ - logger.debug("getGroup(int groupKey) as getGroup("+groupKey+") called"); - if(groupKey < 0){ + public GroupEntity getGroup(long groupKey) { + logger.debug("getGroup(int groupKey) as getGroup(" + groupKey + ") called"); + if (groupKey < 0) { throw new IllegalArgumentException("groupKey must be at least 0"); } - synchronized(emLock){ + 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{ + try { groupQueryList = groupQuery.getResultList(); - }catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get group with groupQuery.getResultList()"); - throw new PersistenceException(queryFailedToGetGroup+groupKey); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception trying to get group with groupQuery.getResultList()"); + throw new PersistenceException(queryFailedToGetGroup + groupKey); } - if(groupQueryList.isEmpty()){ - 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+foundInDB); - throw new PersistenceException("Somehow, more than one group with the groupKey "+groupKey+foundInDB); + if (groupQueryList.isEmpty()) { + 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 + foundInDB); + throw new PersistenceException( + "Somehow, more than one group with the groupKey " + groupKey + foundInDB); } - return (GroupEntity)groupQueryList.get(0); + return (GroupEntity) groupQueryList.get(0); } } @Override - public GroupEntity getGroup(String groupId){ - logger.debug("getGroup(String groupId) as getGroup("+groupId+") called"); - if(isNullOrEmpty(groupId)){ + public GroupEntity getGroup(String groupId) { + logger.debug("getGroup(String groupId) as getGroup(" + groupId + ") called"); + if (isNullOrEmpty(groupId)) { throw new IllegalArgumentException("groupId must not be null or empty"); } - synchronized(emLock){ + synchronized (emLock) { checkBeforeOperationRun(true); //check if group exists Query groupQuery = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId"); groupQuery.setParameter(groupIdVar, groupId); List<?> groupQueryList; - try{ + try { groupQueryList = groupQuery.getResultList(); - }catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get group with groupQuery.getResultList()"); - throw new PersistenceException(queryFailedToGetGroup+groupId); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception trying to get group with groupQuery.getResultList()"); + throw new PersistenceException(queryFailedToGetGroup + groupId); } - if(groupQueryList.isEmpty()){ - 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(duplicateGroupId +groupId+foundInDB); - throw new PersistenceException(duplicateGroupId+groupId+foundInDB); + if (groupQueryList.isEmpty()) { + 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(duplicateGroupId + groupId + foundInDB); + throw new PersistenceException(duplicateGroupId + groupId + foundInDB); } - return (GroupEntity)groupQueryList.get(0); + return (GroupEntity) groupQueryList.get(0); } } @Override - public List<?> getPdpsInGroup(long groupKey){ - logger.debug("getPdpsInGroup(int groupKey) as getPdpsInGroup("+groupKey+") called"); - if(groupKey < 0){ + public List<?> getPdpsInGroup(long groupKey) { + logger.debug("getPdpsInGroup(int groupKey) as getPdpsInGroup(" + groupKey + ") called"); + if (groupKey < 0) { throw new IllegalArgumentException("groupId must not be < 0"); } - synchronized(emLock){ + synchronized (emLock) { checkBeforeOperationRun(true); Query pdpsQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.groupEntity=:group"); pdpsQuery.setParameter("group", getGroup(groupKey)); @@ -1840,103 +1992,114 @@ public class PolicyDBDao { } @Override - public PdpEntity getPdp(long pdpKey){ - logger.debug("getPdp(int pdpKey) as getPdp("+pdpKey+") called"); - if(pdpKey < 0){ + public PdpEntity getPdp(long pdpKey) { + logger.debug("getPdp(int pdpKey) as getPdp(" + pdpKey + ") called"); + if (pdpKey < 0) { throw new IllegalArgumentException("pdpKey must be at least 0"); } - synchronized(emLock){ + 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{ + try { pdpQueryList = pdpQuery.getResultList(); - }catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get pdp with pdpQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get pdp "+pdpKey); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception trying to get pdp with pdpQuery.getResultList()"); + throw new PersistenceException("Query failed trying to get pdp " + pdpKey); } - if(pdpQueryList.isEmpty()){ - 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+foundInDB); - throw new PersistenceException("Somehow, more than one pdp with the pdpKey "+pdpKey+foundInDB); + if (pdpQueryList.isEmpty()) { + 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 + foundInDB); + throw new PersistenceException("Somehow, more than one pdp with the pdpKey " + pdpKey + foundInDB); } - return (PdpEntity)pdpQueryList.get(0); + return (PdpEntity) pdpQueryList.get(0); } } @Override public boolean isTransactionOpen() { logger.debug("isTransactionOpen() as isTransactionOpen() called"); - synchronized(emLock){ + synchronized (emLock) { return em.isOpen() && em.getTransaction().isActive(); } } - private String processConfigPath(String inputConfigPath){ + private String processConfigPath(String inputConfigPath) { String configPath = inputConfigPath; String webappsPath = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS); - if(webappsPath == null){ + if (webappsPath == null) { logger.error("Webapps property does not exist"); throw new IllegalArgumentException("Webapps property does not exist"); } configPath = configPath.replace("$URL", webappsPath); //make sure the correct slashes are in - try{ + try { configPath = Paths.get(configPath).toString(); - } catch(InvalidPathException e){ - logger.error("Invalid config path: "+configPath, e); - throw new IllegalArgumentException("Invalid config path: "+configPath); + } catch (InvalidPathException e) { + logger.error("Invalid config path: " + configPath, e); + throw new IllegalArgumentException("Invalid config path: " + configPath); } return configPath; } - private String readConfigFile(String configPath){ + private String readConfigFile(String configPath) { String configDataString = null; - try(InputStream configContentStream = new FileInputStream(configPath);) { + try (InputStream configContentStream = new FileInputStream(configPath);) { configDataString = IOUtils.toString(configContentStream); } catch (FileNotFoundException e) { - logger.error("Caught FileNotFoundException on new FileInputStream("+configPath+")",e); + logger.error("Caught FileNotFoundException on new FileInputStream(" + configPath + ")", e); throw new IllegalArgumentException("The config file path does not exist"); - } catch(IOException e2){ - logger.error("Caught IOException on newIOUtils.toString(configContentStream)",e2); + } catch (IOException e2) { + logger.error("Caught IOException on newIOUtils.toString(configContentStream)", e2); throw new IllegalArgumentException("The config file path cannot be read"); } - if(configDataString == null){ + if (configDataString == null) { throw new IllegalArgumentException("The config file path cannot be read"); } return configDataString; } @Override - public void createPolicy(Policy policy, String username){ + public void createPolicy(Policy policy, String username) { - try{ - logger.debug("createPolicy(PolicyRestAdapter policy, String username) as createPolicy("+policy+","+username+") called"); + try { + logger.debug("createPolicy(PolicyRestAdapter policy, String username) as createPolicy(" + policy + "," + + username + ") called"); 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. - String policyDataString = getPolicyDataString((PolicyType)policy.getCorrectPolicyDataObject()); - if(isJunit){ + String policyDataString = getPolicyDataString((PolicyType) policy.getCorrectPolicyDataObject()); + if (isJunit) { //Using parentPath object to set policy data. policyDataString = policy.policyAdapter.getParentPath(); } String configPath = ""; if (policy.policyAdapter.getPolicyType().equalsIgnoreCase(config)) { - configPath = evaluateXPath("/Policy/Rule/AdviceExpressions/AdviceExpression[contains(@AdviceId,'ID')]/AttributeAssignmentExpression[@AttributeId='URLID']/AttributeValue/text()", policyDataString); + configPath = evaluateXPath( + "/Policy/Rule/AdviceExpressions/AdviceExpression[contains(@AdviceId,'ID')" + + "]/AttributeAssignmentExpression[@AttributeId='URLID']/AttributeValue/text()", + policyDataString); } else if (policy.policyAdapter.getPolicyType().equalsIgnoreCase(action)) { - configPath = evaluateXPath("/Policy/Rule/ObligationExpressions/ObligationExpression[contains(@ObligationId, " +policy.policyAdapter.getActionAttribute()+ ")]/AttributeAssignmentExpression[@AttributeId='body']/AttributeValue/text()", policyDataString); + 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.lastIndexOf(policy.policyAdapter.getPolicyName())); - if(isNullOrEmpty(policy.policyAdapter.getConfigBodyData())){ + prefix = configPath + .substring(configPath.indexOf(policyScope + ".") + policyScope.concat(".").length(), + configPath.lastIndexOf(policy.policyAdapter.getPolicyName())); + if (isNullOrEmpty(policy.policyAdapter.getConfigBodyData())) { policy.policyAdapter.setConfigBodyData(getConfigData(configPath)); } } else if (action.equalsIgnoreCase(policy.policyAdapter.getPolicyType())) { @@ -1945,55 +2108,57 @@ public class PolicyDBDao { prefix = "Decision_"; } - if(!(policy.policyAdapter.getData() instanceof PolicyType)){ + if (!(policy.policyAdapter.getData() instanceof 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 = policyScope + "." + prefix+policy.policyAdapter.getPolicyName()+"."+((PolicyType)policy.policyAdapter.getData()).getVersion()+".xml"; - if(policy.policyAdapter.getConfigType() == null || "".equals(policy.policyAdapter.getConfigType())){ + String finalName = policyScope + "." + prefix + policy.policyAdapter.getPolicyName() + "." + + ((PolicyType) policy.policyAdapter.getData()).getVersion() + ".xml"; + if (policy.policyAdapter.getConfigType() == null || "".equals(policy.policyAdapter.getConfigType())) { //get the config file extension String ext = ""; if (configPath != null && !"".equalsIgnoreCase(configPath)) { - ext = configPath.substring(configPath.lastIndexOf('.'), configPath.length());; + ext = configPath.substring(configPath.lastIndexOf('.'), configPath.length()); + ; } - if(ext.contains("txt")){ + if (ext.contains("txt")) { policy.policyAdapter.setConfigType(OTHER_CONFIG); - } else if(ext.contains("json")){ + } else if (ext.contains("json")) { policy.policyAdapter.setConfigType(JSON_CONFIG); - } else if(ext.contains("xml")){ + } else if (ext.contains("xml")) { policy.policyAdapter.setConfigType(XML_CONFIG); - } else if(ext.contains("properties")){ + } else if (ext.contains("properties")) { policy.policyAdapter.setConfigType(PROPERTIES_CONFIG); } else { - if (policy.policyAdapter.getPolicyType().equalsIgnoreCase(action)){ + if (policy.policyAdapter.getPolicyType().equalsIgnoreCase(action)) { policy.policyAdapter.setConfigType(JSON_CONFIG); } } } - createPolicy(policy.policyAdapter, username, policyScope,finalName,policyDataString); + createPolicy(policy.policyAdapter, username, policyScope, finalName, policyDataString); } catch (Exception e) { - logger.error("Could not create policy for "+policy,e); + logger.error("Could not create policy for " + policy, e); throw e; } } private String getConfigData(String configPath) { String configData = ""; - try{ + try { configData = getConfigPath(configPath); - }catch(Exception e){ - logger.error("Could not read config body data for "+configPath,e); + } catch (Exception e) { + logger.error("Could not read config body data for " + configPath, e); } return configData; } private String getConfigPath(String configPath) { - try{ + try { String newConfigPath = processConfigPath(configPath); return readConfigFile(newConfigPath); - } catch(IllegalArgumentException e2){ - logger.error("Could not process config path: "+configPath,e2); + } catch (IllegalArgumentException e2) { + logger.error("Could not process config path: " + configPath, e2); } return ""; } @@ -2002,21 +2167,22 @@ public class PolicyDBDao { try (InputStream policyXmlStream = XACMLPolicyWriter.getXmlAsInputStream(policyType)) { return IOUtils.toString(policyXmlStream, StandardCharsets.UTF_8); } catch (IOException e) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught IOException on IOUtils.toString(policyXmlStream)"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught IOException on IOUtils.toString(policyXmlStream)"); throw new IllegalArgumentException("Cannot parse the policy xml from the PolicyRestAdapter.", e); } } @Override - public void close(){ - synchronized(emLock){ - if(em.isOpen()){ - if(em.getTransaction().isActive()){ + public void close() { + synchronized (emLock) { + if (em.isOpen()) { + if (em.getTransaction().isActive()) { em.getTransaction().rollback(); } em.close(); } - if(transactionTimer != null){ + if (transactionTimer != null) { transactionTimer.interrupt(); } } @@ -2025,29 +2191,31 @@ public class PolicyDBDao { @Override public void createGroup(String groupId, String groupName, String inputGroupDescription, String username) { String groupDescription = inputGroupDescription; - logger.debug("deletePolicy(String policyToDeletes) as createGroup("+groupId+", "+groupName+", "+groupDescription+") called"); - if(isNullOrEmpty(groupId, groupName, username)){ + logger.debug("deletePolicy(String policyToDeletes) as createGroup(" + groupId + ", " + groupName + ", " + + groupDescription + ") called"); + if (isNullOrEmpty(groupId, groupName, username)) { throw new IllegalArgumentException("groupId, groupName, and username must not be null or empty"); } - if(groupDescription == null){ + if (groupDescription == null) { groupDescription = ""; } - synchronized(emLock){ + synchronized (emLock) { checkBeforeOperationRun(); Query checkGroupQuery = em.createQuery(groupEntitySelectQuery); checkGroupQuery.setParameter(groupIdVar, groupId); checkGroupQuery.setParameter(deletedVar, false); List<?> checkGroupQueryList; - try{ + try { checkGroupQueryList = checkGroupQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on checkGroupQuery.getResultList()"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception on checkGroupQuery.getResultList()"); throw new PersistenceException(queryFailedToCheckExisting); } - if(!checkGroupQueryList.isEmpty()){ - PolicyLogger.error("The group being added already exists with id "+groupId); - throw new PersistenceException("The group being added already exists with id "+groupId); + if (!checkGroupQueryList.isEmpty()) { + 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); @@ -2063,39 +2231,42 @@ public class PolicyDBDao { } @Override - public void updateGroup(OnapPDPGroup group, String username){ - logger.info("PolicyDBDao: updateGroup(PDPGroup group) as updateGroup("+group+","+username+") called"); - if(group == null){ + public void updateGroup(OnapPDPGroup group, String username) { + logger.info( + "PolicyDBDao: updateGroup(PDPGroup group) as updateGroup(" + group + "," + username + ") called"); + if (group == null) { throw new IllegalArgumentException("PDPGroup group must not be null"); } - if(isNullOrEmpty(group.getId(), username)){ + if (isNullOrEmpty(group.getId(), username)) { throw new IllegalArgumentException("group.getId() and username must not be null or empty"); } - synchronized(emLock){ + synchronized (emLock) { checkBeforeOperationRun(); Query getGroupQuery = em.createQuery(groupEntitySelectQuery); getGroupQuery.setParameter(groupIdVar, group.getId()); getGroupQuery.setParameter(deletedVar, false); List<?> getGroupQueryList; - try{ + try { getGroupQueryList = getGroupQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on getGroupQuery.getResultList()"); - throw new PersistenceException(queryFailedToGetGroup+group.getId()+" for editing"); - } - if(getGroupQueryList.isEmpty()){ - 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(duplicateGroupId+group.getId()+deletedStatusFound); - throw new PersistenceException(duplicateGroupId+group.getId()+deletedStatusFound); - } - GroupEntity groupToUpdateInDB = (GroupEntity)getGroupQueryList.get(0); - if(!stringEquals(groupToUpdateInDB.getModifiedBy(), username)){ + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception on getGroupQuery.getResultList()"); + throw new PersistenceException(queryFailedToGetGroup + group.getId() + " for editing"); + } + if (getGroupQueryList.isEmpty()) { + 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(duplicateGroupId + group.getId() + deletedStatusFound); + throw new PersistenceException(duplicateGroupId + group.getId() + deletedStatusFound); + } + GroupEntity groupToUpdateInDB = (GroupEntity) getGroupQueryList.get(0); + if (!stringEquals(groupToUpdateInDB.getModifiedBy(), username)) { groupToUpdateInDB.setModifiedBy(username); } - if(group.getDescription() != null && !stringEquals(group.getDescription(),groupToUpdateInDB.getDescription())){ + if (group.getDescription() != null && + !stringEquals(group.getDescription(), groupToUpdateInDB.getDescription())) { groupToUpdateInDB.setDescription(group.getDescription()); } //let's find out what policies have been deleted @@ -2103,41 +2274,43 @@ public class PolicyDBDao { try { oldGroup = (StdPDPGroup) papEngine.getGroup(group.getId()); } catch (PAPException e1) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, "We cannot get the group from the papEngine to delete policies"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e1, policyDBDaoVar, + "We cannot get the group from the papEngine to delete policies"); } - if(oldGroup == null){ + if (oldGroup == null) { PolicyLogger.error("We cannot get the group from the papEngine to delete policies"); } else { Set<String> newPolicySet = new HashSet<>(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()){ + for (PDPPolicy pol : group.getPolicies()) { newPolicySet.add(pol.getId()); } - for(PDPPolicy pol : oldGroup.getPolicies()){ + for (PDPPolicy pol : oldGroup.getPolicies()) { //should be fast since getPolicies uses a HashSet in StdPDPGroup - if(!newPolicySet.contains(pol.getId())){ + if (!newPolicySet.contains(pol.getId())) { String[] scopeAndName = getNameScopeAndVersionFromPdpPolicy(pol.getId()); deletePolicyInScope(username, groupToUpdateInDB, pol, scopeAndName); } } } - if(group.getName() != null && !stringEquals(group.getName(),groupToUpdateInDB.getgroupName())){ + if (group.getName() != null && !stringEquals(group.getName(), groupToUpdateInDB.getgroupName())) { //we need to check if the new id exists in the database String newGroupId = createNewPDPGroupId(group.getName()); Query checkGroupQuery = em.createQuery(groupEntitySelectQuery); checkGroupQuery.setParameter(groupIdVar, newGroupId); checkGroupQuery.setParameter(deletedVar, false); List<?> checkGroupQueryList; - try{ + try { checkGroupQueryList = checkGroupQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on checkGroupQuery.getResultList()"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception on checkGroupQuery.getResultList()"); throw new PersistenceException(queryFailedToCheckExisting); } - if(!checkGroupQueryList.isEmpty()){ - PolicyLogger.error("The new group name already exists, group id "+newGroupId); - throw new PersistenceException("The new group name already exists, group id "+newGroupId); + if (!checkGroupQueryList.isEmpty()) { + PolicyLogger.error("The new group name already exists, group id " + newGroupId); + throw new PersistenceException("The new group name already exists, group id " + newGroupId); } groupToUpdateInDB.setGroupId(newGroupId); groupToUpdateInDB.setGroupName(group.getName()); @@ -2148,13 +2321,14 @@ public class PolicyDBDao { } } - private void deletePolicyInScope(String username, GroupEntity groupToUpdateInDB, PDPPolicy pol, String[] scopeAndName) { + private void deletePolicyInScope(String username, GroupEntity groupToUpdateInDB, PDPPolicy pol, + String[] scopeAndName) { PolicyEntity policyToDelete; if (scopeAndName == null) { return; } - try{ - policyToDelete = getPolicy(scopeAndName[0],scopeAndName[1]); + try { + policyToDelete = getPolicy(scopeAndName[0], scopeAndName[1]); if ("XACMLPapServlet.doDelete".equals(username)) { Iterator<PolicyEntity> dbPolicyIt = groupToUpdateInDB.getPolicies().iterator(); String policyName = getPolicyNameAndVersionFromPolicyFileName(policyToDelete.getPolicyName())[0]; @@ -2162,50 +2336,60 @@ public class PolicyDBDao { logger.info("PolicyDBDao: delete policy from GroupEntity"); deletePolicyFromGroupEntity(groupToUpdateInDB, policyToDelete, dbPolicyIt, policyName); } - }catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Could not get policy to remove: "+pol.getId()); - throw new PersistenceException("Could not get policy to remove: "+pol.getId()); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Could not get policy to remove: " + pol.getId()); + throw new PersistenceException("Could not get policy to remove: " + pol.getId()); } } - private void deletePolicyFromGroupEntity(GroupEntity groupToUpdateInDB, PolicyEntity policyToDelete, Iterator<PolicyEntity> dbPolicyIt, String policyName) { - try{ - while(dbPolicyIt.hasNext()){ + private void deletePolicyFromGroupEntity(GroupEntity groupToUpdateInDB, PolicyEntity policyToDelete, + Iterator<PolicyEntity> dbPolicyIt, String policyName) { + try { + while (dbPolicyIt.hasNext()) { PolicyEntity dbpolicy = dbPolicyIt.next(); - if(policyToDelete.getScope().equals(dbpolicy.getScope()) && + if (policyToDelete.getScope().equals(dbpolicy.getScope()) && getPolicyNameAndVersionFromPolicyFileName(dbpolicy.getPolicyName())[0].equals(policyName)) { dbPolicyIt.remove(); logger.info("PolicyDBDao: deleting policy from the existing group:\n " - + "policyName is " + policyToDelete.getScope()+"."+policyToDelete.getPolicyName() + "\n" + + "policyName is " + policyToDelete.getScope() + "." + policyToDelete.getPolicyName() + + "\n" + "group is " + groupToUpdateInDB.getGroupId()); } } - }catch(Exception e){ + } catch (Exception e) { logger.debug(e); - PolicyLogger.error("Could not delete policy with name: "+ policyToDelete.getScope()+"."+policyToDelete.getPolicyName()+"\n ID: "+ policyToDelete.getPolicyId()); + PolicyLogger.error("Could not delete policy with name: " + policyToDelete.getScope() + "." + + policyToDelete.getPolicyName() + "\n ID: " + policyToDelete.getPolicyId()); } } @Override - public void addPdpToGroup(String pdpID, String groupID, String pdpName, String pdpDescription, int pdpJmxPort, String username) { - logger.debug("addPdpToGroup(String pdpID, String groupID, String pdpName, String pdpDescription, int pdpJmxPort, String username) as addPdpToGroup("+pdpID+", "+groupID+", "+pdpName+", "+pdpDescription+", "+pdpJmxPort+", "+username+") called"); - if(isNullOrEmpty(pdpID, groupID,pdpName,username)){ + public void addPdpToGroup(String pdpID, String groupID, String pdpName, String pdpDescription, int pdpJmxPort, + String username) { + logger.debug( + "addPdpToGroup(String pdpID, String groupID, String pdpName, String pdpDescription, int " + + "pdpJmxPort, String username) as addPdpToGroup(" + + pdpID + ", " + groupID + ", " + pdpName + ", " + pdpDescription + ", " + pdpJmxPort + ", " + + username + ") called"); + if (isNullOrEmpty(pdpID, groupID, pdpName, username)) { throw new IllegalArgumentException("pdpID, groupID, pdpName, and username must not be null or empty"); } - synchronized(emLock){ + synchronized (emLock) { checkBeforeOperationRun(); Query checkGroupQuery = em.createQuery(groupEntitySelectQuery); checkGroupQuery.setParameter(groupIdVar, groupID); checkGroupQuery.setParameter(deletedVar, false); List<?> checkGroupQueryList; - try{ + try { checkGroupQueryList = checkGroupQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check for existing group on checkGroupQuery.getResultList()"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception trying to check for existing group on checkGroupQuery.getResultList()"); throw new PersistenceException(queryFailedToCheckExisting); } - if(checkGroupQueryList.size() != 1){ + if (checkGroupQueryList.size() != 1) { PolicyLogger.error("The group does not exist"); throw new PersistenceException("The group does not exist"); } @@ -2213,16 +2397,18 @@ public class PolicyDBDao { checkDuplicateQuery.setParameter(pdpIdVariable, pdpID); checkDuplicateQuery.setParameter(deletedVar, false); List<?> checkDuplicateList; - try{ + try { checkDuplicateList = checkDuplicateQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check for duplicate PDP "+pdpID+" on checkDuplicateQuery.getResultList()"); - throw new PersistenceException("Query failed trying to check for duplicate PDP "+pdpID); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "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.isEmpty()){ - logger.warn("PDP already exists with id "+pdpID); - newPdp = (PdpEntity)checkDuplicateList.get(0); + if (!checkDuplicateList.isEmpty()) { + logger.warn("PDP already exists with id " + pdpID); + newPdp = (PdpEntity) checkDuplicateList.get(0); } else { newPdp = new PdpEntity(); em.persist(newPdp); @@ -2231,7 +2417,7 @@ public class PolicyDBDao { newPdp.setCreatedBy(username); newPdp.setDeleted(false); newPdp.setDescription(pdpDescription); - newPdp.setGroup((GroupEntity)checkGroupQueryList.get(0)); + newPdp.setGroup((GroupEntity) checkGroupQueryList.get(0)); newPdp.setJmxPort(pdpJmxPort); newPdp.setModifiedBy(username); newPdp.setPdpId(pdpID); @@ -2244,45 +2430,46 @@ public class PolicyDBDao { @Override - public void updatePdp(OnapPDP pdp, String username){ - logger.debug("updatePdp(PDP pdp, String username) as updatePdp("+pdp+","+username+") called"); - if(pdp == null){ + public void updatePdp(OnapPDP pdp, String username) { + logger.debug("updatePdp(PDP pdp, String username) as updatePdp(" + pdp + "," + username + ") called"); + if (pdp == null) { throw new IllegalArgumentException("PDP pdp must not be null"); } - if(isNullOrEmpty(pdp.getId(),username)){ + if (isNullOrEmpty(pdp.getId(), username)) { throw new IllegalArgumentException("pdp.getId() and username must not be null or empty"); } - synchronized(emLock){ + synchronized (emLock) { checkBeforeOperationRun(); Query getPdpQuery = em.createQuery(pdpEntitySelectQuery); getPdpQuery.setParameter(pdpIdVariable, pdp.getId()); getPdpQuery.setParameter(deletedVar, false); List<?> getPdpQueryList; - try{ + try { getPdpQueryList = getPdpQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on getPdpQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get PDP "+pdp.getId()); - } - if(getPdpQueryList.isEmpty()){ - 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(moreThanOnePDP+pdp.getId()+deletedStatusFound); - throw new PersistenceException(moreThanOnePDP+pdp.getId()+deletedStatusFound); - } - PdpEntity pdpToUpdate = (PdpEntity)getPdpQueryList.get(0); - if(!stringEquals(pdpToUpdate.getModifiedBy(), username)){ + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception on getPdpQuery.getResultList()"); + throw new PersistenceException("Query failed trying to get PDP " + pdp.getId()); + } + if (getPdpQueryList.isEmpty()) { + 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(moreThanOnePDP + pdp.getId() + deletedStatusFound); + throw new PersistenceException(moreThanOnePDP + pdp.getId() + deletedStatusFound); + } + PdpEntity pdpToUpdate = (PdpEntity) getPdpQueryList.get(0); + if (!stringEquals(pdpToUpdate.getModifiedBy(), username)) { pdpToUpdate.setModifiedBy(username); } - if(pdp.getDescription() != null && !stringEquals(pdp.getDescription(),pdpToUpdate.getDescription())){ + if (pdp.getDescription() != null && !stringEquals(pdp.getDescription(), pdpToUpdate.getDescription())) { pdpToUpdate.setDescription(pdp.getDescription()); } - if(pdp.getName() != null && !stringEquals(pdp.getName(),pdpToUpdate.getPdpName())){ + if (pdp.getName() != null && !stringEquals(pdp.getName(), pdpToUpdate.getPdpName())) { pdpToUpdate.setPdpName(pdp.getName()); } - if(pdp.getJmxPort() != null && !pdp.getJmxPort().equals(pdpToUpdate.getJmxPort())){ + if (pdp.getJmxPort() != null && !pdp.getJmxPort().equals(pdpToUpdate.getJmxPort())) { pdpToUpdate.setJmxPort(pdp.getJmxPort()); } @@ -2292,34 +2479,37 @@ public class PolicyDBDao { } @Override - public void movePdp(OnapPDP pdp, OnapPDPGroup group, String username){ - logger.debug("movePdp(PDP pdp, PDPGroup group, String username) as movePdp("+pdp+","+group+","+username+") called"); - if(pdp == null || group == null){ + public void movePdp(OnapPDP pdp, OnapPDPGroup group, String username) { + logger.debug("movePdp(PDP pdp, PDPGroup group, String username) as movePdp(" + pdp + "," + group + "," + + username + ") called"); + 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"); + if (isNullOrEmpty(username, pdp.getId(), group.getId())) { + throw new IllegalArgumentException( + "pdp.getId(), group.getId(), and username must not be null or empty"); } - synchronized(emLock){ + synchronized (emLock) { checkBeforeOperationRun(); //check if pdp exists Query getPdpQuery = em.createQuery(pdpEntitySelectQuery); getPdpQuery.setParameter(pdpIdVariable, pdp.getId()); getPdpQuery.setParameter(deletedVar, false); List<?> getPdpQueryList; - try{ + try { getPdpQueryList = getPdpQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on getPdpQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get pdp to move with id "+pdp.getId()); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception on getPdpQuery.getResultList()"); + throw new PersistenceException("Query failed trying to get pdp to move with id " + pdp.getId()); } - if(getPdpQueryList.isEmpty()){ - 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(moreThanOnePDP+pdp.getId()+deletedStatusFound); - throw new PersistenceException(moreThanOnePDP+pdp.getId()+deletedStatusFound); + if (getPdpQueryList.isEmpty()) { + 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(moreThanOnePDP + pdp.getId() + deletedStatusFound); + throw new PersistenceException(moreThanOnePDP + pdp.getId() + deletedStatusFound); } //check if new group exists @@ -2327,20 +2517,21 @@ public class PolicyDBDao { checkGroupQuery.setParameter(groupIdVar, group.getId()); checkGroupQuery.setParameter(deletedVar, false); List<?> checkGroupQueryList; - try{ + try { checkGroupQueryList = checkGroupQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get group on checkGroupQuery.getResultList()"); - throw new PersistenceException("Query failed trying to get new group "+group.getId()); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "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"); + 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); + GroupEntity groupToMoveInto = (GroupEntity) checkGroupQueryList.get(0); + PdpEntity pdpToUpdate = (PdpEntity) getPdpQueryList.get(0); pdpToUpdate.setGroup(groupToMoveInto); - if(!stringEquals(pdpToUpdate.getModifiedBy(), username)){ + if (!stringEquals(pdpToUpdate.getModifiedBy(), username)) { pdpToUpdate.setModifiedBy(username); } @@ -2350,51 +2541,56 @@ public class PolicyDBDao { } @Override - public void changeDefaultGroup(OnapPDPGroup group, String username){ - logger.debug("changeDefaultGroup(PDPGroup group, String username) as changeDefaultGroup("+group+","+username+") called"); - if(group == null){ + public void changeDefaultGroup(OnapPDPGroup group, String username) { + logger.debug("changeDefaultGroup(PDPGroup group, String username) as changeDefaultGroup(" + group + "," + + username + ") called"); + if (group == null) { throw new IllegalArgumentException("PDPGroup group must not be null"); } - if(isNullOrEmpty(group.getId(),username)){ + if (isNullOrEmpty(group.getId(), username)) { throw new IllegalArgumentException("group.getId() and username must not be null or empty"); } - synchronized(emLock){ + synchronized (emLock) { checkBeforeOperationRun(); Query getGroupQuery = em.createQuery(groupEntitySelectQuery); getGroupQuery.setParameter(groupIdVar, group.getId()); getGroupQuery.setParameter(deletedVar, false); List<?> getGroupQueryList; - try{ + try { getGroupQueryList = getGroupQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on getGroupQuery.getResultList()"); - throw new PersistenceException(queryFailedToGetGroup+group.getId()); - } - if(getGroupQueryList.isEmpty()){ - 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(duplicateGroupId+group.getId()+deletedStatusFound); - throw new PersistenceException(duplicateGroupId+group.getId()+deletedStatusFound); - } - GroupEntity newDefaultGroup = (GroupEntity)getGroupQueryList.get(0); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception on getGroupQuery.getResultList()"); + throw new PersistenceException(queryFailedToGetGroup + group.getId()); + } + if (getGroupQueryList.isEmpty()) { + 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(duplicateGroupId + group.getId() + deletedStatusFound); + throw new PersistenceException(duplicateGroupId + group.getId() + deletedStatusFound); + } + GroupEntity newDefaultGroup = (GroupEntity) getGroupQueryList.get(0); newDefaultGroup.setDefaultGroup(true); - if(!stringEquals(newDefaultGroup.getModifiedBy(), username)){ + 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"); + 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(deletedVar, false); setAllGroupsNotDefault.setParameter("groupKey", newDefaultGroup.getGroupKey()); - try{ + try { logger.info("set " + setAllGroupsNotDefault.executeUpdate() + " groups as not default"); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception on setAllGroupsNotDefault.executeUpdate()"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception on setAllGroupsNotDefault.executeUpdate()"); throw new PersistenceException("Could not set all other groups default to false"); } em.flush(); @@ -2403,94 +2599,107 @@ public class PolicyDBDao { @Override - public void deleteGroup(OnapPDPGroup group, OnapPDPGroup moveToGroup, String username) throws PolicyDBException { - logger.debug("deleteGroup(PDPGroup group, PDPGroup moveToGroup, String username) as deleteGroup("+group+", "+moveToGroup+","+username+") called"); - if(group == null){ + public void deleteGroup(OnapPDPGroup group, OnapPDPGroup moveToGroup, String username) + throws PolicyDBException { + logger.debug("deleteGroup(PDPGroup group, PDPGroup moveToGroup, String username) as deleteGroup(" + group + + ", " + moveToGroup + "," + username + ") called"); + if (group == null) { throw new IllegalArgumentException("PDPGroup group cannot be null"); } - if(isNullOrEmpty(username,group.getId())){ + if (isNullOrEmpty(username, group.getId())) { throw new IllegalArgumentException("group.getId() and and username must not be null or empty"); } - if(group.isDefaultGroup()){ - PolicyLogger.error("The default group "+group.getId()+" was attempted to be deleted. It cannot be."); + if (group.isDefaultGroup()) { + PolicyLogger + .error("The default group " + group.getId() + " was attempted to be deleted. It cannot be."); throw new PolicyDBException("You cannot delete the default group."); } - synchronized(emLock){ + synchronized (emLock) { checkBeforeOperationRun(); Query deleteGroupQuery = em.createQuery(groupEntitySelectQuery); deleteGroupQuery.setParameter(groupIdVar, group.getId()); deleteGroupQuery.setParameter(deletedVar, false); List<?> deleteGroupQueryList; - try{ + try { deleteGroupQueryList = deleteGroupQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check if group exists deleteGroupQuery.getResultList()"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception trying to check if group exists deleteGroupQuery.getResultList()"); throw new PersistenceException("Query failed trying to check if group exists"); } - if(deleteGroupQueryList.isEmpty()){ + if (deleteGroupQueryList.isEmpty()) { logger.warn(groupCannotBeFound + group.getId()); return; - } else if(deleteGroupQueryList.size() > 1){ - PolicyLogger.error(duplicateGroupId+group.getId()+foundInDBNotDeleted); - throw new PersistenceException(duplicateGroupId+group.getId()+foundInDBNotDeleted); + } else if (deleteGroupQueryList.size() > 1) { + PolicyLogger.error(duplicateGroupId + group.getId() + foundInDBNotDeleted); + throw new PersistenceException(duplicateGroupId + group.getId() + foundInDBNotDeleted); } - Query pdpsInGroupQuery = em.createQuery("SELECT p FROM PdpEntity p WHERE p.groupEntity=:group and p.deleted=:deleted"); - pdpsInGroupQuery.setParameter("group", ((GroupEntity)deleteGroupQueryList.get(0))); + 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(deletedVar, false); List<?> pdpsInGroupList; - try{ + try { pdpsInGroupList = pdpsInGroupQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to get PDPs in group on pdpsInGroupQuery.getResultList()"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception trying to get PDPs in group on pdpsInGroupQuery.getResultList()"); throw new PersistenceException("Query failed trying to get PDPs in group"); } - if(!pdpsInGroupList.isEmpty()){ - if(moveToGroup != null){ - Query checkMoveToGroupQuery = em.createQuery("SELECT o FROM GroupEntity o WHERE o.groupId=:groupId AND o.deleted=:deleted"); + if (!pdpsInGroupList.isEmpty()) { + if (moveToGroup != null) { + Query checkMoveToGroupQuery = em.createQuery( + "SELECT o FROM GroupEntity o WHERE o.groupId=:groupId AND o.deleted=:deleted"); checkMoveToGroupQuery.setParameter(groupIdVar, moveToGroup.getId()); checkMoveToGroupQuery.setParameter(deletedVar, false); List<?> checkMoveToGroupList; - try{ + try { checkMoveToGroupList = checkMoveToGroupQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check if group exists checkMoveToGroupQuery.getResultList()"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception trying to check if group exists checkMoveToGroupQuery" + + ".getResultList()"); throw new PersistenceException("Query failed trying to check if group exists"); } - if(checkMoveToGroupList.isEmpty()){ + if (checkMoveToGroupList.isEmpty()) { PolicyLogger.error(groupCannotBeFound + moveToGroup.getId()); throw new PersistenceException(groupCannotBeFound + moveToGroup.getId()); - } else if(checkMoveToGroupList.size() > 1){ - PolicyLogger.error(duplicateGroupId+moveToGroup.getId()+foundInDBNotDeleted); - throw new PersistenceException(duplicateGroupId+moveToGroup.getId()+foundInDBNotDeleted); + } else if (checkMoveToGroupList.size() > 1) { + PolicyLogger.error(duplicateGroupId + moveToGroup.getId() + foundInDBNotDeleted); + throw new PersistenceException( + duplicateGroupId + moveToGroup.getId() + foundInDBNotDeleted); } else { - GroupEntity newGroup = (GroupEntity)checkMoveToGroupList.get(0); - for(Object pdpObject : pdpsInGroupList){ - PdpEntity pdp = (PdpEntity)pdpObject; + GroupEntity newGroup = (GroupEntity) checkMoveToGroupList.get(0); + for (Object pdpObject : pdpsInGroupList) { + PdpEntity pdp = (PdpEntity) pdpObject; pdp.setGroup(newGroup); - if(!stringEquals(pdp.getModifiedBy(),username)){ + if (!stringEquals(pdp.getModifiedBy(), username)) { pdp.setModifiedBy(username); } - try{ + try { em.flush(); this.newGroupId = newGroup.getGroupId(); - } catch(PersistenceException e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught PersistenceException trying to set pdp group to null on em.flush()"); + } catch (PersistenceException e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught PersistenceException trying to set pdp group to null on em.flush" + + "()"); throw new PersistenceException("Query failed trying to set pdp group to "); } } } } else { - PolicyLogger.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 PolicyDBException("Group has PDPs. Must provide a group for them to move to"); } } //delete group here - GroupEntity groupToDelete = (GroupEntity)deleteGroupQueryList.get(0); + GroupEntity groupToDelete = (GroupEntity) deleteGroupQueryList.get(0); groupToDelete.setDeleted(true); - if(!stringEquals(groupToDelete.getModifiedBy(), username)){ + if (!stringEquals(groupToDelete.getModifiedBy(), username)) { groupToDelete.setModifiedBy(username); } em.flush(); @@ -2500,74 +2709,86 @@ public class PolicyDBDao { @Override public StdPDPGroup addPolicyToGroup(String groupID, String policyID, String username) throws PolicyDBException { - logger.info("PolicyDBDao: addPolicyToGroup(String groupID, String policyID, String username) as addPolicyToGroup("+groupID+", "+policyID+","+username+") called"); - if(isNullOrEmpty(groupID, policyID, username)){ + logger.info( + "PolicyDBDao: addPolicyToGroup(String groupID, String policyID, String username) as " + + "addPolicyToGroup(" + + groupID + ", " + policyID + "," + username + ") called"); + if (isNullOrEmpty(groupID, policyID, username)) { throw new IllegalArgumentException("groupID, policyID, and username must not be null or empty"); } - synchronized(emLock){ + synchronized (emLock) { checkBeforeOperationRun(); //check if group exists Query groupQuery = em.createQuery(groupEntitySelectQuery); groupQuery.setParameter(groupIdVar, groupID); groupQuery.setParameter(deletedVar, false); List<?> groupQueryList; - try{ + try { groupQueryList = groupQuery.getResultList(); - }catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "Caught Exception trying to check if group exists groupQuery.getResultList()"); - throw new PersistenceException("Query failed trying to check if group "+groupID+" exists"); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "Caught Exception trying to check if group exists groupQuery.getResultList()"); + throw new PersistenceException("Query failed trying to check if group " + groupID + " exists"); } - if(groupQueryList.isEmpty()){ - 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(duplicateGroupId+groupID+foundInDBNotDeleted); - throw new PersistenceException(duplicateGroupId+groupID+foundInDBNotDeleted); + if (groupQueryList.isEmpty()) { + 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(duplicateGroupId + groupID + foundInDBNotDeleted); + throw new PersistenceException(duplicateGroupId + groupID + foundInDBNotDeleted); } //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); - if(policyNameScopeAndVersion == null) { + if (policyNameScopeAndVersion == null) { throw new IllegalArgumentException("Invalid input - policyID must contain name, scope and version"); } - Query policyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.policyName=:policyName AND p.scope=:scope AND p.deleted=:deleted"); + 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(deletedVar, false); List<?> policyQueryList; - try{ + try { policyQueryList = policyQuery.getResultList(); - } catch(Exception e){ + } catch (Exception e) { logger.debug(e); - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "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.isEmpty()){ - 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(duplicatePolicyId+policyNameScopeAndVersion[0]+foundInDBNotDeleted); - throw new PersistenceException(duplicateGroupId+policyNameScopeAndVersion[0]+foundInDBNotDeleted); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "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.isEmpty()) { + 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(duplicatePolicyId + policyNameScopeAndVersion[0] + foundInDBNotDeleted); + throw new PersistenceException( + duplicateGroupId + policyNameScopeAndVersion[0] + foundInDBNotDeleted); } logger.info("PolicyDBDao: Getting group and policy from database"); - GroupEntity group = (GroupEntity)groupQueryList.get(0); - PolicyEntity policy = (PolicyEntity)policyQueryList.get(0); + GroupEntity group = (GroupEntity) groupQueryList.get(0); + PolicyEntity policy = (PolicyEntity) policyQueryList.get(0); Iterator<PolicyEntity> policyIt = group.getPolicies().iterator(); String policyName = getPolicyNameAndVersionFromPolicyFileName(policy.getPolicyName())[0]; logger.info("PolicyDBDao: policyName retrieved is " + policyName); - try{ - while(policyIt.hasNext()){ + try { + while (policyIt.hasNext()) { PolicyEntity pol = policyIt.next(); - if(policy.getScope().equals(pol.getScope()) && + if (policy.getScope().equals(pol.getScope()) && getPolicyNameAndVersionFromPolicyFileName(pol.getPolicyName())[0].equals(policyName)) { policyIt.remove(); } } - }catch(Exception e){ + } catch (Exception e) { logger.debug(e); - PolicyLogger.error("Could not delete old versions for policy "+policy.getPolicyName()+", ID: "+policy.getPolicyId()); + PolicyLogger.error("Could not delete old versions for policy " + policy.getPolicyName() + ", ID: " + + policy.getPolicyId()); } group.addPolicyToGroup(policy); em.flush(); @@ -2578,7 +2799,9 @@ public class PolicyDBDao { return synchronizeGroupPoliciesInFileSystem(pdpGroup, group); } catch (PAPException e) { logger.debug(e); - PolicyLogger.error("PolicyDBDao: Could not synchronize the filesystem group with the database group. " + e.getMessage()); + PolicyLogger + .error("PolicyDBDao: Could not synchronize the filesystem group with the database group. " + + e.getMessage()); } return null; } @@ -2587,32 +2810,35 @@ public class PolicyDBDao { //this means delete pdp not just remove from group @Override public void removePdpFromGroup(String pdpID, String username) { - logger.debug("removePdpFromGroup(String pdpID, String username) as removePdpFromGroup("+pdpID+","+username+") called"); - if(isNullOrEmpty(pdpID,username)){ + logger.debug("removePdpFromGroup(String pdpID, String username) as removePdpFromGroup(" + pdpID + "," + + username + ") called"); + if (isNullOrEmpty(pdpID, username)) { throw new IllegalArgumentException("pdpID and username must not be null or empty"); } - synchronized(emLock){ + synchronized (emLock) { checkBeforeOperationRun(); Query pdpQuery = em.createQuery(pdpEntitySelectQuery); pdpQuery.setParameter(pdpIdVariable, pdpID); pdpQuery.setParameter(deletedVar, false); List<?> pdpList; - try{ + try { pdpList = pdpQuery.getResultList(); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, "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){ - PolicyLogger.error("Somehow, more than one pdp with the id "+pdpID+foundInDBNotDeleted); - throw new PersistenceException("Somehow, more than one pdp with the id "+pdpID+foundInDBNotDeleted); - } else if(pdpList.isEmpty()){ - PolicyLogger.error("Pdp being removed does not exist with id "+pdpID); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, policyDBDaoVar, + "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) { + PolicyLogger.error("Somehow, more than one pdp with the id " + pdpID + foundInDBNotDeleted); + throw new PersistenceException( + "Somehow, more than one pdp with the id " + pdpID + foundInDBNotDeleted); + } else if (pdpList.isEmpty()) { + PolicyLogger.error("Pdp being removed does not exist with id " + pdpID); return; } - PdpEntity pdp = (PdpEntity)pdpList.get(0); + PdpEntity pdp = (PdpEntity) pdpList.get(0); pdp.setGroup(null); - if(!stringEquals(pdp.getModifiedBy(),username)){ + if (!stringEquals(pdp.getModifiedBy(), username)) { pdp.setModifiedBy(username); } pdp.setDeleted(true); @@ -2622,22 +2848,23 @@ public class PolicyDBDao { } } - private void notifyOthers(long entityId,String entityType){ - notifyOthers(entityId,entityType,null); + private void notifyOthers(long entityId, String entityType) { + notifyOthers(entityId, entityType, null); } - private void notifyOthers(long entityId, String entityType, String newGroupId){ - logger.debug("notifyOthers(long entityId, String entityType, long newGroupId) as notifyOthers("+entityId+","+entityType+","+newGroupId+") called"); + private 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<>(); //we're going to run notifications in parallel threads to speed things up - for(Object obj : otherServers){ + for (Object obj : otherServers) { Thread newNotifyThread = new Thread(new NotifyOtherThread(obj, entityId, entityType, newGroupId)); newNotifyThread.start(); notifyThreads.add(newNotifyThread); } //we want to wait for all notifications to complete or timeout before we unlock the interface and allow more changes - for(Thread t : notifyThreads){ + for (Thread t : notifyThreads) { try { t.join(); } catch (Exception e) { @@ -2647,19 +2874,20 @@ public class PolicyDBDao { } } - private PolicyDBDao(){ + private PolicyDBDao() { //empty constructor } - public static PolicyDBDaoTestClass getPolicyDBDaoTestClass(){ + public static PolicyDBDaoTestClass getPolicyDBDaoTestClass() { return new PolicyDBDao().new PolicyDBDaoTestClass(); } final class PolicyDBDaoTestClass { - String getConfigFile(String filename, String scope, PolicyRestAdapter policy){ + String getConfigFile(String filename, String scope, PolicyRestAdapter policy) { return scope + "." + PolicyDBDao.this.getConfigFile(filename, policy); } - String[] getPolicyNameAndVersionFromPolicyFileName(String originalPolicyName) throws PolicyDBException{ + + String[] getPolicyNameAndVersionFromPolicyFileName(String originalPolicyName) throws PolicyDBException { return PolicyDBDao.this.getPolicyNameAndVersionFromPolicyFileName(originalPolicyName); } } diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/PushPolicyController.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/PushPolicyController.java index 227be1bdf..eec34b642 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/PushPolicyController.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/controller/PushPolicyController.java @@ -7,9 +7,9 @@ * 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. @@ -55,31 +55,33 @@ import com.fasterxml.jackson.databind.ObjectMapper; @Controller public class PushPolicyController { - private static final Logger LOGGER = FlexLogger.getLogger(PushPolicyController.class); + private static final Logger LOGGER = FlexLogger.getLogger(PushPolicyController.class); private static CommonClassDao commonClassDao; private static String policyNames = "policyName"; - private static String errorMsg = "error"; + private static String errorMsg = "error"; private static String operation = "operation"; private static String messageContent = "message"; private static final String REGEX = "[0-9a-zA-Z._ ]*"; @Autowired - public PushPolicyController(CommonClassDao commonClassDao){ + public PushPolicyController(CommonClassDao commonClassDao) { PushPolicyController.commonClassDao = commonClassDao; } - public void setCommonClassDao(CommonClassDao commonClassDao){ + public void setCommonClassDao(CommonClassDao commonClassDao) { PushPolicyController.commonClassDao = commonClassDao; } + /* * This is an empty constructor */ - public PushPolicyController(){} + public PushPolicyController() { + } - @RequestMapping(value="/pushPolicy", method=RequestMethod.POST) - public void pushPolicy(HttpServletRequest request, HttpServletResponse response){ + @RequestMapping(value = "/pushPolicy", method = RequestMethod.POST) + public void pushPolicy(HttpServletRequest request, HttpServletResponse response) { ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); try { @@ -89,38 +91,39 @@ public class PushPolicyController { String policyName = root.get(policyNames).asText(); String pdpGroup = root.get("pdpGroup").asText(); String requestID = request.getHeader("X-ECOMP-RequestID"); - if(requestID==null){ + if (requestID == null) { requestID = UUID.randomUUID().toString(); LOGGER.info("No request ID provided, sending generated ID: " + requestID); } LOGGER.info("Push policy Request to get the selectedPolicy : " + root.asText()); String policyVersionName = policyScope.replace(".", File.separator) + File.separator + filePrefix + policyName; - List<?> policyVersionObject = commonClassDao.getDataById(PolicyVersion.class, policyNames, policyVersionName); - if(policyVersionObject!=null){ + List<?> policyVersionObject = + commonClassDao.getDataById(PolicyVersion.class, policyNames, policyVersionName); + if (policyVersionObject != null) { PolicyVersion policyVersion = (PolicyVersion) policyVersionObject.get(0); String policyID = policyVersionName.replace(File.separator, "."); // This is before adding version. policyVersionName += "." + policyVersion.getActiveVersion() + ".xml"; - addPolicyToGroup(policyScope, policyID, policyVersionName.replace(File.separator, "."), pdpGroup, response); - }else{ + addPolicyToGroup(policyScope, policyID, policyVersionName.replace(File.separator, "."), pdpGroup, + response); + } else { String message = "Unknown Policy '" + policyName + "'"; PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message); response.addHeader(errorMsg, "unknownPolicy"); response.addHeader(operation, "push"); response.addHeader(messageContent, message); response.setStatus(HttpServletResponse.SC_NOT_FOUND); - return; } } catch (NullPointerException | IOException e) { LOGGER.error(e); response.setStatus(HttpServletResponse.SC_NOT_FOUND); response.addHeader(errorMsg, "unknown"); response.addHeader(operation, "push"); - return; } } - private void addPolicyToGroup(String policyScope, String policyID, String policyName, String pdpGroup, HttpServletResponse response) { + private void addPolicyToGroup(String policyScope, String policyID, String policyName, String pdpGroup, + HttpServletResponse response) { StdPDPGroup selectedPDPGroup = null; StdPDPPolicy selectedPolicy = null; //Get the selected PDP Group to push the policy @@ -129,9 +132,9 @@ public class PushPolicyController { } catch (PAPException e1) { PolicyLogger.error(e1); } - if(selectedPDPGroup==null){ + if (selectedPDPGroup == null) { String message = "Unknown groupId '" + selectedPDPGroup + "'"; - if(!message.matches(REGEX) ){ + if (!message.matches(REGEX)) { message = "Unknown groupId"; } PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message); @@ -143,15 +146,18 @@ public class PushPolicyController { } //Get PolicyEntity from DB; EntityManager em = XACMLPapServlet.getEmf().createEntityManager(); - Query createPolicyQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:policyName"); + Query createPolicyQuery = + em.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:policyName"); createPolicyQuery.setParameter("scope", policyScope); - createPolicyQuery.setParameter(policyNames, policyName.substring(policyScope.length()+1)); + createPolicyQuery.setParameter(policyNames, policyName.substring(policyScope.length() + 1)); List<?> createPolicyQueryList = createPolicyQuery.getResultList(); PolicyEntity policyEntity = null; - if(!createPolicyQueryList.isEmpty()){ - policyEntity = (PolicyEntity)createPolicyQueryList.get(0); - }else{ - PolicyLogger.error("Somehow, more than one policy with the same scope, name, and deleted status were found in the database"); + if (!createPolicyQueryList.isEmpty()) { + policyEntity = (PolicyEntity) createPolicyQueryList.get(0); + } else { + PolicyLogger + .error("Somehow, more than one policy with the same scope, name, and deleted status were found in" + + " the database"); String message = "Unknown Policy '" + policyName + "'"; PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " " + message); response.addHeader(errorMsg, "unknownPolicy"); @@ -161,13 +167,13 @@ public class PushPolicyController { return; } File temp = new File(policyName); - try (BufferedWriter bw = new BufferedWriter(new FileWriter(temp))){ + try (BufferedWriter bw = new BufferedWriter(new FileWriter(temp))) { bw.write(policyEntity.getPolicyData()); URI selectedURI = temp.toURI(); // Create the policy Object selectedPolicy = new StdPDPPolicy(policyName, true, policyID, selectedURI); } catch (IOException e) { - LOGGER.error("Unable to get policy '" + policyName + "': "+ e.getMessage(),e); + LOGGER.error("Unable to get policy '" + policyName + "': " + e.getMessage(), e); } try { new ObjectOutputStream(response.getOutputStream()).writeObject(selectedPolicy); @@ -178,11 +184,10 @@ public class PushPolicyController { response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } - response.addHeader("Content-Type","application/json"); + response.addHeader("Content-Type", "application/json"); response.setStatus(HttpServletResponse.SC_ACCEPTED); response.addHeader(operation, "push"); response.addHeader("policyId", policyName); - return; // TODO : Check point to push policies within PAP. } } diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/APIRequestHandler.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/APIRequestHandler.java index cc9cc16a0..40cb8aaf9 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/APIRequestHandler.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/APIRequestHandler.java @@ -7,9 +7,9 @@ * 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. @@ -34,7 +34,7 @@ public class APIRequestHandler { private OnapPDPGroup newGroup; - public void doGet(HttpServletRequest request, HttpServletResponse response, String apiflag) throws IOException{ + public void doGet(HttpServletRequest request, HttpServletResponse response, String apiflag) throws IOException { // Request from the API to get Dictionary Items if ("api".equalsIgnoreCase(apiflag)) { DictionaryHandler dictionaryHandler = DictionaryHandler.getInstance(); @@ -42,25 +42,25 @@ public class APIRequestHandler { return; } // Request from the API to get the ActiveVersion from the PolicyVersion table - if ("version".equalsIgnoreCase(apiflag)){ + if ("version".equalsIgnoreCase(apiflag)) { PushPolicyHandler pushHandler = new PushPolicyHandler(); pushHandler.getActiveVersion(request, response); return; } // Request from the API to get the URI from the gitpath - if ("uri".equalsIgnoreCase(apiflag)){ + if ("uri".equalsIgnoreCase(apiflag)) { PushPolicyHandler pushHandler = new PushPolicyHandler(); pushHandler.getSelectedURI(request, response); return; } - if ("getMetrics".equalsIgnoreCase(apiflag)){ + if ("getMetrics".equalsIgnoreCase(apiflag)) { MetricService.doGetPolicyMetrics(response); - return; } } public void doPut(HttpServletRequest request, HttpServletResponse response, String service) throws IOException { - if ("MICROSERVICE".equalsIgnoreCase(service) || "BRMSPARAM".equalsIgnoreCase(service) || "OPTIMIZATION".equalsIgnoreCase(service)){ + if ("MICROSERVICE".equalsIgnoreCase(service) || "BRMSPARAM".equalsIgnoreCase(service) || + "OPTIMIZATION".equalsIgnoreCase(service)) { ImportService importService = new ImportService(); importService.doImportMicroServicePut(request, response); return; @@ -68,22 +68,20 @@ public class APIRequestHandler { if ("dictionaryItem".equalsIgnoreCase(service)) { DictionaryHandler dictionaryHandler = DictionaryHandler.getInstance(); dictionaryHandler.doDictionaryAPIPut(request, response); - return; } else { SavePolicyHandler savePolicy = SavePolicyHandler.getInstance(); savePolicy.doPolicyAPIPut(request, response); } } - public void doDelete(HttpServletRequest request, HttpServletResponse response, ONAPLoggingContext loggingContext, String apiflag) throws IOException, SQLException{ + public void doDelete(HttpServletRequest request, HttpServletResponse response, ONAPLoggingContext loggingContext, + String apiflag) throws IOException, SQLException { DeleteHandler deleteHandler = DeleteHandler.getInstance(); if ("deletePapApi".equalsIgnoreCase(apiflag)) { deleteHandler.doAPIDeleteFromPAP(request, response); - return; } else if ("deletePdpApi".equalsIgnoreCase(apiflag)) { deleteHandler.doAPIDeleteFromPDP(request, response, loggingContext); setNewGroup(deleteHandler.getDeletedGroup()); - return; } } diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/DeleteHandler.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/DeleteHandler.java index e2c348239..f71af87cc 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/DeleteHandler.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/DeleteHandler.java @@ -7,9 +7,9 @@ * 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. @@ -66,18 +66,19 @@ public class DeleteHandler { public static final String UNKNOWN = "unknown"; private static final String REGEX = "[0-9a-zA-Z._]*"; - public void doAPIDeleteFromPAP(HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException { + public void doAPIDeleteFromPAP(HttpServletRequest request, HttpServletResponse response) + throws IOException, SQLException { // get the request content into a String String json = null; java.util.Scanner scanner = new java.util.Scanner(request.getInputStream()); scanner.useDelimiter("\\A"); - json = scanner.hasNext() ? scanner.next() : ""; + json = scanner.hasNext() ? scanner.next() : ""; scanner.close(); PolicyLogger.info("JSON request from API to Delete Policy from the PAP: " + json); // convert Object sent as JSON into local object StdPAPPolicy policy = PolicyUtils.jsonStringToObject(json, StdPAPPolicy.class); String policyName = policy.getPolicyName(); - Boolean policyVersionDeleted = false; + boolean policyVersionDeleted = false; String removeXMLExtension; int currentVersion; String removeVersionExtension; @@ -96,7 +97,8 @@ public class DeleteHandler { try { jpaUtils = JPAUtils.getJPAUtilsInstance(XACMLPapServlet.getEmf()); } catch (Exception e) { - PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "XACMLPapServlet", " Could not create JPAUtils instance on the PAP"); + PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "XACMLPapServlet", + " Could not create JPAUtils instance on the PAP"); response.addHeader(ERROR, "jpautils"); response.addHeader("operation", "delete"); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); @@ -111,51 +113,55 @@ public class DeleteHandler { } EntityManager em = XACMLPapServlet.getEmf().createEntityManager(); Query policyEntityQuery = null; - try{ - if(policyName.endsWith(".xml")){ + try { + if (policyName.endsWith(".xml")) { removeXMLExtension = policyName.replace(".xml", ""); - currentVersion = Integer.parseInt(removeXMLExtension.substring(removeXMLExtension.lastIndexOf('.')+1)); + currentVersion = + Integer.parseInt(removeXMLExtension.substring(removeXMLExtension.lastIndexOf('.') + 1)); removeVersionExtension = removeXMLExtension.substring(0, removeXMLExtension.lastIndexOf('.')); boolean queryCheck = true; - if(policy.getDeleteCondition().equalsIgnoreCase("All Versions")){ - if(policyName.contains("Config_")){ + if (policy.getDeleteCondition().equalsIgnoreCase("All Versions")) { + if (policyName.contains("Config_")) { splitPolicyName = removeVersionExtension.replace(".Config_", ":Config_"); - }else if(policyName.contains("Action_")){ + } else if (policyName.contains("Action_")) { splitPolicyName = removeVersionExtension.replace(".Action_", ":Action_"); - }else if(policyName.contains("Decision_")){ + } else if (policyName.contains("Decision_")) { splitPolicyName = removeVersionExtension.replace(".Decision_", ":Decision_"); } - if(splitPolicyName != null){ + if (splitPolicyName != null) { split = splitPolicyName.split(":"); - }else{ - PolicyLogger.error(MessageCodes.ERROR_UNKNOWN + "Failed to delete the policy. Please, provide the valid policyname."); + } else { + PolicyLogger.error(MessageCodes.ERROR_UNKNOWN + + "Failed to delete the policy. Please, provide the valid policyname."); response.addHeader(ERROR, UNKNOWN); - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR ); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } - policyEntityQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.policyName LIKE :pName and p.scope=:pScope"); - }else if(policy.getDeleteCondition().equalsIgnoreCase("Current Version")) { - if(policyName.contains("Config_")){ + policyEntityQuery = em.createQuery( + "SELECT p FROM PolicyEntity p WHERE p.policyName LIKE :pName and p.scope=:pScope"); + } else if (policy.getDeleteCondition().equalsIgnoreCase("Current Version")) { + if (policyName.contains("Config_")) { splitPolicyName = policyName.replace(".Config_", ":Config_"); - }else if(policyName.contains("Action_")){ + } else if (policyName.contains("Action_")) { splitPolicyName = policyName.replace(".Action_", ":Action_"); - }else if(policyName.contains("Decision_")){ + } else if (policyName.contains("Decision_")) { splitPolicyName = policyName.replace(".Decision_", ":Decision_"); } split = splitPolicyName.split(":"); queryCheck = false; - policyEntityQuery = em.createQuery("SELECT p FROM PolicyEntity p WHERE p.policyName=:pName and p.scope=:pScope"); + policyEntityQuery = em.createQuery( + "SELECT p FROM PolicyEntity p WHERE p.policyName=:pName and p.scope=:pScope"); } - if(queryCheck){ - policyEntityQuery.setParameter("pName", "%"+split[1]+"%"); - }else{ + if (queryCheck) { + policyEntityQuery.setParameter("pName", "%" + split[1] + "%"); + } else { policyEntityQuery.setParameter("pName", split[1]); } policyEntityQuery.setParameter("pScope", split[0]); List<?> peResult = policyEntityQuery.getResultList(); - if(!peResult.isEmpty()){ + if (!peResult.isEmpty()) { Query getPolicyVersion = em.createQuery("Select p from PolicyVersion p where p.policyName=:pname"); getPolicyVersion.setParameter("pname", removeVersionExtension.replace(".", File.separator)); List<?> pvResult = getPolicyVersion.getResultList(); @@ -163,97 +169,106 @@ public class DeleteHandler { int newVersion = 0; em.getTransaction().begin(); Class.forName(papDbDriver); - con = DriverManager.getConnection(papDbUrl,papDbUser,papDbPassword); + con = DriverManager.getConnection(papDbUrl, papDbUser, papDbPassword); - if(policy.getDeleteCondition().equalsIgnoreCase("All Versions")){ + if (policy.getDeleteCondition().equalsIgnoreCase("All Versions")) { boolean groupCheck = checkPolicyGroupEntity(con, peResult); - if(!groupCheck){ - for(Object peData : peResult){ + if (!groupCheck) { + for (Object peData : peResult) { policyEntity = (PolicyEntity) peData; status = deletePolicyEntityData(em, policyEntity); } - }else{ + } else { status = POLICY_IN_PDP; } - if(status.equals(ERROR)){ - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + "Exception Occured while deleting the Entity from Database."); - response.addHeader(ERROR, UNKNOWN); - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR ); - return; - }else if(status.equals(POLICY_IN_PDP)){ - PolicyLogger.error(MessageCodes.GENERAL_WARNING + "Policy can't be deleted, it is active in PDP Groups."); - response.addHeader(ERROR, POLICY_IN_PDP); - response.setStatus(HttpServletResponse.SC_CONFLICT); - return; - }else{ - try{ - policyVersionDeleted = true; - em.remove(pVersion); - }catch(Exception e){ - logger.error(e.getMessage(),e); - policyVersionDeleted = false; - } + switch (status) { + case ERROR: + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + + "Exception Occured while deleting the Entity from Database."); + response.addHeader(ERROR, UNKNOWN); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + return; + case POLICY_IN_PDP: + PolicyLogger.error(MessageCodes.GENERAL_WARNING + + "Policy can't be deleted, it is active in PDP Groups."); + response.addHeader(ERROR, POLICY_IN_PDP); + response.setStatus(HttpServletResponse.SC_CONFLICT); + return; + default: + try { + policyVersionDeleted = true; + em.remove(pVersion); + } catch (Exception e) { + logger.error(e.getMessage(), e); + policyVersionDeleted = false; + } + break; } - }else if(policy.getDeleteCondition().equalsIgnoreCase("Current Version")){ + } else if (policy.getDeleteCondition().equalsIgnoreCase("Current Version")) { boolean groupCheck = checkPolicyGroupEntity(con, peResult); - if(!groupCheck){ + if (!groupCheck) { policyEntity = (PolicyEntity) peResult.get(0); status = deletePolicyEntityData(em, policyEntity); - }else{ + } else { status = POLICY_IN_PDP; } - if(ERROR.equals(status)){ - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + "Exception Occured while deleting the Entity from Database."); + if (ERROR.equals(status)) { + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + + "Exception Occured while deleting the Entity from Database."); response.addHeader(ERROR, UNKNOWN); - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR ); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; - }else if(POLICY_IN_PDP.equals(status)){ - PolicyLogger.error(MessageCodes.GENERAL_WARNING + "Policy can't be deleted, it is active in PDP Groups."); + } else if (POLICY_IN_PDP.equals(status)) { + PolicyLogger.error(MessageCodes.GENERAL_WARNING + + "Policy can't be deleted, it is active in PDP Groups."); response.addHeader(ERROR, POLICY_IN_PDP); response.setStatus(HttpServletResponse.SC_CONFLICT); return; - }else{ - if(currentVersion > 1){ - if(!peResult.isEmpty()){ - for(Object object : peResult){ + } else { + if (currentVersion > 1) { + if (!peResult.isEmpty()) { + for (Object object : peResult) { policyEntity = (PolicyEntity) object; String policyEntityName = policyEntity.getPolicyName().replace(".xml", ""); - int policyEntityVersion = Integer.parseInt(policyEntityName.substring(policyEntityName.lastIndexOf('.')+1)); - if(policyEntityVersion > newVersion){ - newVersion = policyEntityVersion-1; + int policyEntityVersion = Integer.parseInt( + policyEntityName.substring(policyEntityName.lastIndexOf('.') + 1)); + if (policyEntityVersion > newVersion) { + newVersion = policyEntityVersion - 1; } } } pVersion.setActiveVersion(newVersion); pVersion.setHigherVersion(newVersion); - try{ + try { policyVersionDeleted = true; em.persist(pVersion); - }catch(Exception e){ - logger.error(e.getMessage(),e); + } catch (Exception e) { + logger.error(e.getMessage(), e); policyVersionDeleted = false; } - }else{ - try{ + } else { + try { policyVersionDeleted = true; em.remove(pVersion); - }catch(Exception e){ - logger.error(e.getMessage(),e); + } catch (Exception e) { + logger.error(e.getMessage(), e); policyVersionDeleted = false; } } } } - }else{ - PolicyLogger.error(MessageCodes.ERROR_UNKNOWN + "Failed to delete the policy for an unknown reason. Check the file system and other logs for further information."); + } else { + PolicyLogger.error(MessageCodes.ERROR_UNKNOWN + + "Failed to delete the policy for an unknown reason. Check the file system and other logs" + + " for further information."); response.addHeader(ERROR, UNKNOWN); - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR ); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } } em.getTransaction().commit(); - }catch(Exception e){ + } catch (Exception e) { em.getTransaction().rollback(); PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "XACMLPapServlet", " ERROR"); response.addHeader(ERROR, "deleteDB"); @@ -261,7 +276,7 @@ public class DeleteHandler { return; } finally { em.close(); - if(con != null){ + if (con != null) { con.close(); } } @@ -270,43 +285,44 @@ public class DeleteHandler { response.setStatus(HttpServletResponse.SC_OK); response.addHeader("successMapKey", "success"); response.addHeader("operation", "delete"); - return; } else { - PolicyLogger.error(MessageCodes.ERROR_UNKNOWN + "Failed to delete the policy for an unknown reason. Check the file system and other logs for further information."); + PolicyLogger.error(MessageCodes.ERROR_UNKNOWN + + "Failed to delete the policy for an unknown reason. Check the file system and other logs for " + + "further information."); response.addHeader(ERROR, UNKNOWN); - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR ); - return; + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } } - public static String deletePolicyEntityData(EntityManager em, PolicyEntity policyEntity){ + public static String deletePolicyEntityData(EntityManager em, PolicyEntity policyEntity) { PolicyElasticSearchController controller = new PolicyElasticSearchController(); PolicyRestAdapter policyData = new PolicyRestAdapter(); String policyName = policyEntity.getPolicyName(); - try{ - if(policyName.contains("Config_")){ + try { + if (policyName.contains("Config_")) { em.remove(policyEntity.getConfigurationData()); - }else if(policyName.contains("Action_")){ + } else if (policyName.contains("Action_")) { em.remove(policyEntity.getActionBodyEntity()); } String searchPolicyName = policyEntity.getScope() + "." + policyEntity.getPolicyName(); policyData.setNewFileName(searchPolicyName); controller.deleteElk(policyData); em.remove(policyEntity); - }catch(Exception e){ - logger.error(e.getMessage(),e); + } catch (Exception e) { + logger.error(e.getMessage(), e); return ERROR; } return "success"; } - public static boolean checkPolicyGroupEntity(Connection con, List<?> peResult) throws SQLException{ - for(Object peData : peResult){ + public static boolean checkPolicyGroupEntity(Connection con, List<?> peResult) throws SQLException { + for (Object peData : peResult) { PolicyEntity policyEntity = (PolicyEntity) peData; - try(Statement st = con.createStatement(); - ResultSet rs = st.executeQuery("Select * from PolicyGroupEntity where policyid = '"+policyEntity.getPolicyId()+"'")){ + try (Statement st = con.createStatement(); + ResultSet rs = st.executeQuery( + "Select * from PolicyGroupEntity where policyid = '" + policyEntity.getPolicyId() + "'")) { boolean gEntityList = rs.next(); - if(gEntityList){ + if (gEntityList) { return true; } } @@ -314,15 +330,16 @@ public class DeleteHandler { return false; } - public void doAPIDeleteFromPDP(HttpServletRequest request, HttpServletResponse response, ONAPLoggingContext loggingContext) throws IOException { + public void doAPIDeleteFromPDP(HttpServletRequest request, HttpServletResponse response, + ONAPLoggingContext loggingContext) throws IOException { String policyName = request.getParameter("policyName"); String groupId = request.getParameter("groupId"); String responseString = null; - if(groupId != null && !groupId.matches(REGEX) ){ + if (groupId != null && !groupId.matches(REGEX)) { response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - response.addHeader("error",ERROR); + response.addHeader("error", ERROR); response.addHeader("message", "Group Id is not valid"); return; } @@ -334,7 +351,7 @@ public class DeleteHandler { try { group = XACMLPapServlet.getPAPEngine().getGroup(groupId); } catch (PAPException e) { - PolicyLogger.error("Exception occured While PUT operation is performing for PDP Group"+e); + PolicyLogger.error("Exception occured While PUT operation is performing for PDP Group" + e); } if (group == null) { String message = "Unknown groupId '" + groupId + "'."; @@ -348,7 +365,8 @@ public class DeleteHandler { } else { loggingContext.setServiceName("API:PAP.deletPolicyFromPDPGroup"); if (policyName.contains("xml")) { - PolicyLogger.debug("The full file name including the extension was provided for policyName.. continue."); + PolicyLogger + .debug("The full file name including the extension was provided for policyName.. continue."); } else { String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Invalid policyName... " + "policyName must be the full name of the file to be deleted including version and extension"; @@ -359,7 +377,7 @@ public class DeleteHandler { return; } RemoveGroupPolicy removePolicy = new RemoveGroupPolicy((StdPDPGroup) group); - PDPPolicy policy = group.getPolicy(policyName); + PDPPolicy policy = group.getPolicy(policyName); if (policy != null) { if ((policy.getId().contains("Config_MS_")) || (policy.getId().contains("BRMS_Param"))) { @@ -380,35 +398,39 @@ public class DeleteHandler { return; } } - if (responseString.equals("success")) { - loggingContext.transactionEnded(); - PolicyLogger.info("Policy successfully deleted!"); - PolicyLogger.audit("Policy successfully deleted!"); - response.setStatus(HttpServletResponse.SC_OK); - response.addHeader("successMapKey", "success"); - response.addHeader("operation", "delete"); - return; - } else if (responseString.equals("No Group")) { - String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Group update had bad input."; - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Group update had bad input."); - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.addHeader(ERROR, "groupUpdate"); - response.addHeader("message", message); - return; - } else if (responseString.equals("DB Error")) { - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW + " Error while updating group in the database"); - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.addHeader(ERROR, "deleteDB"); - return; - } else { - PolicyLogger.error(MessageCodes.ERROR_UNKNOWN + " Failed to delete the policy for an unknown reason. Check the file system and other logs for further information."); - response.addHeader(ERROR, UNKNOWN); - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR ); - return; + switch (responseString) { + case "success": + loggingContext.transactionEnded(); + PolicyLogger.info("Policy successfully deleted!"); + PolicyLogger.audit("Policy successfully deleted!"); + response.setStatus(HttpServletResponse.SC_OK); + response.addHeader("successMapKey", "success"); + response.addHeader("operation", "delete"); + break; + case "No Group": + String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Group update had bad input."; + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Group update had bad input."); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + response.addHeader(ERROR, "groupUpdate"); + response.addHeader("message", message); + break; + case "DB Error": + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW + " Error while updating group in the database"); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + response.addHeader(ERROR, "deleteDB"); + break; + default: + PolicyLogger.error(MessageCodes.ERROR_UNKNOWN + + " Failed to delete the policy for an unknown reason. Check the file system and other logs " + + "for " + + "further information."); + response.addHeader(ERROR, UNKNOWN); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + break; } } - private String deletePolicyFromPDPGroup (OnapPDPGroup group, ONAPLoggingContext loggingContext){ + private String deletePolicyFromPDPGroup(OnapPDPGroup group, ONAPLoggingContext loggingContext) { PolicyDBDaoTransaction acPutTransaction = XACMLPapServlet.getDbDaoTransaction(); String response = null; loggingContext.setServiceName("API:PAP.DeleteHandler"); @@ -416,14 +438,16 @@ public class DeleteHandler { try { existingGroup = XACMLPapServlet.getPAPEngine().getGroup(group.getId()); } catch (PAPException e1) { - PolicyLogger.error("Exception occured While Deleting Policy From PDP Group"+e1); + PolicyLogger.error("Exception occured While Deleting Policy From PDP Group" + e1); } - if (!(group instanceof StdPDPGroup) || existingGroup == null || !(group.getId().equals(existingGroup.getId()))) { + if (!(group instanceof StdPDPGroup) || existingGroup == null || + !(group.getId().equals(existingGroup.getId()))) { String existingID = null; - if(existingGroup != null){ + if (existingGroup != null) { existingID = existingGroup.getId(); } - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Group update had bad input. id=" + existingID + " objectFromJSON="+group); + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Group update had bad input. id=" + existingID + + " objectFromJSON=" + group); loggingContext.transactionEnded(); PolicyLogger.audit("Transaction Failed - See Error.log"); response = "No Group"; @@ -432,19 +456,20 @@ public class DeleteHandler { // The Path on the PAP side is not carried on the RESTful interface with the AC // (because it is local to the PAP) // so we need to fill that in before submitting the group for update - ((StdPDPGroup)group).setDirectory(((StdPDPGroup)existingGroup).getDirectory()); - try{ + ((StdPDPGroup) group).setDirectory(((StdPDPGroup) existingGroup).getDirectory()); + try { acPutTransaction.updateGroup(group, "XACMLPapServlet.doDelete"); - } catch(Exception e){ - PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", " Error while updating group in the database: " - +"group="+existingGroup.getId()); + } catch (Exception e) { + PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "XACMLPapServlet", + " Error while updating group in the database: " + + "group=" + existingGroup.getId()); response = "DB Error"; return response; } try { XACMLPapServlet.getPAPEngine().updateGroup(group); } catch (PAPException e) { - PolicyLogger.error("Exception occured While Updating PDP Groups"+e); + PolicyLogger.error("Exception occured While Updating PDP Groups" + e); response = "error in updateGroup method"; } PolicyLogger.debug("Group '" + group.getId() + "' updated"); @@ -452,11 +477,11 @@ public class DeleteHandler { // Group changed, which might include changing the policies try { newgroup = existingGroup; - } catch (Exception e) { - PolicyLogger.error("Exception occured in Group Change Method"+e); + } catch (Exception e) { + PolicyLogger.error("Exception occured in Group Change Method" + e); response = "error in groupChanged method"; } - if (response==null){ + if (response == null) { response = "success"; loggingContext.transactionEnded(); PolicyLogger.audit("Policy successfully deleted!"); @@ -466,7 +491,7 @@ public class DeleteHandler { return response; } - public OnapPDPGroup getDeletedGroup(){ + public OnapPDPGroup getDeletedGroup() { return newgroup; } @@ -476,10 +501,11 @@ public class DeleteHandler { public static DeleteHandler getInstance() { try { - Class<?> deleteHandler = Class.forName(XACMLProperties.getProperty("deletePolicy.impl.className", DeleteHandler.class.getName())); + Class<?> deleteHandler = Class.forName( + XACMLProperties.getProperty("deletePolicy.impl.className", DeleteHandler.class.getName())); return (DeleteHandler) deleteHandler.newInstance(); } catch (Exception e) { - logger.error(e.getMessage(),e); + logger.error(e.getMessage(), e); } return null; } diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/DictionaryHandlerImpl.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/DictionaryHandlerImpl.java index b90592b02..ef6092d72 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/DictionaryHandlerImpl.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/handler/DictionaryHandlerImpl.java @@ -7,9 +7,9 @@ * 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. @@ -27,7 +27,7 @@ import org.onap.policy.common.logging.eelf.PolicyLogger; import org.onap.policy.pap.xacml.rest.service.DictionaryService; import org.onap.policy.xacml.api.XACMLErrorConstants; -public class DictionaryHandlerImpl implements DictionaryHandler{ +public class DictionaryHandlerImpl implements DictionaryHandler { /* * Get Equivalent for Dictionary Services. */ @@ -36,117 +36,116 @@ public class DictionaryHandlerImpl implements DictionaryHandler{ try { DictionaryService dictionary = new DictionaryService(); switch (dictionaryType) { - case "OnapName": - dictionary.getOnapDictionary(response); - break; - case "Attribute": - dictionary.getAttributeDictionary(response); - break; - case "Action": - dictionary.getActionPolicyDictionary(response); - break; - case "BRMSParamTemplate": - dictionary.getBRMSParamDictionary(response); - break; - case "VSCLAction": - dictionary.getVSCLAction(response); - break; - case "VNFType": - dictionary.getVnfType(response); - break; - case "PEPOptions": - dictionary.getPEPOptions(response); - break; - case "Varbind": - dictionary.getVarbind(response); - break; - case "Service": - dictionary.getServiceType(response); - break; - case "Site": - dictionary.getSiteType(response); - break; - case "Settings": - dictionary.getSettingsDictionary(response); - break; - case "RainyDayTreatments": - dictionary.getRainyDayDictionary(response); - break; - case "DescriptiveScope": - dictionary.getDescriptiveDictionary(response); - break; - case "ActionList": - dictionary.getActionListDictionary(response); - break; - case "ProtocolList": - dictionary.getProtocolListDictionary(response); - break; - case "Zone": - dictionary.getZoneDictionary(response); - break; - case "SecurityZone": - dictionary.getSecurityZoneDictionary(response); - break; - case "PrefixList": - dictionary.getPrefixListDictionary(response); - break; - case "AddressGroup": - dictionary.getAddressGroupDictionary(response); - break; - case "ServiceGroup": - dictionary.getServiceGroupDictionary(response); - break; - case "ServiceList": - dictionary.getServiceListDictionary(response); - break; - case "TermList": - case "RuleList": - case "FirewallRuleList": - case "Term": - dictionary.getTermListDictionary(response); - break; - case "MicroServiceLocation": - dictionary.getMicroServiceLocationDictionary(response); - break; - case "MicroServiceConfigName": - dictionary.getMicroServiceConfigNameDictionary(response); - break; - case "DCAEUUID": - dictionary.getDCAEUUIDDictionary(response); - break; - case "MicroServiceModels": - dictionary.getMicroServiceModelsDictionary(response); - break; - case "MicroServiceDictionary": - dictionary.getMicroServiceDictionary(response); - break; - case "OptimizationModels": - dictionary.getOptimizationModelsDictionary(response); - break; - case "PolicyScopeService": - dictionary.getPSServiceDictionary(response); - break; - case "PolicyScopeResource": - dictionary.getPSResourceDictionary(response); - break; - case "PolicyScopeType": - dictionary.getPSTypeDictionary(response); - break; - case "PolicyScopeClosedLoop": - dictionary.getPSClosedLoopDictionary(response); - break; - case "GroupPolicyScopeList": - dictionary.getPSGroupScopeDictionary(response); - break; - case "RiskType": - dictionary.getRiskTypeDictionary(response); - break; - case "SafePolicyWarning": - dictionary.getSafePolicyWarningDictionary(response); - break; - default: - extendedOptions(dictionaryType, request, response, true); - return; + case "OnapName": + dictionary.getOnapDictionary(response); + break; + case "Attribute": + dictionary.getAttributeDictionary(response); + break; + case "Action": + dictionary.getActionPolicyDictionary(response); + break; + case "BRMSParamTemplate": + dictionary.getBRMSParamDictionary(response); + break; + case "VSCLAction": + dictionary.getVSCLAction(response); + break; + case "VNFType": + dictionary.getVnfType(response); + break; + case "PEPOptions": + dictionary.getPEPOptions(response); + break; + case "Varbind": + dictionary.getVarbind(response); + break; + case "Service": + dictionary.getServiceType(response); + break; + case "Site": + dictionary.getSiteType(response); + break; + case "Settings": + dictionary.getSettingsDictionary(response); + break; + case "RainyDayTreatments": + dictionary.getRainyDayDictionary(response); + break; + case "DescriptiveScope": + dictionary.getDescriptiveDictionary(response); + break; + case "ActionList": + dictionary.getActionListDictionary(response); + break; + case "ProtocolList": + dictionary.getProtocolListDictionary(response); + break; + case "Zone": + dictionary.getZoneDictionary(response); + break; + case "SecurityZone": + dictionary.getSecurityZoneDictionary(response); + break; + case "PrefixList": + dictionary.getPrefixListDictionary(response); + break; + case "AddressGroup": + dictionary.getAddressGroupDictionary(response); + break; + case "ServiceGroup": + dictionary.getServiceGroupDictionary(response); + break; + case "ServiceList": + dictionary.getServiceListDictionary(response); + break; + case "TermList": + case "RuleList": + case "FirewallRuleList": + case "Term": + dictionary.getTermListDictionary(response); + break; + case "MicroServiceLocation": + dictionary.getMicroServiceLocationDictionary(response); + break; + case "MicroServiceConfigName": + dictionary.getMicroServiceConfigNameDictionary(response); + break; + case "DCAEUUID": + dictionary.getDCAEUUIDDictionary(response); + break; + case "MicroServiceModels": + dictionary.getMicroServiceModelsDictionary(response); + break; + case "MicroServiceDictionary": + dictionary.getMicroServiceDictionary(response); + break; + case "OptimizationModels": + dictionary.getOptimizationModelsDictionary(response); + break; + case "PolicyScopeService": + dictionary.getPSServiceDictionary(response); + break; + case "PolicyScopeResource": + dictionary.getPSResourceDictionary(response); + break; + case "PolicyScopeType": + dictionary.getPSTypeDictionary(response); + break; + case "PolicyScopeClosedLoop": + dictionary.getPSClosedLoopDictionary(response); + break; + case "GroupPolicyScopeList": + dictionary.getPSGroupScopeDictionary(response); + break; + case "RiskType": + dictionary.getRiskTypeDictionary(response); + break; + case "SafePolicyWarning": + dictionary.getSafePolicyWarningDictionary(response); + break; + default: + extendedOptions(dictionaryType, request, response, true); } } catch (Exception e) { String message = XACMLErrorConstants.ERROR_DATA_ISSUE + " Error Querying the Database: " + e.getMessage(); @@ -154,18 +153,19 @@ public class DictionaryHandlerImpl implements DictionaryHandler{ response.setStatus(HttpServletResponse.SC_BAD_REQUEST); response.addHeader("error", "dictionaryDBQuery"); response.addHeader("error", message); - return; } } /** * Can be used to extend the services. - * + * <p> * getflag=true indicates Get Request. * getflag=false indicates Put Request. + * * @return */ - public String extendedOptions(String dictionaryType, HttpServletRequest request, HttpServletResponse response, boolean getflag) { + public String extendedOptions(String dictionaryType, HttpServletRequest request, HttpServletResponse response, + boolean getflag) { // Default code String message = XACMLErrorConstants.ERROR_DATA_ISSUE + " Invalid Dictionary in Request."; PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, "DictionaryHandler", " Invalid Dictionary in Request."); @@ -182,121 +182,121 @@ public class DictionaryHandlerImpl implements DictionaryHandler{ try { DictionaryService dictionary = new DictionaryService(); switch (dictionaryType) { - case "OnapName": - result = dictionary.saveOnapDictionary(request, response); - break; - case "Attribute": - result = dictionary.saveAttributeDictionary(request, response); - break; - case "Action": - result = dictionary.saveActionPolicyDictionary(request, response); - break; - case "BRMSParamTemplate": - result = dictionary.saveBRMSParamDictionary(request, response); - break; - case "VSCLAction": - result = dictionary.saveVSCLAction(request, response); - break; - case "VNFType": - result = dictionary.saveVnfType(request, response); - break; - case "PEPOptions": - result = dictionary.savePEPOptions(request, response); - break; - case "Varbind": - result = dictionary.saveVarbind(request, response); - break; - case "Service": - result = dictionary.saveServiceType(request, response); - break; - case "Site": - result = dictionary.saveSiteType(request, response); - break; - case "Settings": - result = dictionary.saveSettingsDictionary(request, response); - break; - case "RainyDayTreatments": - result = dictionary.saveRainyDayDictionary(request, response); - break; - case "DescriptiveScope": - result = dictionary.saveDescriptiveDictionary(request, response); - break; - case "ActionList": - result = dictionary.saveActionListDictionary(request, response); - break; - case "ProtocolList": - result = dictionary.saveProtocolListDictionary(request, response); - break; - case "Zone": - result = dictionary.saveZoneDictionary(request, response); - break; - case "SecurityZone": - result = dictionary.saveSecurityZoneDictionary(request, response); - break; - case "PrefixList": - result = dictionary.savePrefixListDictionary(request, response); - break; - case "AddressGroup": - result = dictionary.saveAddressGroupDictionary(request, response); - break; - case "ServiceGroup": - result = dictionary.saveServiceGroupDictionary(request, response); - break; - case "ServiceList": - result = dictionary.saveServiceListDictionary(request, response); - break; - case "TermList": - case "RuleList": - case "FirewallRuleList": - case "Term": - result = dictionary.saveTermListDictionary(request, response); - break; - case "MicroServiceLocation": - result = dictionary.saveMicroServiceLocationDictionary(request, response); - break; - case "MicroServiceConfigName": - result = dictionary.saveMicroServiceConfigNameDictionary(request, response); - break; - case "DCAEUUID": - result = dictionary.saveDCAEUUIDDictionary(request, response); - break; - case "MicroServiceModels": - result = dictionary.saveMicroServiceModelsDictionary(request, response); - break; - case "MicroServiceDictionary": - result = dictionary.saveMicroServiceDictionary(request, response); - break; - case "OptimizationModels": - result = dictionary.saveOptimizationModelsDictionary(request, response); - break; - case "PolicyScopeService": - result = dictionary.savePSServiceDictionary(request, response); - break; - case "PolicyScopeResource": - result = dictionary.savePSResourceDictionary(request, response); - break; - case "PolicyScopeType": - result = dictionary.savePSTypeDictionary(request, response); - break; - case "PolicyScopeClosedLoop": - result = dictionary.savePSClosedLoopDictionary(request, response); - break; - case "GroupPolicyScopeList": - result = dictionary.savePSGroupScopeDictionary(request, response); - break; - case "RiskType": - result = dictionary.saveRiskTypeDictionary(request, response); - break; - case "SafePolicyWarning": - result = dictionary.saveSafePolicyWarningDictionary(request, response); - break; - default: - result = extendedOptions(dictionaryType, request, response, false); - if(result==null){ - return; - }else{ - break; - } + case "OnapName": + result = dictionary.saveOnapDictionary(request, response); + break; + case "Attribute": + result = dictionary.saveAttributeDictionary(request, response); + break; + case "Action": + result = dictionary.saveActionPolicyDictionary(request, response); + break; + case "BRMSParamTemplate": + result = dictionary.saveBRMSParamDictionary(request, response); + break; + case "VSCLAction": + result = dictionary.saveVSCLAction(request, response); + break; + case "VNFType": + result = dictionary.saveVnfType(request, response); + break; + case "PEPOptions": + result = dictionary.savePEPOptions(request, response); + break; + case "Varbind": + result = dictionary.saveVarbind(request, response); + break; + case "Service": + result = dictionary.saveServiceType(request, response); + break; + case "Site": + result = dictionary.saveSiteType(request, response); + break; + case "Settings": + result = dictionary.saveSettingsDictionary(request, response); + break; + case "RainyDayTreatments": + result = dictionary.saveRainyDayDictionary(request, response); + break; + case "DescriptiveScope": + result = dictionary.saveDescriptiveDictionary(request, response); + break; + case "ActionList": + result = dictionary.saveActionListDictionary(request, response); + break; + case "ProtocolList": + result = dictionary.saveProtocolListDictionary(request, response); + break; + case "Zone": + result = dictionary.saveZoneDictionary(request, response); + break; + case "SecurityZone": + result = dictionary.saveSecurityZoneDictionary(request, response); + break; + case "PrefixList": + result = dictionary.savePrefixListDictionary(request, response); + break; + case "AddressGroup": + result = dictionary.saveAddressGroupDictionary(request, response); + break; + case "ServiceGroup": + result = dictionary.saveServiceGroupDictionary(request, response); + break; + case "ServiceList": + result = dictionary.saveServiceListDictionary(request, response); + break; + case "TermList": + case "RuleList": + case "FirewallRuleList": + case "Term": + result = dictionary.saveTermListDictionary(request, response); + break; + case "MicroServiceLocation": + result = dictionary.saveMicroServiceLocationDictionary(request, response); + break; + case "MicroServiceConfigName": + result = dictionary.saveMicroServiceConfigNameDictionary(request, response); + break; + case "DCAEUUID": + result = dictionary.saveDCAEUUIDDictionary(request, response); + break; + case "MicroServiceModels": + result = dictionary.saveMicroServiceModelsDictionary(request, response); + break; + case "MicroServiceDictionary": + result = dictionary.saveMicroServiceDictionary(request, response); + break; + case "OptimizationModels": + result = dictionary.saveOptimizationModelsDictionary(request, response); + break; + case "PolicyScopeService": + result = dictionary.savePSServiceDictionary(request, response); + break; + case "PolicyScopeResource": + result = dictionary.savePSResourceDictionary(request, response); + break; + case "PolicyScopeType": + result = dictionary.savePSTypeDictionary(request, response); + break; + case "PolicyScopeClosedLoop": + result = dictionary.savePSClosedLoopDictionary(request, response); + break; + case "GroupPolicyScopeList": + result = dictionary.savePSGroupScopeDictionary(request, response); + break; + case "RiskType": + result = dictionary.saveRiskTypeDictionary(request, response); + break; + case "SafePolicyWarning": + result = dictionary.saveSafePolicyWarningDictionary(request, response); + break; + default: + result = extendedOptions(dictionaryType, request, response, false); + if (result == null) { + return; + } else { + break; + } } } catch (Exception e) { String message = XACMLErrorConstants.ERROR_DATA_ISSUE + " Error Updating the Database: " + e.getMessage(); @@ -309,7 +309,7 @@ public class DictionaryHandlerImpl implements DictionaryHandler{ response.setStatus(HttpServletResponse.SC_OK); response.addHeader("successMapKey", "success"); if (operation.equalsIgnoreCase("update")) { - response.addHeader("operation", "updateDictionary"); + response.addHeader("operation", "updateDictionary"); } else { response.addHeader("operation", "createDictionary"); } diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/service/MetricService.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/service/MetricService.java index 864201cfe..66fb9acfc 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/service/MetricService.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/service/MetricService.java @@ -7,9 +7,9 @@ * 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. @@ -35,18 +35,20 @@ import org.onap.policy.xacml.api.pap.OnapPDPGroup; import com.att.research.xacml.api.pap.PDPPolicy; public class MetricService { - private static String errorMsg = "error"; + private static String errorMsg = "error"; + /* * This is a private constructor * */ - private MetricService(){ + private MetricService() { } + public static void doGetPolicyMetrics(HttpServletResponse response) { Set<OnapPDPGroup> groups = new HashSet<>(); try { //get the count of policies on the PDP - if(XACMLPapServlet.getPAPEngine()!=null){ + if (XACMLPapServlet.getPAPEngine() != null) { groups = XACMLPapServlet.getPAPEngine().getOnapPDPGroups(); } int pdpCount = 0; @@ -56,11 +58,13 @@ public class MetricService { } //get the count of policies on the PAP EntityManager em = null; - if(XACMLPapServlet.getEmf()!=null){ + if (XACMLPapServlet.getEmf() != null) { em = XACMLPapServlet.getEmf().createEntityManager(); } - if (em==null){ - PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Error creating entity manager with persistence unit: " + XACMLPapServlet.getPersistenceUnit()); + if (em == null) { + PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + + " Error creating entity manager with persistence unit: " + + XACMLPapServlet.getPersistenceUnit()); response.setStatus(HttpServletResponse.SC_BAD_REQUEST); response.addHeader(errorMsg, "Error creating entity manager with persistence unit"); return; @@ -73,25 +77,26 @@ public class MetricService { json.put("papCount", papCount); json.put("pdpCount", pdpCount); json.put("totalCount", totalCount); - if (pdpCount>0 && papCount>0 && totalCount>0) { - PolicyLogger.info("Metrics have been found on the Policy Engine for the number of policies on the PAP and PDP."); + if (pdpCount > 0 && papCount > 0 && totalCount > 0) { + PolicyLogger + .info("Metrics have been found on the Policy Engine for the number of policies on the PAP and" + + " PDP."); response.setStatus(HttpServletResponse.SC_OK); response.addHeader("successMapKey", "success"); response.addHeader("operation", "getMetrics"); - response.addHeader("metrics", json.toString() ); - return; - }else{ - String message = "The policy count on the PAP and PDP is 0. Please check the database and file system to correct this error."; + response.addHeader("metrics", json.toString()); + } else { + String message = + "The policy count on the PAP and PDP is 0. Please check the database and file system to " + + "correct this error."; response.setStatus(HttpServletResponse.SC_BAD_REQUEST); response.addHeader(errorMsg, message); - return; } } catch (Exception e) { String message = XACMLErrorConstants.ERROR_DATA_ISSUE + " Error Querying the Database: " + e.getMessage(); PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, e, "XACMLPapServlet", " Error Querying the Database."); response.setStatus(HttpServletResponse.SC_BAD_REQUEST); response.addHeader(errorMsg, message); - return; } } diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/restAuth/CheckPDP.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/restAuth/CheckPDP.java index 28207f29d..cddcb2a4c 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/restAuth/CheckPDP.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/restAuth/CheckPDP.java @@ -34,6 +34,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Objects; import java.util.Properties; import org.onap.policy.common.logging.eelf.MessageCodes; @@ -91,7 +92,7 @@ public class CheckPDP { // Check if File is updated recently else { newModified = pdpPath.toFile().lastModified(); - if (newModified != oldModified) { + if (!Objects.equals(newModified, oldModified)) { // File has been updated. readProps(); } |