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 2016/03/02 19:52:37 UTC

svn commit: r1733351 - in /qpid/java/trunk: broker-core/src/main/java/org/apache/qpid/server/model/ broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/ broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton...

Author: rgodfrey
Date: Wed Mar  2 18:52:36 2016
New Revision: 1733351

URL: http://svn.apache.org/viewvc?rev=1733351&view=rev
Log:
QPID-7066 : Add valid values pattern to metadata

Modified:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableAttribute.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableInjectedAttribute.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingleton.java
    qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingletonImpl.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java?rev=1733351&r1=1733350&r2=1733351&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java Wed Mar  2 18:52:36 2016
@@ -26,6 +26,7 @@ import java.lang.reflect.InvocationHandl
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Proxy;
 import java.lang.reflect.Type;
 import java.security.AccessControlException;
@@ -52,6 +53,7 @@ import java.util.concurrent.Executor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.regex.Pattern;
 
 import javax.security.auth.Subject;
 
@@ -447,6 +449,44 @@ public abstract class AbstractConfigured
         return false;
     }
 
+    private boolean checkValidValuePattern(final ConfiguredSettableAttribute attribute, final Object desiredValue)
+    {
+        Collection<String> valuesToCheck;
+
+        if(attribute.getType().equals(String.class))
+        {
+            valuesToCheck = Collections.singleton(desiredValue.toString());
+        }
+        else if(Collection.class.isAssignableFrom(attribute.getType()) && attribute.getGenericType() instanceof ParameterizedType)
+        {
+            ParameterizedType paramType = (ParameterizedType)attribute.getGenericType();
+            if(paramType.getActualTypeArguments().length == 1 && paramType.getActualTypeArguments()[0] == String.class)
+            {
+                valuesToCheck = (Collection<String>)desiredValue;
+            }
+            else
+            {
+                valuesToCheck = Collections.emptySet();
+            }
+        }
+        else
+        {
+            valuesToCheck = Collections.emptySet();
+        }
+
+        Pattern pattern = Pattern.compile(attribute.vaidValuePattern());
+        for (String value : valuesToCheck)
+        {
+            if(!pattern.matcher(value).matches())
+            {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+
     @Override
     public final void open()
     {
@@ -1084,6 +1124,20 @@ public abstract class AbstractConfigured
                                                                 + autoAttr.validValues());
                     }
                 }
+                else if(!"".equals(autoAttr.vaidValuePattern()))
+                {
+                    Object desiredValueOrDefault = autoAttr.getValue(this);
+
+                    if (desiredValueOrDefault != null && !checkValidValuePattern(autoAttr, desiredValueOrDefault))
+                    {
+                        throw new IllegalConfigurationException("Attribute '" + autoAttr.getName()
+                                                                + "' instance of "+ getClass().getName()
+                                                                + " named '" + getName() + "'"
+                                                                + " cannot have value '" + desiredValueOrDefault + "'"
+                                                                + ". Valid values pattern is: "
+                                                                + autoAttr.vaidValuePattern());
+                    }
+                }
                 if(autoAttr.isMandatory() && autoAttr.getValue(this) == null)
                 {
                     throw new IllegalConfigurationException("Attribute '" + autoAttr.getName()
@@ -2505,6 +2559,21 @@ public abstract class AbstractConfigured
                                                                 + autoAttr.validValues());
                     }
                 }
