001: /******************************************************************************
002: * JBoss, a division of Red Hat *
003: * Copyright 2006, Red Hat Middleware, LLC, and individual *
004: * contributors as indicated by the @authors tag. See the *
005: * copyright.txt in the distribution for a full listing of *
006: * individual contributors. *
007: * *
008: * This is free software; you can redistribute it and/or modify it *
009: * under the terms of the GNU Lesser General Public License as *
010: * published by the Free Software Foundation; either version 2.1 of *
011: * the License, or (at your option) any later version. *
012: * *
013: * This software is distributed in the hope that it will be useful, *
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of *
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
016: * Lesser General Public License for more details. *
017: * *
018: * You should have received a copy of the GNU Lesser General Public *
019: * License along with this software; if not, write to the Free *
020: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
021: * 02110-1301 USA, or see the FSF site: http://www.fsf.org. *
022: ******************************************************************************/package org.jboss.portal.format.template;
023:
024: import org.dom4j.Document;
025: import org.jboss.portal.common.io.IOTools;
026: import org.jboss.portal.format.util.CLLoader;
027: import org.jboss.portal.format.util.Loader;
028:
029: import java.io.InputStream;
030: import java.io.InputStreamReader;
031: import java.io.Reader;
032: import java.util.Set;
033:
034: /**
035: * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
036: * @version $Revision: 8784 $
037: */
038: public class TemplateLoader extends TemplateRepository {
039:
040: private Loader loader;
041:
042: // private Map defaults = new HashMap();
043:
044: public TemplateLoader(Loader loader) {
045: setLoader(loader);
046: }
047:
048: public Loader getLoader() {
049: return loader;
050: }
051:
052: public void setLoader(Loader loader) {
053: if (loader == null) {
054: throw new IllegalArgumentException("loader cannot be null");
055: }
056: this .loader = loader;
057: }
058:
059: // public void load(String name)
060: // {
061: // InputStream in = loader.load(name + ".properties");
062: // if (in != null)
063: // {
064: // Properties props = new Properties();
065: // }
066: // else
067: // {
068: //
069: // }
070: // }
071:
072: // /**
073: // * Creates a template instance.
074: // */
075: // public Template createTemplate(String name)
076: // {
077: // Properties props = (Properties)defaults.get(name);
078: // Context ctx = Context.NULL_CONTEXT;
079: // if (props != null)
080: // {
081: // ctx = new HashContext();
082: // ctx.putAll(props);
083: // }
084: // return createTemplate(name, ctx);
085: // }
086:
087: // public void addTemplate(String name)
088: // {
089: // addTemplate(name, name);
090: // }
091: //
092: //
093:
094: public void addTemplate(String name, String loadName)
095: throws BuildException {
096: Document doc = loadTemplate(loadName);
097: addTemplate(name, doc);
098: }
099:
100: public void addTemplate(String name, String loadName, Set names)
101: throws BuildException {
102: Document doc = loadTemplate(loadName);
103: addTemplate(name, doc, names);
104: }
105:
106: // public void addSubTemplate(String templateName, String loadName, String xpath, Set names)
107: // {
108: // Document template = loadTemplate(loadName);
109: // addTemplate(templateName, (Element)template.selectSingleNode(xpath), names);
110: // }
111:
112: // public void addSubTemplate(String templateName, String loadName, String xpath)
113: // {
114: // InputStream pin = null;
115: // try
116: // {
117: // Properties props = new Properties();
118: // pin = loader.loadProperties(loadName);
119: // if (pin != null)
120: // {
121: // defaults.put(loadName, props);
122: // props.load(pin);
123: // }
124: // addSubTemplate(templateName, props.keySet());
125: // }
126: // catch(IOException e)
127: // {
128: // e.printStackTrace();
129: // }
130: // finally
131: // {
132: // Tools.safeClose(pin);
133: // }
134: // }
135:
136: /** Simply loads a template and returns it. */
137: public Document loadTemplate(String name) throws BuildException {
138: InputStream tin = null;
139: try {
140: tin = loader.load(name);
141: if (tin != null) {
142: Reader reader = new InputStreamReader(tin);
143: TemplateParser parser = new TemplateParser(reader);
144: return parser.parse();
145: } else {
146: throw new BuildException("Template " + name
147: + " not found");
148: }
149: } catch (ParseException e) {
150: throw new BuildException(
151: "Cannot parse the template source " + name, e);
152: } finally {
153: IOTools.safeClose(tin);
154: }
155: }
156:
157: public static TemplateLoader create(ClassLoader cl, String base) {
158: return new TemplateLoader(new CLLoader(cl, base));
159: }
160: }
|