Author: rgodfrey
Date: Fri Jul 15 16:05:14 2016
New Revision: 1752846

URL: http://svn.apache.org/viewvc?rev=1752846&view=rev
Log:
QPID-7318 : Reduce code duplication in ACL implementations

Added:
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/CommonAccessControlProvider.java
   (with props)
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/access/AbstractAccessControlProvider.java
   (with props)
    
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractCommonRulesBasedAccessControlProvider.java
   (with props)
    
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractLegacyAccessControlProvider.java
      - copied, changed from r1752845, 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractRuleBasedAccessControlProvider.java
Removed:
    
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractRuleBasedAccessControlProvider.java
Modified:
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAccessControlProvider.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/AllowAllAccessControlProviderImpl.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
    
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java
    
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/RuleBasedAccessControlProviderImpl.java
    
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/RuleBasedVirtualHostAccessControlProviderImpl.java

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java?rev=1752846&r1=1752845&r2=1752846&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java
 Fri Jul 15 16:05:14 2016
@@ -19,37 +19,10 @@
  */
 package org.apache.qpid.server.model;
 
-import java.util.Comparator;
-
-import org.apache.qpid.server.security.AccessControl;
-
 @ManagedObject
-public interface AccessControlProvider<X extends AccessControlProvider<X>> 
extends ConfiguredObject<X>, Comparable<AccessControlProvider>
+public interface AccessControlProvider<X extends AccessControlProvider<X>> 
extends ConfiguredObject<X>, 
CommonAccessControlProvider<AccessControlProvider<?>>
 {
-    String PRIORITY = "priority";
-
-    Comparator<AccessControlProvider> ACCESS_CONTROL_POVIDER_COMPARATOR = new 
Comparator<AccessControlProvider>()
-    {
-        @Override
-        public int compare(final AccessControlProvider o1, final 
AccessControlProvider o2)
-        {
-            if(o1.getPriority() < o2.getPriority())
-            {
-                return -1;
-            }
-            else if (o1.getPriority() > o2.getPriority())
-            {
-                return 1;
-            }
-            else
-            {
-                return o1.getName().compareTo(o2.getName());
-            }
-        }
-    };
-
     @ManagedAttribute(defaultValue = "10")
     int getPriority();
-    //retrieve the underlying AccessControl object
-    AccessControl getAccessControl();
+
 }

Added: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/CommonAccessControlProvider.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/CommonAccessControlProvider.java?rev=1752846&view=auto
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/CommonAccessControlProvider.java
 (added)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/CommonAccessControlProvider.java
 Fri Jul 15 16:05:14 2016
@@ -0,0 +1,54 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.model;
+
+import java.util.Comparator;
+
+import org.apache.qpid.server.security.AccessControl;
+
+public interface CommonAccessControlProvider<X> extends Comparable<X>
+{
+    String PRIORITY = "priority";
+
+    Comparator<? super CommonAccessControlProvider> 
ACCESS_CONTROL_PROVIDER_COMPARATOR = new 
Comparator<CommonAccessControlProvider>()
+    {
+        @Override
+        public int compare(final CommonAccessControlProvider o1, final 
CommonAccessControlProvider o2)
+        {
+            if(o1.getPriority() < o2.getPriority())
+            {
+                return -1;
+            }
+            else if (o1.getPriority() > o2.getPriority())
+            {
+                return 1;
+            }
+            else
+            {
+                return o1.getName().compareTo(o2.getName());
+            }
+        }
+    };
+
+    String getName();
+    int getPriority();
+    AccessControl getAccessControl();
+}

Propchange: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/CommonAccessControlProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAccessControlProvider.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAccessControlProvider.java?rev=1752846&r1=1752845&r2=1752846&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAccessControlProvider.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAccessControlProvider.java
 Fri Jul 15 16:05:14 2016
@@ -25,33 +25,8 @@ import java.util.Comparator;
 import org.apache.qpid.server.security.AccessControl;
 
 @ManagedObject( creatable = false )
-public interface VirtualHostAccessControlProvider<X extends 
VirtualHostAccessControlProvider<X>>  extends ConfiguredObject<X>, 
Comparable<VirtualHostAccessControlProvider>
+public interface VirtualHostAccessControlProvider<X extends 
VirtualHostAccessControlProvider<X>>  extends ConfiguredObject<X>, 
CommonAccessControlProvider<VirtualHostAccessControlProvider<?>>
 {
-    String PRIORITY = "priority";
-
-    Comparator<VirtualHostAccessControlProvider> 
VIRTUAL_HOST_ACCESS_CONTROL_POVIDER_COMPARATOR = new 
Comparator<VirtualHostAccessControlProvider>()
-    {
-        @Override
-        public int compare(final VirtualHostAccessControlProvider o1, final 
VirtualHostAccessControlProvider o2)
-        {
-            if(o1.getPriority() < o2.getPriority())
-            {
-                return -1;
-            }
-            else if (o1.getPriority() > o2.getPriority())
-            {
-                return 1;
-            }
-            else
-            {
-                return o1.getName().compareTo(o2.getName());
-            }
-        }
-    };
-
-
     @ManagedAttribute(defaultValue = "10")
     int getPriority();
-
-    AccessControl getAccessControl();
 }

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1752846&r1=1752845&r2=1752846&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
 Fri Jul 15 16:05:14 2016
