Return-Path: Delivered-To: apmail-jakarta-commons-dev-archive@apache.org Received: (qmail 13328 invoked from network); 2 Oct 2002 11:03:46 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 2 Oct 2002 11:03:46 -0000 Received: (qmail 25516 invoked by uid 97); 2 Oct 2002 11:04:24 -0000 Delivered-To: qmlist-jakarta-archive-commons-dev@jakarta.apache.org Received: (qmail 25500 invoked by uid 97); 2 Oct 2002 11:04:24 -0000 Mailing-List: contact commons-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Jakarta Commons Developers List" Reply-To: "Jakarta Commons Developers List" Delivered-To: mailing list commons-dev@jakarta.apache.org Received: (qmail 25489 invoked by uid 97); 2 Oct 2002 11:04:23 -0000 X-Antivirus: nagoya (v4218 created Aug 14 2002) Date: 2 Oct 2002 11:03:39 -0000 Message-ID: <20021002110339.62377.qmail@icarus.apache.org> From: jstrachan@apache.org To: jakarta-commons-sandbox-cvs@apache.org Subject: cvs commit: jakarta-commons-sandbox/jelly project.xml X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N jstrachan 2002/10/02 04:03:38 Modified: jelly/src/java/org/apache/commons/jelly Jelly.java jelly/src/java/org/apache/commons/jelly/tags/util UtilTagLibrary.java jelly project.xml Added: jelly/src/java/org/apache/commons/jelly/tags/util PropertiesTag.java Log: Applied Jim Birchfield's patches to support both a jelly.properties file when running Jelly from the command line as well as a new tag to load properties from a file or URI in Jelly script. Revision Changes Path 1.15 +78 -8 jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/Jelly.java Index: Jelly.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/Jelly.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- Jelly.java 9 Aug 2002 19:11:56 -0000 1.14 +++ Jelly.java 2 Oct 2002 11:03:38 -0000 1.15 @@ -65,10 +65,13 @@ import java.io.File; import java.io.FileWriter; import java.io.InputStream; +import java.io.FileInputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.net.MalformedURLException; import java.net.URL; +import java.util.Enumeration; +import java.util.Properties; import org.apache.commons.jelly.parser.XMLParser; import org.apache.commons.logging.Log; @@ -96,10 +99,11 @@ /** The URL of the root context for other scripts */ private URL rootContext; - + /** Whether we have loaded the properties yet */ + private boolean loadedProperties = false; + public Jelly() { } - public static void main(String[] args) throws Exception { try @@ -155,11 +159,18 @@ } } } + + /** * Compiles the script */ public Script compileScript() throws Exception { + if (! loadedProperties) { + loadedProperties = true; + loadJellyProperties(); + } + XMLParser parser = new XMLParser(); parser.setContext(getJellyContext()); Script script = parser.parse(getUrl().openStream()); @@ -169,7 +180,7 @@ } return script; } - + // Properties //------------------------------------------------------------------------- @@ -234,5 +245,64 @@ return file.toURL(); } return new URL(name); + } + + /** + * Attempts to load jelly.properties from the current directory, + * the users home directory or from the classpath + */ + protected void loadJellyProperties() { + InputStream is = null; + + String userDir = System.getProperty("user.home"); + File f = new File(userDir + File.separator + "jelly.properties"); + try { + if (f.exists()) { + is = new FileInputStream(f); + loadProperties(is); + } + } + catch (Exception e) { + log.error( "Caught exception while loading: " + f.getName() + ". Reason: " + e, e ); + } + + f = new File("jelly.properties"); + try { + if (f.exists()) { + is = new FileInputStream(f); + loadProperties(is); + } + } + catch (Exception e) { + log.error( "Caught exception while loading: " + f.getName() + ". Reason: " + e, e ); + } + + + is = getClass().getClassLoader().getResourceAsStream("jelly.properties"); + if (is != null) { + try { + loadProperties(is); + } + catch (Exception e) { + log.error( "Caught exception while loading jelly.properties from the classpath. Reason: " + e, e ); + } + } + } + + /** + * Loads the properties from the given input stream + */ + protected void loadProperties(InputStream is) throws Exception { + JellyContext context = getJellyContext(); + Properties props = new Properties(); + props.load(is); + Enumeration enum = props.propertyNames(); + while (enum.hasMoreElements()) { + String key = (String) enum.nextElement(); + String value = props.getProperty(key); + + // @todo we should parse the value in case its an Expression + context.setVariable(key, value); + } } } 1.2 +6 -5 jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/util/UtilTagLibrary.java Index: UtilTagLibrary.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/util/UtilTagLibrary.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- UtilTagLibrary.java 16 Jul 2002 05:43:32 -0000 1.1 +++ UtilTagLibrary.java 2 Oct 2002 11:03:38 -0000 1.2 @@ -72,5 +72,6 @@ { public UtilTagLibrary() { registerTag("tokenize", TokenizeTag.class); + registerTag("properties", PropertiesTag.class); } } 1.1 jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/util/PropertiesTag.java Index: PropertiesTag.java =================================================================== /* * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.jelly.tags.util; import org.apache.commons.jelly.XMLOutput; import org.apache.commons.jelly.TagSupport; import org.apache.commons.jelly.JellyException; import org.apache.commons.jelly.MissingAttributeException; import java.util.StringTokenizer; import java.util.List; import java.util.ArrayList; import java.util.Enumeration; import java.util.Properties; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; /** * A tag which loads a properties file from a given file name or URI * which are loaded into the current context. * * @author Jim Birchfield * @version $Revision: 1.8 $ */ public class PropertiesTag extends TagSupport { private String file; private String uri; public PropertiesTag() { } // Tag interface //------------------------------------------------------------------------- public void doTag(final XMLOutput output) throws Exception { if (file == null && uri == null) { throw new JellyException("This tag must define a 'file' or 'uri' attribute"); } InputStream is = null; if (file != null) { File f = new File(file); if (!f.exists()) { throw new JellyException("file: " + file + " does not exist!"); } is = new FileInputStream(f); } else { is = context.getResourceAsStream(uri); if (is == null) { throw new JellyException( "Could not find: " + uri ); } } Properties props = new Properties(); props.load(is); Enumeration enum = props.propertyNames(); while (enum.hasMoreElements()) { String key = (String) enum.nextElement(); String value = props.getProperty(key); // @todo we should parse the value in case its an Expression context.setVariable(key, value); } } // Properties //------------------------------------------------------------------------- /** * Sets the file name to be used to load the properties file. */ public void setFile(String file) { this.file = file; } /** * Sets the URI of the properties file to use. This can be a full URL or a relative URI * or an absolute URI to the root context of this JellyContext. */ public void setUri(String uri) { this.uri = uri; } } 1.76 +8 -0 jakarta-commons-sandbox/jelly/project.xml Index: project.xml =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/jelly/project.xml,v retrieving revision 1.75 retrieving revision 1.76 diff -u -r1.75 -r1.76 --- project.xml 30 Sep 2002 08:05:45 -0000 1.75 +++ project.xml 2 Oct 2002 11:03:38 -0000 1.76 @@ -150,6 +150,14 @@ Developer + + Jim Birchfield + jim.birchfield@genscape.com + Genscape, Inc. + + Developer + + -- To unsubscribe, e-mail: For additional commands, e-mail: