You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2014/02/23 19:38:10 UTC

svn commit: r1571054 [1/4] - in /qpid/trunk/qpid/java: broker-core/src/main/java/org/apache/qpid/server/configuration/startup/ broker-core/src/main/java/org/apache/qpid/server/model/ broker-core/src/main/java/org/apache/qpid/server/model/adapter/ broke...

Author: rgodfrey
Date: Sun Feb 23 18:38:07 2014
New Revision: 1571054

URL: http://svn.apache.org/r1571054
Log:
QPID-5579 : [Java Broker] build attribute meta data the same way for REST API and AMQP Management

Added:
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java
      - copied, changed from r1569102, qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/NonAmqpPortAdapter.java
Removed:
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Event.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/EventType.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java
Modified:
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AmqpManagement.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Attribute.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Group.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupMember.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupProvider.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/KeyStore.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Model.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PasswordCredentialManagingAuthenticationProvider.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Plugin.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Publisher.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/TrustStore.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/User.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHostAlias.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractKeyStoreAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractPluginAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AccessControlProviderAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AmqpPortAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BindingAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConnectionAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ConsumerAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProvider.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProviderFactory.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/KeyStoreAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/PortAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/PortFactory.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/TrustStoreAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAliasAdapter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/plugin/PreferencesProviderFactory.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactory.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueArgumentsConverter.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/registry/ApplicationRegistry.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/store/JsonFileConfigStore.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/transport/TCPandSSLTransport.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/KeyStoreRecovererTest.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/startup/TrustStoreRecovererTest.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/ConfiguredObjectStateTransitionTest.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/VirtualHostTest.java
    qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProviderTest.java
    qpid/trunk/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageContentServlet.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addKeystore.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showKeyStore.html
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showTrustStore.html
    qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagement.java
    qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/ExchangeMBean.java
    qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/MBeanUtils.java
    qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/QueueMBean.java
    qpid/trunk/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/VirtualHostMBean.java
    qpid/trunk/qpid/java/broker-plugins/management-jmx/src/test/java/org/apache/qpid/server/jmx/mbeans/ExchangeMBeanTest.java
    qpid/trunk/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/ConnectionRestTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/KeyStoreRestTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/QueueRestTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/TrustStoreRestTest.java

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/startup/StoreUpgrader.java Sun Feb 23 18:38:07 2014
@@ -82,6 +82,58 @@ public abstract class StoreUpgrader
         }
     };
 