@@ -820,7 +820,7 @@ public class BrokerAdapter extends Abstr
         if(!isManagementMode())
         {
             List<AccessControlProvider> children = new 
ArrayList<>(getChildren(AccessControlProvider.class));
-            Collections.sort(children, 
AccessControlProvider.ACCESS_CONTROL_POVIDER_COMPARATOR);
+            Collections.sort(children, 
CommonAccessControlProvider.ACCESS_CONTROL_PROVIDER_COMPARATOR);
 
             List<AccessControl<?>> accessControls = new 
ArrayList<>(children.size()+1);
             accessControls.add(_systemUserAllowed);

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/AllowAllAccessControlProviderImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/AllowAllAccessControlProviderImpl.java?rev=1752846&r1=1752845&r2=1752846&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/AllowAllAccessControlProviderImpl.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/AllowAllAccessControlProviderImpl.java
 Fri Jul 15 16:05:14 2016
@@ -96,8 +96,8 @@ public class AllowAllAccessControlProvid
     }
 
     @Override
-    public int compareTo(final AccessControlProvider o)
+    public int compareTo(final AccessControlProvider<?> o)
     {
-        return ACCESS_CONTROL_POVIDER_COMPARATOR.compare(this, o);
+        return ACCESS_CONTROL_PROVIDER_COMPARATOR.compare(this, o);
     }
 }

Added: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/access/AbstractAccessControlProvider.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/access/AbstractAccessControlProvider.java?rev=1752846&view=auto
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/access/AbstractAccessControlProvider.java
 (added)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/access/AbstractAccessControlProvider.java
 Fri Jul 15 16:05:14 2016
@@ -0,0 +1,102 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.security.access;
+
+import java.util.Map;
+
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import org.apache.qpid.server.logging.EventLogger;
+import org.apache.qpid.server.logging.EventLoggerProvider;
+import org.apache.qpid.server.logging.messages.AccessControlMessages;
+import org.apache.qpid.server.model.AbstractConfiguredObject;
+import org.apache.qpid.server.model.CommonAccessControlProvider;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.ManagedAttributeField;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.StateTransition;
+import org.apache.qpid.server.security.AccessControl;
+
+
+public abstract class AbstractAccessControlProvider<X extends 
AbstractAccessControlProvider<X,Y,T>, Y extends CommonAccessControlProvider<Y>, 
T extends EventLoggerProvider & ConfiguredObject<?>>
+        extends AbstractConfiguredObject<X> implements EventLoggerProvider, 
CommonAccessControlProvider<Y>
+{
+    private final EventLogger _eventLogger;
+    @ManagedAttributeField
+    private int _priority;
+
+
+    public AbstractAccessControlProvider(Map<String, Object> attributes, T 
parent)
+    {
+        super(parentsMap(parent), attributes);
+
+        _eventLogger = parent.getEventLogger();
+        _eventLogger.message(AccessControlMessages.CREATE(getName()));
+
+
+    }
+
+    @Override
+    public EventLogger getEventLogger()
+    {
+        return _eventLogger;
+    }
+
+    public final int getPriority()
+    {
+        return _priority;
+    }
+
+    public abstract AccessControl getAccessControl();
+
+    @Override
+    public int compareTo(final Y o)
+    {
+        return ACCESS_CONTROL_PROVIDER_COMPARATOR.compare((Y)this, o);
+    }
+
+    @StateTransition(currentState = State.UNINITIALIZED, desiredState = 
State.QUIESCED)
+    @SuppressWarnings("unused")
+    private ListenableFuture<Void> startQuiesced()
+    {
+        setState(State.QUIESCED);
+        return Futures.immediateFuture(null);
+    }
+
+    @StateTransition(currentState = {State.ACTIVE, State.QUIESCED, 
State.ERRORED}, desiredState = State.DELETED)
+    @SuppressWarnings("unused")
+    private ListenableFuture<Void> doDelete()
+    {
+        return doAfterAlways(closeAsync(),
+                             new Runnable()
+                             {
+                                 @Override
+                                 public void run()
+                                 {
+                                     setState(State.DELETED);
+                                     deleted();
+                                     
getEventLogger().message(AccessControlMessages.DELETE(getName()));
+                                 }
+                             });
+    }
+
+}

Propchange: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/access/AbstractAccessControlProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1752846&r1=1752845&r2=1752846&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
 Fri Jul 15 16:05:14 2016
