001: /**
002: * EasyBeans
003: * Copyright (C) 2007 Bull S.A.S.
004: * Contact: easybeans@ow2.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * --------------------------------------------------------------------------
022: * $Id: WARTLDLoader.java 2071 2007-11-27 18:25:33Z benoitf $
023: * --------------------------------------------------------------------------
024: */package org.ow2.easybeans.deployment.xml.parsing;
025:
026: import java.net.URL;
027:
028: import org.ow2.easybeans.deployment.xml.struct.Tag;
029: import org.ow2.easybeans.deployment.xml.struct.WAR;
030: import org.ow2.easybeans.util.xml.DocumentParser;
031: import org.ow2.easybeans.util.xml.DocumentParserException;
032: import org.ow2.easybeans.util.xml.XMLUtils;
033: import org.ow2.util.log.Log;
034: import org.ow2.util.log.LogFactory;
035: import org.w3c.dom.Document;
036: import org.w3c.dom.Element;
037: import org.w3c.dom.NodeList;
038:
039: /**
040: * This class analyzes the TLD files and fill a given struct.
041: * @author Florent Benoit
042: */
043: public final class WARTLDLoader extends AbsWebLoader {
044:
045: /**
046: * Logger.
047: */
048: private static Log logger = LogFactory.getLog(WARTLDLoader.class);
049:
050: /**
051: * Utility class, no public constructor.
052: * @param url the url that is pointing to the tld file.
053: * @param war the given war file that needs to be completed.
054: */
055: private WARTLDLoader(final URL url, final WAR war) {
056: super (url, war);
057: }
058:
059: /**
060: * Load the tld file.
061: * @param url the URL of the TLD file.
062: * @param war the given war file that needs to be completed.
063: * @throws ParsingException if parsing of XML file fails.
064: * @return an application object.
065: */
066: public static WAR scanTLD(final URL url, final WAR war)
067: throws ParsingException {
068: logger.debug("Analyzing url {0}", url);
069: WARTLDLoader warTldLoader = new WARTLDLoader(url, war);
070: warTldLoader.parse();
071: return warTldLoader.getWAR();
072: }
073:
074: /**
075: * Analyze the URL and build an EJB3 object which contains data of the XML.
076: * @throws ParsingException if the analyze of the file fails.
077: */
078: public void parse() throws ParsingException {
079: // Get document
080: Document document = null;
081: try {
082: document = DocumentParser.getDocument(getURL(), false,
083: new WAREntityResolver());
084: } catch (DocumentParserException e) {
085: throw new ParsingException("Cannot parse the url", e);
086: }
087:
088: // Root element = <taglib>
089: Element tagLibRootElement = document.getDocumentElement();
090:
091: // Analyze the taglib element
092: analyzeListeners(tagLibRootElement);
093: analyzeTags(tagLibRootElement);
094:
095: }
096:
097: /**
098: * Find and analyze the tags in the given DOM element.
099: * @param rootElement the element to analyze
100: */
101: protected void analyzeTags(final Element rootElement) {
102: // Listeners
103: NodeList tagList = rootElement.getElementsByTagName(Tag.NAME);
104: for (int i = 0; i < tagList.getLength(); i++) {
105: Element tagElement = (Element) tagList.item(i);
106:
107: // Build instance of a Tag struct object
108: Tag tag = new Tag();
109: getWAR().addTag(tag);
110:
111: // Analyze tag
112: analyzeTag(tagElement, tag);
113: }
114: }
115:
116: /**
117: * Analyze the given tag.
118: * @param tagElement the dom element.
119: * @param tag the structure representing object.
120: */
121: protected void analyzeTag(final Element tagElement, final Tag tag) {
122: // Get class
123: String tagClassName = XMLUtils.getStringValueElement(
124: tagElement, "tag-class");
125: tag.setTagClassName(tagClassName);
126: }
127:
128: }
|