+
+    private final static StoreUpgrader UPGRADE_1_2 = new StoreUpgrader("1.2")
+    {
+        @Override
+        protected void doUpgrade(ConfigurationEntryStore store)
+        {
+            ConfigurationEntry root = store.getRootEntry();
+            Map<String, Collection<ConfigurationEntry>> children = root.getChildren();
+            Collection<ConfigurationEntry> changed =  new HashSet<ConfigurationEntry>();
+            Collection<ConfigurationEntry> keyStores = children.get("KeyStore");
+            if(keyStores != null)
+            {
+                for(ConfigurationEntry keyStore : keyStores)
+                {
+                    Map<String, Object> attributes = keyStore.getAttributes();
+                    if(attributes.containsKey("type"))
+                    {
+                        attributes = new HashMap<String, Object>(attributes);
+                        attributes.put("keyStoreType", attributes.remove("type"));
+
+                        changed.add(new ConfigurationEntry(keyStore.getId(),keyStore.getType(),attributes,keyStore.getChildrenIds(),store));
+
+                    }
+
+                }
+            }
+            Collection<ConfigurationEntry> trustStores = children.get("TrustStore");
+            if(trustStores != null)
+            {
+                for(ConfigurationEntry trustStore : trustStores)
+                {
+                    Map<String, Object> attributes = trustStore.getAttributes();
+                    if(attributes.containsKey("type"))
+                    {
+                        attributes = new HashMap<String, Object>(attributes);
+                        attributes.put("trustStoreType", attributes.remove("type"));
+
+                        changed.add(new ConfigurationEntry(trustStore.getId(),trustStore.getType(),attributes,trustStore.getChildrenIds(),store));
+
+                    }
+
+                }
+            }
+            Map<String, Object> attributes = new HashMap<String, Object>(root.getAttributes());
+            attributes.put(Broker.MODEL_VERSION, "1.3");
+            changed.add(new ConfigurationEntry(root.getId(),root.getType(),attributes,root.getChildrenIds(),store));
+
+            store.save(changed.toArray(new ConfigurationEntry[changed.size()]));
+
+        }
+    };
+
     private StoreUpgrader(String version)
     {
         _upgraders.put(version, this);

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AccessControlProvider.java Sun Feb 23 18:38:07 2014
@@ -22,10 +22,11 @@ package org.apache.qpid.server.model;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.UUID;
 
 import org.apache.qpid.server.security.AccessControl;
 
-public interface AccessControlProvider extends ConfiguredObject
+public interface AccessControlProvider<X extends AccessControlProvider<X>> extends ConfiguredObject<X>
 {
     public static final String DESCRIPTION = "description";
     public static final String STATE = "state";
@@ -36,19 +37,6 @@ public interface AccessControlProvider e
     public static final String UPDATED = "updated";
     public static final String TYPE = "type";
 
-    public static final Collection<String> AVAILABLE_ATTRIBUTES =
-            Collections.unmodifiableList(
-                    Arrays.asList(ID,
-                                  NAME,
-                                  DESCRIPTION,
-                                  STATE,
-                                  DURABLE,
-                                  LIFETIME_POLICY,
-                                  TIME_TO_LIVE,
-                                  CREATED,
-                                  UPDATED,
-                                  TYPE));
-
     //retrieve the underlying AccessControl object
     AccessControl getAccessControl();
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AmqpManagement.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AmqpManagement.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AmqpManagement.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AmqpManagement.java Sun Feb 23 18:38:07 2014
@@ -27,8 +27,8 @@ import java.lang.annotation.RetentionPol
 
 public @interface AmqpManagement
 {
-    String[] attributes();
-    String[] operations();
+    String[] attributes() default {};
+    String[] operations() default {};
     boolean managesChildren() default false; // for objects that manage children, a management node needs to be created
     boolean creatable() default true;
     String defaultImplementation() default ""; // in this case the class/interface itself is to be used

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Attribute.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Attribute.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Attribute.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Attribute.java Sun Feb 23 18:38:07 2014
@@ -21,12 +21,100 @@
 
 package org.apache.qpid.server.model;
 
-public abstract class Attribute<C extends ConfiguredObject, T>
+import java.lang.reflect.Method;
+import java.util.*;
+
+public final class Attribute<C extends ConfiguredObject, T>
 {
+    private static Map<Class<? extends ConfiguredObject>, Collection<Attribute<?,?>>> _allAttributes =
+            Collections.synchronizedMap(new HashMap<Class<? extends ConfiguredObject>, Collection<Attribute<?, ?>>>());
+
     private final String _name;
-    public Attribute(String name)
+    private final Class<T> _type;
+    private final Converter<T> _converter;
+    private final Method _getter;
+
+    private Attribute(Class<C> clazz, String name, Class<T> type, final Method getter)
     {
         _name = name;
+        _type = type;
+        _converter = getConverter(type);
+        _getter = getter;
+        addToAttributesSet(clazz, this);
+    }
+
+    private static <X> Converter<X> getConverter(final Class<X> type)
+    {
+        if(type == String.class)
+        {
+            return (Converter<X>) STRING_CONVERTER;
+        }
+        else if(type == Integer.class)
+        {
+            return (Converter<X>) INT_CONVERTER;
+        }
+        else if(type == Long.class)
+        {
+            return (Converter<X>) LONG_CONVERTER;
+        }
+        else if(type == Boolean.class)
+        {
+            return (Converter<X>) BOOLEAN_CONVERTER;
+        }
+        else if(type == UUID.class)
+        {
+            return (Converter<X>) UUID_CONVERTER;
+        }
+        else if(Enum.class.isAssignableFrom(type))
+        {
+            return (Converter<X>) new EnumConverter((Class<? extends Enum>)type);
+        }
+        else if(List.class.isAssignableFrom(type))
+        {
+            return (Converter<X>) LIST_CONVERTER;
+        }
+        else if(Map.class.isAssignableFrom(type))
+        {
+            return (Converter<X>) MAP_CONVERTER;
+        }
+        else if(Collection.class.isAssignableFrom(type))
+        {
+            return (Converter<X>) COLLECTION_CONVERTER;
+        }
+        else if(ConfiguredObject.class.isAssignableFrom(type))
+        {
+            return (Converter<X>) new ConfiguredObjectConverter(type);
+        }
+        throw new IllegalArgumentException("Cannot create attributes of type " + type.getName());
+    }
+
+    private static void addToAttributesSet(final Class<? extends ConfiguredObject> clazz, final Attribute<?, ?> attribute)
+    {
+        synchronized (_allAttributes)
+        {
+            Collection<Attribute<?,?>> classAttributes = _allAttributes.get(clazz);
+            if(classAttributes == null)
+            {
+                classAttributes = new ArrayList<Attribute<?, ?>>();
+                for(Map.Entry<Class<? extends ConfiguredObject>, Collection<Attribute<?,?>>> entry : _allAttributes.entrySet())
+                {
+                    if(entry.getKey().isAssignableFrom(clazz))
+                    {
+                        classAttributes.addAll(entry.getValue());
+                    }
+                }
+                _allAttributes.put(clazz, classAttributes);
+
+            }
+            for(Map.Entry<Class<? extends ConfiguredObject>, Collection<Attribute<?,?>>> entry : _allAttributes.entrySet())
+            {
+                if(clazz.isAssignableFrom(entry.getKey()))
+                {
+                    entry.getValue().add(attribute);
+                }
+            }
+
+        }
     }
 
     public String getName()
@@ -34,166 +122,466 @@ public abstract class Attribute<C extend
         return _name;
     }
 
-    abstract public Class<T> getType();
+    public Class<T> getType()
+    {
+        return _type;
+    }
     
     public T getValue(C configuredObject)
     {
         Object o = configuredObject.getAttribute(_name);
-        if(getType().isInstance(o))            
-        {
-            return (T) o;
-        }
-        return null;
+        return _converter.convert(o);
     }
-    
-    public T setValue(T expected, T desired, C configuredObject)
+
+
+    public T getValue(Map<String, Object> attributeMap)
     {
-        return (T) configuredObject.setAttribute(_name, expected, desired);
+        Object o = attributeMap.get(_name);
+        return _converter.convert(o);
     }
 
-    abstract public T setValue(String stringValue, C configuredObject);
 
-    static class StringAttribute<C extends ConfiguredObject> extends Attribute<C, String>
+    @Override
+    public String toString()
     {
+        return _name;
+    }
 
-        public StringAttribute(String name)
+    private static interface Converter<T>
+    {
+        T convert(Object o);
+    }
+
+    private static final Converter<String> STRING_CONVERTER = new Converter<String>()
         {
-            super(name);
-        }
+            @Override
+            public String convert(final Object o)
+            {
+                return o == null ? null : o.toString();
+            }
+        };
 
+    private static final Converter<UUID> UUID_CONVERTER = new Converter<UUID>()
+    {
         @Override
-        public Class<String> getType()
+        public UUID convert(final Object o)
         {
-            return String.class;
+            if(o instanceof UUID)
+            {
+                return (UUID)o;
+            }
+            else if(o instanceof String)
+            {
+                return UUID.fromString((String)o);
+            }
+            else if(o == null)
+            {
+                return null;
+            }
+            else
+            {
+                throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a UUID");
+            }
         }
+    };
+
+    private static final Converter<Long> LONG_CONVERTER = new Converter<Long>()
+    {
 
         @Override
-        public String setValue(String stringValue, C configuredObject)
+        public Long convert(final Object o)
         {
-            return setValue(getValue(configuredObject), stringValue, configuredObject);
+            if(o instanceof Long)
+            {
+                return (Long)o;
+            }
+            else if(o instanceof Number)
+            {
+                return ((Number)o).longValue();
+            }
+            else if(o instanceof String)
+            {
+                return Long.valueOf((String)o);
+            }
+            else if(o == null)
+            {
+                return null;
+            }
+            else
+            {
+                throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a Long");
+            }
         }
+    };
 
-    }
-    
-    static class IntegerAttribute<C extends ConfiguredObject> extends Attribute<C, Integer>
+    private static final Converter<Integer> INT_CONVERTER = new Converter<Integer>()
     {
 
-        public IntegerAttribute(String name)
+        @Override
+        public Integer convert(final Object o)
         {
-            super(name);
+            if(o instanceof Integer)
+            {
+                return (Integer)o;
+            }
+            else if(o instanceof Number)
+            {
+                return ((Number)o).intValue();
+            }
+            else if(o instanceof String)
+            {
+                return Integer.valueOf((String)o);
+            }
+            else if(o == null)
+            {
+                return null;
+            }
+            else
+            {
+                throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to an Integer");
+            }
         }
+    };
+
+    private static final Converter<Boolean> BOOLEAN_CONVERTER = new Converter<Boolean>()
+    {
 
         @Override
-        public Class<Integer> getType()
+        public Boolean convert(final Object o)
         {
-            return Integer.class;
+            if(o instanceof Boolean)
+            {
+                return (Boolean)o;
+            }
+            else if(o instanceof String)
+            {
+                return Boolean.valueOf((String)o);
+            }
+            else if(o == null)
+            {
+                return null;
+            }
+            else
+            {
+                throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a Boolean");
+            }
         }
+    };
 
+    private static final Converter<List> LIST_CONVERTER = new Converter<List>()
+    {
         @Override
-        public Integer setValue(String stringValue, C configuredObject)
+        public List convert(final Object o)
         {
-            try
+            if(o instanceof List)
+            {
+                return (List)o;
+            }
+            else if(o == null)
             {
-                Integer val = Integer.valueOf(stringValue);
-                return setValue(getValue(configuredObject), val, configuredObject);
+                return null;
             }
-            catch (NumberFormatException e)
+            else
             {
-                throw new IllegalArgumentException(e);
+                throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a List");
             }
         }
-    }
-
+    };
 
-    static class LongAttribute<C extends ConfiguredObject> extends Attribute<C, Long>
+    private static final Converter<Collection> COLLECTION_CONVERTER = new Converter<Collection>()
     {
-
-        public LongAttribute(String name)
+        @Override
+        public Collection convert(final Object o)
         {
-            super(name);
+            if(o instanceof Collection)
+            {
+                return (Collection)o;
+            }
+            else if(o == null)
+            {
+                return null;
+            }
+            else
+            {
+                throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a List");
+            }
         }
+    };
 