@@ -308,7 +308,7 @@ public abstract class AbstractVirtualHos
         {
             List<VirtualHostAccessControlProvider> children = new 
ArrayList<>(getChildren(VirtualHostAccessControlProvider.class));
             _logger.debug("Updating access control list with {} provider 
children", children.size());
-            Collections.sort(children, 
VirtualHostAccessControlProvider.VIRTUAL_HOST_ACCESS_CONTROL_POVIDER_COMPARATOR);
+            Collections.sort(children, 
VirtualHostAccessControlProvider.ACCESS_CONTROL_PROVIDER_COMPARATOR);
 
             List<AccessControl<?>> accessControls = new 
ArrayList<>(children.size()+2);
             accessControls.add(_systemUserAllowed);

Modified: 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java?rev=1752846&r1=1752845&r2=1752846&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java
 Fri Jul 15 16:05:14 2016
@@ -32,7 +32,6 @@ import org.slf4j.LoggerFactory;
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.model.AccessControlProvider;
 import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.BrokerModel;
 import org.apache.qpid.server.model.ManagedAttributeField;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
 import org.apache.qpid.server.model.State;
@@ -43,7 +42,7 @@ import org.apache.qpid.server.security.a
 import org.apache.qpid.server.util.urlstreamhandler.data.Handler;
 
 public class ACLFileAccessControlProviderImpl
-        extends 
AbstractRuleBasedAccessControlProvider<ACLFileAccessControlProviderImpl>
+        extends 
AbstractLegacyAccessControlProvider<ACLFileAccessControlProviderImpl, 
Broker<?>, AccessControlProvider<?>>
         implements 
ACLFileAccessControlProvider<ACLFileAccessControlProviderImpl>
 {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ACLFileAccessControlProviderImpl.class);
@@ -129,9 +128,9 @@ public class ACLFileAccessControlProvide
         return _path;
     }
 
-    public int compareTo(final AccessControlProvider o)
+    public int compareTo(final AccessControlProvider<?> o)
     {
-        return ACCESS_CONTROL_POVIDER_COMPARATOR.compare(this, o);
+        return ACCESS_CONTROL_PROVIDER_COMPARATOR.compare(this, o);
     }
 
 }

Added: 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractCommonRulesBasedAccessControlProvider.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractCommonRulesBasedAccessControlProvider.java?rev=1752846&view=auto
==============================================================================
--- 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractCommonRulesBasedAccessControlProvider.java
 (added)
+++ 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractCommonRulesBasedAccessControlProvider.java
 Fri Jul 15 16:05:14 2016
