001: /*
002: * SchemaLoader.java February 2006
003: *
004: * Copyright (C) 2006, Niall Gallagher <niallg@users.sf.net>
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.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013: * GNU Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General
016: * Public License along with this library; if not, write to the
017: * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
018: * Boston, MA 02111-1307 USA
019: */
020:
021: package simple.page.translate;
022:
023: import freemarker.template.Template;
024: import freemarker.template.Configuration;
025: import java.util.MissingResourceException;
026: import java.util.ResourceBundle;
027: import simple.page.Workspace;
028:
029: /**
030: * The <code>SchemaLoader</code> is used to load schemas which can
031: * render a source file given a document definition. This will use a
032: * properties file within the translation package to decide, based on
033: * the runtime language, which template to load. By default this will
034: * support the Groovy and Java runtime languages for JSP sources.
035: *
036: * @author Niall Gallagher
037: */
038: final class SchemaLoader extends Configuration {
039:
040: /**
041: * Represents the language to template mappings for loading.
042: */
043: private static ResourceBundle load;
044:
045: static {
046: try {
047: load = ResourceBundle
048: .getBundle("simple.page.translate.Schema");
049: } catch (MissingResourceException e) {
050: e.printStackTrace();
051: }
052: }
053:
054: /**
055: * Constructor for the <code>SchemaLoader</code> object. This is
056: * used to load schemas that can render sources for a runtime
057: * language. By default this can load Groovy and Java schemas.
058: *
059: * @param project this is the workspace for the current project
060: */
061: public SchemaLoader(Workspace project) {
062: this (project, SchemaLoader.class);
063: }
064:
065: /**
066: * Constructor for the <code>SchemaLoader</code> object. This is
067: * used to load schemas that can render sources for a runtime
068: * language. By default this can load Groovy and Java schemas.
069: *
070: * @param project this is the workspace for the current project
071: * @param source this is the class to load templates with
072: */
073: public SchemaLoader(Workspace project, Class source) {
074: this .setClassForTemplateLoading(source, "/");
075: }
076:
077: /**
078: * This is used to load a schema for the runtime language that
079: * is specified by the provided source object. If the language is
080: * not specified within the provided <code>Definition</code> then
081: * this will throw an exception.
082: *
083: * @param source the source object that is to be rendered
084: *
085: * @return this returns a schema to render the source object
086: */
087: public Schema getSchema(Definition source) throws Exception {
088: String type = source.getLanguage();
089:
090: try {
091: type = load.getString(type);
092: } catch (MissingResourceException e) {
093: }
094: return getInstance(source, type);
095: }
096:
097: /**
098: * This is used to load a schema for the runtime language that
099: * is specified by the provided source object. The schema named
100: * is loaded, if it cannot be located an exception is thrown.
101: *
102: * @param source the source object that is to be rendered
103: * @param type this is the name of the schema file to load
104: *
105: * @return this returns a schema to render the source object
106: */
107: private Schema getInstance(Definition source, String type)
108: throws Exception {
109: return new Schema(getTemplate(type), source);
110: }
111: }
|