crossley 02/01/24 18:31:53 Modified: . build-i.xml build-s.xml build.xml Added: tools/src ClassAvailableTask.java SitemapToolTask.java UserInputTask.java XConfToolTask.java Removed: tools/src ClassAvailable.java SitemapTool.java UserInput.java XConfTool.java Log: Changed class names for Ant tasks, to be consistent (end with Task). Changed names for Ant task declarations in build.xml to use use the "xml-type" convention instead of the "javaType" convention. Submitted by: "Nicola Ken Barozzi" <[EMAIL PROTECTED]> Revision Changes Path 1.3 +1 -1 xml-cocoon2/build-i.xml Index: build-i.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/build-i.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- build-i.xml 24 Jan 2002 07:46:20 -0000 1.2 +++ build-i.xml 25 Jan 2002 02:31:53 -0000 1.3 @@ -25,7 +25,7 @@ <echo message=" clean -------- cleans the build directory"/> <echo message=" "/> <echo message=" "/> - <taskdef name="user-input" classname="UserInput" + <taskdef name="user-input" classname="UserInputTask" classpath="./tools/anttasks"/> <property name="input.selection" value="compile"/> 1.3 +1 -1 xml-cocoon2/build-s.xml Index: build-s.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/build-s.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- build-s.xml 24 Jan 2002 07:46:20 -0000 1.2 +++ build-s.xml 25 Jan 2002 02:31:53 -0000 1.3 @@ -26,7 +26,7 @@ <echo message=" --------------"/> <echo message=" --------------"/> <echo message=" "/> - <taskdef name="user-input" classname="UserInput" + <taskdef name="user-input" classname="UserInputTask" classpath="./tools/anttasks"/> <property name="input.selection" value=""/> 1.147 +27 -27 xml-cocoon2/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/build.xml,v retrieving revision 1.146 retrieving revision 1.147 diff -u -r1.146 -r1.147 --- build.xml 24 Jan 2002 14:17:36 -0000 1.146 +++ build.xml 25 Jan 2002 02:31:53 -0000 1.147 @@ -277,7 +277,7 @@ description="Tests for optional classes missing to the environment"> <!-- A simple task to test for a class --> - <taskdef name="ClassAvailable" classname="ClassAvailable" + <taskdef name="class-available" classname="ClassAvailableTask" classpath="./tools/anttasks"/> <available property="jaxen.present" classname="org.jaxen.dom.XPath"> @@ -288,47 +288,47 @@ </available> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="xmldb.present" classname="org.xmldb.api.DatabaseManager"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="jfor.present" classname="org.jfor.jfor.converter.Converter"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="servlet.present" classname="javax.servlet.http.HttpServlet"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="servlet23.present" classname="javax.servlet.http.HttpServletRequestWrapper"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="bsf.present" classname="com.ibm.bsf.BSFException"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="rhino.present" classname="org.mozilla.javascript.tools.jsc.Main"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="jstyle.present" classname="jstyle.JSFormatter"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="xpath.present" classname="org.apache.xpath.XPathAPI"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="deli.present" classname="com.hp.hpl.deli.Profile"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="velocity.present" classname="org.apache.velocity.app.Velocity"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="resolver.present" classname="com.sun.resolver.Resolver"/> @@ -351,39 +351,39 @@ <classpath refid="classpath"/> </available> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="php.present" classname="net.php.servlet"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="xt.present" classname="com.jclark.xsl.sax.XMLProcessorImpl"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="naming.present" classname="javax.naming.Context"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="svg.present" classname="org.apache.batik.transcoder.Transcoder"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="fop.present" classname="org.apache.fop.apps.Driver"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="tidy.present" classname="org.w3c.tidy.Tidy"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="maybeupload.present" classname="uk.co.weft.maybeupload.MaybeUploadRequestWrapper"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="lucene.present" classname="org.apache.lucene.search.Searcher"/> - <ClassAvailable classpathref="classpath" + <class-available classpathref="classpath" property="hsqldb.present" classname="org.hsqldb.Server"/> </target> @@ -895,7 +895,7 @@ </target> <!-- =================================================================== --> - <!-- The documentation system (nearly beta...) --> + <!-- The documentation system --> <!-- =================================================================== --> <target name="docs" depends="package, prepare-docs, docs_check, docs_done" @@ -969,19 +969,19 @@ <!-- =================================================================== --> <target name="prepare-webapp" depends="copy-webapp"> <!-- A task to change the sitemap. It is used to add optional components --> - <taskdef name="SitemapTool" classname="SitemapTool" + <taskdef name="sitemap-tool" classname="SitemapToolTask" classpath="${tools.dir}/anttasks"/> <!-- A task to change the xconf. It is used to add optional components --> - <taskdef name="XConfTool" classname="XConfTool" + <taskdef name="xconf-tool" classname="XConfToolTask" classpath="${tools.dir}/anttasks"/> - <!-- Invoke the SitemapTool to add optional entries --> - <SitemapTool directory="${build.src}" + <!-- Invoke the SitemapToolTask to add optional entries --> + <sitemap-tool directory="${build.src}" extension="sitemap" sitemap="${build.war}/sitemap.xmap"/> <!-- Invoke the XConfTool to add optional entries --> - <XConfTool directory="${build.src}" + <xconf-tool directory="${build.src}" extension="xconf" configuration="${build.war}/cocoon.xconf"/> </target> 1.1 xml-cocoon2/tools/src/ClassAvailableTask.java Index: ClassAvailableTask.java =================================================================== /***************************************************************************** * Copyright (C) The Apache Software Foundation. All rights reserved. * * ------------------------------------------------------------------------- * * This software is published under the terms of the Apache Software License * * version 1.1, a copy of which has been included with this distribution in * * the LICENSE file. * *****************************************************************************/ import java.io.*; import java.util.*; import java.util.zip.*; import org.apache.tools.ant.*; import org.apache.tools.ant.taskdefs.*; import org.apache.tools.ant.types.*; /** * Will set the given property if the requested class is available in the * specified classpath. The found class is not loaded! * This class is heavily based on the available task in the ant package: * @author Stefano Mazzocchi <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> * * This task searches only in the defined path but not in the parents path * unless explicitly overridden by the value of ${build.sysclasspath} * like the original available task does. * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> * @version CVS $Revision: 1.1 $ $Date: 2002/01/25 02:31:53 $ */ public class ClassAvailableTask extends Task { /** * A hashtable of zip files opened by the classloader */ private Hashtable zipFiles = new Hashtable(); private String property; private String classname; private Path classpath; private String value = "true"; public void setClasspath(Path classpath) { createClasspath().append(classpath); } public Path createClasspath() { if (this.classpath == null) { this.classpath = new Path(this.project); } return this.classpath.createPath(); } public void setClasspathRef(Reference r) { createClasspath().setRefid(r); } public void setProperty(String property) { this.property = property; } public void setValue(String value) { this.value = value; } public void setClassname(String classname) { if (!"".equals(classname)) { this.classname = classname; } } public void execute() throws BuildException { if (property == null) { throw new BuildException("property attribute is required", location); } if (eval()) { this.project.setProperty(property, value); } } public boolean eval() throws BuildException { if (classname == null) { throw new BuildException("At least one of (classname|file|resource) is required", location); } if (classpath != null) { classpath.setProject(project); classpath = classpath.concatSystemClasspath("ignore"); } if (!findClassInComponents(classname)) { log("Unable to load class " + classname + " to set property " + property, Project.MSG_VERBOSE); return false; } return true; } /** * Get an inputstream to a given resource in the given file which may * either be a directory or a zip file. * * @param file the file (directory or jar) in which to search for the resource. * @param resourceName the name of the resource for which a stream is required. * * @return a stream to the required resource or null if the resource cannot be * found in the given file object */ private boolean contains(File file, String resourceName) { try { if (!file.exists()) { return false; } if (file.isDirectory()) { File resource = new File(file, resourceName); if (resource.exists()) { return true; } } else { // is the zip file in the cache ZipFile zipFile = (ZipFile)zipFiles.get(file); if (zipFile == null) { zipFile = new ZipFile(file); zipFiles.put(file, zipFile); } ZipEntry entry = zipFile.getEntry(resourceName); if (entry != null) { return true; } } } catch (Exception e) { log("Ignoring Exception " + e.getClass().getName() + ": " + e.getMessage() + " reading resource " + resourceName + " from " + file, Project.MSG_VERBOSE); } return false; } /** * Find a class on the given classpath. */ private boolean findClassInComponents(String name) { // we need to search the components of the path to see if we can find the // class we want. final String classname = name.replace('.', '/') + ".class"; final String[] list = classpath.list(); boolean found = false; int i = 0; while (i < list.length && found == false) { final File pathComponent = (File)project.resolveFile(list[i]); found = this.contains(pathComponent, classname); i++; } return found; } } 1.1 xml-cocoon2/tools/src/SitemapToolTask.java Index: SitemapToolTask.java =================================================================== /***************************************************************************** * Copyright (C) The Apache Software Foundation. All rights reserved. * * ------------------------------------------------------------------------- * * This software is published under the terms of the Apache Software License * * version 1.1, a copy of which has been included with this distribution in * * the LICENSE file. * *****************************************************************************/ import java.io.*; import java.util.*; import org.apache.tools.ant.*; import org.apache.tools.ant.taskdefs.*; import org.apache.tools.ant.types.*; /** * Add components to the sitemap * * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> * @version CVS $Revision: 1.1 $ $Date: 2002/01/25 02:31:53 $ */ public final class SitemapToolTask extends Task { private String sitemap; private String directory; private String extension; public void setSitemap(String sitemap) { this.sitemap = sitemap; } public void setDirectory(String directory) { this.directory = directory; } public void setExtension(String extension) { this.extension = extension; } public void execute() throws BuildException { if (this.sitemap == null) { throw new BuildException("sitemap attribute is required", location); } if (this.extension == null) { throw new BuildException("extension attribute is required", location); } if (this.directory == null) { throw new BuildException("directory attribute is required", location); } try { // process recursive this.process(new File(this.directory), this.extension, this.sitemap); } catch (IOException ioe) { throw new BuildException("IOException: " + ioe); } } /** * Scan recursive */ private void process(final File directoryFile, final String ext, final String sitemapLocation) throws IOException, BuildException { final File[] files = directoryFile.listFiles(); for(int i = 0; i < files.length; i++) { if (files[i].isDirectory() == true) { this.process(files[i], ext, sitemapLocation); } else { if (files[i].getName().endsWith("."+ext) == true) { System.out.println("Reading: " + files[i].getAbsolutePath()); final String data = this.load(files[i].getAbsolutePath()); // separate the data by lines final StringTokenizer st = new StringTokenizer(data); while (st.hasMoreElements() == true) { // now get the properties of a line. These are separated by a "|" final String line = (String)st.nextElement(); final StringTokenizer prop = new StringTokenizer(line, "|"); String category = null; String componentName = null; String className = null; String configuration = null; String label = null; String mimeType = null; while (prop.hasMoreElements() == true) { final String property = (String)prop.nextElement(); final int pos = property.indexOf(":"); final String propName = property.substring(0, pos); final String propVal = property.substring(pos+1); if (propName.equals("category")) category = propVal; else if (propName.equals("componentName")) componentName = propVal; else if (propName.equals("componentClass")) className = propVal; else if (propName.equals("configuration")) configuration = propVal; else if (propName.equals("label")) label = propVal; else if (propName.equals("mimeType")) mimeType = propVal; else throw new BuildException("Unknown property " + propName + " in file " + files[i].getAbsolutePath()); } // Test for required values if (category == null) { throw new BuildException("category property is required in file " + files[i].getAbsolutePath(), location); } if (componentName == null) { throw new BuildException("componentName property is required in file " + files[i].getAbsolutePath(), location); } if (className == null) { throw new BuildException("componentClass property is required in file " + files[i].getAbsolutePath(), location); } this.add(sitemapLocation, category, componentName, className, configuration, label, mimeType); } } } } } /** * Add entry to sitemap */ private void add(final String sitemapLocation, final String category, final String componentName, final String className, final String configuration, final String label, final String mimeType) throws IOException { final String data = load( sitemapLocation ); final String searchString = new StringBuffer( "</map:" ) .append( category ) .append( ">" ).toString(); final int pos = data.indexOf( searchString ); int categoryStartPos = data.indexOf(new StringBuffer( "<map:" ) .append( category ) .append( ">" ).toString() ); if ( categoryStartPos == -1 ) categoryStartPos = data.indexOf(new StringBuffer( "<map:" ) .append( category ) .append( " " ).toString() ); if ( categoryStartPos != -1 && categoryStartPos < pos && pos != -1 ) { // the category exists, now search if a component // with the name already exists int componentPos = data.substring( categoryStartPos, pos ).indexOf( new StringBuffer( "name=\"" ) .append( componentName ) .append( "\"" ).toString() ); if ( componentPos == -1 ) { StringBuffer buffer = new StringBuffer( data.substring( 0, pos ) ) .append( "<map:" ) .append( category.substring( 0, category.length() - 1 ) ) .append( " name=\"" ) .append( componentName ) .append( "\" src=\"" ).append( className ).append( "\"" ) .append( " logger=\"sitemap.") .append( category.substring( 0, category.length() - 1 ) ) .append( '.' ) .append( componentName ) .append( '\"'); if ( null != mimeType && mimeType.length() > 0) { buffer.append( " mime-type=\"" ).append( mimeType ).append( "\"" ); } if ( null != label && label.length() > 0) { buffer.append( " label=\"" ).append( label ).append( "\"" ); } if ( null != configuration ) { buffer.append( ">\n" ).append( configuration ).append( "\n" ) .append( "</map:" ).append( category.substring( 0, category.length() - 1 ) ).append( ">\n" ); } else { buffer.append( "/>\n" ); } buffer.append( data.substring( pos ) ).toString(); this.save( sitemapLocation, buffer.toString() ); } } } /** * Load a file and return the content as a string. */ public String load( String filename ) throws IOException { FileInputStream fis; fis = new FileInputStream( filename ); int available; byte[] data = null; byte[] tempData; byte[] copyData; do { available = 1024; tempData = new byte[available]; available = fis.read( tempData, 0, available ); if ( available > 0 ) { copyData = new byte[( data == null ? 0 : data.length ) + available]; if ( data != null ) { System.arraycopy( data, 0, copyData, 0, data.length ); } System.arraycopy( tempData, 0, copyData, ( data == null ? 0 : data.length ), available ); data = copyData; } } while ( available > 0 ); fis.close(); return ( data != null ? new String( data ) : "" ); } /** * Save the string to a file */ public void save( String filename, String data ) throws IOException { FileWriter fw = new FileWriter( filename ); fw.write( data ); fw.close(); } } 1.1 xml-cocoon2/tools/src/UserInputTask.java Index: UserInputTask.java =================================================================== /***************************************************************************** * Copyright (C) The Apache Software Foundation. All rights reserved. * * ------------------------------------------------------------------------- * * This software is published under the terms of the Apache Software License * * version 1.1, a copy of which has been included with this distribution in * * the LICENSE file. * *****************************************************************************/ import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.IOException; import org.apache.tools.ant.taskdefs.Property; /** * Task to ask property values to the user. Uses current value as default. * * @author <a href="mailto:[EMAIL PROTECTED]">Nicola Ken Barozzi</a> * @created 14 January 2002 * @version CVS $Revision: 1.1 $ $Date: 2002/01/25 02:31:53 $ */ public class UserInputTask extends org.apache.tools.ant.Task { private String question; private String name; private String value; /** * Constructor. */ public UserInputTask() { super(); } /** * Initializes the task. */ public void init() { super.init(); question = "?"; } /** * Run the task. * @exception org.apache.tools.ant.BuildException The exception raised during task execution. */ public void execute() throws org.apache.tools.ant.BuildException { value = project.getProperty(name); String defaultvalue = value; //if the property exists if (value != null) { System.out.println("\n"+question + " ["+value + "] "); BufferedReader reader = new BufferedReader(new InputStreamReader (System.in)); try { value = reader.readLine(); } catch (IOException e) { value = defaultvalue; } if (!value.equals("")) { project.setProperty(name, value); } else { project.setProperty(name, defaultvalue); } } } /** * Sets the prompt text that will be presented to the user. * @param prompt String */ public void addText(String question) { this.question=question; } public void setQuestion(String question) { this.question = question; } public void setName(String name) { this.name = name; } } 1.1 xml-cocoon2/tools/src/XConfToolTask.java Index: XConfToolTask.java =================================================================== /***************************************************************************** * Copyright (C) The Apache Software Foundation. All rights reserved. * * ------------------------------------------------------------------------- * * This software is published under the terms of the Apache Software License * * version 1.1, a copy of which has been included with this distribution in * * the LICENSE file. * *****************************************************************************/ import java.io.*; import java.util.*; import org.apache.tools.ant.*; import org.apache.tools.ant.taskdefs.*; import org.apache.tools.ant.types.*; /** * Add components to the cocoon.xconf * This is only a ugly first shot * * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> * @version CVS $Revision: 1.1 $ $Date: 2002/01/25 02:31:53 $ */ public final class XConfToolTask extends Task { private String configuration; private String directory; private String extension; public void setConfiguration(String configuration) { this.configuration = configuration; } public void setDirectory(String directory) { this.directory = directory; } public void setExtension(String extension) { this.extension = extension; } public void execute() throws BuildException { if (this.configuration == null) { throw new BuildException("configuration attribute is required", location); } if (this.extension == null) { throw new BuildException("extension attribute is required", location); } if (this.directory == null) { throw new BuildException("directory attribute is required", location); } try { // process recursive this.process(new File(this.directory), this.extension, this.configuration); } catch (IOException ioe) { throw new BuildException("IOException: " + ioe); } } /** * Scan recursive */ private void process(final File directoryFile, final String ext, final String configurationLocation) throws IOException, BuildException { final File[] files = directoryFile.listFiles(); for(int i = 0; i < files.length; i++) { if (files[i].isDirectory() == true) { this.process(files[i], ext, configurationLocation); } else { if (files[i].getName().endsWith("."+ext) == true) { System.out.println("Reading: " + files[i].getAbsolutePath()); final String newComponent = this.load(files[i].getAbsolutePath()); this.add(configurationLocation, newComponent); } } } } /** * Add entry to sitemap */ private void add(final String configurationLocation, final String newComponent) throws IOException { final String data = load( configurationLocation ); // first search if component already present: if ( data.indexOf( newComponent ) == -1 ) { int pos = data.indexOf( "<cocoon" ); if (pos != -1) { pos = data.indexOf( ">", pos); if (pos != -1) { StringBuffer buffer = new StringBuffer( data.substring( 0, pos+1 ) ) .append( "\n\n" ) .append( newComponent ) .append( data.substring( pos+1 ) ); this.save( configurationLocation, buffer.toString() ); } } } } /** * Load a file and return the content as a string. */ public String load( String filename ) throws IOException { FileInputStream fis; fis = new FileInputStream( filename ); int available; byte[] data = null; byte[] tempData; byte[] copyData; do { available = 1024; tempData = new byte[available]; available = fis.read( tempData, 0, available ); if ( available > 0 ) { copyData = new byte[( data == null ? 0 : data.length ) + available]; if ( data != null ) { System.arraycopy( data, 0, copyData, 0, data.length ); } System.arraycopy( tempData, 0, copyData, ( data == null ? 0 : data.length ), available ); data = copyData; } } while ( available > 0 ); fis.close(); return ( data != null ? new String( data ) : "" ); } /** * Save the string to a file */ public void save( String filename, String data ) throws IOException { FileWriter fw = new FileWriter( filename ); fw.write( data ); fw.close(); } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]