@@ -0,0 +1,214 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.security.access.plugins;
+
+import static 
org.apache.qpid.server.security.access.plugins.RuleBasedAccessControlProvider.DEFAULT_RESULT;
+import static 
org.apache.qpid.server.security.access.plugins.RuleBasedAccessControlProvider.RULES;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.qpid.server.logging.EventLoggerProvider;
+import org.apache.qpid.server.model.CommonAccessControlProvider;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.Content;
+import org.apache.qpid.server.model.CustomRestHeaders;
+import org.apache.qpid.server.model.ManagedAttributeField;
+import org.apache.qpid.server.model.RestContentHeader;
+import org.apache.qpid.server.security.Result;
+import org.apache.qpid.server.security.access.RuleOutcome;
+import org.apache.qpid.server.security.access.config.AclAction;
+import org.apache.qpid.server.security.access.config.AclFileParser;
+import org.apache.qpid.server.security.access.config.AclRulePredicates;
+import org.apache.qpid.server.security.access.config.LegacyOperation;
+import org.apache.qpid.server.security.access.config.ObjectProperties;
+import org.apache.qpid.server.security.access.config.ObjectType;
+import org.apache.qpid.server.security.access.config.Rule;
+import org.apache.qpid.server.security.access.config.RuleBasedAccessControl;
+import org.apache.qpid.server.security.access.config.RuleSet;
+
+
+abstract class AbstractCommonRulesBasedAccessControlProvider<X extends 
AbstractCommonRulesBasedAccessControlProvider<X,T,Y>, T extends 
EventLoggerProvider & ConfiguredObject<?>, Y extends 
CommonAccessControlProvider<Y>>
+        extends AbstractLegacyAccessControlProvider<X, T, Y> implements 
EventLoggerProvider
+{
+
+    @ManagedAttributeField
+    private Result _defaultResult;
+    @ManagedAttributeField
+    private List<AclRule> _rules;
+
+    AbstractCommonRulesBasedAccessControlProvider(final Map<String, Object> 
attributes, final T parent)
+    {
+        super(attributes, parent);
+    }
+
+    @Override
+    protected void changeAttributes(final Map<String, Object> attributes)
+    {
+        super.changeAttributes(attributes);
+        
if(attributes.containsKey(RuleBasedVirtualHostAccessControlProvider.DEFAULT_RESULT)
 || attributes.containsKey(
+                RuleBasedVirtualHostAccessControlProvider.RULES))
+        {
+            recreateAccessController();
+        }
+    }
+
+    protected RuleBasedAccessControl createRuleBasedAccessController()
+    {
+        List<Rule> rules = new ArrayList<>();
+        for(AclRule configuredRule : _rules)
+        {
+            rules.add(new Rule(configuredRule.getIdentity(),
+                               new AclAction(configuredRule.getOperation(),
+                                             configuredRule.getObjectType(),
+                                             new 
AclRulePredicates(configuredRule.getAttributes())),
+                               configuredRule.getOutcome()));
+        }
+        return new RuleBasedAccessControl(new RuleSet(this, rules, 
_defaultResult), getModel());
+    }
+
+    public Result getDefaultResult()
+    {
+        return _defaultResult;
+    }
+
+    public List<AclRule> getRules()
+    {
+        return _rules;
+    }
+
+
+    public void loadFromFile(final String path)
+    {
+        RuleSet ruleSet = AclFileParser.parse(path, this);
+        List<AclRule> aclRules = new ArrayList<>();
+        for(Rule rule : ruleSet.getAllRules())
+        {
+            aclRules.add(new AclRuleImpl(rule));
+        }
+        Map<String,Object> attrs = new HashMap<>();
+        attrs.put(DEFAULT_RESULT, ruleSet.getDefault());
+        attrs.put(RULES, aclRules);
+        setAttributes(attrs);
+    }
+
+
+    public static class AclRuleImpl implements AclRule
+    {
+        private final Rule _rule;
+
+        AclRuleImpl(final Rule rule)
+        {
+            _rule = rule;
+        }
+
+        @Override
+        public String getIdentity()
+        {
+            return _rule.getIdentity();
+        }
+
+        @Override
+        public ObjectType getObjectType()
+        {
+            return _rule.getAction().getObjectType();
+        }
+
+        @Override
+        public LegacyOperation getOperation()
+        {
+            return _rule.getAction().getOperation();
+        }
+
+        @Override
+        public Map<ObjectProperties.Property, String> getAttributes()
+        {
+            return _rule.getAction().getProperties().asPropertyMap();
+        }
+
+        @Override
+        public RuleOutcome getOutcome()
+        {
+            return _rule.getRuleOutcome();
+        }
+    }
+
+    public Content extractRules()
+    {
+        StringBuilder sb = new StringBuilder();
+        for(AclRule rule : _rules)
+        {
+            sb.append("ACL ");
+            sb.append(rule.getOutcome().name().replace('_','-'));
+            sb.append(' ');
+            sb.append(rule.getIdentity());
+            sb.append(' ');
+            sb.append(rule.getOperation().name());
+            sb.append(' ');
+            sb.append(rule.getObjectType().name());
+            for(Map.Entry<ObjectProperties.Property,String> entry : 
rule.getAttributes().entrySet())
+            {
+                sb.append(' ');
+                sb.append(entry.getKey().getCanonicalName());
+                sb.append(" = \"");
+                sb.append(entry.getValue());
+                sb.append("\"");
+            }
+            sb.append('\n');
+        }
+        return new StringContent(sb.toString());
+    }
+
+    private static class StringContent implements Content, CustomRestHeaders
+    {
+
+        private final String _content;
+
+        public StringContent(final String content)
+        {
+            _content = content;
+        }
+
+        @Override
+        public void write(final OutputStream outputStream) throws IOException
+        {
+            outputStream.write(_content.getBytes(StandardCharsets.UTF_8));
+        }
+
+        @RestContentHeader("Content-Type")
+        public String getContentType()
+        {
+            return "text/plain";
+        }
+
+        @Override
+        public void release()
+        {
+
+        }
+    }
+
+}

Propchange: 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractCommonRulesBasedAccessControlProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractLegacyAccessControlProvider.java
 (from r1752845, 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractRuleBasedAccessControlProvider.java)
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractLegacyAccessControlProvider.java?p2=qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractLegacyAccessControlProvider.java&p1=qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractRuleBasedAccessControlProvider.java&r1=1752845&r2=1752846&rev=1752846&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractRuleBasedAccessControlProvider.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/AbstractLegacyAccessControlProvider.java
 Fri Jul 15 16:05:14 2016
@@ -28,25 +28,21 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
-import org.apache.qpid.server.logging.EventLogger;
 import org.apache.qpid.server.logging.EventLoggerProvider;
-import org.apache.qpid.server.logging.messages.AccessControlMessages;
-import org.apache.qpid.server.model.AbstractConfiguredObject;
-import org.apache.qpid.server.model.AccessControlProvider;
-import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.CommonAccessControlProvider;
 import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.model.ManagedAttributeField;
-import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.model.StateTransition;
+import org.apache.qpid.server.model.SystemConfig;
 import org.apache.qpid.server.security.AccessControl;
+import org.apache.qpid.server.security.access.AbstractAccessControlProvider;
 import org.apache.qpid.server.security.access.config.RuleBasedAccessControl;
 import org.apache.qpid.server.util.urlstreamhandler.data.Handler;
 
