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.naming;
023:
024: import java.beans.PropertyEditor;
025:
026: import org.jboss.util.propertyeditor.PropertyEditors;
027:
028: /**
029: * A representation of a binding into JNDI.
030: *
031: * @author Scott.Stark@jboss.org
032: * @version $Revision: 57209 $
033: */
034: public class JNDIBinding {
035: /** The jndi name to bind under */
036: private String name;
037: /** The binding text */
038: private String text;
039: /** The optional binding type the text should be converted to */
040: private String type;
041: /** The optional explicit PropertyEditor implementation class */
042: private String editor;
043: /** The actual binding value */
044: private Object value;
045: /** A flag indicating if the text should be trimmed */
046: private boolean trim;
047:
048: /**
049: * The JNDI name to bind under
050: * @return
051: */
052: public String getName() {
053: return name;
054: }
055:
056: public void setName(String name) {
057: this .name = name;
058: }
059:
060: /**
061: * The text representation of the binding
062: * @return
063: */
064: public String getText() {
065: return text;
066: }
067:
068: /**
069: * Set the text representation of the binding. If the replace attribute
070: * is true, the text will be searched for system property references of the
071: * form ${x}.
072: *
073: * @param text
074: */
075: public void setText(String text) {
076: if (trim == true)
077: text = text.trim();
078: this .text = text;
079: }
080:
081: /**
082: * The optional type the text representation should be converted to.
083: *
084: * @return
085: */
086: public String getType() {
087: return type;
088: }
089:
090: /**
091: *
092: * @param type - type the text representation should be converted to.
093: */
094: public void setType(String type) {
095: this .type = type;
096: }
097:
098: /**
099: * The optional PropertyEditor implementation class name.
100: * @return
101: */
102: public String getEditor() {
103: return editor;
104: }
105:
106: /**
107: *
108: * @param editor - the optional PropertyEditor implementation class name.
109: */
110: public void setEditor(String editor) {
111: this .editor = editor;
112: }
113:
114: /**
115: * Object the binding value. If there is a binding from an external xml
116: * fragment it will be whatever that was. If there is a type it will be the
117: * value as obtained by converting the text of the value element to an object
118: * using the type PropertyEditor. If there is an explicit PropertyEditor
119: * given by the editor attribute that will be used to convert the text into
120: * an object.
121: *
122: * @return the value binding
123: * @throws Exception - on failure to load/use the PropertyEditor
124: */
125: public Object getValue() throws Exception {
126: if (value == null && text != null) {
127: // If there is a property editor set, transform text to value
128: if (editor != null) {
129: ClassLoader loader = Thread.currentThread()
130: .getContextClassLoader();
131: Class editorClass = loader.loadClass(editor);
132: PropertyEditor pe = (PropertyEditor) editorClass
133: .newInstance();
134: pe.setAsText(text);
135: value = pe.getValue();
136: } else if (type != null) {
137: PropertyEditor pe = PropertyEditors.getEditor(type);
138: pe.setAsText(text);
139: value = pe.getValue();
140: } else {
141: value = text;
142: }
143: }
144: return value;
145: }
146:
147: /**
148: * Set the raw value binding
149: * @param value
150: */
151: public void setValue(Object value) {
152: this .value = value;
153: }
154:
155: /**
156: *
157: * @return flag indicating if the text should be trimmed
158: */
159: public boolean isTrim() {
160: return trim;
161: }
162:
163: /**
164: *
165: * @param trim - flag indicating if the text should be trimmed
166: */
167: public void setTrim(boolean trim) {
168: this.trim = trim;
169: }
170: }
|