KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > freemarker > core > LibraryLoad


1 /*
2  * Copyright (c) 2003 The Visigoth Software Society. All rights
3  * reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in
14  * the documentation and/or other materials provided with the
15  * distribution.
16  *
17  * 3. The end-user documentation included with the redistribution, if
18  * any, must include the following acknowledgement:
19  * "This product includes software developed by the
20  * Visigoth Software Society (http://www.visigoths.org/)."
21  * Alternately, this acknowledgement may appear in the software itself,
22  * if and wherever such third-party acknowledgements normally appear.
23  *
24  * 4. Neither the name "FreeMarker", "Visigoth", nor any of the names of the
25  * project contributors may be used to endorse or promote products derived
26  * from this software without prior written permission. For written
27  * permission, please contact visigoths@visigoths.org.
28  *
29  * 5. Products derived from this software may not be called "FreeMarker" or "Visigoth"
30  * nor may "FreeMarker" or "Visigoth" appear in their names
31  * without prior written permission of the Visigoth Software Society.
32  *
33  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
34  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
35  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
36  * DISCLAIMED. IN NO EVENT SHALL THE VISIGOTH SOFTWARE SOCIETY OR
37  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
38  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
39  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
40  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
41  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
42  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
43  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
44  * SUCH DAMAGE.
45  * ====================================================================
46  *
47  * This software consists of voluntary contributions made by many
48  * individuals on behalf of the Visigoth Software Society. For more
49  * information on the Visigoth Software Society, please see
50  * http://www.visigoths.org/
51  */

52
53 package freemarker.core;
54
55 import java.io.IOException JavaDoc;
56
57 import freemarker.template.Template;
58 import freemarker.template.TemplateException;
59
60
61 /**
62  * An instruction that gets another template
63  * and processes it within the current template.
64  */

65 public final class LibraryLoad extends TemplateElement {
66
67     private Expression templateName;
68     private String JavaDoc namespace;
69     private final String JavaDoc templatePath;
70
71     /**
72      * @param template the template that this <tt>Include</tt> is a part of.
73      * @param templateName the name of the template to be included.
74      * @param namespace the namespace to assign this library to
75      */

76     LibraryLoad(Template template,
77             Expression templateName,
78             String JavaDoc namespace)
79     {
80         this.namespace = namespace;
81         String JavaDoc templatePath1 = template.getName();
82         int lastSlash = templatePath1.lastIndexOf('/');
83         templatePath = lastSlash == -1 ? "" : templatePath1.substring(0, lastSlash + 1);
84         this.templateName = templateName;
85     }
86
87     void accept(Environment env) throws TemplateException, IOException JavaDoc {
88         String JavaDoc templateNameString = templateName.getStringValue(env);
89         if( templateNameString == null ) {
90             String JavaDoc msg = "Error " + getStartLocation()
91                         + "The expression " + templateName + " is undefined.";
92             throw new InvalidReferenceException(msg, env);
93         }
94         Template importedTemplate;
95         try {
96             if(!env.isClassicCompatible()) {
97                 if (templateNameString.indexOf("://") >0) {
98                     ;
99                 }
100                 else if(templateNameString.length() > 0 && templateNameString.charAt(0) == '/') {
101                     int protIndex = templatePath.indexOf("://");
102                     if (protIndex >0) {
103                         templateNameString = templatePath.substring(0, protIndex + 2) + templateNameString;
104                     } else {
105                         templateNameString = templateNameString.substring(1);
106                     }
107                 }
108                 else {
109                     templateNameString = templatePath + templateNameString;
110                 }
111             }
112             importedTemplate = env.getTemplateForImporting(templateNameString);
113         }
114         catch (ParseException pe) {
115             String JavaDoc msg = "Error parsing imported template "
116                         + templateNameString;
117             throw new TemplateException(msg, pe, env);
118         }
119         catch (IOException JavaDoc ioe) {
120             String JavaDoc msg = "Error reading imported file "
121                         + templateNameString;
122             throw new TemplateException(msg, ioe, env);
123         }
124         env.importLib(importedTemplate, namespace);
125     }
126
127     public String JavaDoc getCanonicalForm() {
128         StringBuffer JavaDoc buf = new StringBuffer JavaDoc("<#import ");
129         buf.append(templateName);
130         buf.append(" as ");
131         buf.append(namespace);
132         buf.append("/>");
133         return buf.toString();
134     }
135
136     public String JavaDoc getDescription() {
137         return "import " + templateName + " as " + namespace;
138     }
139
140     public String JavaDoc getTemplateName() {
141         return templateName.toString();
142     }
143 }
144
Popular Tags