-public abstract class AbstractRuleBasedAccessControlProvider<X extends 
AbstractRuleBasedAccessControlProvider<X>>
-        extends AbstractConfiguredObject<X> implements EventLoggerProvider
+abstract class AbstractLegacyAccessControlProvider<X extends 
AbstractLegacyAccessControlProvider<X,T,Y>, T extends EventLoggerProvider & 
ConfiguredObject<?>, Y extends CommonAccessControlProvider<Y>>
+        extends AbstractAccessControlProvider<X, Y, T> implements 
EventLoggerProvider
 {
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(AbstractRuleBasedAccessControlProvider.class);
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(AbstractLegacyAccessControlProvider.class);
 
     static
     {
@@ -54,23 +50,12 @@ public abstract class AbstractRuleBasedA
     }
 
     private volatile RuleBasedAccessControl _accessControl;
-    private final EventLogger _eventLogger;
 
-    @ManagedAttributeField
-    private int _priority;
 
-    public AbstractRuleBasedAccessControlProvider(Map<String, Object> 
attributes, ConfiguredObject<?> parent)
+    AbstractLegacyAccessControlProvider(Map<String, Object> attributes, T 
parent)
     {
-        super(parentsMap(parent), attributes);
+        super(attributes, parent);
 
-
-        _eventLogger = ((EventLoggerProvider)parent).getEventLogger();
-        _eventLogger.message(AccessControlMessages.CREATE(getName()));
-    }
-
-    public final EventLogger getEventLogger()
-    {
-        return _eventLogger;
     }
 
     @Override
@@ -99,11 +84,30 @@ public abstract class AbstractRuleBasedA
 
     abstract protected RuleBasedAccessControl 
createRuleBasedAccessController();
 
-
-    @Override
-    protected void onOpen()
+    @StateTransition(currentState = {State.UNINITIALIZED, State.QUIESCED, 
State.ERRORED}, desiredState = State.ACTIVE)
+    @SuppressWarnings("unused")
+    private ListenableFuture<Void> activate()
     {
-        super.onOpen();
+
+        final boolean isManagementMode = 
getModel().getAncestor(SystemConfig.class, this).isManagementMode();
+        try
+        {
+            recreateAccessController();
+            setState(isManagementMode ? State.QUIESCED : State.ACTIVE);
+        }
+        catch (RuntimeException e)
+        {
+            setState(State.ERRORED);
+            if (isManagementMode)
+            {
+                LOGGER.warn("Failed to activate ACL provider: " + getName(), 
e);
+            }
+            else
+            {
+                throw e;
+            }
+        }
+        return Futures.immediateFuture(null);
     }
 
 
@@ -112,46 +116,11 @@ public abstract class AbstractRuleBasedA
         _accessControl = createRuleBasedAccessController();
     }
 
-    @Override
-    protected void onClose()
-    {
-        super.onClose();
-
-    }
-
-    @StateTransition(currentState = State.UNINITIALIZED, desiredState = 
State.QUIESCED)
-    @SuppressWarnings("unused")
-    private ListenableFuture<Void> startQuiesced()
-    {
-        setState(State.QUIESCED);
-        return Futures.immediateFuture(null);
-    }
 
-    @StateTransition(currentState = {State.ACTIVE, State.QUIESCED, 
State.ERRORED}, desiredState = State.DELETED)
-    @SuppressWarnings("unused")
-    private ListenableFuture<Void> doDelete()
-    {
-        return doAfterAlways(closeAsync(),
-                new Runnable()
-                {
-                    @Override
-                    public void run()
-                    {
-                        setState(State.DELETED);
-                        deleted();
-                        
_eventLogger.message(AccessControlMessages.DELETE(getName()));
-                    }
-                });
-    }
 
     public final AccessControl getAccessControl()
     {
         return _accessControl;
     }
 
-    public final int getPriority()
-    {
-        return _priority;
-    }
-
 }

Modified: 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/RuleBasedAccessControlProviderImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/RuleBasedAccessControlProviderImpl.java?rev=1752846&r1=1752845&r2=1752846&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/RuleBasedAccessControlProviderImpl.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/RuleBasedAccessControlProviderImpl.java
 Fri Jul 15 16:05:14 2016
@@ -20,244 +20,30 @@
  */
 package org.apache.qpid.server.security.access.plugins;
 
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import org.apache.qpid.server.model.AccessControlProvider;
 import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.Content;
-import org.apache.qpid.server.model.CustomRestHeaders;
-import org.apache.qpid.server.model.ManagedAttributeField;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
-import org.apache.qpid.server.model.RestContentHeader;
-import org.apache.qpid.server.model.State;
-import org.apache.qpid.server.model.StateTransition;
-import org.apache.qpid.server.security.Result;
-import org.apache.qpid.server.security.access.config.ObjectProperties;
-import org.apache.qpid.server.security.access.config.ObjectType;
-import org.apache.qpid.server.security.access.config.LegacyOperation;
-import org.apache.qpid.server.security.access.RuleOutcome;
-import org.apache.qpid.server.security.access.config.AclAction;
-import org.apache.qpid.server.security.access.config.AclFileParser;
-import org.apache.qpid.server.security.access.config.AclRulePredicates;
-import org.apache.qpid.server.security.access.config.Rule;
-import org.apache.qpid.server.security.access.config.RuleBasedAccessControl;
-import org.apache.qpid.server.security.access.config.RuleSet;
 import org.apache.qpid.server.util.urlstreamhandler.data.Handler;
 
