You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by pe...@apache.org on 2010/03/29 03:22:02 UTC

svn commit: r928558 - /incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/PolicyEntry.java

Author: peter_firmstone
Date: Mon Mar 29 01:22:02 2010
New Revision: 928558

URL: http://svn.apache.org/viewvc?rev=928558&view=rev
Log:
Relates to River-334  PolicyEntry refactoring

Modified:
    incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/PolicyEntry.java

Modified: incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/PolicyEntry.java
URL: http://svn.apache.org/viewvc/incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/PolicyEntry.java?rev=928558&r1=928557&r2=928558&view=diff
==============================================================================
--- incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/PolicyEntry.java (original)
+++ incubator/river/jtsk/trunk/src/org/apache/river/security/policy/util/PolicyEntry.java Mon Mar 29 01:22:02 2010
@@ -67,22 +67,27 @@ public class PolicyEntry {
             Collection<? extends Permission> permissions) {
         this.cs = (cs != null) ? normalizeCodeSource(cs) : null;
         if ( prs == null || prs.isEmpty()) {
-            this.principals = null;
+            this.principals = new ArrayList<Principal>(0);
         }else{
-            this.principals = new ArrayList<Principal>();
+            this.principals = new ArrayList<Principal>(prs.size());
             this.principals.addAll(prs);
         }
         if (permissions == null || permissions.isEmpty()) {
-            this.permissions = null;
+            Set<Permission> perm = new HashSet<Permission>(0);
+            this.permissions = Collections.unmodifiableCollection(perm);
         }else{
-            Set<Permission> perm = new HashSet<Permission>();
+            Set<Permission> perm = new HashSet<Permission>(permissions.size());
             perm.addAll(permissions);
             this.permissions = Collections.unmodifiableCollection(perm);
         }
         /* Effectively immutable, this will make any hash this is contained in perform.
          * May need to consider Serializable for this class yet, we'll see.
          */ 
+        if (this.cs == null){
+            hashcode = (principals.hashCode() + this.permissions.hashCode())/2;
+        } else {
         hashcode = (this.cs.hashCode() + principals.hashCode() + this.permissions.hashCode())/3;
+        }
     }
 
     /**
@@ -125,7 +130,7 @@ public class PolicyEntry {
      */
     public boolean impliesPrincipals(Principal[] prs) {
        // return PolicyUtils.matchSubset(principals, prs);
-        if ( principals == null || principals.isEmpty()) return true;
+        if ( principals.isEmpty()) return true;
         if ( prs == null || prs.length == 0 ) return false;
         List<Principal> princp = Arrays.asList(prs);
         return princp.containsAll(principals);      
@@ -143,7 +148,7 @@ public class PolicyEntry {
      * Returns true if this PolicyEntry defines no Permissions, false otherwise.
      */
     public boolean isVoid() {
-        return permissions == null || permissions.size() == 0;
+        return permissions.size() == 0;
     }
     
     @Override
@@ -151,7 +156,7 @@ public class PolicyEntry {
         if (this == o) return true;
         if ( !(o instanceof PolicyEntry)) return false;
         PolicyEntry pe = (PolicyEntry) o;
-        if (cs.equals(pe.cs) && principals.equals(pe.principals) 
+        if ( (cs == pe.cs || cs.equals(pe.cs)) && principals.equals(pe.principals) 
                 && permissions.equals(pe.permissions) ) return true;
         return false;
     }