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.ejb.plugins.cmp.jdbc.metadata;
023:
024: import java.util.Iterator;
025: import java.util.HashMap;
026: import org.jboss.deployment.DeploymentException;
027: import org.jboss.metadata.MetaData;
028: import org.w3c.dom.Element;
029:
030: /**
031: * This immutable class contains information about entity command
032: *
033: * @author <a href="mailto:loubyansky@ua.fm">Alex Loubyansky</a>
034: * @version $Revision: 57209 $
035: */
036: public final class JDBCEntityCommandMetaData {
037:
038: // Attributes -----------------------------------------------------
039:
040: /** The name (alias) of the command. */
041: private final String commandName;
042:
043: /** The class of the command */
044: private final Class commandClass;
045:
046: /** Command attributes */
047: private final HashMap attributes = new HashMap();
048:
049: // Constructor ----------------------------------------------------
050:
051: /**
052: * Constructs a JDBCEntityCommandMetaData reading the entity-command element
053: * @param element - entity-command element
054: */
055: public JDBCEntityCommandMetaData(Element element)
056: throws DeploymentException {
057: // command name
058: commandName = element.getAttribute("name");
059: if (commandName.trim().length() < 1) {
060: throw new DeploymentException(
061: "entity-command element must have "
062: + " not empty name attribute");
063: }
064:
065: String commandClassStr = element.getAttribute("class");
066: if (commandClassStr != null) {
067: try {
068: commandClass = GetTCLAction.getContextClassLoader()
069: .loadClass(commandClassStr);
070: } catch (ClassNotFoundException e) {
071: throw new DeploymentException("Could not load class: "
072: + commandClassStr);
073: }
074: } else {
075: commandClass = null;
076: }
077:
078: // attributes
079: for (Iterator iter = MetaData.getChildrenByTagName(element,
080: "attribute"); iter.hasNext();) {
081: Element attrEl = (Element) iter.next();
082:
083: // attribute name
084: String attrName = attrEl.getAttribute("name");
085: if (attrName == null) {
086: throw new DeploymentException("entity-command "
087: + commandName
088: + " has an attribute with no name");
089: }
090:
091: // attribute value
092: String attrValue = MetaData.getElementContent(attrEl);
093:
094: attributes.put(attrName, attrValue);
095: }
096: }
097:
098: /**
099: * Constructs a JDBCEntityCommandMetaData from entity-command xml element
100: * and default values
101: * @param element entity-command element
102: */
103: public JDBCEntityCommandMetaData(Element element,
104: JDBCEntityCommandMetaData defaultValues)
105: throws DeploymentException {
106: // command name
107: commandName = defaultValues.getCommandName();
108:
109: String commandClassStr = element.getAttribute("class");
110: if ((commandClassStr != null)
111: && (commandClassStr.trim().length() > 0)) {
112: try {
113: commandClass = GetTCLAction.getContextClassLoader()
114: .loadClass(commandClassStr);
115: } catch (ClassNotFoundException e) {
116: throw new DeploymentException("Could not load class: "
117: + commandClassStr);
118: }
119: } else {
120: commandClass = defaultValues.getCommandClass();
121: }
122:
123: // attributes
124: attributes.putAll(defaultValues.attributes);
125: for (Iterator iter = MetaData.getChildrenByTagName(element,
126: "attribute"); iter.hasNext();) {
127: Element attrEl = (Element) iter.next();
128:
129: // attribute name
130: String attrName = attrEl.getAttribute("name");
131: if (attrName == null) {
132: throw new DeploymentException("entity-command "
133: + commandName
134: + " has an attribute with no name");
135: }
136:
137: // attribute value
138: String attrValue = MetaData.getElementContent(attrEl);
139:
140: attributes.put(attrName, attrValue);
141: }
142: }
143:
144: // Public ----------------------------------------------------------
145:
146: /**
147: * @return the name of the command
148: */
149: public String getCommandName() {
150: return commandName;
151: }
152:
153: /**
154: * @return the class of the command
155: */
156: public Class getCommandClass() {
157: return commandClass;
158: }
159:
160: /**
161: * @return value for the passed in parameter name
162: */
163: public String getAttribute(String name) {
164: return (String) attributes.get(name);
165: }
166:
167: // Object overrides --------------------------------------------------
168:
169: public String toString() {
170: return new StringBuffer("[commandName=").append(commandName)
171: .append(",commandClass=").append(commandClass).append(
172: ",attributes=").append(attributes.toString())
173: .append("]").toString();
174: }
175: }
|