-public class RuleBasedAccessControlProviderImpl
-        extends 
AbstractRuleBasedAccessControlProvider<RuleBasedAccessControlProviderImpl>
+class RuleBasedAccessControlProviderImpl
+        extends 
AbstractCommonRulesBasedAccessControlProvider<RuleBasedAccessControlProviderImpl,
 Broker<?>, AccessControlProvider<?>>
         implements 
RuleBasedAccessControlProvider<RuleBasedAccessControlProviderImpl>
 {
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(RuleBasedAccessControlProviderImpl.class);
 
     static
     {
         Handler.register();
     }
 
-    private final Broker _broker;
-
-    @ManagedAttributeField
-    private Result _defaultResult;
-    @ManagedAttributeField
-    private List<AclRule> _rules;
-
 
     @ManagedObjectFactoryConstructor
     public RuleBasedAccessControlProviderImpl(Map<String, Object> attributes, 
Broker broker)
     {
         super(attributes, broker);
-        _broker = broker;
-    }
-
-
-    @Override
-    protected void changeAttributes(final Map<String, Object> attributes)
-    {
-        super.changeAttributes(attributes);
-        if(attributes.containsKey(DEFAULT_RESULT) || 
attributes.containsKey(RULES))
-        {
-            recreateAccessController();
-        }
-    }
-
-    @Override
-    protected RuleBasedAccessControl createRuleBasedAccessController()
-    {
-        List<Rule> rules = new ArrayList<>();
-        for(AclRule configuredRule : _rules)
-        {
-            rules.add(new Rule(configuredRule.getIdentity(),
-                               new AclAction(configuredRule.getOperation(),
-                                             configuredRule.getObjectType(),
-                                             new 
AclRulePredicates(configuredRule.getAttributes())),
-                               configuredRule.getOutcome()));
-        }
-        return new RuleBasedAccessControl(new RuleSet(this, rules, 
_defaultResult), getModel());
-    }
-
-    @Override
-    public Result getDefaultResult()
-    {
-        return _defaultResult;
-    }
-
-    @Override
-    public List<AclRule> getRules()
-    {
-        return _rules;
-    }
-
-    @StateTransition(currentState = {State.UNINITIALIZED, State.QUIESCED, 
State.ERRORED}, desiredState = State.ACTIVE)
-    @SuppressWarnings("unused")
-    private ListenableFuture<Void> activate()
-    {
-
-        try
-        {
-            recreateAccessController();
-            setState(_broker.isManagementMode() ? State.QUIESCED : 
State.ACTIVE);
-        }
-        catch (RuntimeException e)
-        {
-            setState(State.ERRORED);
-            if (_broker.isManagementMode())
-            {
-                LOGGER.warn("Failed to activate ACL provider: " + getName(), 
e);
-            }
-            else
-            {
-                throw e;
-            }
-        }
-        return Futures.immediateFuture(null);
     }
 
-    @Override
-    public void loadFromFile(final String path)
-    {
-        RuleSet ruleSet = AclFileParser.parse(path, this);
-        List<AclRule> aclRules = new ArrayList<>();
-        for(Rule rule : ruleSet.getAllRules())
-        {
-            aclRules.add(new AclRuleImpl(rule));
-        }
-        Map<String,Object> attrs = new HashMap<>();
-        attrs.put(DEFAULT_RESULT, ruleSet.getDefault());
-        attrs.put(RULES, aclRules);
-        setAttributes(attrs);
-    }
-
-    public static class AclRuleImpl implements AclRule
-    {
-        private final Rule _rule;
-
-        AclRuleImpl(final Rule rule)
-        {
-            _rule = rule;
-        }
-
-        @Override
-        public String getIdentity()
-        {
-            return _rule.getIdentity();
-        }
-
-        @Override
-        public ObjectType getObjectType()
-        {
-            return _rule.getAction().getObjectType();
-        }
-
-        @Override
-        public LegacyOperation getOperation()
-        {
-            return _rule.getAction().getOperation();
-        }
-
-        @Override
-        public Map<ObjectProperties.Property, String> getAttributes()
-        {
-            return _rule.getAction().getProperties().asPropertyMap();
-        }
-
-        @Override
-        public RuleOutcome getOutcome()
-        {
-            return _rule.getRuleOutcome();
-        }
-    }
-
-    @Override
-    public Content extractRules()
-    {
-        StringBuilder sb = new StringBuilder();
-        for(AclRule rule : _rules)
-        {
-            sb.append("ACL ");
-            sb.append(rule.getOutcome().name().replace('_','-'));
-            sb.append(' ');
-            sb.append(rule.getIdentity());
-            sb.append(' ');
-            sb.append(rule.getOperation().name());
-            sb.append(' ');
-            sb.append(rule.getObjectType().name());
-            for(Map.Entry<ObjectProperties.Property,String> entry : 
rule.getAttributes().entrySet())
-            {
-                sb.append(' ');
-                sb.append(entry.getKey().getCanonicalName());
-                sb.append(" = \"");
-                sb.append(entry.getValue());
-                sb.append("\"");
-            }
-            sb.append('\n');
-        }
-        return new StringContent(sb.toString());
-    }
-
-    private static class StringContent implements Content, CustomRestHeaders
-    {
-
-        private final String _content;
-
-        public StringContent(final String content)
-        {
-            _content = content;
-        }
-
-        @Override
-        public void write(final OutputStream outputStream) throws IOException
-        {
-            outputStream.write(_content.getBytes(StandardCharsets.UTF_8));
-        }
-
-        @RestContentHeader("Content-Type")
-        public String getContentType()
-        {
-            return "text/plain";
-        }
-
-        @Override
-        public void release()
-        {
-
-        }
-    }
-
-    public int compareTo(final AccessControlProvider o)
-    {
-        return ACCESS_CONTROL_POVIDER_COMPARATOR.compare(this, o);
-    }
 
 }