+    private static final Converter<Map> MAP_CONVERTER = new Converter<Map>()
+    {
         @Override
-        public Class<Long> getType()
+        public Map convert(final Object o)
         {
-            return Long.class;
+            if(o instanceof Map)
+            {
+                return (Map)o;
+            }
+            else if(o == null)
+            {
+                return null;
+            }
+            else
+            {
+                throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a Map");
+            }
+        }
+    };
+
+    private static final class EnumConverter<X extends Enum<X>> implements Converter<X>
+    {
+        private final Class<X> _klazz;
+
+        private EnumConverter(final Class<X> klazz)
+        {
+            _klazz = klazz;
         }
 
         @Override
-        public Long setValue(String stringValue, C configuredObject)
+        public X convert(final Object o)
         {
-            try
+            if(o == null)
+            {
+                return null;
+            }
+            else if(_klazz.isInstance(o))
+            {
+                return (X) o;
+            }
+            else if(o instanceof String)
             {
-                Long val = Long.valueOf(stringValue);
-                return setValue(getValue(configuredObject), val, configuredObject);
+                return Enum.valueOf(_klazz,(String)o);
             }
-            catch (NumberFormatException e)
+            else
             {
-                throw new IllegalArgumentException(e);
+                throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a " + _klazz.getName());
             }
         }
     }
 
-
-    static class DoubleAttribute<C extends ConfiguredObject> extends Attribute<C, Double>
+    private static final class ConfiguredObjectConverter<X extends ConfiguredObject<X>> implements Converter<X>
     {
+        private final Class<X> _klazz;
 
-        public DoubleAttribute(String name)
+        private ConfiguredObjectConverter(final Class<X> klazz)
         {
-            super(name);
+            _klazz = klazz;
         }
 
         @Override
-        public Class<Double> getType()
+        public X convert(final Object o)
         {
-            return Double.class;
+            if(o == null)
+            {
+                return null;
+            }
+            else if(_klazz.isInstance(o))
+            {
+                return (X) o;
+            }
+            // TODO - traverse tree based on UUID
+            else
+            {
+                throw new IllegalArgumentException("Cannot convert type " + o.getClass() + " to a " + _klazz.getName());
+            }
         }
+    }
 
-        @Override
-        public Double setValue(String stringValue, C configuredObject)
+
+    public static <X extends ConfiguredObject> Collection<String> getAttributeNames(Class<X> clazz)
+    {
+        final Collection<Attribute<? super X, ?>> attrs = getAttributes(clazz);
+
+        return new AbstractCollection<String>()
         {
-            try
+            @Override
+            public Iterator<String> iterator()
             {
-                Double val = Double.valueOf(stringValue);
-                return setValue(getValue(configuredObject), val, configuredObject);
+                final Iterator<Attribute<? super X, ?>> underlyingIterator = attrs.iterator();
+                return new Iterator<String>()
+                {
+                    @Override
+                    public boolean hasNext()
+                    {
+                        return underlyingIterator.hasNext();
+                    }
+
+                    @Override
+                    public String next()
+                    {
+                        return underlyingIterator.next().getName();
+                    }
+
+                    @Override
+                    public void remove()
+                    {
+                        throw new UnsupportedOperationException();
+                    }
+                };
             }
-            catch (NumberFormatException e)
+
+            @Override
+            public int size()
             {
-                throw new IllegalArgumentException(e);
+                return attrs.size();
             }
-        }
-    }
+        };
 
+    }
 
-    static class FloatAttribute<C extends ConfiguredObject> extends Attribute<C, Float>
+    protected static <X extends ConfiguredObject> Collection<Attribute<? super X, ?>> getAttributes(final Class<X> clazz)
     {
+        if(!_allAttributes.containsKey(clazz))
+        {
+            processAttributes(clazz);
+        }
+        final Collection<Attribute<? super X, ?>> attributes = (Collection) _allAttributes.get(clazz);
+        return attributes;
+    }
 
-        public FloatAttribute(String name)
+    private static <X extends ConfiguredObject> void processAttributes(final Class<X> clazz)
+    {
+        if(_allAttributes.containsKey(clazz))
         {
-            super(name);
+            return;
         }
 
-        @Override
-        public Class<Float> getType()
+
+        for(Class<?> parent : clazz.getInterfaces())
+        {
+            if(ConfiguredObject.class.isAssignableFrom(parent))
+            {
+                processAttributes((Class<? extends ConfiguredObject>)parent);
+            }
+        }
+        final Class<? super X> superclass = clazz.getSuperclass();
+        if(superclass != null && ConfiguredObject.class.isAssignableFrom(superclass))
         {
-            return Float.class;
+            processAttributes((Class<? extends ConfiguredObject>) superclass);
         }
 
-        @Override
-        public Float setValue(String stringValue, C configuredObject)
+        final ArrayList<Attribute<?, ?>> attributeList = new ArrayList<Attribute<?, ?>>();
+        _allAttributes.put(clazz, attributeList);
+
+        for(Class<?> parent : clazz.getInterfaces())
+        {
+            if(ConfiguredObject.class.isAssignableFrom(parent))
+            {
+                Collection<Attribute<?, ?>> attrs = _allAttributes.get(parent);
+                for(Attribute<?,?> attr : attrs)
+                {
+                    if(!attributeList.contains(attr))
+                    {
+                        attributeList.add(attr);
+                    }
+                }
+            }
+        }
+        if(superclass != null && ConfiguredObject.class.isAssignableFrom(superclass))
         {
-            try
+            Collection<Attribute<?, ?>> attrs = _allAttributes.get(superclass);
+            for(Attribute<?,?> attr : attrs)
             {
-                Float val = Float.valueOf(stringValue);
-                return setValue(getValue(configuredObject), val, configuredObject);
+                if(!attributeList.contains(attr))
+                {
+                    attributeList.add(attr);
+                }
             }
-            catch (NumberFormatException e)
+
+        }
+
+
+        for(Method m : clazz.getDeclaredMethods())
+        {
+            ManagedAttribute annotation = m.getAnnotation(ManagedAttribute.class);
+            if(annotation != null)
             {
-                throw new IllegalArgumentException(e);
+                if(m.getParameterTypes().length != 0)
+                {
+                    throw new IllegalArgumentException("ManagedAttribute annotation should only be added to no-arg getters");
+                }
+                Class<?> type = m.getReturnType();
+                if(type.isPrimitive())
+                {
+                    if(type == Boolean.TYPE)
+                    {
+                        type = Boolean.class;
+                    }
+                    else if(type == Byte.TYPE)
+                    {
+                        type = Byte.class;
+                    }
+                    else if(type == Short.TYPE)
+                    {
+                        type = Short.class;
+                    }
+                    else if(type == Integer.TYPE)
+                    {
+                        type = Integer.class;
+                    }
+                    else if(type == Long.TYPE)
+                    {
+                        type = Long.class;
+                    }
+                    else if(type == Float.TYPE)
+                    {
+                        type = Float.class;
+                    }
+                    else if(type == Double.TYPE)
+                    {
+                        type = Double.class;
+                    }
+                    else if(type == Character.TYPE)
+                    {
+                        type = Character.class;
+                    }
+                }
+                String methodName = m.getName();
+                String baseName;
+
+                if(type == Boolean.class )
+                {
+                    if((methodName.startsWith("get") || methodName.startsWith("has")) && methodName.length() >= 4)
+                    {
+                        baseName = methodName.substring(3);
+                    }
+                    else if(methodName.startsWith("is") && methodName.length() >= 3)
+                    {
+                        baseName = methodName.substring(2);
+                    }
+                    else
+                    {
+                        throw new IllegalArgumentException("Method name " + methodName + " does not conform to the required pattern for ManagedAttributes");
+                    }
+                }
+                else
+                {
+                    if(methodName.startsWith("get") && methodName.length() >= 4)
+                    {
+                        baseName = methodName.substring(3);
+                    }
+                    else
+                    {
+                        throw new IllegalArgumentException("Method name " + methodName + " does not conform to the required pattern for ManagedAttributes");
+                    }
+                }
+
+                String name = baseName.length() == 1 ? baseName.toLowerCase() : baseName.substring(0,1).toLowerCase() + baseName.substring(1);
+                name = name.replace('_','.');
+                Attribute<X,?> newAttr = new Attribute(clazz,name,type,m);
+
             }
         }
     }
 
