Return-Path: Delivered-To: apmail-velocity-commits-archive@locus.apache.org Received: (qmail 27721 invoked from network); 4 Apr 2007 05:54:56 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 4 Apr 2007 05:54:56 -0000 Received: (qmail 78156 invoked by uid 500); 4 Apr 2007 05:55:03 -0000 Delivered-To: apmail-velocity-commits-archive@velocity.apache.org Received: (qmail 78126 invoked by uid 500); 4 Apr 2007 05:55:03 -0000 Mailing-List: contact commits-help@velocity.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@velocity.apache.org Delivered-To: mailing list commits@velocity.apache.org Received: (qmail 78106 invoked by uid 99); 4 Apr 2007 05:55:02 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Apr 2007 22:55:02 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Apr 2007 22:54:51 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 77B9D1A983E; Tue, 3 Apr 2007 22:54:31 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r525422 [2/3] - in /velocity/texen/trunk: ./ build/ src/ src/java/ src/java/org/ src/java/org/apache/ src/java/org/apache/texen/ src/java/org/apache/texen/ant/ src/java/org/apache/texen/defaults/ src/java/org/apache/texen/util/ src/test/ sr... Date: Wed, 04 Apr 2007 05:54:21 -0000 To: commits@velocity.apache.org From: wglass@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070404055431.77B9D1A983E@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: velocity/texen/trunk/src/java/org/apache/texen/ant/TexenTask.java URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/java/org/apache/texen/ant/TexenTask.java?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/src/java/org/apache/texen/ant/TexenTask.java (added) +++ velocity/texen/trunk/src/java/org/apache/texen/ant/TexenTask.java Tue Apr 3 22:54:17 2007 @@ -0,0 +1,650 @@ +package org.apache.texen.ant; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.Writer; +import java.util.Date; +import java.util.Iterator; +import java.util.StringTokenizer; + +import org.apache.commons.collections.ExtendedProperties; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.context.Context; +import org.apache.velocity.exception.MethodInvocationException; +import org.apache.velocity.exception.ParseErrorException; +import org.apache.velocity.exception.ResourceNotFoundException; +import org.apache.velocity.runtime.RuntimeConstants; +import org.apache.velocity.texen.Generator; +import org.apache.velocity.util.StringUtils; + +/** + * An ant task for generating output by using Velocity + * + * @author Jason van Zyl + * @author Robert Burrell Donkin + * @version $Id$ + */ +public class TexenTask + extends Task +{ + /** + * This message fragment (telling users to consult the log or + * invoke ant with the -debug flag) is appended to rethrown + * exception messages. + */ + private final static String ERR_MSG_FRAGMENT = + ". For more information consult the velocity log, or invoke ant " + + "with the -debug flag."; + + /** + * This is the control template that governs the output. + * It may or may not invoke the services of worker + * templates. + */ + protected String controlTemplate; + + /** + * This is where Velocity will look for templates + * using the file template loader. + */ + protected String templatePath; + + /** + * This is where texen will place all the output + * that is a product of the generation process. + */ + protected String outputDirectory; + + /** + * This is the file where the generated text + * will be placed. + */ + protected String outputFile; + + /** + * This is the encoding for the output file(s). + */ + protected String outputEncoding; + + /** + * This is the encoding for the input file(s) + * (templates). + */ + protected String inputEncoding; + + /** + *

+ * These are properties that are fed into the + * initial context from a properties file. This + * is simply a convenient way to set some values + * that you wish to make available in the context. + *

+ *

+ * These values are not critical, like the template path + * or output path, but allow a convenient way to + * set a value that may be specific to a particular + * generation task. + *

+ *

+ * For example, if you are generating scripts to allow + * user to automatically create a database, then + * you might want the $databaseName + * to be placed + * in the initial context so that it is available + * in a script that might look something like the + * following: + *

+     * #!bin/sh
+     *
+     * echo y | mysqladmin create $databaseName
+     * 
+ * The value of $databaseName isn't critical to + * output, and you obviously don't want to change + * the ant task to simply take a database name. + * So initial context values can be set with + * properties file. + */ + protected ExtendedProperties contextProperties; + + /** + * Property which controls whether the classpath + * will be used when trying to locate templates. + */ + protected boolean useClasspath; + + /** + * The LogFile (incl. path) to log to. + */ + protected String logFile; + + /** + * Property which controls whether the resource + * loader will be told to cache. Default false + */ + + protected String useResourceLoaderCache = "false"; + /** + * + */ + protected String resourceLoaderModificationCheckInterval = "2"; + + /** + * [REQUIRED] Set the control template for the + * generating process. + * @param controlTemplate + */ + public void setControlTemplate (String controlTemplate) + { + this.controlTemplate = controlTemplate; + } + + /** + * Get the control template for the + * generating process. + * @return The current control template. + */ + public String getControlTemplate() + { + return controlTemplate; + } + + /** + * [REQUIRED] Set the path where Velocity will look + * for templates using the file template + * loader. + * @param templatePath + * @throws Exception + */ + + public void setTemplatePath(String templatePath) throws Exception + { + StringBuffer resolvedPath = new StringBuffer(); + StringTokenizer st = new StringTokenizer(templatePath, ","); + while ( st.hasMoreTokens() ) + { + // resolve relative path from basedir and leave + // absolute path untouched. + File fullPath = project.resolveFile(st.nextToken()); + resolvedPath.append(fullPath.getCanonicalPath()); + if ( st.hasMoreTokens() ) + { + resolvedPath.append(","); + } + } + this.templatePath = resolvedPath.toString(); + + System.out.println(templatePath); + } + + /** + * Get the path where Velocity will look + * for templates using the file template + * loader. + * @return The template path. + */ + public String getTemplatePath() + { + return templatePath; + } + + /** + * [REQUIRED] Set the output directory. It will be + * created if it doesn't exist. + * @param outputDirectory + */ + public void setOutputDirectory(File outputDirectory) + { + try + { + this.outputDirectory = outputDirectory.getCanonicalPath(); + } + catch (java.io.IOException ioe) + { + throw new BuildException(ioe); + } + } + + /** + * Get the output directory. + * @return The output directory. + */ + public String getOutputDirectory() + { + return outputDirectory; + } + + /** + * [REQUIRED] Set the output file for the + * generation process. + * @param outputFile + */ + public void setOutputFile(String outputFile) + { + this.outputFile = outputFile; + } + + /** + * Set the output encoding. + * @param outputEncoding + */ + public void setOutputEncoding(String outputEncoding) + { + this.outputEncoding = outputEncoding; + } + + /** + * Set the input (template) encoding. + * @param inputEncoding + */ + public void setInputEncoding(String inputEncoding) + { + this.inputEncoding = inputEncoding; + } + + /** + * Get the output file for the + * generation process. + * @return The output file. + */ + public String getOutputFile() + { + return outputFile; + } + + /** + * Sets the log file. + * @param log + */ + public void setLogFile(String log) + { + this.logFile = log; + } + + /** + * Gets the log file. + * @return The log file. + */ + public String getLogFile() + { + return this.logFile; + } + + /** + * Set the context properties that will be + * fed into the initial context be the + * generating process starts. + * @param file + */ + public void setContextProperties( String file ) + { + String[] sources = StringUtils.split(file,","); + contextProperties = new ExtendedProperties(); + + // Always try to get the context properties resource + // from a file first. Templates may be taken from a JAR + // file but the context properties resource may be a + // resource in the filesystem. If this fails than attempt + // to get the context properties resource from the + // classpath. + for (int i = 0; i < sources.length; i++) + { + ExtendedProperties source = new ExtendedProperties(); + + try + { + // resolve relative path from basedir and leave + // absolute path untouched. + File fullPath = project.resolveFile(sources[i]); + log("Using contextProperties file: " + fullPath); + source.load(new FileInputStream(fullPath)); + } + catch (IOException e) + { + ClassLoader classLoader = this.getClass().getClassLoader(); + + try + { + InputStream inputStream = classLoader.getResourceAsStream(sources[i]); + + if (inputStream == null) + { + throw new BuildException("Context properties file " + sources[i] + + " could not be found in the file system or on the classpath!"); + } + else + { + source.load(inputStream); + } + } + catch (IOException ioe) + { + source = null; + } + } + + if (source != null) + { + for (Iterator j = source.getKeys(); j.hasNext(); ) + { + String name = (String) j.next(); + String value = StringUtils.nullTrim(source.getString(name)); + contextProperties.setProperty(name,value); + } + } + } + } + + /** + * Get the context properties that will be + * fed into the initial context be the + * generating process starts. + * @return The current context properties. + */ + public ExtendedProperties getContextProperties() + { + return contextProperties; + } + + /** + * Set the use of the classpath in locating templates + * + * @param useClasspath true means the classpath will be used. + */ + public void setUseClasspath(boolean useClasspath) + { + this.useClasspath = useClasspath; + } + + /** + * @param useResourceLoaderCache + */ + public void setUseResourceLoaderCache(String useResourceLoaderCache) + { + this.useResourceLoaderCache = useResourceLoaderCache; + } + + /** + * @param resourceLoaderModificationCheckInterval + */ + public void setResourceLoaderModificationCheckInterval(String resourceLoaderModificationCheckInterval) + { + this.resourceLoaderModificationCheckInterval = resourceLoaderModificationCheckInterval; + } + /** + * Creates a VelocityContext. + * + * @return new Context + * @throws Exception the execute method will catch + * and rethrow as a BuildException + */ + public Context initControlContext() + throws Exception + { + return new VelocityContext(); + } + + /** + * Execute the input script with Velocity + * + * @throws BuildException + * BuildExceptions are thrown when required attributes are missing. + * Exceptions thrown by Velocity are rethrown as BuildExceptions. + */ + public void execute () + throws BuildException + { + // Make sure the template path is set. + if (templatePath == null && useClasspath == false) + { + throw new BuildException( + "The template path needs to be defined if you are not using " + + "the classpath for locating templates!"); + } + + // Make sure the control template is set. + if (controlTemplate == null) + { + throw new BuildException("The control template needs to be defined!"); + } + + // Make sure the output directory is set. + if (outputDirectory == null) + { + throw new BuildException("The output directory needs to be defined!"); + } + + // Make sure there is an output file. + if (outputFile == null) + { + throw new BuildException("The output file needs to be defined!"); + } + + VelocityEngine ve = new VelocityEngine(); + + try + { + // Setup the Velocity Runtime. + if (templatePath != null) + { + log("Using templatePath: " + templatePath, Project.MSG_VERBOSE); + ve.setProperty( + RuntimeConstants.FILE_RESOURCE_LOADER_PATH, templatePath); + } + + if (useClasspath) + { + log("Using classpath"); + ve.addProperty( + VelocityEngine.RESOURCE_LOADER, "classpath"); + + ve.setProperty( + "classpath." + VelocityEngine.RESOURCE_LOADER + ".class", + "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + + ve.setProperty( + "classpath." + VelocityEngine.RESOURCE_LOADER + + ".cache", useResourceLoaderCache); + + ve.setProperty( + "classpath." + VelocityEngine.RESOURCE_LOADER + + ".modificationCheckInterval", resourceLoaderModificationCheckInterval); + } + + if (this.logFile != null) + { + ve.setProperty(RuntimeConstants.RUNTIME_LOG, this.logFile); + } + + ve.init(); + + // Create the text generator. + Generator generator = Generator.getInstance(); + generator.setVelocityEngine(ve); + generator.setOutputPath(outputDirectory); + generator.setInputEncoding(inputEncoding); + generator.setOutputEncoding(outputEncoding); + + if (templatePath != null) + { + generator.setTemplatePath(templatePath); + } + + // Make sure the output directory exists, if it doesn't + // then create it. + File file = new File(outputDirectory); + if (! file.exists()) + { + file.mkdirs(); + } + + String path = outputDirectory + File.separator + outputFile; + log("Generating to file " + path, Project.MSG_INFO); + Writer writer = generator.getWriter(path, outputEncoding); + + // The generator and the output path should + // be placed in the init context here and + // not in the generator class itself. + Context c = initControlContext(); + + // Everything in the generator class should be + // pulled out and placed in here. What the generator + // class does can probably be added to the Velocity + // class and the generator class can probably + // be removed all together. + populateInitialContext(c); + + // Feed all the options into the initial + // control context so they are available + // in the control/worker templates. + if (contextProperties != null) + { + Iterator i = contextProperties.getKeys(); + + while (i.hasNext()) + { + String property = (String) i.next(); + String value = StringUtils.nullTrim(contextProperties.getString(property)); + + // Now lets quickly check to see if what + // we have is numeric and try to put it + // into the context as an Integer. + try + { + c.put(property, new Integer(value)); + } + catch (NumberFormatException nfe) + { + // Now we will try to place the value into + // the context as a boolean value if it + // maps to a valid boolean value. + String booleanString = + contextProperties.testBoolean(value); + + if (booleanString != null) + { + c.put(property, Boolean.valueOf(booleanString)); + } + else + { + // We are going to do something special + // for properties that have a "file.contents" + // suffix: for these properties will pull + // in the contents of the file and make + // them available in the context. So for + // a line like the following in a properties file: + // + // license.file.contents = license.txt + // + // We will pull in the contents of license.txt + // and make it available in the context as + // $license. This should make texen a little + // more flexible. + if (property.endsWith("file.contents")) + { + // We need to turn the license file from relative to + // absolute, and let Ant help :) + value = StringUtils.fileContentsToString( + project.resolveFile(value).getCanonicalPath()); + + property = property.substring( + 0, property.indexOf("file.contents") - 1); + } + + c.put(property, value); + } + } + } + } + + writer.write(generator.parse(controlTemplate, c)); + writer.flush(); + writer.close(); + generator.shutdown(); + cleanup(); + } + catch( BuildException e) + { + throw e; + } + catch( MethodInvocationException e ) + { + throw new BuildException( + "Exception thrown by '" + e.getReferenceName() + "." + + e.getMethodName() +"'" + ERR_MSG_FRAGMENT, + e.getWrappedThrowable()); + } + catch( ParseErrorException e ) + { + throw new BuildException("Velocity syntax error" + ERR_MSG_FRAGMENT ,e); + } + catch( ResourceNotFoundException e ) + { + throw new BuildException("Resource not found" + ERR_MSG_FRAGMENT,e); + } + catch( Exception e ) + { + throw new BuildException("Generation failed" + ERR_MSG_FRAGMENT ,e); + } + } + + /** + *

Place useful objects into the initial context.

+ * + *

TexenTask places Date().toString() into the + * context as $now. Subclasses who want to vary the + * objects in the context should override this method.

+ * + *

$generator is not put into the context in this + * method.

+ * + * @param context The context to populate, as retrieved from + * {@link #initControlContext()}. + * + * @throws Exception Error while populating context. The {@link + * #execute()} method will catch and rethrow as a + * BuildException. + */ + protected void populateInitialContext(Context context) + throws Exception + { + context.put("now", new Date().toString()); + } + + /** + * A hook method called at the end of {@link #execute()} which can + * be overridden to perform any necessary cleanup activities (such + * as the release of database connections, etc.). By default, + * does nothing. + * + * @exception Exception Problem cleaning up. + */ + protected void cleanup() + throws Exception + { + } +} Propchange: velocity/texen/trunk/src/java/org/apache/texen/ant/TexenTask.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/src/java/org/apache/texen/ant/TexenTask.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/src/java/org/apache/texen/defaults/texen.properties URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/java/org/apache/texen/defaults/texen.properties?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/src/java/org/apache/texen/defaults/texen.properties (added) +++ velocity/texen/trunk/src/java/org/apache/texen/defaults/texen.properties Tue Apr 3 22:54:17 2007 @@ -0,0 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +path.output=output +context.objects.strings=org.apache.velocity.util.StringUtils +context.objects.files=org.apache.velocity.texen.util.FileUtil +context.objects.properties=org.apache.velocity.texen.util.PropertiesUtil Propchange: velocity/texen/trunk/src/java/org/apache/texen/defaults/texen.properties ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/src/java/org/apache/texen/defaults/texen.properties ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/src/java/org/apache/texen/util/FileUtil.java URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/java/org/apache/texen/util/FileUtil.java?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/src/java/org/apache/texen/util/FileUtil.java (added) +++ velocity/texen/trunk/src/java/org/apache/texen/util/FileUtil.java Tue Apr 3 22:54:17 2007 @@ -0,0 +1,78 @@ +package org.apache.texen.util; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; + +/** + * A general file utility for use in the context + * + * @author Leon Messerschmidt + * @author Jason van Zyl + * @version $Id$ + */ +public class FileUtil +{ + /** + * Creates the directory s (and any parent directories needed). + * + * @param s path/directory to create. + * @return report of path/directory creation. + */ + static public String mkdir (String s) + { + try + { + if ((new File(s)).mkdirs()) + return "Created dir: "+s; + else + return "Failed to create dir or dir already exists: "+s; + } + catch (Exception e) + { + return e.toString(); + } + } + + /** + * A method to get a File object. + * + * @param s path to file object to create. + * @return File created file object. + */ + public static File file(String s) + { + File f = new File(s); + return f; + } + + /** + * A method to get a File object. + * + * @param base base path + * @param s file name + * @return File created file object. + */ + public static File file(String base, String s) + { + File f = new File(base, s); + return f; + } +} Propchange: velocity/texen/trunk/src/java/org/apache/texen/util/FileUtil.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/src/java/org/apache/texen/util/FileUtil.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/src/java/org/apache/texen/util/PropertiesUtil.java URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/java/org/apache/texen/util/PropertiesUtil.java?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/src/java/org/apache/texen/util/PropertiesUtil.java (added) +++ velocity/texen/trunk/src/java/org/apache/texen/util/PropertiesUtil.java Tue Apr 3 22:54:17 2007 @@ -0,0 +1,194 @@ +package org.apache.texen.util; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.Properties; +import java.util.StringTokenizer; + +import org.apache.velocity.texen.Generator; + +/** + * A property utility class for the texen text/code generator + * Usually this class is only used from a Velocity context. + * + * @author Leon Messerschmidt + * @author Stephane Bailliez + * @version $Id$ + */ +public class PropertiesUtil +{ + /** + * Load properties from either a file in the templatePath if there + * is one or the classPath. + * + * @param propertiesFile the properties file to load through + * either the templatePath or the classpath. + * @return a properties instance filled with the properties found + * in the file or an empty instance if no file was found. + */ + public Properties load(final String propertiesFile) + { + Properties properties = null; + + String templatePath = Generator.getInstance().getTemplatePath(); + try + { + if (templatePath != null) + { + properties = loadFromTemplatePath(propertiesFile); + } + else + { + properties = loadFromClassPath(propertiesFile); + } + } + catch (RuntimeException e) + { + throw e; + } + catch (Exception e) + { + throw new RuntimeException("Could not load properties: " + e.getMessage()); + } + + return properties; + } + + /** + * Load a properties file from the templatePath defined in the + * generator. As the templatePath can contains multiple paths, + * it will cycle through them to find the file. The first file + * that can be successfully loaded is considered. (kind of + * like the java classpath), it is done to clone the Velocity + * process of loading templates. + * + * @param propertiesFile the properties file to load. It must be + * a relative pathname. + * @return a properties instance loaded with the properties from + * the file. If no file can be found it returns an empty instance. + * @throws Exception + */ + protected Properties loadFromTemplatePath(final String propertiesFile) + throws Exception + { + Properties properties = new Properties(); + String templatePath = Generator.getInstance().getTemplatePath(); + + // We might have something like the following: + // + // #set ($dbprops = $properties.load("$generator.templatePath/path/props") + // + // as we have in Torque but we want people to start using + // + // #set ($dbprops = $properties.load("path/props") + // + // so that everything works from the filesystem or from + // a JAR. So the actual Generator.getTemplatePath() + // is not deprecated but it's use in templates + // should be. + StringTokenizer st = new StringTokenizer(templatePath, ","); + while (st.hasMoreTokens()) + { + String templateDir = st.nextToken(); + InputStream stream = null; + try + { + // If the properties file is being pulled from the + // file system and someone is using the method whereby + // the properties file is assumed to be in the template + // path and they are simply using: + // + // #set ($dbprops = $properties.load("props") (1) + // + // than we have to tack on the templatePath in order + // for the properties file to be found. We want (1) + // to work whether the generation is being run from + // the file system or from a JAR file. + String fullPath = propertiesFile; + + // FIXME probably not that clever since there could be + // a mix of file separators and the test will fail :-( + if (!fullPath.startsWith(templateDir)) + { + fullPath = templateDir + "/" + propertiesFile; + } + + stream = new FileInputStream(fullPath); + properties.load(stream); + // first pick wins, we don't need to go further since + // we found a valid file. + break; + } + finally + { + if (stream != null) + { + stream.close(); + } + } + } + return properties; + } + + /** + * Load a properties file from the classpath + * + * @param propertiesName the properties file to load. + * @return a properties instance loaded with the properties from + * the file. If no file can be found it returns an empty instance. + * @throws Exception + */ + protected Properties loadFromClassPath(final String propertiesName) + throws Exception + { + Properties properties = new Properties(); + ClassLoader classLoader = this.getClass().getClassLoader(); + + InputStream inputStream = null; + + try + { + // This is a hack for now to make sure that properties + // files referenced in the filesystem work in + // a JAR file. We have to deprecate the use + // of $generator.templatePath in templates first + // and this hack will allow those same templates + // that use $generator.templatePath to work in + // JAR files. + + String propertiesFile = propertiesName.startsWith("$generator") + ? propertiesName.substring("$generator.templatePath/".length()) + : propertiesName; + + inputStream = classLoader.getResourceAsStream(propertiesFile); + properties.load(inputStream); + } + finally + { + if (inputStream != null) + { + inputStream.close(); + } + } + return properties; + } +} Propchange: velocity/texen/trunk/src/java/org/apache/texen/util/PropertiesUtil.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/src/java/org/apache/texen/util/PropertiesUtil.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/src/test/org/apache/texen/TexenClasspathTestCase.java URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/test/org/apache/texen/TexenClasspathTestCase.java?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/src/test/org/apache/texen/TexenClasspathTestCase.java (added) +++ velocity/texen/trunk/src/test/org/apache/texen/TexenClasspathTestCase.java Tue Apr 3 22:54:17 2007 @@ -0,0 +1,103 @@ +package org.apache.texen; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; + +import org.apache.texen.test.Log; +import org.apache.texen.test.TestUtil; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + + + +/** + * This is a test case for Texen. Simply executes a simple + * generative task and compares the output. + * + * @author Jason van Zyl + * @version $Id$ + */ +public class TexenClasspathTestCase extends TestCase +{ + public static final String TEST_DIR_KEY = "test.compare.dir"; + public static final String RESULTS_DIR_KEY = "test.results.dir"; + + private String resultsDir; + private String compareDir; + + /** + * Creates a new instance. + * + */ + public TexenClasspathTestCase(String name) + { + super(name); + } + + public static Test suite() + { + return new TestSuite(TexenClasspathTestCase.class); + } + + /** + * Find the directories. + */ + public void setUp() + { + resultsDir = System.getProperty(RESULTS_DIR_KEY, "bin/test") + "/texen"; + compareDir = System.getProperty(TEST_DIR_KEY, "test") + "/texen/compare"; + } + + /** + * Runs the test. + */ + public void testTexenClasspath() + throws Exception + { + TestUtil.assureResultsDirectoryExists(resultsDir); + + // compare with custom context + if (!TestUtil.compareFiles( + new File(compareDir, "TurbineWeather.java").toString(), + new File(resultsDir, "TurbineWeather.java").toString()) || + !TestUtil.compareFiles( + new File(compareDir, "TurbineWeatherService.java").toString(), + new File(resultsDir, "TurbineWeatherService.java").toString()) || + !TestUtil.compareFiles( + new File(compareDir, "WeatherService.java").toString(), + new File(resultsDir, "WeatherService.java").toString()) || + !TestUtil.compareFiles( + new File(compareDir, "book.txt").toString(), + new File(resultsDir, "book.txt").toString()) || + !TestUtil.compareFiles( + new File(compareDir, "Text.txt").toString(), + new File(resultsDir, "Text.txt").toString()) ) + { + fail("Texen results are incorrect."); + } + else + { + Log.log ("Passed!"); + } + } +} Propchange: velocity/texen/trunk/src/test/org/apache/texen/TexenClasspathTestCase.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/src/test/org/apache/texen/TexenClasspathTestCase.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/src/test/org/apache/texen/TexenTestCase.java URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/test/org/apache/texen/TexenTestCase.java?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/src/test/org/apache/texen/TexenTestCase.java (added) +++ velocity/texen/trunk/src/test/org/apache/texen/TexenTestCase.java Tue Apr 3 22:54:17 2007 @@ -0,0 +1,102 @@ +package org.apache.texen; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; + +import org.apache.texen.test.Log; +import org.apache.texen.test.TestUtil; + +import junit.framework.TestCase; +import junit.framework.TestSuite; + + + +/** + * This is a test case for Texen. Simply executes a simple + * generative task and compares the output. + * + * @author Jason van Zyl + * @version $Id$ + */ +public class TexenTestCase extends TestCase +{ + public static final String TEST_DIR_KEY = "test.compare.dir"; + public static final String RESULTS_DIR_KEY = "test.results.dir"; + + private String resultsDir; + private String compareDir; + + /** + * Creates a new instance. + * + */ + public TexenTestCase(String name) + { + super(name); + } + + public static junit.framework.Test suite() + { + return new TestSuite(TexenTestCase.class); + } + + /** + * Find the directories. + */ + public void setUp() + { + resultsDir = System.getProperty(RESULTS_DIR_KEY, "bin/test") + "/texen"; + compareDir = System.getProperty(TEST_DIR_KEY, "test") + "/texen/compare"; + } + + /** + * Runs the test. + */ + public void testTexenResults () + throws Exception + { + TestUtil.assureResultsDirectoryExists(resultsDir); + + // compare with custom context + if (!TestUtil.compareFiles( + new File(compareDir, "TurbineWeather.java").toString(), + new File(resultsDir, "TurbineWeather.java").toString()) || + !TestUtil.compareFiles( + new File(compareDir, "TurbineWeatherService.java").toString(), + new File(resultsDir, "TurbineWeatherService.java").toString()) || + !TestUtil.compareFiles( + new File(compareDir, "WeatherService.java").toString(), + new File(resultsDir, "WeatherService.java").toString()) || + !TestUtil.compareFiles( + new File(compareDir, "book.txt").toString(), + new File(resultsDir, "book.txt").toString()) || + !TestUtil.compareFiles( + new File(compareDir, "Text.txt").toString(), + new File(resultsDir, "Text.txt").toString()) ) + { + fail("Texen results are incorrect."); + } + else + { + Log.log ("Passed!"); + } + } +} Propchange: velocity/texen/trunk/src/test/org/apache/texen/TexenTestCase.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/src/test/org/apache/texen/TexenTestCase.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/src/test/org/apache/texen/test/Log.java URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/test/org/apache/texen/test/Log.java?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/src/test/org/apache/texen/test/Log.java (added) +++ velocity/texen/trunk/src/test/org/apache/texen/test/Log.java Tue Apr 3 22:54:17 2007 @@ -0,0 +1,46 @@ +package org.apache.texen.test; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** +* Simple class to log messages when running tests +* +* @version $Id$ +*/ + +public class Log +{ + + /** + * Do not instantiate. + */ + private Log () + { + } + + /** + * Output a message; + * @param message + */ + public static void log(String message) + { + System.out.println(message); + } +} Propchange: velocity/texen/trunk/src/test/org/apache/texen/test/Log.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/src/test/org/apache/texen/test/Log.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/src/test/org/apache/texen/test/TestUtil.java URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/test/org/apache/texen/test/TestUtil.java?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/src/test/org/apache/texen/test/TestUtil.java (added) +++ velocity/texen/trunk/src/test/org/apache/texen/test/TestUtil.java Tue Apr 3 22:54:17 2007 @@ -0,0 +1,119 @@ +package org.apache.texen.test; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; + + +/** + * Miscellaneous routines to help with testing + * + * @version $Id$ + */ +public class TestUtil +{ + + /** + * Do not instantiate. + */ + private TestUtil() + { + } + + /** + * Assures that the results directory exists. If the results directory + * cannot be created, fails the test. + */ + public static void assureResultsDirectoryExists (String resultsDirectory) + { + File dir = new File(resultsDirectory); + if (!dir.exists()) + { + Log.log("Template results directory does not exist"); + if (dir.mkdirs()) + { + Log.log("Created template results directory"); + } + else + { + String errMsg = "Unable to create template results directory"; + Log.log(errMsg); + throw new RuntimeException(errMsg); + } + } + } + + /** + * Normalizes lines to account for platform differences. Macs use + * a single \r, DOS derived operating systems use \r\n, and Unix + * uses \n. Replace each with a single \n. + * + * @author Sam Ruby + * @return source with all line terminations changed to Unix style + */ + public static String normalizeNewlines (String source) + { + return source.replaceAll("\r[\r]?[\n]","\n"); + } + + /** + * Returns whether the processed template matches the + * content of the provided comparison file. + * + * @return Whether the output matches the contents + * of the comparison file. + * + * @exception Exception Test failure condition. + */ + public static boolean compareFiles(String compareFileName, String resultsFileName) + throws Exception + { + Log.log("Comparing result file '" + resultsFileName + "' with compare file '" + compareFileName + "'"); + String resultText = org.apache.velocity.util.StringUtils.fileContentsToString(resultsFileName); + + return compareTextWithFile(resultText, compareFileName); + } + + + /** + * Returns whether the processed template matches the + * content of the provided comparison file. + * + * @return Whether the output matches the contents + * of the comparison file. + * + * @exception Exception Test failure condition. + */ + public static boolean compareTextWithFile(String resultText, String compareFileName) + throws Exception + { + String compareText = org.apache.velocity.util.StringUtils.fileContentsToString(compareFileName); + + /* + * normalize each wrt newline + */ + + String normalizedResultText = normalizeNewlines(resultText); + String normalizedCompareText = normalizeNewlines(compareText); + return normalizedResultText.equals( normalizedCompareText ); + } + + +} Propchange: velocity/texen/trunk/src/test/org/apache/texen/test/TestUtil.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/src/test/org/apache/texen/test/TestUtil.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/compare/Test.txt URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/compare/Test.txt?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/compare/Test.txt (added) +++ velocity/texen/trunk/test/texen-classpath/compare/Test.txt Tue Apr 3 22:54:17 2007 @@ -0,0 +1,11 @@ +# These should all evaluate to true + +true +true +true + +# These should all evaluate to false + +false +false +false Propchange: velocity/texen/trunk/test/texen-classpath/compare/Test.txt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen-classpath/compare/Test.txt ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/compare/TurbineWeather.java URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/compare/TurbineWeather.java?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/compare/TurbineWeather.java (added) +++ velocity/texen/trunk/test/texen-classpath/compare/TurbineWeather.java Tue Apr 3 22:54:17 2007 @@ -0,0 +1,44 @@ +package org.apache.turbine.services.weather; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import org.apache.turbine.services.TurbineServices; + +/** + * + * + * @author Jason van Zyl + */ +public class TurbineWeather +{ + /** + * Utility method for accessing the service + * implementation + * + * @return a WeatherService implementation instance + */ + protected static WeatherService getService() + { + return (WeatherService)TurbineServices + .getInstance().getService(WeatherService.SERVICE_NAME); + } +} Propchange: velocity/texen/trunk/test/texen-classpath/compare/TurbineWeather.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen-classpath/compare/TurbineWeather.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/compare/TurbineWeatherService.java URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/compare/TurbineWeatherService.java?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/compare/TurbineWeatherService.java (added) +++ velocity/texen/trunk/test/texen-classpath/compare/TurbineWeatherService.java Tue Apr 3 22:54:17 2007 @@ -0,0 +1,41 @@ +package org.apache.turbine.services.weather; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import org.apache.turbine.services.TurbineBaseService; + +/** + * + * @author Jason van Zyl + */ +public class TurbineWeatherService extends TurbineBaseService + implements WeatherService + +{ + /** + * Initialize the TurbineWeather Service. + */ + public void init() + { + setInit(true); + } +} Propchange: velocity/texen/trunk/test/texen-classpath/compare/TurbineWeatherService.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen-classpath/compare/TurbineWeatherService.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/compare/WeatherService.java URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/compare/WeatherService.java?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/compare/WeatherService.java (added) +++ velocity/texen/trunk/test/texen-classpath/compare/WeatherService.java Tue Apr 3 22:54:17 2007 @@ -0,0 +1,33 @@ +package org.apache.turbine.services.weather; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import org.apache.turbine.services.Service; + +/** + * + * @author Jason van Zyl + */ +public interface WeatherService extends Service +{ + public static final String SERVICE_NAME = "TurbineWeatherService"; +} Propchange: velocity/texen/trunk/test/texen-classpath/compare/WeatherService.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen-classpath/compare/WeatherService.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/compare/book.txt URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/compare/book.txt?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/compare/book.txt (added) +++ velocity/texen/trunk/test/texen-classpath/compare/book.txt Tue Apr 3 22:54:17 2007 @@ -0,0 +1,15 @@ +This is the book of the week: + +Props retrieved using new method: + +Title: Consilience: The Unity of Knowledge +Author: Edward O. Wilson +Publisher: Knopf +ISBN: 0965058305 + +Props retrieved using old method: + +Title: Consilience: The Unity of Knowledge +Author: Edward O. Wilson +Publisher: Knopf +ISBN: 0965058305 Propchange: velocity/texen/trunk/test/texen-classpath/compare/book.txt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen-classpath/compare/book.txt ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/jar-contents/Control.vm URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/Control.vm?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/jar-contents/Control.vm (added) +++ velocity/texen/trunk/test/texen-classpath/jar-contents/Control.vm Tue Apr 3 22:54:17 2007 @@ -0,0 +1,25 @@ +#set ( $sourceFile = "Turbine${baseName}Service.java" ) +$generator.parse("ServiceImplementation.vm",$sourceFile) + +#set ( $sourceFile = "${baseName}Service.java" ) +$generator.parse("ServiceInterface.vm",$sourceFile) + +#set ( $sourceFile = "Turbine${baseName}.java" ) +$generator.parse("ServiceStaticHelper.vm",$sourceFile) + +#set ( $sourceFile = "Test.txt" ) +$generator.parse("Test.vm",$sourceFile) + +#set ( $props = $properties.load("test.props") ) + +## This is to test a properties file that was once taken from +## the file system but is now taken from a JAR. We have to +## deprecate the use of $generator.TemplatePath if we want +## templates to work the same way from JARs and the file +## system. I have a hack in PropsUtil right now to deal +## with it. + +#set ( $props2 = $properties.load("$generator.TemplatePath/test.props") ) + +#set ( $sourceFile = "book.txt" ) +$generator.parse("book.vm",$sourceFile) Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/Control.vm ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/Control.vm ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceImplementation.vm URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceImplementation.vm?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceImplementation.vm (added) +++ velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceImplementation.vm Tue Apr 3 22:54:17 2007 @@ -0,0 +1,22 @@ +package $package; + +$license + +import org.apache.turbine.services.TurbineBaseService; + +/** + * + * @author $name + */ +public class Turbine${baseName}Service extends TurbineBaseService + implements ${baseName}Service + +{ + /** + * Initialize the Turbine${baseName} Service. + */ + public void init() + { + setInit(true); + } +} Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceImplementation.vm ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceImplementation.vm ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceInterface.vm URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceInterface.vm?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceInterface.vm (added) +++ velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceInterface.vm Tue Apr 3 22:54:17 2007 @@ -0,0 +1,14 @@ +package $package; + +$license + +import org.apache.turbine.services.Service; + +/** + * + * @author $name + */ +public interface ${baseName}Service extends Service +{ + public static final String SERVICE_NAME = "Turbine${baseName}Service"; +} Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceInterface.vm ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceInterface.vm ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceStaticHelper.vm URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceStaticHelper.vm?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceStaticHelper.vm (added) +++ velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceStaticHelper.vm Tue Apr 3 22:54:17 2007 @@ -0,0 +1,25 @@ +package $package; + +$license + +import org.apache.turbine.services.TurbineServices; + +/** + * + * + * @author $name + */ +public class Turbine$baseName +{ + /** + * Utility method for accessing the service + * implementation + * + * @return a ${baseName}Service implementation instance + */ + protected static ${baseName}Service getService() + { + return (${baseName}Service)TurbineServices + .getInstance().getService(${baseName}Service.SERVICE_NAME); + } +} Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceStaticHelper.vm ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceStaticHelper.vm ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/jar-contents/Test.vm URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/Test.vm?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/jar-contents/Test.vm (added) +++ velocity/texen/trunk/test/texen-classpath/jar-contents/Test.vm Tue Apr 3 22:54:17 2007 @@ -0,0 +1,11 @@ +# These should all evaluate to true + +$one +$two +$three + +# These should all evaluate to false + +$four +$five +$six Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/Test.vm ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/Test.vm ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/jar-contents/book.vm URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/book.vm?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/jar-contents/book.vm (added) +++ velocity/texen/trunk/test/texen-classpath/jar-contents/book.vm Tue Apr 3 22:54:17 2007 @@ -0,0 +1,15 @@ +This is the book of the week: + +Props retrieved using new method: + +Title: $props.get("title") +Author: $props.get("author") +Publisher: $props.get("publisher") +ISBN: $props.get("isbn") + +Props retrieved using old method: + +Title: $props2.get("title") +Author: $props2.get("author") +Publisher: $props2.get("publisher") +ISBN: $props2.get("isbn") Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/book.vm ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/book.vm ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/jar-contents/license.txt URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/license.txt?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/jar-contents/license.txt (added) +++ velocity/texen/trunk/test/texen-classpath/jar-contents/license.txt Tue Apr 3 22:54:17 2007 @@ -0,0 +1,19 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/license.txt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/license.txt ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/jar-contents/service.props URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/service.props?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/jar-contents/service.props (added) +++ velocity/texen/trunk/test/texen-classpath/jar-contents/service.props Tue Apr 3 22:54:17 2007 @@ -0,0 +1,34 @@ +baseName=Weather +package=org.apache.turbine.services.weather +name=Jason van Zyl +email=jvanzyl@apache.org + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +license.file.contents = test/texen/license.txt + +# Test some properties that have be give some boolean +# values. + +one = true +two = yes +three = on + +four = false +five = no +six = off Added: velocity/texen/trunk/test/texen-classpath/jar-contents/test.props URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/test.props?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/jar-contents/test.props (added) +++ velocity/texen/trunk/test/texen-classpath/jar-contents/test.props Tue Apr 3 22:54:17 2007 @@ -0,0 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +author = Edward O. Wilson +title = Consilience: The Unity of Knowledge +publisher = Knopf +isbn = 0965058305 Added: velocity/texen/trunk/test/texen-classpath/mkjar.sh URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/mkjar.sh?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen-classpath/mkjar.sh (added) +++ velocity/texen/trunk/test/texen-classpath/mkjar.sh Tue Apr 3 22:54:17 2007 @@ -0,0 +1,24 @@ +# !/bin/sh + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +( + cd jar-contents + rm -f ../test.jar + jar cvf ../test.jar * +) Propchange: velocity/texen/trunk/test/texen-classpath/mkjar.sh ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen-classpath/mkjar.sh ------------------------------------------------------------------------------ svn:executable = * Propchange: velocity/texen/trunk/test/texen-classpath/mkjar.sh ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen-classpath/test.jar URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/test.jar?view=auto&rev=525422 ============================================================================== Binary file - no diff available. Propchange: velocity/texen/trunk/test/texen-classpath/test.jar ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: velocity/texen/trunk/test/texen/additional.props URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/additional.props?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen/additional.props (added) +++ velocity/texen/trunk/test/texen/additional.props Tue Apr 3 22:54:17 2007 @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +occupation=somnambulist Added: velocity/texen/trunk/test/texen/compare/Test.txt URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/compare/Test.txt?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen/compare/Test.txt (added) +++ velocity/texen/trunk/test/texen/compare/Test.txt Tue Apr 3 22:54:17 2007 @@ -0,0 +1,11 @@ +# These should all evaluate to true + +true +true +true + +# These should all evaluate to false + +false +false +false Propchange: velocity/texen/trunk/test/texen/compare/Test.txt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen/compare/Test.txt ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen/compare/TurbineWeather.java URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/compare/TurbineWeather.java?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen/compare/TurbineWeather.java (added) +++ velocity/texen/trunk/test/texen/compare/TurbineWeather.java Tue Apr 3 22:54:17 2007 @@ -0,0 +1,45 @@ +package org.apache.turbine.services.weather; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import org.apache.turbine.services.TurbineServices; + +/** + * + * + * @author Jason van Zyl + * @occupation somnambulist + */ +public class TurbineWeather +{ + /** + * Utility method for accessing the service + * implementation + * + * @return a WeatherService implementation instance + */ + protected static WeatherService getService() + { + return (WeatherService)TurbineServices + .getInstance().getService(WeatherService.SERVICE_NAME); + } +} Propchange: velocity/texen/trunk/test/texen/compare/TurbineWeather.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen/compare/TurbineWeather.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen/compare/TurbineWeatherService.java URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/compare/TurbineWeatherService.java?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen/compare/TurbineWeatherService.java (added) +++ velocity/texen/trunk/test/texen/compare/TurbineWeatherService.java Tue Apr 3 22:54:17 2007 @@ -0,0 +1,42 @@ +package org.apache.turbine.services.weather; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import org.apache.turbine.services.TurbineBaseService; + +/** + * + * @author Jason van Zyl + * @occupation somnambulist + */ +public class TurbineWeatherService extends TurbineBaseService + implements WeatherService + +{ + /** + * Initialize the TurbineWeather Service. + */ + public void init() + { + setInit(true); + } +} Propchange: velocity/texen/trunk/test/texen/compare/TurbineWeatherService.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen/compare/TurbineWeatherService.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen/compare/WeatherService.java URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/compare/WeatherService.java?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen/compare/WeatherService.java (added) +++ velocity/texen/trunk/test/texen/compare/WeatherService.java Tue Apr 3 22:54:17 2007 @@ -0,0 +1,34 @@ +package org.apache.turbine.services.weather; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + +import org.apache.turbine.services.Service; + +/** + * + * @author Jason van Zyl + * @occupation somnambulist + */ +public interface WeatherService extends Service +{ + public static final String SERVICE_NAME = "TurbineWeatherService"; +} Propchange: velocity/texen/trunk/test/texen/compare/WeatherService.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen/compare/WeatherService.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen/compare/book.txt URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/compare/book.txt?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen/compare/book.txt (added) +++ velocity/texen/trunk/test/texen/compare/book.txt Tue Apr 3 22:54:17 2007 @@ -0,0 +1,15 @@ +This is the book of the week: + +Props retrieved using new method: + +Title: Consilience: The Unity of Knowledge +Author: Edward O. Wilson +Publisher: Knopf +ISBN: 0965058305 + +Props retrieved using old method: + +Title: Consilience: The Unity of Knowledge +Author: Edward O. Wilson +Publisher: Knopf +ISBN: 0965058305 Propchange: velocity/texen/trunk/test/texen/compare/book.txt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen/compare/book.txt ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen/license.txt URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/license.txt?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen/license.txt (added) +++ velocity/texen/trunk/test/texen/license.txt Tue Apr 3 22:54:17 2007 @@ -0,0 +1,19 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + Propchange: velocity/texen/trunk/test/texen/license.txt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen/license.txt ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen/service.props URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/service.props?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen/service.props (added) +++ velocity/texen/trunk/test/texen/service.props Tue Apr 3 22:54:17 2007 @@ -0,0 +1,34 @@ +baseName=Weather +package=org.apache.turbine.services.weather +name=Jason van Zyl +email=jvanzyl@apache.org + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +license.file.contents = test/texen/license.txt + +# Test some properties that have be give some boolean +# values. + +one = true +two = yes +three = on + +four = false +five = no +six = off Added: velocity/texen/trunk/test/texen/templates/Control.vm URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/templates/Control.vm?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen/templates/Control.vm (added) +++ velocity/texen/trunk/test/texen/templates/Control.vm Tue Apr 3 22:54:17 2007 @@ -0,0 +1,25 @@ +#set ( $sourceFile = "Turbine${baseName}Service.java" ) +$generator.parse("ServiceImplementation.vm",$sourceFile) + +#set ( $sourceFile = "${baseName}Service.java" ) +$generator.parse("ServiceInterface.vm",$sourceFile) + +#set ( $sourceFile = "Turbine${baseName}.java" ) +$generator.parse("ServiceStaticHelper.vm",$sourceFile) + +#set ( $sourceFile = "Test.txt" ) +$generator.parse("Test.vm",$sourceFile) + +#set ( $props = $properties.load("test.props") ) + +## This is to test a properties file that was once taken from +## the file system but is now taken from a JAR. We have to +## deprecate the use of $generator.TemplatePath if we want +## templates to work the same way from JARs and the file +## system. I have a hack in PropsUtil right now to deal +## with it. + +#set ( $props2 = $properties.load("$generator.TemplatePath/test.props") ) +$generator.TemplatePath/test.props +#set ( $sourceFile = "book.txt" ) +$generator.parse("book.vm",$sourceFile) Propchange: velocity/texen/trunk/test/texen/templates/Control.vm ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen/templates/Control.vm ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision Added: velocity/texen/trunk/test/texen/templates/ServiceImplementation.vm URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/templates/ServiceImplementation.vm?view=auto&rev=525422 ============================================================================== --- velocity/texen/trunk/test/texen/templates/ServiceImplementation.vm (added) +++ velocity/texen/trunk/test/texen/templates/ServiceImplementation.vm Tue Apr 3 22:54:17 2007 @@ -0,0 +1,23 @@ +package $package; + +$license + +import org.apache.turbine.services.TurbineBaseService; + +/** + * + * @author $name + * @occupation $occupation + */ +public class Turbine${baseName}Service extends TurbineBaseService + implements ${baseName}Service + +{ + /** + * Initialize the Turbine${baseName} Service. + */ + public void init() + { + setInit(true); + } +} Propchange: velocity/texen/trunk/test/texen/templates/ServiceImplementation.vm ------------------------------------------------------------------------------ svn:eol-style = native Propchange: velocity/texen/trunk/test/texen/templates/ServiceImplementation.vm ------------------------------------------------------------------------------ svn:keywords = Id Author Date Revision