more stuff from Ken's build patch

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352143 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Mark Johnson 2002-03-03 22:25:28 +00:00
parent e2aea827ad
commit c71a1680b8
36 changed files with 3897 additions and 0 deletions

46
project-info.xml Normal file
View File

@ -0,0 +1,46 @@
<?xml version="1.0"?>
<project
name="Jakarta POI">
<info
module="jakarta-poi"
packages="org.apache.poi.*"
version="1.5"
tag="dev"
year="2001-2002"
web="http://jakarta.apache.org/poi/" />
<description>
<short>The POI project consists of APIs for manipulating various file formats based upon Microsoft's OLE 2 Compound Document format using pure Java.</short>
<detailed>A common misconception is that POI writes Excel files. POI is the name of the project. POI contains several components, one of which, HSSF, writes Excel files. The following are components of the entire POI project.POIFS is the oldest and most stable part of the project. It is our port of the OLE 2 Compound Document Format to pure Java. It supports both read and write functionality. All of our components ultimately rely on it by definition. HSSF is our port of the Microsoft Excel 97(-2002) file format (BIFF8) to pure Java. It supports read and write capability. HDF is our port of the Microsoft Word 97 file format to pure Java. It supports read and write capability. This component is in the early stages of design. Jump in! </detailed>
<where>The home page for the POI project can be found on the web site (http://jakarta.apache.org/poi/). There you also find information on how to download the latest release as well as all the other information you might need regarding this project.</where>
<requirements>The for installing it you need a Java 1.2 or later compatible virtual machine for your operating system.</requirements>
<howto>The documentation available as of the date of this release is included in the "docs/" directory. The documentation sources are in the "src/documentation" directory. Look for the most updated documentation on the web site.</howto>
<licence>For legal and licensing issues, please read the LICENSE.* files in the /legal directory.</licence>
</description>
<developers>
<!-- in strict alphabetical order -->
<person name="Andrew C. Oliver" email="acoliver at apache dot org" id="ACO" />
<person name="Glen Stampoultzis" email="glens at apache.org" id="GS" />
<person name="Marc Johnson" email="mjohnson at apache dot org" id="MJ" />
<person name="Rainer Klute" email="rainer.klute@epost.de" id="RK" />
</developers>
<todo>
<actions priority="medium">
<action context="code" assigned-to="NKB">
</action>
</actions>
</todo>
<credits>
<credit>This product includes software developed by the Krysalis Project (http://www.krysalis.org/).</credit>
</credits>
</project>

View File

@ -0,0 +1,30 @@
<!-- =================================================================== -->
<!-- Interactive contrib builds -->
<!-- =================================================================== -->
<target name="contrib" depends="init" description="Interactive Contributors' Build">
<echo message="--------------------------------------------------------------"/>
<echo message=" "/>
<echo message=" ${fullname} ${version} CONTRIB"/>
<echo message=" "/>
<echo message="--------------------------------------------------------------"/>
<echo message="Building with ${ant.version}"/>
<echo message="using build file ${ant.file}"/>
<echo message="--------------------------------------------------------------"/>
<echo message=" "/>
<echo message=" These are CONTRIB BUILDS. They are not guaranteed to work."/>
<echo message=" You have been warned. "/>
<echo message=" "/>
<echo message=" poibrowser - POIBrowser 0.10 GUI POI Viewer"/>
<echo message=" -"/>
<echo message=" -"/>
<echo message=" -"/>
<echo message=" -"/>
<echo message=" -"/>
<echo message=" "/>
<property name="input.selection" value="poibrowser"/>
<user-input name="input.selection">Please select a target </user-input>
<ant antfile="src/contrib/targets/${input.selection}.xml"/>
</target>

View File

@ -0,0 +1,26 @@
<!-- try.xml ... these are trial build targets which are currently
undergoing testing. When ready they can be moved into the main build.xml -->
<project default="poibrowser" basedir="../../" name="POIBrowser build">
<!-- =================================================================== -->
<!-- GUI Run Target -->
<!-- =================================================================== -->
<target name="poibrowser">
<property name="contrib.input.selection" value=""/>
<user-input name="contrib.input.selection">Please select a file to view </user-input>
<java classname="org.apache.poi.contrib.poibrowser.POIBrowser" fork="true">
<arg value="${contrib.input.selection}"/>
<classpath>
<pathelement location="build/jakarta-poi/classes"/>
<pathelement location="build/jakarta-poi/contrib/classes"/>
</classpath>
</java>
</target>
</project>
<!-- End of file -->

View File

@ -0,0 +1,30 @@
<!-- =================================================================== -->
<!-- Interactive scratchpad builds -->
<!-- =================================================================== -->
<target name="scratchpad" depends="init" description="Interactive Scratchpad Build">
<echo message="--------------------------------------------------------------"/>
<echo message=" "/>
<echo message=" ${fullname} ${version} SCRATCHPAD "/>
<echo message=" "/>
<echo message="--------------------------------------------------------------"/>
<echo message="Building with ${ant.version}"/>
<echo message="using build file ${ant.file}"/>
<echo message="--------------------------------------------------------------"/>
<echo message=" "/>
<echo message=" These are SCRATCHPAD BUILDS. They are not guaranteed to work."/>
<echo message=" You have been warned. "/>
<echo message=" "/>
<echo message=" --------------"/>
<echo message=" --------------"/>
<echo message=" --------------"/>
<echo message=" --------------"/>
<echo message=" --------------"/>
<echo message=" --------------"/>
<echo message=" "/>
<property name="input.selection" value=""/>
<user-input name="input.selection">Please select a target </user-input>
<ant antfile="src/scratchpad/targets/${input.selection}.xml"/>
</target>

View File

@ -0,0 +1,32 @@
<!-- =================================================================== -->
<!-- Interactive build -->
<!-- =================================================================== -->
<target name="interactive" description="Interactive Build" depends="init">
<echo message="--------------------------------------------------------------"/>
<echo message=" "/>
<echo message=" ${fullname} ${version} [${year}] "/>
<echo message=" "/>
<echo message="--------------------------------------------------------------"/>
<echo message="Building with ${ant.version}"/>
<echo message="using build file ${ant.file}"/>
<echo message="--------------------------------------------------------------"/>
<echo message=" These are the most common build targets."/>
<echo message=" You can also invoke them directly; see build.xml for more info. "/>
<echo message=" Builds will be in /build directory, distributions in /dist."/>
<echo message=" "/>
<echo message=" compile ------ compiles the source code "/>
<echo message=" docs --------- generates the html docs"/>
<echo message=" cleandocs ---- cleans the build docs directory"/>
<echo message=" javadocs ----- generates the API documentation"/>
<echo message=" test --------- performs the jUnit tests"/>
<echo message=" clean -------- cleans the build directory"/>
<echo message=" dist --------- creates src and bin distributions"/>
<echo message=" scratchpad --- build-run scratchpad code"/>
<echo message=" contrib ------ build-run contributed code"/>
<property name="input.selection" value="compile"/>
<user-input name="input.selection">Please select a target </user-input>
<antcall target="${input.selection}"/>
</target>

View File

@ -0,0 +1,9 @@
<!-- =================================================================== -->
<!-- Extra targets for this project -->
<!-- =================================================================== -->
<!--
<target name="ABC" description="Abc" depends="init">
</target>
-->

15
src/targets/try.xml Normal file
View File

@ -0,0 +1,15 @@
<!-- try.xml ... these are trial build targets which are currently
undergoing testing. When ready they can be moved into the main build.xml -->
<project default="trial-init" basedir="." name="Trial builds">
<!-- =================================================================== -->
<!-- Initialization target -->
<!-- =================================================================== -->
<target name="trial-init">
</target>
</project>
<!-- End of file -->

107
tools/ant/bin/ant Executable file
View File

@ -0,0 +1,107 @@
#! /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 "$@"

97
tools/ant/bin/ant.bat Normal file
View File

@ -0,0 +1,97 @@
@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"

9
tools/ant/bin/antRun Executable file
View File

@ -0,0 +1,9 @@
#! /bin/sh
# Args: DIR command
cd "$1"
CMD="$2"
shift
shift
exec $CMD "$@"

20
tools/ant/bin/antRun.bat Normal file
View File

@ -0,0 +1,20 @@
@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%

View File

@ -0,0 +1,216 @@
#! /usr/bin/env python
#
# Mass string translation for java/xml files (change Wanted re for other files)
#
# Author: Peter Donald <donaldp@apache.org>
#
# 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()

2
tools/ant/bin/lcp.bat Normal file
View File

@ -0,0 +1,2 @@
set LOCALCLASSPATH=%1;%LOCALCLASSPATH%

131
tools/ant/bin/runant.pl Normal file
View File

@ -0,0 +1,131 @@
#!/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 steve_l@sourceforge.net
#######################################################################
#
# 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;
}

View File

@ -0,0 +1,3 @@
xalan-2.2.0.jar
xerces-2.0.0.jar
junit-3.7.jar

View File

@ -0,0 +1,159 @@
/*****************************************************************************
* 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:stefano@apache.org">stefano@apache.org</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:cziegeler@apache.org">Carsten Ziegeler</a>
* @version CVS $Revision$ $Date$
*/
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;
}
}

View File

@ -0,0 +1,179 @@
/*****************************************************************************
* Copyright (C) The Krysalis project. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Krysalis Patchy *
* Software License version 1.1_01, a copy of which has been included *
* at the bottom of this file. *
*****************************************************************************/
import com.izforge.izpress.*;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.Writer;
import java.io.PrintWriter;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.tidy.Tidy;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.Property;
/**
* Task to compress html size.
*
* @author <a href="mailto:barozzi@nicolaken.com">Nicola Ken Barozzi</a>
* @created 14 January 2002
*/
public class IZPressHtmlCompressTask extends org.apache.tools.ant.Task {
private String src;
private String dest;
private Compressor compressor;
private CompressorConfig conf;
private String wipeComments = "true";
private String wipeBorders = "true";
private String wipeReturns = "true";
private String wipeSpaces = "true";
PrintWriter pw;
/**
* Constructor.
*/
public IZPressHtmlCompressTask() {
super();
}
/**
* Initializes the task.
*/
public void init() {
super.init();
// Setup an instance of IZCompressor.
conf =
new CompressorConfig(false,false,true,true);
}
/**
* Run the task.
* @exception org.apache.tools.ant.BuildException The exception raised during task execution.
*/
public void execute() throws org.apache.tools.ant.BuildException {
try{
FileInputStream in = new FileInputStream(src);
FileOutputStream out = new FileOutputStream(dest);
compressor = new Compressor(in,out,conf);
compressor.compress();
out.flush();
in.close();
out.close();
}
catch(IOException ioe)
{
throw new BuildException(ioe);
}
}
public void setSrc(String src) {
this.src = src;
}
public void setDest(String dest) {
this.dest = dest;
}
public void setWipeComments(String wipeComments) {
this.wipeComments = wipeComments;
}
public void setWipeBorders(String wipeBorders) {
this.wipeBorders = wipeBorders;
}
public void setWipeReturns(String wipeReturns) {
this.wipeReturns = wipeReturns;
}
public void setWipeSpaces(String wipeSpaces) {
this.wipeSpaces = wipeSpaces;
}
}
/*
The Krysalis Patchy Software License, Version 1.1_01
Copyright (c) 2002 Nicola Ken Barozzi. All rights reserved.
This Licence is compatible with the BSD licence as described and
approved by http://www.opensource.org/, and is based on the
Apache Software Licence Version 1.1.
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 acknowledgment:
"This product includes software developed for project
Krysalis (http://www.krysalis.org/)."
Alternately, this acknowledgment may appear in the software itself,
if and wherever such third-party acknowledgments normally appear.
4. The names "Krysalis" and "Nicola Ken Barozzi" and
"Krysalis Centipede" must not be used to endorse or promote products
derived from this software without prior written permission. For
written permission, please contact krysalis@nicolaken.org.
5. Products derived from this software may not be called "Krysalis",
"Krysalis Centipede", nor may "Krysalis" appear in their name,
without prior written permission of Nicola Ken Barozzi.
6. This software may contain voluntary contributions made by many
individuals, who decided to donate the code to this project in
respect of this licence.
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 KRYSALIS PROJECT 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.
====================================================================*/

View File