+                else if(!"".equals(autoAttr.vaidValuePattern()))
+                {
+                    Object desiredValueOrDefault = autoAttr.getValue(proxyForValidation);
+
+                    if (desiredValueOrDefault != null && !checkValidValuePattern(autoAttr, desiredValueOrDefault))
+                    {
+                        throw new IllegalConfigurationException("Attribute '" + autoAttr.getName()
+                                                                + "' instance of "+ getClass().getName()
+                                                                + " named '" + getName() + "'"
+                                                                + " cannot have value '" + desiredValueOrDefault + "'"
+                                                                + ". Valid values pattern is: "
+                                                                + autoAttr.vaidValuePattern());
+                    }
+                }
+
 
                 if(autoAttr.isMandatory() && autoAttr.getValue(proxyForValidation) == null)
                 {

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java?rev=1733351&r1=1733350&r2=1733351&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredAutomatedAttribute.java Wed Mar  2 18:52:36 2016
@@ -200,4 +200,10 @@ public class ConfiguredAutomatedAttribut
     {
         return validValues() != null && validValues().size() > 0;
     }
+
+    @Override
+    public String vaidValuePattern()
+    {
+        return _annotation.validValuePattern();
+    }
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableAttribute.java?rev=1733351&r1=1733350&r2=1733351&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableAttribute.java Wed Mar  2 18:52:36 2016
@@ -32,5 +32,7 @@ public interface ConfiguredSettableAttri
 
     Collection<String> validValues();
 
+    String vaidValuePattern();
+
     boolean hasValidValues();
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableInjectedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableInjectedAttribute.java?rev=1733351&r1=1733350&r2=1733351&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableInjectedAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredSettableInjectedAttribute.java Wed Mar  2 18:52:36 2016
@@ -49,20 +49,21 @@ public class ConfiguredSettableInjectedA
     private final String _oversizedAltText;
     private final String _description;
     private final String[] _validValues;
+    private final String _validValuePattern;
 
     public ConfiguredSettableInjectedAttribute(final String name,
-                                        final Class<T> type,
-                                        final Type genericType,
-                                        final String defaultValue,
-                                        final boolean secure,
-                                        final boolean persisted,
-                                        final boolean immutable,
-                                        final String secureValueFilter,
-                                        final boolean oversized,
-                                        final String oversizedAltText,
-                                        final String description,
-                                        final String[] validValues,
-                                        final TypeValidator typeValidator)
+                                               final Class<T> type,
+                                               final Type genericType,
+                                               final String defaultValue,
+                                               final boolean secure,
+                                               final boolean persisted,
+                                               final boolean immutable,
+                                               final String secureValueFilter,
+                                               final boolean oversized,
+                                               final String oversizedAltText,
+                                               final String description,
+                                               final String[] validValues,
+                                               final String validValuePattern, final TypeValidator typeValidator)
     {
         super(name, type, genericType, typeValidator);
 
@@ -74,6 +75,7 @@ public class ConfiguredSettableInjectedA
         _oversizedAltText = oversizedAltText;
         _description = description;
         _validValues = validValues;
+        _validValuePattern = validValuePattern;
 
         Method validValuesMethod = null;
 
@@ -240,4 +242,9 @@ public class ConfiguredSettableInjectedA
         return convert(value, configuredObject);
     }
 
+    @Override
+    public String vaidValuePattern()
+    {
+        return _validValuePattern;
+    }
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java?rev=1733351&r1=1733350&r2=1733351&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/ManagedAttribute.java Wed Mar  2 18:52:36 2016
@@ -35,6 +35,7 @@ public @interface ManagedAttribute
     String defaultValue() default "";
     String description() default "";
     String[] validValues() default {};
+    String validValuePattern() default "";
     boolean oversize() default false;
     String oversizedAltText() default "";
     String secureValueFilter() default "";

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java?rev=1733351&r1=1733350&r2=1733351&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/hierarchy/InjectedAttributeTest.java Wed Mar  2 18:52:36 2016
@@ -124,7 +124,7 @@ public class InjectedAttributeTest exten
                                                                              "",
                                                                              "",
                                                                              null,
-                                                                             validator);
+                                                                             "", validator);
 
         TestModel model = new TestModel(null, new TestInjector(attrInjector));
 
@@ -172,7 +172,7 @@ public class InjectedAttributeTest exten
                                                                              "",
                                                                              "",
                                                                              new String[] { "42", "49" },
-                                                                             validator);
+                                                                             "", validator);
 
         TestModel model = new TestModel(null, new TestInjector(attrInjector));
 

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java?rev=1733351&r1=1733350&r2=1733351&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/AbstractConfiguredObjectTest.java Wed Mar  2 18:52:36 2016
@@ -347,6 +347,48 @@ public class AbstractConfiguredObjectTes
         assertEquals(TestSingleton.VALID_VALUE1, object.getValidValue());
     }
 
