package org.jboss.metadata;
import org.jboss.deployment.DeploymentException;
import org.jboss.webservice.metadata.ServiceRefMetaData;
import org.w3c.dom.Element;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.net.URLClassLoader;
public class ClientMetaData
{
private String displayName;
private String jndiName;
private ArrayList environmentEntries = new ArrayList();
private HashMap ejbReferences = new HashMap();
private HashMap serviceReferences = new HashMap();
private HashMap resourceReferences = new HashMap();
private HashMap resourceEnvReferences = new HashMap();
private HashMap resourceEnvReferenceLinks = new HashMap();
private String callbackHandler;
private URLClassLoader resourceCl;
public void setResourceClassLoader(URLClassLoader resourceCl)
{
this.resourceCl = resourceCl;
}
public String getDisplayName()
{
return displayName;
}
public String getJndiName()
{
String name = jndiName;
if( name == null )
name = displayName;
return name;
}
public ArrayList getEnvironmentEntries()
{
return environmentEntries;
}
public HashMap getEjbReferences()
{
return ejbReferences;
}
public HashMap getResourceReferences()
{
return resourceReferences;
}
public HashMap getResourceEnvReferences()
{
return resourceEnvReferences;
}
public String getCallbackHandler()
{
return callbackHandler;
}
public HashMap getServiceReferences()
{
return serviceReferences;
}
public void importClientXml(Element element)
throws DeploymentException
{
displayName = MetaData.getUniqueChildContent(element, "display-name");
Iterator iterator = MetaData.getChildrenByTagName(element, "env-entry");
while (iterator.hasNext())
{
Element envEntry = (Element) iterator.next();
EnvEntryMetaData envEntryMetaData = new EnvEntryMetaData();
envEntryMetaData.importEjbJarXml(envEntry);
environmentEntries.add(envEntryMetaData);
}
iterator = MetaData.getChildrenByTagName(element, "ejb-ref");
while (iterator.hasNext())
{
Element ejbRef = (Element) iterator.next();
EjbRefMetaData ejbRefMetaData = new EjbRefMetaData();
ejbRefMetaData.importEjbJarXml(ejbRef);
ejbReferences.put(ejbRefMetaData.getName(), ejbRefMetaData);
}
iterator = MetaData.getChildrenByTagName(element, "service-ref");
while (iterator.hasNext())
{
Element serviceRef = (Element) iterator.next();
ServiceRefMetaData refMetaData = new ServiceRefMetaData(resourceCl);
refMetaData.importStandardXml(serviceRef);
serviceReferences.put(refMetaData.getServiceRefName(), refMetaData);
}
Element callbackElement = MetaData.getOptionalChild(element,
"callback-handler");
if (callbackElement != null)
{
callbackHandler = MetaData.getElementContent(callbackElement);
}
iterator = MetaData.getChildrenByTagName(element, "resource-ref");
while (iterator.hasNext())
{
Element resourceRef = (Element) iterator.next();
ResourceRefMetaData resourceRefMetaData = new ResourceRefMetaData();
resourceRefMetaData.importEjbJarXml(resourceRef);
resourceReferences.put(resourceRefMetaData.getRefName(),
resourceRefMetaData);
}
iterator = MetaData.getChildrenByTagName(element, "resource-env-ref");
while (iterator.hasNext())
{
Element resourceRef = (Element) iterator.next();
ResourceEnvRefMetaData refMetaData = new ResourceEnvRefMetaData();
refMetaData.importEjbJarXml(resourceRef);
resourceEnvReferences.put(refMetaData.getRefName(), refMetaData);
}
iterator = MetaData.getChildrenByTagName(element, "message-destination-ref");
while (iterator.hasNext())
{
Element resourceRef = (Element) iterator.next();
ResourceEnvRefMetaData refMetaData = new ResourceEnvRefMetaData();
refMetaData.importEjbJarXml(resourceRef);
String refName = refMetaData.getRefName();
String link = refMetaData.getLink();
if( link != null )
{
ArrayList linkedRefs = (ArrayList) resourceEnvReferenceLinks.get(link);
if( linkedRefs == null )
{
linkedRefs = new ArrayList();
resourceEnvReferenceLinks.put(link, linkedRefs);
}
linkedRefs.add(refMetaData);
}
resourceEnvReferences.put(refName, refMetaData);
}
}
public void importJbossClientXml(Element element) throws DeploymentException
{
jndiName = MetaData.getOptionalChildContent(element, "jndi-name");
Iterator iterator = MetaData.getChildrenByTagName(element, "ejb-ref");
while (iterator.hasNext())
{
Element ejbRef = (Element) iterator.next();
String ejbRefName = MetaData.getElementContent(
MetaData.getUniqueChild(ejbRef, "ejb-ref-name"));
EjbRefMetaData ejbRefMetaData = (EjbRefMetaData) ejbReferences.get(ejbRefName);
if (ejbRefMetaData == null)
{
throw new DeploymentException("ejb-ref " + ejbRefName
+ " found in jboss-client.xml but not in application-client.xml");
}
ejbRefMetaData.importJbossXml(ejbRef);
}
iterator = MetaData.getChildrenByTagName(element, "service-ref");
while (iterator.hasNext())
{
Element serviceRef = (Element) iterator.next();
String serviceRefName = MetaData.getUniqueChildContent(serviceRef, "service-ref-name");
ServiceRefMetaData refMetaData = (ServiceRefMetaData)serviceReferences.get(serviceRefName);
if (refMetaData == null)
{
throw new DeploymentException("service-ref " + serviceRefName
+ " found in jboss-client.xml but not in application-client.xml");
}
refMetaData.importJBossXml(serviceRef);
}
iterator = MetaData.getChildrenByTagName(element, "resource-ref");
while (iterator.hasNext())
{
Element resourceRef = (Element) iterator.next();
String resRefName = MetaData.getElementContent(
MetaData.getUniqueChild(resourceRef, "res-ref-name"));
ResourceRefMetaData resourceRefMetaData =
(ResourceRefMetaData) resourceReferences.get(resRefName);
if (resourceRefMetaData == null)
{
throw new DeploymentException("resource-ref " + resRefName
+ " found in jboss-client.xml but not in application-client.xml");
}
resourceRefMetaData.importJbossXml(resourceRef);
}
iterator = MetaData.getChildrenByTagName(element, "resource-env-ref");
while (iterator.hasNext())
{
Element resourceRef = (Element) iterator.next();
String resRefName = MetaData.getElementContent(
MetaData.getUniqueChild(resourceRef, "resource-env-ref-name"));
ResourceEnvRefMetaData refMetaData =
(ResourceEnvRefMetaData) resourceEnvReferences.get(resRefName);
if (refMetaData == null)
{
ArrayList linkedRefs = (ArrayList) resourceEnvReferenceLinks.get(resRefName);
if( linkedRefs != null )
{
for(int n = 0; n < linkedRefs.size(); n ++)
{
refMetaData = (ResourceEnvRefMetaData) linkedRefs.get(n);
refMetaData.importJbossXml(resourceRef);
}
}
else
{
throw new DeploymentException("resource-env-ref " + resRefName
+ " found in jboss-client.xml but not in application-client.xml");
}
}
else
{
refMetaData.importJbossXml(resourceRef);
}
}
}
}