Modified: 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/RuleBasedVirtualHostAccessControlProviderImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/RuleBasedVirtualHostAccessControlProviderImpl.java?rev=1752846&r1=1752845&r2=1752846&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/RuleBasedVirtualHostAccessControlProviderImpl.java
 (original)
+++ 
qpid/java/trunk/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/RuleBasedVirtualHostAccessControlProviderImpl.java
 Fri Jul 15 16:05:14 2016
@@ -20,48 +20,19 @@
  */
 package org.apache.qpid.server.security.access.plugins;
 
-import java.io.IOException;
-import java.io.OutputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
 import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.ConfiguredObject;
-import org.apache.qpid.server.model.Content;
-import org.apache.qpid.server.model.CustomRestHeaders;
-import org.apache.qpid.server.model.ManagedAttributeField;
 import org.apache.qpid.server.model.ManagedObjectFactoryConstructor;
-import org.apache.qpid.server.model.RestContentHeader;
-import org.apache.qpid.server.model.State;
-import org.apache.qpid.server.model.StateTransition;
-import org.apache.qpid.server.model.SystemConfig;
 import org.apache.qpid.server.model.VirtualHost;
 import org.apache.qpid.server.model.VirtualHostAccessControlProvider;
-import org.apache.qpid.server.security.Result;
-import org.apache.qpid.server.security.access.RuleOutcome;
-import org.apache.qpid.server.security.access.config.AclAction;
-import org.apache.qpid.server.security.access.config.AclFileParser;
-import org.apache.qpid.server.security.access.config.AclRulePredicates;
-import org.apache.qpid.server.security.access.config.LegacyOperation;
-import org.apache.qpid.server.security.access.config.ObjectProperties;
 import org.apache.qpid.server.security.access.config.ObjectType;
-import org.apache.qpid.server.security.access.config.Rule;
-import org.apache.qpid.server.security.access.config.RuleBasedAccessControl;
-import org.apache.qpid.server.security.access.config.RuleSet;
 import org.apache.qpid.server.util.urlstreamhandler.data.Handler;
 
 public class RuleBasedVirtualHostAccessControlProviderImpl
-        extends 
AbstractRuleBasedAccessControlProvider<RuleBasedVirtualHostAccessControlProviderImpl>
+        extends 
AbstractCommonRulesBasedAccessControlProvider<RuleBasedVirtualHostAccessControlProviderImpl,
 VirtualHost<?>, VirtualHostAccessControlProvider<?>>
         implements 
RuleBasedVirtualHostAccessControlProvider<RuleBasedVirtualHostAccessControlProviderImpl>
 {
     private static final EnumSet<ObjectType> ALLOWED_OBJECT_TYPES = 
EnumSet.of(ObjectType.ALL,
@@ -70,17 +41,11 @@ public class RuleBasedVirtualHostAccessC
                                                                                
ObjectType.VIRTUALHOST,
                                                                                
ObjectType.METHOD);
 
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(RuleBasedVirtualHostAccessControlProviderImpl.class);
-
     static
     {
         Handler.register();
     }
 
-    @ManagedAttributeField
-    private Result _defaultResult;
-    @ManagedAttributeField
-    private List<AclRule> _rules;
 
 
     @ManagedObjectFactoryConstructor
@@ -91,16 +56,6 @@ public class RuleBasedVirtualHostAccessC
 
 
     @Override
-    protected void changeAttributes(final Map<String, Object> attributes)
-    {
-        super.changeAttributes(attributes);
-        if(attributes.containsKey(DEFAULT_RESULT) || 
attributes.containsKey(RULES))
-        {
-            recreateAccessController();
-        }
-    }
-
-    @Override
     protected void validateChange(final ConfiguredObject<?> 
proxyForValidation, final Set<String> changedAttributes)
     {
         super.validateChange(proxyForValidation, changedAttributes);
@@ -116,174 +71,5 @@ public class RuleBasedVirtualHostAccessC
         }
     }
 
