001: /*
002: * Schema.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 java.util.HashMap;
025: import java.util.Map;
026: import java.io.Writer;
027:
028: /**
029: * The <code>Schema</code> object is used to define an attribute set
030: * that can be used to compose a JSP page. This is used to acquire all
031: * details regarding a JSP document definition, it is provided to a
032: * templating layer, where attributes are retrieved and used to compose
033: * the resulting source, which can be Groovy or Java.
034: * <p>
035: * The attributes that can be acquired from the document definition
036: * are taken via this hash map from the Freemarker template. They
037: * include the JSP imports, the content type, and the charset.
038: *
039: * @author Niall Gallagher
040: *
041: * @see simple.page.translate.Generator
042: */
043: final class Schema extends HashMap {
044:
045: /**
046: * This is the actual template used to render the source.
047: */
048: private Template template;
049:
050: /**
051: * This is the source object associated with this schema.
052: */
053: private Definition source;
054:
055: /**
056: * Constructor for the <code>Schema</code> object. This is used
057: * to wrap the provided template, which will be used to render
058: * the attributes provided by the schema. All attributes are
059: * taken from the provided document definition.
060: *
061: * @param template this is the template used for rendering
062: * @param source this is the document definition to be used
063: */
064: public Schema(Template template, Definition source) {
065: this .template = template;
066: this .source = source;
067: }
068:
069: /**
070: * This is used to acquire attributes from the source definition.
071: * This object restricts the available attributes, this keeps the
072: * template layer from having to query the document definition
073: * directly, which may change and force the templates to change.
074: *
075: * @param name this is the name of the attribute to acquire
076: *
077: * @return this is the attribute acquired from the definition
078: */
079: public Object get(Object name) {
080: if (name.equals("charset")) {
081: return source.getCharset();
082: }
083: if (name.equals("type")) {
084: return source.getType();
085: }
086: if (name.equals("contents")) {
087: return source.getContents();
088: }
089: if (name.equals("declarations")) {
090: return source.getDeclarations();
091: }
092: if (name.equals("imports")) {
093: return source.getImports();
094: }
095: if (name.equals("package")) {
096: return source.getPackage();
097: }
098: if (name.equals("name")) {
099: return source.getName();
100: }
101: if (name.equals("date")) {
102: return source.getDate();
103: }
104: return null;
105: }
106:
107: /**
108: * This method will use this scheme instance to write a source file
109: * to the given <code>Writer</code>. The template is given all the
110: * data via the schema attribute names. Once the schema is given to
111: * the template the template will query it for required attributes.
112: *
113: * @param target this is the writer used to emit the source to
114: */
115: public void write(Writer target) throws Exception {
116: template.process(this, target);
117: }
118: }
|