001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.mx.metadata;
023:
024: import java.util.Map;
025: import java.util.HashMap;
026:
027: import javax.management.MBeanInfo;
028: import javax.management.NotCompliantMBeanException;
029:
030: /**
031: * Abstract helper class for builder implementations. Includes accessors
032: * for property values that can deal with either string values or equivalent
033: * object types (such as string <tt>"true"</tt> or <tt>Boolean(true)</tt>).
034: *
035: * @see org.jboss.mx.metadata.MetaDataBuilder
036: *
037: * @author <a href="mailto:juha@jboss.org">Juha Lindfors</a>.
038: * @version $Revision: 57200 $
039: *
040: */
041: public abstract class AbstractBuilder implements MetaDataBuilder {
042:
043: // Attributes ----------------------------------------------------
044:
045: /**
046: * Configuration properties.
047: */
048: protected Map properties = new HashMap();
049:
050: // Constructors --------------------------------------------------
051:
052: /**
053: * Default constructor.
054: */
055: public AbstractBuilder() {
056: }
057:
058: public AbstractBuilder(Map properties) {
059: this .properties = properties;
060: }
061:
062: // Public --------------------------------------------------------
063:
064: /**
065: * Returns true for <tt>Boolean(true)</tt> and strings <tt>"true"</tt>
066: * and <tt>"T"</tt> (case insensitive). Returns false for
067: * <tt>Boolean(false)</tt> and strings <tt>"false"</tt> and <tt>"F"</tt>.
068: *
069: * @param key to lookup
070: *
071: * @return true or false
072: *
073: * @throws IllegalPropertyException if property value is not either
074: * <tt>Boolean</tt> or <tt>String</tt> type or they key value is
075: * <tt>null</tt> or a string contained an unknown value
076: */
077: public boolean getBooleanProperty(String key)
078: throws IllegalPropertyException {
079: Object value = properties.get(key);
080:
081: if (value == null)
082: throw new IllegalPropertyException("boolean property "
083: + key + " does not exist");
084:
085: if (value instanceof String) {
086: String v = (String) value;
087: if (v.equalsIgnoreCase("true"))
088: return true;
089: if (v.equalsIgnoreCase("false"))
090: return false;
091: if (v.equalsIgnoreCase("t"))
092: return true;
093: if (v.equalsIgnoreCase("f"))
094: return false;
095:
096: throw new IllegalPropertyException("unknown string value '"
097: + v + "' for boolean property");
098: }
099: if (value instanceof Boolean)
100: return ((Boolean) value).booleanValue();
101:
102: throw new IllegalPropertyException("illegal property type: "
103: + value.getClass().getName());
104: }
105:
106: /**
107: * Returns a string property or <tt>null</tt> if key does not exist.
108: */
109: public String getStringProperty(String key) {
110: return (String) properties.get(key);
111: }
112:
113: // Implements MetaDataBuilder interface --------------------------
114:
115: /**
116: * Sets a builder configuration property.
117: */
118: public void setProperty(String key, Object value) {
119: properties.put(key, value);
120: }
121:
122: /**
123: * Returns the value of a given configuration property.
124: */
125: public Object getProperty(String key) {
126: return properties.get(key);
127: }
128:
129: public abstract MBeanInfo build() throws NotCompliantMBeanException;
130:
131: // Protected -----------------------------------------------------
132: /**
133: * Sets a copy of a properties map to this builder instance.
134: *
135: * @param properties configuration properties
136: */
137: protected void setProperties(Map properties) {
138: this .properties = new HashMap(properties);
139: }
140:
141: /**
142: * Returns the property map of this builder instance.
143: */
144: protected Map getProperties() {
145: return properties;
146: }
147:
148: }
|