+    public void testCreateEnforcesAttributeValidValuePattern() throws Exception
+    {
+        final String objectName = getName();
+        Map<String, Object> illegalCreateAttributes = new HashMap<>();
+        illegalCreateAttributes.put(ConfiguredObject.NAME, objectName);
+        illegalCreateAttributes.put(TestSingleton.VALUE_WITH_PATTERN, "illegal");
+
+        try
+        {
+            _model.getObjectFactory().create(TestSingleton.class, illegalCreateAttributes);
+            fail("Exception not thrown");
+        }
+        catch (IllegalConfigurationException ice)
+        {
+            // PASS
+        }
+
+        illegalCreateAttributes = new HashMap<>();
+        illegalCreateAttributes.put(ConfiguredObject.NAME, objectName);
+        illegalCreateAttributes.put(TestSingleton.LIST_VALUE_WITH_PATTERN, Arrays.asList("1.1.1.1", "1"));
+
+        try
+        {
+            _model.getObjectFactory().create(TestSingleton.class, illegalCreateAttributes);
+            fail("Exception not thrown");
+        }
+        catch (IllegalConfigurationException ice)
+        {
+            // PASS
+        }
+
+
+        Map<String, Object> legalCreateAttributes = new HashMap<>();
+        legalCreateAttributes.put(ConfiguredObject.NAME, objectName);
+        legalCreateAttributes.put(TestSingleton.VALUE_WITH_PATTERN, "foozzzzzbar");
+        legalCreateAttributes.put(TestSingleton.LIST_VALUE_WITH_PATTERN, Arrays.asList("1.1.1.1", "255.255.255.255"));
+
+        TestSingleton object = _model.getObjectFactory().create(TestSingleton.class, legalCreateAttributes);
+        assertEquals("foozzzzzbar", object.getValueWithPattern());
+    }
+
+
     public void testChangeEnforcesAttributeValidValues() throws Exception
     {
         final String objectName = getName();
@@ -415,6 +457,62 @@ public class AbstractConfiguredObjectTes
         }
     }
 
