diff options
Diffstat (limited to 'java/common/src/main')
-rw-r--r-- | java/common/src/main/java/org/apache/qpid/configuration/Accessor.java | 160 | ||||
-rw-r--r-- | java/common/src/main/java/org/apache/qpid/messaging/Address.java | 39 |
2 files changed, 195 insertions, 4 deletions
diff --git a/java/common/src/main/java/org/apache/qpid/configuration/Accessor.java b/java/common/src/main/java/org/apache/qpid/configuration/Accessor.java index dc5b69dc89..d154f70339 100644 --- a/java/common/src/main/java/org/apache/qpid/configuration/Accessor.java +++ b/java/common/src/main/java/org/apache/qpid/configuration/Accessor.java @@ -26,6 +26,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Properties; @@ -36,6 +37,8 @@ public interface Accessor public Integer getInt(String name); public Long getLong(String name); public String getString(String name); + public Map getMap(String name); + public List getList(String name); static class SystemPropertyAccessor implements Accessor { @@ -58,6 +61,10 @@ public interface Accessor { return System.getProperty(name); } + + public Map getMap(String name){ throw new UnsupportedOperationException("Not supported by system properties"); } + + public List getList(String name){ throw new UnsupportedOperationException("Not supported by system properties"); } } static class MapAccessor implements Accessor @@ -144,6 +151,31 @@ public interface Accessor return null; } } + + public Map getMap(String name) + { + if (source != null && source.containsKey(name) && source.get(name) instanceof Map) + { + return (Map)source.get(name); + } + else + { + return null; + } + } + + public List getList(String name) + { + if (source != null && source.containsKey(name) && source.get(name) instanceof List) + { + return (List)source.get(name); + } + else + { + return null; + } + } + } static class PropertyFileAccessor extends MapAccessor @@ -163,6 +195,12 @@ public interface Accessor } source = props; } + + @Override + public Map getMap(String name){ throw new UnsupportedOperationException("Not supported by property file"); } + + @Override + public List getList(String name){ throw new UnsupportedOperationException("Not supported by property file"); } } static class CombinedAccessor implements Accessor @@ -190,7 +228,7 @@ public interface Accessor { for (Accessor accessor: accessors) { - if (accessor.getBoolean(name) != null) + if (accessor.getInt(name) != null) { return accessor.getInt(name); } @@ -202,7 +240,7 @@ public interface Accessor { for (Accessor accessor: accessors) { - if (accessor.getBoolean(name) != null) + if (accessor.getLong(name) != null) { return accessor.getLong(name); } @@ -214,13 +252,37 @@ public interface Accessor { for (Accessor accessor: accessors) { - if (accessor.getBoolean(name) != null) + if (accessor.getString(name) != null) { return accessor.getString(name); } } return null; } + + public Map getMap(String name) + { + for (Accessor accessor: accessors) + { + if (accessor.getMap(name) != null && accessor.getMap(name) instanceof Map) + { + return accessor.getMap(name); + } + } + return null; + } + + public List getList(String name) + { + for (Accessor accessor: accessors) + { + if (accessor.getMap(name) != null && accessor.getList(name) instanceof List) + { + return accessor.getList(name); + } + } + return null; + } } static class ValidationAccessor implements Accessor @@ -269,5 +331,97 @@ public interface Accessor } return v; } + + public Map getMap(String name){ throw new UnsupportedOperationException("Validator interface does not support maps"); } + + public List getList(String name){ throw new UnsupportedOperationException("Validator interface does not support maps"); } } + + /** + * Property names as passed in the form + * level_1_prop/level_2_prop/.../level_n_prop + * All property name upto level_n-1_prop should return + * a map or null + */ + static class NestedMapAccessor implements Accessor + { + protected Map<Object,Object> baseMap; + + public NestedMapAccessor(Map<Object,Object> map) + { + baseMap = map; + } + + private String getKey(String name) + { + if (name.lastIndexOf("/") > -1) + { + return name.substring(name.lastIndexOf("/")+1); + } + else + { + return name; + } + } + + private MapAccessor mapIterator(String name) + { + if (name.lastIndexOf("/") == -1) + { + return new MapAccessor(baseMap); + } + + String[] paths = name.substring(0,name.lastIndexOf("/")).split("/"); + Map map = baseMap == null ? Collections.EMPTY_MAP : baseMap; + + for (String path:paths) + { + + Object obj = map.get(path); + if (obj == null) + { + return new MapAccessor(null); + } + else if (obj instanceof Map) + { + map = (Map)obj; + } + else + { + throw new IllegalArgumentException(path + " doesn't retrieve another map"); + } + } + return new MapAccessor(map); + } + + public Boolean getBoolean(String name) + { + return mapIterator(name).getBoolean(getKey(name)); + } + + public Integer getInt(String name) + { + return mapIterator(name).getInt(getKey(name)); + } + + public Long getLong(String name) + { + return mapIterator(name).getLong(getKey(name)); + } + + public String getString(String name) + { + return mapIterator(name).getString(getKey(name)); + } + + public Map getMap(String name) + { + return mapIterator(name).getMap(getKey(name)); + } + + public List getList(String name) + { + return mapIterator(name).getList(getKey(name)); + } + } } diff --git a/java/common/src/main/java/org/apache/qpid/messaging/Address.java b/java/common/src/main/java/org/apache/qpid/messaging/Address.java index 2c7fe7b8ed..ce8734f1a3 100644 --- a/java/common/src/main/java/org/apache/qpid/messaging/Address.java +++ b/java/common/src/main/java/org/apache/qpid/messaging/Address.java @@ -34,6 +34,21 @@ import static org.apache.qpid.messaging.util.PyPrint.pprint; public class Address { + public enum AddressType {QUEUE_ADDRESS, TOPIC_ADDRESS, UNSPECIFIED }; + + public enum PolicyType + { + ALWAYS, NEVER, SENDER, RECEIVER; + public static PolicyType getPolicyType(String str) + { + if ( str == null || str.equals("") || "never".equals(str)) return PolicyType.NEVER; + if ("always".equals(str)) return PolicyType.ALWAYS; + else if ("sender".equals(str)) return PolicyType.SENDER; + else if ("receiver".equals(str)) return PolicyType.RECEIVER; + else throw new IllegalArgumentException(str + " is not an allowed value"); + } + } + public static Address parse(String address) { @@ -43,6 +58,8 @@ public class Address private String name; private String subject; private Map options; + private AddressType type = AddressType.QUEUE_ADDRESS; + private boolean resolved = false; public Address(String name, String subject, Map options) { @@ -50,7 +67,27 @@ public class Address this.subject = subject; this.options = options; } - + + public AddressType getAddressType() + { + return type; + } + + public void setAddressType(AddressType type) + { + this.type = type; + } + + public boolean isResolved() + { + return resolved; + } + + public void setResolved(boolean b) + { + this.resolved = b; + } + public String getName() { return name; |