@ -0,0 +1,279 @@
/*****************************************************************************
* Copyright (C) The Krysalis project. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Krysalis Patchy *
* Software License version 1.1_01, a copy of which has been included *
* at the bottom of this file. *
*****************************************************************************/
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.Writer;
import java.io.PrintWriter;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.tidy.Tidy;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.Property;
/**
* Task to ask property values to the user. Uses current value as default.
*
* @author <a href="mailto:barozzi@nicolaken.com">Nicola Ken Barozzi</a>
* @created 14 January 2002
*/
public class JTidyTask
extends org.apache.tools.ant.Task
{
private String src;
private String dest;
private String log;
private Tidy tidy;
private String warn = "false";
private String summary = "false";
PrintWriter pw;
/**
* Constructor.
*/
public JTidyTask()
{
super();
}
/**
* Initializes the task.
*/
public void init()
{
super.init();
// Setup an instance of Tidy.
tidy = new Tidy();
tidy.setXmlOut(true);
tidy.setXHTML(true);
tidy.setDropFontTags(true);
tidy.setLiteralAttribs(true);
tidy.setMakeClean(true);
tidy.setShowWarnings(Boolean.getBoolean(warn));
tidy.setQuiet(!Boolean.getBoolean(summary));
}
/**
* Run the task.
* @exception org.apache.tools.ant.BuildException The exception raised during task execution.
*/
public void execute()
throws org.apache.tools.ant.BuildException
{
try
{
PrintWriter pw = new PrintWriter(new FileWriter(log));
tidy.setErrout(pw);
// Extract the document using JTidy and stream it.
BufferedInputStream in =
new BufferedInputStream(new FileInputStream(src));
// FileOutputStream out = new FileOutputStream(dest);
PrintWriter out =
new PrintWriter(new FileWriter(dest));
// using null as output to get dom so to remove duplicate attributes
org.w3c.dom.Document domDoc = tidy.parseDOM(in, null);
domDoc.normalize();
stripDuplicateAttributes(domDoc, null);
org.apache.xml.serialize.OutputFormat format =
new org.apache.xml.serialize.OutputFormat();
format.setIndenting(true);
format.setEncoding("ISO-8859-1");
format.setPreserveSpace(true);
format.setLineSeparator("\n");
org.apache.xml.serialize.XMLSerializer serializer =
new org.apache.xml.serialize.XMLSerializer(out, format);
serializer.serialize(domDoc);
out.flush();
out.close();
in.close();
pw.flush();
pw.close();
}
catch (IOException ioe)
{
throw new BuildException(ioe);
}
}
public void setSrc(String src)
{
this.src = src;
}
public void setDest(String dest)
{
this.dest = dest;
}
public void setLog(String log)
{
this.log = log;
}
public void setWarn(String warn)
{
this.warn = warn;
}
public void setSummary(String summary)
{
this.summary = summary;
}
// using parent because jtidy dom is bugged, cannot get parent or delete child
public static void stripDuplicateAttributes(Node node, Node parent)
{
// The output depends on the type of the node
switch (node.getNodeType())
{
case Node.DOCUMENT_NODE :
{
Document doc = ( Document ) node;
Node child = doc.getFirstChild();
while (child != null)
{
stripDuplicateAttributes(child, node);
child = child.getNextSibling();
}
break;
}
case Node.ELEMENT_NODE :
{
Element elt = ( Element ) node;
NamedNodeMap attrs = elt.getAttributes();
ArrayList nodesToRemove = new ArrayList();
int nodesToRemoveNum = 0;
for (int i = 0; i < attrs.getLength(); i++)
{
Node a = attrs.item(i);
for (int j = 0; j < attrs.getLength(); j++)
{
Node b = attrs.item(j);
// if there are two attributes with same name
if ((i != j)
&& (a.getNodeName().equals(b.getNodeName())))
{
nodesToRemove.add(b);
nodesToRemoveNum++;
}
}
}
for (int i = 0; i < nodesToRemoveNum; i++)
{
org.w3c.dom.Attr nodeToDelete =
( org.w3c.dom.Attr ) nodesToRemove.get(i);
org.w3c.dom.Element nodeToDeleteParent =
( org.w3c.dom
.Element ) node; // nodeToDelete.getParentNode();
nodeToDeleteParent.removeAttributeNode(nodeToDelete);
}
nodesToRemove.clear();
Node child = elt.getFirstChild();
while (child != null)
{
stripDuplicateAttributes(child, node);
child = child.getNextSibling();
}
break;
}
default :
// do nothing
break;
}
}
}
/*
The Krysalis Patchy Software License, Version 1.1_01
Copyright (c) 2002 Nicola Ken Barozzi. All rights reserved.
This Licence is compatible with the BSD licence as described and
approved by http://www.opensource.org/, and is based on the
Apache Software Licence Version 1.1.
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 acknowledgment:
"This product includes software developed for project
Krysalis (http://www.krysalis.org/)."
Alternately, this acknowledgment may appear in the software itself,
if and wherever such third-party acknowledgments normally appear.
4. The names "Krysalis" and "Nicola Ken Barozzi" and
"Krysalis Centipede" must not be used to endorse or promote products
derived from this software without prior written permission. For
written permission, please contact krysalis@nicolaken.org.
5. Products derived from this software may not be called "Krysalis",
"Krysalis Centipede", nor may "Krysalis" appear in their name,
without prior written permission of Nicola Ken Barozzi.
6. This software may contain voluntary contributions made by many
individuals, who decided to donate the code to this project in
respect of this licence.
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 KRYSALIS PROJECT 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.
====================================================================*/

View File

@ -0,0 +1,91 @@
/*****************************************************************************
* 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:barozzi@nicolaken.com">Nicola Ken Barozzi</a>
* @created 14 January 2002
* @version CVS $Revision$ $Date$
*/
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;
}
}

View File

@ -0,0 +1,226 @@
/*****************************************************************************
* Copyright (C) The Krysalis project. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Krysalis Patchy *
* Software License version 1.1_01, a copy of which has been included *
* at the bottom of this file. *
*****************************************************************************/
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.Writer;
import java.io.PrintWriter;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.DOMException;
import org.w3c.dom.NamedNodeMap;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.Property;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.Property;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;
/**
* Task get property values from a valid xml file.
* Example:
* <root-tag myattr="true">
* <inner-tag>Text</inner-tag>
* <2><3><4>false</4></3></2>
* </root-tag>
*
* xml.root-tag.myattr=true
* xml.root-tag.inner-tag=Text
* xml.root-tag.2.3.4=false
*
* @author <a href="mailto:barozzi@nicolaken.com">Nicola Ken Barozzi</a>
* @created 14 January 2002
*/
public class XmlPropertyTask extends org.apache.tools.ant.Task
{
private String src;
private org.w3c.dom.Document document;
/**
* Constructor.
*/
public XmlPropertyTask()
{
super();
}
/**
* Initializes the task.
*/
public void init()
{
super.init();
}
/**
* Run the task.
* @exception org.apache.tools.ant.BuildException The exception raised during task execution.
*/
public void execute()
throws org.apache.tools.ant.BuildException
{
BufferedInputStream configurationStream = null;
try
{
configurationStream =
new BufferedInputStream(new FileInputStream(src));
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setNamespaceAware(false);
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse( configurationStream );
addNodeRecursively(document.getDocumentElement(),"xml");
} catch (SAXException sxe) {
// Error generated during parsing
Exception x = sxe;
if (sxe.getException() != null)
x = sxe.getException();
throw new BuildException(x);
} catch (ParserConfigurationException pce) {
// Parser with specified options can't be built
throw new BuildException(pce);
} catch (IOException ioe) {
// I/O error
throw new BuildException(ioe);
}
finally
{
if(configurationStream!=null){
try{configurationStream.close();}catch(Exception e){}}
}
}
void addNodeRecursively(org.w3c.dom.Node node, String text) {
if (node.hasAttributes()) {
org.w3c.dom.NamedNodeMap nodeAttributes = node.getAttributes();
for (int i = 0; i < nodeAttributes.getLength(); i++) {
Node attributeNode = nodeAttributes.item(i);
String attributeName = text+"."+node.getNodeName()+"."+attributeNode.getNodeName();
String attributeValue = attributeNode.getNodeValue();
log(attributeName+":"+attributeValue, Project.MSG_VERBOSE);
project.setUserProperty(attributeName,attributeValue);
}
}
if(node.getNodeType()==Node.TEXT_NODE){
String nodeText = node.getNodeValue();
if(nodeText.trim().length()!=0)
{
log(text+":"+nodeText, Project.MSG_VERBOSE);
project.setUserProperty(text,nodeText);
}
}
if (node.hasChildNodes()) {
text+=("."+node.getNodeName());
org.w3c.dom.NodeList nodeChildren = node.getChildNodes();
for (int i = 0; i < nodeChildren.getLength(); i++) {
addNodeRecursively(nodeChildren.item(i), text);
}
}
}
public void setFile(String src)
{
this.src = src;
}
}
/*
The Krysalis Patchy Software License, Version 1.1_01
Copyright (c) 2002 Nicola Ken Barozzi. All rights reserved.
This Licence is compatible with the BSD licence as described and
approved by http://www.opensource.org/, and is based on the
Apache Software Licence Version 1.1.
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 acknowledgment:
"This product includes software developed for project
Krysalis (http://www.krysalis.org/)."
Alternately, this acknowledgment may appear in the software itself,
if and wherever such third-party acknowledgments normally appear.
4. The names "Krysalis" and "Nicola Ken Barozzi" and
"Krysalis Centipede" must not be used to endorse or promote products
derived from this software without prior written permission. For
written permission, please contact krysalis@nicolaken.org.
5. Products derived from this software may not be called "Krysalis",
"Krysalis Centipede", nor may "Krysalis" appear in their name,
without prior written permission of Nicola Ken Barozzi.
6. This software may contain voluntary contributions made by many
individuals, who decided to donate the code to this project in
respect of this licence.
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 KRYSALIS PROJECT 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.
====================================================================*/

View File

@ -0,0 +1,18 @@
- build distributions
- sign distributions
- Generate announcements and HEADER.html
- upload distributions to correct dir
- tag CVS
- generate www pages and upload
- bump release ID
- send announcements to announcement@apache.org, announcements@xml.apache.org, announcements@jakarta.apache.org
- news to newsgroups: comp.lang.java.softwaretools
- post stories on
*) jakarta news page
*) theserverside.com
*) freshmeat.net
*) www.javaworld.com
*) www.javalobby.com
*) www.jguru.com
*) www.slashdot.org
(and follow them up)

View File

