001: package org.tigris.scarab.util;
002:
003: /* ================================================================
004: * Copyright (c) 2000 CollabNet. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions are
008: * met:
009: *
010: * 1. Redistributions of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * 2. Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in the
015: * documentation and/or other materials provided with the distribution.
016: *
017: * 3. The end-user documentation included with the redistribution, if
018: * any, must include the following acknowlegement: "This product includes
019: * software developed by CollabNet (http://www.collab.net/)."
020: * Alternately, this acknowlegement may appear in the software itself, if
021: * and wherever such third-party acknowlegements normally appear.
022: *
023: * 4. The hosted project names must not be used to endorse or promote
024: * products derived from this software without prior written
025: * permission. For written permission, please contact info@collab.net.
026: *
027: * 5. Products derived from this software may not use the "Tigris" name
028: * nor may "Tigris" appear in their names without prior written
029: * permission of CollabNet.
030: *
031: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
032: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
033: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
034: * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
035: * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
036: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
037: * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
038: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
039: * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
040: * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
041: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
042: *
043: * ====================================================================
044: *
045: * This software consists of voluntary contributions made by many
046: * individuals on behalf of CollabNet.
047: */
048:
049: import org.apache.turbine.Turbine;
050: import org.apache.turbine.RunData;
051: import org.apache.turbine.modules.Module;
052: import org.apache.commons.logging.Log;
053: import org.apache.commons.logging.LogFactory;
054:
055: /**
056: * Renders templates in the templates/snippets directory. Its primary
057: * use is within actions, if the messaging is more complex than a simple
058: * string. One cannot use the renderer that might be in the context as
059: * that renderer could output directly to the response, while the action
060: * message should not be sent until a later time.
061: *
062: * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
063: */
064: public class SnippetRenderer implements SkipFiltering {
065: private static final Log LOG = LogFactory
066: .getLog(SnippetRenderer.class);
067: private static final String SNIPPETS = "snippets";
068: /**
069: * RunData of the request this SnippetRenderer is for.
070: */
071: private RunData data;
072: private String template;
073:
074: /**
075: * Construct a renderer for the given RunData.
076: */
077: public SnippetRenderer(RunData data, String template) {
078: this .data = data;
079: this .template = template;
080: }
081:
082: /**
083: * Render the given template. TemplateContext to use will be extracted from
084: * the RunData with which this SnippetRenderer was constructer.
085: *
086: * @param template name/path of template in the format expected by the
087: * appropriate template engine service
088: * @return Result of template merge
089: */
090: public String toString() {
091: String result = null;
092: LOG.debug("Rendering snippet " + template);
093: try {
094: result = Module.handleRequest(Module
095: .getTemplateContext(data), Turbine.getResolver()
096: .getTemplate(SNIPPETS, template));
097: } catch (Exception e) {
098: LOG.error("Error rendering " + template + ". ", e);
099: result = "ERROR!";
100: }
101: return result;
102: }
103: }
|