Format ONAP-XACML and add JUnit
[policy/engine.git] / ONAP-XACML / src / main / java / org / onap / policy / xacml / std / pap / StdPDPPolicy.java
index 79e41f8..5288435 100644 (file)
@@ -2,14 +2,15 @@
  * ============LICENSE_START=======================================================
  * ONAP-XACML
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Modified Copyright (C) 2018 Samsung Electronics Co., Ltd.
  * ================================================================================
  * 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.
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.policy.xacml.std.pap;
 
-import org.onap.policy.common.logging.eelf.PolicyLogger;
+import com.att.research.xacml.api.pap.PAPException;
+import com.att.research.xacml.api.pap.PDPPolicy;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.google.common.base.Splitter;
+import com.google.common.collect.Lists;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -35,333 +41,360 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.onap.policy.common.logging.eelf.PolicyLogger;
 import org.onap.policy.xacml.util.XACMLPolicyScanner;
 
-import com.att.research.xacml.api.pap.PAPException;
-import com.att.research.xacml.api.pap.PDPPolicy;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.google.common.base.Splitter;
-import com.google.common.collect.Lists;
+public class StdPDPPolicy implements PDPPolicy, Serializable {
+    private static final long serialVersionUID = 1L;
+    private static Log logger = LogFactory.getLog(StdPDPPolicy.class);
 
+    private String id = null;
+
+    private String name = null;
+
+    private String policyId = null;
+
+    private String description = null;
+
+    private int[] version = null;
+
+    private boolean isRoot = false;
+
+    private boolean isValid = false;
+
+    private URI location = null;
+
+    public StdPDPPolicy() {
+        //
+        // Methods needed for JSON Deserialization
+        //
+    }
+
+    public StdPDPPolicy(String id, boolean isRoot) {
+        this.id = id;
+        this.isRoot = isRoot;
+    }
+
+    public StdPDPPolicy(String id, boolean isRoot, String name) {
+        this(id, isRoot);
+        this.name = name;
+    }
+
+    /**
+     * StdPDPPolicy.
+     *
+     * @param id String
+     * @param isRoot boolean
+     * @param name String
+     * @param location URI
+     * @throws IOException IOException
+     */
+    public StdPDPPolicy(String id, boolean isRoot, String name, URI location) throws IOException {
+        this(id, isRoot);
+        this.name = name;
+        this.location = location;
+
+        //
+        // Read the policy data
+        //
+        String theID = this.readPolicyData();
+
+        if (this.id == null) {
+            logger.debug("id is null so we are calling readPolicyData() to get the policyID");
+            this.id = theID;
+        }
+
+        logger.debug("The final outcome of the constructor returned the following:  id = " + id + ", location = "
+                + location + ", name = " + name);
+
+    }
+
+    /**
+     * StdPDPPolicy constructor.
+     *
+     * @param stdPDPPolicyParams StdPDPPolicyParams
+     * @throws IOException IOException
+     */
+    public StdPDPPolicy(StdPDPPolicyParams stdPDPPolicyParams) throws IOException {
+        this(stdPDPPolicyParams.getId(), stdPDPPolicyParams.isRoot());
+        this.name = stdPDPPolicyParams.getName();
+        this.location = stdPDPPolicyParams.getLocation();
+        this.policyId = stdPDPPolicyParams.getPolicyId();
+        this.description = stdPDPPolicyParams.getDescription();
+        this.version = versionStringToArray(stdPDPPolicyParams.getVersion());
+        this.isValid = stdPDPPolicyParams.isValid();
+
+        logger.debug("The final outcome of the constructor returned the following:  id = " + stdPDPPolicyParams.getId()
+                + ", location = " + stdPDPPolicyParams.getLocation() + ", name = " + stdPDPPolicyParams.getName()
+                + ", policyId = " + stdPDPPolicyParams.getPolicyId() + ", description = "
+                + stdPDPPolicyParams.getDescription() + ", Version = " + stdPDPPolicyParams.getVersion());
+
+    }
+
+    /**
+     * StdPDPPolicy.
+     *
+     * @param id String
+     * @param isRoot boolean
+     * @param name String
+     * @param location URI
+     * @param isFromAPI boolean
+     * @throws IOException IOException
+     */
+    public StdPDPPolicy(String id, boolean isRoot, String name, URI location, boolean isFromAPI) throws IOException {
+        this(id, isRoot);
+        this.name = name;
+        this.location = location;
+        this.isValid = isFromAPI;
+
+        logger.debug("The final outcome of the constructor returned the following:  id = " + id + ", location = "
+                + location + ", name = " + name);
+
+    }
+
+    /**
+     * StdPDPPolicy.
+     *
+     * @param id String
+     * @param isRoot boolean
+     * @param location URI
+     * @param properties boolean
+     * @throws IOException IOException
+     */
+    public StdPDPPolicy(String id, boolean isRoot, URI location, Properties properties) throws IOException {
+        this(id, isRoot);
+        this.location = location;
+        //
+        // Read the policy data
+        //
+        this.readPolicyData();
+        //
+        // See if there's a name
+        //
+        for (Object key : properties.keySet()) {
+            if (key.toString().equals(id + ".name")) {
+                this.name = properties.getProperty(key.toString());
+                break;
+            }
+        }
+    }
+
+    private String readPolicyData() throws IOException {
+        //
+        // Extract XACML policy information
+        //
+        URL url = this.location.toURL();
+        Object rootElement = XACMLPolicyScanner.readPolicy(url.openStream());
+        if (rootElement == null || (!(rootElement instanceof PolicySetType) && !(rootElement instanceof PolicyType))) {
+            logger.warn("No root policy element in URI: " + this.location.toString() + " : " + rootElement);
+            this.isValid = false;
+        } else {
+            this.version = versionStringToArray(XACMLPolicyScanner.getVersion(rootElement));
+            if (rootElement instanceof PolicySetType) {
+                this.policyId = ((PolicySetType) rootElement).getPolicySetId();
+                this.description = ((PolicySetType) rootElement).getDescription();
+                this.isValid = true;
+                this.version = versionStringToArray(((PolicySetType) rootElement).getVersion());
+            } else if (rootElement instanceof PolicyType) {
+                this.policyId = ((PolicyType) rootElement).getPolicyId();
+                this.description = ((PolicyType) rootElement).getDescription();
+                this.version = versionStringToArray(((PolicyType) rootElement).getVersion());
+                this.isValid = true;
+            } else {
+                PolicyLogger.error("Unknown root element: " + rootElement.getClass().getCanonicalName());
+            }
+        }
+        if (this.policyId != null) {
+            ArrayList<String> foo = Lists.newArrayList(Splitter.on(':').split(this.policyId));
+            if (!foo.isEmpty()) {
+                return foo.get(foo.size() - 1);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String getPolicyId() {
+        return this.policyId;
+    }
+
+    @Override
+    public String getDescription() {
+        return this.description;
+    }
+
+    @Override
+    public String getVersion() {
+        return versionArrayToString(this.version);
+    }
+
+    @Override
+    @JsonIgnore
+    public int[] getVersionInts() {
+        return version;
+    }
+
+    @Override
+    public boolean isRoot() {
+        return this.isRoot;
+    }
+
+    @Override
+    public boolean isValid() {
+        return this.isValid;
+    }
+
+    @Override
+    @JsonIgnore
+    public InputStream getStream() throws PAPException, IOException {
+        try {
+            if (this.location != null) {
+                URL url = this.location.toURL();
+                return url.openStream();
+            }
+            return null;
+        } catch (FileNotFoundException e) {
+            throw new PAPException(e);
+        }
+    }
+
+    @Override
+    public URI getLocation() throws PAPException {
+        return this.location;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((id == null) ? 0 : id.hashCode());
+        result = prime * result + ((policyId == null) ? 0 : policyId.hashCode());
+        result = prime * result;
+        if (version != null) {
+            for (int i = 0; i < version.length; i++) {
+                result += version[i];
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        StdPDPPolicy other = (StdPDPPolicy) obj;
+        if (id == null) {
+            if (other.id != null) {
+                return false;
+            }
+        } else if (!id.equals(other.id)) {
+            return false;
+        }
+        if (policyId == null) {
+            if (other.policyId != null) {
+                return false;
+            }
+        } else if (!policyId.equals(other.policyId)) {
+            return false;
+        }
+        if (version != other.version) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "StdPDPPolicy [id=" + id + ", name=" + name + ", policyId=" + policyId + ", description=" + description
+                + ", version=" + this.getVersion() + ", isRoot=" + isRoot + ", isValid=" + isValid + ", location="
+                + location + "]";
+    }
+
+    /**
+     * Given a version string consisting of integers with dots between them, convert it into an array of ints.
+     *
+     * @param version String
+     * @return int array
+     */
+    public static int[] versionStringToArray(String version) {
+        if (version == null || version.length() == 0) {
+            return new int[0];
+        }
+        String[] stringArray = version.split("\\.");
+        int[] resultArray = new int[stringArray.length];
+        for (int i = 0; i < stringArray.length; i++) {
+            resultArray[i] = Integer.parseInt(stringArray[i]);
+        }
+        return resultArray;
+    }
+
+    /**
+     * Given an array representing a version, create the corresponding dot-separated string.
+     *
+     * @param array int array
+     * @return String
+     */
+    public static String versionArrayToString(int[] array) {
+        if (array == null || array.length == 0) {
+            return "";
+        }
+        String versionString = "";
+        if (array.length > 0) {
+            versionString = "" + Integer.toString(array[0]);
+            for (int i = 1; i < array.length; i++) {
+                versionString += "." + Integer.toString(array[i]);
+            }
+        }
+        return versionString;
+    }
+
+    public void setPolicyId(String policyId) {
+        this.policyId = policyId;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public void setVersion(String version) {
+        this.version = versionStringToArray(version);
+    }
+
+    public void setRoot(boolean isRoot) {
+        this.isRoot = isRoot;
+    }
+
+    public void setValid(boolean isValid) {
+        this.isValid = isValid;
+    }
+
+    public void setLocation(URI location) {
+        this.location = location;
+    }
 
-public class StdPDPPolicy implements PDPPolicy, Serializable {
-       private static final long serialVersionUID = 1L;
-       private static Log      logger  = LogFactory.getLog(StdPDPPolicy.class);
-       
-       private String id = null;
-       
-       private String name = null;
-
-       private String policyId = null;
-       
-       private String description = null;
-       
-       private int[]   version = null;
-
-       private boolean isRoot = false;
-       
-       private boolean isValid = false;
-       
-       private URI location = null;
-       
-
-       public StdPDPPolicy(String id, boolean isRoot) {
-               this.id = id;
-               this.isRoot = isRoot;
-       }
-
-       public StdPDPPolicy(String id, boolean isRoot, String name) {
-               this(id, isRoot);
-               this.name = name;
-       }
-
-       
-       public StdPDPPolicy(String id, boolean isRoot, String name, URI location) throws IOException {
-               this(id, isRoot);
-               this.name = name;
-               this.location = location;
-               
-               //
-               // Read the policy data
-               //              
-               String theID = this.readPolicyData();
-
-               if (this.id == null) {
-                       logger.debug("id is null so we are calling readPolicyData() to get the policyID");
-                       this.id = theID;
-               }
-               
-               logger.debug("The final outcome of the constructor returned the following:  id = " + id + 
-                                               ", location = " + location + ", name = " + name);
-               
-       }
-       
-       public StdPDPPolicy(String id, boolean isRoot, String name, URI location, boolean isValid, String policyId, 
-                                                       String description, String version) throws IOException {
-               this(id, isRoot);
-               this.name = name;
-               this.location = location;
-               this.policyId = policyId;
-               this.description = description;
-               this.version = versionStringToArray(version);
-               this.isValid = isValid;
-               
-               logger.debug("The final outcome of the constructor returned the following:  id = " + id + 
-                                               ", location = " + location + ", name = " + name + ", policyId = " + policyId +
-                                                       ", description = " + description + ", Version = " + version);
-               
-       }
-       
-       public StdPDPPolicy(String id, boolean isRoot, String name, URI location, boolean isFromAPI) throws IOException {
-               this(id, isRoot);
-               this.name = name;
-               this.location = location;
-               this.isValid = isFromAPI;
-               
-               logger.debug("The final outcome of the constructor returned the following:  id = " + id + 
-                                               ", location = " + location + ", name = " + name);
-               
-       }
-
-       public StdPDPPolicy(String id, boolean isRoot, URI location, Properties properties) throws IOException {
-               this(id, isRoot);
-               this.location = location;
-               //
-               // Read the policy data
-               //
-               this.readPolicyData();
-               //
-               // See if there's a name
-               //
-               for (Object key : properties.keySet()) {
-                       if (key.toString().equals(id + ".name")) {
-                               this.name = properties.getProperty(key.toString());
-                               break;
-                       }
-               }
-       }
-       
-       
-       private String readPolicyData() throws IOException {
-               //
-               // Extract XACML policy information
-               //
-               URL url = this.location.toURL();
-               Object rootElement = XACMLPolicyScanner.readPolicy(url.openStream());
-               if (rootElement == null ||
-                       (
-                               ! (rootElement instanceof PolicySetType) &&
-                               ! (rootElement instanceof PolicyType)
-                       )       ) {
-                       logger.warn("No root policy element in URI: " + this.location.toString() + " : " + rootElement);
-                       this.isValid = false;
-               } else {
-                       this.version = versionStringToArray(XACMLPolicyScanner.getVersion(rootElement));
-                       if (rootElement instanceof PolicySetType) {
-                               this.policyId = ((PolicySetType)rootElement).getPolicySetId();
-                               this.description = ((PolicySetType)rootElement).getDescription();
-                               this.isValid = true;
-                               this.version = versionStringToArray(((PolicySetType)rootElement).getVersion());
-                       } else if (rootElement instanceof PolicyType) {
-                               this.policyId = ((PolicyType)rootElement).getPolicyId();
-                               this.description = ((PolicyType)rootElement).getDescription();
-                               this.version = versionStringToArray(((PolicyType)rootElement).getVersion());
-                               this.isValid = true;
-                       } else {
-                               PolicyLogger.error("Unknown root element: " + rootElement.getClass().getCanonicalName());
-                       }
-               }
-               if (this.policyId != null) {
-                       ArrayList<String> foo = Lists.newArrayList(Splitter.on(':').split(this.policyId));
-                       if (foo.isEmpty() == false) {
-                               return foo.get(foo.size() - 1);
-                       }
-               }
-               return null;
-       }
-       
-       @Override
-       public String getId() {
-               return id;
-       }
-
-       public void setId(String id) {
-               this.id = id;
-       }
-
-       @Override
-       public String getName() {
-               return this.name;
-       }
-       
-       public void setName(String name) {
-               this.name = name;
-       }
-
-       @Override
-       public String getPolicyId() {
-               return this.policyId;
-       }
-       
-       @Override
-       public String getDescription() {
-               return this.description;
-       }
-       
-       @Override
-       public String getVersion() {
-               return versionArrayToString(this.version);
-       }
-       
-       @Override
-       @JsonIgnore
-       public int[] getVersionInts() {
-               return version;
-       }
-
-       @Override
-       public boolean isRoot() {
-               return this.isRoot;
-       }
-
-       @Override
-       public boolean isValid()
-       {
-               return this.isValid;
-       }
-
-       @Override
-       @JsonIgnore
-       public InputStream getStream() throws PAPException, IOException {
-               try {
-                       if (this.location != null) {
-                               URL url = this.location.toURL();
-                               return url.openStream();
-                       }
-                       return null;
-               } catch (FileNotFoundException e) {
-                       throw new PAPException(e);
-               }
-       }
-
-       @Override
-       public URI getLocation() throws PAPException {
-               return this.location;
-       }
-
-       @Override
-       public int hashCode() {
-               final int prime = 31;
-               int result = 1;
-               result = prime * result + ((id == null) ? 0 : id.hashCode());
-               result = prime * result
-                               + ((policyId == null) ? 0 : policyId.hashCode());
-               result = prime * result;
-               if (version != null) {
-                       for (int i = 0; i < version.length; i++) {
-                               result += version[i];
-                       }
-               }
-               return result;
-       }
-
-       @Override
-       public boolean equals(Object obj) {
-               if (this == obj)
-                       return true;
-               if (obj == null)
-                       return false;
-               if (getClass() != obj.getClass())
-                       return false;
-               StdPDPPolicy other = (StdPDPPolicy) obj;
-               if (id == null) {
-                       if (other.id != null)
-                               return false;
-               } else if (!id.equals(other.id))
-                       return false;
-               if (policyId == null) {
-                       if (other.policyId != null)
-                               return false;
-               } else if (!policyId.equals(other.policyId))
-                       return false;
-               if (version != other.version)
-                       return false;
-               return true;
-       }
-
-       @Override
-       public String toString() {
-               return "StdPDPPolicy [id=" + id + ", name=" + name + ", policyId="
-                               + policyId + ", description=" + description + ", version="
-                               + this.getVersion() + ", isRoot=" + isRoot + ", isValid=" + isValid
-                               + ", location=" + location + "]";
-       }
-       
-       
-       /**
-        * Given a version string consisting of integers with dots between them, convert it into an array of ints.
-        * 
-        * @param version
-        * @return
-        * @throws NumberFormatException
-        */
-       public static int[] versionStringToArray(String version) throws NumberFormatException {
-               if (version == null || version.length() == 0) {
-                       return new int[0];
-               }
-               String[] stringArray = version.split("\\.");
-               int[] resultArray = new int[stringArray.length];
-               for (int i = 0; i < stringArray.length; i++) {
-                       resultArray[i] = Integer.parseInt(stringArray[i]);
-               }
-               return resultArray;
-       }
-       
-       /**
-        * Given an array representing a version, create the corresponding dot-separated string.
-        * 
-        * @param array
-        * @return
-        */
-       public static String versionArrayToString(int[] array) {
-               if (array == null || array.length == 0) {
-                       return "";
-               }
-               String versionString = "";
-               if (array.length > 0) {
-                       versionString = "" + Integer.toString(array[0]);
-                       for (int i = 1; i < array.length; i++) {
-                               versionString += "." + Integer.toString(array[i]);
-                       }
-               }
-               return versionString;
-       }
-       
-
-       
-       public StdPDPPolicy() {
-               //
-               // Methods needed for JSON Deserialization
-               //
-       }
-       
-       public void setPolicyId(String policyId) {
-               this.policyId = policyId;
-       }
-       public void setDescription(String description) {
-               this.description = description;
-       }
-       public void setVersion(String version) {
-               this.version = versionStringToArray(version);
-       }
-       public void setRoot(boolean isRoot) {
-               this.isRoot = isRoot;
-       }
-       public void setValid(boolean isValid) {
-               this.isValid = isValid;
-       }
-       public void setLocation(URI location) {
-               this.location = location;
-       }
-       
 }