summaryrefslogtreecommitdiff
path: root/qpid/java/common/src/main/java/org/apache/configuration/PropertyNameResolver.java
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/common/src/main/java/org/apache/configuration/PropertyNameResolver.java')
-rw-r--r--qpid/java/common/src/main/java/org/apache/configuration/PropertyNameResolver.java129
1 files changed, 129 insertions, 0 deletions
diff --git a/qpid/java/common/src/main/java/org/apache/configuration/PropertyNameResolver.java b/qpid/java/common/src/main/java/org/apache/configuration/PropertyNameResolver.java
new file mode 100644
index 0000000000..73ee747c07
--- /dev/null
+++ b/qpid/java/common/src/main/java/org/apache/configuration/PropertyNameResolver.java
@@ -0,0 +1,129 @@
+/*
+*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*
+*/
+
+package org.apache.configuration;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class PropertyNameResolver
+{
+ public static interface Accessor
+ {
+ Object get(String name);
+ }
+
+ private static Map<Class<?>,Accessor> accessors = new HashMap<Class<?>,Accessor>();
+ protected Map<String,QpidProperty> properties;
+
+ private static class BooleanAccessor implements Accessor
+ {
+ public Boolean get(String name)
+ {
+ return Boolean.getBoolean(name);
+ }
+ }
+
+ private static class IntegerAccessor implements Accessor
+ {
+ public Integer get(String name)
+ {
+ return Integer.getInteger(name);
+ }
+ }
+
+ private static class LongAccessor implements Accessor
+ {
+ public Long get(String name)
+ {
+ return Long.getLong(name);
+ }
+ }
+
+ private static class StringAccessor implements Accessor
+ {
+ public String get(String name)
+ {
+ return System.getProperty(name);
+ }
+ }
+
+ static
+ {
+ accessors.put(Boolean.class, new BooleanAccessor());
+ accessors.put(Integer.class, new IntegerAccessor());
+ accessors.put(String.class, new StringAccessor());
+ accessors.put(Long.class, new LongAccessor());
+ }
+
+ public Integer getIntegerValue(String propName)
+ {
+ return properties.get(propName).get(Integer.class);
+ }
+
+ public Long getLongValue(String propName)
+ {
+ return properties.get(propName).get(Long.class);
+ }
+
+ public String getStringValue(String propName)
+ {
+ return properties.get(propName).get(String.class);
+ }
+
+ public Boolean getBooleanValue(String propName)
+ {
+ return properties.get(propName).get(Boolean.class);
+ }
+
+ public <T> T get(String propName,Class<T> klass)
+ {
+ return properties.get(propName).get(klass);
+ }
+
+ static class QpidProperty
+ {
+ private Object defValue;
+ private String[] names;
+
+ QpidProperty(Object defValue, String ... names)
+ {
+ this.defValue = defValue;
+ this.names = names;
+ }
+
+ <T> T get(Class<T> klass)
+ {
+ Accessor acc = accessors.get(klass);
+ for (String name : names)
+ {
+ Object obj = acc.get(name);
+ if (obj != null)
+ {
+ return klass.cast(obj);
+ }
+ }
+
+ return klass.cast(defValue);
+ }
+ }
+
+}