@ -0,0 +1,89 @@
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:template match="changes">
<xsl:variable name="version" select="@version"/>
<xsl:apply-templates select="document(@file,/)/changes/release[attribute::version=string($version)]"/>
</xsl:template>
<xsl:template match="announcement">
<style>
body { background-color: #FFFFFF }
p { font-size: 10pt; font-family: Helvetica, Arial, sans-serif }
li,ul { font-size: 10pt; font-family: Helvetica, Arial, sans-serif }
div { font-size: 10pt; font-family: Helvetica, Arial, sans-serif; font-style:italic }
h1 { font-size: 14pt; font-family: Helvetica, Arial, sans-serif; font-weight: bold }
h2 { font-size: 12pt; font-family: Helvetica, Arial, sans-serif; font-weight: bold }
h3 { font-size: 10pt; font-family: Helvetica, Arial, sans-serif; font-weight: bold }
A:link { color: #0000A0 } /* unvisited link */
A:visited { color: #A00000 } /* visited links */
A:active { color: #00A000 } /* active links */
</style>
<a name="sig"><h2>PGP Signatures</h2></a>
<p>Many of the distribution kits have been digitally signed (using
PGP). If so, there will be an accompanying
<samp><em>distribution</em>.asc</samp> file in the same directory as
the distribution. The PGP keys can be found in the distribution
directory at &lt;<a href="http://jakarta.apache.org/builds/jakarta-avalon/release/KEYS">
<samp>http://jakarta.apache.org/builds/jakarta-avalon/release/KEYS</samp></a>&gt;.</p>
<xsl:variable name="filename"><xsl:value-of
select="project/downloads/@name"/>-<xsl:value-of
select="project/changes/@version"/>-bin.tar.gz</xsl:variable>
<pre>Always test available signatures, <i>e.g.</i>,
&gt; pgpk -a KEYS
&gt; pgpv <xsl:value-of select="$filename"/>.asc
<i>or</i>,
&gt; pgp -ka KEYS
&gt; pgp <xsl:value-of select="$filename"/>.asc
<i>or</i>,
&gt; gpg --import KEYS
&gt; gpg --verify <xsl:value-of select="$filename"/>.asc
</pre>
<xsl:for-each select="project">
<xsl:if test="downloads">
<h2>About <xsl:value-of select="title"/></h2>
<xsl:apply-templates select="."/>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template match="project">
<p>For more information about <xsl:value-of select="title"/>, please go to
<a><xsl:attribute name="href"><xsl:value-of select="@site"/></xsl:attribute>
<xsl:value-of select="@site"/></a>.</p>
<!-- print out ChangeLog if present -->
<xsl:if test="changes">
<h3>ChangeLog for <xsl:value-of select="title"/></h3>
<xsl:apply-templates select="changes"/>
</xsl:if>
</xsl:template>
<xsl:template match="ulink">
<a href="{@uri}"><xsl:value-of select="."/></a>
</xsl:template>
<xsl:template match="release">
<ul>
<xsl:for-each select="action">
<li>
<xsl:value-of select="normalize-space(.)"/>
<xsl:if test="@dev">
<xsl:text>[</xsl:text><xsl:value-of select="@dev"/><xsl:text>]</xsl:text>
</xsl:if>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,174 @@
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="no"/>
<xsl:template match="changes">
<xsl:variable name="version" select="@version"/>
<xsl:apply-templates select="document(@file,/)/changes/release[attribute::version=string($version)]"/>
</xsl:template>
<xsl:template name="print-title">
<xsl:param name="title"/>
<xsl:variable name="text" select="normalize-space($title)"/>
<xsl:value-of select="$text"/><xsl:text>
</xsl:text>
<xsl:call-template name="line">
<xsl:with-param name="len" select="string-length($text)"/>
</xsl:call-template>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="announcement">
<text>
<xsl:call-template name="print-title">
<xsl:with-param name="title"><xsl:value-of select="title"/> Released</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="word-wrap">
<xsl:with-param name="text" select="normalize-space(abstract)"/>
<xsl:with-param name="count" select="0"/>
</xsl:call-template>
<xsl:text>
</xsl:text>
<xsl:for-each select="project">
<xsl:call-template name="print-title">
<xsl:with-param name="title">About <xsl:value-of select="title"/></xsl:with-param>
</xsl:call-template>
<xsl:apply-templates select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</text>
</xsl:template>
<xsl:template match="project">
<xsl:choose>
<xsl:when test="description/para">
<xsl:for-each select="description/para">
<xsl:call-template name="word-wrap">
<xsl:with-param name="text">
<xsl:apply-templates select="."/>
</xsl:with-param>
<xsl:with-param name="count" select="0"/>
</xsl:call-template>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="word-wrap">
<xsl:with-param name="text">
<xsl:apply-templates select="description"/>
</xsl:with-param>
<xsl:with-param name="count" select="0"/>
</xsl:call-template>
<xsl:text>
</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text>
For more information about </xsl:text>
<xsl:value-of select="title"/>
<xsl:text>, please go to
</xsl:text>
<xsl:value-of select="@site"/>
<!-- print out ChangeLog if present -->
<xsl:if test="changes">
<xsl:text>
ChangeLog for </xsl:text>
<xsl:value-of select="title"/>
<xsl:text>
</xsl:text>
<xsl:apply-templates select="changes"/>
</xsl:if>
<!-- print out Downloads if present -->
<xsl:if test="downloads">
<xsl:text>
Downloads for </xsl:text><xsl:value-of select="title"/> available at
<xsl:value-of select="downloads/@base"/>/latest
</xsl:if>
</xsl:template>
<xsl:template match="para">
<xsl:apply-templates/>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="ulink">
<xsl:value-of select="."/>
<xsl:text> (</xsl:text>
<xsl:value-of select="@uri"/>
<xsl:text>)</xsl:text>
</xsl:template>
<xsl:template match="release">
<xsl:for-each select="action">
<xsl:text>*) </xsl:text>
<xsl:call-template name="word-wrap">
<xsl:with-param name="text" select="."/>
<xsl:with-param name="count" select="0"/>
</xsl:call-template><xsl:text> </xsl:text>
<xsl:if test="@dev">
<xsl:text>[</xsl:text><xsl:value-of select="@dev"/><xsl:text>]</xsl:text>
</xsl:if>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
<xsl:template name="line">
<xsl:param name="len"/>
<xsl:if test="number($len) > 0">
<xsl:text>-</xsl:text>
<xsl:call-template name="line">
<xsl:with-param name="len" select="number($len)-1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="word-wrap">
<xsl:param name="text"/>
<xsl:param name="count"/>
<xsl:param name="mytext" select="normalize-space($text)"/>
<xsl:choose>
<xsl:when test="$count > 40">
<xsl:text>
</xsl:text>
<xsl:call-template name="word-wrap">
<xsl:with-param name="text" select="$mytext"/>
<xsl:with-param name="count" select="0"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="not(contains($mytext,' '))">
<xsl:text> </xsl:text>
<xsl:value-of select="$mytext"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="word" select="substring-before($mytext,' ')"/>
<xsl:variable name="remainder" select="substring-after($mytext,' ')"/>
<xsl:text> </xsl:text>
<xsl:value-of select="$word"/>
<xsl:if test="string-length($word) > 0">
<xsl:call-template name="word-wrap">
<xsl:with-param name="text" select="$remainder"/>
<xsl:with-param name="count" select="$count + string-length($word)"/>
</xsl:call-template>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,36 @@
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:html="http://www.w3.org/1999/xhtml">
<!-- @author <a href="mailto:barozzi@nicolaken.com">Nicola Ken Barozzi</a> -->
<xsl:template match="html:body">
<patch-queue>
<xsl:apply-templates/>
</patch-queue>
</xsl:template>
<xsl:template match="html:tr">
<xsl:if test="contains(@class,'th')">
<bug>
<xsl:attribute name="id"><xsl:value-of select="html:td[1]/html:a"/></xsl:attribute>
<xsl:attribute name="url">http://nagoya.apache.org/bugzilla/<xsl:value-of select="html:td[1]/html:a/@href"/></xsl:attribute>
<xsl:attribute name="severity"><xsl:value-of select="html:td[2]"/></xsl:attribute>
<xsl:attribute name="priority"><xsl:value-of select="html:td[3]"/></xsl:attribute>
<xsl:attribute name="platform"><xsl:value-of select="html:td[4]"/></xsl:attribute>
<xsl:attribute name="owner"><xsl:value-of select="html:td[5]"/></xsl:attribute>
<xsl:attribute name="status"><xsl:value-of select="html:td[6]"/></xsl:attribute>
<xsl:attribute name="resolution"><xsl:value-of select="html:td[7]"/></xsl:attribute>
<xsl:attribute name="summary"><xsl:value-of select="html:td[8]"/></xsl:attribute>
</bug>
</xsl:if>
</xsl:template>
<xsl:template match="@*|*|text()|processing-instruction()">
<xsl:apply-templates select="@*|*|text()|processing-instruction()"/>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,95 @@
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:param name="module">module</xsl:param>
<xsl:param name="cvsweb">cvsweb</xsl:param>
<xsl:template match="/">
<html>
<head>
<link rel="stylesheet" type="text/css" href="../../../../html/javadoc.css" title="Style"></link>
</head>
<body bgcolor="white">
<h1>Change Log</h1>
<xsl:apply-templates select="changelog/entry">
<xsl:sort order="descending" select="date" />
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match="entry">
<h2>
<xsl:call-template name="escape-return">
<xsl:with-param name="string"><xsl:value-of select="msg"/></xsl:with-param>
</xsl:call-template>
</h2>
<p>
<b>
<xsl:apply-templates select="date"/>
by <xsl:value-of disable-output-escaping="yes" select="author"/>
</b>
</p>
<p>
<xsl:apply-templates select="file"/>
</p>
<hr/>
</xsl:template>
<xsl:template match="date">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="weekday">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="time">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="file">
<br/><a>
<xsl:choose>
<xsl:when test="string-length(prevrevision) = 0 ">
<xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&amp;content-type=text/x-cvsweb-markup</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&amp;r2=<xsl:value-of select="prevrevision"/>&amp;diff_format=h</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="name" />
</a>
</xsl:template>
<xsl:template name="escape-return">
<xsl:param name="string"/>
<!-- must be a better way to define a carrige return -->
<xsl:variable name="return"><xsl:text>
</xsl:text>
</xsl:variable>
<xsl:choose>
<xsl:when test="contains($string, $return)">
<xsl:value-of select="substring-before($string, $return)"/><br/>
<xsl:call-template name="escape-return">
<xsl:with-param name="string">
<xsl:value-of select="substring-after($string, $return)"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,70 @@
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- @author <a href="mailto:barozzi@nicolaken.com">Nicola Ken Barozzi</a> -->
<xsl:output method="text"/>
<xsl:template match="/">-----------------------------------------------------------
This mail is generated automatically using
Jakarta Ant. Contents are automatically
downloaded from Apache's Bugzilla.
-----------------------------------------------------------
Please do not reply to this mail.
-----------------------------------------------------------
***********************************************************
__ __ __ __ __ __
(___ (__) (___ (__) (__) | )
__ __ _|_ __ |__ ___ __
|__) (__( |_, (___ | ) (__/_ __)
|
***********************************************************
***************** patches in queue: <xsl:value-of select="count(patch-queue/bug)"/> ********************
***********************************************************
<xsl:for-each select="patch-queue/bug">
-----------------------------------------------------------
<xsl:value-of select="@id"/>:<xsl:value-of select="@summary"/>
-----------------------------------------------------------
<xsl:value-of select="@url"/>
REVIEWER: <xsl:value-of select="@owner"/>
RESOLUTION: <xsl:value-of select="@resolution"/>
STATUS: <xsl:value-of select="@status"/>
</xsl:for-each>
*************************that's it!************************
------------------------patch HOWTO------------------------
Send patches to http://nagoya.apache.org/bugzilla/
specifying [PATCH] in the summary.
Bugzilla sends a mail automatically to this list.
Reviewers will mark it FIXED there when applied.
Patches not sent to Bugzilla will not be reviewed.
-----------------------------------------------------------
This file is generated and updated automatically at least
once a week, and the data is taken from Bugzilla.
If you don't find the patch you submitted to bugzilla
after one week, please notify cocoon-dev@xml.apache.org
for assistance.
-----------------------------------------------------------
There is usually a HEAD branch and a previous-version
branch that are maintained. Where will the patch go?
1. If it is a bug fix it should go to both branches
2. If something is totally new it goes into HEAD scratchpad.
3. Something in between, but does not break backward
compatibility _may_ go into both (and may not)
4. For everything else, a vote is required so
first it may go into HEAD, and then be VOTEd in order
to sync this into branch.
Please note that structural changes have to be VOTEd first.
</xsl:template>
<xsl:template match="@*|*|text()|processing-instruction()">
<xsl:apply-templates select="@*|*|text()|processing-instruction()"/>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- @author <a href="mailto:barozzi@nicolaken.com">Nicola Ken Barozzi</a> -->
<xsl:template match="/">
<xsl:text disable-output-escaping="yes">
<![CDATA[
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.0//EN"
"dtd/document-v10.dtd">
]]>
</xsl:text>
<document>
<header>
<title>Patch Queue</title>
<authors>
<person name="Robin Green" email="greenrd@hotmail.com"/>
<person name="Nicola Ken Barozzi" email="barozzi@nicolaken.com"/>
</authors>
</header>
<body>
<s1 title="Introduction">
<p>
This is an <strong>informal</strong> list - in chronological order -
of some of the noteworthy patches that have been posted
to the <link href="mailto:cocoon-dev@xml.apache.org">cocoon-dev</link> mailing list.
These patches are not (yet) part of the Apache Cocoon project, but need reviewing for possible
inclusion. This system was instituted because, due to the large volume of mail and
the lack of time of the committers, some patches tended to get forgotten about. This
queue does not guarantee that any patch will be reviewed within a reasonable time frame,
but it does at least make them easier to find!
</p>
<p><strong>Reviewers wanted!</strong> - If you have time to review and/or test these patches,
we would be grateful for your time. Please post comments to the cocoon-dev mailing lists.
</p>
<p>
Before submitting a patch, please read the page on <connect href="contrib.xml">Third-Party
Contributions</connect>. The preferred submission method for patches is:
</p>
<ul>
<li>Post to cocoon-dev@xml.apache.org</li>
<li>Describe the patch, the reason for it and (if necessary) why this is important.</li>
<li>Generate the patch in <code>diff -u</code> format from CVS</li>
<li>Also generate a documentation patch or new file, if this is something that should be documented.
</li>
<li>Post as an attachment rather than inline (unless it is trivially small).</li>
</ul>
<p>Following the above guidelines will facilitate your patch being reviewed
and applied efficiently.</p>
</s1>
<s1 title="Patch Queue">
<p><strong> [Under Construction] </strong> Archive links will be added later.
<strong>Please do not bother the patch submitters/authors</strong> without first reading the
relevant post(s) in the <connect href="mail-archives.xml">mailing list archives.</connect>
</p>
<p>Vapourware will not be listed.</p>
<table>
<tr>
<th>id<!--and Link--></th>
<th>Summary</th>
<th>Reviewer</th>
<th>Resolution</th>
<th>Status</th>
</tr>
<xsl:for-each select="patch-queue/bug">
<tr>
<th>
<connect>
<xsl:attribute name="href"><xsl:value-of select="@url"/></xsl:attribute>
<xsl:value-of select="@id"/>
</connect>
</th>
<th><xsl:value-of select="@summary"/></th>
<th><xsl:value-of select="@owner"/></th>
<th><xsl:value-of select="@resolution"/></th>
<th><xsl:value-of select="@status"/></th>
</tr>
</xsl:for-each>
</table>
<p>See also additional list of patches to be added in <connect href="todo.xml">To Do</connect>.
</p>
</s1>
</body>
</document>
</xsl:template>
<xsl:template match="@*|*|text()|processing-instruction()">
<xsl:apply-templates select="@*|*|text()|processing-instruction()"/>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,130 @@
<!-- =================================================================== -->
<!-- Prepares the build directory -->
<!-- =================================================================== -->
<target name="prepare" depends="init">
<mkdir dir="${build.dir}"/>
</target>
<!-- =================================================================== -->
<!-- Prepares the source code -->
<!-- =================================================================== -->
<target name="prepare-src" depends="prepare">
<mkdir dir="${build.src}"/>
<mkdir dir="${build.dest}"/>
<copy todir="${build.src}" filtering="on">
<fileset dir="${java.dir}"/>
</copy>
<mkdir dir="${build.scratchpad.src}"/>
<mkdir dir="${build.scratchpad.dest}"/>
<copy todir="${build.scratchpad.src}" filtering="on">
<fileset dir="${scratchpad.src}"/>
</copy>
<mkdir dir="${build.contrib.src}"/>
<mkdir dir="${build.contrib.dest}"/>
<copy todir="${build.contrib.src}" filtering="on">
<fileset dir="${contrib.src}"/>
</copy>
</target>
<!-- =================================================================== -->
<!-- Compiles the source directory -->
<!-- =================================================================== -->
<target name="compile" depends="prepare-src"
description="Compiles the source code">
<copy todir="${build.dest}">
<fileset dir="${build.src}">
<include name="**"/>
</fileset>
</copy>
<echo message="Compiling with Java ${ant.java.version}, debug ${debug}, optimize ${optimize}, deprecation ${deprecation}"/>
<javac srcdir="${build.src}"
destdir="${build.dest}"
debug="${debug}"
optimize="${optimize}"
deprecation="${deprecation}"
target="${target.vm}"
nowarn="${nowarn}">
<classpath refid="classpath"/>
</javac>
<copy todir="${build.scratchpad.dest}">
<fileset dir="${build.scratchpad.src}">
<include name="**"/>
</fileset>
</copy>
<javac srcdir="${build.scratchpad.src}"
destdir="${build.scratchpad.dest}"
debug="${debug}"
optimize="${optimize}"
deprecation="${deprecation}"
target="${target.vm}">
<classpath refid="scratchpad.classpath"/>
</javac>
<copy todir="${build.contrib.dest}">
<fileset dir="${build.contrib.src}">
<include name="**"/>
</fileset>
</copy>
<javac srcdir="${build.contrib.src}"
destdir="${build.contrib.dest}"
debug="${debug}"
optimize="${optimize}"
deprecation="${deprecation}"
target="${target.vm}">
<classpath refid="contrib.classpath"/>
</javac>
</target>
<!-- =================================================================== -->
<!-- Creates the jar file -->
<!-- =================================================================== -->
<target name="all" depends="package" description="Default target"/>
<target name="package" depends="compile" description="Generates the jar package">
<jar jarfile="${build.dir}/${name}.jar" manifest="${build.src}/Manifest.mf">
<fileset dir="${build.dest}">
<include name="**"/>
<include name="META-INF/**"/>
</fileset>
</jar>
<jar jarfile="${build.dir}/${scratchpad.name}.jar">
<fileset dir="${build.scratchpad.dest}">
<include name="**"/>
</fileset>
</jar>
<jar jarfile="${build.dir}/${contrib.name}.jar">
<fileset dir="${build.contrib.dest}">
<include name="**"/>
</fileset>
</jar>
</target>
<!-- =================================================================== -->
<!-- Copies the tools.jar to javac.jar in web-inf/lib -->
<!-- =================================================================== -->
<target name="prepare-tools-lib" depends="package" if="tools.jar.present">
<!-- NOTE: java.home is normally set by the JVM to the /jre directory -->
<copy file="${tools.jar}" tofile="${build.war}/WEB-INF/lib/javac.jar"/>
</target>
<!-- =================================================================== -->
<!-- Clean targets -->
<!-- =================================================================== -->
<target name="clean" depends="init" description="* Cleans the build directories">
<delete dir="${build.dir}"/>
</target>
<target name="cleandocs" depends="init" description="* Cleans the build docs directories">
<delete dir="${build.docs}"/>
</target>

View File

@ -0,0 +1,224 @@
<!-- =================================================================== -->
<!-- Creates the source distribution -->
<!-- =================================================================== -->
<target name="dist-src" depends="docs, javadocs, test"
description="Prepares the source distribution">
<!-- Simply copy all and add the html docs -->
<mkdir dir="${dist.root}"/>
<mkdir dir="${dist.src.dir}"/>
<mkdir dir="${dist.src.dir}/lib"/>
<mkdir dir="${dist.src.dir}/src"/>
<mkdir dir="${dist.src.dir}/src/java"/>
<mkdir dir="${dist.src.dir}/src/documentation"/>
<mkdir dir="${dist.src.dir}/src/resources"/>
<mkdir dir="${dist.src.dir}/src/scratchpad"/>
<mkdir dir="${dist.src.dir}/src/testcases"/>
<mkdir dir="${dist.src.dir}/src/contrib"/>
<mkdir dir="${dist.src.dir}/src/targets"/>
<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}"/>
</copy>
<copy todir="${dist.src.dir}/lib">
<fileset dir="${lib.dir}"/>
</copy>
<copy todir="${dist.src.dir}/src/resources" filtering="on">
<fileset dir="${resource.dir}">
<exclude name="**/*.gif"/>
<exclude name="**/*.jpg"/>
<exclude name="**/*.png"/>
</fileset>
</copy>
<copy todir="${dist.src.dir}/src/resources" filtering="off">
<fileset dir="${resource.dir}">
<include name="**/*.gif"/>
<include name="**/*.jpg"/>
<include name="**/*.png"/>
</fileset>
</copy>
<copy todir="${dist.src.dir}/src/java" filtering="on">
<fileset dir="${java.dir}"/>
</copy>
<copy todir="${dist.src.dir}/src/scratchpad" filtering="off">
<fileset dir="${scratchpad.dir}"/>
</copy>
<copy todir="${dist.src.dir}/src/contrib" filtering="off">
<fileset dir="${contrib.dir}"/>
</copy>
<copy todir="${dist.src.dir}/src/targets" filtering="off">
<fileset dir="./src/targets"/>
</copy>
<copy todir="${dist.src.dir}/src/testcases" filtering="off">
<fileset dir="${test.dir}"/>
</copy>
<copy todir="${dist.src.dir}/docs">
<fileset dir="${build.docs}"/>
</copy>
<copy todir="${dist.src.dir}/docs/apidocs">
<fileset dir="${build.javadocs}"/>
</copy>
<copy todir="${dist.src.dir}">
<fileset dir="${docs.dir}">
<include name="changes.xml, todo.xml"/>
</fileset>
</copy>
<copy todir="${dist.src.dir}" filtering="on">
<fileset dir=".">
<include name="README.txt"/>
<include name="legal/*"/>
<include name="*.bat"/>
<include name="*.sh"/>
<include name="*.xml"/>
</fileset>
</copy>
<chmod perm="+x" file="${dist.src.dir}/build.sh"/>
<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"/>
</target>
<!-- =================================================================== -->
<!-- Packages the source distribution as .zip -->
<!-- =================================================================== -->
<target name="dist-src-zip" depends="dist-src"
description="Generates the source distribution as a .zip file">
<zip zipfile="${dist.target}/${dist.name}-src.zip"
basedir="${dist.root}/source"/>
</target>
<!-- =================================================================== -->
<!-- Packages the source distribution with .tar.gzip -->
<!-- =================================================================== -->
<target name="dist-src-tgz" depends="dist-src"
description="Generates the source distribution as a .tar.gz file">
<tar tarfile="${dist.target}/${dist.name}-src.tar"
basedir="${dist.root}/source"
longfile="gnu"/>
<gzip zipfile="${dist.target}/${dist.name}-src.tar.gz"
src="${dist.target}/${dist.name}-src.tar"/>
</target>
<!-- =================================================================== -->
<!-- Creates the binary distribution -->
<!-- =================================================================== -->
<target name="dist-bin" depends="package, docs, javadocs, test"
description="Prepares the binary distribution">
<!-- Copy the html docs -->
<mkdir dir="${dist.root}"/>
<mkdir dir="${dist.bin.dir}"/>
<mkdir dir="${dist.bin.dir}/lib"/>
<mkdir dir="${dist.bin.dir}/docs"/>
<mkdir dir="${dist.bin.dir}/docs/apidocs"/>
<copy file="${build.dir}/${name}.jar" tofile="${dist.bin.dir}/lib/${name}-${version}.jar"/>
<copy todir="${dist.bin.dir}/docs">
<fileset dir="${build.docs}"/>
</copy>
<copy todir="${dist.bin.dir}/docs/apidocs">
<fileset dir="${build.javadocs}"/>
</copy>
<copy todir="${dist.bin.dir}">
<fileset dir="${docs.dir}">
<include name="changes.xml, todo.xml"/>
</fileset>
</copy>
<copy todir="${dist.bin.dir}" filtering="on">
<fileset dir=".">
<include name="README.txt"/>
<include name="legal/*"/>
</fileset>
</copy>
</target>
<!-- =================================================================== -->
<!-- Packages the binary distribution as .zip -->
<!-- =================================================================== -->
<target name="dist-bin-zip" depends="dist-bin"
description="Generates the binary distribution as a .zip file">
<zip zipfile="${dist.target}/${dist.name}-bin.zip"
basedir="${dist.root}/bin"/>
</target>
<!-- =================================================================== -->
<!-- Packages the binary distribution with .tar.gzip -->
<!-- =================================================================== -->
<target name="dist-bin-tgz" depends="dist-bin"
description="Generates the binary distribution as a .tar.gz file">
<tar tarfile="${dist.target}/${dist.name}-bin.tar"
basedir="${dist.root}/bin"
longfile="gnu"/>
<gzip zipfile="${dist.target}/${dist.name}-bin.tar.gz"
src="${dist.target}/${dist.name}-bin.tar"/>
</target>
<!-- =================================================================== -->
<!-- Clean dist -->
<!-- =================================================================== -->
<target name="distclean" depends="clean" description="* Cleans everything to the original state">
<delete dir="${build.root}"/>
<delete file="${dist.target}/${Name}-${version}.tar.gz"/>
<delete file="${dist.target}/${Name}-${version}.tar"/>
<delete file="${dist.target}/${Name}-${version}.zip"/>
<delete file="${dist.target}/${Name}-${version}-src.tar.gz"/>
<delete file="${dist.target}/${Name}-${version}-src.tar"/>
<delete file="${dist.target}/${Name}-${version}-src.zip"/>
<delete file="${dist.target}/${Name}-${version}-bin.tar.gz"/>
<delete file="${dist.target}/${Name}-${version}-bin.tar"/>
<delete file="${dist.target}/${Name}-${version}-bin.zip"/>
<delete dir="${dist.root}"/>
</target>
<!-- =================================================================== -->
<!-- Build all distributions -->
<!-- =================================================================== -->
<target name="dist"
depends="dist-info, dist-bin-tgz, dist-bin-zip, dist-src-tgz, dist-src-zip"
description="* Generates all distributions (source/binary)">
</target>
<!-- =================================================================== -->
<!-- Build all distributions -->
<!-- =================================================================== -->
<target name="dist-info" depends="init">
<echo>**********************************************</echo>
<echo>*</echo>
<echo>* Build all distributions:</echo>
<echo>* - source distribution for windows/unix.</echo>
<echo>* - binary distribution for windows/unix.</echo>
<echo>*</echo>
<echo>* This may take a while...</echo>
<echo>*</echo>
<echo>***********************************************</echo>
<echo/>
</target>

View File

@ -0,0 +1,183 @@
<!-- =================================================================== -->
<!-- Prepares the docs -->
<!-- =================================================================== -->
<target name="prepare-docs" depends="init">
<mkdir dir="${build.context}"/>
<mkdir dir="${build.context}/images"/>
<mkdir dir="${build.docs}"/>
<mkdir dir="${build.dir}/work"/>
<!-- make filtered copy of XML docs -->
<copy todir="${build.context}" filtering="on">
<fileset dir="${context.dir}">
<exclude name="images/**"/>
</fileset>
</copy>
<!-- Copy images -->
<copy todir="${build.context}/images" filtering="off">
<fileset dir="${context.dir}/images"/>
</copy>
<!-- Copy entity catalog and entities -->
<copy todir="${build.context}/resources/entities" filtering="on">
<fileset dir="${resource.dir}/entities"/>
</copy>
<mkdir dir="${build.context}/WEB-INF/classes"/>
<move todir="${build.context}/WEB-INF/classes">
<fileset dir="${build.context}/resources/entities">
<include name="CatalogManager.properties"/>
</fileset>
</move>
<!-- Copy Cocoon configuration (cocoon.xconf) -->
<copy todir="${build.context}" filtering="off">
<fileset dir="${tools.dir}/cocoon/conf"/>
</copy>
</target>
<!-- =================================================================== -->
<!-- Set a variable if the generated docs are already up-to-date. -->
<!-- =================================================================== -->
<target name="docs_check" depends="init">
<uptodate property="docs.notrequired" targetfile="${build.docs}/index.html" >
<srcfiles dir="." includes="project-info.xml"/>
<srcfiles dir="${context.dir}/xdocs" includes="**/*.xml"/>
</uptodate>
</target>
<!-- =================================================================== -->
<!-- If generated docs is already up-to-date, print a message saying so. -->
<!-- =================================================================== -->
<target name="docs_done" if="docs.notrequired">
<echo message="-------------------------------------------------------------"/>
<echo message="Not rebuilding docs, as they are up-to-date:"/>
<echo message=" ${build.docs}/index.html is more recent than"/>
<echo message=" project-info.xml and ${context.dir}/xdocs/*.xml"/>
<echo message="-------------------------------------------------------------"/>
</target>
<!-- =================================================================== -->
<!-- If generated docs is already up-to-date, print a message saying so. -->
<!-- =================================================================== -->
<target name="making-docs">
<echo message="-------------------------------------------------------------"/>
<echo message=" Building docs, please stand by ..."/>
</target>
<!-- =================================================================== -->
<!-- The documentation system -->
<!-- =================================================================== -->
<target name="docs"
depends="package, prepare-docs, docs_check, making-docs, docs_done"
unless="docs.notrequired"
description="* Generates the documentation">
<java classname="org.apache.cocoon.Main" fork="true" dir="${build.context}" failonerror="true">
<arg value="-c."/>
<arg value="-d../docs"/>
<arg value="-w../work"/>
<arg value="-l../work/cocoon.log"/>
<arg value="-uWARN"/>
<arg value="index.html"/>
<classpath>
<path refid="classpath"/>
<fileset dir="${build.dir}">
<include name="*.jar"/>
</fileset>
<fileset dir="${tools.dir}">
<include name="*/lib/*.jar"/>
</fileset>
<pathelement location="${tools.jar}"/>
<pathelement location="${build.context}/WEB-INF/classes"/>
</classpath>
</java>
<echo message=" ...docs generated succesfully in ./build/docs ."/>
<echo message="-------------------------------------------------------------"/>
</target>
<!-- =================================================================== -->
<!-- Create the announcements -->
<!-- =================================================================== -->
<target name="announcement" depends="prepare" description="* Creates the announcement for new releases">
<copy file="${project-info}" tofile="${build.project-info}" filtering="on"/>
<style basedir="./" destdir="./" style="${projectinfo2announcement}"
includes="project-info.xml" extension=".txt"/>
</target>
<!-- =================================================================== -->
<!-- Create the text version of projectinfo -->
<!-- =================================================================== -->
<target name="projectinfo" depends="prepare" description="* Creates the text version of projectinfo">
<copy file="${project-info}" tofile="${build.project-info}" filtering="on"/>
<style basedir="./" destdir="./" style="${project-info2txt}"
includes="project-info.xml" extension=".txt"/>
</target>
<!-- =================================================================== -->
<!-- Creates the web site -->
<!-- =================================================================== -->
<target name="site" depends="docs, javadocs"
description="Generates the web site (for site maintainers only)">
<mkdir dir="${site}"/>
<copy todir="${site}" filtering="off">
<fileset dir="${build.docs}">
</fileset>
</copy>
<copy todir="${site}/apidocs" filtering="off">
<fileset dir="${build.javadocs}"/>
</copy>
</target>
<!-- =================================================================== -->
<!-- Set a variable if javadoc is already up-to-date. -->
<!-- =================================================================== -->
<target name="javadocs_check">
<uptodate property="javadocs.notrequired" targetfile="${build.javadocs}/packages.html" >
<srcfiles dir= "${build.src}" includes="**/*.java"/>
</uptodate>
</target>
<!-- =================================================================== -->
<!-- If javadoc is already up-to-date, print a message saying so. -->
<!-- =================================================================== -->
<target name="javadocs_done" if="javadocs.notrequired">
<echo message="-------------------------------------------------------------"/>
<echo message="Not rebuilding Javadocs, as they are up-to-date:"/>
<echo message=" ${build.javadocs}/packages.html is more recent than"/>
<echo message=" ${build.src}/**/*.java"/>
<echo message="-------------------------------------------------------------"/>
</target>
<!-- =================================================================== -->
<!-- Creates the API documentation -->
<!-- =================================================================== -->
<target name="javadocs" depends="prepare-src, javadocs_check, javadocs_done"
unless="javadocs.notrequired"
description="* Generates the API documentation">
<mkdir dir="${build.javadocs}"/>
<javadoc packagenames="${packages}"
sourcepath="${build.src}"
destdir="${build.javadocs}"
author="true"
version="true"
use="false"
noindex="true"
windowtitle="${Name} API"
doctitle="${Name}"
bottom="Copyright &#169; ${year} ${fullname} project. All Rights Reserved."
stylesheetfile="${resource.dir}/javadoc.css">
<classpath refid="classpath"/>
</javadoc>
</target>

View File

@ -0,0 +1,144 @@
<!-- =================================================================== -->
<!-- Initialization target -->
<!-- =================================================================== -->
<target name="init">
<tstamp/>
<echo message="--------------------------------------------------------------"/>
<echo message="Setting up customized ant tasks..."/>
<!-- set up tools and compiler properties -->
<property name="debug" value="on"/>
<property name="optimize" value="off"/>
<property name="deprecation" value="on"/>
<property name="nowarn" value="off"/>
<property name="build.compiler" value="classic"/>
<property name="target.vm" value="1.2"/>
<property name="tools.dir" value="./tools"/>
<property name="tools.ant.dir" value="${tools.dir}/ant"/>
<property name="tools.ant.lib" value="${tools.ant.dir}/lib"/>
<property name="tools.anttasks.dir" value="${tools.dir}/tmp/anttasks"/>
<property name="centipede.dir" value="${tools.dir}/centipede"/>
<property name="centipede.lib.dir" value="${centipede.dir}/lib"/>
<property name="cocoon.dir" value="${tools.dir}/cocoon"/>
<property name="cocoon.lib.dir" value="${cocoon.dir}/lib"/>
<!-- compile the ant tasks -->
<mkdir dir="${tools.anttasks.dir}"/>
<javac srcdir="${tools.dir}/centipede/src/java"
destdir="${tools.anttasks.dir}"
debug="yes"
optimize="no"
deprecation="no"
target="${target.vm}">
<classpath refid="centipede.classpath"/>
</javac>
<!-- define generally used centipede ant tasks -->
<taskdef name="user-input" classname="UserInputTask" classpath="${tools.anttasks.dir}"/>
<taskdef name="xml-property" classname="XmlPropertyTask" classpath="${tools.anttasks.dir}"/>
<taskdef name="jtidy" classname="JTidyTask" classpath="${tools.anttasks.dir}"/>
<taskdef name="class-available" classname="ClassAvailableTask" classpath="${tools.anttasks.dir}"/>
<taskdef name="compress-html" classname="IZPressHtmlCompressTask" classpath="${tools.anttasks.dir}"/>
<echo message="... done."/>
<!--
Load project information from project-info.xml
-->
<property name="project-info" value="./project-info.xml"/>
<xml-property file="${project-info}"/>
<!--
Project information
-->
<property name="fullname" value="${xml.project.name}"/>
<property name="name" value="${xml.project.info.module}"/>
<property name="Name" value="${xml.project.name}"/>
<property name="packages" value="${xml.project.info.packages}"/>
<property name="short.version" value="${xml.project.info.version}"/>
<property name="version.tag" value="${xml.project.info.tag}"/>
<property name="version" value="${short.version}-${version.tag}"/>
<property name="year" value="${xml.project.info.year}"/>
<echo message="--------------------------------------------------------------"/>
<echo message=" ${fullname} [${year}] "/>
<echo message="--------------------------------------------------------------"/>
<echo message="Building with ${ant.version}"/>
<echo message="using build file ${ant.file}"/>
<echo message="--------------------------------------------------------------"/>
<property name="src.dir" value="./src"/>
<property name="java.dir" value="${src.dir}/java"/>
<property name="test.dir" value="${src.dir}/testcases"/>
<property name="test.specific" value=""/>
<property name="lib.dir" value="./lib"/>
<property name="bin.dir" value="./bin"/>
<property name="docs.dir" value="${src.dir}/documentation/xdocs"/>
<property name="images.dir" value="${src.dir}/documentation/images"/>
<property name="resource.dir" value="${src.dir}/resources"/>
<property name="context.dir" value="${src.dir}/documentation"/>
<property name="scratchpad.dir" value="${src.dir}/scratchpad"/>
<property name="scratchpad.src" value="${scratchpad.dir}/src"/>
<property name="scratchpad.lib" value="${scratchpad.dir}/lib"/>
<property name="scratchpad.name" value="${name}-scratchpad"/>
<property name="contrib.dir" value="${src.dir}/contrib"/>
<property name="contrib.src" value="${contrib.dir}/src"/>
<property name="contrib.lib" value="${contrib.dir}/lib"/>
<property name="contrib.name" value="${name}-contrib"/>
<property name="build.root" value="./build"/>
<property name="build.dir" value="${build.root}/${name}"/>
<property name="build.src" value="${build.dir}/src"/>
<property name="build.test" value="${build.dir}/testcases"/>
<property name="build.dest" value="${build.dir}/classes"/>
<property name="build.docs" value="${build.dir}/docs"/>
<property name="build.xdocs" value="${build.dir}/xdocs"/>
<property name="build.docs.printer" value="${build.dir}/printer-docs"/>
<property name="build.javadocs" value="${build.dir}/javadocs"/>
<property name="build.context" value="${build.dir}/documentation"/>
<property name="build.scratchpad" value="${build.dir}/scratchpad"/>
<property name="build.scratchpad.src" value="${build.scratchpad}/src"/>
<property name="build.scratchpad.dest" value="${build.scratchpad}/classes"/>
<property name="build.contrib" value="${build.dir}/contrib"/>
<property name="build.contrib.src" value="${build.contrib}/src"/>
<property name="build.contrib.dest" value="${build.contrib}/classes"/>
<property name="build.patchqueue" value="${build.dir}/patchqueue"/>
<property name="dist.root" value="./dist"/>
<property name="dist.name" value="${name}-${version}"/>
<property name="dist.dir" value="${dist.root}/${dist.name}"/>
<property name="dist.src.dir" value="${dist.root}/source/${dist.name}"/>
<property name="dist.bin.dir" value="${dist.root}/bin/${dist.name}"/>
<property name="dist.target" value="${dist.root}"/>
<property name="site" value="../xml-site/targets/${name}"/>
<property name="build.project-info" value="${build.dir}/project-info.xml"/>
<property name="project-info2txt" value="${src.dir}/documentation/stylesheets/projectinfo2txt.xsl"/>
<property name="projectinfo2announcement" value="${src.dir}/documentation/stylesheets/projectinfo2announcement.xsl"/>
<property name="projectinfo2todo" value="${src.dir}/documentation/stylesheets/projectinfo2todo.xsl"/>
<!--
The location of tools.jar, relative to the JAVA_HOME home.
-->
<property name="tools.jar" value="${java.home}/../lib/tools.jar"/>
<available file="${tools.jar}" property="tools.jar.present"/>
<!--
Specifies where to send build build-log.xml
-->
<property name="XmlLogger.file" value="${build.dir}/build-log.xml"/>
<delete file="${XmlLogger.file}"/>
<filter token="Name" value="${fullname}"/>
<filter token="name" value="${fullname}"/>
<filter token="year" value="${year}"/>
<filter token="version" value="${version}"/>
<filter token="date" value="${TODAY}"/>
<filter token="log" value="true"/>
<filter token="verbose" value="true"/>
</target>

View File

@ -0,0 +1,63 @@
<!--
Give user a chance to override without editing this file
(and without typing -D each time he compiles it)
-->
<property file=".ant.properties"/>
<property file="${user.home}/.ant.properties"/>
<!--
these are here only for those who use jikes compiler. For other
developers this part makes no difference.
-->
<property name="build.compiler.emacs" value="on"/>
<property name="build.compiler.warnings" value="true"/>
<property name="build.compiler.pedantic" value="false"/>
<property name="build.compiler.depend" value="true"/>
<property name="build.compiler.fulldepend" value="true"/>
<!-- =================================================================== -->
<!-- Indentify Classpath -->
<!-- =================================================================== -->
<path id="centipede.classpath">
<fileset dir="./tools/centipede/lib">
<include name="*.jar"/>
</fileset>
</path>
<path id="classpath">
<fileset dir="./lib/core">
<include name="*.jar"/>
</fileset>
<fileset dir="./lib/optional">
<include name="*.jar"/>
</fileset>
</path>
<path id="scratchpad.classpath">
<fileset dir="./lib/core">
<include name="*.jar"/>
</fileset>
<fileset dir="./lib/optional">
<include name="*.jar"/>
</fileset>
<fileset dir="./src/scratchpad/lib">
<include name="*.jar"/>
</fileset>
<!-- FIXME : how to build a path that references a property set in 'init' target ? -->
<pathelement path="./build/jakarta-poi/classes"/>
</path>
<path id="contrib.classpath">
<fileset dir="./lib/core">
<include name="*.jar"/>
</fileset>
<fileset dir="./lib/optional">
<include name="*.jar"/>
</fileset>
<fileset dir="./src/contrib/lib">
<include name="*.jar"/>
</fileset>
<!-- FIXME : how to build a path that references a property set in 'init' target ? -->
<pathelement path="./build/jakarta-poi/classes"/>
</path>

View File

@ -0,0 +1,75 @@
<!-- =================================================================== -->
<!-- Gets pending patches from bugzilla and cleans html -->
<!-- =================================================================== -->
<target name="prepare-patchqueue" depends="init" description="Patch queue 2 mail">
<mkdir dir="${build.patchqueue}"/>
<get
src="http://nagoya.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Cocoon+2&amp;short_desc=%5BPATCH%5D&amp;short_desc_type=anywordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=&amp;cmdtype=doit&amp;namedcmd=cocoon+patch+queue&amp;newqueryname=&amp;order=Reuse+same+sort+as+last+time"
dest="${build.patchqueue}/bugzillapatchqueue.html"
verbose="true"
usetimestamp="true"
ignoreerrors="true"/>
<jtidy src="${build.patchqueue}/bugzillapatchqueue.html"
dest="${build.patchqueue}/bugzillapatchqueue.xhtml"
log="${build.patchqueue}/bugzillapatchqueue.log"
summary="true"
warn="true"/>
</target>
<!-- =================================================================== -->
<!-- Transforms bugzilla patches html into xml -->
<!-- =================================================================== -->
<target name="patchqueue-xml" depends="prepare-patchqueue">
<copy file="${tools.dir}/src/bugzilla2patchqueue.xsl"
tofile="${build.patchqueue}/bugzilla2patchqueue.xsl"/>
<style basedir="${build.patchqueue}"
destdir="${build.patchqueue}"
includes="bugzillapatchqueue.xhtml"
extension=".xml"
style="bugzilla2patchqueue.xsl"/>
</target>
<!-- =================================================================== -->
<!-- Makes patches.xml for xdocs using bugzilla patches xml -->
<!-- =================================================================== -->
<target name="patchqueue-xdocs" depends="patchqueue-xml">
<copy file="${tools.dir}/src/patchqueue2xdocs.xsl"
tofile="${build.patchqueue}/patchqueue2xdocs.xsl"/>
<style basedir="${build.patchqueue}"
destdir="${build.patchqueue}"
includes="bugzillapatchqueue.xml"
extension=".xdoc"
style="patchqueue2xdocs.xsl"/>
<copy file="${build.patchqueue}/bugzillapatchqueue.xdoc" tofile="${docs.dir}/patches.xml"/>
</target>
<!-- =================================================================== -->
<!-- Sends a notification of the current patch queue to the mailing list -->
<!-- =================================================================== -->
<target name="patchqueue" depends="patchqueue-xdocs">
<copy file="${tools.dir}/src/patchqueue2text4dev.xsl"
tofile="${build.patchqueue}/patchqueue2text4dev.xsl"/>
<style basedir="${build.patchqueue}"
destdir="${build.patchqueue}"
includes="bugzillapatchqueue.xml"
extension=".txt"
style="patchqueue2text4dev.xsl"/>
</target>
<!-- =================================================================== -->
<!-- Sends a notification of the current patch queue to the mailing list -->
<!-- =================================================================== -->
<target name="patchqueue-notify" depends="patchqueue">
<mail from="patch-queue@nicolaken.com"
tolist="cocoon-dev@xml.apache.org"
mailhost="192.4.0.155"
subject="DO NOT REPLY [PATCH QUEUE] Summary ${TODAY}"
files="${build.patchqueue}/bugzillapatchqueue.txt"/>
</target>

View File

@ -0,0 +1,40 @@
<!-- =================================================================== -->
<!-- Test targets -->
<!-- =================================================================== -->
<target name="test" depends="compile" description="Perform jUnit tests">
<mkdir dir="${build.test}"/>
<!-- Copy test files to build test dir -->
<copy todir="${build.test}" filtering="on">
<fileset dir="${test.dir}/${test.specific}"/>
</copy>
<!-- Compile tests -->
<javac srcdir="${build.test}"
destdir="${build.test}"
debug="${debug}"
optimize="${optimize}"
deprecation="${deprecation}"
target="${target.vm}">
<classpath refid="classpath"/>
<classpath>
<pathelement path="${build.dest}" />
</classpath>
</javac>
<junit printsummary="yes" haltonfailure="yes" fork="yes">
<classpath>
<pathelement location="${build.test}" />
<pathelement location="${build.dest}" />
<pathelement path="${java.class.path}" />
</classpath>
<classpath refid="classpath"/>
<formatter type="plain" usefile="no" />
<batchtest>
<fileset dir="${build.test}">
<include name="**/test/*TestCase.class"/>
<include name="**/*Test.class" />
<include name="**/Test*.class" />
<exclude name="**/AllTest.class" />
<exclude name="**/*$$*Test.class" />
</fileset>
</batchtest>
</junit>
</target>

View File

@ -0,0 +1,22 @@
<!-- =================================================================== -->
<!-- Print out warnings for optional components -->
<!-- =================================================================== -->
<target name="optional-warnings"
description="Outputs warnings if some optional jars are missing from the environment">
</target>
<!-- =================================================================== -->
<!-- Try other builds that could go into this core build -->
<!-- =================================================================== -->
<target name="try"
depends="init"
description="Builds to try before including in main build">
<ant target="${try.target}" antfile="./tools/targets/try.xml"/>
</target>
<!-- =================================================================== -->
<!-- Fix line endings in src -->
<!-- =================================================================== -->
<target name="fixsrclf" depends="init" description="Fix lf in src directory (internal use only!)">
<fixcrlf srcdir="${java.dir}" includes="**/*.java" eol="lf"/>
</target>

View File

@ -0,0 +1,718 @@
<?xml version="1.0"?>
<cocoon version="2.0">
<tree-processor>
<!-- The sitemap language -->
<language name="sitemap" class="org.apache.cocoon.treeprocessor.sitemap.SitemapLanguage">
<!-- Namespace for this language -->
<namespace uri="http://apache.org/cocoon/sitemap/1.0"/>
<!-- File name for files in this language, relative to the environment prefix -->
<file name="sitemap.xmap"/>
<!-- Description of the element for nodes parameters -->
<parameter element="parameter"/>
<!-- roles for the sitemap language -->
<roles>
<role name="org.apache.cocoon.acting.ActionSelector"
shorthand="actions"
default-class="org.apache.cocoon.treeprocessor.sitemap.ComponentsSelector"/>
<role name="org.apache.cocoon.selection.SelectorSelector"
shorthand="selectors"
default-class="org.apache.cocoon.treeprocessor.sitemap.ComponentsSelector"/>
<role name="org.apache.cocoon.matching.MatcherSelector"
shorthand="matchers"
default-class="org.apache.cocoon.treeprocessor.sitemap.ComponentsSelector">
<hint shorthand="regexp-uri-matcher"
class="org.apache.cocoon.matching.RegexpURIMatcher"/>
<hint shorthand="wildcard-uri-matcher"
class="org.apache.cocoon.matching.WildcardURIMatcher"/>
</role>
<role name="org.apache.cocoon.generation.GeneratorSelector"
shorthand="generators"
default-class="org.apache.cocoon.treeprocessor.sitemap.ComponentsSelector">
<hint shorthand="file-generator"
class="org.apache.cocoon.generation.FileGenerator"/>
<hint shorthand="XSP-generator"
class="org.apache.cocoon.generation.ServerPagesGenerator"/>
</role>
<role name="org.apache.cocoon.transformation.TransformerSelector"
shorthand="transformers"
default-class="org.apache.cocoon.treeprocessor.sitemap.ComponentsSelector">
<hint shorthand="XSLT-transformer"
class="org.apache.cocoon.transformation.TraxTransformer"/>
<hint shorthand="cinclude-transformer"
class="org.apache.cocoon.transformation.CIncludeTransformer"/>
</role>
<role name="org.apache.cocoon.serialization.SerializerSelector"
shorthand="serializers"
default-class="org.apache.cocoon.treeprocessor.sitemap.ComponentsSelector"/>
<role name="org.apache.cocoon.reading.ReaderSelector"
shorthand="readers"
default-class="org.apache.cocoon.treeprocessor.sitemap.ComponentsSelector"/>
<role name="org.apache.cocoon.components.notification.NotifyingBuilder"
shorthand="notifying-builder"
default-class="org.apache.cocoon.components.notification.DefaultNotifyingBuilder"/>
</roles>
<!-- node definitions for the sitemap language -->
<nodes>
<!-- All node names are given as local names in the above namespace (no prefix) -->
<!-- Sitemap root node -->
<node name="sitemap" builder="org.apache.cocoon.treeprocessor.sitemap.SitemapNodeBuilder">
<allowed-children>components, views, action-sets, resources, pipelines</allowed-children>
</node>
<!-- Components definition : parse view info associated to components
(actual components creation is done by SitemapLanguage) -->
<node name="components"
builder="org.apache.cocoon.treeprocessor.sitemap.ComponentsNodeBuilder"/>
<node name="pipelines"
builder="org.apache.cocoon.treeprocessor.sitemap.PipelinesNodeBuilder">
<allowed-children>pipeline</allowed-children>
</node>
<node name="views" builder="org.apache.cocoon.treeprocessor.CategoryNodeBuilder"/>
<node name="view" builder="org.apache.cocoon.treeprocessor.sitemap.ViewNodeBuilder"/>
<node name="resources" builder="org.apache.cocoon.treeprocessor.CategoryNodeBuilder"/>
<node name="resource" builder="org.apache.cocoon.treeprocessor.NamedContainerNodeBuilder"/>
<node name="action-sets" builder="org.apache.cocoon.treeprocessor.CategoryNodeBuilder"/>
<node name="action-set"
builder="org.apache.cocoon.treeprocessor.sitemap.ActionSetNodeBuilder"/>
<node name="pipeline" builder="org.apache.cocoon.treeprocessor.sitemap.PipelineNodeBuilder">
<forbidden-children>sitemap, components, pipelines</forbidden-children>
</node>
<node name="match" builder="org.apache.cocoon.treeprocessor.sitemap.MatchNodeBuilder">
<forbidden-children>sitemap, components, pipeline, handle-errors</forbidden-children>
</node>
<node name="select" builder="org.apache.cocoon.treeprocessor.sitemap.SelectNodeBuilder"/>
<node name="act" builder="org.apache.cocoon.treeprocessor.sitemap.ActNodeBuilder">
<forbidden-children>sitemap, components, pipeline, handle-errors</forbidden-children>
</node>
<node name="redirect-to"
builder="org.apache.cocoon.treeprocessor.sitemap.RedirectToNodeBuilder"/>
<node name="call" builder="org.apache.cocoon.treeprocessor.sitemap.CallNodeBuilder"/>
<node name="mount" builder="org.apache.cocoon.treeprocessor.sitemap.MountNodeBuilder"/>
<node name="read" builder="org.apache.cocoon.treeprocessor.sitemap.ReadNodeBuilder"/>
<node name="aggregate"
builder="org.apache.cocoon.treeprocessor.sitemap.AggregateNodeBuilder"/>
<node name="generate" builder="org.apache.cocoon.treeprocessor.sitemap.GenerateNodeBuilder"/>
<node name="transform"
builder="org.apache.cocoon.treeprocessor.sitemap.TransformNodeBuilder"/>
<node name="serialize"
builder="org.apache.cocoon.treeprocessor.sitemap.SerializeNodeBuilder"/>
<node name="handle-errors"
builder="org.apache.cocoon.treeprocessor.sitemap.HandleErrorsNodeBuilder"/>
</nodes>
</language>
</tree-processor>
<!-- Source Handler:
The source handler adds special url protocols to the system, they are
then available inside Cocoon, e.g. as a source argument for one of the
sitemap components.
-->
<source-handler logger="core.source-handler">
<!-- file protocol : this is a WriteableSource -->
<protocol name="file" class="org.apache.cocoon.components.source.FileSourceFactory"/>
</source-handler>
<!-- Entity resolution catalogs: *********************************************
catalog:
The default catalog is distributed at /resources/entities/catalog
This is the contextual pathname for Cocoon resources.
You can override this path, if necessary, using the "catalog" parameter.
<parameter name="catalog" value="/resources/entities/catalog"/>
However, it is probably desirable to leave this default catalog config
and declare your own local catalogs, which are loaded in addition to
the system catalog.
There are various ways to do local configuration (see "Entity Catalogs"
documentation). One way is via the CatalogManager.properties file.
As an additional method, you can specify the "local-catalog" parameter here.
local-catalog:
The full filesystem pathname to a single local catalog file.
<parameter name="local-catalog" value="/usr/local/sgml/mycatalog"/>
verbosity:
The level of messages for status/debug (messages go to standard output)
The following messages are provided ...
0 = none
1 = ? (... not sure yet)
2 = 1+, Loading catalog, Resolved public, Resolved system
3 = 2+, Catalog does not exist, resolvePublic, resolveSystem
10 = 3+, List all catalog entries when loading a catalog
(Cocoon also logs the "Resolved public" messages.)
TODO: determine all messages at each level
<parameter name="verbosity" value="2"/>
************************************************************************** -->
<entity-resolver class="org.apache.cocoon.components.resolver.ResolverImpl"
logger="core.resolver">
<parameter name="catalog" value="/resources/entities/catalog"/>
<parameter name="verbosity" value="1"/>
</entity-resolver>
<!-- ================ Apache Cocoon configuration file ================== -->
<!-- For full description of the components and their parameters ...
- Apache Cocoon User Documentation at /userdocs/
- webapp/cocoon.xconf (this file) - describes each core component
- each optional component/.../*.xconf - these describe the parameters
for each component and are automatically included at build-time.
The notes that accompany the settings below are intended to be concise.
-->
<!-- ===================== General Components =========================== -->
<!-- Parser:
The default parser used in Apache Cocoon is
org.apache.avalon.excalibur.xml.JaxpParser. Apache Cocoon requires a
JAXP 1.1 parser.
If you have problems because your servlet environment uses its own
parser not conforming to JAXP 1.1 try using the alternative
XercesParser instead of the JaxpParser. To activate the XercesParser,
change the class attribute to
class="org.apache.avalon.excalibur.xml.XercesParser"
You will also need to add a system property to your JVM,
probably on the startup of your servlet engine like this:
-Dorg.apache.avalon.excalibur.xml.Parser=org.apache.avalon.excalibur.xml.XercesParser
Configuration for the JaxpParser (not the XercesParser!):
- validate (boolean, default = false): This parameter causes the parser
to be a validating parser.
XML validation is only being used for the documentation build.
(If you are going to use it elsewhere, then do so with caution.)
You really should have validated all of your XML documents already,
according to their proper DTD or schema. Do not expect Cocoon to do it.
- namespace-prefixes (boolean, default = false) : do we want
namespaces declarations also as 'xmlns:' attributes ?
Note : setting this to true confuses some XSL processors (e.g. Saxon).
- stop-on-warning (boolean, default = true) : should the parser
stop parsing if a warning occurs ?
- stop-on-recoverable-error (boolean, default = true) : should the parser
stop parsing if a recoverable error occurs ?
- reuse-parsers (boolean, default = true) : do we want to reuse
parsers or create a new parser for each parse ?
Note : even if this parameter is true, parsers are not
recycled in case of parsing errors : some parsers (e.g. Xerces) don't like
to be reused after failure.
- sax-parser-factory (string) : the name of the SAXParserFactory
implementation class to be used instead of using the standard JAXP mechanism
(SAXParserFactory.newInstance()). This allows to choose
unambiguously the JAXP implementation to be used when several of them are
available in the classpath.
- document-builder-factory (string) : the name of the
DocumentBuilderFactory implementation to be used (similar to
sax-parser-factory for DOM).
-->
<xml-parser class="org.apache.avalon.excalibur.xml.JaxpParser"
logger="core.xml-parser">
<parameter name="validate" value="false"/>
<parameter name="namespace-prefixes" value="false"/>
<parameter name="stop-on-warning" value="true"/>
<parameter name="stop-on-recoverable-error" value="true"/>
<!--
<parameter name="reuse-parsers" value="true"/>
<parameter name="sax-parser-factory" value="???"/>
<parameter name="document-builder-factory" value="???"/>
-->
</xml-parser>
<!-- ============================ STORE ============================ -->
<!-- Persistent store for the cache. Two store implementations to choose
from:
* FilesystemStore: Simple. Dependable. Thorougly tested.
* JispFilesystemStore: Scalable. New kid on the block. Not thorougly tested.
If you opt in to use JispFilesystemStore, comment out FilesystemStore
entry.
JispFilesystemStore configuration parameters
(in addition to common parameters):
datafile: name of the store file to use.
indexfile: name of the index file to use.
order: FIXME: put description here.
<cache-persistent class="org.apache.cocoon.components.store.JispFilesystemStore"
logger="core.store.persistent">
<parameter name="use-cache-directory" value="true"/>
<parameter name="datafile" value="cocoon-cache.dat"/>
<parameter name="indexfile" value="cocoon-cache.idx"/>
<parameter name="order" value="1701"/>
</cache-persistent>
<cache-persistent class="org.apache.cocoon.components.store.FilesystemStore"
logger="core.store.persistent">
<parameter name="use-cache-directory" value="true"/>
</cache-persistent>
-->
<cache-persistent class="org.apache.cocoon.components.store.JispFilesystemStore"
logger="core.store.persistent">
<parameter name="use-cache-directory" value="true"/>
<parameter name="datafile" value="cocoon-cache.dat"/>
<parameter name="indexfile" value="cocoon-cache.idx"/>
<parameter name="order" value="1701"/>
</cache-persistent>
<!-- Memory Storing: -->
<cache-transient class="org.apache.cocoon.components.store.MRUMemoryStore"
logger="core.store.transient">
<!-- Indicates how many objects will be hold in the cache.
When the number of maxobjects has been reached. The last object in the
cache will be thrown out. -->
<parameter name="maxobjects" value="100"/>
<!-- Turns the swapping of the objects into persistent cache on
and off. -->
<parameter name="use-persistent-cache" value="true"/>
</cache-transient>
<!-- Store Janitor:
Be careful with the heapsize and freememory parameters. Wrong values can
cause high cpu usage. Example configuration:
Jvm settings:
-Xms100000000 -Xmx200000000
store-janitor settings:
<parameter name="freememory" value="5000000"/>
<parameter name="heapsize" value="150000000"/>
Heapsize *must* be higher then the -Xms parameter and *must* be lower or
equal than -Xmx. It is recommended to have heapsize equal to -Xmx, especially
on Sun's JVM which are unable to shrink its heap once it grows above minimum.
Freememory parameter *must* be lower than -Xms, and should be greater than
amount of memory necessary for normal application operation.
-->
<store-janitor class="org.apache.cocoon.components.store.StoreJanitorImpl"
logger="core.store.janitor">
<!-- How much free memory shall be available in the jvm -->
<parameter name="freememory" value="1000000"/>
<!-- Indicates the limit of the jvm memory consumption. The default max
heapsize for Sun's JVM is 64Mb -->
<parameter name="heapsize" value="67108864"/>
<!-- How often shall the cleanup thread check memory -->
<parameter name="cleanupthreadinterval" value="10"/>
<!-- Indicates the thread priority of the cleanup thread -->
<parameter name="threadpriority" value="5"/>
<!-- How much percent of the elements of each registered Store shall
be removed when low on memory. Default 10% -->
<parameter name="percent_to_free" value="10"/>
</store-janitor>
<!-- ============================ STORE END ========================= -->
<!-- XSLT Processor:
For Xalan: Turn 'incremental-processing' to true if you want a continous output (if set to
false the transformer
delivers SAX events after all transformations has been done). -->
<xslt-processor class="org.apache.cocoon.components.xslt.XSLTProcessorImpl"
logger="core.xslt-processor">
<parameter name="use-store" value="true"/>
<parameter name="incremental-processing" value="false"/>
</xslt-processor>
<!-- Xpath Processor:
-->
<xpath-processor class="org.apache.cocoon.components.xpath.XPathProcessorImpl"
logger="core.xpath-processor"/>
<!-- URL Factory:
The url factory adds special url protocols to the system, they are then
available inside Cocoon, e.g. as a source argument for one of the sitemap
components.
-->
<url-factory logger="core.url-factory">
<!-- Allows access to resources available from the ClassLoader,
using getResource() method. -->
<protocol name="resource" class="org.apache.cocoon.components.url.ResourceURLFactory"/>
<!-- Allows access to resources available from the servlet context,
using getResource() method. -->
<protocol name="context" class="org.apache.cocoon.components.url.ContextURLFactory"/>
<!-- Add here protocol factories for your own protocols -->
</url-factory>
<!-- Program Generator:
The ProgamGenerator builds programs from a XML document written in a
MarkupLanguage.
auto-reload:
root-package: persistent code repository.
preload:
-->
<program-generator logger="core.program-generator">
<parameter name="auto-reload" value="true"/>
<parameter name="root-package" value="org.apache.cocoon.www"/>
<parameter name="preload" value="true"/>
</program-generator>
<!-- Xscript:
-->
<xscript logger="core.xscript">
<parameter name="xscript:copy-of"
value="resource://org/apache/cocoon/components/xscript/xslt/copy-of.xsl"/>
<parameter name="xscript:value-of"
value="resource://org/apache/cocoon/components/xscript/xslt/value-of.xsl"/>
</xscript>
<!-- Programming Languages: -->
<programming-languages>
<java-language name="java" logger="core.language.java">
<!-- Compiler parameter specifies which class to use to compile Java.
Possible variants are:
Javac. Requires javac.jar (included with Cocoon distribution).
Pizza. Requires pizza.jar (included with Cocoon distribution).
Jikes. Requires IBM jikes compiler to be present in the PATH -->
<parameter name="compiler"
value="org.apache.cocoon.components.language.programming.java.Javac"/>
<!-- Specifies which formatter to use to format source code.
This parameter is optional.
It is commented out because of bug #5689: Java "code-formatter" incorrectly formats
double values
<parameter name="code-formatter"
value="org.apache.cocoon.components.language.programming.java.JstyleFormatter"/>
-->
<!-- A singleton-like implementation of a ClassLoader -->
<parameter name="class-loader"
value="org.apache.cocoon.components.classloader.ClassLoaderManagerImpl"/>
</java-language>
</programming-languages>
<!-- Class loader:
A singleton-like implementation of a ClassLoader.
-->
<classloader class="org.apache.cocoon.components.classloader.ClassLoaderManagerImpl"
logger="core.classloader"/>
<!-- Markup Languages:
This section defines several builtin logicsheets. A logicsheet is an XML
filter used to translate user-defined, dynamic markup into equivalent
code embedding directives for a given markup language.
-->
<markup-languages>
<xsp-language name="xsp" logger="core.markup.xsp">
<parameter name="prefix" value="xsp"/>
<parameter name="uri" value="http://apache.org/xsp"/>
<!-- Defines the XSP Core logicsheet for the Java language -->
<target-language name="java">
<parameter name="core-logicsheet"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/xsp.xsl"/>
<!-- The Request logicsheet (taglib) is an XSP logicsheet that wraps XML tags
around standard request operations -->
<builtin-logicsheet>
<parameter name="prefix" value="xsp-request"/>
<parameter name="uri" value="http://apache.org/xsp/request/2.0"/>
<parameter name="href"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/request.xsl"/>
</builtin-logicsheet>
<!-- The Response logicsheet (taglib) is an XSP logicsheet that wraps XML tags
around standard response operations -->
<builtin-logicsheet>
<parameter name="prefix" value="xsp-response"/>
<parameter name="uri" value="http://apache.org/xsp/response/2.0"/>
<parameter name="href"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/response.xsl"/>
</builtin-logicsheet>
<!-- The Session logicsheet (taglib) is an XSP logicsheet that wraps XML tags around
standard session operations. Specifically, the Session logicsheet provides an
XML interface to most methods of the HttpSession object (see the Java Servlet API
Specification, version 2.2 ) for more information. -->
<builtin-logicsheet>
<parameter name="prefix" value="session"/>
<parameter name="uri" value="http://apache.org/xsp/session/2.0"/>
<parameter name="href"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/session.xsl"/>
</builtin-logicsheet>
<!-- The Cookie logicsheet (taglib) is an XSP logicsheet that wraps XML tags
around standard cookie operations -->
<builtin-logicsheet>
<parameter name="prefix" value="xsp-cookie"/>
<parameter name="uri" value="http://apache.org/xsp/cookie/2.0"/>
<parameter name="href"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/cookie.xsl"/>
</builtin-logicsheet>
<!-- The ESQL logicsheet is an XSP logicsheet that performs sql queries and
serializes their results as XML. This allows you to work with data from a
wide variety of different sources when using Apache Cocoon. -->
<builtin-logicsheet>
<parameter name="prefix" value="esql"/>
<parameter name="uri" value="http://apache.org/cocoon/SQL/v2"/>
<parameter name="href"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/esql.xsl"/>
</builtin-logicsheet>
<builtin-logicsheet>
<parameter name="prefix" value="log"/>
<parameter name="uri" value="http://apache.org/xsp/log/2.0"/>
<parameter name="href"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/log.xsl"/>
</builtin-logicsheet>
<builtin-logicsheet>
<parameter name="prefix" value="util"/>
<parameter name="uri" value="http://apache.org/xsp/util/2.0"/>
<parameter name="href"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/util.xsl"/>
</builtin-logicsheet>
<!-- The xsp-formval taglib serves as interface to retrieve validation results
from a request attribute -->
<builtin-logicsheet>
<parameter name="prefix" value="xsp-formval"/>
<parameter name="uri" value="http://apache.org/xsp/form-validator/2.0"/>
<parameter name="href"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/form-validator.xsl"/>
</builtin-logicsheet>
<!-- The sel taglib allows to put multiple pages / view into
one xsp. While in general it is good style to put
different views into different xsp because they're more
easily maintained, this is a useful feature with
e.g. with long forms that are broken into parts -->
<builtin-logicsheet>
<parameter name="prefix" value="sel"/>
<parameter name="uri" value="http://apache.org/xsp/sel/1.0"/>
<parameter name="href"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/sel.xsl"/>
</builtin-logicsheet>
<builtin-logicsheet>
<parameter name="prefix" value="action"/>
<parameter name="uri" value="http://apache.org/cocoon/action/1.0"/>
<parameter name="href"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/action.xsl"/>
</builtin-logicsheet>
<!-- The capture taglib is for capturing parts of the XSP-generated XML as
XML fragments or DOM nodes -->
<builtin-logicsheet>
<parameter name="prefix" value="capture"/>
<parameter name="uri" value="http://apache.org/cocoon/capture/1.0"/>
<parameter name="href"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/capture.xsl"/>
</builtin-logicsheet>
<builtin-logicsheet>
<parameter name="prefix" value="xscript"/>
<parameter name="uri" value="http://apache.org/xsp/xscript/1.0"/>
<parameter name="href"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/xscript.xsl"/>
</builtin-logicsheet>
<builtin-logicsheet>
<parameter name="prefix" value="soap"/>
<parameter name="uri" value="http://apache.org/xsp/soap/3.0"/>
<parameter name="href"
value="resource://org/apache/cocoon/components/language/markup/xsp/java/soap.xsl"/>
</builtin-logicsheet>
</target-language>
</xsp-language>
<!-- Defines Sitemap Core logicsheet for the Java language -->
<sitemap-language name="sitemap" logger="core.markup.sitemap">
<parameter name="prefix" value="map"/>
<parameter name="uri" value="http://apache.org/cocoon/sitemap/1.0"/>
<target-language name="java">
<parameter name="core-logicsheet"
value="resource://org/apache/cocoon/components/language/markup/sitemap/java/sitemap.xsl"/>
</target-language>
</sitemap-language>
</markup-languages>
<!-- Datasources example:
<datasources>
<jdbc name="personnel" logger="core.datasources.personnel">
<pool-controller min="5" max="10" oradb="true"/>
<pool-controller min="5" max="10"/>
<auto-commit>false</auto-commit>
<dburl>jdbc:hsqldb:hsql://localhost:9002</dburl>
<user>sa</user>
<password></password>
</jdbc>
</datasources>
-->
<!-- Stream Pipeline:
Either collects a Reader and lets it produce a character stream
or connects an EventPipeline with a Serializer and lets them produce
the character stream. Alternatives to CachingStreamPipeline are:
<stream-pipeline class="org.apache.cocoon.components.pipeline.NonCachingStreamPipeline"/>
-->
<stream-pipeline class="org.apache.cocoon.components.pipeline.CachingStreamPipeline"
logger="core.stream-pipeline"
pool-max="32" pool-min="2" pool-grow="4"/>
<!-- Event Pipeline:
Connects the generator and the various transformers and produces a
character stream. Alternatives to CachingEventPipeline are:
<event-pipeline class="org.apache.cocoon.components.pipeline.NonCachingEventPipeline"/>
<event-pipeline class="org.apache.cocoon.components.profiler.ProfilingCachingEventPipeline"/>
<event-pipeline
class="org.apache.cocoon.components.profiler.ProfilingNonCachingEventPipeline"/>
-->
<event-pipeline class="org.apache.cocoon.components.pipeline.CachingEventPipeline"
logger="core.event-pipeline"
pool-max="32" pool-min="2" pool-grow="4"/>
<!-- Compiling xml to byte streams.
The xml-serializer "compiles" xml sax events into a byte stream
and the xml-deserializer does the same vice versa.
Make sure, that if you change one of these components, that you
may have to change the other one as well, as they might have
a dependency.
-->
<xml-serializer class="org.apache.cocoon.components.sax.XMLByteStreamCompiler"
logger="core.xml-serializer"/>
<xml-deserializer class="org.apache.cocoon.components.sax.XMLByteStreamInterpreter"
logger="core.xml-deserializer"/>
<!-- SAXConnector:
Connects the various pipeline components.
LoggingSAXConnector logs SAX events between pipeline components
into cocoon's log file.
ProfilingSAXConnector gathers timing information.
Uncomment one of the following lines for using the SAXConnector.
<sax-connector class="org.apache.cocoon.components.saxconnector.LoggingSAXConnector"/>
<sax-connector class="org.apache.cocoon.components.profiler.ProfilingSAXConnector"/>
-->
<!-- Profiler:
The profiler facilitates the gathering of statistics about timings of
different steps of pipelines. Profiler consists of several components:
profiling pipeline, profiling SAX connector, and profiler generator
which are used to generate the profile report. You need to enable all of
these components to use profiler.
Uncomment the following line to use profiler.
<profiler/>
-->
<!-- Resource Monitor:
The Monitor keeps track on changes to a Resource.
-->
<monitor logger="core.monitor">
<thread priority="5" frequency="10000"/>
</monitor>
<!-- ======================== The sitemap ============================== -->
<!-- Reloading of the sitemap:
The check-reload attribute determines if the sitemap is reloaded on change.
Set to "no", the sitemap is generated once at startup.
Set to "yes", the sitemap is regenerated if it changes.
The reload-method specifies the method for the regeneration:
asynchron: If the sitemap changes, the sitemap is regenerated at the
next request in the background and the incoming request is
served with the old sitemap. All subsequent requests are
served with the old sitemap until the regeneration in the
background has finished.
synchron: If the sitemap changes, the sitemap is regenerated at the
next request. When the regeneration is finished, the request
(and all subsequent ones) is served with the new sitemap.
For development environment, set the reload-method to synchron and the
check-reload to yes.
For production environment, it is advisable to set the reload-method to
asynchron and for more safety the check-reload to no.
<sitemap file="sitemap.xmap" reload-method="asynchron" check-reload="yes" logger="sitemap"/>
-->
<sitemap class="org.apache.cocoon.treeprocessor.TreeProcessor" logger="sitemap"/>
<!-- ===================== Sitemap Components =========================== -->
<!-- Here defined some core Cocoon sitemap components, as File generator
or XSLT transformer. Note that syntax of this file slightly differs
from the syntax of <map:components> section of the sitemap.xmap file.
-->
<generators>
<component-instance name="file" class="org.apache.cocoon.generation.FileGenerator"
label="content,data"
logger="sitemap.generator.file"
pool-max="32" pool-min="2" pool-grow="4"/>
<component-instance name="serverpages" class="org.apache.cocoon.generation.ServerPagesGenerator"
label="content,data"
logger="sitemap.generator.serverpages"
pool-max="32" pool-min="0" pool-grow="2"/>
</generators>
<transformers>
<component-instance name="xslt" class="org.apache.cocoon.transformation.TraxTransformer"
logger="sitemap.transformer.xslt"
pool-max="32" pool-min="2" pool-grow="4">
<use-request-parameters>false</use-request-parameters>
<use-browser-capabilities-db>false</use-browser-capabilities-db>
<use-deli>false</use-deli>
</component-instance>
</transformers>
<serializers>
<component-instance name="links" class="org.apache.cocoon.serialization.LinkSerializer"
encoding="iso8859-1"
logger="sitemap.serializer.links"
pool-max="32" pool-min="2" pool-grow="4"/>
<component-instance name="xml" class="org.apache.cocoon.serialization.XMLSerializer"
encoding="iso8859-1"
mime-type="text/xml"
logger="sitemap.serializer.xml"
pool-max="32" pool-min="2" pool-grow="4"/>
<component-instance name="html" class="org.apache.cocoon.serialization.HTMLSerializer"
encoding="iso8859-1"
mime-type="text/html"
logger="sitemap.serializer.html"
pool-max="32" pool-min="4" pool-grow="4">
<buffer-size>1024</buffer-size>
</component-instance>
</serializers>
<readers>
<component-instance name="resource" class="org.apache.cocoon.reading.ResourceReader"
logger="sitemap.reader.resource"
pool-max="32"/>
</readers>
<!--
<matchers/>
<selectors/>
<actions/>
-->
</cocoon>