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]