/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.ejb.plugins.cmp.jdbc.metadata;
import java.util.Iterator;
import java.util.HashMap;
import org.jboss.deployment.DeploymentException;
import org.jboss.metadata.MetaData;
import org.w3c.dom.Element;
/**
* This immutable class contains information about entity command
*
* @author <a href="mailto:loubyansky@ua.fm">Alex Loubyansky</a>
* @version $Revision: 81030 $
*/
public final class JDBCEntityCommandMetaData
{
// Attributes -----------------------------------------------------
/** The name (alias) of the command. */
private final String commandName;
/** The class of the command */
private final Class commandClass;
/** Command attributes */
private final HashMap attributes = new HashMap();
// Constructor ----------------------------------------------------
/**
* Constructs a JDBCEntityCommandMetaData reading the entity-command element
* @param element - entity-command element
*/
public JDBCEntityCommandMetaData( Element element )
throws DeploymentException
{
// command name
commandName = element.getAttribute( "name" );
if( commandName.trim().length() < 1 )
{
throw new DeploymentException( "entity-command element must have "
+ " not empty name attribute" );
}
String commandClassStr = element.getAttribute( "class" );
if(commandClassStr != null)
{
try
{
commandClass = GetTCLAction.
getContextClassLoader().loadClass( commandClassStr );
} catch (ClassNotFoundException e) {
throw new DeploymentException( "Could not load class: "
+ commandClassStr);
}
}
else
{
commandClass = null;
}
// attributes
for( Iterator iter = MetaData.getChildrenByTagName( element, "attribute" );
iter.hasNext(); )
{
Element attrEl = (Element) iter.next();
// attribute name
String attrName = attrEl.getAttribute( "name" );
if( attrName == null )
{
throw new DeploymentException( "entity-command " + commandName
+ " has an attribute with no name" );
}
// attribute value
String attrValue = MetaData.getElementContent( attrEl );
attributes.put( attrName, attrValue );
}
}
/**
* Constructs a JDBCEntityCommandMetaData from entity-command xml element
* and default values
* @param element entity-command element
*/
public JDBCEntityCommandMetaData( Element element,
JDBCEntityCommandMetaData defaultValues )
throws DeploymentException
{
// command name
commandName = defaultValues.getCommandName();
String commandClassStr = element.getAttribute( "class" );
if( (commandClassStr != null)
&& (commandClassStr.trim().length() > 0) )
{
try
{
commandClass = GetTCLAction.
getContextClassLoader().loadClass( commandClassStr );
} catch (ClassNotFoundException e) {
throw new DeploymentException( "Could not load class: "
+ commandClassStr);
}
}
else
{
commandClass = defaultValues.getCommandClass();
}
// attributes
attributes.putAll( defaultValues.attributes );
for( Iterator iter = MetaData.getChildrenByTagName( element, "attribute" );
iter.hasNext(); )
{
Element attrEl = (Element) iter.next();
// attribute name
String attrName = attrEl.getAttribute( "name" );
if( attrName == null )
{
throw new DeploymentException( "entity-command " + commandName
+ " has an attribute with no name" );
}
// attribute value
String attrValue = MetaData.getElementContent( attrEl );
attributes.put( attrName, attrValue );
}
}
// Public ----------------------------------------------------------
/**
* @return the name of the command
*/
public String getCommandName() {
return commandName;
}
/**
* @return the class of the command
*/
public Class getCommandClass() {
return commandClass;
}
/**
* @return value for the passed in parameter name
*/
public String getAttribute( String name )
{
return (String) attributes.get( name );
}
// Object overrides --------------------------------------------------
public String toString()
{
return new StringBuffer( "[commandName=" ).append( commandName ).
append( ",commandClass=" ).append( commandClass ).
append( ",attributes=" ).append( attributes.toString() ).
append( "]" ).toString();
}
}