FileDocCategorySizeDatePackage
EjbRelationshipRoleNode.javaAPI DocGlassfish v2 API10519Fri May 04 22:31:40 BST 2007com.sun.enterprise.deployment.node.ejb

EjbRelationshipRoleNode

public class EjbRelationshipRoleNode extends com.sun.enterprise.deployment.node.DeploymentDescriptorNode
This class is responsible for handling the ejb-relationship-role xml elements
author
Jerome Dochez
version

Fields Summary
com.sun.enterprise.deployment.RelationRoleDescriptor
descriptor
Constructors Summary
public EjbRelationshipRoleNode()

       super();
       registerElementHandler(new XMLElement(EjbTagNames.DESCRIPTION), LocalizedInfoNode.class);           
    
Methods Summary
public booleanendElement(com.sun.enterprise.deployment.node.XMLElement element)
receives notification of the end of an XML element by the Parser

param
element the xml tag identification
return
true if this node is done processing the XML sub tree

        if (EjbTagNames.CASCADE_DELETE.equals(element.getQName())) {
                descriptor.setCascadeDelete(true);
        }
        return super.endElement(element);
    
public java.lang.ObjectgetDescriptor()

return
the descriptor instance to associate with this XMLNode

        if (descriptor==null) {
            descriptor = (RelationRoleDescriptor) DescriptorFactory.getDescriptor(getXMLPath());
        } 
        return descriptor;
    
protected java.util.MapgetDispatchTable()
all sub-implementation of this class can use a dispatch table to map xml element to method name on the descriptor class for setting the element value.

return
the map with the element name as a key, the setter method as a value

        // no need to be synchronized for now
        Map table = super.getDispatchTable();
        table.put(EjbTagNames.EJB_RELATIONSHIP_ROLE_NAME, "setName");
        table.put(EjbTagNames.CMR_FIELD_NAME, "setCMRField");
        table.put(EjbTagNames.CMR_FIELD_TYPE, "setCMRFieldType");
        return table;
    
private com.sun.enterprise.deployment.EjbBundleDescriptorgetEjbBundleDescriptor()

        XMLNode parent = getParentNode();
        Object parentDesc = parent.getDescriptor();
        while (parent!=null && !(parentDesc instanceof EjbBundleDescriptor)) {
            parent = parent.getParentNode();
            if (parent !=null)
                parentDesc = parent.getDescriptor();
        }
        if (parent!=null) {
            return (EjbBundleDescriptor) parentDesc;
        }  else {
            throw new IllegalArgumentException("Cannot find bundle descriptor");
        }            
    
public com.sun.enterprise.deployment.node.XMLNodegetHandlerFor(com.sun.enterprise.deployment.node.XMLElement element)

return
the handler registered for the subtag element of the curent XMLNode

        if (EjbTagNames.RELATIONSHIP_ROLE_SOURCE.equals(element.getQName())) {
            Map dispatchTable = new HashMap();
            dispatchTable.put(EjbTagNames.DESCRIPTION, "setRoleSourceDescription");
            ConfigurableNode newNode = new ConfigurableNode(getDescriptor(), dispatchTable, element);
            return newNode;
        } if (EjbTagNames.CMR_FIELD.equals(element.getQName())) {
            Map dispatchTable = new HashMap();
            dispatchTable.put(EjbTagNames.DESCRIPTION, "setCMRFieldDescription");
            ConfigurableNode newNode = new ConfigurableNode(getDescriptor(), dispatchTable, element);
            return newNode;            
        } else {
            return super.getHandlerFor(element);
        }       
    
public booleanhandlesElement(com.sun.enterprise.deployment.node.XMLElement element)

return
true if the element tag can be handled by any registered sub nodes of the current XMLNode

        if (EjbTagNames.RELATIONSHIP_ROLE_SOURCE.equals(element.getQName())) {
            return true;
        } 
        if (EjbTagNames.CMR_FIELD.equals(element.getQName())) {    
            return true;
        } 
        return super.handlesElement(element);
    
