Author: psharples
Date: Fri Jan 27 12:39:14 2012
New Revision: 1236658

URL: http://svn.apache.org/viewvc?rev=1236658&view=rev
Log:
Fix for where a single policy could have 2 entries (one defining ALLOW and one 
defining DENY).  See WOOKIE-305.

Modified:
    incubator/wookie/trunk/src/org/apache/wookie/proxy/Policies.java
    incubator/wookie/trunk/src/org/apache/wookie/proxy/Policy.java

Modified: incubator/wookie/trunk/src/org/apache/wookie/proxy/Policies.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/proxy/Policies.java?rev=1236658&r1=1236657&r2=1236658&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/proxy/Policies.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/proxy/Policies.java Fri Jan 27 
12:39:14 2012
@@ -28,6 +28,7 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;
 import org.apache.commons.lang.ArrayUtils;
+import org.apache.log4j.Logger;
 
 /**
  * Policies management class
@@ -44,6 +45,7 @@ import org.apache.commons.lang.ArrayUtil
  */
 public class Policies {
   
+  static Logger _logger = Logger.getLogger(Policies.class.getName());  
   private  MultiValueMap policies;
   private  PropertiesConfiguration properties;
   private  FileChangedReloadingStrategy reloader = new 
FileChangedReloadingStrategy();
@@ -94,7 +96,7 @@ public class Policies {
         try {
           addPolicyToCollection(key+" "+entries[i]);
         } catch (Exception e) {
-          // TODO LOG AN ERROR
+          _logger.error("Error loading Policies from file:", e);
         }
       }
     }
@@ -194,8 +196,12 @@ public class Policies {
   private boolean addPolicyToCollection(Policy policy){
     @SuppressWarnings("unchecked")
     Collection<Policy> existingPolicies = (Collection<Policy>) 
policies.get(policy.getScope());
-    if (existingPolicies == null || !existingPolicies.contains(policy)){  
-      
+    if (existingPolicies == null){
+      policies.put(policy.getScope(), policy);
+      return true;
+    }
+    
+    if(!existingPolicies.contains(policy)){        
       //
       // Add the policy
       //
@@ -203,14 +209,27 @@ public class Policies {
       return true;
       
     } else {
-      
-      //
-      // Duplicate of existing policy, so don't add it
-      //
+      // Update the policy
+      existingPolicies.remove(policy);
+      policies.remove(policy.getScope());
+      for (Policy match: existingPolicies){
+        policies.put(match.getScope(), match);
+      }
+      policies.put(policy.getScope(), policy);      
+      properties.clearProperty(policy.getScope());
+      try {
+        for (Policy match: getPolicies(policy.getScope())){
+          properties.addProperty(match.getScope(), match.getOrigin()+" 
"+match.getDirective());
+        }
+        properties.save();
+      } catch (ConfigurationException e) {
+        _logger.error("Error synchronizing back to Policies file:", e);
+      }
       return false;
     }
   }
   
+  
   /**
    * Remove a policy
    * @param policyString

Modified: incubator/wookie/trunk/src/org/apache/wookie/proxy/Policy.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/proxy/Policy.java?rev=1236658&r1=1236657&r2=1236658&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/proxy/Policy.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/proxy/Policy.java Fri Jan 27 
12:39:14 2012
@@ -108,7 +108,7 @@ public class Policy {
 
     Policy otherPolicy = (Policy)obj;
 
-    if(otherPolicy.getScope().equalsIgnoreCase(getScope()) && 
(otherPolicy.getDirective().equalsIgnoreCase(getDirective())) && 
(otherPolicy.getOrigin().equalsIgnoreCase(getOrigin()))){
+    if(otherPolicy.getScope().equalsIgnoreCase(getScope()) && 
(otherPolicy.getOrigin().equalsIgnoreCase(getOrigin()))){
       return true;
     }
 


Reply via email to