cziegeler 02/01/11 01:35:28
Modified: . build.bat build.sh build.xml
Added: tools/bin ant ant.bat antRun antRun.bat fix-packages.py
lcp.bat runant.pl
tools/lib ant-1.4.1-optional.jar ant-1.4.1.jar
tools/src ClassAvailable.java SitemapTool.java
Removed: bin ant ant.bat antRun antRun.bat fix-packages.py
lcp.bat runant.pl
bin/src ClassAvailable.java SitemapTool.java
lib ant_1_4-optional.jar ant_1_4.jar
Log:
Moved build system to tools directory
Revision Changes Path
1.9 +7 -2 xml-cocoon2/build.bat
Index: build.bat
===================================================================
RCS file: /home/cvs/xml-cocoon2/build.bat,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- build.bat 13 Sep 2001 10:28:49 -0000 1.8
+++ build.bat 11 Jan 2002 09:35:27 -0000 1.9
@@ -2,13 +2,18 @@
rem ----------------------------------------------------------------------------
rem build.bat - Win32 Build Script for Apache Cocoon
rem
-rem $Id: build.bat,v 1.8 2001/09/13 10:28:49 cziegeler Exp $
+rem $Id: build.bat,v 1.9 2002/01/11 09:35:27 cziegeler Exp $
rem ----------------------------------------------------------------------------
+rem ----- Copy Xalan and Xerces for the build system ------------------------
+copy lib\xerces*.jar tools\lib
+copy lib\xalan*.jar tools\lib
+copy lib\xml-api*.jar tools\lib
+
rem ----- Verify and Set Required Environment Variables ------------------------
if not "%ANT_HOME%" == "" goto gotAntHome
-set ANT_HOME=.
+set ANT_HOME=tools
:gotAntHome
call %ANT_HOME%\bin\ant %1 %2 %3 %4 %5 %6 %7 %8 %9
1.8 +7 -3 xml-cocoon2/build.sh
Index: build.sh
===================================================================
RCS file: /home/cvs/xml-cocoon2/build.sh,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- build.sh 26 Nov 2001 22:40:33 -0000 1.7
+++ build.sh 11 Jan 2002 09:35:27 -0000 1.8
@@ -4,8 +4,12 @@
echo "Apache Cocoon 2 Build System"
echo "----------------------------"
-chmod u+x ./bin/antRun
-chmod u+x ./bin/ant
+cp ./lib/xalan*.jar ./tools/lib
+cp ./lib/xerces*.jar ./tools/lib
+cp ./lib/xml-api*.jar ./tools/lib
+
+chmod u+x ./tools/bin/antRun
+chmod u+x ./tools/bin/ant
unset ANT_HOME
@@ -13,7 +17,7 @@
export CP
unset CLASSPATH
-$PWD/bin/ant -logger org.apache.tools.ant.NoBannerLogger -emacs $@
+$PWD/bin/tools/ant -logger org.apache.tools.ant.NoBannerLogger -emacs $@
CLASSPATH=$CP
export CLASSPATH
1.131 +10 -11 xml-cocoon2/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/xml-cocoon2/build.xml,v
retrieving revision 1.130
retrieving revision 1.131
diff -u -r1.130 -r1.131
--- build.xml 8 Jan 2002 10:27:11 -0000 1.130
+++ build.xml 11 Jan 2002 09:35:27 -0000 1.131
@@ -168,6 +168,7 @@
<property name="test.dir" value="${src.dir}/test"/>
<property name="lib.dir" value="./lib"/>
<property name="bin.dir" value="./bin"/>
+ <property name="tools.dir" value="./tools"/>
<property name="docs.dir" value="${src.dir}/documentation/xdocs"/>
<property name="images.dir" value="${src.dir}/documentation/images"/>
<property name="webapp.dir" value="${src.dir}/webapp"/>
@@ -231,8 +232,8 @@
<filter token="database-password" value="${database-password}"/>
<!-- compile the ant tasks -->
- <mkdir dir="bin/anttasks"/>
- <javac srcdir="bin/src" destdir="bin/anttasks"/>
+ <mkdir dir="${tools.dir}/anttasks"/>
+ <javac srcdir="${tools.dir}/src" destdir="${tools.dir}/anttasks"/>
</target>
@@ -244,7 +245,7 @@
<!-- A simple task to test for a class -->
<taskdef name="ClassAvailable" classname="ClassAvailable"
- classpath="./bin/anttasks"/>
+ classpath="./tools/anttasks"/>
<available property="jaxen.present" classname="org.jaxen.dom.XPath">
<classpath refid="classpath"/>
@@ -830,7 +831,7 @@
<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"
- classpath="./bin/anttasks"/>
+ classpath="${tools.dir}/anttasks"/>
<!-- Invoke the SitemapTool to add optional entries -->
<SitemapTool directory="${build.src}"
@@ -861,8 +862,6 @@
<copy todir="${build.war}/WEB-INF/lib">
<fileset dir="${lib.dir}">
<include name="*.jar"/>
- <exclude name="ant*.jar"/>
- <exclude name="stylebook*.jar"/>
<exclude name="servlet*.jar"/>
</fileset>
</copy>
@@ -885,8 +884,6 @@
<copy todir="${build.war}/WEB-INF/lib">
<fileset dir="${scratchpad.lib}">
<include name="*.jar"/>
- <exclude name="ant*.jar"/>
- <exclude name="stylebook*.jar"/>
<exclude name="servlet*.jar"/>
</fileset>
</copy>
@@ -1091,10 +1088,14 @@
<mkdir dir="${dist.src.dir}/src/webapp"/>
<mkdir dir="${dist.src.dir}/docs"/>
<mkdir dir="${dist.src.dir}/docs/apidocs"/>
+ <mkdir dir="${dist.src.dir}/tools"/>
<copy todir="${dist.src.dir}/bin">
<fileset dir="${bin.dir}"/>
</copy>
+ <copy todir="${dist.src.dir}/tools">
+ <fileset dir="${tools.dir}"/>
+ </copy>
<copy todir="${dist.src.dir}/src/documentation">
<fileset dir="${build.context}"/>
@@ -1178,7 +1179,7 @@
<chmod perm="+x" file="${dist.src.dir}/run.sh"/>
<chmod perm="+x" file="${dist.src.dir}/build.sh"/>
- <chmod perm="+x" file="${dist.src.dir}/bin/antRun"/>
+ <chmod perm="+x" file="${dist.src.dir}/tools/bin/antRun"/>
<fixcrlf srcdir="${dist.src.dir}" includes="**.sh" eol="lf"/>
<fixcrlf srcdir="${dist.src.dir}" includes="antRun" eol="lf"/>
<fixcrlf srcdir="${dist.src.dir}" includes="**.bat" eol="crlf"/>
@@ -1225,8 +1226,6 @@
<copy todir="${dist.bin.dir}/webapp/WEB-INF/lib">
<fileset dir="${lib.dir}">
<include name="*.jar"/>
- <exclude name="ant*.jar"/>
- <exclude name="stylebook*.jar"/>
<exclude name="servlet*.jar"/>
</fileset>
</copy>
1.1 xml-cocoon2/tools/bin/ant
Index: ant
===================================================================
#! /bin/sh
if [ -f "$HOME/.antrc" ] ; then
. $HOME/.antrc
fi
# Cygwin support. $cygwin _must_ be set to either true or false.
case "`uname`" in
CYGWIN*) cygwin=true ;;
*) cygwin=false ;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin; then
[ -n "$ANT_HOME" ] &&
ANT_HOME=`cygpath --unix "$ANT_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
if [ "$ANT_HOME" = "" ] ; then
# try to find ANT
if [ -d /opt/ant ] ; then
ANT_HOME=/opt/ant
fi
if [ -d ${HOME}/opt/ant ] ; then
ANT_HOME=${HOME}/opt/ant
fi
## resolve links - $0 may be a link to ant's home
PRG=$0
progname=`basename $0`
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '.*/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname $PRG`/$link"
fi
done
ANT_HOME=`dirname "$PRG"`/..
fi
if [ "$JAVA_HOME" != "" ] ; then
if [ "$JAVACMD" = "" ] ; then
JAVACMD=$JAVA_HOME/bin/java
fi
else
if [ "$JAVACMD" = "" ] ; then
JAVACMD=java
fi
fi
# add in the dependency .jar files
DIRLIBS=${ANT_HOME}/lib/*.jar
for i in ${DIRLIBS}
do
# if the directory is empty, then it will return the input string
# this is stupid, so case for it
if [ "$i" != "${DIRLIBS}" ] ; then
LOCALCLASSPATH=$LOCALCLASSPATH:"$i"
fi
done
if [ "$CLASSPATH" != "" ] ; then
LOCALCLASSPATH=$CLASSPATH:$LOCALCLASSPATH
fi
if [ "$JAVA_HOME" != "" ] ; then
if test -f $JAVA_HOME/lib/tools.jar ; then
LOCALCLASSPATH=$LOCALCLASSPATH:$JAVA_HOME/lib/tools.jar
fi
if test -f $JAVA_HOME/lib/classes.zip ; then
LOCALCLASSPATH=$LOCALCLASSPATH:$JAVA_HOME/lib/classes.zip
fi
else
echo "Warning: JAVA_HOME environment variable is not set."
echo " If build fails because sun.* classes could not be found"
echo " you will need to set the JAVA_HOME environment variable"
echo " to the installation directory of java."
fi
# supply JIKESPATH to Ant as jikes.class.path
if [ "$JIKESPATH" != "" ] ; then
if [ "$ANT_OPTS" != "" ] ; then
ANT_OPTS="$ANT_OPTS -Djikes.class.path=$JIKESPATH"
else
ANT_OPTS=-Djikes.class.path=$JIKESPATH
fi
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
ANT_HOME=`cygpath --path --windows "$ANT_HOME"`
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
LOCALCLASSPATH=`cygpath --path --windows "$LOCALCLASSPATH"`
fi
$JAVACMD -classpath "$LOCALCLASSPATH" -Dant.home="${ANT_HOME}" $ANT_OPTS
org.apache.tools.ant.Main "$@"
1.1 xml-cocoon2/tools/bin/ant.bat
Index: ant.bat
===================================================================
@echo off
if exist "%HOME%\antrc_pre.bat" call "%HOME%\antrc_pre.bat"
if not "%OS%"=="Windows_NT" goto win9xStart
:winNTStart
@setlocal
rem %~dp0 is name of current script under NT
set DEFAULT_ANT_HOME=%~dp0
rem : operator works similar to make : operator
set DEFAULT_ANT_HOME=%DEFAULT_ANT_HOME:\bin\=%
if %ANT_HOME%a==a set ANT_HOME=%DEFAULT_ANT_HOME%
set DEFAULT_ANT_HOME=
rem On NT/2K grab all arguments at once
set ANT_CMD_LINE_ARGS=%*
goto doneStart
:win9xStart
rem Slurp the command line arguments. This loop allows for an unlimited number of
rem agruments (up to the command line limit, anyway).
set ANT_CMD_LINE_ARGS=
:setupArgs
if %1a==a goto doneStart
set ANT_CMD_LINE_ARGS=%ANT_CMD_LINE_ARGS% %1
shift
goto setupArgs
:doneStart
rem This label provides a place for the argument list loop to break out
rem and for NT handling to skip to.
rem find ANT_HOME
if not "%ANT_HOME%"=="" goto checkJava
rem check for ant in Program Files on system drive
if not exist "%SystemDrive%\Program Files\ant" goto checkSystemDrive
set ANT_HOME=%SystemDrive%\Program Files\ant
goto checkJava
:checkSystemDrive
rem check for ant in root directory of system drive
if not exist "%SystemDrive%\ant" goto noAntHome
set ANT_HOME=%SystemDrive%\ant
goto checkJava
:noAntHome
echo ANT_HOME is not set and ant could not be located. Please set ANT_HOME.
goto end
:checkJava
set _JAVACMD=%JAVACMD%
set LOCALCLASSPATH="%CLASSPATH%"
for %%i in ("%ANT_HOME%\lib\*.jar") do call "%ANT_HOME%\bin\lcp.bat" "%%i"
if "%JAVA_HOME%" == "" goto noJavaHome
if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java
if exist "%JAVA_HOME%\lib\tools.jar" call "%ANT_HOME%\bin\lcp.bat"
"%JAVA_HOME%\lib\tools.jar"
if exist "%JAVA_HOME%\lib\classes.zip" call "%ANT_HOME%\bin\lcp.bat"
"%JAVA_HOME%\lib\classes.zip"
goto checkJikes
:noJavaHome
if "%_JAVACMD%" == "" set _JAVACMD=java
echo.
echo Warning: JAVA_HOME environment variable is not set.
echo If build fails because sun.* classes could not be found
echo you will need to set the JAVA_HOME environment variable
echo to the installation directory of java.
echo.
:checkJikes
if not "%JIKESPATH%" == "" goto runAntWithJikes
:runAnt
%_JAVACMD% -classpath %LOCALCLASSPATH% -Dant.home="%ANT_HOME%" %ANT_OPTS%
org.apache.tools.ant.Main %ANT_CMD_LINE_ARGS%
goto end
:runAntWithJikes
%_JAVACMD% -classpath %LOCALCLASSPATH% -Dant.home="%ANT_HOME%"
-Djikes.class.path=%JIKESPATH% %ANT_OPTS% org.apache.tools.ant.Main %ANT_CMD_LINE_ARGS%
:end
set LOCALCLASSPATH=
set _JAVACMD=
set ANT_CMD_LINE_ARGS=
if not "%OS%"=="Windows_NT" goto mainEnd
:winNTend
@endlocal
:mainEnd
if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat"
1.1 xml-cocoon2/tools/bin/antRun
Index: antRun
===================================================================
#! /bin/sh
# Args: DIR command
cd "$1"
CMD="$2"
shift
shift
exec $CMD "$@"
1.1 xml-cocoon2/tools/bin/antRun.bat
Index: antRun.bat
===================================================================
@echo off
# Change drive and directory to %1 (Win9X only for NT/2K use "cd /d")
cd %1
%1\
set ANT_RUN_CMD=%2
shift
shift
set PARAMS=
:loop
if ""%1 == "" goto runCommand
set PARAMS=%PARAMS% %1
shift
goto loop
:runCommand
rem echo %ANT_RUN_CMD% %PARAMS%
%ANT_RUN_CMD% %PARAMS%
1.1 xml-cocoon2/tools/bin/fix-packages.py
Index: fix-packages.py
===================================================================
#! /usr/bin/env python
#
# Mass string translation for java/xml files (change Wanted re for other files)
#
# Author: Peter Donald <[EMAIL PROTECTED]>
#
# Adapted from fixid.py in python distribution under Tools
#
import sys
import re
import string
import os
from stat import *
import getopt
err = sys.stderr.write
dbg = err
out = sys.stdout.write
def usage():
progname = sys.argv[0]
err('Usage: ' + progname + ' [-s file] ... file-or-directory ...\n')
err('\n')
err('-s substfile : add a file of substitutions\n')
err('\n')
err('Each non-empty non-comment line in a substitution file must\n')
err('contain exactly two words separated by a | character.\n')
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], 'crs:')
except getopt.error, msg:
err('Options error: ' + str(msg) + '\n')
usage()
sys.exit(2)
bad = 0
if not args: # No arguments
usage()
sys.exit(2)
for opt, arg in opts:
if opt == '-s':
addsubst(arg)
initre()
for arg in args:
if os.path.isdir(arg):
if recursedown(arg): bad = 1
elif os.path.islink(arg):
err(arg + ': will not process symbolic links\n')
bad = 1
else:
if fix(arg): bad = 1
sys.exit(bad)
# Change this regular expression to select a different set of files
Wanted = '^[a-zA-Z0-9_\-]+\.(java|xml|xinfo)$'
def wanted(name):
return None <> re.match(Wanted, name)
def recursedown(dirname):
dbg('recursedown(' + `dirname` + ')\n')
bad = 0
try:
names = os.listdir(dirname)
except os.error, msg:
err(dirname + ': cannot list directory: ' + str(msg) + '\n')
return 1
names.sort()
subdirs = []
for name in names:
if name in (os.curdir, os.pardir): continue
fullname = os.path.join(dirname, name)
if os.path.islink(fullname): pass
elif os.path.isdir(fullname):
subdirs.append(fullname)
elif wanted(name):
if fix(fullname): bad = 1
for fullname in subdirs:
if recursedown(fullname): bad = 1
return bad
def fix(filename):
dbg('fix(' + `filename` + ')\n')
# File replacement mode
try:
f = open(filename, 'r')
except IOError, msg:
err(filename + ': cannot open: ' + str(msg) + '\n')
return 1
head, tail = os.path.split(filename)
tempname = os.path.join(head, '@' + tail)
# If we find a match, we rewind the file and start over but
# now copy everything to a temp file.
lineno = 0
g = None
while 1:
line = f.readline()
if not line: break
lineno = lineno + 1
newline = fixline(line)
if newline != line:
if g is None:
try:
g = open(tempname, 'w')
except IOError, msg:
f.close()
err(tempname+': cannot create: '+
str(msg)+'\n')
return 1
f.seek(0)
lineno = 0
out(filename + ':\n')
continue # restart from the beginning
out(`lineno` + '\n')
out('< ' + line)
out('> ' + newline)
if g is not None:
g.write(newline)
# End of file
f.close()
if not g: return 0 # No changes
# Finishing touch -- move files
# First copy the file's mode to the temp file
try:
statbuf = os.stat(filename)
os.chmod(tempname, statbuf[ST_MODE] & 07777)
except os.error, msg:
err(tempname + ': warning: chmod failed (' + str(msg) + ')\n')
# Then make a backup of the original file as filename~
try:
os.rename(filename, filename + '~')
except os.error, msg:
err(filename + ': warning: backup failed (' + str(msg) + ')\n')
# Now move the temp file to the original file
try:
os.rename(tempname, filename)
except os.error, msg:
err(filename + ': rename failed (' + str(msg) + ')\n')
return 1
# Return succes
return 0
def initre():
global SearcherExpr
keys = Dict.keys()
keyCount = len(keys)
i = 0
reStr = ""
while i < len(keys):
if i != 0: reStr = reStr + '|'
reStr = reStr + keys[i]
i = i + 1
SearcherExpr = re.compile( reStr )
def fixline(line):
global Program
## print '-->', `line`
i = 0
while i < len(line):
match = SearcherExpr.search(line, i)
if match == None: break
found = match.group(0)
i = match.start()
n = len(found)
if Dict.has_key(found):
subst = Dict[found]
line = line[:i] + subst + line[i+n:]
n = len(subst)
i = i + n
return line
Dict = {}
NotInComment = {}
def addsubst(substfile):
try:
fp = open(substfile, 'r')
except IOError, msg:
err(substfile + ': cannot read substfile: ' + str(msg) + '\n')
sys.exit(1)
lineno = 0
while 1:
line = fp.readline()
if not line: break
lineno = lineno + 1
try:
i = string.index(line, '#')
except string.index_error:
i = -1 # Happens to delete trailing \n
words = string.split(line[:i],'|')
if not words: continue
if len(words) <> 2:
err(substfile + ':' + `lineno` + ': warning: bad line: ' +
line)
continue
[key, value] = words
## print 'Will replace ', key, ' with ', value
Dict[key] = value
fp.close()
main()
1.1 xml-cocoon2/tools/bin/lcp.bat
Index: lcp.bat
===================================================================
set LOCALCLASSPATH=%1;%LOCALCLASSPATH%
1.1 xml-cocoon2/tools/bin/runant.pl
Index: runant.pl
===================================================================
#!/usr/bin/perl
#######################################################################
#
# runant.pl
#
# wrapper script for invoking ant in a platform with Perl installed
# this may include cgi-bin invocation, which is considered somewhat daft.
# (slo: that should be a separate file which can be derived from this
# and returns the XML formatted output)
#
# the code is not totally portable due to classpath and directory splitting
# issues. oops. (NB, use File::Spec::Functions will help and the code is
# structured for the catfile() call, but because of perl version funnies
# the code is not included.
#
# created: 2000-8-24
# last modified: 2000-8-24
# author: Steve Loughran [EMAIL PROTECTED]
#######################################################################
#
# Assumptions:
#
# - the "java" executable/script is on the command path
# - ANT_HOME has been set
# - target platform uses ":" as classpath separator or perl indicates it is dos/win32
# - target platform uses "/" as directory separator.
#be fussy about variables
use strict;
#platform specifics (disabled)
#use File::Spec::Functions;
#turn warnings on during dev; generates a few spurious uninitialised var access
warnings
#use warnings;
#and set $debug to 1 to turn on trace info
my $debug=0;
#######################################################################
#
# check to make sure environment is setup
#
my $HOME = $ENV{ANT_HOME};
if ($HOME eq "")
{
die "\n\nANT_HOME *MUST* be set!\n\n";
}
my $JAVACMD = $ENV{JAVACMD};
$JAVACMD = "java" if $JAVACMD eq "";
#ISSUE: what java wants to split up classpath varies from platform to platform
#and perl is not too hot at hinting which box it is on.
#here I assume ":" 'cept on win32 and dos. Add extra tests here as needed.
my $s=":";
if(($^O eq "MSWin32") || ($^O eq "dos"))
{
$s=";";
}
#build up standard classpath
my $localpath=$ENV{CLASSPATH};
if ($localpath eq "")
{
print "warning: no initial classpath\n" if ($debug);
$localpath="";
}
#add jar files. I am sure there is a perl one liner to do this.
my $jarpattern="$HOME/lib/*.jar";
my @jarfiles =glob($jarpattern);
print "jarfiles=@jarfiles\n" if ($debug);
my $jar;
foreach $jar (@jarfiles )
{
$localpath.="$s$jar";
}
#if Java home is defined, look for tools.jar & classes.zip and add to classpath
my $JAVA_HOME = $ENV{JAVA_HOME};
if ($JAVA_HOME ne "")
{
my $tools="$JAVA_HOME/lib/tools.jar";
if (-e "$tools")
{
$localpath .= "$s$tools";
}
my $classes="$JAVA_HOME/lib/classes.zip";
if (-e $classes)
{
$localpath .= "$s$classes";
}
}
else
{
print "\n\nWarning: JAVA_HOME environment variable is not set.\n".
"If the build fails because sun.* classes could not be found\n".
"you will need to set the JAVA_HOME environment variable\n".
"to the installation directory of java\n";
}
#jikes
my @ANT_OPTS=split $ENV{ANT_OPTS};
if($ENV{JIKESPATH} ne "")
{
push @ANT_OPTS, "-Djikes.class.path=$ENV{JIKESPATH}";
}
#construct arguments to java
my @ARGS;
push @ARGS, "-classpath", "$localpath", "-Dant.home=$HOME";
push @ARGS, @ANT_OPTS;
push @ARGS, "org.apache.tools.ant.Main";
push @ARGS, @ARGV;
print "\n $JAVACMD @ARGS\n\n" if ($debug);
my $returnValue = system $JAVACMD, @ARGS;
if ($returnValue eq 0)
{
exit 0;
}
else
{
# only 0 and 1 are widely recognized as exit values
# so change the exit value to 1
exit 1;
}
1.1 xml-cocoon2/tools/lib/ant-1.4.1-optional.jar
<<Binary file>>
1.1 xml-cocoon2/tools/lib/ant-1.4.1.jar
<<Binary file>>
1.1 xml-cocoon2/tools/src/ClassAvailable.java
Index: ClassAvailable.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/11 09:35:28 $
*/
public class ClassAvailable 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/SitemapTool.java
Index: SitemapTool.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/11 09:35:28 $
*/
public final class SitemapTool 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();
}
}
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]