public voidsetElementValue(com.sun.enterprise.deployment.node.XMLElement element, java.lang.String value)
receives notiification of the value for a particular tag

param
element the xml element
param
value it's associated value

    
        if (EjbTagNames.MULTIPLICITY.equals(element.getQName())) {
            if ( value.equals("Many") )
                descriptor.setIsMany(true);
            else if ( value.equals("One") )
                descriptor.setIsMany(false);
            else if ( value.equals("many") ) // for backward compat with 1.3 FCS
                descriptor.setIsMany(true);
            else if ( value.equals("one") ) // for backward compat with 1.3 FCS
                descriptor.setIsMany(false);
            else 
                throw new IllegalArgumentException("Error in value of multiplicity element in EJB deployment descriptor XML: the value must be One or Many");
        } else if (EjbTagNames.EJB_NAME.equals(element.getQName())) {
            // let's get our bunlde descriptor...
                EjbBundleDescriptor bundleDesc = getEjbBundleDescriptor();
                EjbCMPEntityDescriptor desc = (EjbCMPEntityDescriptor)bundleDesc.getEjbByName(value);
                if (desc!=null){
                    descriptor.setPersistenceDescriptor(desc.getPersistenceDescriptor());            
                } else {
                    throw new IllegalArgumentException("Cannot find ejb " + value + " in bundle for relationship " + descriptor.getName());
                }                
        } else super.setElementValue(element, value);
    
public org.w3c.dom.NodewriteDescriptor(org.w3c.dom.Node parent, java.lang.String nodeName, com.sun.enterprise.deployment.RelationRoleDescriptor descriptor)
write the descriptor class to a DOM tree and return it

param
parent node in the DOM tree
param
node name for the root element of this xml fragment
param
the descriptor to write
return
the DOM tree top node

   
        Node roleNode = super.writeDescriptor(parent, nodeName, descriptor);
        LocalizedInfoNode localizedNode = new LocalizedInfoNode();
        localizedNode.writeLocalizedMap(roleNode, EjbTagNames.DESCRIPTION, descriptor.getLocalizedDescriptions());        
        if (descriptor.getRelationRoleName() != null) {
            appendTextChild(roleNode, EjbTagNames.EJB_RELATIONSHIP_ROLE_NAME, 
                descriptor.getRelationRoleName());        
        }
        
        // multiplicity
        if (descriptor.getIsMany()) {
            appendTextChild(roleNode, EjbTagNames.MULTIPLICITY, "Many");        
        } else {
            appendTextChild(roleNode, EjbTagNames.MULTIPLICITY, "One");        
        }
        
        // cascade-delete
        if (descriptor.getCascadeDelete()) {
            appendChild(roleNode, EjbTagNames.CASCADE_DELETE);        
        }
        
        Node roleSourceNode = appendChild(roleNode, EjbTagNames.RELATIONSHIP_ROLE_SOURCE);
        appendTextChild(roleSourceNode, EjbTagNames.DESCRIPTION, descriptor.getRoleSourceDescription());
        appendTextChild(roleSourceNode, EjbTagNames.EJB_NAME, descriptor.getOwner().getName());
        
	// cmr-field
	if (descriptor.getCMRField() != null ) {
            Node cmrFieldNode = appendChild(roleNode, EjbTagNames.CMR_FIELD);
            
	    // description
            appendTextChild(cmrFieldNode, EjbTagNames.DESCRIPTION, 
                                        descriptor.getCMRFieldDescription());
	    // cmr-field-name
	    appendTextChild(cmrFieldNode, EjbTagNames.CMR_FIELD_NAME, 
                                        descriptor.getCMRField());
	    // cmr-field-type
            appendTextChild(cmrFieldNode, EjbTagNames.CMR_FIELD_TYPE,
                                        descriptor.getCMRFieldType());
	}              
        return roleNode;