+    public static void main(String[] args)
+    {
+        System.err.println(Attribute.getAttributeNames(KeyStore.class));
+        System.err.println(Attribute.getAttributeNames(Binding.class));
+        System.err.println(Attribute.getAttributeNames(Exchange.class));
+        System.err.println(Attribute.getAttributeNames(Broker.class));
+
+    }
 
 
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java Sun Feb 23 18:38:07 2014
@@ -26,7 +26,7 @@ import java.util.Collections;
 
 import org.apache.qpid.server.security.SubjectCreator;
 
-public interface AuthenticationProvider extends ConfiguredObject
+public interface AuthenticationProvider<X extends AuthenticationProvider<X>> extends ConfiguredObject<X>
 {
 
     public static final String DESCRIPTION = "description";
@@ -37,21 +37,6 @@ public interface AuthenticationProvider 
     public static final String CREATED = "created";
     public static final String UPDATED = "updated";
 
-    public static final String TYPE = "type";
-
-    public static final Collection<String> AVAILABLE_ATTRIBUTES =
-            Collections.unmodifiableList(
-                    Arrays.asList(ID,
-                                  NAME,
-                                  DESCRIPTION,
-                                  STATE,
-                                  DURABLE,
-                                  LIFETIME_POLICY,
-                                  TIME_TO_LIVE,
-                                  CREATED,
-                                  UPDATED,
-                                  TYPE
-                                  ));
     //children
     Collection<VirtualHostAlias> getVirtualHostPortBindings();
 

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Binding.java Sun Feb 23 18:38:07 2014
@@ -25,7 +25,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
 
-public interface Binding extends ConfiguredObject
+public interface Binding<X extends Binding<X>> extends ConfiguredObject<X>
 {
 
     public String MATCHED_BYTES = "matchedBytes";
@@ -50,23 +50,13 @@ public interface Binding extends Configu
     public String QUEUE = "queue";
     public String EXCHANGE = "exchange";
 
-    public static final Collection<String> AVAILABLE_ATTRIBUTES =
-            Collections.unmodifiableCollection(
-                    Arrays.asList(ID,
-                                  NAME,
-                                  STATE,
-                                  DURABLE,
-                                  LIFETIME_POLICY,
-                                  TIME_TO_LIVE,
-                                  CREATED,
-                                  UPDATED,
-                                  EXCHANGE,
-                                  QUEUE,
-                                  ARGUMENTS)
-            );
-
+    @ManagedAttribute
+    Queue getQueue();
 
+    @ManagedAttribute
+    Exchange getExchange();
 
+    @ManagedAttribute
     Map<String,Object> getArguments();
 
     void delete();

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java Sun Feb 23 18:38:07 2014
@@ -32,7 +32,7 @@ import org.apache.qpid.server.security.S
 import org.apache.qpid.server.security.SubjectCreator;
 import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
 
-public interface Broker extends ConfiguredObject
+public interface Broker<X extends Broker<X>> extends ConfiguredObject<X>
 {
 
     String BUILD_VERSION = "buildVersion";
@@ -45,7 +45,7 @@ public interface Broker extends Configur
     String SUPPORTED_VIRTUALHOST_TYPES = "supportedVirtualHostTypes";
     String SUPPORTED_VIRTUALHOST_STORE_TYPES = "supportedVirtualHostStoreTypes";
     String SUPPORTED_AUTHENTICATION_PROVIDERS = "supportedAuthenticationProviders";
-    String SUPPORTED_PREFERENCES_PROVIDERS_TYPES = "supportedPreferencesProviderTypes";
+    String SUPPORTED_PREFERENCES_PROVIDER_TYPES = "supportedPreferencesProviderTypes";
     String CREATED = "created";
     String DURABLE = "durable";
     String LIFETIME_POLICY = "lifetimePolicy";
@@ -80,63 +80,116 @@ public interface Broker extends Configur
     String VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE = "virtualhost.storeTransactionOpenTimeoutClose";
     String VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_WARN  = "virtualhost.storeTransactionOpenTimeoutWarn";
 
-    // Attributes
-    Collection<String> AVAILABLE_ATTRIBUTES =
-            Collections.unmodifiableList(
-                Arrays.asList(BUILD_VERSION,
-                              BYTES_RETAINED,
-                              OPERATING_SYSTEM,
-                              PLATFORM,
-                              PROCESS_PID,
-                              PRODUCT_VERSION,
-                              SUPPORTED_BROKER_STORE_TYPES,
-                              SUPPORTED_VIRTUALHOST_STORE_TYPES,
-                              SUPPORTED_AUTHENTICATION_PROVIDERS,
-                              SUPPORTED_PREFERENCES_PROVIDERS_TYPES,
-                              CREATED,
-                              DURABLE,
-                              ID,
-                              LIFETIME_POLICY,
-                              NAME,
-                              STATE,
-                              TIME_TO_LIVE,
-                              UPDATED,
-                              DEFAULT_VIRTUAL_HOST,
-                              QUEUE_ALERT_THRESHOLD_MESSAGE_AGE,
-                              QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES,
-                              QUEUE_ALERT_THRESHOLD_QUEUE_DEPTH_BYTES,
-                              QUEUE_ALERT_THRESHOLD_MESSAGE_SIZE,
-                              QUEUE_ALERT_REPEAT_GAP,
-                              QUEUE_FLOW_CONTROL_SIZE_BYTES,
-                              QUEUE_FLOW_CONTROL_RESUME_SIZE_BYTES,
-                              QUEUE_MAXIMUM_DELIVERY_ATTEMPTS,
-                              QUEUE_DEAD_LETTER_QUEUE_ENABLED,
-                              VIRTUALHOST_HOUSEKEEPING_CHECK_PERIOD,
-                              CONNECTION_SESSION_COUNT_LIMIT,
-                              CONNECTION_HEART_BEAT_DELAY,
-                              CONNECTION_CLOSE_WHEN_NO_ROUTE,
-                              STATISTICS_REPORTING_PERIOD,
-                              STATISTICS_REPORTING_RESET_ENABLED,
-                              STORE_TYPE,
-                              STORE_VERSION,
-                              STORE_PATH,
-                              MODEL_VERSION,
-                              VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE,
-                              VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_WARN,
-                              VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE,
-                              VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_WARN
-                              ));
+    @ManagedAttribute
+    String getBuildVersion();
+
+    @ManagedAttribute
+    String getOperatingSystem();
+
+    @ManagedAttribute
+    String getPlatform();
+
+    @ManagedAttribute
+    String getProcessPid();
+
+    @ManagedAttribute
+    String getProductVersion();
+
+    @ManagedAttribute
+    Collection<String> getSupportedBrokerStoreTypes();
+
+    @ManagedAttribute
+    Collection<String> getSupportedVirtualHostStoreTypes();
+
+    @ManagedAttribute
+    Collection<String> getSupportedAuthenticationProviders();
+
+    @ManagedAttribute
+    Collection<String> getSupportedPreferencesProviderTypes();
+
+    @ManagedAttribute
+    String getDefaultVirtualHost();
+
+    @ManagedAttribute
+    int getQueue_alertThresholdMessageAge();
+
+    @ManagedAttribute
+    long getQueue_alertThresholdQueueDepthMessages();
+
+    @ManagedAttribute
+    long getQueue_alertThresholdQueueDepthBytes();
+
+    @ManagedAttribute
+    long getQueue_alertThresholdMessageSize();
+
+    @ManagedAttribute
+    long getQueue_alertRepeatGap();
+
+    @ManagedAttribute
+    long getQueue_flowControlSizeBytes();
+
+    @ManagedAttribute
+    long getQueue_flowResumeSizeBytes();
+
+    @ManagedAttribute
+    int getQueue_maximumDeliveryAttempts();
+
+    @ManagedAttribute
+    boolean isQueue_deadLetterQueueEnabled();
+
+    @ManagedAttribute
+    long getVirtualhost_housekeepingCheckPeriod();
+
+    @ManagedAttribute
+    int getConnection_sessionCountLimit();
+
+    @ManagedAttribute
+    int getConnection_heartBeatDelay();
+
+    @ManagedAttribute
+    boolean getConnection_closeWhenNoRoute();
+
+    @ManagedAttribute
+    int getStatisticsReportingPeriod();
+
+    @ManagedAttribute
+    boolean getStatisticsReportingResetEnabled();
+
+    @ManagedAttribute
+    String getStoreType();
+
+    @ManagedAttribute
+    int getStoreVersion();
+
+    @ManagedAttribute
+    String getStorePath();
+
+    @ManagedAttribute
+    String getModelVersion();
+
+    @ManagedAttribute
+    long getVirtualhost_storeTransactionIdleTimeoutClose();
+
+    @ManagedAttribute
+    long getVirtualhost_storeTransactionIdleTimeoutWarn();
+
+    @ManagedAttribute
+    long getVirtualhost_storeTransactionOpenTimeoutClose();
+
+    @ManagedAttribute
+    long getVirtualhost_storeTransactionOpenTimeoutWarn();
+
 
     //children
-    Collection < VirtualHost > getVirtualHosts();
+    Collection < VirtualHost<?> > getVirtualHosts();
 
-    Collection<Port> getPorts();
+    Collection<Port<?>> getPorts();
 
-    Collection<AuthenticationProvider> getAuthenticationProviders();
+    Collection<AuthenticationProvider<?>> getAuthenticationProviders();
 
-    Collection<AccessControlProvider> getAccessControlProviders();
+    Collection<AccessControlProvider<?>> getAccessControlProviders();
 
-    Collection<GroupProvider> getGroupProviders();
+    Collection<GroupProvider<?>> getGroupProviders();
 
     /**
      * A temporary hack to expose root message logger via broker instance.
@@ -155,25 +208,25 @@ public interface Broker extends Configur
      */
     LogRecorder getLogRecorder();
 
-    AuthenticationProvider findAuthenticationProviderByName(String authenticationProviderName);
+    AuthenticationProvider<?> findAuthenticationProviderByName(String authenticationProviderName);
 
-    VirtualHost findVirtualHostByName(String name);
+    VirtualHost<?> findVirtualHostByName(String name);
 
-    KeyStore findKeyStoreByName(String name);
+    KeyStore<?> findKeyStoreByName(String name);
 
-    TrustStore findTrustStoreByName(String name);
+    TrustStore<?> findTrustStoreByName(String name);
 
     /**
      * Get the SubjectCreator for the given socket address.
      * TODO: move the authentication related functionality into host aliases and AuthenticationProviders
      *
-     * @param address The (listening) socket address for which the AuthenticationManager is required
+     * @param localAddress The (listening) socket address for which the AuthenticationManager is required
      */
     SubjectCreator getSubjectCreator(SocketAddress localAddress);
 
-    Collection<KeyStore> getKeyStores();
+    Collection<KeyStore<?>> getKeyStores();
 
-    Collection<TrustStore> getTrustStores();
+    Collection<TrustStore<?>> getTrustStores();
 
     /*
      * TODO: Remove this method. Eventually the broker will become a registry.
@@ -184,5 +237,5 @@ public interface Broker extends Configur
 
     boolean isManagementMode();
 
-    AuthenticationProvider getAuthenticationProvider(SocketAddress localAddress);
+    AuthenticationProvider<?> getAuthenticationProvider(SocketAddress localAddress);
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java Sun Feb 23 18:38:07 2014
@@ -25,27 +25,28 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.UUID;
 
-@AmqpManagement(
-        attributes = {
-                ConfiguredObject.ID,
-                ConfiguredObject.NAME
-        },
-        operations = {},
-        creatable = false
-)
+@AmqpManagement( creatable = false )
 /**
  * An object that can be "managed" (eg via the web interface) and usually read from configuration.
  */
-public interface ConfiguredObject
+public interface ConfiguredObject<X extends ConfiguredObject<X>>
 {
     public static final String ID = "id";
     public static final String NAME = "name";
-//    public static final String TYPE = "type";
+    public static final String TYPE = "type";
+    public static final String DESCRIPTION = "description";
+    public static final String LAST_UPDATED_BY = "lastUpdatedBy";
+    public static final String LAST_UPDATED_TIME = "lastUpdatedTime";
+    public static final String CREATED_BY = "createdBy";
+    public static final String CREATED_TIME = "createdTime";
+
+
     /**
      * Get the universally unique identifier for the object
      *
      * @return the objects id
      */
+    @ManagedAttribute
     UUID getId();
 
     /**
@@ -53,9 +54,28 @@ public interface ConfiguredObject
      *
      * @return the name of the object
      */
+    @ManagedAttribute
     String getName();
 
 
+    @ManagedAttribute
+    String getDescription();
+
+    @ManagedAttribute
+    String getType();
+
+    @ManagedAttribute
+    String getLastUpdatedBy();
+
+    @ManagedAttribute
+    long getLastUpdatedTime();
+
+    @ManagedAttribute
+    String getCreatedBy();
+
+    @ManagedAttribute
+    long getCreatedTime();
+
     /**
      * Attempt to change the name of the object
      *
@@ -109,7 +129,8 @@ public interface ConfiguredObject
      *
      * @return the actual state of the object
      */
-    State getActualState();
+    @ManagedAttribute
+    State getState();
 
 
     /**
@@ -142,6 +163,7 @@ public interface ConfiguredObject
      *
      * @return the durability
      */
+    @ManagedAttribute
     boolean isDurable();
 
     /**
@@ -162,6 +184,7 @@ public interface ConfiguredObject
      *
      * @return the lifetime policy
      */
+    @ManagedAttribute
     LifetimePolicy getLifetimePolicy();
 
     /**
@@ -183,6 +206,7 @@ public interface ConfiguredObject
      *
      * @return the time to live
      */
+    @ManagedAttribute
     long getTimeToLive();
 
     /**
@@ -222,6 +246,8 @@ public interface ConfiguredObject
      */
     Object getAttribute(String name);
 
+    <T> T getAttribute(Attribute<? super X, T> attr);
+
     /**
      * Return the map containing only explicitly set attributes
      *

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Connection.java Sun Feb 23 18:38:07 2014
@@ -24,33 +24,8 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
-@AmqpManagement(
-        attributes = {
-                Connection.ID,
-                Connection.NAME,
-                Connection.STATE,
-                Connection.DURABLE,
-                Connection.LIFETIME_POLICY,
-                Connection.TIME_TO_LIVE,
-                Connection.CREATED,
-                Connection.UPDATED,
-                Connection.CLIENT_ID,
-                Connection.CLIENT_VERSION,
-                Connection.INCOMING,
-                Connection.LOCAL_ADDRESS,
-                Connection.PRINCIPAL,
-                Connection.PROPERTIES,
-                Connection.REMOTE_ADDRESS,
-                Connection.REMOTE_PROCESS_NAME,
-                Connection.REMOTE_PROCESS_PID,
-                Connection.SESSION_COUNT_LIMIT,
-                Connection.TRANSPORT,
-                Connection.PORT
-        },
-        operations = {},
-        creatable = false
-)
-public interface Connection extends ConfiguredObject
+@AmqpManagement( creatable = false )
+public interface Connection<X extends Connection<X>> extends ConfiguredObject<X>
 {
 
     // Statistics
@@ -106,29 +81,38 @@ public interface Connection extends Conf
     /** Name of port associated with the connection */
     public static final String PORT = "port";
 
+    @ManagedAttribute
+    String getClientId();
 
-    public static final Collection<String> AVAILABLE_ATTRIBUTES =
-            Collections.unmodifiableCollection(
-                    Arrays.asList(  ID,
-                                    NAME,
-                                    STATE,
-                                    DURABLE,
-                                    LIFETIME_POLICY,
-                                    TIME_TO_LIVE,
-                                    CREATED,
-                                    UPDATED,
-                                    CLIENT_ID,
-                                    CLIENT_VERSION,
-                                    INCOMING,
-                                    LOCAL_ADDRESS,
-                                    PRINCIPAL,
-                                    PROPERTIES,
-                                    REMOTE_ADDRESS,
-                                    REMOTE_PROCESS_NAME,
-                                    REMOTE_PROCESS_PID,
-                                    SESSION_COUNT_LIMIT,
-                                    TRANSPORT,
-                                    PORT));
+    @ManagedAttribute
+    String getClientVersion();
+
+    @ManagedAttribute
+    boolean isIncoming();
+
+    @ManagedAttribute
+    String getLocalAddress();
+
+    @ManagedAttribute
+    String getPrincipal();
+
+    @ManagedAttribute
+    String getRemoteAddress();
+
+    @ManagedAttribute
+    String getRemoteProcessName();
+
+    @ManagedAttribute
+    String getRemoteProcessPid();
+
+    @ManagedAttribute
+    long getSessionCountLimit();
+
+    @ManagedAttribute
+    Transport getTransport();
+
+    @ManagedAttribute
+    Port getPort();
 
     //children
     Collection<Session> getSessions();

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Consumer.java Sun Feb 23 18:38:07 2014
@@ -24,7 +24,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
-public interface Consumer extends ConfiguredObject
+public interface Consumer<X extends Consumer<X>> extends ConfiguredObject<X>
 {
     public String DISTRIBUTION_MODE = "distributionMode";
     public String EXCLUSIVE = "exclusive";
@@ -38,21 +38,22 @@ public interface Consumer extends Config
     public String TIME_TO_LIVE = "timeToLive";
     public String UPDATED = "updated";
 
-    public Collection<String> AVAILABLE_ATTRIBUTES =
-            Collections.unmodifiableCollection(
-                    Arrays.asList(ID,
-                                  NAME,
-                                  STATE,
-                                  DURABLE,
-                                  LIFETIME_POLICY,
-                                  TIME_TO_LIVE,
-                                  CREATED,
-                                  UPDATED,
-                                  DISTRIBUTION_MODE,
-                                  SETTLEMENT_MODE,
-                                  EXCLUSIVE,
-                                  NO_LOCAL,
-                                  SELECTOR));
+    @ManagedAttribute
+    String getDistributionMode();
+
+    @ManagedAttribute
+    String getSettlementMode();
+
+    @ManagedAttribute
+    boolean isExclusive();
+
+    @ManagedAttribute
+    boolean isNoLocal();
+
+    @ManagedAttribute
+    String getSelector();
+
+
 
     public String BYTES_OUT = "bytesOut";
     public String MESSAGES_OUT = "messagesOut";

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Exchange.java Sun Feb 23 18:38:07 2014
@@ -25,23 +25,9 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
 
-@AmqpManagement(
-        attributes = {
-                Exchange.ID,
-                Exchange.NAME,
-                Exchange.STATE,
-                Exchange.DURABLE,
-                Exchange.LIFETIME_POLICY,
-                Exchange.TIME_TO_LIVE,
-                Exchange.CREATED,
-                Exchange.UPDATED,
-                Exchange.ALTERNATE_EXCHANGE,
-                Exchange.TYPE
-        },
-        operations = {}
-)
+@AmqpManagement
 
-public interface Exchange extends ConfiguredObject
+public interface Exchange<X extends Exchange<X>> extends ConfiguredObject<X>
 {
     String BINDING_COUNT = "bindingCount";
     String BYTES_DROPPED = "bytesDropped";
@@ -68,25 +54,11 @@ public interface Exchange extends Config
     String TIME_TO_LIVE                         = "timeToLive";
     String UPDATED                              = "updated";
     String ALTERNATE_EXCHANGE                   = "alternateExchange";
-    String TYPE                                 = "type";
 
     // Attributes
-    public static final Collection<String> AVAILABLE_ATTRIBUTES =
-            Collections.unmodifiableList(
-                    Arrays.asList(
-                            ID,
-                            NAME,
-                            STATE,
-                            DURABLE,
-                            LIFETIME_POLICY,
-                            TIME_TO_LIVE,
-                            CREATED,
-                            UPDATED,
-                            ALTERNATE_EXCHANGE,
-                            TYPE
-                    ));
 
-    String getExchangeType();
+    @ManagedAttribute
+    Exchange<?> getAlternateExchange();
 
     //children
     Collection<Binding> getBindings();

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Group.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Group.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Group.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Group.java Sun Feb 23 18:38:07 2014
@@ -19,11 +19,7 @@
  */
 package org.apache.qpid.server.model;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-public interface Group extends ConfiguredObject
+public interface Group<X extends Group<X>> extends ConfiguredObject<X>
 {
     String CREATED         = "created";
     String DURABLE         = "durable";
@@ -32,19 +28,4 @@ public interface Group extends Configure
     String TIME_TO_LIVE    = "timeToLive";
     String UPDATED         = "updated";
 
-    // Attributes
-    public static final Collection<String> AVAILABLE_ATTRIBUTES =
-           Collections.unmodifiableList(
-                   Arrays.asList(
-                           ID,
-                           NAME,
-                           STATE,
-                           DURABLE,
-                           LIFETIME_POLICY,
-                           TIME_TO_LIVE,
-                           CREATED,
-                           UPDATED
-                   ));
-
-
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupMember.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupMember.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupMember.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupMember.java Sun Feb 23 18:38:07 2014
@@ -23,7 +23,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
-public interface GroupMember extends ConfiguredObject
+public interface GroupMember<X extends GroupMember<X>> extends ConfiguredObject<X>
 {
     String CREATED         = "created";
     String DURABLE         = "durable";
@@ -32,19 +32,4 @@ public interface GroupMember extends Con
     String TIME_TO_LIVE    = "timeToLive";
     String UPDATED         = "updated";
 
-    // Attributes
-    public static final Collection<String> AVAILABLE_ATTRIBUTES =
-           Collections.unmodifiableList(
-                   Arrays.asList(
-                           ID,
-                           NAME,
-                           STATE,
-                           DURABLE,
-                           LIFETIME_POLICY,
-                           TIME_TO_LIVE,
-                           CREATED,
-                           UPDATED
-                   ));
-
-
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupProvider.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupProvider.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupProvider.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupProvider.java Sun Feb 23 18:38:07 2014
@@ -25,7 +25,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Set;
 
-public interface GroupProvider extends ConfiguredObject
+public interface GroupProvider<X extends GroupProvider<X>> extends ConfiguredObject<X>
 {
     public static final String DESCRIPTION = "description";
     public static final String STATE = "state";

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/KeyStore.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/KeyStore.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/KeyStore.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/KeyStore.java Sun Feb 23 18:38:07 2014
@@ -26,7 +26,7 @@ import java.util.Collection;
 import java.util.Collections;
 import javax.net.ssl.KeyManager;
 
-public interface KeyStore extends ConfiguredObject
+public interface KeyStore<X extends KeyStore<X>> extends ConfiguredObject<X>
 {
     String DURABLE = "durable";
     String LIFETIME_POLICY = "lifetimePolicy";
@@ -38,30 +38,43 @@ public interface KeyStore extends Config
 
     String PATH = "path";
     String PASSWORD = "password";
-    String TYPE = "type";
+    String KEY_STORE_TYPE = "keyStoreType";
     String CERTIFICATE_ALIAS = "certificateAlias";
     String KEY_MANAGER_FACTORY_ALGORITHM = "keyManagerFactoryAlgorithm";
 
     public static final Collection<String> AVAILABLE_ATTRIBUTES =
             Collections.unmodifiableList(
-                Arrays.asList(
-                              ID,
-                              NAME,
-                              STATE,
-                              DURABLE,
-                              LIFETIME_POLICY,
-                              TIME_TO_LIVE,
-                              CREATED,
-                              UPDATED,
-                              DESCRIPTION,
-                              PATH,
-                              PASSWORD,
-                              TYPE,
-                              CERTIFICATE_ALIAS,
-                              KEY_MANAGER_FACTORY_ALGORITHM
-                              ));
+                    Arrays.asList(
+                            ID,
+                            NAME,
+                            STATE,
+                            DURABLE,
+                            LIFETIME_POLICY,
+                            TIME_TO_LIVE,
+                            CREATED,
+                            UPDATED,
+                            DESCRIPTION,
+                            PATH,
+                            PASSWORD,
+                            KEY_STORE_TYPE,
+                            CERTIFICATE_ALIAS,
+                            KEY_MANAGER_FACTORY_ALGORITHM
+                                 ));
 
+    @ManagedAttribute( secure = true )
     public String getPassword();
+    
+    @ManagedAttribute
+    public String getPath();
+
+    @ManagedAttribute
+    public String getCertificateAlias();
+
+    @ManagedAttribute
+    public String getKeyManagerFactoryAlgorithm();
+
+    @ManagedAttribute
+    public String getKeyStoreType();
 
     public void setPassword(String password);
 

Added: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java?rev=1571054&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java (added)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java Sun Feb 23 18:38:07 2014
@@ -0,0 +1,32 @@
+package org.apache.qpid.server.model;
+/*
+ *
+ * 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.
+ *
+ */
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+
+public @interface ManagedAttribute
+{
+    boolean secure() default false;
+    boolean derived() default false;
+}

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Model.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Model.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Model.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Model.java Sun Feb 23 18:38:07 2014
@@ -37,7 +37,7 @@ public class Model
      *
      */
     public static final int MODEL_MAJOR_VERSION = 1;
-    public static final int MODEL_MINOR_VERSION = 2;
+    public static final int MODEL_MINOR_VERSION = 3;
     public static final String MODEL_VERSION = MODEL_MAJOR_VERSION + "." + MODEL_MINOR_VERSION;
 
     private static final Model MODEL_INSTANCE = new Model();

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PasswordCredentialManagingAuthenticationProvider.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PasswordCredentialManagingAuthenticationProvider.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PasswordCredentialManagingAuthenticationProvider.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PasswordCredentialManagingAuthenticationProvider.java Sun Feb 23 18:38:07 2014
@@ -25,7 +25,7 @@ import java.util.Map;
 
 import javax.security.auth.login.AccountNotFoundException;
 
-public interface PasswordCredentialManagingAuthenticationProvider extends AuthenticationProvider
+public interface PasswordCredentialManagingAuthenticationProvider<X extends PasswordCredentialManagingAuthenticationProvider<X>> extends AuthenticationProvider<X>
 {
     boolean createUser(String username, String password, Map<String, String> attributes);
 

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Plugin.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Plugin.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Plugin.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Plugin.java Sun Feb 23 18:38:07 2014
@@ -24,7 +24,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
-public interface Plugin extends ConfiguredObject
+public interface Plugin<X extends Plugin<X>> extends ConfiguredObject<X>
 {
     //Hack, using it for the class name only for consistency with the other things.
     String CREATED                              = "created";
@@ -35,16 +35,7 @@ public interface Plugin extends Configur
     String UPDATED                              = "updated";
 
     // Attributes
-    public static final Collection<String> AVAILABLE_ATTRIBUTES =
-            Collections.unmodifiableList(
-                    Arrays.asList(
-                            ID,
-                            NAME,
-                            STATE,
-                            DURABLE,
-                            LIFETIME_POLICY,
-                            TIME_TO_LIVE,
-                            CREATED,
-                            UPDATED
-                                 ));
+
+    @ManagedAttribute
+    String getPluginType();
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Port.java Sun Feb 23 18:38:07 2014
@@ -24,8 +24,9 @@ import java.security.AccessControlExcept
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 
-public interface Port extends ConfiguredObject
+public interface Port<X extends Port<X>> extends ConfiguredObject<X>
 {
     String CREATED                              = "created";
     String DURABLE                              = "durable";
@@ -47,41 +48,47 @@ public interface Port extends Configured
     String TRUST_STORES                         = "trustStores";
 
     // Attributes
-    public static final Collection<String> AVAILABLE_ATTRIBUTES =
-            Collections.unmodifiableList(
-                    Arrays.asList(
-                            ID,
-                            NAME,
-                            STATE,
-                            DURABLE,
-                            LIFETIME_POLICY,
-                            TIME_TO_LIVE,
-                            CREATED,
-                            UPDATED,
-                            BINDING_ADDRESS,
-                            PORT,
-                            PROTOCOLS,
-                            TRANSPORTS,
-                            TCP_NO_DELAY,
-                            SEND_BUFFER_SIZE,
-                            RECEIVE_BUFFER_SIZE,
-                            NEED_CLIENT_AUTH,
-                            WANT_CLIENT_AUTH,
-                            AUTHENTICATION_PROVIDER,
-                            KEY_STORE,
-                            TRUST_STORES
-                                 ));
-
 
+    @ManagedAttribute
     String getBindingAddress();
 
+    @ManagedAttribute
     int getPort();
 
+    @ManagedAttribute
+    Collection<Protocol> getProtocols();
+
+    @ManagedAttribute
+    Collection<Transport> getTransports();
+
+    @ManagedAttribute
+    boolean isTcpNoDelay();
+
+    @ManagedAttribute
+    int getSendBufferSize();
+
+    @ManagedAttribute
+    int getReceiveBufferSize();
+
+    @ManagedAttribute
+    boolean getNeedClientAuth();
+
+    @ManagedAttribute
+    boolean getWantClientAuth();
+
+    @ManagedAttribute
+    AuthenticationProvider getAuthenticationProvider();
+
+    @ManagedAttribute
     KeyStore getKeyStore();
 
+    @ManagedAttribute
     Collection<TrustStore> getTrustStores();
 
-    Collection<Transport> getTransports();
+
+
+
+
 
     void addTransport(Transport transport) throws IllegalStateException,
                                                   AccessControlException,
@@ -91,7 +98,6 @@ public interface Port extends Configured
                                                           AccessControlException,
                                                           IllegalArgumentException;
 
-    Collection<Protocol> getProtocols();
 
     void addProtocol(Protocol protocol) throws IllegalStateException,
                                                AccessControlException,
@@ -101,7 +107,6 @@ public interface Port extends Configured
                                                       AccessControlException,
                                                       IllegalArgumentException;
 
-    AuthenticationProvider getAuthenticationProvider();
 
     //children
     Collection<VirtualHostAlias> getVirtualHostBindings();

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java Sun Feb 23 18:38:07 2014
@@ -27,9 +27,8 @@ import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 
-public interface PreferencesProvider extends ConfiguredObject
+public interface PreferencesProvider<X extends PreferencesProvider<X>> extends ConfiguredObject<X>
 {
-    String TYPE            = "type";
     String CREATED         = "created";
     String UPDATED         = "updated";
     String DURABLE         = "durable";

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Publisher.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Publisher.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Publisher.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Publisher.java Sun Feb 23 18:38:07 2014
@@ -20,6 +20,6 @@
  */
 package org.apache.qpid.server.model;
 
-public interface Publisher extends ConfiguredObject
+public interface Publisher<X extends Publisher<X>> extends ConfiguredObject<X>
 {
 }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java Sun Feb 23 18:38:07 2014
@@ -25,41 +25,9 @@ import java.util.Collection;
 import java.util.Collections;
 import org.apache.qpid.server.queue.QueueEntryVisitor;
 
-@AmqpManagement(
-        attributes = {
-                Queue.ID,
-                Queue.NAME,
-                Queue.DESCRIPTION,
-                Queue.STATE,
-                Queue.DURABLE,
-                Queue.LIFETIME_POLICY,
-                Queue.TIME_TO_LIVE,
-                Queue.CREATED,
-                Queue.UPDATED,
-                Queue.QUEUE_TYPE,
-                Queue.ALTERNATE_EXCHANGE,
-                Queue.EXCLUSIVE,
-                Queue.OWNER,
-                Queue.NO_LOCAL,
-                Queue.LVQ_KEY,
-                Queue.SORT_KEY,
-                Queue.MESSAGE_GROUP_KEY,
-                Queue.MESSAGE_GROUP_SHARED_GROUPS,
-                Queue.MAXIMUM_DELIVERY_ATTEMPTS,
-                Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES,
-                Queue.QUEUE_FLOW_RESUME_SIZE_BYTES,
-                Queue.QUEUE_FLOW_STOPPED,
-                Queue.ALERT_THRESHOLD_MESSAGE_AGE,
-                Queue.ALERT_THRESHOLD_MESSAGE_SIZE,
-                Queue.ALERT_THRESHOLD_QUEUE_DEPTH_BYTES,
-                Queue.ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES,
-                Queue.ALERT_REPEAT_GAP,
-                Queue.PRIORITIES
-        },
-        operations = {}
-)
+@AmqpManagement
 
-public interface Queue extends ConfiguredObject
+public interface Queue<X extends Queue<X>> extends ConfiguredObject<X>
 {
     public static final String BINDING_COUNT = "bindingCount";
     public static final String CONSUMER_COUNT = "consumerCount";
@@ -103,14 +71,10 @@ public interface Queue extends Configure
 
 
 
-    public static final String DESCRIPTION = "description";
     public static final String STATE = "state";
     public static final String DURABLE = "durable";
     public static final String LIFETIME_POLICY = "lifetimePolicy";
     public static final String TIME_TO_LIVE = "timeToLive";
-    public static final String CREATED = "created";
-    public static final String UPDATED = "updated";
-    public static final String ARGUMENTS = "arguments";
 
     public static final String ALERT_REPEAT_GAP = "alertRepeatGap";
     public static final String ALERT_THRESHOLD_MESSAGE_AGE = "alertThresholdMessageAge";
@@ -135,41 +99,69 @@ public interface Queue extends Configure
 
     public static final String CREATE_DLQ_ON_CREATION = "x-qpid-dlq-enabled"; // TODO - this value should change
 
-    public static final String FEDERATION_EXCLUDES = "federationExcludes";
-    public static final String FEDERATION_ID = "federationId";
+    @ManagedAttribute
+    String getQueueType();
 
+    @ManagedAttribute
+    Exchange getAlternateExchange();
+
+    @ManagedAttribute
+    ExclusivityPolicy getExclusive();
+
+    @ManagedAttribute
+    String getOwner();
+
+    @ManagedAttribute
+    boolean getNoLocal();
+
+    @ManagedAttribute
+    String getLvqKey();
+
+    @ManagedAttribute
+    String getSortKey();
+
+    @ManagedAttribute
+    String getMessageGroupKey();
+
+
+    // TODO - this should either be a boolean or maybe an enum
+    @ManagedAttribute
+    int getMessageGroupSharedGroups();
+
+
+    @ManagedAttribute
+    int getMaximumDeliveryAttempts();
+
+    @ManagedAttribute
+    long getQueueFlowControlSizeBytes();
+
+    @ManagedAttribute
+    long getQueueFlowResumeSizeBytes();
+
+
+    // TODO - this is not an attribute
+    @ManagedAttribute
+    boolean isQueueFlowStopped();
+
+
+    @ManagedAttribute
+    long getAlertThresholdMessageAge();
+
+    @ManagedAttribute
+    long getAlertThresholdMessageSize();
+
+    @ManagedAttribute
+    long getAlertThresholdQueueDepthBytes();
+
+    @ManagedAttribute
+    long getAlertThresholdQueueDepthMessages();
+
+    @ManagedAttribute
+    long getAlertRepeatGap();
+
+    @ManagedAttribute
+    int getPriorities();
 
-    public static final Collection<String> AVAILABLE_ATTRIBUTES =
-            Collections.unmodifiableList(
-                    Arrays.asList(ID,
-                                  NAME,
-                                  DESCRIPTION,
-                                  STATE,
-                                  DURABLE,
-                                  LIFETIME_POLICY,
-                                  TIME_TO_LIVE,
-                                  CREATED,
-                                  UPDATED,
-                                  QUEUE_TYPE,
-                                  ALTERNATE_EXCHANGE,
-                                  EXCLUSIVE,
-                                  OWNER,
-                                  NO_LOCAL,
-                                  LVQ_KEY,
-                                  SORT_KEY,
-                                  MESSAGE_GROUP_KEY,
-                                  MESSAGE_GROUP_SHARED_GROUPS,
-                                  MAXIMUM_DELIVERY_ATTEMPTS,
-                                  QUEUE_FLOW_CONTROL_SIZE_BYTES,
-                                  QUEUE_FLOW_RESUME_SIZE_BYTES,
-                                  QUEUE_FLOW_STOPPED,
-                                  ALERT_THRESHOLD_MESSAGE_AGE,
-                                  ALERT_THRESHOLD_MESSAGE_SIZE,
-                                  ALERT_THRESHOLD_QUEUE_DEPTH_BYTES,
-                                  ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES,
-                                  ALERT_REPEAT_GAP,
-                                  PRIORITIES
-                    ));
 
 
     //children

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java?rev=1571054&r1=1571053&r2=1571054&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Session.java Sun Feb 23 18:38:07 2014
@@ -24,7 +24,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
-public interface Session extends ConfiguredObject
+public interface Session<X extends Session<X>> extends ConfiguredObject<X>
 {
     // Statistics
 
@@ -63,17 +63,12 @@ public interface Session extends Configu
     // available credit of both producer and consumer sides.
     public static final String PRODUCER_FLOW_BLOCKED = "producerFlowBlocked";
 
-    public static final Collection<String> AVAILABLE_ATTRIBUTES =
-            Collections.unmodifiableCollection(Arrays.asList(ID,
-                                                             NAME,
-                                                             STATE,
-                                                             DURABLE,
-                                                             LIFETIME_POLICY,
-                                                             TIME_TO_LIVE,
-                                                             CREATED,
-                                                             UPDATED,
-                                                             CHANNEL_ID,
-                                                             PRODUCER_FLOW_BLOCKED));
+    @ManagedAttribute
+    int getChannelId();
+
+    @ManagedAttribute
+    boolean isProducerFlowBlocked();
+
 
     Collection<Consumer> getConsumers();
     Collection<Publisher> getPublishers();



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org