-    @Override
-    protected RuleBasedAccessControl createRuleBasedAccessController()
-    {
-        List<Rule> rules = new ArrayList<>();
-        for(AclRule configuredRule : _rules)
-        {
-            rules.add(new Rule(configuredRule.getIdentity(),
-                               new AclAction(configuredRule.getOperation(),
-                                             configuredRule.getObjectType(),
-                                             new 
AclRulePredicates(configuredRule.getAttributes())),
-                               configuredRule.getOutcome()));
-        }
-        return new RuleBasedAccessControl(new RuleSet(this, rules, 
_defaultResult), getModel());
-    }
-
-    @Override
-    public Result getDefaultResult()
-    {
-        return _defaultResult;
-    }
-
-    @Override
-    public List<AclRule> getRules()
-    {
-        return _rules;
-    }
-
-    @StateTransition(currentState = {State.UNINITIALIZED, State.QUIESCED, 
State.ERRORED}, desiredState = State.ACTIVE)
-    @SuppressWarnings("unused")
-    private ListenableFuture<Void> activate()
-    {
-
-        final boolean isManagementMode = 
getModel().getAncestor(SystemConfig.class, this).isManagementMode();
-        try
-        {
-            recreateAccessController();
-            setState(isManagementMode ? State.QUIESCED : State.ACTIVE);
-        }
-        catch (RuntimeException e)
-        {
-            setState(State.ERRORED);
-            if (isManagementMode)
-            {
-                LOGGER.warn("Failed to activate ACL provider: " + getName(), 
e);
-            }
-            else
-            {
-                throw e;
-            }
-        }
-        return Futures.immediateFuture(null);
-    }
-
-    @Override
-    public void loadFromFile(final String path)
-    {
-        RuleSet ruleSet = AclFileParser.parse(path, this);
-        List<AclRule> aclRules = new ArrayList<>();
-        for(Rule rule : ruleSet.getAllRules())
-        {
-            aclRules.add(new AclRuleImpl(rule));
-        }
-        Map<String,Object> attrs = new HashMap<>();
-        attrs.put(DEFAULT_RESULT, ruleSet.getDefault());
-        attrs.put(RULES, aclRules);
-        setAttributes(attrs);
-    }
-
-    @Override
-    public int compareTo(final VirtualHostAccessControlProvider o)
-    {
-        return VIRTUAL_HOST_ACCESS_CONTROL_POVIDER_COMPARATOR.compare(this, o);
-    }
-
-    public static class AclRuleImpl implements AclRule
-    {
-        private final Rule _rule;
-
-        AclRuleImpl(final Rule rule)
-        {
-            _rule = rule;
-        }
-
-        @Override
-        public String getIdentity()
-        {
-            return _rule.getIdentity();
-        }
-
-        @Override
-        public ObjectType getObjectType()
-        {
-            return _rule.getAction().getObjectType();
-        }
-
-        @Override
-        public LegacyOperation getOperation()
-        {
-            return _rule.getAction().getOperation();
-        }
-
-        @Override
-        public Map<ObjectProperties.Property, String> getAttributes()
-        {
-            return _rule.getAction().getProperties().asPropertyMap();
-        }
-
-        @Override
-        public RuleOutcome getOutcome()
-        {
-            return _rule.getRuleOutcome();
-        }
-    }
-
-    @Override
-    public Content extractRules()
-    {
-        StringBuilder sb = new StringBuilder();
-        for(AclRule rule : _rules)
-        {
-            sb.append("ACL ");
-            sb.append(rule.getOutcome().name().replace('_','-'));
-            sb.append(' ');
-            sb.append(rule.getIdentity());
-            sb.append(' ');
-            sb.append(rule.getOperation().name());
-            sb.append(' ');
-            sb.append(rule.getObjectType().name());
-            for(Map.Entry<ObjectProperties.Property,String> entry : 
rule.getAttributes().entrySet())
-            {
-                sb.append(' ');
-                sb.append(entry.getKey().getCanonicalName());
-                sb.append(" = \"");
-                sb.append(entry.getValue());
-                sb.append("\"");
-            }
-            sb.append('\n');
-        }
-        return new StringContent(sb.toString());
-    }
-
-    private static class StringContent implements Content, CustomRestHeaders
-    {
-
-        private final String _content;
-
-        public StringContent(final String content)
-        {
-            _content = content;
-        }
-
-        @Override
-        public void write(final OutputStream outputStream) throws IOException
-        {
-            outputStream.write(_content.getBytes(StandardCharsets.UTF_8));
-        }
-
-        @RestContentHeader("Content-Type")
-        public String getContentType()
-        {
-            return "text/plain";
-        }
-
-        @Override
-        public void release()
-        {
-
-        }
-    }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to