+
+    public void testChangeEnforcesAttributeValidValuePatterns() throws Exception
+    {
+        final String objectName = getName();
+        Map<String, Object> legalCreateAttributes = new HashMap<>();
+        legalCreateAttributes.put(ConfiguredObject.NAME, objectName);
+        legalCreateAttributes.put(TestSingleton.VALUE_WITH_PATTERN, "foozzzzzbar");
+        legalCreateAttributes.put(TestSingleton.LIST_VALUE_WITH_PATTERN, Arrays.asList("1.1.1.1", "255.255.255.255"));
+
+        TestSingleton object = _model.getObjectFactory().create(TestSingleton.class, legalCreateAttributes);
+        assertEquals("foozzzzzbar", object.getValueWithPattern());
+        assertEquals(Arrays.asList("1.1.1.1", "255.255.255.255"), object.getListValueWithPattern());
+
+        object.setAttributes(Collections.singletonMap(TestSingleton.VALUE_WITH_PATTERN, "foobar"));
+        assertEquals("foobar", object.getValueWithPattern());
+
+        object.setAttributes(Collections.singletonMap(TestSingleton.LIST_VALUE_WITH_PATTERN, Collections.singletonList("1.2.3.4")));
+        assertEquals(Collections.singletonList("1.2.3.4"), object.getListValueWithPattern());
+
+
+        try
+        {
+            object.setAttributes(Collections.singletonMap(TestSingleton.VALUE_WITH_PATTERN, "foobaz"));
+            fail("Exception not thrown");
+        }
+        catch (IllegalConfigurationException iae)
+        {
+            // PASS
+        }
+
+
+        try
+        {
+            object.setAttributes(Collections.singletonMap(TestSingleton.LIST_VALUE_WITH_PATTERN, Arrays.asList("1.1.1.1", "1")));
+            fail("Exception not thrown");
+        }
+        catch (IllegalConfigurationException iae)
+        {
+            // PASS
+        }
+
+        assertEquals("foobar", object.getValueWithPattern());
+        assertEquals(Collections.singletonList("1.2.3.4"), object.getListValueWithPattern());
+
+
+        object.setAttributes(Collections.singletonMap(TestSingleton.VALUE_WITH_PATTERN, null));
+        assertNull(object.getValueWithPattern());
+
+        object.setAttributes(Collections.singletonMap(TestSingleton.LIST_VALUE_WITH_PATTERN, Collections.emptyList()));
+        assertEquals(Collections.emptyList(), object.getListValueWithPattern());
+
+        object.setAttributes(Collections.singletonMap(TestSingleton.LIST_VALUE_WITH_PATTERN, null));
+        assertNull(object.getListValueWithPattern());
+
+    }
+
     public void testDefaultContextIsInContextKeys()
     {
         final String objectName = "myName";

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingleton.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingleton.java?rev=1733351&r1=1733350&r2=1733351&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingleton.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingleton.java Wed Mar  2 18:52:36 2016
@@ -18,6 +18,7 @@
  */
 package org.apache.qpid.server.model.testmodels.singleton;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -39,6 +40,8 @@ public interface TestSingleton<X extends
     String ENUM_VALUE = "enumValue";
     String INT_VALUE = "intValue";
     String VALID_VALUE = "validValue";
+    String VALUE_WITH_PATTERN = "valueWithPattern";
+    String LIST_VALUE_WITH_PATTERN = "listValueWithPattern";
     String SECURE_VALUE = "secureValue";
     String ENUMSET_VALUES = "enumSetValues";
     String IMMUTABLE_VALUE = "immutableValue";
@@ -82,6 +85,12 @@ public interface TestSingleton<X extends
     @ManagedAttribute( validValues = {"[\"TEST_ENUM1\"]", "[\"TEST_ENUM2\", \"TEST_ENUM3\"]"})
     Set<TestEnum> getEnumSetValues();
 
+    @ManagedAttribute(validValuePattern = "foo.*bar" )
+    String getValueWithPattern();
+
+    @ManagedAttribute(validValuePattern = "[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}" )
+    List<String> getListValueWithPattern();
+
     @DerivedAttribute
     long getDerivedValue();
 

Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingletonImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingletonImpl.java?rev=1733351&r1=1733350&r2=1733351&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingletonImpl.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/testmodels/singleton/TestSingletonImpl.java Wed Mar  2 18:52:36 2016
@@ -18,6 +18,7 @@
  */
 package org.apache.qpid.server.model.testmodels.singleton;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -72,6 +73,12 @@ public class TestSingletonImpl extends A
     @ManagedAttributeField
     private String _immutableValue;
 
+    @ManagedAttributeField
+    private String _valueWithPattern;
+
+    @ManagedAttributeField
+    private List<String> _listValueWithPattern;
+
     @ManagedObjectFactoryConstructor
     public TestSingletonImpl(final Map<String, Object> attributes)
     {
@@ -171,4 +178,16 @@ public class TestSingletonImpl extends A
     {
         return _securityManager;
     }
+
+    @Override
+    public String getValueWithPattern()
+    {
+        return _valueWithPattern;
+    }
+
+    @Override
+    public List<String> getListValueWithPattern()
+    {
+        return _listValueWithPattern;
+    }
 }

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java?rev=1733351&r1=1733350&r2=1733351&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ApiDocsServlet.java Wed Mar  2 18:52:36 2016
@@ -394,20 +394,33 @@ public class ApiDocsServlet extends Abst
     private String renderType(final ConfiguredObjectAttribute attribute)
     {
         final Class type = attribute.getType();
-        return renderType(type,
-                attribute instanceof ConfiguredSettableAttribute && ((ConfiguredSettableAttribute)attribute).hasValidValues()
-                        ?  ((ConfiguredSettableAttribute)attribute).validValues() : null);
 
+        Collection<String> validValues;
+        String validValuePattern;
+
+        if(attribute instanceof ConfiguredSettableAttribute)
+        {
+            ConfiguredSettableAttribute<?,?> settableAttribute = (ConfiguredSettableAttribute<?,?>) attribute;
+            validValues = settableAttribute.hasValidValues() ? settableAttribute.validValues() : null;
+            validValuePattern = settableAttribute.vaidValuePattern();
+        }
+        else
+        {
+            validValues = null;
+            validValuePattern = "";
+        }
+
+        return renderType(type, validValues, validValuePattern);
     }
 
     private String renderType(final OperationParameter parameter)
     {
         final Class type = parameter.getType();
         List<String> validValues = parameter.getValidValues();
-        return renderType(type, validValues);
+        return renderType(type, validValues, "");
     }
 
-    private String renderType(Class type, Collection<String> validValues) {
+    private String renderType(Class type, Collection<String> validValues, final String validValuePattern) {
         if(Enum.class.isAssignableFrom(type))
         {
             return "<div class=\"restriction\" title=\"enum: " + EnumSet.allOf(type) + "\">string</div>";
@@ -424,10 +437,16 @@ public class ApiDocsServlet extends Abst
         {
             StringBuilder returnVal = new StringBuilder();
             final boolean hasValuesRestriction = validValues != null && !validValues.isEmpty();
+
+            // TODO - valid values and patterns might contain characters which should be escaped
             if(hasValuesRestriction)
             {
                 returnVal.append("<div class=\"restricted\" title=\"Valid values: " + validValues + "\">");
             }
+            else if(validValuePattern != null && !"".equals(validValuePattern))
+            {
+                returnVal.append("<div class=\"restricted\" title=\"Valid value pattern: " + validValuePattern+ "\">");
+            }
 
             if(Number.class.isAssignableFrom(type))
             {

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java?rev=1733351&r1=1733350&r2=1733351&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java Wed Mar  2 18:52:36 2016
@@ -193,6 +193,10 @@ public class MetaDataServlet extends Abs
                     }
                     attrDetails.put("validValues", convertedValues);
                 }
+                else if(!"".equals(automatedAttribute.vaidValuePattern()))
+                {
+                    attrDetails.put("validValuesPattern", automatedAttribute.vaidValuePattern());
+                }
 
             }
             if (attribute.isSecure())



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