/*
* Copyright 2003-2006 Rick Knowles <winstone-devel at lists sourceforge net>
* Distributed under the terms of either:
* - the common development and distribution license (CDDL), v1.0; or
* - the GNU Lesser General Public License, v2.1 or later
*/
package winstone.jndi;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.w3c.dom.Node;
import winstone.Logger;
import winstone.WebAppConfiguration;
/**
* Implements a simple web.xml + command line arguments style jndi manager
*
* @author <a href="mailto:rick_knowles@hotmail.com">Rick Knowles</a>
* @version $Id: WebAppJNDIManager.java,v 1.9 2006/02/28 07:32:48 rickknowles Exp $
*/
public class WebAppJNDIManager extends ContainerJNDIManager {
final static String ELEM_ENV_ENTRY = "env-entry";
final static String ELEM_ENV_ENTRY_NAME = "env-entry-name";
final static String ELEM_ENV_ENTRY_TYPE = "env-entry-type";
final static String ELEM_ENV_ENTRY_VALUE = "env-entry-value";
/**
* Gets the relevant list of objects from the args, validating against the
* web.xml nodes supplied. All node addresses are assumed to be relative to
* the java:/comp/env context
*/
public WebAppJNDIManager(Map args, List webXMLNodes, ClassLoader loader) {
super(args, webXMLNodes, loader);
// If the webXML nodes are not null, validate that all the entries we
// wanted have been created
if (webXMLNodes != null)
for (Iterator i = webXMLNodes.iterator(); i.hasNext();) {
Node node = (Node) i.next();
// Extract the env-entry nodes and create the objects
if (node.getNodeType() != Node.ELEMENT_NODE)
continue;
else if (node.getNodeName().equals(ELEM_ENV_ENTRY)) {
String name = null;
String type = null;
String value = null;
for (int m = 0; m < node.getChildNodes().getLength(); m++) {
Node envNode = node.getChildNodes().item(m);
if (envNode.getNodeType() != Node.ELEMENT_NODE)
continue;
else if (envNode.getNodeName().equals(ELEM_ENV_ENTRY_NAME))
name = WebAppConfiguration.getTextFromNode(envNode);
else if (envNode.getNodeName().equals(ELEM_ENV_ENTRY_TYPE))
type = WebAppConfiguration.getTextFromNode(envNode);
else if (envNode.getNodeName().equals(ELEM_ENV_ENTRY_VALUE))
value = WebAppConfiguration.getTextFromNode(envNode);
}
if ((name != null) && (type != null) && (value != null)) {
Logger.log(Logger.FULL_DEBUG, JNDI_RESOURCES,
"WebAppJNDIManager.CreatingResourceWebXML",
name);
Object obj = createObject(name, type, value, args, loader);
if (obj != null)
this.objectsToCreate.put(name, obj);
}
}
}
}
}