Skip to Content.
Sympa Menu

notify-dpml - r1818 - in trunk/main/depot: . build build/etc build/etc/bin build/etc/bootstrap build/src/main build/src/main/dpml build/src/main/dpml/build library library/etc/data library/etc/data/ant library/etc/data/commons-cli library/etc/data/dpml library/etc/data/jgoodies library/etc/data/junit library/etc/data/samples library/etc/data/xstream library/src/main library/src/main/dpml/library library/src/main/dpml/library/impl library/src/main/dpml/library/info library/src/test library/src/test/dpml/library library/src/test/dpml/library/impl library/src/test/dpml/library/info library/src/test/net plugins plugins/checkstyle plugins/checkstyle/etc plugins/checkstyle/src/main plugins/checkstyle/src/main/dpml/tools/checkstyle plugins/checkstyle/src/main/net plugins/convert plugins/convert/etc plugins/convert/src/main plugins/convert/src/main/net tools tools/etc tools/etc/bootstrap tools/etc/prefs/templates tools/etc/prefs/xmls tools/src/main tools/src/main/dpml/tools tools/src/mai! n/dpml/tools/impl tools/src/main/dpml/tools/info tools/src/main/dpml/tools/tasks tools/src/main/dpml/tools/transit tools/src/test tools/src/test/dpml/tools/info

notify-dpml AT lists.ibiblio.org

Subject: DPML Notify

List archive

Chronological Thread  
  • From: mcconnell at BerliOS <mcconnell AT mail.berlios.de>
  • To: notify-dpml AT lists.ibiblio.org
  • Subject: r1818 - in trunk/main/depot: . build build/etc build/etc/bin build/etc/bootstrap build/src/main build/src/main/dpml build/src/main/dpml/build library library/etc/data library/etc/data/ant library/etc/data/commons-cli library/etc/data/dpml library/etc/data/jgoodies library/etc/data/junit library/etc/data/samples library/etc/data/xstream library/src/main library/src/main/dpml/library library/src/main/dpml/library/impl library/src/main/dpml/library/info library/src/test library/src/test/dpml/library library/src/test/dpml/library/impl library/src/test/dpml/library/info library/src/test/net plugins plugins/checkstyle plugins/checkstyle/etc plugins/checkstyle/src/main plugins/checkstyle/src/main/dpml/tools/checkstyle plugins/checkstyle/src/main/net plugins/convert plugins/convert/etc plugins/convert/src/main plugins/convert/src/main/net tools tools/etc tools/etc/bootstrap tools/etc/prefs/templates tools/etc/prefs/xmls tools/src/main tools/src/main/dpml/tools tools/src/mai! n/dpml/tools/impl tools/src/main/dpml/tools/info tools/src/main/dpml/tools/tasks tools/src/main/dpml/tools/transit tools/src/test tools/src/test/dpml/tools/info
  • Date: Fri, 9 Feb 2007 00:31:42 +0100

Author: mcconnell
Date: 2007-02-09 00:31:25 +0100 (Fri, 09 Feb 2007)
New Revision: 1818

Added:
trunk/main/depot/build/etc/bin/build.policy
trunk/main/depot/build/etc/bootstrap/
trunk/main/depot/build/etc/bootstrap/part.link
trunk/main/depot/build/etc/bootstrap/part.xml
trunk/main/depot/build/etc/component.xml
trunk/main/depot/build/project.xml
trunk/main/depot/build/src/main/dpml/
trunk/main/depot/build/src/main/dpml/build/
trunk/main/depot/build/src/main/dpml/build/BuildError.java
trunk/main/depot/build/src/main/dpml/build/Builder.java
trunk/main/depot/build/src/main/dpml/build/Main.java
trunk/main/depot/library/etc/data/logging.properties
trunk/main/depot/library/project.xml
trunk/main/depot/library/src/main/dpml/
trunk/main/depot/library/src/main/dpml/library/Classifier.java
trunk/main/depot/library/src/main/dpml/library/Local.java
trunk/main/depot/library/src/main/dpml/library/ProjectLocation.java
trunk/main/depot/library/src/main/dpml/library/Scope.java
trunk/main/depot/library/src/main/dpml/library/impl/DefaultType.java
trunk/main/depot/library/src/main/dpml/library/info/ProductionPolicy.java
trunk/main/depot/library/src/main/dpml/library/package-info.java
trunk/main/depot/library/src/test/dpml/
trunk/main/depot/plugins/checkstyle/etc/resource.xml
trunk/main/depot/plugins/checkstyle/project.xml
trunk/main/depot/plugins/checkstyle/src/main/dpml/
trunk/main/depot/plugins/convert/build.xml
trunk/main/depot/plugins/convert/etc/
trunk/main/depot/plugins/convert/etc/resource.xml
trunk/main/depot/plugins/convert/project.xml
trunk/main/depot/plugins/convert/src/main/dpml/
trunk/main/depot/tools/CHANGES.TXT
trunk/main/depot/tools/etc/component.xml
trunk/main/depot/tools/project.xml
trunk/main/depot/tools/src/main/dpml/
trunk/main/depot/tools/src/main/dpml/tools/BuilderError.java
trunk/main/depot/tools/src/main/dpml/tools/antlib.xml
trunk/main/depot/tools/src/main/dpml/tools/transit/
trunk/main/depot/tools/src/main/dpml/tools/transit/AntAdapter.java
trunk/main/depot/tools/src/main/dpml/tools/transit/GetTask.java
trunk/main/depot/tools/src/main/dpml/tools/transit/ImportArtifactTask.java
trunk/main/depot/tools/src/main/dpml/tools/transit/MainTask.java
trunk/main/depot/tools/src/main/dpml/tools/transit/MapDataType.java
trunk/main/depot/tools/src/main/dpml/tools/transit/NodeTask.java
trunk/main/depot/tools/src/main/dpml/tools/transit/PluginTask.java

trunk/main/depot/tools/src/main/dpml/tools/transit/TransitComponentHelper.java
trunk/main/depot/tools/src/main/dpml/tools/transit/TransitTask.java
trunk/main/depot/tools/src/main/dpml/tools/transit/antlib.xml
trunk/main/depot/tools/src/main/dpml/tools/transit/package.html
trunk/main/depot/tools/src/test/dpml/
Removed:
trunk/main/depot/build/build.xml
trunk/main/depot/build/src/main/dpml/library/
trunk/main/depot/build/src/main/net/
trunk/main/depot/core/
trunk/main/depot/library/build.xml
trunk/main/depot/library/src/main/dpml/library/Builder.java
trunk/main/depot/library/src/main/dpml/library/Data.java
trunk/main/depot/library/src/main/dpml/library/TypeBuilder.java
trunk/main/depot/library/src/main/dpml/library/info/DataDirective.java
trunk/main/depot/library/src/main/dpml/library/package.html
trunk/main/depot/library/src/main/net/
trunk/main/depot/library/src/test/dpml/library/impl/ExportTestCase.java
trunk/main/depot/library/src/test/net/dpml/
trunk/main/depot/plugins/checkstyle/src/main/net/dpml/
trunk/main/depot/plugins/convert/src/main/net/dpml/
trunk/main/depot/test/
trunk/main/depot/tools/src/main/dpml/tools/BuildError.java
trunk/main/depot/tools/src/main/dpml/tools/impl/BuilderError.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/PartTask.java
trunk/main/depot/tools/src/main/net/
trunk/main/depot/tools/src/test/net/
Modified:
trunk/main/depot/build.xml
trunk/main/depot/build/bootstrap.xml
trunk/main/depot/build/etc/bin/build
trunk/main/depot/build/etc/bin/build.lap
trunk/main/depot/library/bootstrap.properties
trunk/main/depot/library/bootstrap.xml
trunk/main/depot/library/etc/data/ant/module.xml
trunk/main/depot/library/etc/data/commons-cli/module.xml
trunk/main/depot/library/etc/data/dpml/module.xml
trunk/main/depot/library/etc/data/jgoodies/module.xml
trunk/main/depot/library/etc/data/junit/module.xml
trunk/main/depot/library/etc/data/library.xml
trunk/main/depot/library/etc/data/samples/absolute.xml
trunk/main/depot/library/etc/data/samples/anonymous.xml
trunk/main/depot/library/etc/data/samples/duplicates.xml
trunk/main/depot/library/etc/data/samples/example-1.xml
trunk/main/depot/library/etc/data/samples/example-2.xml
trunk/main/depot/library/etc/data/samples/example-3.xml
trunk/main/depot/library/etc/data/samples/example-4.xml
trunk/main/depot/library/etc/data/samples/example-5.xml
trunk/main/depot/library/etc/data/samples/example-6.xml
trunk/main/depot/library/etc/data/samples/example-7.xml
trunk/main/depot/library/etc/data/samples/example-8.xml
trunk/main/depot/library/etc/data/samples/filters.xml
trunk/main/depot/library/etc/data/samples/info.xml
trunk/main/depot/library/etc/data/samples/jar-type.xml
trunk/main/depot/library/etc/data/samples/properties.xml
trunk/main/depot/library/etc/data/samples/widget.xml
trunk/main/depot/library/etc/data/xstream/module.xml
trunk/main/depot/library/src/main/dpml/library/Dictionary.java
trunk/main/depot/library/src/main/dpml/library/DuplicateNameException.java
trunk/main/depot/library/src/main/dpml/library/Feature.java
trunk/main/depot/library/src/main/dpml/library/FeatureRuntimeException.java
trunk/main/depot/library/src/main/dpml/library/Filter.java
trunk/main/depot/library/src/main/dpml/library/Info.java
trunk/main/depot/library/src/main/dpml/library/Library.java
trunk/main/depot/library/src/main/dpml/library/Module.java
trunk/main/depot/library/src/main/dpml/library/ModuleNotFoundException.java
trunk/main/depot/library/src/main/dpml/library/ReferentialException.java
trunk/main/depot/library/src/main/dpml/library/Resource.java

trunk/main/depot/library/src/main/dpml/library/ResourceNotFoundException.java
trunk/main/depot/library/src/main/dpml/library/Type.java
trunk/main/depot/library/src/main/dpml/library/TypeNotFoundException.java
trunk/main/depot/library/src/main/dpml/library/impl/DefaultDictionary.java
trunk/main/depot/library/src/main/dpml/library/impl/DefaultLibrary.java
trunk/main/depot/library/src/main/dpml/library/impl/DefaultModule.java
trunk/main/depot/library/src/main/dpml/library/impl/DefaultResource.java

trunk/main/depot/library/src/main/dpml/library/impl/InvalidNameException.java

trunk/main/depot/library/src/main/dpml/library/impl/InvalidProcessorNameException.java

trunk/main/depot/library/src/main/dpml/library/impl/InvalidTypeNameException.java
trunk/main/depot/library/src/main/dpml/library/info/AbstractDirective.java

trunk/main/depot/library/src/main/dpml/library/info/DependencyDirective.java

trunk/main/depot/library/src/main/dpml/library/info/FeatureFilterDirective.java
trunk/main/depot/library/src/main/dpml/library/info/FilterDirective.java
trunk/main/depot/library/src/main/dpml/library/info/ImportDirective.java
trunk/main/depot/library/src/main/dpml/library/info/IncludeDirective.java
trunk/main/depot/library/src/main/dpml/library/info/InfoDirective.java
trunk/main/depot/library/src/main/dpml/library/info/LibraryConstants.java
trunk/main/depot/library/src/main/dpml/library/info/LibraryDecoder.java
trunk/main/depot/library/src/main/dpml/library/info/LibraryDirective.java
trunk/main/depot/library/src/main/dpml/library/info/LibraryEncoder.java
trunk/main/depot/library/src/main/dpml/library/info/ModuleDirective.java
trunk/main/depot/library/src/main/dpml/library/info/ResourceDirective.java
trunk/main/depot/library/src/main/dpml/library/info/Scope.java

trunk/main/depot/library/src/main/dpml/library/info/SimpleFilterDirective.java
trunk/main/depot/library/src/main/dpml/library/info/TypeDirective.java

trunk/main/depot/library/src/main/dpml/library/info/TypeUnknownException.java

trunk/main/depot/library/src/main/dpml/library/info/ValidationException.java
trunk/main/depot/library/src/test/dpml/library/XMLTestCase.java
trunk/main/depot/library/src/test/dpml/library/impl/AbsoluteTestCase.java
trunk/main/depot/library/src/test/dpml/library/impl/AbstractTestCase.java
trunk/main/depot/library/src/test/dpml/library/impl/AnonymousTestCase.java

trunk/main/depot/library/src/test/dpml/library/impl/DefaultDictionaryTestCase.java

trunk/main/depot/library/src/test/dpml/library/impl/DefaultLibraryTestCase.java

trunk/main/depot/library/src/test/dpml/library/impl/DefaultModuleTestCase.java

trunk/main/depot/library/src/test/dpml/library/impl/DefaultResourceTestCase.java
trunk/main/depot/library/src/test/dpml/library/impl/DuplicatesTestCase.java
trunk/main/depot/library/src/test/dpml/library/impl/FiltersTestCase.java
trunk/main/depot/library/src/test/dpml/library/impl/InfoTestCase.java
trunk/main/depot/library/src/test/dpml/library/impl/PropertiesTestCase.java
trunk/main/depot/library/src/test/dpml/library/info/AbstractTestCase.java

trunk/main/depot/library/src/test/dpml/library/info/DependencyDirectiveTestCase.java

trunk/main/depot/library/src/test/dpml/library/info/ImportDirectiveTestCase.java

trunk/main/depot/library/src/test/dpml/library/info/IncludeDirectiveTestCase.java

trunk/main/depot/library/src/test/dpml/library/info/InfoDirectiveTestCase.java

trunk/main/depot/library/src/test/dpml/library/info/LibraryDirectiveTestCase.java

trunk/main/depot/library/src/test/dpml/library/info/ModuleDirectiveTestCase.java

trunk/main/depot/library/src/test/dpml/library/info/ResourceDirectiveTestCase.java
trunk/main/depot/library/src/test/dpml/library/info/ScopeTestCase.java

trunk/main/depot/library/src/test/dpml/library/info/TypeDirectiveTestCase.java
trunk/main/depot/module.xml
trunk/main/depot/plugins/
trunk/main/depot/plugins/checkstyle/build.xml

trunk/main/depot/plugins/checkstyle/src/main/dpml/tools/checkstyle/CheckstyleTask.java

trunk/main/depot/plugins/checkstyle/src/main/dpml/tools/checkstyle/antlib.xml
trunk/main/depot/tools/bootstrap.properties
trunk/main/depot/tools/bootstrap.xml
trunk/main/depot/tools/build.xml
trunk/main/depot/tools/etc/bootstrap/builder.xml
trunk/main/depot/tools/etc/prefs/templates/standard.template
trunk/main/depot/tools/etc/prefs/xmls/builder.xml
trunk/main/depot/tools/src/main/dpml/tools/Context.java
trunk/main/depot/tools/src/main/dpml/tools/impl/DefaultContext.java
trunk/main/depot/tools/src/main/dpml/tools/impl/StandardBuildListener.java
trunk/main/depot/tools/src/main/dpml/tools/impl/StandardBuilder.java
trunk/main/depot/tools/src/main/dpml/tools/info/BuilderDirective.java
trunk/main/depot/tools/src/main/dpml/tools/info/BuilderDirectiveHelper.java
trunk/main/depot/tools/src/main/dpml/tools/info/ListenerDirective.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/BuildTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/CleanTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/DocTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/FeatureTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/FilterTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/GenericTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/InitializationTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/InstallTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/JUnitTestTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/JarTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/JavacTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/JavadocTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/ModuleTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/PackageTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/PluginTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/PrepareTask.java

trunk/main/depot/tools/src/main/dpml/tools/tasks/ProcessorInstantiationException.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/PropertyTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/RMICTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/ReactorTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/ReplicateTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/ResourceTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/TestTask.java
trunk/main/depot/tools/src/main/dpml/tools/tasks/antlib.xml
trunk/main/depot/tools/src/test/dpml/tools/info/AbstractTestCase.java

trunk/main/depot/tools/src/test/dpml/tools/info/ListenerDirectiveTestCase.java
Log:
SDK 2.X initial commit.

Modified: trunk/main/depot/build/bootstrap.xml
===================================================================
--- trunk/main/depot/build/bootstrap.xml 2007-02-08 23:30:11 UTC (rev
1817)
+++ trunk/main/depot/build/bootstrap.xml 2007-02-08 23:31:25 UTC (rev
1818)
@@ -1,20 +1,57 @@
<?xml version="1.0" encoding="UTF-8" ?>

-<project name="dpml-library-console" default="install" basedir="."
- xmlns:transit="antlib:net.dpml.transit"
- xmlns:x="dpml:depot" >
+<project name="dpml-depot-build" default="install" basedir=".">

- <transit:import uri="local:template:dpml/tools/standard"/>
+ <property name="project.group" value="dpml/depot"/>
+ <property name="project.name" value="dpml-depot-build"/>

- <available property="builder.exe.available"
file="${dpml.system}/bin/build.exe"/>
+ <property name="home" value="../.."/>
+ <import file="${home}/bootstrap.xml"/>
+
+ <target name="init" depends="bootstrap.init">
+ <filter token="PROJECT-NAME" value="${project.name}" />
+ <filter token="PROJECT-GROUP" value="${project.group}"/>
+ <filter token="PROJECT-VERSION" value="${project.version}"/>
+ <filter token="DEPOT-BUILDER-URI"
value="link:part:dpml/depot/dpml-depot-builder"/>
+ </target>
+
+ <target name="setup-path" depends="bootstrap.setup-path">
+ <path id="project.main.path">
+ <pathelement
location="${dpml.local.cache}/dpml/transit/jars/dpml-transit-main-BOOTSTRAP.jar"/>
+ <pathelement
location="${dpml.local.cache}/dpml/lang/jars/dpml-lang-part-BOOTSTRAP.jar"/>
+ <pathelement
location="${dpml.local.cache}/dpml/depot/jars/dpml-depot-library-BOOTSTRAP.jar"/>
+ <pathelement
location="${dpml.local.cache}/dpml/util/jars/dpml-util-cli-BOOTSTRAP.jar"/>
+ <pathelement location="${target.classes.dir}"/>
+ </path>
+ <path id="project.test.path">
+ <path refid="project.main.path"/>
+ <pathelement
location="${dpml.local.cache}/junit/jars/${junit.filename}"/>
+ <pathelement
location="${target.deliverables.jars.dir}/${project.filename}"/>
+ </path>
+ </target>

- <target name="install" depends="bin,standard.install">
- <copy todir="${dpml.system}" preservelastmodified="true"
overwrite="true">
- <fileset dir="target">
- <include name="bin/build.lap"/>
- <include name="bin/build"/>
+ <target name="package" depends="bootstrap.package">
+ <mkdir dir="${target.deliverables.dir}/parts"/>
+ <move file="${target.dir}/bootstrap/part.xml"
+
toFile="${target.deliverables.dir}/parts/${project.name}-${project.version}.part"/>
+ <move file="${target.dir}/bootstrap/part.link"
+ toFile="${target.deliverables.dir}/parts/${project.name}.part.link"/>
+ </target>
+
+ <target name="install" depends="bootstrap.install">
+ <mkdir dir="${dpml.system}/bin"/>
+ <copy todir="${dpml.system}/bin" preservelastmodified="true"
overwrite="true">
+ <fileset dir="target/bin">
+ <include name="build"/>
+ <include name="build.lap"/>
+ <include name="build.policy"/>
</fileset>
</copy>
+ <copy todir="${dpml.system}/bin" preservelastmodified="true"
overwrite="true" filtering="false">
+ <fileset dir="etc/bin">
+ <include name="build.exe"/>
+ </fileset>
+ </copy>
<chmod perm="755">
<fileset dir="${dpml.system}/bin">
<include name="build"/>
@@ -22,12 +59,14 @@
</chmod>
</target>

- <target name="bin" depends="standard.install"
unless="builder.exe.available">
+ <!--
+ <target name="bin" depends="bootstrap.install"
unless="builder.exe.available">
<copy todir="${dpml.system}" preservelastmodified="true">
- <fileset dir="target">
- <include name="bin/build.exe"/>
+ <fileset dir="${basedir}/etc/bin">
+ <include name="build.exe"/>
</fileset>
</copy>
</target>
-
+ -->
+
</project>

Deleted: trunk/main/depot/build/build.xml
===================================================================
--- trunk/main/depot/build/build.xml 2007-02-08 23:30:11 UTC (rev 1817)
+++ trunk/main/depot/build/build.xml 2007-02-08 23:31:25 UTC (rev 1818)
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<project name="dpml-library-console" default="install" basedir="."
- xmlns:transit="antlib:net.dpml.transit"
- xmlns:x="dpml:depot" >
-
- <transit:import uri="local:template:dpml/tools/standard"/>
-
-</project>

Modified: trunk/main/depot/build/etc/bin/build
===================================================================
--- trunk/main/depot/build/etc/bin/build 2007-02-08 23:30:11 UTC (rev
1817)
+++ trunk/main/depot/build/etc/bin/build 2007-02-08 23:31:25 UTC (rev
1818)
@@ -2,7 +2,7 @@
# Copyright 2005-2006 Stephen J. McConnell
#

-BUILD_JVM_OPTS="-Ddpml.transit.include.tools=true
-Ddpml.depot.application=dpml.builder"
+BUILD_JVM_OPTS="-Ddpml.transit.include.tools=true
-Ddpml.depot.application=link:part:dpml/depot/dpml-depot-build"

if [ "$DEPOT_JVM_OPTS" = "" ] ; then
DEPOT_JVM_OPTS=$BUILD_JVM_OPTS

Modified: trunk/main/depot/build/etc/bin/build.lap
===================================================================
--- trunk/main/depot/build/etc/bin/build.lap 2007-02-08 23:30:11 UTC (rev
1817)
+++ trunk/main/depot/build/etc/bin/build.lap 2007-02-08 23:31:25 UTC (rev
1818)
@@ -1,17 +1,19 @@
#
# This file contains the runtime configuration of the Janel java launcher
application.
-# Copyright 2005-2006 Stephen J. McConnell
+# Copyright 2005-2007 Stephen J. McConnell
#

--Ddpml.transit.include.tools=true
--Djava.system.class.loader=net.dpml.lang.SystemClassLoader
--Djava.security.policy=${env.DPML_HOME}\share\bin\security.policy
+janel.java.bundle=require_sdk
+janel.main.class=dpml.util.Main
+janel.min.java.version=1.6.0
+janel.sysprop.process.id=true
+-Djava.ext.dirs=${env.DPML_HOME}\share\lib\ext
-Djava.endorsed.dirs=${env.DPML_HOME}\share\lib\endorsed
--Ddpml.depot.application=dpml.builder
--Djava.protocol.handler.pkgs=net.dpml.transit
+-Djava.system.class.loader=dpml.util.SystemClassLoader
+-Djava.security.policy=${env.DPML_HOME}\share\bin\build.policy
+-Djava.protocol.handler.pkgs=dpml.transit
+-Djava.rmi.server.RMIClassLoaderSpi=dpml.util.FederatingClassLoader
-Dcom.sun.management.jmxremote
-janel.main.class=net.dpml.depot.Main
-janel.min.java.version=1.4.0
-janel.classpath.jars.dir=${env.DPML_HOME}\share\lib
-janel.sysprop.process.id=true
-janel.java.bundle=require_sdk
+-Ddpml.class.path=link:jar:dpml/lang/dpml-lang-part
+-Ddpml.transit.include.tools=true
+-Ddpml.depot.application=link:part:dpml/depot/dpml-depot-build

Added: trunk/main/depot/build/etc/bin/build.policy
===================================================================
--- trunk/main/depot/build/etc/bin/build.policy 2007-02-08 23:30:11 UTC (rev
1817)
+++ trunk/main/depot/build/etc/bin/build.policy 2007-02-08 23:31:25 UTC (rev
1818)
@@ -0,0 +1,4 @@
+grant {
+ permission java.security.AllPermission;
+};
+

Added: trunk/main/depot/build/etc/bootstrap/part.link
===================================================================
--- trunk/main/depot/build/etc/bootstrap/part.link 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/build/etc/bootstrap/part.link 2007-02-08 23:31:25
UTC (rev 1818)
@@ -0,0 +1 @@
+artifact:part:@PROJECT-GROUP@/@PROJECT-NAME@#@PROJECT-VERSION@
\ No newline at end of file

Added: trunk/main/depot/build/etc/bootstrap/part.xml
===================================================================
--- trunk/main/depot/build/etc/bootstrap/part.xml 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/build/etc/bootstrap/part.xml 2007-02-08 23:31:25
UTC (rev 1818)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<part xmlns="dpml:part">
+
+ <info title="Depot Build Tool">
+ <description>
+ Depot Build CLI Handler.
+ </description>
+ </info>
+
+ <component xmlns="dpml:metro" type="dpml.build.Main"
+ handler="net.dpml.runtime.ComponentStrategyHandler"/>
+
+ <classpath>
+ <private>
+ <uri>artifact:jar:dpml/transit/dpml-transit-main#BOOTSTRAP</uri>
+ <uri>artifact:jar:dpml/lang/dpml-lang-part#BOOTSTRAP</uri>
+ <uri>artifact:jar:dpml/depot/dpml-depot-library#BOOTSTRAP</uri>
+ <uri>artifact:jar:dpml/util/dpml-util-cli#BOOTSTRAP</uri>
+ <uri>artifact:jar:@PROJECT-GROUP@/@PROJECT-NAME@#BOOTSTRAP</uri>
+ </private>
+ </classpath>
+
+</part>

Added: trunk/main/depot/build/etc/component.xml
===================================================================
--- trunk/main/depot/build/etc/component.xml 2007-02-08 23:30:11 UTC (rev
1817)
+++ trunk/main/depot/build/etc/component.xml 2007-02-08 23:31:25 UTC (rev
1818)
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<component xmlns="dpml:metro" name="build" type="dpml.build.Main"/>

Added: trunk/main/depot/build/project.xml
===================================================================
--- trunk/main/depot/build/project.xml 2007-02-08 23:30:11 UTC (rev 1817)
+++ trunk/main/depot/build/project.xml 2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="dpml:library" name="dpml-depot-build">
+
+ <info title="DPML Depot Build Tool">
+ <description>Multi-project build automation tool.</description>
+ </info>
+
+ <types>
+ <type id="jar"/>
+ <type id="part" alias="true" source="target/component.xml"/>
+ </types>
+
+ <dependencies>
+ <runtime>
+ <include ref="dpml/lang/dpml-lang-part"/>
+ <include ref="dpml/depot/dpml-depot-library"/>
+ <include ref="dpml/util/dpml-util-cli"/>
+ </runtime>
+ <test>
+ <include ref="org/apache/ant/ant-junit"/>
+ </test>
+ </dependencies>
+
+ <filters>
+ <feature token="DEPOT-BUILDER-URI" ref="dpml/depot/dpml-depot-builder"
id="uri" type="part" alias="true"/>
+ </filters>
+
+</project>

Copied: trunk/main/depot/build/src/main/dpml (from rev 1789,
trunk/main/depot/build/src/main/net/dpml)

Added: trunk/main/depot/build/src/main/dpml/build/BuildError.java
===================================================================
--- trunk/main/depot/build/src/main/net/dpml/build/BuildError.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/build/src/main/dpml/build/BuildError.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.build;
+
+/**
+ * A BuilderError is thrown if an error occurs while attempting to establish
a plugin builder..
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class BuildError extends Error
+{
+ /**
+ * Creation of a new BuilderError.
+ * @param message the exception message
+ * @param cause the causal excetion
+ */
+ public BuildError( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+}

Added: trunk/main/depot/build/src/main/dpml/build/Builder.java
===================================================================
--- trunk/main/depot/build/src/main/net/dpml/build/Builder.java 2006-11-30
21:08:46 UTC (rev 1789)
+++ trunk/main/depot/build/src/main/dpml/build/Builder.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2005-2007 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.build;
+
+import dpml.library.Resource;
+
+/**
+ * A Builder is an interface implementated by a plugin that handles the
building of
+ * a project.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public interface Builder
+{
+ /**
+ * Build a resource.
+ *
+ * @param resource the resource to build
+ * @param targets build target names
+ * @return the success status of the build
+ * @exception Exception if a builder implementation error occurs
+ */
+ boolean build( Resource resource, String[] targets ) throws Exception;
+
+}

Added: trunk/main/depot/build/src/main/dpml/build/Main.java
===================================================================
--- trunk/main/depot/build/src/main/net/dpml/build/Main.java 2006-11-30
21:08:46 UTC (rev 1789)
+++ trunk/main/depot/build/src/main/dpml/build/Main.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -0,0 +1,736 @@
+/*
+ * Copyright 2005-2007 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.build;
+
+import dpml.cli.Option;
+import dpml.cli.Group;
+import dpml.cli.CommandLine;
+import dpml.cli.commandline.Parser;
+import dpml.cli.util.HelpFormatter;
+import dpml.cli.OptionException;
+import dpml.cli.DisplaySetting;
+import dpml.cli.builder.ArgumentBuilder;
+import dpml.cli.builder.GroupBuilder;
+import dpml.cli.builder.DefaultOptionBuilder;
+import dpml.cli.builder.CommandBuilder;
+import dpml.cli.option.PropertyOption;
+import dpml.cli.validation.URIValidator;
+
+import dpml.build.Builder;
+
+import dpml.library.impl.DefaultLibrary;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Hashtable;
+import java.util.Set;
+import java.util.EnumSet;
+import java.util.Collections;
+
+import javax.tools.Tool;
+import javax.lang.model.SourceVersion;
+
+import static net.dpml.annotation.LifestylePolicy.SINGLETON;
+
+import net.dpml.lang.Strategy;
+import net.dpml.lang.ServiceRegistry;
+import net.dpml.lang.SimpleServiceRegistry;
+
+import dpml.library.Module;
+import dpml.library.Resource;
+import dpml.library.Type;
+import dpml.library.Classifier;
+import dpml.library.Scope;
+import dpml.library.Library;
+
+import net.dpml.util.Logger;
+
+/**
+ * Tool providing project info listing and supports delegation of project
+ * building to a builder plugin.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class Main implements Tool
+{
+ //
------------------------------------------------------------------------
+ // static
+ //
------------------------------------------------------------------------
+
+ private static final URI BUILD_IMPLEMENTATION_URI;
+
+ //
------------------------------------------------------------------------
+ // state
+ //
------------------------------------------------------------------------
+
+ private final Logger m_logger;
+ private final DefaultLibrary m_library;
+ private final Map m_map = new Hashtable();
+
+ private boolean m_verbose;
+ private boolean m_expand = false;
+
+ //
------------------------------------------------------------------------
+ // constructors
+ //
------------------------------------------------------------------------
+
+ /**
+ * Builder establishment. System property have already been assigned
+ * to the current jvm by depot.
+ *
+ * @param logger the assigned logging channel
+ * @exception Exception if the build fails
+ */
+ public Main( Logger logger ) throws Exception
+ {
+ m_logger = logger;
+ m_library = new DefaultLibrary( logger );
+ }
+
+ //
------------------------------------------------------------------------
+ // implementation
+ //
------------------------------------------------------------------------
+
+ /**
+ * Return the source versions supported by this tool.
+ * @return the set of source java versions
+ */
+ public Set<SourceVersion> getSourceVersions()
+ {
+ return Collections.unmodifiableSet(
+ EnumSet.range(
+ SourceVersion.RELEASE_0,
+ SourceVersion.latest() ) );
+ }
+
+ /**
+ * Run the build tool.
+ * @param in the input stream
+ * @param out the output stream
+ * @param err the error stream
+ * @param arguments the tool arguments
+ */
+ public int run( InputStream in, OutputStream out, OutputStream err,
String... arguments )
+ {
+ try
+ {
+ return execute( arguments );
+ }
+ catch( Throwable e )
+ {
+ m_logger.error( "Build error.", e );
+ return -1;
+ }
+ }
+
+ private int execute( String... args ) throws Exception
+ {
+ if( m_logger.isTraceEnabled() )
+ {
+ m_logger.trace( "Initializing builder with " + args.length + "
args." );
+ for( String arg : args )
+ {
+ m_logger.trace( "\t" + arg );
+ }
+ }
+
+ Thread.currentThread().setContextClassLoader(
Builder.class.getClassLoader() );
+
+ CommandLine line = getCommandLine( args );
+ m_verbose = line.hasOption( VERBOSE_OPTION );
+
+ // setup the build version
+
+ if( line.hasOption( VERSION_OPTION ) )
+ {
+ String version = (String) line.getValue( VERSION_OPTION,
"SNAPSHOT" );
+ System.setProperty( "build.signature", version );
+ if( m_verbose )
+ {
+ m_logger.info( "Setting version to: " + version );
+ }
+ }
+
+ if( line.hasOption( DECIMAL_OPTION ) )
+ {
+ System.setProperty( Resource.DECIMAL_VERSIONING_KEY, "true" );
+ if( m_verbose )
+ {
+ m_logger.info( "Enabling decimal versioning." );
+ }
+ }
+
+ try
+ {
+ if( line.hasOption( HELP_OPTION ) )
+ {
+ processHelp();
+ return 0;
+ }
+ else
+ {
+ if( line.hasOption( LIST_OPTION ) )
+ {
+ m_expand = line.hasOption( EXPAND_OPTION );
+ Resource[] resources = getTargetSelection( line );
+ if( resources.length == 0 )
+ {
+ m_logger.info( "Empty selection." );
+ return 0;
+ }
+ else
+ {
+ list( resources );
+ return 0;
+ }
+ }
+ else
+ {
+ Resource[] resources = getSelection( line );
+ if( resources.length == 0 )
+ {
+ m_logger.error( "Empty selection." );
+ return -1;
+ }
+ return process( line, resources );
+ }
+ }
+ }
+ catch( OptionException e )
+ {
+ m_logger.error( e.getMessage() );
+ return -1;
+ }
+ }
+
+ private CommandLine getCommandLine( String[] args ) throws Exception
+ {
+ Parser parser = new Parser();
+ parser.setGroup( COMMAND_GROUP );
+ return parser.parse( args );
+ }
+
+ /**
+ * Resolve the project selection taking into account any overriding -s
+ * selection option, the -c switch, or in the absence of a selction, the
+ * implicit slection relative to the current working directory.
+ *
+ * @param line the commandline
+ * @return the resolved array of resources sorted relative to build
sequence
+ */
+ private Resource[] getSelection( CommandLine line ) throws Exception
+ {
+ ArrayList<Resource> list = new ArrayList<Resource>();
+ Resource[] targets = getTargetSelection( line );
+ for( int i=0; i<targets.length; i++ )
+ {
+ Resource project = targets[i];
+ if( Classifier.LOCAL.equals( project.getClassifier() ) )
+ {
+ list.add( project );
+ }
+ }
+ return list.toArray( new Resource[ list.size() ] );
+ }
+
+ /**
+ * Get the base selection and check if the consumer switch is present and
+ * if so build the consumers list from the selection list.
+ *
+ * @param line the commandline
+ * @return the array of projects in build order
+ */
+ private Resource[] getTargetSelection( CommandLine line ) throws
Exception
+ {
+ Resource[] resources = getBaseSelection( line );
+ if( resources.length == 0 )
+ {
+ return resources;
+ }
+ boolean flag = line.hasOption( CONSUMERS_OPTION );
+ if( flag )
+ {
+ if( resources.length != 1 )
+ {
+ final String error =
+ "Consumer resolution against a multi-element selection is
not supported.";
+ getLogger().error( error );
+ return new Resource[0];
+ }
+ else
+ {
+ Resource resource = resources[0];
+ return resource.getConsumers( true, true );
+ }
+ }
+ else
+ {
+ return resources;
+ }
+ }
+
+ /**
+ * Get the set of projects taking into consideration either the
+ * overriding selection option or the base directory if no selection
specificed.
+ *
+ * @param line the commandline
+ * @return the array of projects in build order
+ */
+ private Resource[] getBaseSelection( CommandLine line ) throws Exception
+ {
+ String selection = (String) line.getValue( SELECT_OPTION, null );
+ if( null != selection )
+ {
+ getLogger().debug( "parsing selection: " + selection );
+ Resource[] resources = m_library.select( selection, false, true
);
+ getLogger().debug( "selection: " + resources.length );
+ return resources;
+ }
+ else
+ {
+ String work = System.getProperty( "user.dir" );
+ getLogger().debug( "resolving selection in: " + work );
+ File file = new File( work ).getCanonicalFile();
+ Resource[] resources = m_library.select( file );
+ return resources;
+ }
+ }
+
+ /**
+ * Build the supplied set of projects. If a build filure occurs then
+ * abort the build sequence and exit.
+ *
+ * @param line the commandline
+ * @param resources the sorted sequence of projects to build
+ * @return the exit value
+ */
+ private int process( CommandLine line, Resource[] resources )
+ {
+ boolean validation = line.hasOption( VALIDATE_OPTION );
+ if( validation )
+ {
+ System.setProperty( "project.validation.enabled", "true" );
+ }
+
+ URI uri = (URI) line.getValue( BUILDER_URI_OPTION,
BUILD_IMPLEMENTATION_URI );
+
+
+ ServiceRegistry registry =
+ new SimpleServiceRegistry(
+ m_logger,
+ m_library,
+ new Boolean( m_verbose ) );
+
+ Strategy strategy = loadBuilderStrategy( registry, uri );
+ Builder builder = strategy.getInstance( Builder.class );
+
+ if( resources.length > 1 )
+ {
+ StringBuffer buffer =
+ new StringBuffer( "Initiating build sequence: (" +
resources.length + ")\n" );
+ for( int i=0; i<resources.length; i++ )
+ {
+ Resource resource = resources[i];
+ buffer.append( "\n (" + ( i+1 ) + ")\t" +
resource.getResourcePath() );
+ }
+ buffer.append( "\n" );
+ getLogger().info( buffer.toString() );
+ }
+
+ List<?> list = line.getValues( TARGETS );
+ String[] targets = (String[]) list.toArray( new String[ list.size()
] );
+ for( int i=0; i<resources.length; i++ )
+ {
+ Resource resource = resources[i];
+ try
+ {
+ boolean success = builder.build( resource, targets );
+ if( !success )
+ {
+ return -1;
+ }
+ }
+ catch( Throwable e )
+ {
+ System.out.println( "# BUILD: " + e.toString() );
+ final String error =
+ "Unexpected error while building project ["
+ + resource.getResourcePath()
+ + "] under the basedir ["
+ + resource.getBaseDir()
+ + "].";
+ getLogger().error( error, e );
+ return -1;
+ }
+ }
+ return 0;
+ }
+
+ private Strategy loadBuilderStrategy( final ServiceRegistry registry,
final URI uri )
+ {
+ try
+ {
+ ClassLoader classloader = Builder.class.getClassLoader();
+ return Strategy.load( classloader, registry, uri, null );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Internal error while attempting to load the builder plugin
from the uri ["
+ + uri
+ + "].";
+ throw new BuildError( error, e );
+ }
+ }
+
+ /**
+ * Build the supplied set of projects. If a build filure occurs then
+ * abort the build sequence and exit.
+ *
+ * @param resources the sorted sequence of prouject to build
+ * @exception Exception if an error occurs
+ */
+ private void list( Resource[] resources ) throws Exception
+ {
+ if( resources.length == 1 )
+ {
+ Resource resource = resources[0];
+ if( resource instanceof Module )
+ {
+ listModule( (Module) resource );
+ }
+ else
+ {
+ listResource( resource );
+ }
+ }
+ else
+ {
+ listResources( resources );
+ }
+ }
+
+ private void listModule( Module module ) throws Exception
+ {
+ print( "Listing module [" + module.getResourcePath() + "]\n" );
+ listResource( " ", module, 0 );
+ print( "" );
+ }
+
+ private void listResource( Resource project ) throws Exception
+ {
+ print( "Listing project: " + project.getResourcePath() + "\n" );
+ listResource( " ", project, 0 );
+ print( "" );
+ }
+
+ private void listResources( Resource[] resources ) throws Exception
+ {
+ print( "Selection: [" + resources.length + "]\n" );
+ for( int i=0; i<resources.length; i++ )
+ {
+ Resource resource = resources[i];
+ String label = getLabel( i+1 );
+ print( label + resource );
+ }
+ print( "" );
+ }
+
+
+ private void listResource( String pad, Resource resource, int n ) throws
Exception
+ {
+ if( n > 0 )
+ {
+ print( "\n[" + n + "] " + resource );
+ }
+ else
+ {
+ print( "\n" + resource );
+ }
+ print( "" );
+ if( null != resource.getVersion() )
+ {
+ print( pad + "version: " + resource.getVersion() );
+ }
+ print( pad + "basedir: " + resource.getBaseDir() );
+ String p = pad + " ";
+ Type[] types = resource.getTypes();
+ if( types.length > 0 )
+ {
+ print( pad + "types: (" + types.length + ")" );
+ for( int i=0; i<types.length; i++ )
+ {
+ Type type = types[i];
+ print( p + type.getID() );
+ }
+ }
+
+ Resource[] resources = resource.getProviders( Scope.BUILD, m_expand,
true );
+ if( resources.length > 0 )
+ {
+ print( pad + "build phase providers: (" + resources.length + ")"
);
+ for( int i=0; i<resources.length; i++ )
+ {
+ Resource res = resources[i];
+ print( p + res );
+ }
+ }
+ resources = resource.getProviders( Scope.RUNTIME, m_expand, true );
+ if( resources.length > 0 )
+ {
+ print( pad + "runtime providers: (" + resources.length + ")" );
+ for( int i=0; i<resources.length; i++ )
+ {
+ Resource res = resources[i];
+ print( p + res );
+ }
+ }
+ resources = resource.getProviders( Scope.TEST, m_expand, true );
+ if( resources.length > 0 )
+ {
+ print( pad + "test providers: (" + resources.length + ")" );
+ for( int i=0; i<resources.length; i++ )
+ {
+ Resource res = resources[i];
+ print( p + res );
+ }
+ }
+ }
+
+ static void print( String message )
+ {
+ System.out.println( message );
+ }
+
+ private static String getLabel( int n )
+ {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append( " [" + n );
+ buffer.append( "]" );
+ buffer.append( " " );
+ String tag = buffer.toString();
+ return tag.substring( 0, 7 ) + " ";
+ }
+
+ /**
+ * List general command help to the console.
+ * @exception IOException if an I/O error occurs
+ */
+ @SuppressWarnings( "unchecked" )
+ private void processHelp() throws IOException
+ {
+ HelpFormatter formatter = new HelpFormatter(
+ HelpFormatter.DEFAULT_GUTTER_LEFT,
+ HelpFormatter.DEFAULT_GUTTER_CENTER,
+ HelpFormatter.DEFAULT_GUTTER_RIGHT,
+ 100 );
+
+ formatter.getDisplaySettings().add(
DisplaySetting.DISPLAY_GROUP_OUTER );
+ formatter.getDisplaySettings().add(
DisplaySetting.DISPLAY_PROPERTY_OPTION );
+ formatter.getDisplaySettings().add(
DisplaySetting.DISPLAY_ARGUMENT_BRACKETED );
+
+ formatter.getFullUsageSettings().add(
DisplaySetting.DISPLAY_OPTIONAL );
+ formatter.getFullUsageSettings().add(
DisplaySetting.DISPLAY_GROUP_OUTER );
+ formatter.getFullUsageSettings().add(
DisplaySetting.DISPLAY_PROPERTY_OPTION );
+ formatter.getFullUsageSettings().add(
DisplaySetting.DISPLAY_OPTIONAL );
+ formatter.getFullUsageSettings().add(
DisplaySetting.DISPLAY_ARGUMENT_BRACKETED );
+ formatter.getFullUsageSettings().remove(
DisplaySetting.DISPLAY_PARENT_CHILDREN );
+
+ formatter.getLineUsageSettings().add(
DisplaySetting.DISPLAY_PROPERTY_OPTION );
+ formatter.getLineUsageSettings().add(
DisplaySetting.DISPLAY_ARGUMENT_BRACKETED );
+ formatter.getLineUsageSettings().remove(
DisplaySetting.DISPLAY_PARENT_CHILDREN );
+ formatter.getLineUsageSettings().remove(
DisplaySetting.DISPLAY_GROUP_EXPANDED );
+
+ formatter.setGroup( COMMAND_GROUP );
+ formatter.setShellCommand( "build" );
+ formatter.print();
+ }
+
+ private Logger getLogger()
+ {
+ return m_logger;
+ }
+
+ private static final DefaultOptionBuilder OPTION_BUILDER = new
DefaultOptionBuilder();
+ private static final ArgumentBuilder ARGUMENT_BUILDER = new
ArgumentBuilder();
+ private static final GroupBuilder GROUP_BUILDER = new GroupBuilder();
+ private static final CommandBuilder COMMAND_BUILDER = new
CommandBuilder();
+ private static final PropertyOption PROPERTY_OPTION = new
PropertyOption();
+
+ private static final Option HELP_OPTION =
+ OPTION_BUILDER
+ .withShortName( "help" )
+ .withShortName( "h" )
+ .withDescription( "List command help." )
+ .withRequired( false )
+ .create();
+
+ private static final Option SELECT_OPTION =
+ OPTION_BUILDER
+ .withShortName( "select" )
+ .withShortName( "s" )
+ .withDescription( "Build selected project(s)." )
+ .withRequired( false )
+ .withArgument(
+ ARGUMENT_BUILDER
+ .withDescription( "Project." )
+ .withName( "pattern" )
+ .withMinimum( 1 )
+ .withMaximum( 1 )
+ .create() )
+ .create();
+
+ private static final Option VERBOSE_OPTION =
+ OPTION_BUILDER
+ .withShortName( "verbose" )
+ .withShortName( "v" )
+ .withDescription( "Enable verbose mode." )
+ .withRequired( false )
+ .create();
+
+ private static final Option LIST_OPTION =
+ OPTION_BUILDER
+ .withShortName( "list" )
+ .withShortName( "l" )
+ .withDescription( "List selected project(s)." )
+ .withRequired( false )
+ .withArgument(
+ ARGUMENT_BUILDER
+ .withDescription( "Project." )
+ .withName( "pattern" )
+ .withMinimum( 0 )
+ .withMaximum( 1 )
+ .create() )
+ .create();
+
+ private static final Option EXPAND_OPTION =
+ OPTION_BUILDER
+ .withShortName( "expand" )
+ .withShortName( "e" )
+ .withDescription( "Expand dependencies." )
+ .withRequired( false )
+ .create();
+
+ private static final Option CONSUMERS_OPTION =
+ OPTION_BUILDER
+ .withShortName( "consumers" )
+ .withShortName( "c" )
+ .withDescription( "Consumer switch." )
+ .withRequired( false )
+ .create();
+
+ private static final Option VALIDATE_OPTION =
+ OPTION_BUILDER
+ .withShortName( "validate" )
+ .withDescription( "Enable deliverable validation." )
+ .withRequired( false )
+ .create();
+
+ private static final Option VERSION_OPTION =
+ OPTION_BUILDER
+ .withShortName( "version" )
+ .withDescription( "Build version." )
+ .withRequired( false )
+ .withArgument(
+ ARGUMENT_BUILDER
+ .withDescription( "Created artifact version." )
+ .withName( "version" )
+ .withMinimum( 1 )
+ .withMaximum( 1 )
+ .create() )
+ .create();
+
+ private static final Option DECIMAL_OPTION =
+ OPTION_BUILDER
+ .withShortName( "decimal" )
+ .withDescription( "Enable decimal versioning." )
+ .withRequired( false )
+ .create();
+
+ private static final Option BUILDER_URI_OPTION =
+ OPTION_BUILDER
+ .withShortName( "plugin" )
+ .withDescription( "Default builder plugin uri." )
+ .withRequired( false )
+ .withArgument(
+ ARGUMENT_BUILDER
+ .withDescription( "Artifact reference." )
+ .withName( "artifact" )
+ .withMinimum( 1 )
+ .withMaximum( 1 )
+ .withValidator( new URIValidator() )
+ .create() )
+ .create();
+
+ private static final Option TARGETS =
+ ARGUMENT_BUILDER
+ .withName( "target" )
+ .create();
+
+ private static final Group LIST_GROUP =
+ GROUP_BUILDER
+ .withMinimum( 0 )
+ .withOption( LIST_OPTION )
+ .withOption( EXPAND_OPTION )
+ .withOption( CONSUMERS_OPTION )
+ .create();
+
+ private static final Group BUILD_GROUP =
+ GROUP_BUILDER
+ .withMinimum( 0 )
+ .withOption( SELECT_OPTION )
+ .withOption( CONSUMERS_OPTION )
+ .withOption( VERBOSE_OPTION )
+ .withOption( BUILDER_URI_OPTION )
+ .withOption( VERSION_OPTION )
+ .withOption( DECIMAL_OPTION )
+ .withOption( VALIDATE_OPTION )
+ .withOption( PROPERTY_OPTION )
+ .create();
+
+ private static final Group COMMAND_GROUP =
+ GROUP_BUILDER
+ .withName( "options" )
+ .withOption( HELP_OPTION )
+ .withOption( LIST_GROUP )
+ .withOption( BUILD_GROUP )
+ .withOption( TARGETS )
+ .create();
+
+ static
+ {
+ try
+ {
+ BUILD_IMPLEMENTATION_URI = new URI( "@DEPOT-BUILDER-URI@" );
+ }
+ catch( Exception e )
+ {
+ throw new RuntimeException( "will not happen", e );
+ }
+ }
+
+}
+

Modified: trunk/main/depot/build.xml
===================================================================
--- trunk/main/depot/build.xml 2007-02-08 23:30:11 UTC (rev 1817)
+++ trunk/main/depot/build.xml 2007-02-08 23:31:25 UTC (rev 1818)
@@ -17,9 +17,8 @@
limitations under the License.
-->

-<project name="dpml-depot" default="install" basedir="."
- xmlns:transit="antlib:net.dpml.transit" >
+<project name="dpml-depot" default="install" basedir="."
xmlns:x="antlib:dpml.tools" >

- <transit:import uri="local:template:dpml/tools/standard"/>
+ <x:import uri="local:template:dpml/tools/standard"/>

</project>

Modified: trunk/main/depot/library/bootstrap.properties
===================================================================
--- trunk/main/depot/library/bootstrap.properties 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/library/bootstrap.properties 2007-02-08 23:31:25
UTC (rev 1818)
@@ -1,7 +1,4 @@

project.group = dpml/depot
-project.name = dpml-library
+project.name = dpml-depot-library
project.test.fork = true
-junit.version = 3.8.1
-junit.filename = junit-${junit.version}.jar
-junit.uri = artifact:jar:junit/junit#${junit.version}

Modified: trunk/main/depot/library/bootstrap.xml
===================================================================
--- trunk/main/depot/library/bootstrap.xml 2007-02-08 23:30:11 UTC (rev
1817)
+++ trunk/main/depot/library/bootstrap.xml 2007-02-08 23:31:25 UTC (rev
1818)
@@ -1,30 +1,22 @@
<?xml version="1.0" encoding="UTF-8" ?>

-<project name="dpml-library" default="install" basedir="."
- xmlns:transit="antlib:net.dpml.transit" >
+<project name="dpml-depot-library" default="install" basedir=".">

<property file="${basedir}/bootstrap.properties"/>
- <transit:import
file="${dpml.prefs}/dpml/transit/templates/bootstrap.template"/>
-
- <target name="init" depends="bootstrap.init">
- <property name="project.xsd.version" value="${project.version}"/>
- <filter token="MODULE-XSD-URI"
value="link:xsd:dpml/lang/dpml-module#1.0"/>
- <filter token="PART-XSD-URI" value="link:xsd:dpml/lang/dpml-part#1.0"/>
- <filter value="${junit.version}" token="JUNIT_VERSION"/>
- <filter value="${project.version}" token="PROJECT-VERSION"/>
- <filter value="link:part:dpml/depot/dpml-tools-builder"
token="ANT-BUILDER-URI"/>
- </target>
-
+ <property file="../../bootstrap.properties"/>
+
+ <property name="bootstrap.template"
location="${basedir}/../../bootstrap.xml"/>
+ <import file="${bootstrap.template}"/>
+
<target name="setup-path" depends="bootstrap.setup-path">
- <transit:get property="junit.path" uri="${junit.uri}"/>
- <transit:get property="transit.path"
uri="artifact:jar:dpml/transit/dpml-transit-main#BOOTSTRAP"/>
<path id="project.main.path">
<pathelement
location="${dpml.local.cache}/dpml/transit/jars/dpml-transit-main-BOOTSTRAP.jar"/>
+ <pathelement
location="${dpml.local.cache}/dpml/lang/jars/dpml-lang-part-BOOTSTRAP.jar"/>
<pathelement location="${target.classes.dir}"/>
</path>
<path id="project.test.path">
- <pathelement location="${junit.path}"/>
- <pathelement location="${transit.path}"/>
+ <path refid="project.main.path"/>
+ <pathelement
location="${dpml.local.cache}/junit/jars/${junit.filename}"/>
<pathelement
location="${target.deliverables.jars.dir}/${project.filename}"/>
</path>
</target>

Deleted: trunk/main/depot/library/build.xml
===================================================================
--- trunk/main/depot/library/build.xml 2007-02-08 23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/build.xml 2007-02-08 23:31:25 UTC (rev 1818)
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<project name="dpml-library" default="install" basedir="."
- xmlns:transit="antlib:net.dpml.transit"
- xmlns:x="dpml:depot" >
-
- <transit:import uri="local:template:dpml/tools/standard"/>
-
-</project>

Modified: trunk/main/depot/library/etc/data/ant/module.xml
===================================================================
--- trunk/main/depot/library/etc/data/ant/module.xml 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/ant/module.xml 2007-02-08 23:31:25
UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<module name="ant" version="1.6.5" xmlns="@MODULE-XSD-URI@">
+<module name="ant" version="1.6.5" xmlns="dpml:library">

<resource name="ant">
<types>

Modified: trunk/main/depot/library/etc/data/commons-cli/module.xml
===================================================================
--- trunk/main/depot/library/etc/data/commons-cli/module.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/commons-cli/module.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<module name="commons-cli" version="1.0" xmlns="@MODULE-XSD-URI@">
+<module xmlns="dpml:library" name="commons-cli" version="1.0">

<resource name="commons-cli">
<types>

Modified: trunk/main/depot/library/etc/data/dpml/module.xml
===================================================================
--- trunk/main/depot/library/etc/data/dpml/module.xml 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/dpml/module.xml 2007-02-08 23:31:25
UTC (rev 1818)
@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<module xmlns="@MODULE-XSD-URI@"
- xmlns:part="@PART-XSD-URI@"
+<module xmlns="dpml:library"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
name="dpml" basedir=".." >

<properties>
- <property name="project.publisher.name" value="Digital Product Meta
Library"/>
+ <property name="project.publisher.name" value="Digital Product
Management Laboratory"/>
<property name="project.specification.vendor"
value="${project.publisher.name}"/>
<property name="project.implementation.vendor"
value="${project.publisher.name}"/>
<property name="project.implementation.vendor-id" value="net.dpml"/>
@@ -158,7 +157,7 @@
<property name="project.template" value="${basedir}/builder.xml"/>
</properties>
<types>
- <part:plugin alias="true" class="net.dpml.lang.PartManager"/>
+ <type id="part" source="target/plugin.xml"/>
<type id="jar"/>
</types>
<dependencies>
@@ -218,7 +217,7 @@
</properties>
<types>
<type id="jar"/>
- <part:plugin
class="net.dpml.metro.runtime.edit.CompositionEditorFactory"/>
+ <type id="part" source="target/plugin.xml"/>
</types>
<dependencies>
<runtime>
@@ -234,7 +233,7 @@
</properties>
<types>
<type id="jar"/>
- <part:plugin alias="true"
class="net.dpml.metro.runtime.CompositionController"/>
+ <type id="part" source="target/plugin.xml"/>
</types>
<dependencies>
<runtime>
@@ -254,7 +253,7 @@
</properties>
<types>
<type id="jar"/>
- <part:resource urn="dpml:metro"
path="net/dpml/composition/tools/antlib.xml"/>
+ <type id="part" source="target/plugin.xml"/>
</types>
<dependencies>
<runtime>
@@ -324,7 +323,7 @@
</properties>
<types>
<type id="jar"/>
- <part:plugin alias="true"
class="net.dpml.library.impl.BuildPlugin"/>
+ <type id="part" source="target/plugin.xml"/>
</types>
<dependencies>
<runtime>
@@ -343,7 +342,7 @@
</properties>
<types>
<type id="jar"/>
- <part:plugin alias="true"
class="net.dpml.tools.impl.StandardBuilder"/>
+ <type id="part" source="target/plugin.xml"/>
</types>
<dependencies>
<runtime>

Modified: trunk/main/depot/library/etc/data/jgoodies/module.xml
===================================================================
--- trunk/main/depot/library/etc/data/jgoodies/module.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/jgoodies/module.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<module xmlns="@MODULE-XSD-URI@" name="jgoodies">
+<module xmlns="dpml:library" name="jgoodies">

<resource name="looks" version="1.1">
<types>

Modified: trunk/main/depot/library/etc/data/junit/module.xml
===================================================================
--- trunk/main/depot/library/etc/data/junit/module.xml 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/junit/module.xml 2007-02-08 23:31:25
UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<module xmlns="@MODULE-XSD-URI@" name="junit" version="3.8.1">
+<module xmlns="dpml:library" name="junit" version="3.8.1">

<resource name="junit">
<types>

Modified: trunk/main/depot/library/etc/data/library.xml
===================================================================
--- trunk/main/depot/library/etc/data/library.xml 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/library.xml 2007-02-08 23:31:25
UTC (rev 1818)
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<index xmlns="@MODULE-XSD-URI@"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+<index xmlns="dpml:library">

<properties>
- <property name="project.builder.uri"
value="link:part:dpml/tools/dpml-tools-builder"/>
+ <property name="project.builder.uri"
value="link:part:dpml/tools/dpml-depot-builder"/>
<property name="project.standard.template"
value="local:template:dpml/tools/standard"/>
<property name="project.template" value="${project.standard.template}"/>
</properties>

Added: trunk/main/depot/library/etc/data/logging.properties
===================================================================
--- trunk/main/depot/library/etc/data/logging.properties 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/logging.properties 2007-02-08
23:31:25 UTC (rev 1818)
@@ -0,0 +1,3 @@
+.level=INFO
+sun.rmi.level=INFO
+dpml.transit.level=INFO

Modified: trunk/main/depot/library/etc/data/samples/absolute.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/absolute.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/absolute.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<index xmlns="@MODULE-XSD-URI@" >
+<index xmlns="dpml:library" >

<module name="gov/nsa/acme">
<info/>

Modified: trunk/main/depot/library/etc/data/samples/anonymous.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/anonymous.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/anonymous.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<index xmlns="@MODULE-XSD-URI@">
+<index xmlns="dpml:library">

<properties>
- <property name="project.builder.uri"
value="link:plugin:dpml/tools/dpml-tools-builder"/>
+ <property name="project.builder.uri"
value="link:plugin:dpml/tools/dpml-depot-builder"/>
<property name="project.standard.template"
value="local:template:dpml/tools/standard"/>
<property name="project.template" value="${project.standard.template}"/>
</properties>

Modified: trunk/main/depot/library/etc/data/samples/duplicates.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/duplicates.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/duplicates.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,6 +1,5 @@
<?xml version="1.0"?>
-<index xmlns="@MODULE-XSD-URI@"
- xmlns:part="@PART-XSD-URI@">
+<index xmlns="dpml:library">

<module name="acme">
<resource name="widget">
@@ -9,7 +8,7 @@
<property name="pink" value="floyd"/>
<property name="alice" value="cooper"/>
</type>
- <part:plugin class="Widget"/>
+ <type id="part" source="strategy.xml"/>
</types>
</resource>
</module>
@@ -17,7 +16,7 @@
<module name="acme">
<resource name="gizmo">
<types>
- <part:plugin class="gizmo"/>
+ <type id="part" source="strategy.xml"/>
</types>
</resource>
</module>

Modified: trunk/main/depot/library/etc/data/samples/example-1.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/example-1.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/example-1.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,3 +1,3 @@
<?xml version="1.0"?>
-<index xmlns="@MODULE-XSD-URI@">
+<index xmlns="dpml:library">
</index>

Modified: trunk/main/depot/library/etc/data/samples/example-2.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/example-2.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/example-2.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<index xmlns="@MODULE-XSD-URI@">
+<index xmlns="dpml:library">

<properties>
<property name="foo" value="bar"/>

Modified: trunk/main/depot/library/etc/data/samples/example-3.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/example-3.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/example-3.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<index xmlns="@MODULE-XSD-URI@">
+<index xmlns="dpml:library">

<imports>
<import uri="link:xml:abc/def/import-1#1.0"/>

Modified: trunk/main/depot/library/etc/data/samples/example-4.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/example-4.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/example-4.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<index xmlns="@MODULE-XSD-URI@"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+<index xmlns="dpml:library"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>

<imports>
<import uri="link:module:junit"/>

Modified: trunk/main/depot/library/etc/data/samples/example-5.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/example-5.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/example-5.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<index xmlns="@MODULE-XSD-URI@"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+<index xmlns="dpml:library"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>

<imports>
<import uri="link:module:junit"/>

Modified: trunk/main/depot/library/etc/data/samples/example-6.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/example-6.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/example-6.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<index xmlns="@MODULE-XSD-URI@"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+<index xmlns="dpml:library"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>

<imports>
<import uri="link:module:junit"/>

Modified: trunk/main/depot/library/etc/data/samples/example-7.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/example-7.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/example-7.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<index xmlns="@MODULE-XSD-URI@"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+<index xmlns="dpml:library">

<imports>
<import uri="link:module:junit"/>

Modified: trunk/main/depot/library/etc/data/samples/example-8.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/example-8.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/example-8.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,7 +1,5 @@
<?xml version="1.0"?>
-<index xmlns="@MODULE-XSD-URI@"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
- xmlns:part="@PART-XSD-URI@">
+<index xmlns="dpml:library">

<imports>
<import uri="link:module:junit"/>
@@ -11,11 +9,11 @@
<module name="acme">
<resource name="widget">
<types>
- <type id="foo" xsi:type="GenericType">
+ <type id="foo">
<property name="pink" value="floyd"/>
<property name="alice" value="cooper"/>
</type>
- <part:plugin class="Widget"/>
+ <type id="part" source="target/plugin.xml" test="true"
alias="false"/>
</types>
</resource>
</module>

Modified: trunk/main/depot/library/etc/data/samples/filters.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/filters.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/filters.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,7 +1,5 @@
<?xml version="1.0"?>
-<index xmlns="@MODULE-XSD-URI@"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
- xmlns:part="@PART-XSD-URI@">
+<index xmlns="dpml:library">

<module name="acme">
<filters>

Modified: trunk/main/depot/library/etc/data/samples/info.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/info.xml 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/info.xml 2007-02-08 23:31:25
UTC (rev 1818)
@@ -1,7 +1,5 @@
<?xml version="1.0"?>
-<index xmlns="@MODULE-XSD-URI@"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
- xmlns:part="@PART-XSD-URI@">
+<index xmlns="dpml:library">

<module name="acme-1">
<info/>

Modified: trunk/main/depot/library/etc/data/samples/jar-type.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/jar-type.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/jar-type.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,7 +1,6 @@
<?xml version="1.0"?>

-<index xmlns="@MODULE-XSD-URI@"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+<index xmlns="dpml:library">

<module name="acme">
<project name="widget" basedir=".">

Modified: trunk/main/depot/library/etc/data/samples/properties.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/properties.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/properties.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<index xmlns="@MODULE-XSD-URI@">
+<index xmlns="dpml:library">

<module name="org">
<properties>

Modified: trunk/main/depot/library/etc/data/samples/widget.xml
===================================================================
--- trunk/main/depot/library/etc/data/samples/widget.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/samples/widget.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,2 +1,2 @@
<?xml version="1.0"?>
-<module xmlns="@MODULE-XSD-URI@" name="abc"/>
+<module xmlns="dpml:library" name="abc"/>

Modified: trunk/main/depot/library/etc/data/xstream/module.xml
===================================================================
--- trunk/main/depot/library/etc/data/xstream/module.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/library/etc/data/xstream/module.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<module xmlns="@MODULE-XSD-URI@" name="xstream" version="1.1">
+<module xmlns="dpml:library" name="xstream" version="1.1">

<resource name="xstream">
<types>

Added: trunk/main/depot/library/project.xml
===================================================================
--- trunk/main/depot/library/project.xml 2007-02-08 23:30:11 UTC (rev
1817)
+++ trunk/main/depot/library/project.xml 2007-02-08 23:31:25 UTC (rev
1818)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="dpml:library" name="dpml-depot-library">
+
+ <info title="DPML Project Management Library Implementation">
+ <description>Multi-project build automation tool.</description>
+ </info>
+
+ <types>
+ <type id="jar"/>
+ </types>
+
+ <dependencies>
+ <runtime>
+ <include ref="dpml/lang/dpml-lang-part"/>
+ </runtime>
+ <test>
+ <include ref="org/apache/ant/ant-junit"/>
+ </test>
+ </dependencies>
+
+ <filters>
+ <feature token="JUNIT_VERSION" ref="junit/junit" id="version"/>
+ <feature token="PROJECT_VERSION" id="version"/>
+ </filters>
+
+</project>

Copied: trunk/main/depot/library/src/main/dpml (from rev 1789,
trunk/main/depot/library/src/main/net/dpml)

Deleted: trunk/main/depot/library/src/main/dpml/library/Builder.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/Builder.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/Builder.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,38 +0,0 @@
-/*
- * Copyright 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.library;
-
-/**
- * A Builder is implementated by a plugin that handles the building of
- * a project.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public interface Builder
-{
- /**
- * Build a resource.
- * @param resource the resource to build
- * @param targets build target names
- * @return the success status of the build
- */
- public boolean build( Resource resource, String[] targets );
-
-}

Added: trunk/main/depot/library/src/main/dpml/library/Classifier.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/Classifier.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/Classifier.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2005 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.library;
+
+/**
+ * Resource classifier enumeration.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public enum Classifier
+{
+ /**
+ * Anonymous resources.
+ */
+ ANONYMOUS,
+
+ /**
+ * External resource.
+ */
+ EXTERNAL,
+
+ /**
+ * Local resources.
+ */
+ LOCAL;
+}

Deleted: trunk/main/depot/library/src/main/dpml/library/Data.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/Data.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/Data.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,37 +0,0 @@
-/*
- * Copyright 2006 Stephen J. McConnell.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.library;
-
-import org.w3c.dom.Element;
-
-/**
- * Declaration of a production criteria datatype.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public interface Data
-{
- /**
- * Return the production datatype.
- * @return the DOM element
- */
- Element getElement();
-
-}

Modified: trunk/main/depot/library/src/main/dpml/library/Dictionary.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/Dictionary.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/Dictionary.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,8 +16,10 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

+import java.util.Properties;
+
/**
* The Dictonary interface exposes operations dealing with named properties.
*
@@ -70,10 +72,16 @@
int getIntegerProperty( String key, int value );

/**
+ * Evaluate and expand any symbolic references in the supplied property
set.
+ * @param properties the properties to resolve
+ * @return the resolved properties
+ */
+ Properties resolveProperties( Properties properties );
+
+ /**
* Evaluate and expand any symbolic references in the supplied value.
* @param value the value to resolve
* @return the resolved value
*/
String resolve( String value );
-
}

Modified:
trunk/main/depot/library/src/main/dpml/library/DuplicateNameException.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/DuplicateNameException.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/DuplicateNameException.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

/**
* A DuplicateNameException is thrown when an attempt is made to duplicate

Modified: trunk/main/depot/library/src/main/dpml/library/Feature.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/Feature.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/Feature.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -16,13 +16,11 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

import java.io.File;

import net.dpml.lang.Version;
-import net.dpml.lang.Enum;
-
import net.dpml.transit.Artifact;

/**
@@ -31,142 +29,55 @@
* @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
* @version @PROJECT-VERSION@
*/
-public final class Feature extends Enum
+public enum Feature
{
- static final long serialVersionUID = 1L;
-
/**
* Resource name.
*/
- public static final Feature NAME = new Feature( "name" );
+ NAME,

/**
* Resource group.
*/
- public static final Feature GROUP = new Feature( "group" );
+ GROUP,

/**
* Resource version.
*/
- public static final Feature VERSION = new Feature( "version" );
+ VERSION,

/**
* Resource decimal version.
*/
- public static final Feature DECIMAL = new Feature( "decimal" );
+ DECIMAL,

/**
* Resource version.
*/
- public static final Feature URI = new Feature( "uri" );
+ URI,

/**
* Resource spec.
*/
- public static final Feature SPEC = new Feature( "spec" );
+ SPEC,

/**
* Resource path.
*/
- public static final Feature PATH = new Feature( "path" );
+ PATH,

/**
* Resource filename.
*/
- public static final Feature FILENAME = new Feature( "filename" );
+ FILENAME,

/**
* Project basedir.
*/
- public static final Feature BASEDIR = new Feature( "basedir" );
+ BASEDIR;

- /**
- * Array of scope enumeration values.
- */
- private static final Feature[] ENUM_VALUES =
- new Feature[]{NAME, GROUP, VERSION, DECIMAL, URI, SPEC, PATH,
FILENAME, BASEDIR};
-
- /**
- * Returns an array of activation enum values.
- * @return the activation policies array
- */
- public static Feature[] values()
- {
- return ENUM_VALUES;
- }

/**
- * Internal constructor.
- * @param label the enumeration label.
- * @param index the enumeration index.
- */
- private Feature( String label )
- {
- super( label );
- }
-
- /**
- * Return a string representation of the scope.
- * @return the string value
- */
- public String toString()
- {
- return getName().toUpperCase();
- }
-
- /**
- * Return a feature.
- * @param value the feature name
- * @return the feature
- * @exception IllegalArgumentException if the name if not a recognized
feature.
- */
- public static Feature parse( String value ) throws
IllegalArgumentException
- {
- if( value.equalsIgnoreCase( "name" ) )
- {
- return NAME;
- }
- else if( value.equalsIgnoreCase( "group" ) )
- {
- return GROUP;
- }
- else if( value.equalsIgnoreCase( "version" ) )
- {
- return VERSION;
- }
- else if( value.equalsIgnoreCase( "decimal" ) )
- {
- return DECIMAL;
- }
- else if( value.equalsIgnoreCase( "uri" ) )
- {
- return URI;
- }
- else if( value.equalsIgnoreCase( "spec" ) )
- {
- return SPEC;
- }
- else if( value.equalsIgnoreCase( "path" ) )
- {
- return PATH;
- }
- else if( value.equalsIgnoreCase( "filename" ) )
- {
- return FILENAME;
- }
- else if( value.equalsIgnoreCase( "basedir" ) )
- {
- return BASEDIR;
- }
- else
- {
- final String error =
- "Unrecognized feature argument [" + value + "]";
- throw new IllegalArgumentException( error );
- }
- }
-
- /**
* Return the value of a feature.
* @param resource the target resource
* @param feature the feature
@@ -211,27 +122,36 @@
throw new FeatureRuntimeException( error );
}

- if( feature.equals( Feature.NAME ) )
+ if( feature.equals( NAME ) )
{
- return resource.getName();
+ if( null != type )
+ {
+ String name = type.getName();
+ return getValue( name );
+ }
+ else
+ {
+ return resource.getName();
+ }
}
- else if( feature.equals( Feature.GROUP ) )
+ else if( feature.equals( GROUP ) )
{
return resource.getParent().getResourcePath();
}
- else if( feature.equals( Feature.VERSION ) )
+ else if( feature.equals( VERSION ) )
{
- String version = resource.getVersion();
- if( null == version )
+ if( null != type )
{
- return "";
+ String version = type.getVersion();
+ return getValue( version );
}
else
{
- return version;
+ String version = resource.getVersion();
+ return getValue( version );
}
}
- else if( feature.equals( Feature.DECIMAL ) )
+ else if( feature.equals( DECIMAL ) ) // <-- TODO, think about
decimal versus explicit version on types
{
Version version = resource.getDecimalVersion();
if( null == version )
@@ -243,11 +163,11 @@
return version.toString();
}
}
- else if( feature.equals( Feature.URI ) )
+ else if( feature.equals( URI ) )
{
return resolveURIFeature( resource, type, alias );
}
- else if( feature.equals( Feature.SPEC ) )
+ else if( feature.equals( SPEC ) ) // <-- TODO: what is this used for?
{
String path = resource.getResourcePath();
String version =resource.getVersion();
@@ -260,33 +180,28 @@
return path + "#" + version;
}
}
- else if( feature.equals( Feature.PATH ) )
+ else if( feature.equals( PATH ) ) // <!-- TODO: update for
Type/name/version/test
{
if( null == type )
{
final String error =
- "Type must be supplied in conjuction with the uri
feature.";
+ "Type must be supplied in conjuction with the a type.";
throw new FeatureRuntimeException( error );
}
- else
+
+ File file = type.getFile();
+ try
{
- String id = type.getID();
- Artifact artifact = resource.getArtifact( id );
- try
- {
- File cached =
- (File) artifact.toURL().getContent( new
Class[]{File.class} );
- return cached.getCanonicalPath();
- }
- catch( Exception e )
- {
- final String error =
- "Unable to resolve resource path.";
- throw new FeatureRuntimeException( error, e );
- }
+ return file.getCanonicalPath();
}
+ catch( Exception e )
+ {
+ final String error =
+ "Unexpected error while resolving resource type path [" +
file + "].";
+ throw new FeatureRuntimeException( error, e );
+ }
}
- else if( feature.equals( Feature.FILENAME ) )
+ else if( feature.equals( FILENAME ) ) // needs to be fixed
{
if( null == type )
{
@@ -294,29 +209,30 @@
"Type must be supplied in conjuction with the filename
feature.";
throw new IllegalArgumentException( error );
}
- String id = type.getID();
- return resource.getLayoutPath( id );
+ if( type.getTest() )
+ {
+ throw new IllegalArgumentException(
+ "Filename cannot be used in conjunction with a test type."
);
+ }
+ return type.getLayoutPath();
}
- else if( feature.equals( Feature.BASEDIR ) )
+ else if( feature.equals( BASEDIR ) )
{
File base = resource.getBaseDir();
if( null == base )
{
throw new IllegalArgumentException( "basedir" );
}
- else
+ try
{
- try
- {
- return base.getCanonicalPath();
- }
- catch( Exception e )
- {
- final String error =
- "Unexpected error while resolving project basedir [" +
base + "].";
- throw new FeatureRuntimeException( error, e );
- }
+ return base.getCanonicalPath();
}
+ catch( Exception e )
+ {
+ final String error =
+ "Unexpected error while resolving project basedir [" +
base + "].";
+ throw new FeatureRuntimeException( error, e );
+ }
}
else
{
@@ -326,12 +242,25 @@
}
}

+ private static String getValue( String value )
+ {
+ if( null != value )
+ {
+ return value;
+ }
+ else
+ {
+ return "";
+ }
+ }
+
private static String resolveURIFeature( Resource resource, Type type )
{
return resolveURIFeature( resource, type, false );
}

- private static String resolveURIFeature( Resource resource, Type type,
boolean alias )
+ private static String resolveURIFeature(
+ Resource resource, Type type, boolean alias ) // TODO: update to
handle version on types and type names
{
if( null == type )
{
@@ -344,41 +273,15 @@
String id = type.getID();
if( alias )
{
- Version version = type.getVersion();
- if( null != version )
+ if( type.getAliasProduction() )
{
- Artifact artifact = resource.getArtifact( id );
- String group = artifact.getGroup();
- String name = artifact.getName();
- if( Version.NULL_VERSION.equals( version ) )
- {
- return "link:"
- + id
- + ":"
- + group
- + "/"
- + name;
- }
- else
- {
- int major = version.getMajor();
- int minor = version.getMinor();
- return "link:"
- + id
- + ":"
- + group
- + "/"
- + name
- + "#"
- + major
- + "."
- + minor;
- }
+ Artifact artifact = type.getLinkArtifact();
+ return artifact.toURI().toASCIIString();
}
else
{
final String error =
- "Cannot resolve link from resource ["
+ "Cannot resolve link feature from the resource ["
+ resource
+ "] because the resource does not declare production
of an alias for the type ["
+ id
@@ -388,10 +291,11 @@
}
else
{
- Artifact artifact = resource.getArtifact( id );
+
+ Artifact artifact = type.getArtifact();
return artifact.toURI().toASCIIString();
}
}
- }
+ }
}


Modified:
trunk/main/depot/library/src/main/dpml/library/FeatureRuntimeException.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/FeatureRuntimeException.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/FeatureRuntimeException.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

/**
* A FeatureRuntimeException is thrown when a requested for a feature cannot

Modified: trunk/main/depot/library/src/main/dpml/library/Filter.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/Filter.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/Filter.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

/**
* Interface implemented by content filters.

Modified: trunk/main/depot/library/src/main/dpml/library/Info.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/Info.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/Info.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

/**
* Interface implemented by info handlers.

Modified: trunk/main/depot/library/src/main/dpml/library/Library.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/Library.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/Library.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

import java.io.File;


Added: trunk/main/depot/library/src/main/dpml/library/Local.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/Local.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/Local.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2006 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.library;
+
+import java.io.File;
+
+/**
+ * Interface implemented by resources that are backed by a local
+ * codebase.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public interface Local
+{
+ /**
+ * Return the project basedir.
+ * @param location the project location
+ * @return the base directory of the associated codebase
+ */
+ File getDirectory( ProjectLocation location );
+
+}

Modified: trunk/main/depot/library/src/main/dpml/library/Module.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/Module.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/Module.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -16,10 +16,13 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

-import net.dpml.library.info.ModuleDirective;
+import java.io.IOException;
+import java.io.OutputStream;

+//import dpml.library.info.ModuleDirective;
+
/**
* The Modele interface defines a node within a module hierachy.
*
@@ -77,8 +80,8 @@

/**
* Return a directive suitable for publication as an external description.
- * @return the module directive
+ * @param output the output stream
+ * @exception IOException if an IO error occurs
*/
- ModuleDirective export();
-
+ void export( OutputStream output ) throws IOException;
}

Modified:
trunk/main/depot/library/src/main/dpml/library/ModuleNotFoundException.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/ModuleNotFoundException.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/ModuleNotFoundException.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

/**
* A ModuleNotFoundException is thrown when a requested for a named module
cannot

Added: trunk/main/depot/library/src/main/dpml/library/ProjectLocation.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/ProjectLocation.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/ProjectLocation.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,198 @@
+/*
+ * Copyright 2004-2006 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.library;
+
+/**
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public enum ProjectLocation
+{
+ /**
+ * Project base directory.
+ */
+ BASEDIR,
+
+ /**
+ * Supplimentary resources directory.
+ */
+ ECT,
+
+ /**
+ * Supplimentary main codebase resources directory.
+ */
+ ECT_MAIN,
+
+ /**
+ * Supplimentary test codebase resources directory.
+ */
+ ECT_TEST,
+
+ /**
+ * Supplimentary test runtime resources directory.
+ */
+ ECT_DATA,
+
+ /**
+ * Supplimentary doc resources directory.
+ */
+ ECT_DOCS,
+
+ /**
+ * Preference resources directory.
+ */
+ ECT_PREFS,
+
+ /**
+ * Main codebase directory.
+ */
+ SRC,
+
+ /**
+ * Main codebase directory.
+ */
+ SRC_MAIN,
+
+ /**
+ * Test codebase directory.
+ */
+ SRC_TEST,
+
+ /**
+ * Documentation codebase directory.
+ */
+ SRC_DOCS,
+
+ /**
+ * Target directory.
+ */
+ TARGET,
+
+ /**
+ * Interim filtered codebase parent directory.
+ */
+ BUILD,
+
+ /**
+ * Interim filtered main codebase parent directory.
+ */
+ BUILD_MAIN,
+
+ /**
+ * Interim filtered test codebase parent directory.
+ */
+ BUILD_TEST,
+
+ /**
+ * Interim filtered documentation codebase parent directory.
+ */
+ BUILD_DOCS,
+
+ /**
+ * Compiled classes directory.
+ */
+ CLASSES,
+
+ /**
+ * Compiled main codebase classes directory.
+ */
+ CLASSES_MAIN,
+
+ /**
+ * Compiled test codebase classes directory.
+ */
+ CLASSES_TEST,
+
+ /**
+ * Target deliverables directory.
+ */
+ DELIVERABLES,
+
+ /**
+ * Target preferences directory.
+ */
+ PREFS,
+
+ /**
+ * Target working test directory.
+ */
+ TEST,
+
+ /**
+ * Target reports directory.
+ */
+ REPORTS;
+
+}
+/*
+ BASEDIR contains ECT, SRC, TARGET
+
+ ECT contains MAIN, TEST, DATA
+ SRC contains MAIN, TEST, DOCS
+ TARGET directories BUILD, CLASSES, DELIVERABLES, TEST, REPORTS
+
+ etc/MAIN --> target/build/MAIN
+ etc/TEST --> target/build/TEST
+ etc/DOCS --> target/build/DOCS
+ etc/${X} --> target/${X}
+
+ src/MAIN --> target/build/MAIN --> target/classes/MAIN
+ src/TEST --> target/build/TEST --> target/classes/TEST
+ src/DOCS --> target/build/DOCS --> target/DOCS
+
+ target/${X}
+ target/deliverables/${type}s/
+ target/reports/MAIN
+ target/reports/TEST
+ target/test
+ target/test/DATA
+
+ getDirectory( SRC.MAIN )
+ getDirectory( BUILD.MAIN )
+ getDirectory( CLASSES.MAIN )
+ getDirectory( REPORTS.TEST )
+
+ // full list
+
+ BASEDIR
+
+ SRC
+ SRC_MAIN
+ SRC_TEST
+ SRC_DOCS
+ ETC
+ ETC_MAIN
+ ETC_TEST
+ ECT_DATA
+ ETC_DOCS
+ ECT_PREFS
+ TARGET
+ CLASSES
+ CLASSES_MAIN
+ CLASSES_TEST
+ DELIVERABLES
+ PREFS
+ REPORTS
+ TEST
+
+*/
+
+
+

Modified:
trunk/main/depot/library/src/main/dpml/library/ReferentialException.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/ReferentialException.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/ReferentialException.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

/**
* A ReferentialException is thrown when a requested change would result

Modified: trunk/main/depot/library/src/main/dpml/library/Resource.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/Resource.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/Resource.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,16 +16,14 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

+import dpml.util.Category;
+
import java.io.File;

-import net.dpml.library.info.Scope;
-import net.dpml.library.info.ResourceDirective.Classifier;
-
import net.dpml.transit.Artifact;

-import net.dpml.lang.Category;
import net.dpml.lang.Version;

import net.dpml.util.Resolver;
@@ -56,12 +54,26 @@
String getName();

/**
+ * Return the name of the type.
+ * @param type the type
+ * @return the resource name
+ */
+ //String getName( Type type );
+
+ /**
* Return the resource version.
* @return the version
*/
String getVersion();

/**
+ * Return the type version.
+ * @param type the type
+ * @return the version
+ */
+ //String getVersion( Type type );
+
+ /**
* Return the statutory resource version.
* @return the version
*/
@@ -124,14 +136,23 @@
* @param type the resource type id
* @return the artifact
*/
- Artifact getArtifact( String type );
+ //Artifact getArtifact( Type type, boolean resolve );

/**
+ * Construct a file for a supplied type.
+ * @param type the resource type
+ * @return the artifact
+ */
+ //File getFile( Type type );
+
+ //File getFile( Type type, boolean local );
+
+ /**
* Construct an unversion link artifact for the supplied type.
* @param type the resource type id
* @return the link artifact
*/
- Artifact getLinkArtifact( String type );
+ //Artifact getLinkArtifact( Type type );

/**
* Return the enclosing parent module.
@@ -208,11 +229,11 @@
* @param id the artifact type
* @return the filename
*/
- String getLayoutPath( String id );
+ //String getLayoutPath( String id ); // move to Type

/**
* Return the array of production data.
* @return the associated production data
*/
- Data[] getData();
+ //Data[] getData();
}

Modified:
trunk/main/depot/library/src/main/dpml/library/ResourceNotFoundException.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/ResourceNotFoundException.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/ResourceNotFoundException.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

/**
* A ResourceNotFoundException is thrown when a requested for a named
resource cannot

Added: trunk/main/depot/library/src/main/dpml/library/Scope.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/Scope.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/Scope.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2005 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.library;
+
+/**
+ * Enumeration identifying BUILD, RUNTIME and TEST phases.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public enum Scope
+{
+ /**
+ * Build scope.
+ */
+ BUILD,
+
+ /**
+ * Runtime scope.
+ */
+ RUNTIME,
+
+ /**
+ * Test scope.
+ */
+ TEST;
+
+}
+

Modified: trunk/main/depot/library/src/main/dpml/library/Type.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/Type.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/Type.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -16,10 +16,12 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

-import net.dpml.lang.Version;
+import java.io.File;
+import java.io.IOException;

+import net.dpml.transit.Artifact;

/**
* Declaration of a type production.
@@ -27,18 +29,53 @@
* @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
* @version @PROJECT-VERSION@
*/
-public interface Type extends Data
+public interface Type extends Dictionary
{
/**
+ * Return the resource holding the type.
+ * @return the resource
+ */
+ Resource getResource();
+
+ /**
* Return the type production id.
* @return the type id
*/
String getID();

/**
- * Return the alias version.
- * @return the alias version value (may be null)
+ * Return the version.
+ * @return the type version
*/
- Version getVersion();
+ String getVersion();

+ String getName();
+
+ String getCompoundName();
+
+ String getSource();
+
+ boolean getTest();
+
+ /**
+ * Return the alias production flag.
+ * @return the alias flag
+ */
+ boolean getAliasProduction();
+
+ File getFile();
+
+ File getFile( boolean local );
+
+ Artifact getResolvedArtifact() throws IOException;
+
+ Artifact getArtifact();
+
+ Artifact getLinkArtifact(); // resolve option?
+
+ /**
+ * Return a filename using the layout strategy employed by the cache.
+ * @return the path
+ */
+ String getLayoutPath();
}

Deleted: trunk/main/depot/library/src/main/dpml/library/TypeBuilder.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/TypeBuilder.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/TypeBuilder.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -1,43 +0,0 @@
-/*
- * Copyright 2006 Stephen J. McConnell.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.library;
-
-import net.dpml.library.info.TypeDirective;
-
-/**
- * Interface implemented by type datastructure builders.
- */
-public interface TypeBuilder
-{
- /**
- * Return the id of the type produced by the builder.
- * @return the type id
- */
- String getID();
-
- /**
- * Construct a type instance using a supplied classloader and type
- * production directive.
- * @param classloader the base classloader
- * @param type the type production directive
- * @return the type instance
- * @exception Exception if an error occurs
- */
- Type buildType( ClassLoader classloader, TypeDirective type ) throws
Exception;
-}

Modified:
trunk/main/depot/library/src/main/dpml/library/TypeNotFoundException.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/TypeNotFoundException.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/TypeNotFoundException.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

/**
* A TypeNotFoundException is thrown when a requested for a named type cannot

Modified:
trunk/main/depot/library/src/main/dpml/library/impl/DefaultDictionary.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/impl/DefaultDictionary.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/impl/DefaultDictionary.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,16 +16,18 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

+import dpml.library.info.AbstractDirective;
+
+import dpml.util.PropertyResolver;
+
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Properties;

-import net.dpml.library.Dictionary;
-import net.dpml.library.info.AbstractDirective;
+import dpml.library.Dictionary;

-import net.dpml.util.PropertyResolver;

/**
* Utility class used for construction of a module model from an XML source.
@@ -164,6 +166,16 @@
return PropertyResolver.resolve( m_properties, value );
}

+ /**
+ * Evaluate and expand any symbolic references in the supplied property
set.
+ * @param properties the properties to resolve
+ * @return the resolved properties
+ */
+ public Properties resolveProperties( Properties properties )
+ {
+ return PropertyResolver.resolve( m_properties, properties );
+ }
+

//----------------------------------------------------------------------------
// internal

//----------------------------------------------------------------------------
@@ -197,13 +209,13 @@

private String[] getLocalPropertyNames( Properties properties )
{
- ArrayList list = new ArrayList();
+ ArrayList<String> list = new ArrayList<String>();
Enumeration names = properties.propertyNames();
while( names.hasMoreElements() )
{
list.add( (String) names.nextElement() );
}
- return (String[]) list.toArray( new String[0] );
+ return list.toArray( new String[0] );
}

Properties getExportProperties()

Modified:
trunk/main/depot/library/src/main/dpml/library/impl/DefaultLibrary.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/impl/DefaultLibrary.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/impl/DefaultLibrary.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,8 +16,14 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

+import dpml.library.info.LibraryDecoder;
+import dpml.library.info.ImportDirective;
+import dpml.library.info.LibraryDirective;
+import dpml.library.info.ModuleDirective;
+import dpml.library.info.ResourceDirective;
+
import java.io.File;
import java.io.FileNotFoundException;
import java.net.URI;
@@ -26,17 +32,12 @@
import java.util.Properties;
import java.util.Hashtable;

-import net.dpml.library.info.LibraryDecoder;
-import net.dpml.library.info.ImportDirective;
-import net.dpml.library.info.LibraryDirective;
-import net.dpml.library.info.ModuleDirective;
-import net.dpml.library.info.ResourceDirective;
-import net.dpml.library.info.Scope;
-import net.dpml.library.Library;
-import net.dpml.library.Module;
-import net.dpml.library.ModuleNotFoundException;
-import net.dpml.library.Resource;
-import net.dpml.library.ResourceNotFoundException;
+import dpml.library.Scope;
+import dpml.library.Library;
+import dpml.library.Module;
+import dpml.library.ModuleNotFoundException;
+import dpml.library.Resource;
+import dpml.library.ResourceNotFoundException;

import net.dpml.transit.Artifact;

@@ -56,7 +57,8 @@
private final DefaultModule m_module;
private final File m_root;
private final Logger m_logger;
- private final Hashtable m_anonymous = new Hashtable();
+ private final Hashtable<String,DefaultResource> m_anonymous =
+ new Hashtable<String,DefaultResource>();

private static LibraryDirective buildLibraryDirective( File source )
throws Exception
{
@@ -139,24 +141,14 @@

// create the top-level modules

- ArrayList primaryDirectives = new ArrayList();
+ ArrayList<ResourceDirective> primaryDirectives = new
ArrayList<ResourceDirective>();
ResourceDirective[] directives = m_directive.getResourceDirectives();
for( int i=0; i<directives.length; i++ )
{
ResourceDirective directive = directives[i];
- //if( directive instanceof ModuleDirective )
- //{
- //ModuleDirective md = (ModuleDirective) directive;
- primaryDirectives.add( directive );
- //}
- //else
- //{
- // final String error =
- // "No support in place for non-module top-level
resources.";
- // throw new IllegalArgumentException( error );
- //}
+ primaryDirectives.add( directive );
}
- ResourceDirective[] values = (ResourceDirective[])
primaryDirectives.toArray( new ResourceDirective[0] );
+ ResourceDirective[] values = primaryDirectives.toArray( new
ResourceDirective[0] );
for( int i=0; i<values.length; i++ )
{
ResourceDirective d = values[i];
@@ -220,7 +212,14 @@
*/
public Resource getResource( String ref ) throws
ResourceNotFoundException
{
- return m_module.getResource( ref );
+ try
+ {
+ return m_module.getResource( ref );
+ }
+ catch( InvalidNameException e )
+ {
+ throw new ResourceNotFoundException( e.getMessage(),
e.getCause() );
+ }
}

/**
@@ -273,7 +272,7 @@
public Resource[] select( final File base, boolean self )
{
String root = base.toString();
- ArrayList list = new ArrayList();
+ ArrayList<DefaultResource> list = new ArrayList<DefaultResource>();
DefaultResource[] resources = m_module.selectDefaultResources( true,
"**/*" );
for( int i=0; i<resources.length; i++ )
{
@@ -306,7 +305,7 @@
throw new IllegalStateException( error );
}
}
- DefaultResource[] selection = (DefaultResource[]) list.toArray( new
DefaultResource[0] );
+ DefaultResource[] selection = list.toArray( new DefaultResource[0] );
return m_module.sortDefaultResources( selection );
}

@@ -360,9 +359,9 @@

/**
* Construct a new locally referenced anonymouse resource.
- * @param include the dependency include
+ * @param urn the resource urn
+ * @param properties properties assigned to the resource
* @return the resource
- * @exception IllegalArgumentException if the include mode is not URN mode
* @exception URISyntaxException if the include urn is invaid
*/
DefaultResource getAnonymousResource( String urn, Properties properties
)
@@ -370,7 +369,7 @@
{
if( m_anonymous.containsKey( urn ) )
{
- return (DefaultResource) m_anonymous.get( urn );
+ return m_anonymous.get( urn );
}

Artifact artifact = Artifact.createArtifact( urn );

Modified:
trunk/main/depot/library/src/main/dpml/library/impl/DefaultModule.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/impl/DefaultModule.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/impl/DefaultModule.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,9 +16,19 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

+import dpml.library.info.AbstractDirective;
+import dpml.library.info.ModuleDirective;
+import dpml.library.info.ResourceDirective;
+import dpml.library.info.DependencyDirective;
+import dpml.library.info.TypeDirective;
+import dpml.library.info.InfoDirective;
+import dpml.library.info.LibraryEncoder;
+
import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
@@ -28,20 +38,14 @@
import java.util.Hashtable;
import java.util.Map;

-import net.dpml.library.info.Scope;
-import net.dpml.library.info.AbstractDirective;
-import net.dpml.library.info.ModuleDirective;
-import net.dpml.library.info.ResourceDirective;
-import net.dpml.library.info.DependencyDirective;
-import net.dpml.library.info.ResourceDirective.Classifier;
-import net.dpml.library.info.TypeDirective;
-import net.dpml.library.info.InfoDirective;
-import net.dpml.library.Module;
-import net.dpml.library.Resource;
-import net.dpml.library.ResourceNotFoundException;
-import net.dpml.library.ModuleNotFoundException;
+import dpml.library.Scope;
+import dpml.library.Classifier;
+import dpml.library.Module;
+import dpml.library.Resource;
+import dpml.library.ResourceNotFoundException;
+import dpml.library.ModuleNotFoundException;

-import net.dpml.lang.Category;
+import dpml.util.Category;
import net.dpml.lang.DuplicateKeyException;

/**
@@ -57,12 +61,11 @@
{
private final boolean m_root;
private final ModuleDirective m_directive;
- private final Map m_map = new Hashtable();
+ private final Map<String,DefaultResource> m_map = new
Hashtable<String,DefaultResource>();

/**
* Constructor used by the library to create a virtual root module os
shared
* resource references.
- * @param logger the assigned logging channel
* @param library the library
* @param directive the directive from which common properties are
established
*/
@@ -76,7 +79,6 @@

/**
* Creation of a new nested module.
- * @param logger the assigned logging channel
* @param library the library
* @param module the parent module
* @param directive the directive from which common properties are
established
@@ -332,11 +334,18 @@
}

/**
- * Return a directive suitable for publication as an external description.
- * @return the resource directive
+ * Publish the module to the output stream.
+ * @param output the output stream
*/
- public ModuleDirective export()
+ public void export( OutputStream output ) throws IOException
{
+ ModuleDirective directive = exportDirective();
+ final LibraryEncoder encoder = new LibraryEncoder();
+ encoder.export( directive, output );
+ }
+
+ public ModuleDirective exportDirective()
+ {
if( null == m_directive )
{
final String error =
@@ -395,11 +404,10 @@
String basedir = null;
InfoDirective info = m_directive.getInfoDirective();
TypeDirective[] types = m_directive.getTypeDirectives();
- TypeDirective[] exportedTypes = createExportedTypes( types );
Properties properties = getExportProperties();
return new ModuleDirective(
name, version, Classifier.EXTERNAL, basedir,
- info, exportedTypes, new DependencyDirective[0],
+ info, types, new DependencyDirective[0],
directives, properties, null );
}

@@ -425,7 +433,7 @@
DefaultResource[] local = super.getLocalDefaultProviders( scope,
category );
if( Scope.BUILD.equals( scope ) )
{
- ArrayList stack = new ArrayList();
+ ArrayList<DefaultResource> stack = new
ArrayList<DefaultResource>();
for( int i=0; i<local.length; i++ )
{
DefaultResource resource = local[i];
@@ -435,7 +443,7 @@
}
else if( Scope.RUNTIME.equals( scope ) )
{
- ArrayList stack = new ArrayList();
+ ArrayList<DefaultResource> stack = new
ArrayList<DefaultResource>();
for( int i=0; i<local.length; i++ )
{
DefaultResource resource = local[i];
@@ -451,7 +459,7 @@
stack.add( resource );
}
}
- return (DefaultResource[]) stack.toArray( new DefaultResource[0]
);
+ return stack.toArray( new DefaultResource[0] );
}
else
{
@@ -459,7 +467,7 @@
}
}

- DefaultResource[] expandLocalDefaultProviders( final List stack )
+ DefaultResource[] expandLocalDefaultProviders( final
List<DefaultResource> stack )
{
DefaultResource[] resources = getDefaultResources();
for( int i=0; i<resources.length; i++ )
@@ -470,7 +478,6 @@
DefaultModule module = (DefaultModule) resource;
String path = module.getResourcePath();
if( !path.startsWith( getResourcePath() ) )
- //if( !getResourcePath().startsWith( path ) )
{
DefaultResource[] providers =
module.expandLocalDefaultProviders( stack );
for( int j=0; j<providers.length; j++ )
@@ -490,10 +497,10 @@
getParentModules( stack, providers );
}
}
- return (DefaultResource[]) stack.toArray( new DefaultResource[0] );
+ return stack.toArray( new DefaultResource[0] );
}

- private void getParentModules( final List stack, final DefaultResource[]
resources )
+ private void getParentModules( final List<DefaultResource> stack, final
DefaultResource[] resources )
{
for( int i=0; i<resources.length; i++ )
{
@@ -514,7 +521,8 @@
}

void sortDefaultResource(
- final List visited, final List stack, final Scope scope, final
DefaultResource[] resources )
+ final List<DefaultResource> visited, final List<DefaultResource>
stack,
+ final Scope scope, final DefaultResource[] resources )
{
if( visited.contains( this ) )
{
@@ -564,7 +572,7 @@

DefaultResource[] getDefaultResources()
{
- return (DefaultResource[]) m_map.values().toArray( new
DefaultResource[0] );
+ return m_map.values().toArray( new DefaultResource[0] );
}

DefaultResource getDefaultResource( final String ref )
@@ -657,17 +665,17 @@

DefaultModule[] getDefaultModules()
{
- ArrayList stack = new ArrayList();
+ ArrayList<DefaultModule> stack = new ArrayList<DefaultModule>();
DefaultResource[] resources = getDefaultResources();
for( int i=0; i<resources.length; i++ )
{
DefaultResource resource = resources[i];
if( resource instanceof DefaultModule )
{
- stack.add( resource );
+ stack.add( (DefaultModule) resource );
}
}
- return (DefaultModule[]) stack.toArray( new DefaultModule[0] );
+ return stack.toArray( new DefaultModule[0] );
}

DefaultModule[] getAllDefaultModules()
@@ -685,8 +693,8 @@
else
{
DefaultModule[] modules = getDefaultModules();
- ArrayList visited = new ArrayList();
- ArrayList stack = new ArrayList();
+ ArrayList<DefaultModule> visited = new
ArrayList<DefaultModule>();
+ ArrayList<DefaultModule> stack = new ArrayList<DefaultModule>();
for( int i=0; i<modules.length; i++ )
{
DefaultModule module = modules[i];
@@ -701,7 +709,8 @@
}

private void collectChildModules(
- final List visited, final List stack, final DefaultModule module )
+ final List<DefaultModule> visited, final List<DefaultModule> stack,
+ final DefaultModule module )
{
if( visited.contains( module ) )
{
@@ -781,7 +790,7 @@
boolean wildcard = ( token.indexOf( "**" ) > -1 );
String remainder = getRemainderOfSelection( spec, "/", token );
DefaultModule[] modules = selectDefaultModules( token );
- ArrayList list = new ArrayList();
+ ArrayList<DefaultResource> list = new
ArrayList<DefaultResource>();
for( int i=0; i<modules.length; i++ )
{
DefaultModule module = modules[i];
@@ -793,7 +802,7 @@
DefaultResource[] selection = doSelectDefaultResources(
wildcard, remainder );
aggregate( list, selection );
}
- return (DefaultResource[]) list.toArray( new DefaultResource[0]
);
+ return list.toArray( new DefaultResource[0] );
}
}

@@ -823,10 +832,10 @@

private DefaultResource[] selectUsingPattern( final DefaultResource[]
resources, final Pattern pattern )
{
- ArrayList list = new ArrayList();
+ ArrayList<DefaultResource> list = new ArrayList<DefaultResource>();
for( int i=0; i<resources.length; i++ )
{
- Resource resource = resources[i];
+ DefaultResource resource = resources[i];
String name = resource.getName();
Matcher matcher = pattern.matcher( name );
boolean matches = matcher.matches();
@@ -835,7 +844,7 @@
list.add( resource );
}
}
- return (DefaultResource[]) list.toArray( new DefaultResource[0] );
+ return list.toArray( new DefaultResource[0] );
}

private String getRemainderOfSelection( final String spec, final String
delimiter, final String token )
@@ -844,7 +853,7 @@
return spec.substring( n );
}

- private void aggregate( final List list, final DefaultResource[]
resources )
+ private void aggregate( final List<DefaultResource> list, final
DefaultResource[] resources )
{
for( int i=0; i<resources.length; i++ )
{
@@ -893,8 +902,8 @@
private DefaultModule[] sortDefaultModules( final DefaultModule[]
modules )
{
Scope scope = Scope.TEST;
- ArrayList visited = new ArrayList();
- ArrayList stack = new ArrayList();
+ ArrayList<DefaultResource> visited = new
ArrayList<DefaultResource>();
+ ArrayList<DefaultResource> stack = new ArrayList<DefaultResource>();
for( int i=0; i<modules.length; i++ )
{
DefaultModule module = modules[i];
@@ -912,14 +921,15 @@
*/
private DefaultModule[] getProviderModules( final Scope scope )
{
- ArrayList visited = new ArrayList();
- ArrayList stack = new ArrayList();
+ ArrayList<DefaultResource> visited = new
ArrayList<DefaultResource>();
+ ArrayList<DefaultModule> stack = new ArrayList<DefaultModule>();
processModuleDependencies( visited, stack, scope, this );
return (DefaultModule[]) stack.toArray( new DefaultModule[0] );
}

private void processModuleDependencies(
- final List visited, final List stack, final Scope scope, final
DefaultResource resource )
+ final List<DefaultResource> visited, final List<DefaultModule> stack,
+ final Scope scope, final DefaultResource resource )
{
if( visited.contains( resource ) )
{
@@ -968,7 +978,7 @@

private DefaultResource[] filterProjects( final DefaultResource[]
resources )
{
- ArrayList list = new ArrayList();
+ ArrayList<DefaultResource> list = new ArrayList<DefaultResource>();
for( int i=0; i<resources.length; i++ )
{
DefaultResource resource = resources[i];
@@ -977,6 +987,6 @@
list.add( resource );
}
}
- return (DefaultResource[]) list.toArray( new DefaultResource[0] );
+ return list.toArray( new DefaultResource[0] );
}
}

Modified:
trunk/main/depot/library/src/main/dpml/library/impl/DefaultResource.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/impl/DefaultResource.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/impl/DefaultResource.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,12 +16,22 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

+import dpml.library.info.InfoDirective;
+import dpml.library.info.TypeDirective;
+import dpml.library.info.ResourceDirective;
+import dpml.library.info.IncludeDirective;
+import dpml.library.info.DependencyDirective;
+import dpml.library.info.AbstractDirective;
+import dpml.library.info.ValidationException;
+import dpml.library.info.FilterDirective;
+
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.ArrayList;
@@ -32,30 +42,22 @@
import java.util.Map;
import java.util.Hashtable;

-import net.dpml.lang.Category;
+import dpml.util.Category;
import net.dpml.lang.Version;

-import net.dpml.library.Info;
-import net.dpml.library.Filter;
-import net.dpml.library.Library;
-import net.dpml.library.Module;
-import net.dpml.library.Resource;
-import net.dpml.library.Type;
-import net.dpml.library.Data;
-import net.dpml.library.ResourceNotFoundException;
-import net.dpml.library.info.InfoDirective;
-import net.dpml.library.info.TypeDirective;
-import net.dpml.library.info.ResourceDirective;
-import net.dpml.library.info.ResourceDirective.Classifier;
-import net.dpml.library.info.IncludeDirective;
-import net.dpml.library.info.DependencyDirective;
-import net.dpml.library.info.AbstractDirective;
-import net.dpml.library.info.ValidationException;
-import net.dpml.library.info.FilterDirective;
-import net.dpml.library.info.Scope;
+import dpml.library.Info;
+import dpml.library.Filter;
+import dpml.library.Library;
+import dpml.library.Module;
+import dpml.library.Resource;
+import dpml.library.Type;
+import dpml.library.Classifier;
+import dpml.library.Scope;
+import dpml.library.ResourceNotFoundException;

import net.dpml.transit.Artifact;
import net.dpml.transit.Transit;
+import net.dpml.transit.Layout;

import net.dpml.util.Resolver;

@@ -103,12 +105,10 @@
private final String[] m_typeNames;
private final String m_path;
private final File m_basedir;
- private final Map m_filters = new Hashtable();
- private final Data[] m_data;
+ private final Map<String,Filter> m_filters = new
Hashtable<String,Filter>();

/**
* Creation of a new default resource.
- * @param logger the assigned logging channel
* @param library the reference library
* @param directive the directive
*/
@@ -123,12 +123,10 @@
m_typeNames = new String[0];
m_path = "";
m_basedir = null;
- m_data = new Data[0];
}

/**
* Creation of a new default resource.
- * @param logger the assigned logging channel
* @param library the reference library
* @param module the parent module
* @param directive the resource directive
@@ -157,18 +155,16 @@

// setup produced types

- m_types = directive.getTypeDirectives();
- m_typeNames = new String[ m_types.length ];
- for( int i=0; i<m_types.length; i++ )
+ TypeDirective[] types = directive.getTypeDirectives();
+ m_types = new Type[types.length];
+ m_typeNames = new String[ types.length ];
+ for( int i=0; i<types.length; i++ )
{
- Type type = m_types[i];
+ TypeDirective type = types[i];
+ m_types[i] = new DefaultType( this, type );
m_typeNames[i] = type.getID();
}

- // setup production data
-
- m_data = new Data[0];
-
// setup the resource basedir

File anchor = getAnchor();
@@ -237,15 +233,6 @@

//----------------------------------------------------------------------------

/**
- * Return a data directives.
- * @return the associated production data
- */
- public Data[] getData()
- {
- return m_data;
- }
-
- /**
* Return the singleton library.
* @return the library
*/
@@ -274,6 +261,25 @@
* Return the resource version.
* @return the version
*/
+ /*
+ public String getVersion( Type type )
+ {
+ Version version = type.getTypeVersion();
+ if( null != version )
+ {
+ return version.toString();
+ }
+ else
+ {
+ return getVersion();
+ }
+ }
+ */
+
+ /**
+ * Return the resource version.
+ * @return the version
+ */
public String getVersion()
{
String version = getStatutoryVersion();
@@ -281,6 +287,10 @@
{
return version;
}
+ else if( m_directive.isAnonymous() )
+ {
+ return version;
+ }
else
{
return getStandardVersion();
@@ -300,7 +310,7 @@
else
{
String version = m_directive.getVersion();
- if( null != version )
+ if( ( null != version ) || m_directive.isAnonymous() )
{
return version;
}
@@ -417,14 +427,29 @@
*/
public Type getType( final String id ) throws IllegalArgumentException
{
- for( int i=0; i<m_types.length; i++ )
+ boolean flag = id.indexOf( '#' ) > -1;
+ if( flag )
{
- Type type = m_types[i];
- if( type.getID().equals( id ) )
+ for( int i=0; i<m_types.length; i++ )
{
- return type;
+ Type type = m_types[i];
+ if( type.getCompoundName().equals( id ) )
+ {
+ return type;
+ }
}
}
+ else
+ {
+ for( int i=0; i<m_types.length; i++ )
+ {
+ Type type = m_types[i];
+ if( type.getID().equals( id ) )
+ {
+ return type;
+ }
+ }
+ }
final String error =
"Type name ["
+ id
@@ -439,7 +464,8 @@
* @param id the resource type id
* @return the link artifact
*/
- public Artifact getLinkArtifact( final String id )
+ /*
+ public Artifact getLinkArtifact( final Type type )
{
if( null == m_directive )
{
@@ -447,22 +473,24 @@
"Method not supported on virtual root.";
throw new UnsupportedOperationException( error );
}
- if( null == id )
+ if( null == type )
{
- throw new NullPointerException( "id" );
+ throw new NullPointerException( "type" );
}
+
+ String id = type.getID();
String group = getGroupName();
- String name = getName();
- Type type = getType( id );
- Version version = type.getVersion();
- if( null == version )
- {
- final String error =
- "Resource does not declare production of an alias for the
requested type."
- + "\nResource: " + this
- + "\nType: " + id;
- throw new IllegalArgumentException( error );
- }
+ String name = getName( type );
+
+ //Version version = type.getVersion();
+ //if( null == version )
+ //{
+ // final String error =
+ // "Resource does not declare production of an alias for the
requested type."
+ // + "\nResource: " + this
+ // + "\nType: " + id;
+ // throw new IllegalArgumentException( error );
+ //}
try
{
String spec = "link:" + id;
@@ -474,15 +502,16 @@
{
spec = spec + ":" + name;
}
- if( !Version.NULL_VERSION.equals( version ) )
- {
- int major = version.getMajor();
- int minor = version.getMinor();
- spec = spec + "#"
- + major
- + "."
- + minor;
- }
+ //if( !Version.NULL_VERSION.equals( version ) )
+ //{
+ // int major = version.getMajor();
+ // int minor = version.getMinor();
+ // spec = spec + "#"
+ // + major
+ // + "."
+ // + minor;
+ //}
+
return Artifact.createArtifact( spec );
}
catch( Throwable e )
@@ -494,13 +523,15 @@
throw new RuntimeException( error, e );
}
}
+ */

/**
* Construct an artifact for the supplied type.
* @param id the resource type identifier
* @return the artifact
*/
- public Artifact getArtifact( final String id )
+ /*
+ public Artifact getArtifact( final Type type, boolean resolve )
{
if( null == m_directive )
{
@@ -508,29 +539,43 @@
"Method not supported on virtual root.";
throw new UnsupportedOperationException( error );
}
- if( null == id )
+ if( null == type )
{
- throw new NullPointerException( "id" );
+ throw new NullPointerException( "type" );
}

+ String id = type.getID();
String group = getGroupName();
- String name = getName();
- String version = getVersion();
+ String name = getName( type );
+ String version = getVersion( type );
String scheme = m_directive.getScheme();

- try
+ if( !resolve )
{
return Artifact.createArtifact( scheme, group, name, version, id
);
}
- catch( Throwable e )
+ else
{
- final String error =
- "Failed to construct artifact for resource ["
- + getResourcePath()
- + "].";
- throw new RuntimeException( error, e );
+ try
+ {
+ Artifact artifact = Artifact.createArtifact( scheme, group,
name, version, id );
+ URL url = artifact.toURL();
+ url.openConnection().connect();
+ return artifact;
+ }
+ catch( IOException ioe )
+ {
+ final String error =
+ "Unable to resolve the artifact for the type ["
+ + type.getID()
+ + "] on the resource ["
+ + getResourcePath()
+ + "].";
+ throw new IllegalStateException( error, ioe );
+ }
}
}
+ */

/**
* Return the enclosing parent module.
@@ -550,7 +595,7 @@
DefaultModule module = getDefaultParent();
if( null != module )
{
- Map map = new Hashtable();
+ Map<String,Filter> map = new Hashtable<String,Filter>();
Filter[] filters = module.getFilters();
for( int i=0; i<filters.length; i++ )
{
@@ -565,7 +610,7 @@
String token = filter.getToken();
map.put( token, filter );
}
- return (Filter[]) map.values().toArray( new Filter[0] );
+ return map.values().toArray( new Filter[0] );
}
else
{
@@ -608,14 +653,15 @@
try
{
Resource resource = library.getResource( path );
+ Type t = resource.getType( type );
if( ref.startsWith( "resource:" ) )
{
- Artifact artifact = resource.getArtifact( type );
+ Artifact artifact = t.getArtifact();
return artifact.toURI();
}
else
{
- Artifact artifact = resource.getLinkArtifact( type );
+ Artifact artifact = t.getLinkArtifact();
return artifact.toURI();
}
}
@@ -645,7 +691,7 @@

Filter[] getLocalFilters()
{
- return (Filter[]) getFilterMap().values().toArray( new Filter[0] );
+ return (Filter[]) m_filters.values().toArray( new Filter[0] );
}

/**
@@ -689,7 +735,7 @@
public Resource[] getClasspathProviders( final Scope scope )
{
DefaultResource[] result = getAggregatedDefaultProviders( scope,
true, true, true );
- List stack = new ArrayList();
+ List<DefaultResource> stack = new ArrayList<DefaultResource>();
for( int i=0; i<result.length; i++ )
{
DefaultResource resource = result[i];
@@ -698,7 +744,7 @@
stack.add( resource );
}
}
- return (DefaultResource[]) stack.toArray( new DefaultResource[0] );
+ return stack.toArray( new DefaultResource[0] );
}

/**
@@ -746,13 +792,103 @@
* @param id the artifact type
* @return the filename
*/
- public String getLayoutPath( final String id )
+ /*
+ public String getLayoutPath( final String id ) // <-- what about test
types?
{
- Artifact artifact = getArtifact( id );
+ Type type = getType( id );
+ Artifact artifact = getArtifact( type, false );
return Transit.getInstance().getCacheLayout().resolveFilename(
artifact );
}
+ */

/**
+ * Return a filename of a produced type.
+ * @param id the type id
+ * @return the filename
+ */
+
+ /*
+ public File getFile( final Type type )
+ {
+ return getFile( type, false );
+ }
+
+ public File getFile( final Type type, boolean local ) // <!-- TODO:
policy concerning versions on test types
+ {
+ if( null == type )
+ {
+ throw new NullPointerException( "type" );
+ }
+ try
+ {
+ if( type.getTest() )
+ {
+ String id = type.getID();
+ String name = getName( type );
+ String path = "target/test/" + name + "." + id;
+ File basedir = getBaseDir();
+ return new File( basedir, path );
+ }
+ else
+ {
+ if( local )
+ {
+ String id = type.getID();
+ String name = getName( type );
+ String version = getVersion( type );
+ String path = "target/deliverables/" + id + "s/" + name;
+ if( null != version )
+ {
+ path = path + "-" + version;
+ }
+ path = path + "." + id;
+ File basedir = getBaseDir();
+ return new File( basedir, path );
+ }
+ else
+ {
+ Artifact artifact = getArtifact( type, false );
+ Layout layout = Transit.getInstance().getCacheLayout();
+ File cache = Transit.getInstance().getCacheDirectory();
+ String path = layout.resolvePath( artifact );
+ return new File( cache, path );
+ }
+ }
+ }
+ catch( Exception e )
+ {
+ final String error =
+ "Unable to resolve resource path.";
+ throw new RuntimeException( error, e );
+ }
+ }
+ */
+
+ /**
+ * Return a filename of a produced type.
+ * @param id the type id
+ * @return the filename
+ */
+ /*
+ public String getName( final Type type )
+ {
+ if( null == type )
+ {
+ throw new NullPointerException( "type" );
+ }
+ String name = type.getName();
+ if( null == name )
+ {
+ return getName();
+ }
+ else
+ {
+ return name;
+ }
+ }
+ */
+
+ /**
* Return a directive suitable for publication as an external description.
* @param module the enclosing module
* @return the resource directive
@@ -785,7 +921,7 @@
{
TypeDirective type = types[i];
String id = type.getID();
- Version version = type.getVersion();
+ String version = type.getVersion();
export[i] = new TypeDirective( id, version );
}
return export;
@@ -793,7 +929,7 @@

private DependencyDirective[] createDeps( final DefaultModule module )
{
- ArrayList list = new ArrayList();
+ ArrayList<IncludeDirective> list = new ArrayList<IncludeDirective>();
createIncludeDirectives( module, list, Category.SYSTEM );
createIncludeDirectives( module, list, Category.PUBLIC );
createIncludeDirectives( module, list, Category.PROTECTED );
@@ -804,8 +940,7 @@
}
else
{
- IncludeDirective[] includes =
- (IncludeDirective[]) list.toArray( new IncludeDirective[0] );
+ IncludeDirective[] includes = list.toArray( new
IncludeDirective[0] );
DependencyDirective runtime =
new DependencyDirective( Scope.RUNTIME, includes );
return new DependencyDirective[]{runtime};
@@ -836,7 +971,7 @@
}

private void createIncludeDirectives(
- final DefaultModule module, final List list, final Category category )
+ final DefaultModule module, final List<IncludeDirective> list, final
Category category )
{
DefaultResource[] providers =
getDefaultProviders( Scope.RUNTIME, true, category );
@@ -864,7 +999,7 @@
{
Type type = types[j];
String label = type.getID();
- Artifact artifact = provider.getArtifact( label );
+ Artifact artifact = type.getArtifact();
String urn = artifact.toString();
IncludeDirective include =
new IncludeDirective(
@@ -900,7 +1035,14 @@

String toString( final String type )
{
- return type + ":" + getResourcePath() + "#" + getVersion();
+ if( null != getVersion() )
+ {
+ return type + ":" + getResourcePath() + "#" + getVersion();
+ }
+ else
+ {
+ return type + ":" + getResourcePath();
+ }
}

/**
@@ -983,35 +1125,35 @@
DefaultResource[] getAggregatedDefaultProviders(
final Scope scope, final boolean expanded, final boolean flag )
{
- ArrayList list = new ArrayList();
+ ArrayList<DefaultResource> list = new ArrayList<DefaultResource>();
if( !flag )
{
aggregateProviders( list, Scope.BUILD );
}
- if( scope.isGreaterThan( Scope.BUILD ) )
+ if( scope.compareTo( Scope.BUILD ) > 0 )
{
aggregateProviders( list, Scope.RUNTIME );
}
- if( scope.isGreaterThan( Scope.RUNTIME ) )
+ if( scope.compareTo( Scope.RUNTIME ) > 0 )
{
aggregateProviders( list, Scope.TEST );
}
- DefaultResource[] result = (DefaultResource[]) list.toArray( new
DefaultResource[0] );
+ DefaultResource[] result = list.toArray( new DefaultResource[0] );
if( expanded )
{
- List visited = new ArrayList();
- List stack = new ArrayList();
+ List<DefaultResource> visited = new ArrayList<DefaultResource>();
+ List<DefaultResource> stack = new ArrayList<DefaultResource>();
for( int i=0; i<result.length; i++ )
{
DefaultResource resource = result[i];
expandDefaultResource( visited, stack, scope, resource );
}
- result = (DefaultResource[]) stack.toArray( new
DefaultResource[0] );
+ result = stack.toArray( new DefaultResource[0] );
}
return result;
}

- private void aggregateProviders( final List list, final Scope scope )
+ private void aggregateProviders( final List<DefaultResource> list, final
Scope scope )
{
DefaultResource[] resources = getDefaultProviders( scope, false,
null );
for( int i=0; i<resources.length; i++ )
@@ -1042,8 +1184,8 @@
DefaultResource[] getDefaultProviders(
final Scope scope, final boolean expand, final Category category )
{
- ArrayList visited = new ArrayList();
- ArrayList stack = new ArrayList();
+ ArrayList<DefaultResource> visited = new
ArrayList<DefaultResource>();
+ ArrayList<DefaultResource> stack = new ArrayList<DefaultResource>();
DefaultResource[] providers = getLocalDefaultProviders( scope,
category );
for( int i=0; i<providers.length; i++ )
{
@@ -1161,7 +1303,8 @@
}

private void expandDefaultResource(
- final List visited, final List stack, final Scope scope, final
DefaultResource resource )
+ final List<DefaultResource> visited, final List<DefaultResource>
stack,
+ final Scope scope, final DefaultResource resource )
{
if( visited.contains( resource ) )
{
@@ -1244,7 +1387,7 @@
{
if( !expand )
{
- ArrayList list = new ArrayList();
+ ArrayList<DefaultResource> list = new
ArrayList<DefaultResource>();
DefaultResource[] resources = m_library.selectDefaultResources(
"**/*" );
for( int i=0; i<resources.length; i++ )
{
@@ -1254,12 +1397,12 @@
list.add( resource );
}
}
- return (DefaultResource[]) list.toArray( new DefaultResource[0]
);
+ return list.toArray( new DefaultResource[0] );
}
else
{
- ArrayList visited = new ArrayList();
- ArrayList stack = new ArrayList();
+ ArrayList<DefaultResource> visited = new
ArrayList<DefaultResource>();
+ ArrayList<DefaultResource> stack = new
ArrayList<DefaultResource>();
DefaultResource[] consumers = getDefaultConsumers( false );
for( int i=0; i<consumers.length; i++ )
{
@@ -1270,7 +1413,9 @@
}
}

- void processConsumer( final List visited, final List stack, final
DefaultResource consumer )
+ void processConsumer(
+ final List<DefaultResource> visited, final List<DefaultResource>
stack,
+ final DefaultResource consumer )
{
if( visited.contains( consumer ) )
{
@@ -1300,10 +1445,10 @@
*/
private DefaultResource[] getClasspathDefaultProviders( final Category
category )
{
- ArrayList list = new ArrayList();
- for( int i=0; i<category.getValue(); i++ )
+ ArrayList<DefaultResource> list = new ArrayList<DefaultResource>();
+ for( int i=0; i<category.ordinal(); i++ )
{
- Category c = Category.parse( i );
+ Category c = Category.valueOf( i );
DefaultResource[] collection =
getDefaultProviders( Scope.RUNTIME, true, c );
for( int j=0; j<collection.length; j++ )
@@ -1313,7 +1458,7 @@
}
DefaultResource[] resources =
getDefaultProviders( Scope.RUNTIME, true, category );
- ArrayList stack = new ArrayList();
+ ArrayList<DefaultResource> stack = new ArrayList<DefaultResource>();
for( int i=0; i<resources.length; i++ )
{
DefaultResource resource = resources[i];
@@ -1323,7 +1468,7 @@
}
}

- return (DefaultResource[]) stack.toArray( new DefaultResource[0] );
+ return stack.toArray( new DefaultResource[0] );
}


//----------------------------------------------------------------------------
@@ -1337,18 +1482,19 @@

DefaultResource[] sortDefaultResources( final DefaultResource[]
resources, final Scope scope )
{
- ArrayList visited = new ArrayList();
- ArrayList stack = new ArrayList();
+ ArrayList<DefaultResource> visited = new
ArrayList<DefaultResource>();
+ ArrayList<DefaultResource> stack = new ArrayList<DefaultResource>();
for( int i=0; i<resources.length; i++ )
{
DefaultResource resource = resources[i];
resource.sortDefaultResource( visited, stack, scope, resources );
}
- return (DefaultResource[]) stack.toArray( new DefaultResource[0] );
+ return stack.toArray( new DefaultResource[0] );
}

void sortDefaultResource(
- final List visited, final List stack, final Scope scope, final
DefaultResource[] resources )
+ final List<DefaultResource> visited, final List<DefaultResource>
stack,
+ final Scope scope, final DefaultResource[] resources )
{
if( visited.contains( this ) )
{
@@ -1527,7 +1673,7 @@
}
}

- private String getGroupName()
+ String getGroupName()
{
if( m_parent.isRoot() )
{
@@ -1538,4 +1684,9 @@
return m_parent.getResourcePath();
}
}
+
+ String getScheme()
+ {
+ return m_directive.getScheme();
+ }
}

Added: trunk/main/depot/library/src/main/dpml/library/impl/DefaultType.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/impl/DefaultType.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/impl/DefaultType.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,291 @@
+/*
+ * Copyright 2007 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.library.impl;
+
+import dpml.library.info.TypeDirective;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Properties;
+import java.util.Hashtable;
+
+import dpml.library.Type;
+import dpml.library.Resource;
+
+import net.dpml.transit.Artifact;
+import net.dpml.transit.Layout;
+import net.dpml.transit.Transit;
+
+import net.dpml.util.Logger;
+
+/**
+ * Utility class used for construction of a module model from an XML source.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public final class DefaultType extends DefaultDictionary implements Type
+{
+ private final TypeDirective m_directive;
+ private final DefaultResource m_resource;
+
+ /**
+ * Creation of a new type.
+ * @param resource the resource
+ * @param type the type directive
+ */
+ public DefaultType( DefaultResource resource, TypeDirective type )
+ {
+ super( resource, type );
+
+ if( null == resource )
+ {
+ throw new NullPointerException( "resource" );
+ }
+ if( null == type )
+ {
+ throw new NullPointerException( "type" );
+ }
+
+ m_directive = type;
+ m_resource = resource;
+ }
+
+
//----------------------------------------------------------------------------
+ // Type
+
//----------------------------------------------------------------------------
+
+ /**
+ * Return the resource holding the type.
+ * @return the resource
+ */
+ public Resource getResource()
+ {
+ return m_resource;
+ }
+
+ /**
+ * Return the type production id.
+ * @return the type id
+ */
+ public String getID()
+ {
+ return m_directive.getID();
+ }
+
+ /**
+ * Return the alias version.
+ * @return the alias version value (may be null)
+ */
+ public String getVersion()
+ {
+ String version = m_directive.getVersion();
+ if( null == version )
+ {
+ return m_resource.getVersion();
+ }
+ else
+ {
+ return version;
+ }
+ }
+
+ public String getName()
+ {
+ String name = m_directive.getName();
+ if( null == name )
+ {
+ return m_resource.getName();
+ }
+ else
+ {
+ return name;
+ }
+ }
+
+ public String getCompoundName()
+ {
+ String name = m_directive.getName();
+ if( null == name )
+ {
+ return getID();
+ }
+ else
+ {
+ return getID() + "#" + name;
+ }
+ }
+
+ public String getSource()
+ {
+ return m_directive.getSource();
+ }
+
+ public boolean getTest()
+ {
+ return m_directive.getTest();
+ }
+
+ /**
+ * Return the alias production flag.
+ * @return the alias flag
+ */
+ public boolean getAliasProduction()
+ {
+ return m_directive.getAliasProduction();
+ }
+
+ /**
+ * Return the type local filename.
+ * @return the filename
+ */
+ public File getFile()
+ {
+ return getFile( false );
+ }
+
+ /**
+ * Return the type filename.
+ * @param local true if the requested filename is the local filename
otherwise the
+ * cached filename is returned
+ * @return the filename
+ */
+ public File getFile( boolean local ) // <!-- TODO: policy concerning
versions on test types
+ {
+ try
+ {
+ if( getTest() )
+ {
+ String id = getID();
+ String name = getName();
+ String path = "target/test/" + name + "." + id;
+ File basedir = m_resource.getBaseDir();
+ return new File( basedir, path );
+ }
+ else
+ {
+ if( local )
+ {
+ String id = getID();
+ String name = getName();
+ String version = getVersion();
+ String path = "target/deliverables/" + id + "s/" + name;
+ if( null != version )
+ {
+ path = path + "-" + version;
+ }
+ path = path + "." + id;
+ File basedir = m_resource.getBaseDir();
+ return new File( basedir, path );
+ }
+ else
+ {
+ Artifact artifact = getArtifact();
+ Layout layout = Transit.getInstance().getCacheLayout();
+ File cache = Transit.getInstance().getCacheDirectory();
+ String path = layout.resolvePath( artifact );
+ return new File( cache, path );
+ }
+ }
+ }
+ catch( Exception e )
+ {
+ final String error =
+ "Unable to resolve resource path.";
+ throw new RuntimeException( error, e );
+ }
+ }
+
+ public Artifact getArtifact()
+ {
+ String id = getID();
+ String group = m_resource.getGroupName();
+ String name = getName();
+ String version = getVersion();
+ String scheme = m_resource.getScheme();
+ return Artifact.createArtifact( scheme, group, name, version, id );
+ }
+
+ public Artifact getResolvedArtifact() throws IOException
+ {
+ try
+ {
+ Artifact artifact = getArtifact();
+ URL url = artifact.toURL();
+ url.openConnection().connect();
+ return artifact;
+ }
+ catch( IOException ioe )
+ {
+ final String error =
+ "Unable to resolve the artifact for the type ["
+ + getID()
+ + "] on the resource ["
+ + m_resource.getResourcePath()
+ + "].";
+ IOException e = new IOException( error );
+ e.initCause( ioe );
+ throw e;
+ }
+ }
+
+ public Artifact getLinkArtifact()
+ {
+ String id = getID();
+ String group = m_resource.getGroupName();
+ String name = getName();
+
+ try
+ {
+ String spec = "link:" + id;
+ if( null != group )
+ {
+ spec = spec + ":" + group + "/" + name;
+ }
+ else
+ {
+ spec = spec + ":" + name;
+ }
+ return Artifact.createArtifact( spec );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Failed to construct link artifact for resource ["
+ + m_resource.getResourcePath()
+ + "].";
+ throw new RuntimeException( error, e );
+ }
+ }
+
+ /**
+ * Return a filename using the layout strategy employed by the cache.
+ * @return the path
+ */
+ public String getLayoutPath()
+ {
+ Artifact artifact = getArtifact();
+ return Transit.getInstance().getCacheLayout().resolveFilename(
artifact );
+ }
+}

Modified:
trunk/main/depot/library/src/main/dpml/library/impl/InvalidNameException.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/impl/InvalidNameException.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/impl/InvalidNameException.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

/**
* Internal exception throw to indicate a bad name reference.
@@ -24,7 +24,7 @@
* @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
* @version @PROJECT-VERSION@
*/
-class InvalidNameException extends RuntimeException
+public class InvalidNameException extends RuntimeException
{
/**
* Creation of a new InvalidNameException.

Modified:
trunk/main/depot/library/src/main/dpml/library/impl/InvalidProcessorNameException.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/impl/InvalidProcessorNameException.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/impl/InvalidProcessorNameException.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

/**
* Internal exception throw when an attempt is made to reference a processor

Modified:
trunk/main/depot/library/src/main/dpml/library/impl/InvalidTypeNameException.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/impl/InvalidTypeNameException.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/impl/InvalidTypeNameException.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

/**
* Internal exception throw when an attempt is made to reference a type

Modified:
trunk/main/depot/library/src/main/dpml/library/info/AbstractDirective.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/AbstractDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/info/AbstractDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

import java.io.Serializable;
import java.util.Properties;

Deleted:
trunk/main/depot/library/src/main/dpml/library/info/DataDirective.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/DataDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/info/DataDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -1,95 +0,0 @@
-/*
- * Copyright 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.library.info;
-
-import net.dpml.library.Data;
-
-import java.util.Properties;
-
-import org.w3c.dom.Element;
-
-/**
- * Base class for a data directives.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public class DataDirective extends AbstractDirective implements Data
-{
- private final Element m_element;
-
- /**
- * Creation of a new data directive using a DOM element as the
- * datastructure definition.
- * @param element the DOM element
- */
- public DataDirective( Element element )
- {
- super();
- m_element = element;
- }
-
- /**
- * Creation of a new data directive using a supplied properties argument.
- * @param properties associated properties
- */
- public DataDirective( Properties properties )
- {
- super( properties );
- m_element = null;
- }
-
- /**
- * Return the datatype element.
- * @return the DOM element
- */
- public Element getElement()
- {
- return m_element;
- }
-
- /**
- * Compare this object with another for equality.
- * @param other the other object
- * @return true if equal
- */
- public boolean equals( Object other )
- {
- if( super.equals( other ) && ( other instanceof DataDirective ) )
- {
- DataDirective object = (DataDirective) other;
- return equals( m_element, object.m_element );
- }
- else
- {
- return false;
- }
- }
-
- /**
- * Compute the hash value.
- * @return the hascode value
- */
- public int hashCode()
- {
- int hash = super.hashCode();
- hash ^= hashValue( m_element );
- return hash;
- }
-}

Modified:
trunk/main/depot/library/src/main/dpml/library/info/DependencyDirective.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/DependencyDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/info/DependencyDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,14 +16,16 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

import java.util.Arrays;
import java.util.Properties;
import java.util.ArrayList;

-import net.dpml.lang.Category;
+import dpml.library.Scope;

+import dpml.util.Category;
+
/**
* The ModuleDirective class describes a module data-structure.
*
@@ -112,7 +114,7 @@
{
return m_includes;
}
- ArrayList list = new ArrayList();
+ ArrayList<IncludeDirective> list = new ArrayList<IncludeDirective>();
for( int i=0; i<m_includes.length; i++ )
{
IncludeDirective include = m_includes[i];
@@ -121,7 +123,7 @@
list.add( include );
}
}
- return (IncludeDirective[]) list.toArray( new IncludeDirective[0] );
+ return list.toArray( new IncludeDirective[0] );
}

/**

Modified:
trunk/main/depot/library/src/main/dpml/library/info/FeatureFilterDirective.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/FeatureFilterDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/info/FeatureFilterDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,13 +16,15 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

-import net.dpml.library.Feature;
-import net.dpml.library.Resource;
-import net.dpml.library.ResourceNotFoundException;
-import net.dpml.library.Type;
+import dpml.library.Feature;
+import dpml.library.Resource;
+import dpml.library.ResourceNotFoundException;
+import dpml.library.Type;

+import dpml.util.ObjectUtils;
+
/**
* Simple value filter.
*
@@ -260,7 +262,7 @@
*/
public boolean equals( Object other )
{
- if( super.equals( other ) && ( other instanceof
FeatureFilterDirective ) )
+ if( other instanceof FeatureFilterDirective )
{
FeatureFilterDirective directive = (FeatureFilterDirective)
other;
if( !m_feature.equals( directive.m_feature ) )
@@ -292,10 +294,10 @@
*/
public int hashCode()
{
- int hash = super.hashCode();
- hash ^= super.hashValue( m_feature );
- hash ^= super.hashValue( m_reference );
- hash ^= super.hashValue( m_type );
+ int hash = getClass().hashCode();
+ hash ^= ObjectUtils.hashValue( m_feature );
+ hash ^= ObjectUtils.hashValue( m_reference );
+ hash ^= ObjectUtils.hashValue( m_type );
if( m_alias )
{
hash ^= 1;

Modified:
trunk/main/depot/library/src/main/dpml/library/info/FilterDirective.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/FilterDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/info/FilterDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,13 +16,13 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

-import net.dpml.lang.AbstractDirective;
+import dpml.library.Filter;
+import dpml.library.Resource;
+import dpml.library.ResourceNotFoundException;

-import net.dpml.library.Filter;
-import net.dpml.library.Resource;
-import net.dpml.library.ResourceNotFoundException;
+import dpml.util.ObjectUtils;

/**
* Base class for filter directives.
@@ -30,7 +30,7 @@
* @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
* @version @PROJECT-VERSION@
*/
-public abstract class FilterDirective extends AbstractDirective implements
Filter
+public abstract class FilterDirective implements Filter
{
private final String m_token;

@@ -68,7 +68,7 @@
*/
public boolean equals( Object other )
{
- if( super.equals( other ) && ( other instanceof FilterDirective ) )
+ if( other instanceof FilterDirective )
{
FilterDirective directive = (FilterDirective) other;
return m_token.equals( directive.m_token );
@@ -85,8 +85,8 @@
*/
public int hashCode()
{
- int hash = super.hashCode();
- hash ^= super.hashValue( m_token );
+ int hash = getClass().hashCode();
+ hash ^= ObjectUtils.hashValue( m_token );
return hash;
}
}

Modified:
trunk/main/depot/library/src/main/dpml/library/info/ImportDirective.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/ImportDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/info/ImportDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,12 +16,10 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

import java.util.Properties;

-import net.dpml.lang.Enum;
-
/**
* The ImportDirective class describes a the import of resource via a file
or uri reference.
*
@@ -134,50 +132,16 @@
/**
* Mode of inclusion.
*/
- public static final class Mode extends Enum
+ public enum Mode
{
- static final long serialVersionUID = 1L;
-
/**
* File include stratgy constant.
*/
- public static final Mode FILE = new Mode( "file" );
+ FILE,

/**
* URI include stratgy constant.
*/
- public static final Mode URI = new Mode( "uri" );
-
- /**
- * Internal constructor.
- * @param label the enumeration label.
- */
- private Mode( String label )
- {
- super( label );
- }
-
- /**
- * Create a now mode using a supplied mode name.
- * @param value the mode name
- * @return the mode
- */
- public static Mode parse( String value )
- {
- if( value.equalsIgnoreCase( "file" ) )
- {
- return FILE;
- }
- else if( value.equalsIgnoreCase( "uri" ) )
- {
- return URI;
- }
- else
- {
- final String error =
- "Unrecognized module mode argument [" + value + "]";
- throw new IllegalArgumentException( error );
- }
- }
+ URI;
}
}

Modified:
trunk/main/depot/library/src/main/dpml/library/info/IncludeDirective.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/IncludeDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/info/IncludeDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,12 +16,11 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

import java.util.Properties;

-import net.dpml.lang.Category;
-import net.dpml.lang.Enum;
+import dpml.util.Category;

/**
* The IncludeDirective class describes a dependency on a named resource.
@@ -71,7 +70,7 @@
}
if( null == category )
{
- m_category = Category.UNDEFINED; // was PRIVATE
+ m_category = Category.PRIVATE; // was PRIVATE the changed to
UNDEFINED
}
else
{
@@ -162,59 +161,21 @@
/**
* Mode of inclusion.
*/
- public static final class Mode extends Enum
+ public enum Mode
{
- static final long serialVersionUID = 1L;
-
/**
* Include by reference to a local key.
*/
- public static final Mode KEY = new Mode( "key" );
+ KEY,

/**
* Include by reference to an absolute resource address.
*/
- public static final Mode REF = new Mode( "ref" );
+ REF,

/**
* Include by urn definition.
*/
- public static final Mode URI = new Mode( "uri" );
-
- /**
- * Internal constructor.
- * @param label the enumeration label.
- */
- private Mode( String label )
- {
- super( label );
- }
-
- /**
- * Create a now mode using a supplied mode name.
- * @param value the mode name
- * @return the mode
- */
- public static Mode parse( String value )
- {
- if( value.equalsIgnoreCase( "key" ) )
- {
- return KEY;
- }
- else if( value.equalsIgnoreCase( "ref" ) )
- {
- return REF;
- }
- else if( value.equalsIgnoreCase( "uri" ) )
- {
- return URI;
- }
- else
- {
- final String error =
- "Unrecognized resource mode argument [" + value + "]";
- throw new IllegalArgumentException( error );
- }
- }
+ URI;
}
}

Modified:
trunk/main/depot/library/src/main/dpml/library/info/InfoDirective.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/InfoDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/info/InfoDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,19 +16,21 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

-import net.dpml.lang.AbstractDirective;
+import java.io.Serializable;

-import net.dpml.library.Info;
+import dpml.util.ObjectUtils;

+import dpml.library.Info;
+
/**
* Info block descriptor.
*
* @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
* @version @PROJECT-VERSION@
*/
-public final class InfoDirective extends AbstractDirective implements Info
+public final class InfoDirective implements Info, Serializable
{
private final String m_title;
private final String m_description;
@@ -79,16 +81,16 @@
*/
public boolean equals( Object other )
{
- if( super.equals( other ) && ( other instanceof InfoDirective ) )
+ if( other instanceof InfoDirective )
{
InfoDirective info = (InfoDirective) other;
- if( !equals( m_title, info.m_title ) )
+ if( !ObjectUtils.equals( m_title, info.m_title ) )
{
return false;
}
else
{
- return equals( m_description, info.m_description );
+ return ObjectUtils.equals( m_description, info.m_description
);
}
}
else
@@ -103,9 +105,9 @@
*/
public int hashCode()
{
- int hash = super.hashCode();
- hash ^= super.hashValue( m_title );
- hash ^= super.hashValue( m_description );
+ int hash = getClass().hashCode();
+ hash ^= ObjectUtils.hashValue( m_title );
+ hash ^= ObjectUtils.hashValue( m_description );
return hash;
}
}

Modified:
trunk/main/depot/library/src/main/dpml/library/info/LibraryConstants.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/LibraryConstants.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/info/LibraryConstants.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

/**
* Abstract base class for encoder and decoder..
@@ -26,8 +26,8 @@
*/
abstract class LibraryConstants
{
- static final String PART_XSD_URI = "@PART-XSD-URI@";
- static final String MODULE_XSD_URI = "@MODULE-XSD-URI@";
+ static final String PART_XSD_URI = "@PART-XSD-SPEC-URI@";
+ static final String MODULE_XSD_URI = "dpml:library";

static final String XML_HEADER =
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";

Modified:
trunk/main/depot/library/src/main/dpml/library/info/LibraryDecoder.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/LibraryDecoder.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/info/LibraryDecoder.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -17,8 +17,11 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

+import dpml.lang.DOM3DocumentBuilder;
+import dpml.util.ElementHelper;
+
import java.io.File;
import java.io.IOException;
import java.io.FileNotFoundException;
@@ -28,18 +31,14 @@
import java.util.ArrayList;
import java.util.Properties;

-import net.dpml.library.Feature;
-import net.dpml.library.TypeBuilder;
-import net.dpml.library.info.ResourceDirective.Classifier;
+import dpml.library.Feature;
+import dpml.library.Classifier;
+import dpml.library.Scope;

-import net.dpml.lang.Category;
-import net.dpml.lang.Part;
+import dpml.util.Category;
import net.dpml.lang.Version;
+import net.dpml.lang.DecodingException;

-import net.dpml.util.DecodingException;
-import net.dpml.util.DOM3DocumentBuilder;
-import net.dpml.util.ElementHelper;
-
import org.w3c.dom.Element;
import org.w3c.dom.Document;
import org.w3c.dom.TypeInfo;
@@ -78,20 +77,22 @@
+ "] references a directory.";
throw new IllegalArgumentException( error );
}
+ final Element root = getRootElement( source );
try
{
- final Element root = getRootElement( source );
File base = source.getParentFile();
return buildLibraryDirective( base, root );
}
+ catch( DecodingException e )
+ {
+ throw e;
+ }
catch( Exception e )
{
final String error =
"Unexpected error while attempting to load library."
- + "File: '" + source + "'";
- IOException ioe = new IOException( error );
- ioe.initCause( e );
- throw ioe;
+ + "\nFile: '" + source + "'";
+ throw new DecodingException( error, e, root );
}
}

@@ -154,7 +155,7 @@

Properties properties = null;
ImportDirective[] imports = new ImportDirective[0];
- List list = new ArrayList();
+ List<ResourceDirective> list = new ArrayList<ResourceDirective>();
Element[] children = ElementHelper.getChildren( element );
for( int i=0; i<children.length; i++ )
{
@@ -174,7 +175,7 @@
list.add( resource );
}
}
- ResourceDirective[] resources = (ResourceDirective[]) list.toArray(
new ResourceDirective[0] );
+ ResourceDirective[] resources = list.toArray( new
ResourceDirective[0] );
return new LibraryDirective( imports, resources, properties );
}

@@ -203,7 +204,7 @@
+ "\n base: " + base
+ "\n path: " + path
+ "\n source: " + source;
- throw new DecodingException( element, error );
+ throw new DecodingException( error, null, element );
}
else if( source.isDirectory() )
{
@@ -212,7 +213,7 @@
+ "\n base: " + base
+ "\n path: " + path
+ "\n source: " + source;
- throw new DecodingException( element, error );
+ throw new DecodingException( error, null, element );
}
else
{
@@ -234,7 +235,7 @@
{
final String error =
"Internal error while attempting to resolve a import
directive.";
- throw new DecodingException( element, error, e );
+ throw new DecodingException( error, e, element );
}
}
else
@@ -298,8 +299,8 @@
buildInfoDirective(
ElementHelper.getChild( element, "info" ) );

- final DataDirective[] data =
- buildDataTypes(
+ final TypeDirective[] data =
+ buildTypeDirectives(
ElementHelper.getChild( element, "types" ) );

final DependencyDirective[] dependencies =
@@ -317,7 +318,7 @@
if( MODULE_ELEMENT_NAME.equals( tag ) )
{
File anchor = getAnchorDirectory( base, basedir );
- ArrayList list = new ArrayList();
+ ArrayList<ResourceDirective> list = new
ArrayList<ResourceDirective>();
Element[] children = ElementHelper.getChildren( element );
for( int i=0; i<children.length; i++ )
{
@@ -334,8 +335,7 @@
}
}

- ResourceDirective[] resources =
- (ResourceDirective[]) list.toArray( new
ResourceDirective[0] );
+ ResourceDirective[] resources = list.toArray( new
ResourceDirective[0] );
return ModuleDirective.createModuleDirective(
name, version, classifier, basedir, info, data,
dependencies,
properties, filters, resources );
@@ -353,7 +353,7 @@
"Invalid element name ["
+ tag
+ "].";
- throw new DecodingException( element, error );
+ throw new DecodingException( error, null, element );
}
}

@@ -446,7 +446,7 @@
{
final String error =
"Internal error while attempting to resolve an import
directive.";
- throw new DecodingException( element, error, e );
+ throw new DecodingException( error, e, element );
}
}
else
@@ -492,8 +492,8 @@

private DependencyDirective buildDependencyDirective( Element element )
throws DecodingException
{
- String name = element.getTagName();
- Scope scope = Scope.parse( name );
+ String name = element.getTagName().toUpperCase();
+ Scope scope = Scope.valueOf( name );
if( Scope.BUILD.equals( scope ) )
{
IncludeDirective[] includes = buildIncludeDirectives( element,
false );
@@ -565,7 +565,7 @@
"Invalid include element name ["
+ tag
+ "].";
- throw new DecodingException( element, error );
+ throw new DecodingException( error, null, element );
}
}

@@ -573,12 +573,12 @@
{
if( !flag )
{
- return Category.UNDEFINED;
+ return Category.PRIVATE; // was UNDEFINED
}
else
{
final String value = ElementHelper.getAttribute( element, "tag",
"private" );
- return Category.parse( value );
+ return Category.valueOf( value.toUpperCase() );
}
}

@@ -647,8 +647,8 @@
}
else if( "feature".equals( child.getTagName() ) )
{
- String id = ElementHelper.getAttribute( child, "id" );
- Feature feature = Feature.parse( id );
+ String id = ElementHelper.getAttribute( child, "id"
).toUpperCase();
+ Feature feature = Feature.valueOf( id );
String ref = ElementHelper.getAttribute( child, "ref" );
String type = ElementHelper.getAttribute( child, "type"
);
boolean alias = ElementHelper.getBooleanAttribute(
child, "alias" );
@@ -660,96 +660,44 @@
"Element name not recognized ["
+ child.getTagName()
+ "] (expecting 'filter').";
- throw new DecodingException( element, error );
+ throw new DecodingException( error, null, element );
}
}
return filters;
}
}

- private DataDirective[] buildDataTypes( Element element ) throws
Exception
+ private TypeDirective[] buildTypeDirectives( Element element ) throws
Exception
{
if( null == element )
{
- return new DataDirective[0];
+ return new TypeDirective[0];
}
Element[] children = ElementHelper.getChildren( element );
- DataDirective[] data = new DataDirective[ children.length ];
+ TypeDirective[] data = new TypeDirective[ children.length ];
for( int i=0; i<children.length; i++ )
{
Element child = children[i];
- data[i] = buildDataType( child );
+ data[i] = buildTypeDirective( child );
}
return data;
}

- private DataDirective buildDataType( Element element ) throws Exception
+ private TypeDirective buildTypeDirective( Element element ) throws
Exception
{
- TypeInfo info = element.getSchemaTypeInfo();
- String namespace = info.getTypeNamespace();
- String typeName = info.getTypeName();
-
- if( null == namespace )
- {
- throw new NullPointerException( "namespace" );
- }
-
- if( MODULE_XSD_URI.equals( namespace ) )
- {
- // it's a generic type declaration
-
- final String id = getID( element );
- final Properties properties = getProperties( element );
- final Version version = getVersion( element );
- return new TypeDirective( id, version, properties );
- }
- else if( info.isDerivedFrom( MODULE_XSD_URI, "AbstractType",
TypeInfo.DERIVATION_EXTENSION ) )
- {
- if(
- PART_XSD_URI.equals( namespace )
- || info.isDerivedFrom( PART_XSD_URI, "StrategyType",
TypeInfo.DERIVATION_EXTENSION ) )
- {
- final Version version = getVersion( element );
- return new TypeDirective( element, "part", version );
- }
- else
- {
- // id attribute is required
-
- final String id = getID( element );
- final Version version = getVersion( element );
- return new TypeDirective( element, id, version );
- }
- }
- else
- {
- final String error =
- "Unsupported element encountered during type directive
production."
- + "\nNamespace: "
- + namespace
- + "\nType: "
- + info.getTypeName()
- + "\nName: "
- + element.getTagName();
- throw new DecodingException( element, error );
- }
+ final String id = getID( element );
+ final Properties properties = getProperties( element );
+ final String version = getVersion( element );
+ final String source = getSource( element );
+ final String name = ElementHelper.getAttribute( element, "name" );
+ boolean alias = getAliasPolicy( element );
+ ProductionPolicy production = getProductionPolicy( element );
+ return new TypeDirective( production, id, name, version, alias,
source, properties );
}

- private Version getVersion( Element element )
+ private String getVersion( Element element )
{
- final String version = ElementHelper.getAttribute( element,
"version" );
- if( null != version )
- {
- return Version.parse( version );
- }
- else if( getAliasFlag( element ) )
- {
- return Version.NULL_VERSION;
- }
- else
- {
- return null;
- }
+ return ElementHelper.getAttribute( element, "version" );
}

private Properties buildProperties( Element element )
@@ -806,28 +754,6 @@
}
}

- private TypeBuilder loadTypeBuilder( URI uri ) throws Exception
- {
- ClassLoader classloader = TypeBuilder.class.getClassLoader();
- Object[] args = new Object[0];
- Part part = Part.load( uri );
- Object handler = part.instantiate( args );
- if( handler instanceof TypeBuilder )
- {
- return (TypeBuilder) handler;
- }
- else
- {
- final String error =
- "Plugin ["
- + uri
- + "] does not implement the "
- + TypeBuilder.class.getName()
- + " interface.";
- throw new IllegalArgumentException( error );
- }
- }
-
/**
* Return the id attribute of the supplied element.
* @param element the DOM element
@@ -841,7 +767,7 @@
{
final String error =
"Missing type 'id'.";
- throw new DecodingException( element, error );
+ throw new DecodingException( error, null, element );
}
else
{
@@ -850,15 +776,38 @@
}

/**
+ * Return the source attribute of the supplied element.
+ * @param element the DOM element
+ * @return the source value
+ */
+ protected String getSource( Element element )
+ {
+ return ElementHelper.getAttribute( element, "source" );
+ }
+
+ /**
* Return the alias attribute of the supplied element.
* @param element the DOM element
* @return the alias production flag value
*/
- protected boolean getAliasFlag( Element element )
+ protected boolean getAliasPolicy( Element element )
{
return ElementHelper.getBooleanAttribute( element, "alias", false );
}

+ private ProductionPolicy getProductionPolicy( Element element )
+ {
+ boolean flag = ElementHelper.getBooleanAttribute( element, "test",
false );
+ if( flag )
+ {
+ return ProductionPolicy.TEST;
+ }
+ else
+ {
+ return ProductionPolicy.DELIVERABLE;
+ }
+ }
+
/**
* Return properties declared within the supplied element as immediate
* child <property> elements.

Modified:
trunk/main/depot/library/src/main/dpml/library/info/LibraryDirective.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/LibraryDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/info/LibraryDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

import java.util.Arrays;
import java.util.Properties;

Modified:
trunk/main/depot/library/src/main/dpml/library/info/LibraryEncoder.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/LibraryEncoder.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/info/LibraryEncoder.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

import java.io.OutputStream;
import java.io.IOException;
@@ -24,11 +24,13 @@
import java.io.OutputStreamWriter;
import java.util.Properties;

-import net.dpml.lang.Category;
+import dpml.util.Category;
import net.dpml.lang.Version;

-import net.dpml.library.info.IncludeDirective.Mode;
+import dpml.library.Classifier;
+import dpml.library.Scope;

+import dpml.library.info.IncludeDirective.Mode;

/**
* Utility class used for construction of a module model from an XML source.
@@ -279,18 +281,20 @@
{
String id = type.getID();
writer.write( "\n" + lead + "<type id=\"" + id + "\"" );
- Version version = type.getVersion();
+ String version = type.getVersion();
if( null != version )
{
- if( Version.NULL_VERSION.equals( version ) )
- {
- writer.write( " alias=\"true\"" );
- }
- else
- {
- writer.write( " version=\"" + version.getMajor() + "." +
version.getMinor() + "\"" );
- }
+ writer.write( " version=\"" + version + "\"" );
}
+ String name = type.getName();
+ if( null != name )
+ {
+ writer.write( " name=\"" + name + "\"" );
+ }
+ if( type.getAliasProduction() )
+ {
+ writer.write( " alias=\"true\"" );
+ }
writer.write( "/>" );
}

@@ -308,7 +312,7 @@
if( includes.length > 0 )
{
Scope scope = dependency.getScope();
- String label = scope.toString().toLowerCase();
+ String label = scope.name().toLowerCase();
writer.write( "\n" + lead + " <" + label + ">" );
for( int j=0; j<includes.length; j++ )
{
@@ -334,7 +338,7 @@
Category category = include.getCategory();
if( !Category.PRIVATE.equals( category ) )
{
- String name =
category.getName().toLowerCase();
+ String name = category.name().toLowerCase();
writer.write( " tag=\"" + name + "\"" );
}
}

Modified:
trunk/main/depot/library/src/main/dpml/library/info/ModuleDirective.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/ModuleDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/info/ModuleDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,11 +16,14 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

import java.util.Arrays;
import java.util.Properties;

+import dpml.library.Classifier;
+import dpml.library.Scope;
+
/**
* The ModuleDirective class describes a module data-structure.
*
@@ -50,7 +53,7 @@
*/
public static ModuleDirective createModuleDirective(
String name, String version, Classifier classifier, String basedir,
- InfoDirective info, DataDirective[] data,
+ InfoDirective info, TypeDirective[] data,
DependencyDirective[] dependencies, Properties properties,
FilterDirective[] filters, ResourceDirective[] resources )
{
@@ -74,7 +77,7 @@
enclosing =
new ModuleDirective(
elem, null, Classifier.EXTERNAL, null, null,
- new DataDirective[0], new DependencyDirective[0],
+ new TypeDirective[0], new DependencyDirective[0],
new ResourceDirective[]{enclosing}, null, null );
}
}
@@ -100,7 +103,7 @@
{
this(
name, version, Classifier.ANONYMOUS, null, null,
- new DataDirective[0], new DependencyDirective[0],
+ new TypeDirective[0], new DependencyDirective[0],
new ResourceDirective[]{resource}, null, null );
}

@@ -119,7 +122,7 @@
*/
public ModuleDirective(
String name, String version, Classifier classifier, String basedir,
- InfoDirective info, DataDirective[] data,
+ InfoDirective info, TypeDirective[] data,
DependencyDirective[] dependencies, ResourceDirective[] resources,
Properties properties, FilterDirective[] filters )
{

Added:
trunk/main/depot/library/src/main/dpml/library/info/ProductionPolicy.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/ProductionPolicy.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/info/ProductionPolicy.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2007 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.library.info;
+
+/**
+ * Enumeration identifying BUILD, RUNTIME and TEST phases.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public enum ProductionPolicy
+{
+ /**
+ * Deliverable resource.
+ */
+ DELIVERABLE,
+
+ /**
+ * Test resource
+ */
+ TEST
+}
+

Modified:
trunk/main/depot/library/src/main/dpml/library/info/ResourceDirective.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/ResourceDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/info/ResourceDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,13 +16,14 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

import java.util.Arrays;
import java.util.ArrayList;
import java.util.Properties;

-import net.dpml.lang.Enum;
+import dpml.library.Classifier;
+import dpml.library.Scope;

import net.dpml.transit.Artifact;

@@ -54,7 +55,6 @@
private final String m_version;
private final String m_basedir;
private final TypeDirective[] m_types;
- private final DataDirective[] m_data;
private final DependencyDirective[] m_dependencies;
private final Classifier m_classifier;
private final FilterDirective[] m_filters;
@@ -85,7 +85,7 @@
* @param classifier LOCAL or EXTERNAL classifier
* @param basedir the project basedir
* @param info info descriptor
- * @param data types produced by the resource
+ * @param types types produced by the resource
* @param dependencies resource dependencies
* @param properties suppliementary properties
* @param filters project filters
@@ -93,7 +93,7 @@
*/
public static ResourceDirective createResourceDirective(
String name, String version, Classifier classifier, String basedir,
- InfoDirective info, DataDirective[] data,
+ InfoDirective info, TypeDirective[] types,
DependencyDirective[] dependencies, Properties properties,
FilterDirective[] filters )
{
@@ -109,7 +109,7 @@
{
resource =
new ResourceDirective(
- elem, version, classifier, basedir, info, data,
dependencies,
+ elem, version, classifier, basedir, info, types,
dependencies,
properties, filters );
}
else
@@ -117,7 +117,7 @@
resource =
new ModuleDirective(
elem, null, Classifier.EXTERNAL, null, null,
- new DataDirective[0], new DependencyDirective[0],
+ new TypeDirective[0], new DependencyDirective[0],
new ResourceDirective[]{resource}, null, null );
}
}
@@ -126,7 +126,7 @@
else
{
return new ResourceDirective(
- name, version, classifier, basedir, info, data,
+ name, version, classifier, basedir, info, types,
dependencies, properties, filters );
}
}
@@ -150,7 +150,6 @@

m_name = name;
m_types = new TypeDirective[]{new TypeDirective( type )};
- m_data = m_types;
m_dependencies = new DependencyDirective[0];
m_classifier = Classifier.ANONYMOUS;
m_version = version;
@@ -174,7 +173,7 @@
*/
ResourceDirective(
String name, String version, Classifier classifier, String basedir,
- InfoDirective info, DataDirective[] data,
+ InfoDirective info, TypeDirective[] types,
DependencyDirective[] dependencies, Properties properties,
FilterDirective[] filters )
{
@@ -184,9 +183,9 @@
{
throw new NullPointerException( "name" );
}
- if( null == data )
+ if( null == types )
{
- throw new NullPointerException( "data" );
+ throw new NullPointerException( "types" );
}
if( null == dependencies )
{
@@ -223,17 +222,7 @@
m_filters = filters;
}

- ArrayList list = new ArrayList();
- for( int i=0; i<data.length; i++ )
- {
- DataDirective directive = data[i];
- if( directive instanceof TypeDirective )
- {
- list.add( directive );
- }
- }
- m_types = (TypeDirective[]) list.toArray( new TypeDirective[0] );
- m_data = data;
+ m_types = types;
}

/**
@@ -329,16 +318,6 @@
}

/**
- * Return an array of supporting production data directives
- * (including all produced types).
- * @return the data directives
- */
- public DataDirective[] getDataDirectives()
- {
- return m_data;
- }
-
- /**
* Return an named type.
* @param name the type name
* @return the type directives
@@ -357,7 +336,7 @@
}
throw new TypeUnknownException( name );
}
-
+
/**
* Return an array of dependency directives.
* @return the dependency directive array
@@ -415,7 +394,7 @@
{
return false;
}
- else if( !Arrays.equals( m_data, object.m_data ) )
+ else if( !Arrays.equals( m_types, object.m_types ) )
{
return false;
}
@@ -442,70 +421,9 @@
hash ^= super.hashValue( m_version );
hash ^= super.hashValue( m_basedir );
hash ^= super.hashValue( m_info );
- hash ^= super.hashArray( m_data );
+ hash ^= super.hashArray( m_types );
hash ^= super.hashArray( m_dependencies );
hash ^= super.hashArray( m_filters );
return hash;
}
-
- /**
- * Resource classifier enumeration.
- * @author <a href="mailto:dev-dpml AT lists.ibiblio.org";>The Digital
Product Meta Library</a>
- */
- public static final class Classifier extends Enum
- {
- static final long serialVersionUID = 1L;
-
- /**
- * Anonymous resources.
- */
- public static final Classifier ANONYMOUS = new Classifier(
"anonymous" );
-
- /**
- * External resource.
- */
- public static final Classifier EXTERNAL = new Classifier( "external"
);
-
- /**
- * Local resources.
- */
- public static final Classifier LOCAL = new Classifier( "local" );
-
- /**
- * Internal constructor.
- * @param label the enumeration label.
- */
- private Classifier( String label )
- {
- super( label );
- }
-
- /**
- * Create a classified matching the supplied name.
- * @param value the classifier name
- * @return the classifier
- * @exception IllegalArgumentException if the supplied value is not
recognized
- */
- public static Classifier parse( String value ) throws
IllegalArgumentException
- {
- if( value.equalsIgnoreCase( "external" ) )
- {
- return EXTERNAL;
- }
- else if( value.equalsIgnoreCase( "local" ) )
- {
- return LOCAL;
- }
- else if( value.equalsIgnoreCase( "anonymous" ) )
- {
- return ANONYMOUS;
- }
- else
- {
- final String error =
- "Unrecognized module classifier argument [" + value + "]";
- throw new IllegalArgumentException( error );
- }
- }
- }
}

Modified: trunk/main/depot/library/src/main/dpml/library/info/Scope.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/info/Scope.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/info/Scope.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,94 +16,30 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

-import net.dpml.lang.ValuedEnum;
-
/**
* Enumeration identifying BUILD, RUNTIME and TEST phases.
*
* @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
* @version @PROJECT-VERSION@
*/
-public final class Scope extends ValuedEnum implements Comparable
+public enum Scope
{
- static final long serialVersionUID = 1L;
-
/**
* Build scope.
*/
- public static final Scope BUILD = new Scope( "build", 0 );
+ BUILD,

/**
* Runtime scope.
*/
- public static final Scope RUNTIME = new Scope( "runtime", 1 );
+ RUNTIME,

/**
* Test scope.
*/
- public static final Scope TEST = new Scope( "test", 2 );
-
- /**
- * Array of scope enumeration values.
- */
- private static final Scope[] ENUM_VALUES = new Scope[]{BUILD, RUNTIME,
TEST};
-
- /**
- * Returns an array of activation enum values.
- * @return the activation policies array
- */
- public static Scope[] values()
- {
- return ENUM_VALUES;
- }
+ TEST;

- /**
- * Internal constructor.
- * @param label the enumeration label.
- * @param index the enumeration index.
- */
- private Scope( String label, int index )
- {
- super( label, index );
- }
-
- /**
- * Return a string representation of the scope.
- * @return the string value
- */
- public String toString()
- {
- return getName().toUpperCase();
- }
-
- /**
- * Return a scope value matching the supplied value.
- * @param value the scope name
- * @return the scope
- * @exception IllegalArgumentException if the name if not recognized
- */
- public static Scope parse( String value ) throws IllegalArgumentException
- {
- if( value.equalsIgnoreCase( "build" ) )
- {
- return BUILD;
- }
- else if( value.equalsIgnoreCase( "runtime" ) )
- {
- return RUNTIME;
- }
- else if( value.equalsIgnoreCase( "test" ) )
- {
- return TEST;
- }
- else
- {
- final String error =
- "Unrecognized scope argument [" + value + "]";
- throw new IllegalArgumentException( error );
- }
- }
}


Modified:
trunk/main/depot/library/src/main/dpml/library/info/SimpleFilterDirective.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/SimpleFilterDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/info/SimpleFilterDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,11 +16,13 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

-import net.dpml.library.Resource;
-import net.dpml.library.ResourceNotFoundException;
+import dpml.library.Resource;
+import dpml.library.ResourceNotFoundException;

+import dpml.util.ObjectUtils;
+
/**
* Simple value filter.
*
@@ -78,7 +80,7 @@
public int hashCode()
{
int hash = super.hashCode();
- hash ^= super.hashValue( m_value );
+ hash ^= ObjectUtils.hashValue( m_value );
return hash;
}
}

Modified:
trunk/main/depot/library/src/main/dpml/library/info/TypeDirective.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/TypeDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/info/TypeDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,61 +16,46 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

import java.util.Properties;

-import net.dpml.lang.Version;
+import dpml.util.ObjectUtils;

-import net.dpml.library.Type;
+import dpml.library.Type;

-import org.w3c.dom.Element;
-
/**
* The ModuleDirective class describes a module data-structure.
*
* @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
* @version @PROJECT-VERSION@
*/
-public class TypeDirective extends DataDirective implements Type
+public class TypeDirective extends AbstractDirective
{
+ private final String m_id;
+ private final String m_version;
+ private final String m_source;
+ private final boolean m_alias;
+ private final boolean m_test;
private final String m_name;
- private final Version m_version;

/**
* Creation of a new type directive.
- * @param name the name
+ * @param id the type id
*/
- public TypeDirective( String name )
+ public TypeDirective( String id )
{
- this( name, null );
+ this( id, null );
}

/**
* Creation of a new type directive.
- * @param name the name
- * @param version alias version
- */
- public TypeDirective( String name, Version version )
- {
- this( (Element) null, name, version );
- }
-
- /**
- * Creation of a new type directive.
- * @param element DOM element defining the type
* @param id the type id
* @param version alias version
*/
- public TypeDirective( Element element, String id, Version version )
+ public TypeDirective( String id, String version )
{
- super( element );
- if( null == id )
- {
- throw new NullPointerException( "id" );
- }
- m_name = id;
- m_version = version;
+ this( ProductionPolicy.DELIVERABLE, id, null, version, false, null,
null );
}

/**
@@ -79,15 +64,26 @@
* @param version alias version
* @param properties supplimentary properties
*/
- public TypeDirective( String id, Version version, Properties properties )
+ public TypeDirective(
+ ProductionPolicy policy, String id, String name, String version,
boolean alias, String source, Properties properties )
{
super( properties );
+
+ if( null == policy )
+ {
+ throw new NullPointerException( "policy" );
+ }
if( null == id )
{
throw new NullPointerException( "id" );
}
- m_name = id;
+
+ m_id = id;
+ m_name = name;
m_version = version;
+ m_source = source;
+ m_alias = alias;
+ m_test = ProductionPolicy.TEST.equals( policy );
}

/**
@@ -96,19 +92,55 @@
*/
public String getID()
{
- return m_name;
+ return m_id;
}

/**
* Return the alias version.
* @return the alias version
*/
- public Version getVersion()
+ public String getVersion()
{
return m_version;
}

/**
+ * Return the type source relative to the project basedir
+ * @return the source relative file path
+ */
+ public String getSource()
+ {
+ return m_source;
+ }
+
+ /**
+ * Return the test flag.
+ * @return the test flag
+ */
+ public boolean getTest()
+ {
+ return m_test;
+ }
+
+ /**
+ * Return the alias production flag.
+ * @return the alias flag
+ */
+ public boolean getAliasProduction()
+ {
+ return m_alias;
+ }
+
+ /**
+ * Return the overriding name.
+ * @return the name
+ */
+ public String getName()
+ {
+ return m_name;
+ }
+
+ /**
* Compare this object with another for equality.
* @param other the other object
* @return true if equal
@@ -118,13 +150,17 @@
if( super.equals( other ) && ( other instanceof TypeDirective ) )
{
TypeDirective object = (TypeDirective) other;
- if( !m_name.equals( object.m_name ) )
+ if( !m_id.equals( object.m_id ) )
{
return false;
}
+ if( !equals( m_version, object.m_version ) )
+ {
+ return false;
+ }
else
{
- return equals( m_version, object.m_version );
+ return equals( m_name, object.m_name );
}
}
else
@@ -139,9 +175,9 @@
*/
public int hashCode()
{
- int hash = super.hashCode();
+ int hash = getClass().hashCode();
+ hash ^= hashValue( m_id );
hash ^= hashValue( m_name );
- hash ^= hashValue( m_version );
return hash;
}

@@ -151,6 +187,14 @@
*/
public String toString()
{
- return "type:" + m_name;
+ if( null == m_name )
+ {
+ return "type:" + m_id;
+ }
+ else
+ {
+ return "type:" + m_id + ":" + m_name;
+ }
}
+
}

Modified:
trunk/main/depot/library/src/main/dpml/library/info/TypeUnknownException.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/TypeUnknownException.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/info/TypeUnknownException.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

/**
* A TypeUnknownException is raised in response to a request for a type

Modified:
trunk/main/depot/library/src/main/dpml/library/info/ValidationException.java
===================================================================
---
trunk/main/depot/library/src/main/net/dpml/library/info/ValidationException.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/main/dpml/library/info/ValidationException.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

/**
* Internal exception throw to indicate an invalid structure.

Added: trunk/main/depot/library/src/main/dpml/library/package-info.java
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/package-info.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/package-info.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2007 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * <p>Project management library and supporting services.</p>
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+package dpml.library;

Deleted: trunk/main/depot/library/src/main/dpml/library/package.html
===================================================================
--- trunk/main/depot/library/src/main/net/dpml/library/package.html
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/main/dpml/library/package.html 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,8 +0,0 @@
-
-<body>
-
-<p>
-Library interfaces.
-</p>
-
-</body>

Copied: trunk/main/depot/library/src/test/dpml (from rev 1789,
trunk/main/depot/library/src/test/net/dpml)

Modified: trunk/main/depot/library/src/test/dpml/library/XMLTestCase.java
===================================================================
--- trunk/main/depot/library/src/test/net/dpml/library/XMLTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/test/dpml/library/XMLTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,16 +16,18 @@
* limitations under the License.
*/

-package net.dpml.library;
+package dpml.library;

import java.io.File;

-import net.dpml.library.info.LibraryDirective;
-import net.dpml.library.info.ModuleDirective;
-import net.dpml.library.info.ResourceDirective;
-import net.dpml.library.info.TypeDirective;
-import net.dpml.library.info.LibraryDecoder;
+import dpml.library.info.LibraryDirective;
+import dpml.library.info.ModuleDirective;
+import dpml.library.info.ResourceDirective;
+import dpml.library.info.TypeDirective;
+import dpml.library.info.LibraryDecoder;

+import dpml.util.StandardClassLoader;
+
import junit.framework.TestCase;


@@ -39,7 +41,7 @@
{
static
{
- System.setProperty( "java.protocol.handler.pkgs", "net.dpml.transit"
);
+ System.setProperty( "java.protocol.handler.pkgs", "dpml.transit" );
}

private LibraryDecoder m_decoder;
@@ -199,6 +201,7 @@

private LibraryDirective getDirective( String path ) throws Exception
{
+ Thread.currentThread().setContextClassLoader(
XMLTestCase.class.getClassLoader() );
String base = System.getProperty( "project.test.dir" );
File test = new File( base );
File file = new File( test, path );

Modified:
trunk/main/depot/library/src/test/dpml/library/impl/AbsoluteTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/impl/AbsoluteTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/test/dpml/library/impl/AbsoluteTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,15 +16,15 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

+import dpml.util.DefaultLogger;
+
import java.io.File;

-import net.dpml.library.Module;
-import net.dpml.library.Resource;
-
+import dpml.library.Module;
+import dpml.library.Resource;
import net.dpml.util.Logger;
-import net.dpml.util.DefaultLogger;

/**
* The ImportDirective class describes a the inclusion of a typed value.
@@ -36,7 +36,7 @@
{
static
{
- System.setProperty( "java.protocol.handler.pkgs", "net.dpml.transit"
);
+ System.setProperty( "java.protocol.handler.pkgs", "dpml.transit" );
}

private DefaultLibrary m_library;

Modified:
trunk/main/depot/library/src/test/dpml/library/impl/AbstractTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/impl/AbstractTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/test/dpml/library/impl/AbstractTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,8 +16,10 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

+import dpml.util.DefaultLogger;
+
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
@@ -26,11 +28,10 @@

import junit.framework.TestCase;

-import net.dpml.library.Resource;
-import net.dpml.library.info.Scope;
+import dpml.library.Resource;
+import dpml.library.Scope;

import net.dpml.util.Logger;
-import net.dpml.transit.monitor.LoggingAdapter;

/**
* Abstract library testcase.
@@ -40,9 +41,14 @@
*/
abstract class AbstractTestCase extends TestCase
{
- private Logger m_logger = new LoggingAdapter( "test" );
+ private Logger m_logger = new DefaultLogger( "test" );
private DefaultLibrary m_library;

+ static
+ {
+ Thread.currentThread().setContextClassLoader(
AbstractTestCase.class.getClassLoader() );
+ }
+
/**
* Return the library established by setup.
* @return the library
@@ -219,6 +225,6 @@
"java.util.logging.config.class",
System.getProperty(
"java.util.logging.config.class",
- "net.dpml.util.ConfigurationHandler" ) );
+ "dpml.util.ConfigurationHandler" ) );
}
}

Modified:
trunk/main/depot/library/src/test/dpml/library/impl/AnonymousTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/impl/AnonymousTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/impl/AnonymousTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,11 +16,11 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

-import net.dpml.library.Module;
-import net.dpml.library.Resource;
-import net.dpml.library.info.Scope;
+import dpml.library.Module;
+import dpml.library.Resource;
+import dpml.library.Scope;

/**
* Test DefaultLibrary implementation.

Modified:
trunk/main/depot/library/src/test/dpml/library/impl/DefaultDictionaryTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/impl/DefaultDictionaryTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/impl/DefaultDictionaryTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,9 +16,9 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

-import net.dpml.library.Resource;
+import dpml.library.Resource;

/**
* Testing the DefaultDictionary implementation.

Modified:
trunk/main/depot/library/src/test/dpml/library/impl/DefaultLibraryTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/impl/DefaultLibraryTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/impl/DefaultLibraryTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,14 +16,12 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

-import net.dpml.lang.Version;
+import dpml.library.Module;
+import dpml.library.Resource;
+import dpml.library.Type;

-import net.dpml.library.Module;
-import net.dpml.library.Resource;
-import net.dpml.library.Type;
-
import org.w3c.dom.Element;

/**
@@ -125,50 +123,4 @@
assertEquals( "spec-to-path", spec, path );
}

- /**
- * Mock type class.
- */
- private static class MockType implements Type
- {
- private String m_name;
- private Version m_version;
-
- /**
- * Creation of a new mock type instance.
- * @param name the type name
- * @param alias the alias production flag
- */
- public MockType( String name, Version version )
- {
- m_name = name;
- m_version = version;
- }
-
- /**
- * Return the type name.
- * @return the name
- */
- public String getID()
- {
- return m_name;
- }
-
- /**
- * Return the alias version.
- * @return the version
- */
- public Version getVersion()
- {
- return m_version;
- }
-
- /**
- * Return the type datastructure.
- * @return the data
- */
- public Element getElement()
- {
- return null;
- }
- }
}

Modified:
trunk/main/depot/library/src/test/dpml/library/impl/DefaultModuleTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/impl/DefaultModuleTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/impl/DefaultModuleTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,11 +16,11 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

-import net.dpml.library.Module;
-import net.dpml.library.Resource;
-import net.dpml.library.info.Scope;
+import dpml.library.Module;
+import dpml.library.Resource;
+import dpml.library.Scope;

/**
* Testing the DefaultModule implementation.

Modified:
trunk/main/depot/library/src/test/dpml/library/impl/DefaultResourceTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/impl/DefaultResourceTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/impl/DefaultResourceTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,16 +16,16 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

import java.io.File;

-import net.dpml.library.Resource;
-import net.dpml.library.info.Scope;
-import net.dpml.library.Type;
+import dpml.library.Resource;
+import dpml.library.Scope;
+import dpml.library.Type;

import net.dpml.transit.Artifact;
-import net.dpml.lang.Category;
+import dpml.util.Category;

/**
* Testing the DefaultResource implementation.
@@ -54,7 +54,7 @@
{
Resource resource = getLibrary().getResource( "junit/junit" );
String version = resource.getVersion();
- assertEquals( "version", "@JUNIT_VERSION@", version );
+ assertEquals( "version", "3.8.1", version );
}

/**
@@ -150,7 +150,7 @@
for( int i=0; i<types.length; i++ )
{
Type type = types[i];
- Artifact artifact = resource.getArtifact( type.getID() );
+ Artifact artifact = type.getArtifact();
String urn =
"artifact:"
+ type.getID()
@@ -413,7 +413,7 @@
}
else
{
- System.out.println( "# " + path + ", " +
category.getName().toUpperCase() );
+ System.out.println( "# " + path + ", " +
category.name().toUpperCase() );
for( int i=0; i<chain.length; i++ )
{
System.out.println( "# (" + ( i+1 ) + ") " + chain[i] );

Modified:
trunk/main/depot/library/src/test/dpml/library/impl/DuplicatesTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/impl/DuplicatesTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/impl/DuplicatesTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,14 +16,13 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

import java.io.File;

-import net.dpml.library.info.LibraryDecoder;
+import dpml.library.info.LibraryDecoder;

-import net.dpml.transit.monitor.LoggingAdapter;
-
+import dpml.util.DefaultLogger;
import net.dpml.util.Logger;

import junit.framework.TestCase;
@@ -62,8 +61,7 @@
String base = System.getProperty( "project.test.dir" );
File test = new File( base );
File file = new File( test, "samples/duplicates.xml" );
- Logger logger = new LoggingAdapter( "test" );
+ Logger logger = new DefaultLogger( "test" );
DefaultLibrary library = new DefaultLibrary( logger, file );
}
-
}

Deleted:
trunk/main/depot/library/src/test/dpml/library/impl/ExportTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/impl/ExportTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/test/dpml/library/impl/ExportTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -1,166 +0,0 @@
-/*
- * Copyright 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.library.impl;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.util.Arrays;
-
-import net.dpml.library.Module;
-import net.dpml.library.info.ModuleDirective;
-import net.dpml.library.info.ResourceDirective;
-import net.dpml.library.info.TypeDirective;
-import net.dpml.library.info.LibraryDecoder;
-import net.dpml.library.info.LibraryEncoder;
-
-
-/**
- * Test DefaultLibrary implementation.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public class ExportTestCase extends AbstractTestCase
-{
- /**
- * Test library properties.
- * @exception Exception if an error occurs during test execution
- */
- public void testExport() throws Exception
- {
- String spec = "dpml";
- Module module = getLibrary().getModule( spec );
- ModuleDirective directive = module.export();
- String testPath = System.getProperty( "project.test.dir" );
- File test = new File( testPath );
- File export = new File( test, "export.xml" );
- LibraryDecoder decoder = new LibraryDecoder();
- LibraryEncoder encoder = new LibraryEncoder();
- encoder.export( directive, new FileOutputStream( export ) );
- ResourceDirective result = decoder.buildResource( export.toURI() );
- compareResourceDirective( directive, result );
- assertEquals( "export", directive, result );
- }
-
- private void compareResourceDirective( ResourceDirective a,
ResourceDirective b )
- {
- if( equals( a, b ) )
- {
- return;
- }
-
- System.out.println( "exported resource: " + a.getName() + " is not
equals to constructed resource." );
-
- if( !a.getName().equals( b.getName() ) )
- {
- System.out.println( "# different names" );
- }
- if( !a.getVersion().equals( b.getVersion() ) )
- {
- System.out.println( "# different versions" );
- }
- if( !equals( a.getBasedir(), b.getBasedir() ) )
- {
- System.out.println( "# different basedirs" );
- }
- if( !Arrays.equals( a.getTypeDirectives(), b.getTypeDirectives() ) )
- {
- System.out.println( "# different types" );
- compareTypes( a.getTypeDirectives(), b.getTypeDirectives() );
- }
- if( !Arrays.equals( a.getDependencyDirectives(),
b.getDependencyDirectives() ) )
- {
- System.out.println( "# different dependencies" );
- }
- if( !a.getClassifier().equals( b.getClassifier() ) )
- {
- System.out.println( "# different classifiers" );
- }
- if( a instanceof ModuleDirective )
- {
- compareModuleDirective( (ModuleDirective) a, (ModuleDirective) b
);
- }
- }
-
- private void compareModuleDirective( ModuleDirective a, ModuleDirective
b )
- {
- ResourceDirective[] ar = a.getResourceDirectives();
- ResourceDirective[] br = b.getResourceDirectives();
- if( ar.length != br.length )
- {
- System.out.println( "# different subsidiary resource count" );
- }
- else
- {
- for( int i=0; i<ar.length; i++ )
- {
- ResourceDirective r = ar[i];
- ResourceDirective rx = br[i];
- if( !r.equals( rx ) )
- {
- compareResourceDirective( r, rx );
- }
- }
- }
- }
-
- private boolean equals( Object a, Object b )
- {
- if( null == a )
- {
- return ( null == b );
- }
- else
- {
- return a.equals( b );
- }
- }
-
- private void compareTypes( TypeDirective[] a, TypeDirective[] b )
- {
- if( a.length != b.length )
- {
- System.out.println( "# different type count" );
- }
- else
- {
- for( int i=0; i<a.length; i++ )
- {
- compareType( a[i], b[i] );
- }
- }
- }
-
- private void compareType( TypeDirective a, TypeDirective b )
- {
- if( !a.equals( b ) )
- {
- if( !a.getID().equals( b.getID() ) )
- {
- System.out.println( "# different type ids: " + a.getID() +
", " + b.getID() );
- }
- else
- {
- System.out.println( "# different types for id: " + a.getID()
);
- System.out.println( "# A: " + a );
- System.out.println( "# B: " + b );
- }
- }
- }
-}

Modified:
trunk/main/depot/library/src/test/dpml/library/impl/FiltersTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/impl/FiltersTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/test/dpml/library/impl/FiltersTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,18 +16,18 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

import java.io.File;

-import net.dpml.library.Filter;
-import net.dpml.library.Module;
-import net.dpml.library.Resource;
+import dpml.library.Filter;
+import dpml.library.Module;
+import dpml.library.Resource;

-import net.dpml.library.info.LibraryDecoder;
+import dpml.library.info.LibraryDecoder;

import net.dpml.util.Logger;
-import net.dpml.util.DefaultLogger;
+import dpml.util.DefaultLogger;

import junit.framework.TestCase;


Modified:
trunk/main/depot/library/src/test/dpml/library/impl/InfoTestCase.java
===================================================================
--- trunk/main/depot/library/src/test/net/dpml/library/impl/InfoTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/test/dpml/library/impl/InfoTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,15 +16,15 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

import java.io.File;

-import net.dpml.library.Info;
-import net.dpml.library.Module;
+import dpml.library.Info;
+import dpml.library.Module;

import net.dpml.util.Logger;
-import net.dpml.util.DefaultLogger;
+import dpml.util.DefaultLogger;

import junit.framework.TestCase;


Modified:
trunk/main/depot/library/src/test/dpml/library/impl/PropertiesTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/impl/PropertiesTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/impl/PropertiesTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,12 +16,12 @@
* limitations under the License.
*/

-package net.dpml.library.impl;
+package dpml.library.impl;

import java.io.File;

import net.dpml.util.Logger;
-import net.dpml.util.DefaultLogger;
+import dpml.util.DefaultLogger;

/**
* The ImportDirective class describes a the inclusion of a typed value.

Modified:
trunk/main/depot/library/src/test/dpml/library/info/AbstractTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/info/AbstractTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/test/dpml/library/info/AbstractTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

Modified:
trunk/main/depot/library/src/test/dpml/library/info/DependencyDirectiveTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/info/DependencyDirectiveTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/info/DependencyDirectiveTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,8 +16,11 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

+import dpml.library.Scope;
+
+
/**
* The ModuleDirective class describes a module data-structure.
*

Modified:
trunk/main/depot/library/src/test/dpml/library/info/ImportDirectiveTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/info/ImportDirectiveTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/info/ImportDirectiveTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

/**
* The ImportDirective class describes a the inclusion of a typed value.

Modified:
trunk/main/depot/library/src/test/dpml/library/info/IncludeDirectiveTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/info/IncludeDirectiveTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/info/IncludeDirectiveTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,9 +16,9 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

-import net.dpml.lang.Category;
+import dpml.util.Category;

/**
* The IncludeDirective class describes a the inclusion of a typed value.

Modified:
trunk/main/depot/library/src/test/dpml/library/info/InfoDirectiveTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/info/InfoDirectiveTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/info/InfoDirectiveTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

/**
* The ImportDirective class describes a the inclusion of a typed value.

Modified:
trunk/main/depot/library/src/test/dpml/library/info/LibraryDirectiveTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/info/LibraryDirectiveTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/info/LibraryDirectiveTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

/**
* The ModuleDirective class describes a module data-structure.

Modified:
trunk/main/depot/library/src/test/dpml/library/info/ModuleDirectiveTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/info/ModuleDirectiveTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/info/ModuleDirectiveTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,9 +16,9 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

-import net.dpml.library.info.ResourceDirective.Classifier;
+import dpml.library.Classifier;

/**
* The ModuleDirective class describes a module data-structure.
@@ -55,7 +55,7 @@
private final DependencyDirective[] m_dependencies =
DependencyDirectiveTestCase.DEPENDENCIES;
private final ResourceDirective[] m_resources =
ResourceDirectiveTestCase.RESOURCES;
private final FilterDirective[] m_filters = new FilterDirective[0];
- private final DataDirective[] m_data = TypeDirectiveTestCase.TYPES;
+ private final TypeDirective[] m_data = TypeDirectiveTestCase.TYPES;

private ModuleDirective m_module;


Modified:
trunk/main/depot/library/src/test/dpml/library/info/ResourceDirectiveTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/info/ResourceDirectiveTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/info/ResourceDirectiveTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,9 +16,9 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

-import net.dpml.library.info.ResourceDirective.Classifier;
+import dpml.library.Classifier;

/**
* The ModuleDirective class describes a module data-structure.
@@ -33,7 +33,7 @@
static final DependencyDirective[] DEPENDENCIES =
DependencyDirectiveTestCase.DEPENDENCIES;
static final TypeDirective[] TYPES = TypeDirectiveTestCase.TYPES;
static final ResourceDirective[] RESOURCES = new ResourceDirective[3];
- static final DataDirective[] DATA = new DataDirective[0];
+ static final TypeDirective[] DATA = new TypeDirective[0];
static final FilterDirective[] FILTERS = new FilterDirective[0];

static

Modified:
trunk/main/depot/library/src/test/dpml/library/info/ScopeTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/info/ScopeTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/library/src/test/dpml/library/info/ScopeTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

/**
* Test the scope enumeration.
@@ -33,7 +33,7 @@
*/
public void testBuildScope()
{
- Scope scope = Scope.parse( "build" );
+ Scope scope = Scope.valueOf( "BUILD" );
assertEquals( "scope", scope, Scope.BUILD );
}

@@ -42,7 +42,7 @@
*/
public void testRuntimeScope()
{
- Scope scope = Scope.parse( "runtime" );
+ Scope scope = Scope.valueOf( "RUNTIME" );
assertEquals( "scope", scope, Scope.RUNTIME );
}

@@ -51,7 +51,7 @@
*/
public void testTestScope()
{
- Scope scope = Scope.parse( "test" );
+ Scope scope = Scope.valueOf( "TEST" );
assertEquals( "scope", scope, Scope.TEST );
}

@@ -62,7 +62,7 @@
{
try
{
- Scope scope = Scope.parse( "abc" );
+ Scope scope = Scope.valueOf( "abc" );
fail( "Did not throw IllegalArgumentException" );
}
catch( IllegalArgumentException e )
@@ -79,15 +79,4 @@
Scope[] scopes = Scope.values();
assertEquals( "scope count", 3, scopes.length );
}
-
- /**
- * Test directive serialization.
- * @exception Exception if an error occurs
- */
- public void testSerialization() throws Exception
- {
- Scope scope = Scope.parse( "test" );
- doSerializationTest( scope );
- }
-
}

Modified:
trunk/main/depot/library/src/test/dpml/library/info/TypeDirectiveTestCase.java
===================================================================
---
trunk/main/depot/library/src/test/net/dpml/library/info/TypeDirectiveTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/library/src/test/dpml/library/info/TypeDirectiveTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,11 +16,9 @@
* limitations under the License.
*/

-package net.dpml.library.info;
+package dpml.library.info;

-import net.dpml.lang.Version;

-
/**
* The ModuleDirective class describes a module data-structure.
*
@@ -32,9 +30,10 @@
static final TypeDirective[] TYPES = new TypeDirective[3];
static
{
- TYPES[0] = new TypeDirective( "jar", null, PROPERTIES );
- TYPES[1] = new TypeDirective( "plugin", Version.NULL_VERSION,
PROPERTIES );
- TYPES[2] = new TypeDirective( "widget", Version.parse( "1.2" ),
PROPERTIES );
+ TYPES[0] = new TypeDirective( "jar" );
+ TYPES[1] = new TypeDirective( "plugin", "0.0,0" );
+ TYPES[2] = new TypeDirective(
+ ProductionPolicy.DELIVERABLE, "widget", null, "1.2", false, null,
PROPERTIES );
}

/**
@@ -45,7 +44,7 @@
{
try
{
- TypeDirective type = new TypeDirective( null,
Version.NULL_VERSION, PROPERTIES );
+ TypeDirective type = new TypeDirective( null );
fail( "no-NPE" );
}
catch( NullPointerException e )
@@ -57,9 +56,9 @@
/**
* Test the type directive name accessor.
*/
- public void testTypeName()
+ public void testTypeID()
{
- TypeDirective type = new TypeDirective( "abc", Version.parse( "1.2"
), PROPERTIES );
+ TypeDirective type = new TypeDirective( "abc" );
assertEquals( "type", "abc", type.getID() );
}

@@ -68,7 +67,7 @@
*/
public void testNullTypeVersion()
{
- TypeDirective type = new TypeDirective( "abc", null, PROPERTIES );
+ TypeDirective type = new TypeDirective( "abc", null );
assertEquals( "null-version", null, type.getVersion() );
}

@@ -77,28 +76,18 @@
*/
public void testExplicitTypeVersion()
{
- Version version = Version.parse( "1.2" );
- TypeDirective type = new TypeDirective( "abc", version, PROPERTIES );
+ String version = "1.2";
+ TypeDirective type = new TypeDirective( "abc", version );
assertEquals( "version", version, type.getVersion() );
}

/**
- * Test the type directive alias accessor.
- */
- public void testLogicalNullVersion()
- {
- Version version = Version.NULL_VERSION;
- TypeDirective type = new TypeDirective( "abc", version, PROPERTIES );
- assertEquals( "version", version, type.getVersion() );
- }
-
- /**
* Test the type directive serialization.
* @exception Exception if an error occurs
*/
public void testSerialization() throws Exception
{
- TypeDirective type = new TypeDirective( "abc", Version.parse( "1.2"
), PROPERTIES );
+ TypeDirective type = new TypeDirective( "abc", "1.2" );
doSerializationTest( type );
}
}

Modified: trunk/main/depot/module.xml
===================================================================
--- trunk/main/depot/module.xml 2007-02-08 23:30:11 UTC (rev 1817)
+++ trunk/main/depot/module.xml 2007-02-08 23:31:25 UTC (rev 1818)
@@ -1,195 +1,51 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<module name="depot"
- xmlns="link:xsd:dpml/lang/dpml-module#1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
- xmlns:part="link:xsd:dpml/lang/dpml-part#1.0">
+<module name="depot" xmlns="dpml:library">

- <properties>
- <property name="project.minor.version" value="2"/>
- <property name="project.micro.version" value="0"/>
- </properties>
-
- <project name="dpml-library" basedir="library">
- <info title="DPML Project Management Library">
- <description>Module, project and resource management
system.</description>
- </info>
- <types>
- <type id="jar"/>
- </types>
- <dependencies>
- <runtime>
- <include ref="dpml/transit/dpml-transit-main"/>
- </runtime>
- <test>
- <include ref="ant/ant-junit"/>
- </test>
- </dependencies>
- <filters>
- <feature token="MODULE-XSD-URI" ref="dpml/lang/dpml-module" id="uri"
type="xsd" alias="true"/>
- <feature token="PART-XSD-URI" ref="dpml/lang/dpml-part" id="uri"
type="xsd" alias="true"/>
- <feature token="JUNIT_VERSION" ref="junit/junit" id="version"/>
- <feature token="PROJECT_VERSION" id="version"/>
- <feature token="ANT-BUILDER-URI" ref="dpml/depot/dpml-tools-builder"
id="uri" type="part" alias="true"/>
- </filters>
- </project>
+ <project file="library/project.xml"/>
+ <project file="build/project.xml"/>
+ <project file="tools/project.xml"/>
+ <project file="plugins/convert/project.xml"/>
+ <project file="plugins/checkstyle/project.xml"/>

- <project name="dpml-library-build" basedir="build">
- <info title="DPML Depot Build Tool">
- <description>Multi-project build automation tool.</description>
+ <!--
+ <project name="dpml-depot-javac" basedir="plugins/javac">
+ <info title="DPML Javac Compiler">
+ <description>Javac Compiler plugin.</description>
</info>
<types>
<type id="jar"/>
- <part:plugin alias="true"
class="net.dpml.library.console.BuilderPlugin"/>
+ <type id="part" alias="true" source="target/plugin.xml"/>
</types>
<dependencies>
- <build>
- <include key="dpml-tools-builder"/>
- </build>
<runtime>
- <include ref="dpml/depot/dpml-library"/>
- <include ref="dpml/util/dpml-util-cli"/>
- <include ref="dpml/transit/dpml-transit-main"/>
+ <include ref="dpml/depot/dpml-depot-builder"/>
+ <include uri="artifact:jar:openjdk/javac/javac"/>
+ <include ref="ant/ant-launcher"/>
</runtime>
- <test>
- <include ref="ant/ant-junit"/>
- </test>
</dependencies>
- <filters>
- <feature token="ANT-BUILDER-URI" ref="dpml/depot/dpml-tools-builder"
id="uri" type="part" alias="true"/>
- </filters>
</project>
+ -->

- <project name="dpml-depot-console" basedir="core">
- <info title="DPML Console">
- <description>Internal subsystem application handler.</description>
+ <!--
+ <project name="dpml-depot-adapter" basedir="adapter">
+ <info title="DPML Javac Compiler">
+ <description>Javac Compiler plugin.</description>
</info>
<properties>
- <property name="depot.short.filename" value="${project.name}.jar"/>
- <property name="transit.short.filename" value="dpml-transit-main.jar"/>
- <property name="project.jar.main.class" value="net.dpml.depot.Main"/>
+ <property name="project.javac.source" value="1.5"/>
+ <property name="project.javac.target" value="1.5"/>
</properties>
<types>
<type id="jar"/>
+ <type id="part" alias="true" source="target/plugin.xml"/>
</types>
<dependencies>
<runtime>
- <include ref="dpml/transit/dpml-transit-main"/>
+ <include ref="dpml/depot/dpml-depot-library"/>
+ <include uri="artifact:jar:openjdk/javac/javac"/>
</runtime>
- <test>
- <include ref="ant/ant-junit"/>
- </test>
</dependencies>
- <filters>
- <filter token="DEPOT-PATH" value="${depot.short.filename}"/>
- <filter token="DEPOT-MAIN-CLASS" value="${project.jar.main.class}"/>
- <filter token="TRANSIT-PATH" value="${transit.short.filename}"/>
- <filter token="DEPOT-CLASSLOADER-CLASS"
value="net.dpml.lang.SystemClassLoader"/>
- <feature token="BUILD-ID" id="version"/>
- <feature token="DEPOT-CONSOLE-URI" id="uri" type="jar"/>
- <feature token="TRANSIT-CORE-URI" id="uri" type="jar"
ref="dpml/transit/dpml-transit-main" />
- <feature token="TRANSIT-CONSOLE-URI" id="uri" type="part" alias="true"
ref="dpml/transit/dpml-transit-console" />
- <feature token="DEPOT-BUILDER-URI" id="uri" type="part" alias="true"
ref="dpml/depot/dpml-library-build" />
- <feature token="DEPOT-EXEC-URI" id="uri" type="part" alias="true"
ref="dpml/station/dpml-station-exec" />
- <feature token="DEPOT-STATION-URI" id="uri" type="part" alias="true"
ref="dpml/station/dpml-station-console" />
- <feature token="DEPOT-STATION-SERVER-URI" id="uri" type="part"
alias="true" ref="dpml/station/dpml-station-server" />
- </filters>
</project>
-
- <project name="dpml-tools-builder" basedir="tools">
- <info title="DPML Depot Toolkit">
- <description>Antlib supporting Depot-based build
automation.</description>
- </info>
- <types>
- <type id="jar"/>
- <part:plugin alias="true" class="net.dpml.tools.impl.StandardBuilder"/>
- </types>
- <dependencies>
- <runtime>
- <include ref="dpml/depot/dpml-library"/>
- <include ref="dpml/transit/dpml-transit-tools"/>
- <include ref="ant/ant-junit" tag="system"/>
- <include ref="ant/ant" tag="system"/>
- <include ref="ant/ant-xslp" tag="system"/>
- <include ref="ant/ant-trax" tag="system"/>
- </runtime>
- </dependencies>
- <filters>
- <feature token="PART-XSD-URI" id="uri" type="xsd" alias="true"
ref="dpml/lang/dpml-part" />
- <feature token="PROJECT-URI" id="uri" type="part"/>
- <feature token="PROJECT-LINK-URI" id="uri" type="part" alias="true"/>
- <feature token="PROJECT-NAME" id="name"/>
- <feature token="PROJECT-GROUP" id="group"/>
- <feature token="PROJECT-VERSION" id="version"/>
- <feature token="ANT-VERSION" id="version" ref="ant/ant"/>
- <feature token="JUNIT-VERSION" id="version" ref="junit/junit"/>
- <filter token="PLUGIN-CLASS"
value="net.dpml.tools.impl.StandardBuilder"/>
- <feature token="DEPOT-CHECKSTYLE-PLUGIN-URI" id="uri" type="part"
ref="dpml/depot/dpml-depot-checkstyle" />
- <feature token="DDEPOT-CHECKSTYLE-PLUGIN-LINK-URI" id="uri"
type="part" alias="true"
- ref="dpml/depot/dpml-depot-checkstyle" />
- <feature token="TRANSIT-CORE-VERSION" id="version"
ref="dpml/transit/dpml-transit-main"/>
- <feature token="TRANSIT-TOOLS-VERSION" id="version"
ref="dpml/transit/dpml-transit-tools"/>
- <feature token="LIBRARY-VERSION" id="version"
ref="dpml/depot/dpml-library"/>
- </filters>
- </project>
-
- <project name="dpml-depot-checkstyle" basedir="plugins/checkstyle">
- <info title="DPML Checkstyle Plugin">
- <description>Checkstyle plugin for Depot.</description>
- </info>
- <types>
- <type id="jar"/>
- <part:resource alias="true" urn="dpml:checkstyle"
path="net/dpml/tools/checkstyle/antlib.xml"/>
- </types>
- <dependencies>
- <runtime>
- <include ref="dpml/depot/dpml-tools-builder"/>
- <include uri="artifact:jar:checkstyle/checkstyle#4.1">
- <property name="project.api.host" value="http://api.dpml.net"/>
- <property name="project.api.root"
value="${project.api.host}/${project.group}/${project.version}"/>
- </include>
- <include uri="artifact:jar:commons-logging/commons-logging#1.0.4" />
- <include
uri="artifact:jar:commons-collections/commons-collections#3.1" />
- <include
uri="artifact:jar:commons-beanutils/commons-beanutils-core#1.7.0" />
- <include uri="artifact:jar:bcel/bcel#5.1" />
- <include uri="artifact:jar:antlr/antlr#2.7.2" />
- </runtime>
- </dependencies>
- </project>
-
- <project name="dpml-depot-convert" basedir="plugins/convert">
- <info title="DPML Java to HTML Converter">
- <description>Checkstyle plugin for Depot.</description>
- </info>
- <types>
- <type id="jar"/>
- <part:resource alias="true" urn="dpml:convert"
path="net/dpml/tools/convert/antlib.xml"/>
- </types>
- <dependencies>
- <runtime>
- <include uri="artifact:jar:java2html/java2html#4.2"/>
- <include ref="ant/ant-launcher"/>
- </runtime>
- </dependencies>
- </project>
+ -->

- <project name="dpml-depot-test" basedir="test">
- <info title="DPML Java to HTML Converter">
- <description>Depot Tests.</description>
- </info>
- <properties>
- <property name="project.major.version" value="0"/>
- <property name="project.minor.version" value="0"/>
- <property name="project.micro.version" value="0"/>
- </properties>
- <dependencies>
- <build>
- <include ref="dpml/depot/dpml-tools-builder"/>
- <include ref="ant/ant-junit"/>
- </build>
- <test>
- <include ref="ant/ant-junit"/>
- </test>
- </dependencies>
- </project>
-
</module>


Property changes on: trunk/main/depot/plugins
___________________________________________________________________
Name: svn:ignore
- validator

+ validator
javac


Modified: trunk/main/depot/plugins/checkstyle/build.xml
===================================================================
--- trunk/main/depot/plugins/checkstyle/build.xml 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/plugins/checkstyle/build.xml 2007-02-08 23:31:25
UTC (rev 1818)
@@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>

<project name="dpml-depot-checkstyle" default="install" basedir="."
- xmlns:transit="antlib:net.dpml.transit"
- xmlns:x="dpml:depot" >
+ xmlns:x="antlib:dpml.tools">

- <transit:import uri="local:template:dpml/tools/standard"/>
+ <x:import uri="local:template:dpml/tools/standard"/>

<target name="install" depends="standard.install">
<property name="prefs" location="${dpml.prefs}/dpml/tools"/>

Added: trunk/main/depot/plugins/checkstyle/etc/resource.xml
===================================================================
--- trunk/main/depot/plugins/checkstyle/etc/resource.xml 2007-02-08
23:30:11 UTC (rev 1817)
+++ trunk/main/depot/plugins/checkstyle/etc/resource.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<resource xmlns="dpml:antlib" urn="dpml:checkstyle"
path="dpml/tools/checkstyle/antlib.xml"/>

Added: trunk/main/depot/plugins/checkstyle/project.xml
===================================================================
--- trunk/main/depot/plugins/checkstyle/project.xml 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/plugins/checkstyle/project.xml 2007-02-08 23:31:25
UTC (rev 1818)
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="dpml:library" name="dpml-depot-checkstyle">
+
+ <info title="DPML Checkstyle Plugin">
+ <description>Checkstyle plugin for Depot.</description>
+ </info>
+
+ <types>
+ <type id="jar"/>
+ <type id="part" alias="true" source="target/resource.xml"/>
+ </types>
+
+ <dependencies>
+ <runtime>
+ <include ref="dpml/depot/dpml-depot-builder"/>
+ <include uri="artifact:jar:checkstyle/checkstyle#4.1">
+ <property name="project.api.host" value="http://api.dpml.net"/>
+ <property name="project.api.root"
value="${project.api.host}/${project.group}/${project.version}"/>
+ </include>
+ <include uri="artifact:jar:commons-logging/commons-logging#1.0.4" />
+ <include
uri="artifact:jar:commons-collections/commons-collections#3.1" />
+ <include
uri="artifact:jar:commons-beanutils/commons-beanutils-core#1.7.0" />
+ <include uri="artifact:jar:bcel/bcel#5.1" />
+ <include uri="artifact:jar:antlr/antlr#2.7.2" />
+ </runtime>
+ </dependencies>
+
+</project>

Copied: trunk/main/depot/plugins/checkstyle/src/main/dpml (from rev 1789,
trunk/main/depot/plugins/checkstyle/src/main/net/dpml)

Modified:
trunk/main/depot/plugins/checkstyle/src/main/dpml/tools/checkstyle/CheckstyleTask.java
===================================================================
---
trunk/main/depot/plugins/checkstyle/src/main/net/dpml/tools/checkstyle/CheckstyleTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/plugins/checkstyle/src/main/dpml/tools/checkstyle/CheckstyleTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.tools.checkstyle;
+package dpml.tools.checkstyle;

import java.io.File;
import java.net.URI;
@@ -24,10 +24,10 @@

import com.puppycrawl.tools.checkstyle.CheckStyleTask;

-import net.dpml.library.Resource;
-import net.dpml.library.Module;
+import dpml.library.Resource;
+import dpml.library.Module;

-import net.dpml.tools.Context;
+import dpml.tools.Context;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.BuildException;
@@ -123,12 +123,22 @@
*/
public void execute()
{
- Resource resource = m_context.getResource();
- if( m_implicit )
+ try
{
- addTargetToFileset( resource );
+ Resource resource = m_context.getResource();
+ if( m_implicit )
+ {
+ addTargetToFileset( resource );
+ }
+ super.execute();
}
- super.execute();
+ catch( Throwable e )
+ {
+ final String error =
+ "Checkstyle execution failure.";
+ e.printStackTrace();
+ //throw new BuildException( error, e, getLocation() );
+ }
}

private void addTargetToFileset( Resource resource )

Modified:
trunk/main/depot/plugins/checkstyle/src/main/dpml/tools/checkstyle/antlib.xml
===================================================================
---
trunk/main/depot/plugins/checkstyle/src/main/net/dpml/tools/checkstyle/antlib.xml
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/plugins/checkstyle/src/main/dpml/tools/checkstyle/antlib.xml
2007-02-08 23:31:25 UTC (rev 1818)
@@ -1,4 +1,4 @@
<?xml version="1.0"?>
<antlib>
- <taskdef name="checkstyle"
classname="net.dpml.tools.checkstyle.CheckstyleTask"/>
+ <taskdef name="checkstyle"
classname="dpml.tools.checkstyle.CheckstyleTask"/>
</antlib>

Added: trunk/main/depot/plugins/convert/build.xml
===================================================================
--- trunk/main/depot/plugins/convert/build.xml 2007-02-08 23:30:11 UTC (rev
1817)
+++ trunk/main/depot/plugins/convert/build.xml 2007-02-08 23:31:25 UTC (rev
1818)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<project name="dpml-depot-checkstyle" default="install" basedir="."
+ xmlns:x="antlib:dpml.tools">
+
+ <x:import uri="local:template:dpml/tools/standard"/>
+
+ <target name="javadoc"/>
+
+</project>

Added: trunk/main/depot/plugins/convert/etc/resource.xml
===================================================================
--- trunk/main/depot/plugins/convert/etc/resource.xml 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/plugins/convert/etc/resource.xml 2007-02-08 23:31:25
UTC (rev 1818)
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<resource xmlns="dpml:antlib" urn="dpml:convert"
path="dpml/tools/convert/antlib.xml"/>

Added: trunk/main/depot/plugins/convert/project.xml
===================================================================
--- trunk/main/depot/plugins/convert/project.xml 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/plugins/convert/project.xml 2007-02-08 23:31:25
UTC (rev 1818)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="dpml:library" name="dpml-depot-convert">
+
+ <info title="DPML Java to HTML Converter">
+ <description>Converts java source files to HTML pages.</description>
+ </info>
+
+ <types>
+ <type id="jar"/>
+ <type id="part" alias="true" source="target/resource.xml"/>
+ </types>
+
+ <dependencies>
+ <runtime>
+ <include uri="artifact:jar:java2html/java2html#4.2"/>
+ <include ref="org/apache/ant/ant"/>
+ </runtime>
+ </dependencies>
+
+</project>

Copied: trunk/main/depot/plugins/convert/src/main/dpml (from rev 1789,
trunk/main/depot/plugins/convert/src/main/net/dpml)

Added: trunk/main/depot/tools/CHANGES.TXT
===================================================================
--- trunk/main/depot/tools/CHANGES.TXT 2007-02-08 23:30:11 UTC (rev 1817)
+++ trunk/main/depot/tools/CHANGES.TXT 2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,25 @@
+
+Changes in 2.0 (pre)
+====================
+
+net.dpml.tools.impl
+-------------------
+
+1. removed presumption of source and target versions
+ int the Javac task (was linked to 1.4, now requires
+ developer to declare constraints as build properties
+ if required - i.e. we now default to the javac tool
+ policy)
+2. general code implovement via generics
+3. rationalization of the <type> production element
+ - removal of custom in-line type declaration
+ in favour of:
+ <type id="part" source="plugin.xml"/>
+ - support for test verus production types, where
+ test-based resources go to the target/test
+ directory and are not included as formal
+ project deliverables - e.g.:
+ <type id="jar" test="true"/>
+
+
+

Modified: trunk/main/depot/tools/bootstrap.properties
===================================================================
--- trunk/main/depot/tools/bootstrap.properties 2007-02-08 23:30:11 UTC (rev
1817)
+++ trunk/main/depot/tools/bootstrap.properties 2007-02-08 23:31:25 UTC (rev
1818)
@@ -1,7 +1,3 @@

project.group = dpml/depot
-project.name = dpml-tools-builder
-tools.ant.version = 1.6.5
-junit.version = 3.8.1
-junit.filename = junit-${junit.version}.jar
-junit.uri = artifact:jar:junit/junit#${junit.version}
+project.name = dpml-depot-builder

Modified: trunk/main/depot/tools/bootstrap.xml
===================================================================
--- trunk/main/depot/tools/bootstrap.xml 2007-02-08 23:30:11 UTC (rev
1817)
+++ trunk/main/depot/tools/bootstrap.xml 2007-02-08 23:31:25 UTC (rev
1818)
@@ -1,24 +1,24 @@
<?xml version="1.0" encoding="UTF-8" ?>

-<project name="dpml-tools-builder" default="install" basedir="."
- xmlns:transit="antlib:net.dpml.transit">
+<project name="dpml-depot-builder" default="install" basedir=".">

<property file="${basedir}/bootstrap.properties"/>
<property file="../../bootstrap.properties"/>
- <transit:import
file="${dpml.prefs}/dpml/transit/templates/bootstrap.template"/>
-
+ <property name="bootstrap.template"
location="${basedir}/../../bootstrap.xml"/>
+ <import file="${bootstrap.template}"/>
+
<target name="init" depends="bootstrap.init">
- <filter token="PART-XSD-URI" value="link:xsd:dpml/lang/dpml-part#1.0"/>
+ <filter token="PART-XSD-URI" value="dpml:part"/>
<filter token="PROJECT-URI"
value="artifact:part:${project.group}/${project.name}#${project.version}" />
<filter token="PROJECT-LINK-URI"
value="link:part:${project.group}/${project.name}" />
<filter token="PROJECT-NAME" value="${project.name}" />
<filter token="PROJECT-GROUP" value="${project.group}"/>
<filter token="PROJECT-VERSION" value="${project.version}"/>
- <filter token="ANT-VERSION" value="${tools.ant.version}"/>
+ <filter token="ANT-VERSION" value="${transit-ant.version}"/>
<filter token="JUNIT-VERSION" value="${junit.version}"/>
- <filter token="PLUGIN-CLASS"
value="net.dpml.tools.impl.StandardBuilder"/>
+ <filter token="PLUGIN-CLASS" value="dpml.tools.impl.StandardBuilder"/>
<filter token="DEPOT-CHECKSTYLE-PLUGIN-URI"
-
value="artifact:part:${project.group}/dpml-depot-checkstyle#SNAPSHOT"/>
+
value="artifact:part:${project.group}/dpml-depot-checkstyle#BOOTSTRAP"/>
<filter token="DEPOT-CHECKSTYLE-PLUGIN-LINK-URI"
value="link:part:${project.group}/dpml-depot-checkstyle"/>
<filter token="TRANSIT-CORE-VERSION" value="BOOTSTRAP"/>
@@ -27,21 +27,16 @@
</target>

<target name="setup-path" depends="bootstrap.setup-path">
- <transit:get property="junit.path" uri="${junit.uri}"/>
- <transit:get property="library.path"
- uri="artifact:jar:dpml/depot/dpml-library#BOOTSTRAP"/>
- <transit:get property="transit.path"
- uri="artifact:jar:dpml/transit/dpml-transit-main#BOOTSTRAP"/>
<path id="project.main.path">
- <pathelement
-
location="${dpml.local.cache}/dpml/transit/jars/dpml-transit-main-BOOTSTRAP.jar"/>
- <pathelement location="${library.path}"/>
+ <pathelement
location="${dpml.local.cache}/dpml/transit/jars/dpml-transit-main-BOOTSTRAP.jar"/>
+ <pathelement
location="${dpml.local.cache}/dpml/lang/jars/dpml-lang-part-BOOTSTRAP.jar"/>
+ <pathelement
location="${dpml.local.cache}/dpml/depot/jars/dpml-depot-library-BOOTSTRAP.jar"/>
+ <pathelement
location="${dpml.local.cache}/dpml/depot/jars/dpml-depot-build-BOOTSTRAP.jar"/>
<pathelement location="${target.classes.dir}"/>
</path>
<path id="project.test.path">
- <pathelement location="${junit.path}"/>
- <pathelement location="${library.path}"/>
- <pathelement location="${transit.path}"/>
+ <path refid="project.main.path"/>
+ <pathelement
location="${dpml.local.cache}/junit/jars/${junit.filename}"/>
<pathelement
location="${target.deliverables.jars.dir}/${project.filename}"/>
</path>
</target>

Modified: trunk/main/depot/tools/build.xml
===================================================================
--- trunk/main/depot/tools/build.xml 2007-02-08 23:30:11 UTC (rev 1817)
+++ trunk/main/depot/tools/build.xml 2007-02-08 23:31:25 UTC (rev 1818)
@@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>

-<project name="dpml-tools-builder" default="install" basedir="."
- xmlns:transit="antlib:net.dpml.transit"
- xmlns:x="dpml:depot" >
+<project name="dpml-depot-builder" default="install" basedir="."
+ xmlns:x="antlib:dpml.tools">

- <transit:import uri="local:template:dpml/tools/standard"/>
+ <x:import uri="local:template:dpml/tools/standard"/>

<target name="install" depends="standard.install">
<property name="tools.prefs" location="${dpml.prefs}/dpml/tools"/>

Modified: trunk/main/depot/tools/etc/bootstrap/builder.xml
===================================================================
--- trunk/main/depot/tools/etc/bootstrap/builder.xml 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/tools/etc/bootstrap/builder.xml 2007-02-08 23:31:25
UTC (rev 1818)
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<part xmlns="@PART-XSD-URI@"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+<part xmlns="dpml:part">

<info title="Depot Builder">
<description>
@@ -7,22 +7,21 @@
</description>
</info>

- <strategy xsi:type="plugin" class="@PLUGIN-CLASS@"/>
+ <component xmlns="dpml:metro" type="dpml.tools.impl.StandardBuilder"
+ handler="net.dpml.runtime.ComponentStrategyHandler"/>

<classpath>
- <system>
- <uri>artifact:jar:ant/ant-launcher#@ANT-VERSION@</uri>
- <uri>artifact:jar:ant/ant#@ANT-VERSION@</uri>
- <uri>artifact:jar:junit/junit#@JUNIT-VERSION@</uri>
- <uri>artifact:jar:ant/ant-junit#@ANT-VERSION@</uri>
- <uri>artifact:jar:ant/ant-xslp#@ANT-VERSION@</uri>
- <uri>artifact:jar:ant/ant-trax#@ANT-VERSION@</uri>
- </system>
<private>
-
<uri>artifact:jar:dpml/transit/dpml-transit-main#@TRANSIT-CORE-VERSION@</uri>
-
<uri>artifact:jar:dpml/transit/dpml-transit-tools#@TRANSIT-TOOLS-VERSION@</uri>
- <uri>artifact:jar:dpml/depot/dpml-library#@LIBRARY-VERSION@</uri>
-
<uri>artifact:jar:@PROJECT-GROUP@/@PROJECT-NAME@#@PROJECT-VERSION@</uri>
+ <uri>artifact:jar:junit/junit#@JUNIT-VERSION@</uri>
+ <uri>artifact:jar:org/apache/ant/ant-launcher#@ANT-VERSION@</uri>
+ <uri>artifact:jar:org/apache/ant/ant#@ANT-VERSION@</uri>
+ <uri>artifact:jar:org/apache/ant/ant-trax#@ANT-VERSION@</uri>
+ <uri>artifact:jar:org/apache/ant/ant-junit#@ANT-VERSION@</uri>
+ <uri>artifact:jar:dpml/transit/dpml-transit-main#BOOTSTRAP</uri>
+ <uri>artifact:jar:dpml/lang/dpml-lang-part#BOOTSTRAP</uri>
+ <uri>artifact:jar:dpml/depot/dpml-depot-library#BOOTSTRAP</uri>
+ <uri>artifact:jar:dpml/depot/dpml-depot-build#BOOTSTRAP</uri>
+ <uri>artifact:jar:@PROJECT-GROUP@/@PROJECT-NAME@#BOOTSTRAP</uri>
</private>
</classpath>


Added: trunk/main/depot/tools/etc/component.xml
===================================================================
--- trunk/main/depot/tools/etc/component.xml 2007-02-08 23:30:11 UTC (rev
1817)
+++ trunk/main/depot/tools/etc/component.xml 2007-02-08 23:31:25 UTC (rev
1818)
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<component xmlns="dpml:metro" type="dpml.tools.impl.StandardBuilder"/>

Modified: trunk/main/depot/tools/etc/prefs/templates/standard.template
===================================================================
--- trunk/main/depot/tools/etc/prefs/templates/standard.template
2007-02-08 23:30:11 UTC (rev 1817)
+++ trunk/main/depot/tools/etc/prefs/templates/standard.template
2007-02-08 23:31:25 UTC (rev 1818)
@@ -17,13 +17,8 @@
-->

<project name="standard" default="install"
- xmlns:transit="antlib:net.dpml.transit"
- xmlns:x="dpml:depot" >
+ xmlns:x="antlib:dpml.tools" >

- <transit:plugin uri="@PROJECT-LINK-URI@">
- <antlib urn="dpml:depot" resource="net/dpml/tools/tasks/antlib.xml"/>
- </transit:plugin>
-
<target name="init">
<x:init/>
</target>
@@ -70,6 +65,10 @@
</xslt>
</target>

+ <target name="javadoc" depends="init">
+ <x:javadoc/>
+ </target>
+
</project>



Modified: trunk/main/depot/tools/etc/prefs/xmls/builder.xml
===================================================================
--- trunk/main/depot/tools/etc/prefs/xmls/builder.xml 2007-02-08 23:30:11
UTC (rev 1817)
+++ trunk/main/depot/tools/etc/prefs/xmls/builder.xml 2007-02-08 23:31:25
UTC (rev 1818)
@@ -9,7 +9,7 @@
<properties/>

<listeners>
- <listener name="standard"
class="net.dpml.tools.impl.StandardBuildListener" priority="0"/>
+ <listener name="standard" class="dpml.tools.impl.StandardBuildListener"
priority="0"/>
</listeners>

</builder>

Added: trunk/main/depot/tools/project.xml
===================================================================
--- trunk/main/depot/tools/project.xml 2007-02-08 23:30:11 UTC (rev 1817)
+++ trunk/main/depot/tools/project.xml 2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project xmlns="dpml:library" name="dpml-depot-builder">
+
+ <info title="DPML Depot Toolkit">
+ <description>Antlib supporting Depot-based build
automation.</description>
+ </info>
+
+ <types>
+ <type id="jar"/>
+ <type id="part" source="target/component.xml" alias="true"/>
+ </types>
+
+ <dependencies>
+ <runtime>
+ <include ref="dpml/lang/dpml-lang-part"/>
+ <include ref="dpml/depot/dpml-depot-library"/>
+ <include ref="dpml/depot/dpml-depot-build"/>
+ <include ref="org/apache/ant/ant"/>
+ <include ref="org/apache/ant/ant-junit"/>
+ <include ref="org/apache/ant/ant-trax"/>
+ <!--<include uri="artifact:jar:openjdk/javac/javac"/>-->
+ </runtime>
+ </dependencies>
+
+ <filters>
+ <filter token="PLUGIN-CLASS" value="dpml.tools.impl.StandardBuilder"/>
+ <feature token="PART-XSD-URI" id="uri" type="xsd" alias="true"
ref="dpml/lang/dpml-lang-part" />
+ <feature token="PART-XSD-SPEC-URI" id="uri" type="xsd" alias="true"
ref="dpml/lang/dpml-lang-part" />
+ <feature token="PROJECT-URI" id="uri" type="part"/>
+ <feature token="PROJECT-LINK-URI" id="uri" type="part" alias="true"/>
+ <feature token="PROJECT-NAME" id="name"/>
+ <feature token="PROJECT-GROUP" id="group"/>
+ <feature token="PROJECT-VERSION" id="version"/>
+ <feature token="ANT-VERSION" id="version" ref="org/apache/ant/ant"/>
+ <feature token="JUNIT-VERSION" id="version" ref="junit/junit"/>
+ <feature token="DEPOT-CHECKSTYLE-PLUGIN-URI" id="uri" type="part"
ref="dpml/depot/dpml-depot-checkstyle" />
+ <feature token="DEPOT-CHECKSTYLE-PLUGIN-LINK-URI" id="uri" type="part"
alias="true"
+ ref="dpml/depot/dpml-depot-checkstyle" />
+ <feature token="TRANSIT-CORE-VERSION" id="version"
ref="dpml/transit/dpml-transit-main"/>
+ <!--<feature token="TRANSIT-TOOLS-VERSION" id="version"
ref="dpml/transit/dpml-transit-tools"/>-->
+ <feature token="LIBRARY-VERSION" id="version"
ref="dpml/depot/dpml-depot-library"/>
+ </filters>
+
+</project>

Copied: trunk/main/depot/tools/src/main/dpml (from rev 1789,
trunk/main/depot/tools/src/main/net/dpml)

Deleted: trunk/main/depot/tools/src/main/dpml/tools/BuildError.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/BuildError.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/BuildError.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,73 +0,0 @@
-/*
- * Copyright 2006 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.tools;
-
-import org.apache.tools.ant.Location;
-
-/**
- * A BuildError is thrown when a fatal error occurs during build execution.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public class BuildError extends Error
-{
- private final Location m_location;
-
- /**
- * Creation of a new BuildError.
- * @param message the exception message
- */
- public BuildError( String message )
- {
- this( message, null );
- }
-
- /**
- * Creation of a new BuildError.
- * @param message the exception message
- * @param cause the causal exception
- */
- public BuildError( String message, Throwable cause )
- {
- this( message, cause, null );
- }
-
- /**
- * Creation of a new BuildError.
- * @param message the exception message
- * @param cause the causal exception
- * @param location the location of the error
- */
- public BuildError( String message, Throwable cause, Location location )
- {
- super( message, cause );
-
- m_location = location;
- }
-
- /**
- * Return the location of the build error.
- * @return the build location
- */
- public Location getLocation()
- {
- return m_location;
- }
-}

Added: trunk/main/depot/tools/src/main/dpml/tools/BuilderError.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/BuilderError.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/BuilderError.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2006 Stephen J. McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.tools;
+
+import org.apache.tools.ant.Location;
+
+import dpml.build.BuildError;
+
+/**
+ * A BuildError is thrown when a fatal error occurs during build execution.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class BuilderError extends BuildError
+{
+ private final Location m_location;
+
+ /**
+ * Creation of a new BuildError.
+ * @param message the exception message
+ */
+ public BuilderError( String message )
+ {
+ this( message, null );
+ }
+
+ /**
+ * Creation of a new BuildError.
+ * @param message the exception message
+ * @param cause the causal exception
+ */
+ public BuilderError( String message, Throwable cause )
+ {
+ this( message, cause, null );
+ }
+
+ /**
+ * Creation of a new BuildError.
+ * @param message the exception message
+ * @param cause the causal exception
+ * @param location the location of the error
+ */
+ public BuilderError( String message, Throwable cause, Location location )
+ {
+ super( message, cause );
+
+ m_location = location;
+ }
+
+ /**
+ * Return the location of the build error.
+ * @return the build location
+ */
+ public Location getLocation()
+ {
+ return m_location;
+ }
+}

Modified: trunk/main/depot/tools/src/main/dpml/tools/Context.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/Context.java 2006-11-30
21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/Context.java 2007-02-08
23:31:25 UTC (rev 1818)
@@ -16,13 +16,15 @@
* limitations under the License.
*/

-package net.dpml.tools;
+package dpml.tools;

import java.io.File;
+import java.io.IOException;

-import net.dpml.library.Library;
-import net.dpml.library.Resource;
-import net.dpml.library.info.Scope;
+import dpml.library.Library;
+import dpml.library.Resource;
+import dpml.library.Scope;
+import dpml.library.Type;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Path;
@@ -62,7 +64,7 @@
/**
*Initialize the context.
*/
- void init();
+ void init() throws IOException;

/**
* Return an Ant path suitable for compile or runtime usage. If the
supplied scope is
@@ -242,7 +244,7 @@
* @param type the deliverable type
* @return the directory
*/
- File getTargetDeliverable( String type );
+ //File getTargetDeliverable( String type );

/**
* Create a file relative to the resource basedir.
@@ -253,39 +255,39 @@

/**
* Return a filename using the layout strategy employed by the cache.
- * @param id the artifact type
+ * @param type the artifact type
* @return the filename
*/
- String getLayoutFilename( String id );
+ String getLayoutFilename( Type type );

/**
* Return the directory path representing the module structure and type
* using the layout strategy employed by the cache.
- * @param id the artifact type
+ * @param type the artifact type
* @return the path from the root of the cache to the directory
containing the artifact
*/
- String getLayoutBase( String id );
+ String getLayoutBase( Type type );

/**
* Return the full path to an artifact using the layout employed by the
cache.
- * @param id the artifact type
+ * @param type the artifact type
* @return the full path including base path and filename
*/
- String getLayoutPath( String id );
+ String getLayoutPath( Type type );

/**
* Utility operation to construct a new classpath path instance.
* @param scope the build scope
* @return the path
*/
- Path createPath( Scope scope );
+ Path createPath( Scope scope ) throws IOException;

/**
* Utility operation to construct a new path using a supplied array of
resources.
* @param resources the resource to use in path construction
* @return the path
*/
- Path createPath( Resource[] resources );
+ Path createPath( Resource[] resources ) throws IOException;

/**
* Utility operation to construct a new path using a supplied array of
resources.
@@ -294,6 +296,6 @@
* @param filter if true restrict path entries to resources that produce
jars
* @return the path
*/
- Path createPath( Resource[] resources, boolean resolve, boolean filter );
+ Path createPath( Resource[] resources, boolean resolve, boolean filter )
throws IOException;
}


Added: trunk/main/depot/tools/src/main/dpml/tools/antlib.xml
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/antlib.xml 2006-11-30
21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/antlib.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<antlib xmlns:current="ant:current">
+
+ <!-- TRANSIT TASKS -->
+
+ <!--<taskdef name="init" classname="dpml.tools.transit.MainTask"/>-->
+ <!--<taskdef name="plugin"
classname="dpml.tools.transit.PluginTask"/>-->
+ <taskdef name="import"
classname="dpml.tools.transit.ImportArtifactTask"/>
+ <taskdef name="get" classname="dpml.tools.transit.GetTask"/>
+
+ <!-- DEPOT TASKS -->
+
+ <taskdef name="clean" classname="dpml.tools.tasks.CleanTask"/>
+ <taskdef name="init"
classname="dpml.tools.tasks.InitializationTask"/>
+ <taskdef name="prepare" classname="dpml.tools.tasks.PrepareTask"/>
+ <taskdef name="build" classname="dpml.tools.tasks.BuildTask"/>
+ <taskdef name="package" classname="dpml.tools.tasks.PackageTask"/>
+ <taskdef name="test" classname="dpml.tools.tasks.TestTask"/>
+ <taskdef name="install" classname="dpml.tools.tasks.InstallTask"/>
+
+ <taskdef name="jar" classname="dpml.tools.tasks.JarTask"/>
+ <taskdef name="junit" classname="dpml.tools.tasks.JUnitTestTask"/>
+ <taskdef name="property" classname="dpml.tools.tasks.PropertyTask"/>
+ <taskdef name="filter" classname="dpml.tools.tasks.FilterTask"/>
+ <taskdef name="module" classname="dpml.tools.tasks.ModuleTask"/>
+ <taskdef name="reactor" classname="dpml.tools.tasks.ReactorTask"/>
+ <taskdef name="plugin" classname="dpml.tools.tasks.PluginTask"/>
+ <taskdef name="replicate" classname="dpml.tools.tasks.ReplicateTask"/>
+ <taskdef name="javadoc" classname="dpml.tools.tasks.JavadocTask"/>
+ <taskdef name="docs" classname="dpml.tools.tasks.DocTask"/>
+ <taskdef name="rmic" classname="dpml.tools.tasks.RMICTask"/>
+
+ <!--<taskdef name="javac"
classname="dpml.tools.tasks.JavacTask"/>-->
+ <!--<taskdef name="export"
classname="dpml.tools.tasks.PluginExportTask"/>-->
+
+</antlib>

Deleted: trunk/main/depot/tools/src/main/dpml/tools/impl/BuilderError.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/impl/BuilderError.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/impl/BuilderError.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -1,47 +0,0 @@
-/*
- * Copyright 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.tools.impl;
-
-/**
- * A BuilderError is thrown when a fatal error occurs during builder
configuration.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public class BuilderError extends Error
-{
- /**
- * Creation of a new BuilderError.
- * @param message the exception message
- */
- public BuilderError( String message )
- {
- this( message, null );
- }
-
- /**
- * Creation of a new BuilderError.
- * @param message the exception message
- * @param cause the causal exception
- */
- public BuilderError( String message, Throwable cause )
- {
- super( message, cause );
- }
-}

Modified: trunk/main/depot/tools/src/main/dpml/tools/impl/DefaultContext.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/impl/DefaultContext.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/impl/DefaultContext.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Stephen J. McConnell.
+ * Copyright 2005-2006 Stephen J. McConnell.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,36 +16,43 @@
* limitations under the License.
*/

-package net.dpml.tools.impl;
+package dpml.tools.impl;

+import dpml.build.Builder;
+import dpml.build.BuildError;
+
+import dpml.tools.BuilderError;
+
+import dpml.library.impl.DefaultLibrary;
+
+import dpml.tools.Context;
+import dpml.tools.info.ListenerDirective;
+
+import dpml.util.DefaultLogger;
+
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URI;
import java.util.Date;

-import net.dpml.lang.Plugin;
-import net.dpml.lang.Part;
+import net.dpml.lang.Strategy;
+import net.dpml.lang.ServiceRegistry;
+import net.dpml.lang.SimpleServiceRegistry;

-import net.dpml.library.info.Scope;
-import net.dpml.library.Library;
-import net.dpml.library.Resource;
-import net.dpml.library.Type;
-import net.dpml.library.Filter;
-import net.dpml.library.impl.DefaultLibrary;
+import dpml.library.Scope;
+import dpml.library.Library;
+import dpml.library.Resource;
+import dpml.library.Type;
+import dpml.library.Filter;

-import net.dpml.tools.info.ListenerDirective;
-
-import net.dpml.tools.Context;
-
import net.dpml.transit.Artifact;
import net.dpml.transit.Transit;
-import net.dpml.transit.link.LinkManager;
+import net.dpml.transit.LinkManager;
import net.dpml.transit.Layout;
-import net.dpml.transit.ClassicLayout;
+import net.dpml.transit.layout.ClassicLayout;

import net.dpml.util.Logger;
-import net.dpml.util.DefaultLogger;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.BuildException;
@@ -135,7 +142,7 @@
{
final String error =
"Error while attempting to setup the filter [" + token +
"].";
- throw new BuildException( error, e );
+ throw new BuilderError( error, e );
}
}

@@ -194,16 +201,17 @@
{
Type type = types[i];
String id = type.getID();
- File file = getTargetDeliverable( id );
+ String name = type.getCompoundName();
+ File file = type.getFile( true );
String path = file.getCanonicalPath();
- setProperty( "project.deliverable." + id + ".path", path );
+ setProperty( "project.deliverable." + name + ".path", path );
File dir = file.getParentFile();
String spec = dir.getCanonicalPath();
- setProperty( "project.deliverable." + id + ".dir", spec );
- String base = getLayoutBase( id );
- setProperty( "project.cache." + id + ".dir", base );
- String address = getLayoutPath( id );
- setProperty( "project.cache." + id + ".path", address );
+ setProperty( "project.deliverable." + name + ".dir", spec );
+ String base = getLayoutBase( type );
+ setProperty( "project.cache." + name + ".dir", base );
+ String address = getLayoutPath( type );
+ setProperty( "project.cache." + name + ".path", address );
}
}

@@ -238,7 +246,7 @@
* Initialize the context during which runtime and test path objects are
* established as project references.
*/
- public void init()
+ public void init() throws IOException
{
if( m_runtime != null )
{
@@ -254,10 +262,8 @@
m_test = createPath( Scope.TEST );
if( m_resource.isa( "jar" ) )
{
- File deliverables = getTargetDeliverablesDirectory();
- File jars = new File( deliverables, "jars" );
- String filename = getLayoutFilename( "jar" );
- File jar = new File( jars, filename );
+ Type type = m_resource.getType( "jar" );
+ File jar = type.getFile( true );
m_test.createPathElement().setLocation( jar );
}
final File testClasses = getTargetClassesTestDirectory();
@@ -317,9 +323,24 @@
{
if( m_runtime == null )
{
- init();
+ try
+ {
+ init();
+ }
+ catch( IOException e )
+ {
+ final String error =
+ "Unable to resolve path for the scope ["
+ + scope
+ + "] in the resource ["
+ + m_resource.getResourcePath()
+ + "] ("
+ + m_resource.getBaseDir()
+ + ").";
+ throw new BuildError( error, e );
+ }
}
- if( scope.isLessThan( Scope.TEST ) )
+ if( scope.compareTo( Scope.TEST ) < 0 )
{
return m_runtime;
}
@@ -581,20 +602,6 @@
}

/**
- * Return the project target deliverables directory.
- * @param type the deliverable type
- * @return the directory
- */
- public File getTargetDeliverable( String type )
- {
- Artifact artifact = m_resource.getArtifact( type );
- String path = CLASSIC_LAYOUT.resolveFilename( artifact );
- String types = type + "s";
- File root = new File( getTargetDeliverablesDirectory(), types );
- return new File( root, path );
- }
-
- /**
* Create a file relative to the resource basedir.
* @param path the relative path
* @return the directory
@@ -607,35 +614,43 @@

/**
* Return a filename using the layout strategy employed by the cache.
- * @param id the artifact type
+ * @param type the artifact type
* @return the filename
*/
- public String getLayoutFilename( String id )
+ public String getLayoutFilename( Type type )
{
- Artifact artifact = m_resource.getArtifact( id );
- return Transit.getInstance().getCacheLayout().resolveFilename(
artifact );
+ return type.getLayoutPath();
}

/**
* Return the directory path representing the module structure and type
* using the layout strategy employed by the cache.
- * @param id the artifact type
+ * @param type the artifact type
* @return the path from the root of the cache to the directory
containing the artifact
*/
- public String getLayoutBase( String id )
+ public String getLayoutBase( Type type ) // TODO: cleanup and move to
resource
{
- Artifact artifact = m_resource.getArtifact( id );
+ if( null == type )
+ {
+ throw new NullPointerException( "type" );
+ }
+ Artifact artifact = type.getArtifact();
return Transit.getInstance().getCacheLayout().resolveBase( artifact
);
}

/**
* Return the full path to an artifact using the layout employed by the
cache.
- * @param id the artifact type
+ * @param type the artifact type
* @return the full path including base path and filename
*/
- public String getLayoutPath( String id )
+ public String getLayoutPath( Type type ) // TODO: cleanup and move to
resource
{
- Artifact artifact = m_resource.getArtifact( id );
+ if( null == type )
+ {
+ throw new NullPointerException( "type" );
+ }
+
+ Artifact artifact = type.getArtifact();
return Transit.getInstance().getCacheLayout().resolvePath( artifact
);
}

@@ -644,19 +659,19 @@
* @param scope the build scope
* @return the path
*/
- public Path createPath( Scope scope )
+ public Path createPath( Scope scope ) throws IOException
{
- try
- {
+ //try
+ //{
Resource[] resources = m_resource.getClasspathProviders( scope );
return createPath( resources, true, true );
- }
- catch( Exception e )
- {
- final String error =
- "Unexpected error while constructing path instance for the
scope: " + scope;
- throw new RuntimeException( error, e );
- }
+ //}
+ //catch( Exception e )
+ //{
+ // final String error =
+ // "Unexpected error while constructing path instance for the
scope: " + scope;
+ // throw new BuilderError( error, e );
+ //}
}

/**
@@ -664,7 +679,7 @@
* @param resources the resource to use in path construction
* @return the path
*/
- public Path createPath( Resource[] resources )
+ public Path createPath( Resource[] resources ) throws IOException
{
return createPath( resources, true, false );
}
@@ -676,7 +691,7 @@
* @param filter if true restrict path entries to resources that produce
jars
* @return the path
*/
- public Path createPath( Resource[] resources, boolean resolve, boolean
filter )
+ public Path createPath( Resource[] resources, boolean resolve, boolean
filter ) throws IOException
{
final Path path = new Path( m_project );
File cache = (File) m_project.getReference( "dpml.cache" );
@@ -685,18 +700,33 @@
Resource resource = resources[i];
if( !resource.equals( getResource() ) )
{
- if( filter && resource.isa( "jar" ) )
+ if( filter )
{
- Artifact artifact = resource.getArtifact( "jar" );
- addToPath( cache, path, artifact, resolve );
+ if( resource.isa( "jar" ) )
+ {
+ Type type = resource.getType( "jar" );
+ if( !type.getTest() )
+ {
+ if( resolve )
+ {
+ Artifact artifact =
type.getResolvedArtifact();
+ }
+ File file = type.getFile();
+ path.createPathElement().setLocation( file );
+ }
+ }
}
else
{
Type[] types = resource.getTypes();
for( int j=0; j<types.length; j++ )
{
- Artifact artifact = resource.getArtifact(
types[j].getID() );
- addToPath( cache, path, artifact, resolve );
+ Type type = types[j];
+ if( !type.getTest() )
+ {
+ File file = type.getFile();
+ path.createPathElement().setLocation( file );
+ }
}
}
}
@@ -704,62 +734,6 @@
return path;
}

- private void addToPath( File cache, Path path, Artifact artifact,
boolean resolve )
- {
- Artifact target = getTargetArtifact( artifact );
- String location =
Transit.getInstance().getCacheLayout().resolvePath( target );
- File file = new File( cache, location );
- path.createPathElement().setLocation( file );
-
- if( resolve )
- {
- resolveArtifact( artifact );
- }
- }
-
- private Artifact getTargetArtifact( Artifact artifact )
- {
- String scheme = artifact.getScheme();
- if( !Artifact.LINK.equals( scheme ) )
- {
- return artifact;
- }
- else
- {
- try
- {
- LinkManager manager = Transit.getInstance().getLinkManager();
- URI uri = manager.getTargetURI( artifact.toURI() );
- return Artifact.createArtifact( uri );
- }
- catch( IOException e )
- {
- final String error =
- "Unable to resolve link artifact ["
- + artifact
- + "].";
- throw new BuildException( error, e );
- }
- }
- }
-
- private void resolveArtifact( Artifact artifact )
- {
- try
- {
- URL url = artifact.toURL();
- url.openStream();
- }
- catch( IOException e )
- {
- final String error =
- "Unable to resolve artifact ["
- + artifact
- + "].";
- throw new BuildException( error, e );
- }
- }
-
private static Resource newResource( File basedir ) throws Exception
{
Logger logger = new DefaultLogger();
@@ -790,35 +764,21 @@
{
String name = listener.getName();
URI uri = listener.getURI();
- try
- {
- String classname = listener.getClassname();
- Object object = loadInstance( name, uri, classname );
- return (BuildListener) object;
- }
- catch( ClassCastException e )
- {
- final String error =
- "Build listener ["
- + name
- + "] from uri ["
- + uri
- + "] does not implement "
- + BuildListener.class.getName();
- throw new BuilderError( error );
- }
+ String classname = listener.getClassname();
+ return loadBuildListener( name, uri, classname );
}
-
- private Object loadInstance( String name, URI uri, String classname )
+
+ private BuildListener loadBuildListener( String name, URI uri, String
classname )
{
+ ServiceRegistry registry = new SimpleServiceRegistry( this );
if( null == uri )
{
try
{
ClassLoader classloader = getClass().getClassLoader();
- Class clazz = classloader.loadClass( classname );
- Object[] args = new Object[]{this};
- return Plugin.instantiate( clazz, args );
+ Class<?> clazz = classloader.loadClass( classname );
+ Strategy strategy = Strategy.load( clazz, registry, name );
+ return strategy.getInstance( BuildListener.class );
}
catch( Throwable e )
{
@@ -834,25 +794,24 @@
ClassLoader context =
Thread.currentThread().getContextClassLoader();
try
{
- ClassLoader classloader = getClass().getClassLoader();
+ ClassLoader classloader = Builder.class.getClassLoader();
Thread.currentThread().setContextClassLoader( classloader );
- Object[] params = new Object[]{this};
- Part part = Part.load( uri );
+ Strategy strategy = Strategy.load( classloader, registry,
uri, name );
if( null == classname )
{
- return part.instantiate( params );
+ return strategy.getInstance( BuildListener.class );
}
else
{
- ClassLoader loader = part.getClassLoader();
- Class c = loader.loadClass( classname );
- return Plugin.instantiate( c, params );
+ ClassLoader loader = strategy.getClassLoader();
+ Class<?> c = loader.loadClass( classname );
+ return Strategy.load( c, registry, (String) null
).getInstance( BuildListener.class );
}
}
catch( Throwable e )
{
final String error =
- "Internal error while attempting to load plugin."
+ "Internal error while attempting to load build listener."
+ "\nURI: " + uri
+ "\nName: " + name;
throw new BuilderError( error, e );

Modified:
trunk/main/depot/tools/src/main/dpml/tools/impl/StandardBuildListener.java
===================================================================
---
trunk/main/depot/tools/src/main/net/dpml/tools/impl/StandardBuildListener.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/tools/src/main/dpml/tools/impl/StandardBuildListener.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,11 +16,11 @@
* limitations under the License.
*/

-package net.dpml.tools.impl;
+package dpml.tools.impl;

-import net.dpml.library.Resource;
+import dpml.library.Resource;

-import net.dpml.tools.Context;
+import dpml.tools.Context;

import org.apache.tools.ant.BuildListener;
import org.apache.tools.ant.BuildEvent;

Modified: trunk/main/depot/tools/src/main/dpml/tools/impl/StandardBuilder.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/impl/StandardBuilder.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/impl/StandardBuilder.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,25 +16,31 @@
* limitations under the License.
*/

-package net.dpml.tools.impl;
+package dpml.tools.impl;

+import dpml.build.Builder;
+import dpml.build.BuildError;
+
+import dpml.library.impl.DefaultLibrary;
+
+import dpml.tools.Context;
+import dpml.tools.BuilderError;
+import dpml.tools.info.BuilderDirective;
+import dpml.tools.info.BuilderDirectiveHelper;
+
+import dpml.tools.transit.MainTask;
+
import java.io.File;
import java.net.URI;
import java.net.URL;
import java.util.Vector;

-import net.dpml.library.Builder;
-import net.dpml.library.Library;
-import net.dpml.library.Resource;
+import net.dpml.annotation.Component;

-import net.dpml.tools.Context;
-import net.dpml.tools.BuildError;
-import net.dpml.tools.info.BuilderDirective;
-import net.dpml.tools.info.BuilderDirectiveHelper;
+import dpml.library.Library;
+import dpml.library.Resource;

import net.dpml.transit.Artifact;
-import net.dpml.transit.model.TransitModel;
-import net.dpml.transit.tools.MainTask;

import net.dpml.util.Logger;

@@ -46,6 +52,8 @@
import org.apache.tools.ant.input.DefaultInputHandler;
import org.apache.tools.ant.DemuxInputStream;

+import static net.dpml.annotation.LifestylePolicy.SINGLETON;
+
/**
* The StandardBuilder is a plugin established by the Tools build controller
* used for the building of a project based on the Ant build system in
conjunction
@@ -54,6 +62,7 @@
* @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
* @version @PROJECT-VERSION@
*/
+@Component( name="builder", lifestyle=SINGLETON )
public class StandardBuilder implements Builder
{
//
------------------------------------------------------------------------
@@ -91,40 +100,21 @@
//
------------------------------------------------------------------------

private Logger m_logger;
- private TransitModel m_model;
private Library m_library;
private boolean m_verbose;
- private Throwable m_result;

//
------------------------------------------------------------------------
// constructors
//
------------------------------------------------------------------------

- /**
- * Creation of a new standard builder.
- *
- * @param logger assigned logging channel
- * @param library the library
- */
- public StandardBuilder( Logger logger, Library library )
+ public StandardBuilder( Logger logger, Library library, Boolean verbose
) throws Exception
{
- this( logger, library, false );
- }
-
- /**
- * Creation of a new standard builder.
- *
- * @param logger assigned logging channel
- * @param library the library
- * @param verbose verbose execution flag
- */
- public StandardBuilder( Logger logger, Library library, boolean verbose )
- {
m_logger = logger;
m_verbose = verbose;
m_library = library;

- Thread.currentThread().setContextClassLoader(
Builder.class.getClassLoader() );
+ //Thread.currentThread().setContextClassLoader(
Builder.class.getClassLoader() );
+ Thread.currentThread().setContextClassLoader(
StandardBuilder.class.getClassLoader() );
}

//
------------------------------------------------------------------------
@@ -137,7 +127,7 @@
* @param targets an array of build target names
* @return the build success status
*/
- public boolean build( Resource resource, String[] targets )
+ public boolean build( Resource resource, String[] targets ) throws
Exception
{
Project project = null;
File template = null;
@@ -147,34 +137,26 @@
}
catch( Throwable e )
{
- m_result = e;
- if( m_logger.isErrorEnabled() )
- {
- final String error =
- "Failed to construct embedded project."
- + "\nResource: " + resource.getResourcePath()
- + "\nBasedir: " + resource.getBaseDir();
- m_logger.error( error, e );
- }
- return false;
+ final String error =
+ "Failed to construct embedded Ant project."
+ + "\nResource: " + resource.getResourcePath()
+ + "\nBasedir: " + resource.getBaseDir();
+ throw new BuilderError( error, e );
}
+
try
{
template = getTemplateFile( resource );
}
catch( Throwable e )
{
- m_result = e;
- if( m_logger.isErrorEnabled() )
- {
- final String error =
- "Failed to load template file."
- + "\nResource: " + resource.getResourcePath()
- + "\nBasedir: " + resource.getBaseDir();
- m_logger.error( error, e );
- }
- return false;
+ final String error =
+ "Failed to load template file."
+ + "\nResource: " + resource.getResourcePath()
+ + "\nBasedir: " + resource.getBaseDir();
+ throw new BuilderError( error, e );
}
+
return build( resource, project, template, targets );
}

@@ -245,7 +227,7 @@
{
final String error =
"Resource template property 'project.template' is
undefined.";
- throw new BuildException( error );
+ throw new BuilderError( error );
}
}
catch( BuildException e )
@@ -254,12 +236,11 @@
}
catch( Throwable e )
{
- m_result = e;
final String error =
"Unexpected error while attempting to resolve project
template."
+ "\nResource path: "
+ resource.getResourcePath();
- throw new BuildError( error, e );
+ throw new BuilderError( error, e );
}
}

@@ -267,90 +248,84 @@
// implementation
//
------------------------------------------------------------------------

- boolean build( Resource resource, Project project, File template,
String[] targets )
+ boolean build( Resource resource, Project project, File template,
String[] targets ) throws Exception
{
- try
+ ProjectHelper helper = (ProjectHelper) project.getReference(
"ant.projectHelper" );
+
+ if( null != template )
{
- ProjectHelper helper = (ProjectHelper) project.getReference(
"ant.projectHelper" );
-
- if( null != template )
+ helper.parse( project, template );
+ }
+
+ Vector<String> vector = new Vector<String>();
+ if( targets.length == 0 )
+ {
+ if( null != project.getDefaultTarget() )
{
- helper.parse( project, template );
+ vector.addElement( project.getDefaultTarget() );
}
-
- Vector vector = new Vector();
-
- if( targets.length == 0 )
- {
- if( null != project.getDefaultTarget() )
- {
- vector.addElement( project.getDefaultTarget() );
- }
- else
- {
- vector.addElement( CONFIGURATION.getDefaultPhase() );
- }
- }
else
{
- for( int i=0; i<targets.length; i++ )
- {
- String target = targets[i];
- vector.addElement( target );
- }
+ vector.addElement( CONFIGURATION.getDefaultPhase() );
}
-
- if( vector.size() == 0 )
+ }
+ else
+ {
+ for( int i=0; i<targets.length; i++ )
{
- final String errorMessage =
- "No targets requested and no default target declared.";
- throw new BuildException( errorMessage );
+ String target = targets[i];
+ vector.addElement( target );
}
-
+ }
+
+ if( vector.size() == 0 )
+ {
+ final String errorMessage =
+ "No targets requested and no default target declared.";
+ throw new BuildException( errorMessage );
+ }
+
+ Throwable error = null;
+ try
+ {
project.executeTargets( vector );
return true;
}
catch( BuildException e )
{
- m_result = e;
- if( m_logger.isDebugEnabled() )
+ error = e;
+ return false;
+ /*
+ if( cause instanceof RuntimeException )
{
- final String error =
- "Build failure."
- + "\nProject: " + resource.getResourcePath()
- + "\nBasedir: " + resource.getBaseDir()
- + "\nTemplate: " + template
- + "\nLocation: " + e.getLocation();
- Throwable cause = e.getCause();
- m_logger.error( error, cause );
+ throw (RuntimeException) cause;
}
- return false;
- }
- catch( Throwable e )
- {
- System.out.println(
- "# UNEXPECTED: "
- + e.toString()
- + " ("
- + m_logger.isErrorEnabled()
- + ")" );
-
- m_result = e;
- if( m_logger.isErrorEnabled() )
+ else if( cause instanceof Error )
{
- final String error =
- "Build error."
- + "\nProject: " + resource.getResourcePath()
- + "\nBasedir: " + resource.getBaseDir()
- + "\nTemplate: " + template;
- m_logger.error( error, e );
+ throw (Error) cause;
}
- return false;
+ else
+ {
+ return false;
+ }
+ */
}
finally
{
- project.fireBuildFinished( m_result );
+ project.fireBuildFinished( error );
}
+ /*
+ catch( RuntimeException e )
+ {
+ project.fireBuildFinished( e );
+ throw e;
+ }
+ catch( Error e )
+ {
+ project.fireBuildFinished( e );
+ throw e;
+ }
+ */
}

private File getTemplateFile( String spec )
@@ -376,6 +351,8 @@
{
Project project = newProject();
Context context = new DefaultContext( resource, project );
+ project.setName( resource.getName() );
+ project.setBaseDir( resource.getBaseDir() );
return project;
}
catch( Exception e )
@@ -383,7 +360,7 @@
final String error =
"Unable to establish build context."
+ "\nProject: " + resource;
- throw new BuildError( error, e );
+ throw new BuilderError( error, e );
}
}


Modified:
trunk/main/depot/tools/src/main/dpml/tools/info/BuilderDirective.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/info/BuilderDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/info/BuilderDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,12 +16,12 @@
* limitations under the License.
*/

-package net.dpml.tools.info;
+package dpml.tools.info;

import java.util.Arrays;
import java.util.Properties;

-import net.dpml.library.info.AbstractDirective;
+import dpml.library.info.AbstractDirective;

import net.dpml.lang.UnknownKeyException;


Modified:
trunk/main/depot/tools/src/main/dpml/tools/info/BuilderDirectiveHelper.java
===================================================================
---
trunk/main/depot/tools/src/main/net/dpml/tools/info/BuilderDirectiveHelper.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/tools/src/main/dpml/tools/info/BuilderDirectiveHelper.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.tools.info;
+package dpml.tools.info;

import java.io.File;
import java.io.IOException;
@@ -31,7 +31,7 @@
import net.dpml.transit.Artifact;
import net.dpml.transit.Transit;

-import net.dpml.util.ElementHelper;
+import dpml.util.ElementHelper;

import org.w3c.dom.Element;

@@ -108,7 +108,7 @@
*/
public static BuilderDirective build() throws Exception
{
- File prefs = Transit.DPML_PREFS;
+ File prefs = Transit.PREFS;
File config = new File( prefs, "dpml/tools/xmls/builder.xml" );
if( config.exists() )
{

Modified:
trunk/main/depot/tools/src/main/dpml/tools/info/ListenerDirective.java
===================================================================
---
trunk/main/depot/tools/src/main/net/dpml/tools/info/ListenerDirective.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/info/ListenerDirective.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,12 +16,12 @@
* limitations under the License.
*/

-package net.dpml.tools.info;
+package dpml.tools.info;

import java.net.URI;
import java.util.Properties;

-import net.dpml.library.info.AbstractDirective;
+import dpml.library.info.AbstractDirective;

/**
* The ListenerDirective is an immutable descriptor used to define

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/BuildTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/BuildTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/BuildTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,13 +16,13 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

import java.io.File;

-import net.dpml.library.info.Scope;
+import dpml.library.Scope;

-import net.dpml.tools.Context;
+import dpml.tools.Context;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Path;

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/CleanTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/CleanTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/CleanTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,11 +16,11 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

import java.io.File;

-import net.dpml.tools.Context;
+import dpml.tools.Context;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Delete;

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/DocTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/DocTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/DocTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -17,7 +17,7 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

import java.io.File;
import java.io.FileFilter;
@@ -52,7 +52,7 @@
*/
public class DocTask extends GenericTask
{
- private static final String ORG_NAME_VALUE = "The Digital Product Meta
Library";
+ private static final String ORG_NAME_VALUE = "The Digital Product
Management Laboratory";
private static final String DOC_TEMP_VALUE = "docs";
private static final String DOC_SRC_VALUE = "docs";
private static final String DOC_RESOURCES_VALUE = "resources";
@@ -310,7 +310,7 @@

private File getThemesDirectory()
{
- return new File( Transit.DPML_PREFS, "dpml/tools/themes" );
+ return new File( Transit.PREFS, "dpml/tools/themes" );
}

private String getHomePath()

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/FeatureTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/FeatureTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/FeatureTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,11 +16,11 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

-import net.dpml.library.Resource;
-import net.dpml.library.Feature;
-import net.dpml.library.Type;
+import dpml.library.Resource;
+import dpml.library.Feature;
+import dpml.library.Type;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
@@ -92,7 +92,7 @@
}

Resource resource = getResource();
- Feature feature = Feature.parse( m_feature );
+ Feature feature = Feature.valueOf( m_feature.toUpperCase() );
if( null == m_type )
{
return Feature.resolve( resource, feature );

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/FilterTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/FilterTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/FilterTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.Filter;

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/GenericTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/GenericTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/GenericTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,18 +16,20 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

+import dpml.util.StandardClassLoader;
+import dpml.library.impl.InvalidNameException;
+
import java.io.File;

+import dpml.tools.Context;
+import dpml.tools.impl.DefaultContext;

-import net.dpml.tools.Context;
-import net.dpml.tools.impl.DefaultContext;
+import dpml.library.Library;
+import dpml.library.Resource;
+import dpml.library.ResourceNotFoundException;

-import net.dpml.library.Library;
-import net.dpml.library.Resource;
-import net.dpml.library.ResourceNotFoundException;
-
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
@@ -37,6 +39,7 @@
import org.apache.tools.ant.taskdefs.Delete;
import org.apache.tools.ant.taskdefs.Checksum;
import org.apache.tools.ant.taskdefs.ExecTask;
+import org.apache.tools.ant.util.FileUtils;


/**
@@ -120,15 +123,16 @@
}
else
{
- //System.out.println(
- // net.dpml.lang.StandardClassLoader.toString(
- // object.getClass().getClassLoader(),
- // Context.class.getClassLoader() ) );
-
+ final String classpath = StandardClassLoader.toString(
+ object.getClass().getClassLoader(),
+ Context.class.getClassLoader() );
+
final String error =
"Object assigned under the 'project.context' key is not
assignable to a context instance."
+ "\nObject: " + object.getClass().getName()
- + "\nExpecting: " + Context.class.getName();
+ + "\nExpecting: " + Context.class.getName()
+ + classpath;
+
throw new IllegalStateException( error );
}
}
@@ -149,6 +153,11 @@
{
return new DefaultContext( project );
}
+ catch( InvalidNameException e )
+ {
+ String error = e.getMessage();
+ throw new BuildException( error, e, getLocation() );
+ }
catch( ResourceNotFoundException e )
{
final String message = e.getMessage();
@@ -255,7 +264,7 @@
*/
public void asc( final File file )
{
- final String path = Project.translatePath( file.toString() );
+ final String path = FileUtils.translatePath( file.toString() );
final File asc = new File( file.toString() + "." + ASC_EXT );
if( asc.exists() )
{
@@ -283,6 +292,19 @@
execute.execute();
}
}
+
+ protected String getProperty( String key, String value )
+ {
+ String v = getProject().getProperty( key );
+ if( null != v )
+ {
+ return v;
+ }
+ else
+ {
+ return getResource().getProperty( key, value );
+ }
+ }

private static final int TIMEOUT = 10000;
}

Modified:
trunk/main/depot/tools/src/main/dpml/tools/tasks/InitializationTask.java
===================================================================
---
trunk/main/depot/tools/src/main/net/dpml/tools/tasks/InitializationTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/InitializationTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,9 +16,9 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

-import net.dpml.tools.Context;
+import dpml.tools.Context;

/**
* General initialization during which context establishment is

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/InstallTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/InstallTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/InstallTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,8 +16,10 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

+import dpml.tools.BuilderError;
+
import java.io.File;
import java.io.OutputStream;
import java.io.FileOutputStream;
@@ -29,14 +31,17 @@

import net.dpml.lang.Version;

-import net.dpml.library.Module;
-import net.dpml.library.Resource;
-import net.dpml.library.Type;
+import dpml.library.Module;
+import dpml.library.Resource;
+import dpml.library.Type;

import net.dpml.transit.Artifact;
-import net.dpml.transit.artifact.ArtifactNotFoundException;
-import net.dpml.transit.link.ArtifactLinkManager;
+import net.dpml.transit.Transit;
+import net.dpml.transit.ArtifactNotFoundException;
+import net.dpml.transit.LinkManager;
+import net.dpml.transit.Layout;

+
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.FileSet;
@@ -63,57 +68,198 @@
private void installDeliverables()
{
Resource resource = getResource();
- String resourceVersion = resource.getVersion();
- boolean snapshot = "SNAPSHOT".equals( resourceVersion );
- boolean bootstrap = "BOOTSTRAP".equals( resourceVersion );
- boolean validation = resource.getBooleanProperty(
"project.validation.enabled", false );
- boolean validate = !snapshot && !bootstrap && validation;
Type[] types = resource.getTypes();
if( types.length == 0 )
{
return;
}

+ String resourceVersion = resource.getVersion();
+ boolean snapshot = "SNAPSHOT".equals( resourceVersion );
+ boolean bootstrap = "BOOTSTRAP".equals( resourceVersion );
+ boolean validation = resource.getBooleanProperty(
"project.validation.enabled", false );
+ boolean validate = !snapshot && !bootstrap && validation;
+
+ checkTypeProduction( resource );
+ installTypes( resource );
+
+ /*
final File deliverables =
getContext().getTargetDeliverablesDirectory();
for( int i=0; i < types.length; i++ )
{
Type type = types[i];
- checkType( resource, type, validate );
+ if( !type.getTest() )
+ {
+ checkType( resource, type, validate );
+ }
}
-
- if( deliverables.exists() )
+ */
+
+ //if( deliverables.exists() )
+ //{
+ // log( "Installing deliverables from [" + deliverables + "]",
Project.MSG_VERBOSE );
+ // final File cache = (File) getProject().getReference(
"dpml.cache" );
+ // log( "To cache dir [" + cache + "]", Project.MSG_VERBOSE );
+ // try
+ // {
+ // final FileSet fileset = new FileSet();
+ // fileset.setProject( getProject() );
+ // fileset.setDir( deliverables );
+ // fileset.createInclude().setName( "**/*" );
+ // Module parent = resource.getParent();
+ // if( null == parent )
+ // {
+ // copy( cache, fileset, true );
+ // }
+ // else
+ // {
+ // final String group = parent.getResourcePath();
+ // final File destination = new File( cache, group );
+ // copy( destination, fileset, true );
+ // }
+ // }
+ // catch( Throwable e )
+ // {
+ // final String error =
+ // "Unexpected error while constructing ant fileset."
+ // + "\nDeliverables dir: " + deliverables;
+ // throw new BuildException( error, e );
+ // }
+ //}
+ }
+
+ private void installTypes( Resource resource )
+ {
+ Type[] types = resource.getTypes();
+ for( Type type : types )
{
- log( "Installing deliverables from [" + deliverables + "]",
Project.MSG_VERBOSE );
- final File cache = (File) getProject().getReference(
"dpml.cache" );
- log( "To cache dir [" + cache + "]", Project.MSG_VERBOSE );
+ if( !type.getTest() )
+ {
+ installType( resource, type );
+ }
+ }
+ }
+
+ private void installType( Resource resource, Type type )
+ {
+ File local = type.getFile( true );
+ File cached = type.getFile( false );
+ log( "installing " + type.getCompoundName() + " to " + cached );
+ File parent = cached.getParentFile();
+ if( null != parent )
+ {
+ parent.mkdirs();
+ }
+
+ final Copy copy = (Copy) getProject().createTask( "copy" );
+ copy.setTaskName( "install" );
+ copy.setFile( local );
+ copy.setTofile( cached );
+ copy.setFiltering( false );
+ copy.setOverwrite( true );
+ copy.setPreserveLastModified( true );
+ copy.init();
+ copy.execute();
+
+ // take care of alias production
+
+ if( type.getAliasProduction() )
+ {
+ String id = type.getID();
try
{
- final FileSet fileset = new FileSet();
- fileset.setProject( getProject() );
- fileset.setDir( deliverables );
- fileset.createInclude().setName( "**/*" );
- Module parent = resource.getParent();
- if( null == parent )
+ Artifact artifact = type.getArtifact();
+ String uri = artifact.toURI().toASCIIString();
+ String link = type.getName() + "." + id + ".link";
+ File group = type.getFile( true ).getParentFile();
+ File out = new File( group, link );
+
+ boolean flag = true;
+ if( out.exists() )
{
- copy( cache, fileset, true );
+ LinkManager manager =
Transit.getInstance().getLinkManager();
+ URI enclosed = manager.getTargetURI( out.toURI() );
+ if( artifact.toURI().equals( enclosed ) )
+ {
+ flag = false;
+ }
}
- else
+
+ if( flag )
{
- final String group = parent.getResourcePath();
- final File destination = new File( cache, group );
- copy( destination, fileset, true );
+ log( "creating " + type.getID() + " alias" );
+ //final String message =
+ // link.toString()
+ // + "\n target: "
+ // + uri.toString();
+ //log( message, Project.MSG_VERBOSE );
+ out.createNewFile();
+ final OutputStream output = new FileOutputStream( out );
+ final Writer writer = new OutputStreamWriter( output );
+ writer.write( uri );
+ writer.close();
+ output.close();
+
}
+
+ final Copy cc = (Copy) getProject().createTask( "copy" );
+ cc.setTaskName( "install" );
+ cc.setFile( out );
+ File cache = Transit.getInstance().getCacheDirectory();
+ Layout layout = Transit.getInstance().getCacheLayout();
+ Artifact linkArtifact = type.getLinkArtifact();
+ String layoutPath = layout.resolvePath( linkArtifact );
+ File cachedLink = new File( cache, layoutPath );
+ cc.setTofile( cachedLink );
+ log( "installing " + type.getID() + " alias to " +
cachedLink );
+ cc.setFiltering( false );
+ cc.setOverwrite( true );
+ cc.setPreserveLastModified( true );
+ cc.init();
+ cc.execute();
}
- catch( Throwable e )
+ catch( Exception e )
{
final String error =
- "Unexpected error while constructing ant fileset."
- + "\nDeliverables dir: " + deliverables;
- throw new BuildException( error, e );
+ "Internal error while attempting to create a link for the
resource type ["
+ + id
+ + "] in project ["
+ + resource
+ + "].";
+ throw new BuildException( error, e, getLocation() );
}
}
}

+ private void checkTypeProduction( Resource resource )
+ {
+ Type[] types = resource.getTypes();
+ for( Type type : types )
+ {
+ if( !type.getTest() )
+ {
+ boolean exists = checkTypeProduction( resource, type );
+ if( !exists )
+ {
+ final String error =
+ "Project ["
+ + resource
+ + "] declares that it produces the resource type ["
+ + type.getCompoundName()
+ + "] however no artifacts of that type are present in
the target directory.";
+ throw new BuildException( error, getLocation() );
+ }
+ }
+ }
+ }
+
+ private boolean checkTypeProduction( Resource resource, Type type )
+ {
+ File local = type.getFile( true );
+ return local.exists();
+ }
+
+ /*
private void checkType( Resource resource, Type type, boolean validate )
{
//
@@ -143,25 +289,27 @@
// install process.
//

- Version version = type.getVersion();
- if( null != version )
+ if( type.getAliasProduction() )
{
+ Version version = type.getTypeVersion();
try
{
- Artifact artifact = resource.getArtifact( id );
+ Artifact artifact = resource.getArtifact( type, false );
String uri = artifact.toURI().toASCIIString();
String link = null;
- if( Version.NULL_VERSION.equals( version ) )
+ //if( Version.NULL_VERSION.equals( version ) )
+ if( null == version )
{
- link = resource.getName() + "." + id + ".link";
+ link = resource.getName( type ) + "." + id + ".link";
}
else
{
- link = resource.getName()
+ link = resource.getName( type )
+ "-"
- + version.getMajor()
- + "."
- + version.getMinor()
+ + version.toString()
+ //+ version.getMajor()
+ //+ "."
+ //+ version.getMinor()
+ "."
+ id + ".link";
}
@@ -169,7 +317,7 @@
boolean flag = true;
if( out.exists() )
{
- ArtifactLinkManager manager = new ArtifactLinkManager();
+ LinkManager manager =
Transit.getInstance().getLinkManager();
URI enclosed = manager.getTargetURI( out.toURI() );
if( artifact.toURI().equals( enclosed ) )
{
@@ -209,19 +357,19 @@
validateType( resource, type, target );
}
}
+ */

private void validateType( Resource resource, Type type, File target )
{
- String id = type.getID();
try
{
- Artifact artifact = resource.getArtifact( id );
+ Artifact artifact = type.getResolvedArtifact();
URL url = artifact.toURL();
File file = (File) url.getContent( new Class[]{File.class} );
if( file.exists() )
{
log( "validating " + target.getName() );
- compare( file, target, id );
+ compare( file, target, type );
}
}
catch( ArtifactNotFoundException anfe )
@@ -231,19 +379,20 @@
catch( IOException ioe )
{
final String error =
- "IO error while attempting to cross-check resource type: " + id
+ "IO error while attempting to cross-check resource type: "
+ + type
+ "\n" + ioe.toString();
- throw new BuildException( error, ioe, getLocation() );
+ throw new BuilderError( error, ioe, getLocation() );
}
}

- private void compare( File old, File target, String id )
+ private void compare( File old, File target, Type type )
{
String oldValue = getChecksum( old );
String newValue = getChecksum( target );
if( !oldValue.equals( newValue ) )
{
- String path = getContext().getLayoutFilename( id );
+ String path = getContext().getLayoutFilename( type );
final String error =
"A versioned resource created in this build has a different
MD5 signature "
+ "compared to an existing resource of the same name in the
cache directory. "

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/JUnitTestTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/JUnitTestTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/JUnitTestTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

import java.io.File;
import java.io.IOException;
@@ -27,14 +27,14 @@
import java.util.Properties;
import java.util.StringTokenizer;

-import net.dpml.library.Type;
-import net.dpml.library.Resource;
-import net.dpml.library.info.Scope;
+import dpml.library.Type;
+import dpml.library.Resource;
+import dpml.library.Scope;

-import net.dpml.tools.Context;
+import dpml.tools.Context;

import net.dpml.transit.Transit;
-import net.dpml.util.PropertyResolver;
+import dpml.util.PropertyResolver;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
@@ -153,8 +153,8 @@
private static final String TEST_ENV_VALUE = "env";
private static final boolean DEBUG_VALUE = true;
private static final boolean FORK_VALUE = true;
- private static final boolean HALT_ON_ERROR_VALUE = false;
- private static final boolean HALT_ON_FAILURE_VALUE = false;
+ private static final boolean HALT_ON_ERROR_VALUE = true;
+ private static final boolean HALT_ON_FAILURE_VALUE = true;

private File m_source;
private String m_classPathRef;
@@ -277,11 +277,12 @@
final FileSet fileset = createFileSet( src );
final JUnitTask junit = (JUnitTask) project.createTask( "junit" );
junit.setTaskName( getTaskName() );
+ junit.setOutputToFormatters( true );

final JUnitTask.SummaryAttribute summary = getSummaryAttribute();
junit.setPrintsummary( summary );

- junit.setShowOutput( true );
+ junit.setShowOutput( true);
junit.setTempdir( working );
junit.setReloading( true );
junit.setFiltertrace( true );
@@ -300,9 +301,28 @@
mkDir( reports );

final BatchTest batch = junit.createBatchTest();
+ batch.setFork( getForkProperty() );
batch.addFileSet( fileset );
batch.setTodir( reports );

+ junit.setErrorProperty( ERROR_KEY );
+ junit.setFailureProperty( FAILURE_KEY );
+ batch.setErrorProperty( ERROR_KEY );
+ batch.setFailureProperty( FAILURE_KEY );
+
+ final boolean haltOnErrorPolicy = getHaltOnErrorPolicy();
+ if( haltOnErrorPolicy )
+ {
+ junit.setHaltonerror( true );
+ batch.setHaltonerror( true );
+ }
+ final boolean haltOnFailurePolicy = getHaltOnFailurePolicy();
+ if( haltOnFailurePolicy )
+ {
+ junit.setHaltonfailure( true );
+ batch.setHaltonfailure( true );
+ }
+
final FormatterElement plain = newConfiguredFormatter( "plain" );
junit.addFormatter( plain );

@@ -383,7 +403,7 @@
logging.setKey( "java.util.logging.config.class" );
if( "dpml".equals( formatter ) )
{
- logging.setValue( "net.dpml.util.ConfigurationHandler" );
+ logging.setValue( "dpml.util.ConfigurationHandler" );
}
else
{
@@ -394,31 +414,19 @@

final Environment.Variable endorsed = new Environment.Variable();
endorsed.setKey( "java.endorsed.dirs" );
- endorsed.setValue( new File( Transit.DPML_SYSTEM, "lib/endorsed"
).getAbsolutePath() );
+ endorsed.setValue( new File( Transit.SYSTEM, "lib/endorsed"
).getAbsolutePath() );
junit.addConfiguredSysproperty( endorsed );

configureDeliverableSysProperties( junit );
configureForExecution( junit );

- junit.setErrorProperty( ERROR_KEY );
- junit.setFailureProperty( FAILURE_KEY );
- final boolean haltOnErrorPolicy = getHaltOnErrorPolicy();
- if( haltOnErrorPolicy )
- {
- junit.setHaltonerror( true );
- }
- final boolean haltOnFailurePolicy = getHaltOnFailurePolicy();
- if( haltOnFailurePolicy )
- {
- junit.setHaltonfailure( true );
- }
-
junit.init();
junit.execute();
}

private void setupTestProperties( JUnitTask junit, Project project, File
working )
{
+ Resource resource = getResource();
File base = project.getBaseDir();
final File properties = new File( base, "test.properties" );
if( properties.exists() )
@@ -429,8 +437,10 @@
props.setProperty( "project.test.dir",
working.getCanonicalPath() );
InputStream input = new FileInputStream( properties );
props.load( input );
+ Properties system = System.getProperties();
+ props = PropertyResolver.resolve( system, props );
+ props = resource.resolveProperties( props );
Enumeration enumeration = props.propertyNames();
- props = PropertyResolver.resolve( props );
while( enumeration.hasMoreElements() )
{
String name = (String) enumeration.nextElement();
@@ -457,7 +467,8 @@
{
task.setFork( true );
Project project = getProject();
- task.setDir( project.getBaseDir() );
+ File basedir = getResource().getBaseDir();
+ task.setDir( basedir );
JUnitTask.ForkMode mode = getForkMode();
if( null == mode )
{
@@ -494,7 +505,7 @@
{
Type type = types[i];
String id = type.getID();
- File file = context.getTargetDeliverable( id );
+ File file = type.getFile( true );
String path = file.getCanonicalPath();
final Environment.Variable variable = new
Environment.Variable();
variable.setKey( "project.deliverable." + id + ".path" );

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/JarTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/JarTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/JarTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,14 +16,14 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

import java.io.File;

import net.dpml.lang.Version;

-import net.dpml.library.Resource;
-import net.dpml.library.Type;
+import dpml.library.Resource;
+import dpml.library.Type;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.Jar;
@@ -129,13 +129,23 @@
return;
}
File jar = createJarFile( source );
- checksum( jar );
- asc( jar );
+ Resource resource = getResource();
+ Type type = resource.getType( "jar" );
+ if( !type.getTest() )
+ {
+ checksum( jar );
+ asc( jar );
+ }
}

private File createJarFile( final File classes )
{
final File temp = getTempFile();
+ final File tempdir = temp.getParentFile();
+ if( null != tempdir )
+ {
+ mkDir( tempdir );
+ }

final Jar jar = (Jar) getProject().createTask( "jar" );
jar.setTaskName( getTaskName() );
@@ -148,8 +158,10 @@

File dest = getDestination();
final File dir = dest.getParentFile();
- mkDir( dir );
-
+ if( null != dir )
+ {
+ mkDir( dir );
+ }
final Copy copy = (Copy) getProject().createTask( "copy" );
copy.setTaskName( getTaskName() );
copy.setFile( temp );
@@ -162,15 +174,18 @@

private File getTempFile()
{
- final File target = getContext().getTargetDirectory();
+ final File temp = getContext().getTargetTempDirectory();
final String path = getTempFilename();
- return new File( target, path );
+ return new File( temp, path );
}

private String getTempFilename()
{
Resource resource = getResource();
- String name = resource.getName();
+ Type type = resource.getType( "jar" );
+ String name = type.getName();
+ return name + "." + type.getID();
+ /*
Version version = resource.getDecimalVersion();
if( null != version )
{
@@ -181,6 +196,7 @@
String spec = resource.getVersion();
return name + "-" + spec + ".jar";
}
+ */
}

private Type getType()

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/JavacTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/JavacTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/JavacTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,14 +16,14 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

import java.io.File;

-import net.dpml.library.Resource;
-import net.dpml.library.info.Scope;
+import dpml.library.Resource;
+import dpml.library.Scope;

-import net.dpml.tools.Context;
+import dpml.tools.Context;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
@@ -81,8 +81,8 @@
private static final boolean DEBUG_VALUE = true;
private static final boolean FORK_VALUE = false;
private static final boolean DEPRECATION_VALUE = true;
- private static final String SOURCE_VALUE = "1.4";
- private static final String TARGET_VALUE = "1.4";
+ //private static final String SOURCE_VALUE = "1.4";
+ //private static final String TARGET_VALUE = "1.4";

private final Context m_context;

@@ -181,7 +181,7 @@
javac.setTaskName( getTaskName() );
javac.setIncludeantruntime( false );
String lint = getProperty( "project.javac.lint", null );
- if( null != lint )
+ if( ( null != lint ) && !"".equals( lint ) )
{
javac.createCompilerArg().setValue( "-Xlint:" + lint );
}
@@ -205,8 +205,14 @@
javac.setDeprecation( getDeprecationProperty() );
javac.setDebug( getDebugProperty() );
javac.setFork( getForkProperty() );
- javac.setSource( getSourceProperty() );
- javac.setTarget( getTargetProperty() );
+ if( null != getSourceProperty() )
+ {
+ javac.setSource( getSourceProperty() );
+ }
+ if( null != getTargetProperty() )
+ {
+ javac.setTarget( getTargetProperty() );
+ }
javac.setClasspath( classpath );
javac.init();
javac.execute();
@@ -250,12 +256,12 @@

private String getSourceProperty()
{
- return getProperty( SOURCE_KEY, SOURCE_VALUE );
+ return getProperty( SOURCE_KEY, null );
}

private String getTargetProperty()
{
- return getProperty( TARGET_KEY, TARGET_VALUE );
+ return getProperty( TARGET_KEY, null );
}

private boolean getBooleanProperty( final String key, final boolean
fallback )

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/JavadocTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/JavadocTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/JavadocTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -1,5 +1,5 @@
/*
- * Copyright 2004-2005 Stephen McConnell
+ * Copyright 2004-2007 Stephen McConnell
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,14 +16,17 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

+import dpml.build.BuildError;
+
import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

-import net.dpml.library.info.Scope;
-import net.dpml.library.Resource;
+import dpml.library.Scope;
+import dpml.library.Resource;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
@@ -56,17 +59,24 @@
*/
public static final String JAVADOC_LINK_SOURCE_KEY =
"project.javadoc.linksource";

+ /**
+ * Property key for declaration of excluded packages.
+ */
+ public static final String JAVADOC_EXCLUDES = "project.javadoc.excludes";
+
//-----------------------------------------------------------------------
// state
//-----------------------------------------------------------------------

private String m_title;
- private List m_links = new ArrayList();
- private List m_groups = new ArrayList();
+ private String m_windowTitle;
+ private List<Link> m_links = new ArrayList<Link>();
+ private List<Group> m_groups = new ArrayList<Group>();
private File m_overview;
private AccessType m_access;
private File m_dest;
-
+ private List<Javadoc.PackageName> m_excludes = new
ArrayList<Javadoc.PackageName>();
+
//-----------------------------------------------------------------------
// JavadocTask
//-----------------------------------------------------------------------
@@ -93,6 +103,15 @@
}

/**
+ * Set the javadoc window title.
+ * @param title the title
+ */
+ public void setWindowtitle( final String title )
+ {
+ m_windowTitle = title;
+ }
+
+ /**
* Set the javadoc overview file.
* @param overview the overview file
*/
@@ -141,19 +160,25 @@
m_access = access;
}

+ public Javadoc.PackageName createExclude()
+ {
+ Javadoc.PackageName packageName = new Javadoc.PackageName();
+ m_excludes.add( packageName );
+ return packageName;
+ }
+
//-----------------------------------------------------------------------
// Task
//-----------------------------------------------------------------------

/**
* Task execution.
- * @exception BuildException if a build error occurs
*/
- public void execute() throws BuildException
+ public void execute()
{
final Resource resource = getResource();

- log( "Generating javadoc for project: " + resource,
Project.MSG_VERBOSE );
+ log( "Generating javadoc for project: " + resource );

File api = getDestination();
mkDir( api );
@@ -164,8 +189,21 @@
//

Resource[] providers = resource.getClasspathProviders( Scope.RUNTIME
);
- final Path classpath = getContext().createPath( providers, true,
true );
- process( resource, classpath, api );
+ try
+ {
+ final Path classpath = getContext().createPath( providers, true,
true );
+ process( resource, classpath, api );
+ }
+ catch( IOException ioe )
+ {
+ final String error =
+ "Unable to resolve the runtime classpath for the resource ["
+ + resource.getResourcePath()
+ + "] ("
+ + resource.getBaseDir()
+ + ").";
+ throw new BuildError( error, ioe );
+ }
}

private File getDestination()
@@ -186,7 +224,7 @@

private Group[] getGroups()
{
- return (Group[]) m_groups.toArray( new Group[0] );
+ return m_groups.toArray( new Group[0] );
}

private void process(
@@ -201,6 +239,18 @@
javadoc.setUse( true );
javadoc.createClasspath().add( classpath );

+ String excludes = getPackageExcludes();
+ if( null != excludes )
+ {
+ javadoc.setExcludePackageNames( excludes );
+ }
+
+ Javadoc.PackageName[] excludesList = m_excludes.toArray( new
Javadoc.PackageName[0] );
+ for( Javadoc.PackageName exclude : excludesList )
+ {
+ javadoc.addExcludePackage( exclude );
+ }
+
final Path source = javadoc.createSourcepath();
addSourcePath( resource, javadoc, source );

@@ -222,7 +272,7 @@
}

aggregateLinks( javadoc, resource );
- Link[] links = (Link[]) m_links.toArray( new Link[0] );
+ Link[] links = m_links.toArray( new Link[0] );
for( int i=0; i<links.length; i++ )
{
Link link = links[i];
@@ -232,9 +282,18 @@
arg.setHref( href );
}

+ final String title = resource.getName() + " API";
+ if( null != m_windowTitle )
+ {
+ javadoc.setWindowtitle( m_windowTitle );
+ }
+ else
+ {
+ javadoc.setWindowtitle( title );
+ }
+
if( null == m_title )
{
- final String title = resource.getName() + " API";
javadoc.setDoctitle( title );
}
else
@@ -286,9 +345,17 @@
}
}
}
+
+ private String getPackageExcludes()
+ {
+ Resource resource = getResource();
+ return getProperty( JAVADOC_EXCLUDES, null );
+ }

private void addSourcePath( Resource resource, Javadoc javadoc, Path
source )
{
+ String excludes = getPackageExcludes();
+
//
// check for a classic src directory
//
@@ -303,6 +370,10 @@
final DirSet packages = new DirSet();
packages.setDir( src );
packages.setIncludes( "**/*" );
+ if( null != excludes )
+ {
+ packages.setExcludes( excludes );
+ }
javadoc.addPackageset( packages );
}
}
@@ -328,6 +399,11 @@
final DirSet packages = new DirSet();
packages.setDir( src );
packages.setIncludes( "**/**" );
+ //String excludes = getPackageExcludes( provider
);
+ if( null != excludes )
+ {
+ packages.setExcludes( excludes );
+ }
javadoc.addPackageset( packages );
}
}
@@ -389,7 +465,7 @@
public static class Group
{
private String m_title;
- private ArrayList m_packages = new ArrayList();
+ private ArrayList<Group.Package> m_packages = new
ArrayList<Group.Package>();

/**
* Set the package group title.
@@ -424,7 +500,7 @@
*/
public Group.Package[] getPackages()
{
- return (Group.Package[]) m_packages.toArray( new
Group.Package[0] );
+ return m_packages.toArray( new Group.Package[0] );
}

/**

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/ModuleTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/ModuleTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/ModuleTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,18 +16,19 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

import java.io.File;
import java.io.FileOutputStream;

-import net.dpml.library.Resource;
-import net.dpml.library.Module;
-import net.dpml.library.info.Scope;
-import net.dpml.library.info.ModuleDirective;
-import net.dpml.library.info.LibraryEncoder;
+import dpml.library.Resource;
+import dpml.library.Module;
+import dpml.library.Scope;
+import dpml.library.Type;
+import dpml.library.info.ModuleDirective;
+import dpml.library.info.LibraryEncoder;

-import net.dpml.tools.Context;
+import dpml.tools.Context;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.BuildException;
@@ -60,10 +61,9 @@
{
Project project = getProject();
final Context context = getContext();
- final String path = context.getLayoutFilename( "module" );
- final File deliverables = context.getTargetDeliverablesDirectory();
- final File modules = new File( deliverables, "modules" );
- final File module = new File( modules, path );
+ Resource resource = getResource();
+ Type type = resource.getType( "module" );
+ File module = type.getFile( true );
writeModuleFile( module );
}

@@ -73,8 +73,34 @@
if( resource instanceof Module )
{
Module module = (Module) resource;
- ModuleDirective directive = (ModuleDirective) module.export();
- writeModuleDirective( directive, file );
+ FileOutputStream output = null;
+ try
+ {
+ log( "Exporting module to: " + file );
+ final LibraryEncoder encoder = new LibraryEncoder();
+ file.getParentFile().mkdirs();
+ output = new FileOutputStream( file );
+ module.export( output );
+ }
+ catch( Exception e )
+ {
+ final String error =
+ "Failed to export module.";
+ throw new BuildException( error, e, getLocation() );
+ }
+ finally
+ {
+ if( null != output )
+ {
+ try
+ {
+ output.close();
+ }
+ catch( Exception ioe )
+ {
+ }
+ }
+ }
}
else
{
@@ -83,36 +109,4 @@
throw new BuildException( error, getLocation() );
}
}
-
- private void writeModuleDirective( ModuleDirective directive, File file )
- {
- FileOutputStream output = null;
- try
- {
- log( "Exporting module to: " + file );
- final LibraryEncoder encoder = new LibraryEncoder();
- file.getParentFile().mkdirs();
- output = new FileOutputStream( file );
- encoder.export( directive, output );
- }
- catch( Exception e )
- {
- final String error =
- "Failed to export module.";
- throw new BuildException( error, e, getLocation() );
- }
- finally
- {
- if( null != output )
- {
- try
- {
- output.close();
- }
- catch( Exception ioe )
- {
- }
- }
- }
- }
}

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/PackageTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/PackageTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/PackageTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,18 +16,45 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

+import dpml.lang.Classpath;
+import dpml.lang.Info;
+import dpml.lang.Part;
+import dpml.lang.DOM3DocumentBuilder;
+
+import dpml.tools.Context;
+import dpml.tools.BuilderError;
+
import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.FileOutputStream;
+import java.util.List;
+import java.util.ArrayList;

-import net.dpml.library.Resource;
+import dpml.util.Category;
+import net.dpml.lang.Strategy;
+import net.dpml.lang.StrategyHandler;
+import net.dpml.lang.PartContentHandler;

-import net.dpml.tools.Context;
-import net.dpml.tools.BuildError;
+import dpml.library.Resource;
+import dpml.library.Type;
+import dpml.library.Scope;

+import net.dpml.transit.Artifact;
+
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
+import org.apache.tools.ant.taskdefs.Mkdir;
+import org.apache.tools.ant.taskdefs.Copy;

+import org.w3c.dom.Element;
+import org.w3c.dom.Document;
+
/**
* Cleanup of generated target directory.
*
@@ -36,6 +63,8 @@
*/
public class PackageTask extends GenericTask
{
+ private static final DOM3DocumentBuilder BUILDER = new
DOM3DocumentBuilder();
+
/**
* Compiles main and test classes resulting in the creation of the
* target/classes/main and target/classes/test directories.
@@ -46,6 +75,13 @@
Project project = context.getProject();
Resource resource = context.getResource();

+ Type[] types = resource.getTypes();
+ for( Type type : types )
+ {
+ build( project, context, resource, type );
+ }
+
+ /*
// handle jar file packaging

if( resource.isa( "jar" ) )
@@ -87,7 +123,7 @@
"Unexpected failure during part externalization in ["
+ resource.getName()
+ "]";
- throw new BuildError( error, e, getLocation() );
+ throw new BuilderError( error, e, getLocation() );
}
}

@@ -101,14 +137,295 @@
task.init();
task.execute();
}
+ */
}

- private File getJarFile( Context context )
+ private void build( Project project, Context context, Resource resource,
Type type )
{
- Project project = context.getProject();
- File deliverables = context.getTargetDeliverablesDirectory();
- File jars = new File( deliverables, "jars" );
- String filename = context.getLayoutFilename( "jar" );
- return new File( jars, filename );
+ String id = type.getID();
+ if( "jar".equals( id ) )
+ {
+ File base = context.getTargetClassesMainDirectory();
+ if( base.exists() )
+ {
+ final File jar = type.getFile( true );
+ final JarTask task = new JarTask();
+ task.setProject( project );
+ task.setTaskName( "jar" );
+ task.setSrc( base );
+ task.setDest( jar );
+ task.init();
+ task.execute();
+ }
+ }
+ else if( "part".equals( id ) )
+ {
+ buildPart( project, context, resource, type );
+ }
+ else if( "module".equals( id ) )
+ {
+ final ModuleTask task = new ModuleTask();
+ task.setProject( project );
+ task.setTaskName( "module" );
+ task.init();
+ task.execute();
+ }
+ else if( null != type.getSource() )
+ {
+ buildByCopy( type );
+ }
}
+
+ private void buildByCopy( Type type )
+ {
+ log( "Copying [" + type.getName() + "#" + type.getID() + "] to
deliverables" );
+
+ String path = type.getSource();
+ Resource resource = type.getResource();
+ File base = resource.getBaseDir();
+ File source = new File( base, path );
+ File file = type.getFile( true );
+ File dir = file.getParentFile();
+ if( null != dir )
+ {
+ dir.mkdirs();
+ }
+
+ boolean flag = type.getBooleanProperty(
"project.package.include-in-classes", false );
+ if( flag )
+ {
+ String group = getGroup( resource );
+ String filename = type.getName() + "." + type.getID();
+ File ddir = new File( base, "target/classes/main" );
+ File root = new File( ddir, group );
+ root.mkdirs();
+ File destination = new File( root, filename );
+ final Copy ccopy = (Copy) getProject().createTask( "copy" );
+ ccopy.setTaskName( getTaskName() );
+ ccopy.setFile( source );
+ ccopy.setTofile( destination );
+ ccopy.init();
+ ccopy.execute();
+ }
+
+ final Copy copy = (Copy) getProject().createTask( "copy" );
+ copy.setTaskName( getTaskName() );
+ copy.setFile( source );
+ copy.setTofile( file );
+ copy.init();
+ copy.execute();
+ }
+
+ private String getGroup( Resource resource )
+ {
+ Resource parent = resource.getParent();
+ if( null == parent )
+ {
+ return null;
+ }
+ else
+ {
+ return parent.getResourcePath();
+ }
+ }
+
+ private void buildPart( Project project, Context context, Resource
resource, Type type )
+ {
+ String source = type.getSource();
+ if( null == source )
+ {
+ final String error =
+ "Missing source declaration in part type production statement.
["
+ + resource.getName()
+ + "]";
+ throw new BuilderError( error, null, getLocation() );
+ }
+ else
+ {
+ String resolved = resource.resolve( source );
+ log( "Creating part: " + resolved );
+ File basedir = resource.getBaseDir();
+ File input = new File( basedir, resolved );
+ if( !input.exists() )
+ {
+ final String error =
+ "Part input not found."
+ + "\nPath: " + source
+ + "\nExpanded: " + resolved
+ + "\nFile: " + input.getAbsolutePath();
+ throw new BuilderError( error, null, getLocation() );
+ }
+ else
+ {
+ OutputStream output = null;
+ try
+ {
+
+ Info info = getInfo( resource );
+ Classpath classpath = getClasspath( resource,
type.getTest() );
+ URI uri = input.toURI();
+ final Document document = BUILDER.parse( uri );
+ final Element root = document.getDocumentElement();
+ StrategyHandler handler =
PartContentHandler.getStrategyHandler( root );
+
+ ClassLoader parent = ClassLoader.getSystemClassLoader();
+ ClassLoader classloader = getRuntimeClassLoader( parent,
resource );
+ Strategy strategy = handler.build( classloader, root,
resource, null, null );
+ Part part = new Part( info, classpath, strategy );
+ File file = type.getFile( true );
+ File dir = file.getParentFile();
+ if( null != dir )
+ {
+ dir.mkdirs();
+ }
+ file.createNewFile();
+ output = new FileOutputStream( file );
+ part.save( output );
+ if( !type.getTest() )
+ {
+ checksum( file );
+ asc( file );
+ }
+ }
+ catch( Exception e )
+ {
+ final String error =
+ "Unable to construct part deliverable: "
+ + "\nError: " + e.getClass().getName()
+ + "\nCause: " + e.getCause()
+ + "\nMessage: " + e.getMessage();
+ throw new BuilderError( error, e, getLocation() );
+ }
+ finally
+ {
+ if( null != output )
+ {
+ try
+ {
+ output.close();
+ }
+ catch( IOException e )
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private Info getInfo( Resource resource )
+ {
+ Type type = resource.getType( "part" );
+ Artifact artifact = type.getArtifact();
+ URI uri = artifact.toURI();
+ String title = resource.getInfo().getTitle();
+ String description = resource.getInfo().getDescription();
+ return new Info( uri, title, description );
+ }
+
+ protected Classpath getClasspath( Resource resource, boolean test )
throws IOException
+ {
+ URI[] sysUris = getURIs( resource, Category.SYSTEM );
+ URI[] publicUris = getURIs( resource, Category.PUBLIC );
+ URI[] protectedUris = getURIs( resource, Category.PROTECTED );
+ URI[] privateUris = getURIs( resource, Category.PRIVATE, true, test
);
+ return new Classpath( sysUris, publicUris, protectedUris,
privateUris );
+ }
+
+ private URI[] getURIs( Resource resource, Category category ) throws
IOException
+ {
+ return getURIs( resource, category, false, false );
+ }
+
+ private URI[] getURIs( Resource resource, Category category, boolean
self, boolean test ) throws IOException
+ {
+ Resource[] resources = resource.getClasspathProviders( category );
+ ArrayList<URI> list = new ArrayList<URI>();
+ for( int i=0; i<resources.length; i++ )
+ {
+ Resource r = resources[i];
+ addURI( list, r );
+ }
+ if( self && resource.isa( "jar" ) )
+ {
+ addSelf( list, resource, test );
+ }
+ URI[] uris = list.toArray( new URI[0] );
+ return uris;
+ }
+
+ private void addURI( List<URI> list, Resource resource ) throws
IOException
+ {
+ addURI( list, resource, true );
+ }
+
+ private void addURI( List<URI> list, Resource resource, boolean resolve
) throws IOException
+ {
+ if( resource.isa( "jar" ) )
+ {
+ Type type = resource.getType( "jar" );
+ Artifact artifact = getArtifact( type, resolve );
+ URI uri = artifact.toURI();
+ list.add( uri );
+ }
+ }
+
+ private Artifact getArtifact( Type type, boolean resolve ) throws
IOException
+ {
+ if( resolve )
+ {
+ return type.getResolvedArtifact();
+ }
+ else
+ {
+ return type.getArtifact();
+ }
+ }
+
+ private void addSelf( List<URI> list, Resource resource, boolean test )
throws IOException
+ {
+ if( test )
+ {
+ try
+ {
+ Type type = resource.getType( "jar" );
+ File local = type.getFile( true );
+ list.add( local.toURI() );
+ }
+ catch( Exception e )
+ {
+ final String error =
+ "Unexpected error while attempting to resolve resource.";
+ IOException ioe = new IOException( error );
+ ioe.initCause( e );
+ throw ioe;
+ }
+ }
+ else
+ {
+ addURI( list, resource, false );
+ }
+ }
+
+ ClassLoader getRuntimeClassLoader( ClassLoader parent, Resource resource
) throws Exception
+ {
+ boolean flag = resource.isa( "jar" );
+ ArrayList<URL> list = new ArrayList<URL>();
+ Resource[] providers = resource.getClasspathProviders( Scope.RUNTIME
);
+ for( Resource provider : providers )
+ {
+ Type type = provider.getType( "jar" );
+ URI uri = type.getResolvedArtifact().toURI();
+ list.add( Artifact.toURL( uri ) );
+ }
+ if( flag )
+ {
+ Type type = resource.getType( "jar" );
+ File local = type.getFile( true );
+ list.add( local.toURI().toURL() );
+ }
+ URL[] urls = list.toArray( new URL[0] );
+ return new URLClassLoader( urls, parent );
+ }
}

Deleted: trunk/main/depot/tools/src/main/dpml/tools/tasks/PartTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/PartTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/PartTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -1,321 +0,0 @@
-/*
- * Copyright 2005 Stephen J. McConnell
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- * implied.
- *
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.dpml.tools.tasks;
-
-import java.io.File;
-import java.io.OutputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
-
-import net.dpml.lang.Classpath;
-import net.dpml.lang.Category;
-import net.dpml.lang.Info;
-import net.dpml.lang.Part;
-import net.dpml.lang.PartDecoder;
-
-import net.dpml.library.Type;
-import net.dpml.library.Resource;
-
-import net.dpml.transit.Artifact;
-
-import net.dpml.tools.Context;
-import net.dpml.tools.BuildError;
-
-import net.dpml.util.DefaultLogger;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-
-import org.w3c.dom.Element;
-
-/**
- * Creation of an part definition in XML.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public class PartTask extends GenericTask
-{
- /**
- * Constant artifact type for a plugin.
- */
- public static final String TYPE = "part";
-
- /**
- * Property key used to identify the plugin title.
- */
- public static final String PLUGIN_TITLE_KEY = "project.title";
-
- /**
- * Property key used to identify the plugin description.
- */
- public static final String PLUGIN_DESCRIPTION_KEY =
"project.description";
-
- /**
- * Property key used to identify a custom plugin handler classname.
- */
- public static final String PLUGIN_HANDLER_KEY = "project.plugin.handler";
-
- private boolean m_test = false;
-
- private File m_output;
-
- /**
- * Set the test build policy. The default is to include
- * the project artifact in the classpath of a created part, however - in
a
- * test scenario we don't want to do this. Setting test to true will
result
- * in the association of a local file uri to the project resource.
- *
- * @param test true if this is a local test part
- */
- public void setTest( boolean test )
- {
- m_test = test;
- }
-
- /**
- * Override the default output destination.
- *
- * @param file the overriding destination
- */
- public void setDest( File file )
- {
- m_output = file;
- }
-
- /**
- * Task execution.
- */
- public void execute()
- {
- Resource resource = getResource();
- Part part = build( resource );
- writePart( part );
- }
-
- /**
- * Externalize the part as a deliverable.
- * @param part the part to be externalized as XML
- */
- public void writePart( Part part )
- {
- File file = getOutputFile();
- if( file.exists() )
- {
- try
- {
- Part existing = Part.load( file.toURI(), false );
- if( part.equals( existing ) )
- {
- return;
- }
- }
- catch( Throwable e )
- {
- final String error =
- "Part comparisom failure.";
- throw new BuildError( error, e );
- }
- }
-
- log( "Building part: " + file );
- try
- {
- file.createNewFile();
- final OutputStream output = new FileOutputStream( file );
- try
- {
- part.encode( output );
- checksum( file );
- asc( file );
- }
- finally
- {
- try
- {
- output.close();
- }
- catch( IOException e )
- {
- e.printStackTrace();
- }
- }
- }
- catch( Exception e )
- {
- final String error =
- "Part externalization error.";
- throw new BuildError( error, e );
- }
- }
-
- private File getOutputFile()
- {
- if( null != m_output )
- {
- return m_output;
- }
- else
- {
- Context context = getContext();
- final String path = context.getLayoutFilename( TYPE );
- final File deliverables =
context.getTargetDeliverablesDirectory();
- final File parts = new File( deliverables, TYPE + "s" );
- final File file = new File( parts, path );
- parts.mkdirs();
- return file;
- }
- }
-
- /**
- * Build the part definition.
- * @param resource the resource
- * @return the part
- */
- protected Part build( Resource resource )
- {
- try
- {
- Info info = getInfo( resource );
- Classpath classpath = getClasspath( resource );
- Type type = resource.getType( TYPE );
- Element element = type.getElement();
- PartDecoder decoder = PartDecoder.getInstance();
- DefaultLogger logger = new DefaultLogger( getTaskName() );
- return decoder.build( logger, info, classpath, element, resource
);
- }
- catch( Throwable e )
- {
- final String error =
- "Internal error while attempting to build an external part
definition."
- + "\nResource: " + resource;
- throw new BuildError( error, e, getLocation() );
- }
- }
-
- /**
- * Construct the info object based on properties declared by the
- * supplied resource.
- * @param resource the resource
- * @return the info descriptor
- */
- protected Info getInfo( Resource resource )
- {
- Artifact artifact = resource.getArtifact( TYPE );
- URI uri = artifact.toURI();
- String title = resource.getInfo().getTitle();
- String description = resource.getInfo().getDescription();
- return new Info( uri, title, description );
- }
-
- private String getTitle( Resource resource )
- {
- return resource.getProperty( PLUGIN_TITLE_KEY );
- }
-
- private String getDescription( Resource resource )
- {
- return resource.getProperty( PLUGIN_DESCRIPTION_KEY );
- }
-
- /**
- * Construct the classpath for the supplied resource.
- * @param resource the resource
- * @return the classpath
- * @exception IOException is an IO error occurs
- */
- protected Classpath getClasspath( Resource resource ) throws IOException
- {
- URI[] sysUris = getURIs( resource, Category.SYSTEM );
- URI[] publicUris = getURIs( resource, Category.PUBLIC );
- URI[] protectedUris = getURIs( resource, Category.PROTECTED );
- URI[] privateUris = getURIs( resource, Category.PRIVATE, true );
- return new Classpath( sysUris, publicUris, protectedUris,
privateUris );
- }
-
- private URI[] getURIs( Resource resource, Category category ) throws
IOException
- {
- return getURIs( resource, category, false );
- }
-
- private URI[] getURIs( Resource resource, Category category, boolean
self ) throws IOException
- {
- Resource[] resources = resource.getClasspathProviders( category );
- ArrayList list = new ArrayList();
- for( int i=0; i<resources.length; i++ )
- {
- Resource r = resources[i];
- addURI( list, r );
- }
- if( self )
- {
- addURI( list, resource );
- }
- URI[] uris = (URI[]) list.toArray( new URI[0] );
- return uris;
- }
-
- private void addURI( List list, Resource resource ) throws IOException
- {
- if( resource.isa( "jar" ) )
- {
- try
- {
- URI uri = toURI( resource );
- list.add( uri );
- }
- catch( Exception e )
- {
- final String error =
- "Unexpected error while attempting to resolve resource.";
- IOException ioe = new IOException( error );
- ioe.initCause( e );
- throw ioe;
- }
- }
- }
-
- private URI toURI( Resource resource ) throws Exception
- {
- if( m_test && resource.equals( getResource() ) )
- {
- File local = getContext().getTargetDeliverable( "jar" );
- return local.toURI();
- }
- else
- {
- return resource.getArtifact( "jar" ).toURI();
- }
- }
-
- /**
- * Get the project definition.
- * @param project the project
- * @return the build context
- */
- protected Context getContext( Project project )
- {
- Context context = (Context) project.getReference( "project.context"
);
- context.init();
- return context;
- }
-}

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/PluginTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/PluginTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/PluginTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,13 +16,15 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

-import net.dpml.library.Library;
-import net.dpml.library.Resource;
-import net.dpml.library.ResourceNotFoundException;
+import dpml.tools.BuilderError;
+import dpml.tools.Context;

-import net.dpml.tools.Context;
+import dpml.library.Library;
+import dpml.library.Resource;
+import dpml.library.Type;
+import dpml.library.ResourceNotFoundException;

import org.apache.tools.ant.BuildException;

@@ -33,7 +35,7 @@
* @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
* @version @PROJECT-VERSION@
*/
-public class PluginTask extends net.dpml.transit.tools.PluginTask
+public class PluginTask extends dpml.tools.transit.PluginTask
{
private String m_ref;

@@ -59,7 +61,7 @@
* Task execution.
*/
public void execute()
- {
+ {
if( null != m_ref )
{
Context context = (Context) getProject().getReference(
"project.context" );
@@ -73,19 +75,20 @@
try
{
Resource resource = library.getResource( m_ref );
- String uri = resource.getArtifact( "plugin"
).toURI().toString();
+ Type type = resource.getType( "part" );
+ String uri =
type.getResolvedArtifact().toURI().toASCIIString();
setUri( uri );
}
catch( ResourceNotFoundException e )
{
String message = e.getMessage();
- throw new BuildException( message, e, getLocation() );
+ throw new BuilderError( message, e, getLocation() );
}
catch( Exception e )
{
final String error =
"Unexpected error while attempting to initiaze plugin task
uri.";
- throw new BuildException( error, e );
+ throw new BuilderError( error, e );
}
}


Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/PrepareTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/PrepareTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/PrepareTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,14 +16,16 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

+import dpml.tools.Context;
+import dpml.tools.BuilderError;
+
import java.io.File;
+import java.io.IOException;

-import net.dpml.library.Resource;
+import dpml.library.Resource;

-import net.dpml.tools.Context;
-
import org.apache.tools.ant.Project;


@@ -82,8 +84,22 @@
final Project project = getProject();
Resource resource = getResource();
Context context = getContext();
- context.init();

+ try
+ {
+ context.init();
+ }
+ catch( IOException ioe )
+ {
+ final String error =
+ "Context initialization failure for the resource ["
+ + resource
+ + "] ("
+ + resource.getBaseDir()
+ + ").";
+ throw new BuilderError( error, ioe );
+ }
+
log( "basedir: " + getResource().getBaseDir(), Project.MSG_VERBOSE );

//
@@ -179,7 +195,7 @@
context.getProperty( ETC_FILTERED_EXCLUDES_KEY,
ETC_FILTERED_EXCLUDES_VALUE );

//
- // copy ${etc}/test content to ${target}/build/test
+ // copy ${etc}/test content to ${target}/test
//

final File data = context.getEtcDataDirectory();
@@ -197,7 +213,7 @@
final File etc = context.getEtcDirectory();

//
- // ${etc}/* directories (excluding test, main and deliverables)
+ // ${etc}/* directories (excluding main, test, and data)
// directly to the target directory
//


Modified:
trunk/main/depot/tools/src/main/dpml/tools/tasks/ProcessorInstantiationException.java
===================================================================
---
trunk/main/depot/tools/src/main/net/dpml/tools/tasks/ProcessorInstantiationException.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/tools/src/main/dpml/tools/tasks/ProcessorInstantiationException.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

/**
* A ProcessorInstantiationException if an occur occurs when attempting to
load

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/PropertyTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/PropertyTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/PropertyTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.Property;

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/RMICTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/RMICTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/RMICTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,13 +16,15 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

import java.io.File;
+import java.util.ArrayList;
+import java.util.List;

-import net.dpml.library.info.Scope;
+import dpml.library.Scope;

-import net.dpml.tools.Context;
+import dpml.tools.Context;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
@@ -43,32 +45,21 @@
*/
public class RMICTask extends GenericTask
{
- private final Context m_context;
- private String[] m_includes = new String[0];
- private String[] m_excludes = new String[0];
+ static
+ {
+ System.setProperty(
+ "com.sun.CORBA.ORBDynamicStubFactoryFactoryClass",
+
"com.sun.corba.se.impl.presentation.rmi.StubFactoryFactoryStaticImpl" );
+ }
+
+ private List<Include> m_includes = new ArrayList<Include>();
+ private List<Include> m_excludes = new ArrayList<Include>();
private String m_classPathRef;
private File m_base;
-
- /**
- * Creation of a new RMICTask.
- * @param context the project context
- */
- public RMICTask( Context context )
+
+ public RMICTask()
{
super();
- m_context = context;
- try
- {
- setProject( context.getProject() );
- setTaskName( "rmic" );
- setBase( context.getTargetClassesMainDirectory() );
- context.getPath( Scope.RUNTIME );
- setClasspathRef( "project.compile.path" );
- }
- catch( Exception e )
- {
- throw new BuildException( e );
- }
}

/**
@@ -87,24 +78,25 @@
public void setBase( File base )
{
m_base = base;
+ }
+
+ public Include createInclude()
+ {
+ Include include = new Include();
+ m_includes.add( include );
+ return include;
}

- /**
- * Set the includes.
- * @param includes the include paths
- */
- public void setIncludes( String[] includes )
+ public Include createExclude()
{
- m_includes = includes;
+ Include include = new Include();
+ m_excludes.add( include );
+ return include;
}

- /**
- * Set the excludes.
- * @param excludes the excluded paths
- */
- public void setExcludes( String[] excludes )
+ public void init()
{
- m_excludes = excludes;
+ setTaskName( "rmic" );
}

/**
@@ -112,11 +104,10 @@
*/
public void execute()
{
+ Context context = getContext();
if( null == m_base )
{
- final String error =
- "Missing 'base' argument.";
- throw new BuildException( error, getLocation() );
+ setBase( context.getTargetClassesMainDirectory() );
}

if( !m_base.exists() )
@@ -126,24 +117,25 @@

final Rmic rmic = (Rmic) getProject().createTask( "rmic" );
rmic.setTaskName( "rmic" );
- final Project project = m_context.getProject();
+ final Project project = getProject();
rmic.setProject( project );
rmic.setBase( m_base );
final Path classpath = getClasspath();
+
rmic.setClasspath( classpath );

// populate includes/excludes

- for( int i=0; i<m_includes.length; i++ )
+ for( Include include : m_includes )
{
- String include = m_includes[i];
- rmic.createInclude().setName( include );
+ String name = include.getName();
+ rmic.createInclude().setName( name );
}

- for( int i=0; i<m_excludes.length; i++ )
+ for( Include exclude : m_excludes )
{
- String exclude = m_excludes[i];
- rmic.createExclude().setName( exclude );
+ String name = exclude.getName();
+ rmic.createExclude().setName( name );
}

// initialize and execute
@@ -160,9 +152,24 @@
}
else
{
- final String error =
- "Missing 'classpathRef' attribute.";
- throw new BuildException( error, getLocation() );
+ getContext().getPath( Scope.RUNTIME );
+ setClasspathRef( "project.compile.path" );
+ return getClasspath();
}
}
+
+ public static class Include
+ {
+ private String m_name;
+
+ public void setName( String name )
+ {
+ m_name = name;
+ }
+
+ public String getName()
+ {
+ return m_name;
+ }
+ }
}

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/ReactorTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/ReactorTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/ReactorTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,17 +16,19 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

+import net.dpml.lang.SimpleServiceRegistry;
+import dpml.util.DefaultLogger;
+
import java.io.File;

-import net.dpml.library.Resource;
-import net.dpml.library.impl.DefaultLibrary;
-
-import net.dpml.tools.impl.StandardBuilder;
-
-import net.dpml.transit.monitor.LoggingAdapter;
-
+import net.dpml.lang.Strategy;
+import net.dpml.lang.ServiceRegistry;
+import dpml.build.Builder;
+import dpml.library.Resource;
+import dpml.library.impl.DefaultLibrary;
+import dpml.tools.impl.StandardBuilder;
import net.dpml.util.Logger;

import org.apache.tools.ant.BuildException;
@@ -64,7 +66,7 @@
return new String[0];
}
}
-
+
/**
* Execute the task.
*/
@@ -72,9 +74,9 @@
{
try
{
- Logger logger = new LoggingAdapter();
+ Logger logger = new DefaultLogger( "dpml.depot" );
DefaultLibrary library = new DefaultLibrary( logger );
- StandardBuilder builder = new StandardBuilder( logger, library,
false );
+ StandardBuilder builder = new StandardBuilder( logger, library,
new Boolean( false ) );
File basedir = getProject().getBaseDir().getCanonicalFile();
Resource[] resources = library.select( basedir, false );
log( "Reactive selection: " + resources.length );

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/ReplicateTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/ReplicateTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/ReplicateTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,19 +16,20 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

+import dpml.build.BuildError;
+
import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

-import net.dpml.lang.UnknownKeyException;
+import dpml.library.Resource;
+import dpml.library.ResourceNotFoundException;
+import dpml.library.Type;
+import dpml.library.Scope;

-import net.dpml.library.Resource;
-import net.dpml.library.ResourceNotFoundException;
-import net.dpml.library.Type;
-import net.dpml.library.info.Scope;
-
import net.dpml.transit.Artifact;
import net.dpml.transit.Transit;
import net.dpml.transit.Layout;
@@ -51,8 +52,9 @@

private boolean m_verbose = false;
private boolean m_self = false;
+ private boolean m_failOnError = true;

- private ArrayList m_includes = new ArrayList();
+ private ArrayList<Include> m_includes = new ArrayList<Include>();

/**
* Set the key of the target project or resource.
@@ -94,6 +96,15 @@
}

/**
+ * Set the fail on error policy.
+ * @param flag the fail on error policy
+ */
+ public void setFailonerror( boolean flag )
+ {
+ m_failOnError = flag;
+ }
+
+ /**
* Settting self to TRUE will result in expansion of the path to include
* the target resource.
* @param flag the self inclusion flag
@@ -136,7 +147,7 @@

File destination = m_todir;
Layout layout = resolveLayout();
- ArrayList list = new ArrayList();
+ ArrayList<Resource> list = new ArrayList<Resource>();
String ref = getRef();
if( null != ref )
{
@@ -148,7 +159,7 @@
// add nested includes
//

- Include[] includes = (Include[]) m_includes.toArray( new Include[0]
);
+ Include[] includes = m_includes.toArray( new Include[0] );
for( int i=0; i<includes.length; i++ )
{
Include include = includes[i];
@@ -161,7 +172,7 @@
// get sorted list of resources
//

- Resource[] resources = (Resource[]) list.toArray( new Resource[0] );
+ Resource[] resources = list.toArray( new Resource[0] );
Resource[] selection = getContext().getLibrary().sort( resources );
File cache = (File) getProject().getReference( "dpml.cache" );
for( int i=0; i<selection.length; i++ )
@@ -181,15 +192,48 @@
for( int j=0; j<types.length; j++ )
{
Type type = types[j];
- String id = type.getID();
-
- Artifact artifact = resource.getArtifact( id );
- copyArtifact( artifact, cache, destination, layout );
- if( null != type.getVersion() )
+ if( type.getTest() )
{
- Artifact link = resource.getLinkArtifact( id );
- copyArtifact( link, cache, destination, layout );
+ return;
}
+ try
+ {
+ Artifact artifact = type.getResolvedArtifact();
+ copyArtifact( artifact, cache, destination, layout );
+ if( type.getAliasProduction() )
+ {
+ Artifact link = type.getLinkArtifact();
+ copyArtifact( link, cache, destination, layout );
+ }
+ }
+ catch( IllegalStateException e )
+ {
+ if( m_failOnError )
+ {
+ throw e;
+ }
+ else
+ {
+ log( e.getMessage() );
+ }
+ }
+ catch( IOException e )
+ {
+ if( m_failOnError )
+ {
+ final String error =
+ "Replication failure for the ["
+ + type
+ + "] type in the resource ["
+ + resource
+ + "].";
+ throw new BuildError( error, e );
+ }
+ else
+ {
+ log( e.getMessage() );
+ }
+ }
}
}

@@ -243,28 +287,23 @@
}
else
{
- try
+ Layout layout = Layout.getLayout( m_layout );
+ if( null == layout )
{
- return Transit.getInstance().getLayout( m_layout );
- }
- catch( UnknownKeyException e )
- {
final String error =
"Target layout id ["
+ m_layout
+ "] is unknown.";
- throw new BuildException( error, e, getLocation() );
+ throw new BuildException( error, getLocation() );
}
- catch( Exception e )
+ else
{
- final String error =
- "Unexpected error while resolving layout: " + m_layout;
- throw new BuildException( error, e, getLocation() );
+ return layout;
}
}
}

- private void aggregate( List list, Resource resource, boolean self )
+ private void aggregate( List<Resource> list, Resource resource, boolean
self )
{
Resource[] resources = resource.getAggregatedProviders(
Scope.RUNTIME, true, false );
for( int i=0; i<resources.length; i++ )

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/ResourceTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/ResourceTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/ResourceTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,12 +16,12 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

-import net.dpml.library.ResourceNotFoundException;
-import net.dpml.library.Resource;
+import dpml.library.ResourceNotFoundException;
+import dpml.library.Resource;

-import net.dpml.tools.Context;
+import dpml.tools.Context;

import org.apache.tools.ant.BuildException;


Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/TestTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/TestTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/TestTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,13 +16,15 @@
* limitations under the License.
*/

-package net.dpml.tools.tasks;
+package dpml.tools.tasks;

import java.io.File;

-import net.dpml.library.info.Scope;
+import dpml.library.Resource;
+import dpml.library.Scope;
+import dpml.library.Type;

-import net.dpml.tools.Context;
+import dpml.tools.Context;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Path;
@@ -47,16 +49,25 @@
if( src.exists() )
{
Path path = context.getPath( Scope.TEST );
- final File jar = getJarFile( context );
- if( jar.exists() )
+ Resource resource = getResource();
+ if( resource.isa( "jar" ) )
{
+ Type type = resource.getType( "jar" );
+ File jar = type.getFile( true );
path.createPathElement().setLocation( jar );
}
- else if( context.getTargetClassesMainDirectory().exists() )
- {
- File main = context.getTargetClassesMainDirectory();
- path.createPathElement().setLocation( main );
- }
+
+ //final File jar = getJarFile( context );
+ //if( jar.exists() )
+ //{
+ // path.createPathElement().setLocation( jar );
+ //}
+ //else if( context.getTargetClassesMainDirectory().exists() )
+ //{
+ // File main = context.getTargetClassesMainDirectory();
+ // path.createPathElement().setLocation( main );
+ //}
+
final File dest = context.getTargetClassesTestDirectory();
path.createPathElement().setLocation( dest );
final JUnitTestTask task = new JUnitTestTask();
@@ -69,12 +80,12 @@
}
}

- private File getJarFile( Context context )
- {
- Project project = context.getProject();
- File deliverables = context.getTargetDeliverablesDirectory();
- File jars = new File( deliverables, "jars" );
- String filename = context.getLayoutFilename( "jar" );
- return new File( jars, filename );
- }
+ //private File getJarFile( Context context )
+ //{
+ // Project project = context.getProject();
+ // File deliverables = context.getTargetDeliverablesDirectory();
+ // File jars = new File( deliverables, "jars" );
+ // String filename = context.getLayoutFilename( "jar" );
+ // return new File( jars, filename );
+ //}
}

Modified: trunk/main/depot/tools/src/main/dpml/tools/tasks/antlib.xml
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/tasks/antlib.xml
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/tasks/antlib.xml 2007-02-08
23:31:25 UTC (rev 1818)
@@ -1,26 +1,28 @@
<?xml version="1.0"?>
<antlib>

- <taskdef name="clean" classname="net.dpml.tools.tasks.CleanTask"/>
- <taskdef name="init"
classname="net.dpml.tools.tasks.InitializationTask"/>
- <taskdef name="prepare" classname="net.dpml.tools.tasks.PrepareTask"/>
- <taskdef name="build" classname="net.dpml.tools.tasks.BuildTask"/>
- <taskdef name="package" classname="net.dpml.tools.tasks.PackageTask"/>
- <taskdef name="test" classname="net.dpml.tools.tasks.TestTask"/>
- <taskdef name="install" classname="net.dpml.tools.tasks.InstallTask"/>
+ <taskdef name="clean" classname="dpml.tools.tasks.CleanTask"/>
+ <taskdef name="init"
classname="dpml.tools.tasks.InitializationTask"/>
+ <taskdef name="prepare" classname="dpml.tools.tasks.PrepareTask"/>
+ <taskdef name="build" classname="dpml.tools.tasks.BuildTask"/>
+ <taskdef name="package" classname="dpml.tools.tasks.PackageTask"/>
+ <taskdef name="test" classname="dpml.tools.tasks.TestTask"/>
+ <taskdef name="install" classname="dpml.tools.tasks.InstallTask"/>

- <taskdef name="jar" classname="net.dpml.tools.tasks.JarTask"/>
- <taskdef name="junit"
classname="net.dpml.tools.tasks.JUnitTestTask"/>
- <taskdef name="property"
classname="net.dpml.tools.tasks.PropertyTask"/>
- <taskdef name="filter" classname="net.dpml.tools.tasks.FilterTask"/>
- <taskdef name="module" classname="net.dpml.tools.tasks.ModuleTask"/>
- <taskdef name="reactor" classname="net.dpml.tools.tasks.ReactorTask"/>
- <taskdef name="plugin" classname="net.dpml.tools.tasks.PluginTask"/>
- <taskdef name="replicate"
classname="net.dpml.tools.tasks.ReplicateTask"/>
- <taskdef name="javadoc" classname="net.dpml.tools.tasks.JavadocTask"/>
- <taskdef name="docs" classname="net.dpml.tools.tasks.DocTask"/>
+ <taskdef name="jar" classname="dpml.tools.tasks.JarTask"/>
+ <taskdef name="junit" classname="dpml.tools.tasks.JUnitTestTask"/>
+ <taskdef name="property" classname="dpml.tools.tasks.PropertyTask"/>
+ <taskdef name="filter" classname="dpml.tools.tasks.FilterTask"/>
+ <taskdef name="module" classname="dpml.tools.tasks.ModuleTask"/>
+ <taskdef name="reactor" classname="dpml.tools.tasks.ReactorTask"/>
+ <taskdef name="plugin" classname="dpml.tools.tasks.PluginTask"/>
+ <taskdef name="replicate" classname="dpml.tools.tasks.ReplicateTask"/>
+ <taskdef name="javadoc" classname="dpml.tools.tasks.JavadocTask"/>
+ <taskdef name="docs" classname="dpml.tools.tasks.DocTask"/>

- <!--<taskdef name="javac"
classname="net.dpml.tools.tasks.JavacTask"/>-->
- <!--<taskdef name="export"
classname="net.dpml.tools.tasks.PluginExportTask"/>-->
+ <taskdef name="rmic" classname="dpml.tools.tasks.RMICTask"/>

+ <!--<taskdef name="javac"
classname="dpml.tools.tasks.JavacTask"/>-->
+ <!--<taskdef name="export"
classname="dpml.tools.tasks.PluginExportTask"/>-->
+
</antlib>

Added: trunk/main/depot/tools/src/main/dpml/tools/transit/AntAdapter.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/transit/AntAdapter.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/transit/AntAdapter.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2004-2005 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.tools.transit;
+
+import dpml.util.ExceptionHelper;
+import net.dpml.util.Logger;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.Project;
+
+/**
+ * A ant montor for download messages.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class AntAdapter implements Logger
+{
+ /**
+ * The ant task that this adapter is assigned to.
+ */
+ private Task m_task;
+
+ /**
+ * Creation of a new ant logging adapter.
+ * @param task the task establishing the adapter
+ */
+ public AntAdapter( Task task )
+ {
+ m_task = task;
+ }
+
+ /**
+ * Return TRUE is trace level logging is enabled.
+ * @return the enabled state of trace logging
+ */
+ public boolean isTraceEnabled()
+ {
+ return true;
+ }
+
+ /**
+ * Return TRUE is debug level logging is enabled.
+ * @return the enabled state of debug logging
+ */
+ public boolean isDebugEnabled()
+ {
+ return true;
+ }
+
+ /**
+ * Return TRUE is info level logging is enabled.
+ * @return the enabled state of info logging
+ */
+ public boolean isInfoEnabled()
+ {
+ return true;
+ }
+
+ /**
+ * Return TRUE is warn level logging is enabled.
+ * @return the enabled state of warn logging
+ */
+ public boolean isWarnEnabled()
+ {
+ return true;
+ }
+
+ /**
+ * Return TRUE is error level logging is enabled.
+ * @return the enabled state of error logging
+ */
+ public boolean isErrorEnabled()
+ {
+ return true;
+ }
+
+ /**
+ * Record a debug level message.
+ * @param message the debug message to record
+ */
+ public void debug( String message )
+ {
+ m_task.log( message, Project.MSG_VERBOSE );
+ }
+
+ /**
+ * Record a trace level message.
+ * @param message the trace message to record
+ */
+ public void trace( String message )
+ {
+ m_task.log( message, Project.MSG_VERBOSE );
+ }
+
+ /**
+ * Record a informative message.
+ * @param message the info message to record
+ */
+ public void info( String message )
+ {
+ m_task.log( message, Project.MSG_INFO );
+ }
+
+ /**
+ * Record a warning message.
+ * @param message the warning message to record
+ */
+ public void warn( String message )
+ {
+ m_task.log( message, Project.MSG_WARN );
+ }
+
+ /**
+ * Record a warning message.
+ * @param message the warning message to record
+ * @param cause the causal exception
+ */
+ public void warn( String message, Throwable cause )
+ {
+ m_task.log( message, Project.MSG_WARN );
+ if( null != cause )
+ {
+ final String error = ExceptionHelper.packException( message,
cause, true );
+ m_task.log( error, Project.MSG_WARN );
+ }
+ }
+
+ /**
+ * Record a error level message.
+ * @param message the error message to record
+ */
+ public void error( String message )
+ {
+ error( message, null );
+ }
+
+ /**
+ * Record a error level message.
+ * @param message the error message to record
+ * @param e the error
+ */
+ public void error( String message, Throwable e )
+ {
+ m_task.log( message, Project.MSG_ERR );
+ if( null != e )
+ {
+ final String error = ExceptionHelper.packException( message, e,
true );
+ m_task.log( error, Project.MSG_ERR );
+ }
+ }
+
+ /**
+ * Create a new subsidiary logging channel.
+ * @param category the channel name relative to this logging channel
+ * @return the new logging channel
+ */
+ public Logger getChildLogger( String category )
+ {
+ return this;
+ }
+}
+

Added: trunk/main/depot/tools/src/main/dpml/tools/transit/GetTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/transit/GetTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/transit/GetTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2005 Stephen McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.tools.transit;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
+
+import net.dpml.transit.Artifact;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+
+/**
+ * The get task handles the retrival of a rresource and the binding of the
resource filename
+ * to a project property.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class GetTask extends TransitTask
+{
+ /**
+ * The uri of the artifact to load.
+ */
+ private String m_uri;
+
+ /**
+ * The name of a property under which the locally cached artifact
filename will be bound.
+ */
+ private String m_name;
+
+ /**
+ * Set the project.
+ * @param project the current project
+ */
+ public void setProject( Project project )
+ {
+ setTaskName( "get" );
+ super.setProject( project );
+ }
+
+ /**
+ * Set the artifact uri of the plugin from which the task is to be loaded.
+ * @param uri an artifact plugin uri
+ */
+ public void setUri( String uri )
+ {
+ m_uri = uri;
+ }
+
+ /**
+ * Set the name of a property into which the local file path will be
assigned.
+ * @param name the ant property name
+ */
+ public void setProperty( String name )
+ {
+ m_name = name;
+ }
+
+ /**
+ * Return the artifact uri of the plugin.
+ * @return the artifact uri
+ */
+ private URI getURI()
+ {
+ try
+ {
+ return new URI( m_uri.toString() );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Cound not convert the supplied uri spec ["
+ + m_uri
+ + "] to a formal URI.";
+ throw new BuildException( error, e, getLocation() );
+ }
+ }
+
+ /**
+ * Return the ant property name.
+ * @return the property name
+ */
+ private String getPropertyName()
+ {
+ if( null == m_name )
+ {
+ final String error =
+ "The required 'property' attribute is not declared.";
+ throw new BuildException( error, getLocation() );
+ }
+ else
+ {
+ return m_name;
+ }
+ }
+
+ /**
+ * Load the resource and assign the locally cached file path to the
supplied property name.
+ * @exception BuildException if an error occurs during resource resolution
+ */
+ public void execute() throws BuildException
+ {
+ if( null == m_uri )
+ {
+ final String error =
+ "Missing uri attribute.";
+ throw new BuildException( error, getLocation() );
+ }
+
+ String name = getPropertyName();
+
+ try
+ {
+ URI uri = getURI();
+ String spec = getURI().toString();
+ log( "artifact: " + spec );
+ URL url = Artifact.toURL( uri );
+ URLConnection connection = url.openConnection();
+ connection.connect();
+ File file = (File) connection.getContent( new
Class[]{File.class} );
+ String path = file.getCanonicalPath();
+ getProject().setNewProperty( name, path );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Unexpected error while attempting to resolve artifact uri ["
+ + m_uri
+ + "]";
+ throw new BuildException( error, e, getLocation() );
+ }
+ }
+}

Added:
trunk/main/depot/tools/src/main/dpml/tools/transit/ImportArtifactTask.java
===================================================================
---
trunk/main/depot/tools/src/main/net/dpml/tools/transit/ImportArtifactTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/tools/src/main/dpml/tools/transit/ImportArtifactTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2004-2005 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.tools.transit;
+
+import java.io.File;
+import java.net.URL;
+import java.net.URI;
+import java.util.Properties;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.taskdefs.ImportTask;
+
+import net.dpml.transit.Artifact;
+import dpml.util.PropertyResolver;
+
+import static net.dpml.transit.Transit.DATA;
+
+/**
+ * Ant task that provides support for the import of build file templates
+ * via an artifact url.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class ImportArtifactTask extends ImportTask
+{
+ /**
+ * A flag indicating that nested directives have been provided.
+ */
+ private boolean m_flag = false;
+
+ private boolean m_init = false;
+
+ /**
+ * Set the project.
+ * @param project the current project
+ */
+ public void setProject( Project project )
+ {
+ super.setProject( project );
+ setTaskName( "import" );
+ }
+
+ /**
+ * Task initialization.
+ */
+ public synchronized void init()
+ {
+ if( !m_init )
+ {
+ TransitTask.initialize( this );
+ super.init();
+ m_init = true;
+ }
+ }
+
+ //
------------------------------------------------------------------------
+ // Task
+ //
------------------------------------------------------------------------
+
+ /**
+ * Set the file to import. Any symbolic references in the supplied
+ * file argument will be resolved prior to invoking the standard setFile
+ * operation.
+ *
+ * @param file the template filename
+ */
+ public void setFile( String file )
+ {
+ Properties properties = System.getProperties();
+ String path = PropertyResolver.resolve( properties, file );
+ super.setFile( path );
+ }
+
+ /**
+ * Set the artifact to import.
+ * @param uri the artifact to import into the build file
+ * @exception BuildException if an error occurs while attempting to
+ * resolve the artifact uri
+ */
+ public void setUri( URI uri ) throws BuildException
+ {
+ try
+ {
+ URL url = Artifact.toURL( uri );
+ File local = (File) url.getContent( new Class[]{File.class} );
+ super.setFile( local.getAbsolutePath() );
+ }
+ catch( Exception e )
+ {
+ final String error =
+ "Could not import the resource from the uri ["
+ + uri
+ + "]";
+ throw new BuildException( error, e );
+ }
+ }
+
+ /**
+ * Execute the import.
+ */
+ public void execute()
+ {
+ try
+ {
+ super.execute();
+ }
+ catch( BuildException e )
+ {
+ throw e;
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Input (super).execute() failed.";
+ throw new BuildException( error, e );
+ }
+ }
+}
+

Added: trunk/main/depot/tools/src/main/dpml/tools/transit/MainTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/transit/MainTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/transit/MainTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2004-2005 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.tools.transit;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.ComponentHelper;
+import org.apache.tools.ant.Project;
+
+/**
+ * Task that initializes the Transit sub-system during which a transit
+ * is assigned to the current project. In addition the initization
procedures
+ * establishes a set of ant properties enabling convenient script based
access
+ * to DPML dirctories.
+ *
+ * <pre>
+ &lt;project name="example"
+ xmlns:transit="antlib:dpml.tools.transit">
+ &lt;transit:init/>
+ &lt;echo message="Home: ${dpml.home}"/>
+ &lt;echo message="Cache: ${dpml.cache}"/>
+ &lt;echo message="Templates: ${dpml.templates}"/>
+ &lt;echo message="Docs: ${dpml.docs}"/>
+ &lt;echo message="Docs: ${dpml.dist}"/>
+ &lt;/project></pre>
+ * <p>Output from the above example is shown below:</p>
+ * <pre>
+ [echo] Home: C:\system\dpml
+ [echo] Cache: C:\system\dpml\main
+ [echo] Templates: C:\system\dpml\templates
+ [echo] Docs: C:\system\dpml\docs
+ [echo] Docs: C:\system\dpml\dist
+ * </pre>
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class MainTask extends TransitTask
+{
+ //
------------------------------------------------------------------------
+ // state
+ //
------------------------------------------------------------------------
+
+ /**
+ * List of plugin declarations.
+ */
+ private List<MapDataType> m_mappings = new ArrayList<MapDataType>();
+
+ //
------------------------------------------------------------------------
+ // constructor
+ //
------------------------------------------------------------------------
+
+ /**
+ * Creation of a new Main task.
+ */
+ public MainTask()
+ {
+ super();
+ }
+
+ //
------------------------------------------------------------------------
+ // Task
+ //
------------------------------------------------------------------------
+
+ /**
+ * Create and return a new plugin definition.
+ * @return the plugin definition
+ */
+ public MapDataType createMap()
+ {
+ MapDataType map = new MapDataType();
+ m_mappings.add( map );
+ return map;
+ }
+
+ /**
+ * Set the project.
+ * @param project the current project
+ */
+ public void setProject( Project project )
+ {
+ setTaskName( "transit" );
+ super.setProject( project );
+ }
+
+ /**
+ * Updates properties on the current project and install any plugins
declared
+ * as children of the transit init tag.
+ *
+ * @exception BuildException if an execution error occurs
+ */
+ public void execute() throws BuildException
+ {
+ Project project = getProject();
+ TransitComponentHelper.initialize( project );
+ ComponentHelper ch = ComponentHelper.getComponentHelper( project );
+ MapDataType[] maps = (MapDataType[]) m_mappings.toArray( new
MapDataType[0] );
+ TransitComponentHelper.register( maps );
+ }
+}
+

Added: trunk/main/depot/tools/src/main/dpml/tools/transit/MapDataType.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/transit/MapDataType.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/transit/MapDataType.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2004-2005 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.tools.transit;
+
+import java.net.URI;
+
+/**
+ * Utility class that declares a map between a urn and a plugin uri.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class MapDataType
+{
+ private String m_urn;
+ private URI m_uri;
+
+ /**
+ * Set the urn value.
+ * @param urn the urn
+ */
+ public void setUrn( String urn )
+ {
+ m_urn = urn;
+ }
+
+ /**
+ * Get the urn value.
+ * @return the urn
+ */
+ public String getURN()
+ {
+ if( null == m_urn )
+ {
+ throw new IllegalStateException( "urn" );
+ }
+ return m_urn;
+ }
+
+ /**
+ * Set the uri value.
+ * @param uri the uri
+ */
+ public void setUri( URI uri )
+ {
+ m_uri = uri;
+ }
+
+ /**
+ * Get the uri value.
+ * @return the uri
+ */
+ public URI getURI()
+ {
+ if( null == m_urn )
+ {
+ throw new IllegalStateException( "uri" );
+ }
+ return m_uri;
+ }
+
+ /**
+ * Return the string representing of this instance.
+ * @return the string value
+ */
+ public String toString()
+ {
+ return "[map urn:" + m_urn + " uri:" + m_uri + "]";
+ }
+}
+

Added: trunk/main/depot/tools/src/main/dpml/tools/transit/NodeTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/transit/NodeTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/transit/NodeTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2005 Stephen McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.tools.transit;
+
+import java.util.LinkedList;
+import java.util.prefs.Preferences;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+/**
+ * Task supports the creation of preference as readable xml files.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class NodeTask extends Task
+{
+ private String m_name;
+ private LinkedList<NodeTask> m_nodes = new LinkedList<NodeTask>();
+ private LinkedList<EntryTask> m_entries = new LinkedList<EntryTask>();
+
+ /**
+ * Set the preference node name.
+ * @param name the node name
+ */
+ public void setName( String name )
+ {
+ m_name = name;
+ }
+
+ /**
+ * Create and return a new nested node.
+ * @return the new node
+ */
+ public NodeTask createNode()
+ {
+ NodeTask node = new NodeTask();
+ m_nodes.add( node );
+ return node;
+ }
+
+ /**
+ * Create and return a new attribute entry.
+ * @return the new attribute
+ */
+ public EntryTask createEntry()
+ {
+ EntryTask entry = new EntryTask();
+ m_entries.add( entry );
+ return entry;
+ }
+
+ void apply( Preferences prefs )
+ {
+ EntryTask[] entries = (EntryTask[]) m_entries.toArray( new
EntryTask[0] );
+ for( int i=0; i<entries.length; i++ )
+ {
+ EntryTask entry = entries[i];
+ entry.apply( prefs );
+ }
+ NodeTask[] nodes = (NodeTask[]) m_nodes.toArray( new NodeTask[0] );
+ for( int i=0; i<nodes.length; i++ )
+ {
+ NodeTask node = nodes[i];
+ String name = node.getNodeName();
+ Preferences child = prefs.node( name );
+ node.apply( child );
+ }
+ }
+
+ private String getNodeName()
+ {
+ if( null == m_name )
+ {
+ final String error =
+ "Missing name attribute.";
+ throw new BuildException( error, getLocation() );
+ }
+ return m_name;
+ }
+
+ /**
+ * An attribute entry.
+ */
+ public class EntryTask extends Task
+ {
+ private String m_key;
+ private Object m_value;
+ private Preferences m_prefs;
+ private Class m_type;
+
+ /**
+ * Set the attribute key.
+ * @param key the attribute name
+ */
+ public void setKey( String key )
+ {
+ m_key = key;
+ }
+
+ /**
+ * Set the attribute string value.
+ * @param value the string value
+ */
+ public void setValue( String value )
+ {
+ checkValue();
+ m_value = value;
+ }
+
+ /**
+ * Set the attribute as a boolean value.
+ * @param value the boolean value
+ */
+ public void setBoolean( boolean value )
+ {
+ checkValue();
+ m_value = new Boolean( value );
+ }
+
+ /**
+ * Set the attribute as a int value.
+ * @param value the int value
+ */
+ public void setInt( int value )
+ {
+ checkValue();
+ m_value = new Integer( value );
+ }
+
+ /**
+ * Set the attribute as a double value.
+ * @param value the double value
+ */
+ public void setDouble( double value )
+ {
+ checkValue();
+ m_value = new Double( value );
+ }
+
+ /**
+ * Set the attribute as a float value.
+ * @param value the float value
+ */
+ public void setFloat( float value )
+ {
+ checkValue();
+ m_value = new Float( value );
+ }
+
+ private void checkValue()
+ {
+ if( null != m_value )
+ {
+ final String error =
+ "Entry value is already assigned to an instance of "
+ + m_value.getClass().getName()
+ + ".";
+ throw new BuildException( error, getLocation() );
+ }
+ }
+
+ void apply( Preferences prefs )
+ {
+ if( null == m_key )
+ {
+ final String error =
+ "Missing key attribute.";
+ throw new BuildException( error, getLocation() );
+ }
+ if( null == m_value )
+ {
+ final String error =
+ "Missing value attribute.";
+ throw new BuildException( error, getLocation() );
+ }
+ Class c = m_value.getClass();
+ if( c == String.class )
+ {
+ prefs.put( m_key, (String) m_value );
+ }
+ else if( c == Boolean.class )
+ {
+ prefs.putBoolean( m_key, ( (Boolean) m_value
).booleanValue() );
+ }
+ else if( c == Integer.class )
+ {
+ prefs.putInt( m_key, ( (Integer) m_value ).intValue() );
+ }
+ else if( c == Double.class )
+ {
+ prefs.putDouble( m_key, ( (Double) m_value ).doubleValue() );
+ }
+ else if( c == Float.class )
+ {
+ prefs.putFloat( m_key, ( (Float) m_value ).floatValue() );
+ }
+ }
+ }
+}

Added: trunk/main/depot/tools/src/main/dpml/tools/transit/PluginTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/transit/PluginTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/transit/PluginTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,624 @@
+/*
+ * Copyright 2004-2005 Stephen McConnell
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.tools.transit;
+
+import dpml.lang.Part;
+import dpml.util.ElementHelper;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.Hashtable;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Hashtable;
+
+import net.dpml.lang.PartError;
+import net.dpml.lang.AntlibStrategy;
+import net.dpml.lang.Strategy;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildListener;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ComponentHelper;
+
+import org.w3c.dom.Element;
+
+/**
+ * The plugin task handles the establishment of ant tasks, listeners, and
antlibs derived
+ * from a classloader established by the transit sub-system.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class PluginTask extends TransitTask
+{
+ /**
+ * The uri of the plugin to load.
+ */
+ private String m_uri;
+
+ /**
+ * Overloaded plugin urn.
+ */
+ private String m_urn;
+
+ /**
+ * A list of tasks declared by the plugin declaration.
+ */
+ private List<Task> m_tasks = new ArrayList<Task>();
+
+ /**
+ * List of listeners declared by the plugin task declaration.
+ */
+ private List<Listener> m_listeners = new ArrayList<Listener>();
+
+ /**
+ * List of antlibs declared by the plugin task declaration.
+ */
+ private List<Antlib> m_antlibs = new ArrayList<Antlib>();
+
+ /**
+ * Plugin name delalred by the plugin task declaration.
+ */
+ private String m_name;
+
+ /**
+ * A flag indicating that nested directives have been provided.
+ */
+ private boolean m_flag = false;
+
+ /**
+ * A list of tasks declared by the plugin declaration.
+ */
+ private Hashtable<URI,Part> m_parts = new Hashtable<URI,Part>(); // hard
reference to loaded parts
+
+ /**
+ * Set the project.
+ * @param project the current project
+ */
+ public void setProject( Project project )
+ {
+ setTaskName( "plugin" );
+ super.setProject( project );
+ }
+
+ /**
+ * Create and associate a new antlib urn entry with the plugin.
+ * @return the new antlib entry
+ */
+ public Antlib createAntlib()
+ {
+ m_flag = true;
+ final Antlib antlib = new Antlib();
+ m_antlibs.add( antlib );
+ return antlib;
+ }
+
+ /**
+ * Create and associate a new task entry with the plugin.
+ * @return the new task entry
+ */
+ public Task createTask()
+ {
+ m_flag = true;
+ final Task task = new Task();
+ m_tasks.add( task );
+ return task;
+ }
+
+ /**
+ * Create and associate a new build listener with the plugin.
+ * @return the new listener entry
+ */
+ public Listener createListener()
+ {
+ m_flag = true;
+ final Listener listener = new Listener();
+ m_listeners.add( listener );
+ return listener;
+ }
+
+ /**
+ * Set the artifact uri of the plugin from which the task is to be loaded.
+ * @param uri an artifact plugin uri
+ */
+ public void setUri( String uri )
+ {
+ m_uri = uri;
+ }
+
+ /**
+ * Overload the urn to assign to the plugin.
+ * @param urn the urn to use
+ */
+ public void setUrn( String urn )
+ {
+ m_urn = urn;
+ }
+
+ /**
+ * Return the artifact uri of the plugin.
+ * @return the plugin uri
+ */
+ public URI getUri()
+ {
+ try
+ {
+ return new URI( m_uri );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Cound not convert the supplied uri spec ["
+ + m_uri
+ + "] to a formal URI.";
+ throw new BuildException( error, e, getLocation() );
+ }
+ }
+
+ /**
+ * Load the plugin and handle registration of listeners, tasks, and antlib
+ * declarations based on the nested nested task directives.
+ * @exception BuildException if an error occurs during plugin loading or
deployment
+ */
+ public void execute() throws BuildException
+ {
+ if( null == m_uri )
+ {
+ final String error =
+ "Missing uri attribute.";
+ throw new BuildException( error );
+ }
+
+ final Project project = getProject();
+ final ComponentHelper helper =
+ ComponentHelper.getComponentHelper( project );
+
+ if( !m_flag )
+ {
+ createAntlib();
+ }
+
+ try
+ {
+ URI uri = new URI( m_uri );
+ ClassLoader anchor = getClass().getClassLoader();
+ Strategy strategy = Strategy.load( anchor, null, uri, null );
+ ClassLoader loader = strategy.getClassLoader();
+ Task[] tasks = (Task[]) m_tasks.toArray( new Task[0] );
+ if( tasks.length > 0 )
+ {
+ for( int i=0; i < tasks.length; i++ )
+ {
+ try
+ {
+ Task task = tasks[i];
+ String classname = task.getClassname();
+ String name = task.getName();
+ Class c = loader.loadClass( classname );
+ helper.addTaskDefinition( name, c );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Failed to load a named task ["
+ + tasks[i].getName()
+ + "] from the part ["
+ + uri
+ + "].";
+ throw new BuildException( error, e, getLocation() );
+ }
+ }
+ }
+
+ Listener[] listeners = (Listener[]) m_listeners.toArray( new
Listener[0] );
+ for( int i=0; i < listeners.length; i++ )
+ {
+ Listener listener = listeners[i];
+ String classname = listener.getClassname();
+ Class c = loader.loadClass( classname );
+ Object object = c.newInstance();
+ if( object instanceof BuildListener )
+ {
+ BuildListener instance = (BuildListener) object;
+ getProject().addBuildListener( instance );
+ log( "registered listener: " +
instance.getClass().getName() );
+ }
+ else
+ {
+ final String error =
+ "The plugin ["
+ + uri
+ + "] establishing the class ["
+ + object.getClass().getName()
+ + "] could not be registered as a project listener
because it does not implement the ["
+ + BuildListener.class.getName()
+ + "] interface.";
+ throw new BuildException( error, getLocation() );
+ }
+ }
+
+ Antlib[] antlibs = (Antlib[]) m_antlibs.toArray( new Antlib[0] );
+ for( int i=0; i < antlibs.length; i++ )
+ {
+ loadAntlib( uri, loader, helper, antlibs[i] );
+ }
+ }
+ catch( BuildException e )
+ {
+ throw e;
+ }
+ catch( Exception e )
+ {
+ final String error = "Unable to load the plugin ["
+ + m_uri
+ + "]";
+ throw new PartError( error, e );
+ }
+ }
+
+ //private Part getPart( URI uri ) throws IOException
+ //{
+ // Part part = m_parts.get( uri );
+ // if( null == part )
+ // {
+ // part = Part.load( uri );
+ // m_parts.put( uri, part );
+ // }
+ // return part;
+ //}
+
+ /**
+ * Load an antlib.
+ * @param classloader the classloader from which the antlib will be loaded
+ * @param helper the component helper
+ * @param antlib the antlib to load
+ * @exception Exception if it doesn't work out
+ */
+ private void loadAntlib(
+ URI uri, ClassLoader classloader, ComponentHelper helper, Antlib
antlib ) throws Exception
+ {
+ Strategy strategy = Strategy.load( classloader, null, uri, null );
+ String resource = antlib.getPath();
+ if( null == resource )
+ {
+ if( strategy instanceof AntlibStrategy )
+ {
+ AntlibStrategy res = (AntlibStrategy) strategy;
+ resource = res.getPath();
+ }
+ }
+ if( null == resource )
+ {
+ final String error =
+ "Resource path for the antlib is not declared in the part
descriptor "
+ + "or antlib directive ["
+ + uri
+ + "]";
+ throw new BuildException( error, getLocation() );
+ }
+
+ //String urn = getAntLibURN( antlib, part );
+ String urn = getAntLibURN( antlib, strategy );
+ if( null == urn )
+ {
+ final String error =
+ "URN for the antlib is not declared in the plugin descriptor "
+ + "or antlib directive ["
+ + uri
+ + "]";
+ throw new BuildException( error, getLocation() );
+ }
+
+ InputStream input = classloader.getResourceAsStream( resource );
+ if( null == input )
+ {
+ final String error =
+ "Antlib resource ["
+ + resource
+ + "] referenced in ["
+ + uri
+ + "] not found.";
+ throw new BuildException( error, getLocation() );
+ }
+ Element root = ElementHelper.getRootElement( input );
+ Element[] tasks = ElementHelper.getChildren( root, "taskdef" );
+ for( int i=0; i < tasks.length; i++ )
+ {
+ Element task = tasks[i];
+ String name = ElementHelper.getAttribute( task, "name" );
+ String classname = ElementHelper.getAttribute( task, "classname"
);
+ loadTaskDef( classloader, helper, classname, urn + ":" + name );
+ }
+
+ Element[] types = ElementHelper.getChildren( root, "typedef" );
+ for( int i=0; i < types.length; i++ )
+ {
+ Element type = types[i];
+ String name = ElementHelper.getAttribute( type, "name" );
+ String classname = ElementHelper.getAttribute( type, "classname"
);
+ loadTypeDef( classloader, helper, classname, urn + ":" + name );
+ }
+ }
+
+ private String getAntLibURN( Antlib antlib, Strategy strategy )
+ {
+ if( null != m_urn )
+ {
+ return m_urn;
+ }
+ String urn = antlib.getURN();
+ if( null != urn )
+ {
+ return urn;
+ }
+ else
+ {
+ //Strategy strategy = part.getStrategy();
+ if( strategy instanceof AntlibStrategy )
+ {
+ AntlibStrategy res = (AntlibStrategy) strategy;
+ return res.getURN();
+ }
+ else
+ {
+ return null;
+ }
+ }
+ }
+
+ /**
+ * Load a single task defintion.
+ * @param loader the classloader from which the task will be loaded
+ * @param helper the component helper
+ * @param classname the task classname
+ * @param name the task name
+ * @exception BuildException if an error occurs while attempting to load
the task
+ */
+ private void loadTaskDef( ClassLoader loader, ComponentHelper helper,
String classname, String name )
+ throws BuildException
+ {
+ if( getProject().getTaskDefinitions().get( name ) != null )
+ {
+ return;
+ }
+
+ try
+ {
+ Class c = loader.loadClass( classname );
+ helper.addTaskDefinition( name, c );
+ log( "installed taskdef: " + name, Project.MSG_VERBOSE );
+ }
+ catch( BuildException e )
+ {
+ throw e;
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Unable to load task ["
+ + name
+ + "] from class ["
+ + classname
+ + "].";
+ throw new BuildException( error, e, getLocation() );
+ }
+ }
+
+ /**
+ * Load a single type defintion.
+ * @param loader the classloader from which the type will be loaded
+ * @param helper the component helper
+ * @param classname the type classname
+ * @param name the task type
+ * @exception BuildException if an error occurs while attempting to load
the task
+ */
+ private void loadTypeDef( ClassLoader loader, ComponentHelper helper,
String classname, String name )
+ throws BuildException
+ {
+ if( getProject().getDataTypeDefinitions().get( name ) != null )
+ {
+ return;
+ }
+
+ try
+ {
+ Class c = loader.loadClass( classname );
+ helper.addDataTypeDefinition( name, c );
+ log( "installed typedef: " + name, Project.MSG_VERBOSE );
+ }
+ catch( BuildException e )
+ {
+ throw e;
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Unable to load type ["
+ + name + "] from class ["
+ + classname
+ + "].";
+ throw new BuildException( error, e, getLocation() );
+ }
+ }
+
+ /**
+ * Nested element with the &lt;plugin&gt; element declaring the name and
class of
+ * a task to be loaded from the classloader established by the transit
plugin descriptor.
+ */
+ public static class Task
+ {
+ /**
+ * The task name.
+ */
+ private String m_name;
+
+ /**
+ * The task classname.
+ */
+ private String m_classname;
+
+ /**
+ * Set the task name.
+ * @param name the name of the task
+ */
+ public void setName( final String name )
+ {
+ m_name = name;
+ }
+
+ /**
+ * Set the task classname.
+ * @param classname the task classname
+ */
+ public void setClass( final String classname )
+ {
+ m_classname = classname;
+ }
+
+ /**
+ * Return the task classname.
+ * @return the classname
+ * @exception BuildException if the class attribute is missing
+ */
+ public String getClassname() throws BuildException
+ {
+ if( null == m_classname )
+ {
+ final String error =
+ "Missing class attribute.";
+ throw new BuildException( error );
+ }
+ return m_classname;
+ }
+
+ /**
+ * Return the task name.
+ * @return the name
+ * @exception BuildException if the name attribute is missing
+ */
+ public String getName() throws BuildException
+ {
+ if( null == m_name )
+ {
+ final String error =
+ "Missing name attribute.";
+ throw new BuildException( error );
+ }
+ return m_name;
+ }
+ }
+
+ /**
+ * Nested element with the &lt;plugin&gt; element declaring the name and
class of
+ * a project listener to be loaded from the classloader established by
the transit plugin descriptor.
+ */
+ public static class Listener
+ {
+ /**
+ * The listener classname.
+ */
+ private String m_classname;
+
+ /**
+ * Set the task classname.
+ * @param classname the task classname
+ */
+ public void setClass( final String classname )
+ {
+ m_classname = classname;
+ }
+
+ /**
+ * Return the task classname.
+ * @return the classname
+ * @exception BuildException if the class attribute is missing
+ */
+ public String getClassname() throws BuildException
+ {
+ if( null == m_classname )
+ {
+ final String error =
+ "Missing class attribute.";
+ throw new BuildException( error );
+ }
+ return m_classname;
+ }
+ }
+
+ /**
+ * Nested element with the &lt;plugin&gt; element declaring a packaged
resource and urn of
+ * an antlib descriptor to be loaded from the classloader established by
the transit plugin
+ * descriptor.
+ */
+ public static class Antlib
+ {
+ /**
+ * The antlib urn.
+ */
+ private String m_urn;
+
+ /**
+ * The antlib descriptor resource path.
+ */
+ private String m_path;
+
+ /**
+ * Set the urn for this antlib.
+ * @param urn the antlib urn
+ */
+ public void setUrn( final String urn )
+ {
+ m_urn = urn;
+ }
+
+ /**
+ * Return the antlib urn.
+ * @return the urn (possibly null in which case the a urn must be
declared
+ * within the plugin descriptor)0
+ */
+ public String getURN()
+ {
+ return m_urn;
+ }
+
+ /**
+ * Set the antlib resource path
+ * @param path the resource path
+ */
+ public void setResource( final String path )
+ {
+ m_path = path;
+ }
+
+ /**
+ * Return the antlib resource path.
+ * @return the path (possibly null in which case the resource
reference
+ * must exist in the plugin descriptor)
+ */
+ public String getPath()
+ {
+ return m_path;
+ }
+ }
+}

Added:
trunk/main/depot/tools/src/main/dpml/tools/transit/TransitComponentHelper.java
===================================================================
---
trunk/main/depot/tools/src/main/net/dpml/tools/transit/TransitComponentHelper.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/tools/src/main/dpml/tools/transit/TransitComponentHelper.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,577 @@
+/*
+ * Copyright 2004-2005 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.tools.transit;
+
+import dpml.tools.BuilderError;
+
+import dpml.util.ElementHelper;
+
+import java.io.InputStream;
+import java.util.Vector;
+import java.util.Hashtable;
+import java.net.URI;
+
+import net.dpml.lang.AntlibStrategy;
+import net.dpml.lang.Strategy;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.ComponentHelper;
+import org.apache.tools.ant.SubBuildListener;
+import org.apache.tools.ant.BuildEvent;
+
+import org.w3c.dom.Element;
+
+/**
+ * A component helper that handles automatic loading of plugins into the
+ * ant plugin based on namespace declarations in the project file. This is
similar
+ * to the 'antlib:' convention except we use the 'plugin:' convention.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class TransitComponentHelper extends ComponentHelper
+ implements SubBuildListener
+{
+ //------------------------------------------------------------------------
+ // static
+ //------------------------------------------------------------------------
+
+ /**
+ * The constant Transit ANTLIB namespace.
+ */
+ public static final String TRANSIT_ANTLIB_URN =
"antlib:dpml.tools.transit";
+
+ /**
+ * The constant Transit ANTLIB init task namespace.
+ */
+ public static final String TRANSIT_INIT_URN = TRANSIT_ANTLIB_URN +
":init";
+
+ /**
+ * The constant Transit ANTLIB plugin task namespace.
+ */
+ public static final String TRANSIT_PLUGIN_URN = TRANSIT_ANTLIB_URN +
":plugin";
+
+ /**
+ * The constant Transit ANTLIB import task namespace.
+ */
+ public static final String TRANSIT_IMPORT_URN = TRANSIT_ANTLIB_URN +
":import";
+
+ /**
+ * The constant Transit ANTLIB get task namespace.
+ */
+ public static final String TRANSIT_GET_URN = TRANSIT_ANTLIB_URN + ":get";
+
+ /**
+ * The constant artifact plugin header.
+ */
+ public static final String PLUGIN_ARTIFACT_HEADER = "artifact:part:";
+
+ /**
+ * Creation of a component helper for the supplied project.
+ *
+ * @param project the project
+ */
+ public static void initialize( Project project )
+ {
+ initialize( project, false );
+ }
+
+ /**
+ * Creation of a component helper for the supplied project.
+ *
+ * @param project the project
+ * @param flag subproject flag
+ */
+ public static void initialize( Project project, boolean flag )
+ {
+ ComponentHelper current =
+ (ComponentHelper) project.getReference( "ant.ComponentHelper" );
+ if( ( null != current ) && ( current instanceof
TransitComponentHelper ) )
+ {
+ return;
+ }
+ TransitComponentHelper helper = new TransitComponentHelper( project,
current );
+ helper.initDefaultDefinitions();
+ if( flag )
+ {
+ project.log(
+ "\nAssigning Transit component helper to sub-project: "
+ + project.getBaseDir() );
+ }
+ else
+ {
+ project.log(
+ "\nAssigning Transit component helper to project: "
+ + project.getBaseDir() );
+ }
+ project.addReference( "ant.ComponentHelper", helper );
+ project.addBuildListener( helper );
+ }
+
+ /**
+ * Vector of plugin uris already loaded.
+ */
+ private static Vector<URI> m_URIS = new Vector<URI>();
+
+ /**
+ * Table of urn to uri mappings.
+ */
+ private static Hashtable<String,URI> m_MAPPINGS = new
Hashtable<String,URI>();
+
+ /**
+ * Register the mapping between a urn and a plugin uri.
+ * @param maps a sequence of urn to uri bindings
+ */
+ public static void register( MapDataType[] maps )
+ {
+ if( null == maps )
+ {
+ throw new NullPointerException( "maps" );
+ }
+
+ for( int i=0; i < maps.length; i++ )
+ {
+ MapDataType map = maps[i];
+ String urn = map.getURN();
+ if( !m_MAPPINGS.contains( urn ) )
+ {
+ URI uri = map.getURI();
+ m_MAPPINGS.put( urn, uri );
+ }
+ }
+ }
+
+ //------------------------------------------------------------------------
+ // state
+ //------------------------------------------------------------------------
+
+ /**
+ * The current project.
+ */
+ private Project m_project;
+
+ /**
+ * The parent component helper.
+ */
+ private ComponentHelper m_parent;
+
+ //------------------------------------------------------------------------
+ // constructor
+ //------------------------------------------------------------------------
+
+ /**
+ * Creation of a new transit component helper.
+ * @param project the current project
+ */
+ public TransitComponentHelper( Project project )
+ {
+ this( project, ComponentHelper.getComponentHelper( project ) );
+ }
+
+ /**
+ * Creation of a new transit component helper.
+ * @param project the current project
+ * @param parent the parent component helper
+ */
+ public TransitComponentHelper( Project project, ComponentHelper parent )
+ {
+ setProject( project );
+ m_parent = parent;
+ if( null != parent )
+ {
+ parent.setNext( this );
+ }
+
+ Hashtable map = getTaskDefinitions();
+ if( null == map.get( TRANSIT_INIT_URN ) )
+ {
+ addTaskDefinition( TRANSIT_INIT_URN, MainTask.class );
+ addTaskDefinition( TRANSIT_PLUGIN_URN, PluginTask.class );
+ addTaskDefinition( TRANSIT_IMPORT_URN, ImportArtifactTask.class
);
+ addTaskDefinition( TRANSIT_GET_URN, GetTask.class );
+ }
+ }
+
+
//------------------------------------------------------------------------
+ // implementation
+
//------------------------------------------------------------------------
+
+ /**
+ * Set the current project.
+ * @param project the current ant project
+ */
+ public void setProject( Project project )
+ {
+ m_project = project;
+ super.setProject( project );
+ }
+
+ /**
+ * Create an object for a component using a supplied name. The name
+ * is the fully qualified component name which allows us to intercept
+ * specific namespace qualifiers - in this case 'plugin:'. In the event
of
+ * a plugin namespace we check to see if the plugin for that name is
already
+ * loaded and it not we proceed with classic transit-based loading of the
+ * plugin and registration of plugin classes with the component helper.
+ *
+ * @param name the name of the component, if the component is in a
namespace, the
+ * name is prefixed with the namespace uri and ":"
+ * @return the class if found or null if not.
+ */
+ public Object createComponent( String name )
+ {
+ Object object = super.createComponent( name );
+ if( null != object )
+ {
+ return object;
+ }
+ else if( null != m_parent )
+ {
+ object = m_parent.createComponent( name );
+ if( null != object )
+ {
+ return object;
+ }
+ }
+
+ if( name.startsWith( "antlib:" ) )
+ {
+ String spec = name.substring( 7 );
+ int n = spec.indexOf( ":" );
+ if( n < 0 )
+ {
+ final String error =
+ "Invalid antlib component name: "
+ + name;
+ throw new BuildException( error );
+ }
+
+ String resource = spec.substring( 0, n );
+ if( spec.length() < ( n + 1 ) )
+ {
+ final String error =
+ "Invalid antlib component name: "
+ + name;
+ throw new BuildException( error );
+ }
+ String theName = spec.substring( n + 1 );
+ String path = resource.replace( '.', '/' ) + "/antlib.xml";
+ ClassLoader classloader = getClass().getClassLoader();
+ InputStream input = classloader.getResourceAsStream( path );
+ if( null == input )
+ {
+ final String error =
+ "Task ["
+ + name
+ + "] could not be loaded because the Antlib resource ["
+ + path
+ + "] does not exist.";
+ throw new BuildException( error );
+ }
+ else
+ {
+ int i = name.lastIndexOf( ":" );
+ if( i < 0 )
+ {
+ final String error =
+ "Invalid antlib component name: "
+ + name;
+ throw new BuildException( error );
+ }
+ else
+ {
+ String urn = name.substring( 0, name.lastIndexOf( ":" )
);
+ installAntlib( classloader, input, urn );
+ return createComponent( name );
+ }
+ }
+ }
+ else
+ {
+ //
+ // from here we need to validate - code has been worked over
more than a
+ // few time ans I would not recommend it for flight control
scenarios
+ // just yet
+ //
+
+ int k = name.lastIndexOf( ":" );
+ if( k > 0 )
+ {
+ String urn = name.substring( 0, k );
+ String task = name.substring( k + 1 );
+ URI uri = convertUrnToURI( urn );
+ if( null != uri )
+ {
+ installPlugin( uri, urn, task );
+ object = super.createComponent( name );
+ if( null != object )
+ {
+ return object;
+ }
+ else
+ {
+ final String error =
+ "Mapped urn returned a null object.";
+ throw new BuildException( error );
+ }
+ }
+ else
+ {
+ return super.createComponent( name );
+ }
+ }
+ else
+ {
+ return super.createComponent( name );
+ }
+ }
+ }
+
+ /**
+ * Convert a urn to a uri taking into account possible urn alias names.
+ *
+ * @param urn the urn to convert to a uri
+ * @return the converted uri
+ */
+ private URI convertUrnToURI( String urn )
+ {
+ URI uri = (URI) m_MAPPINGS.get( urn );
+ if( null != uri )
+ {
+ return uri;
+ }
+ if( urn.startsWith( PLUGIN_ARTIFACT_HEADER ) )
+ {
+ return convertToURI( urn );
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * The implementation will retrieve the plugin descriptor. If the
descriptor
+ * declares a classname then the class will be loaded and assigned under
+ * name. If the classname is undefined and resource is defined, the
+ * implementation will attempt to locate an antlib definition at the
resource
+ * location and will attempt to load all taskdef and typedef entries
declared
+ * in the antlib.
+ *
+ * @param uri the plugin uri
+ * @param name the fully qualified component name
+ */
+ private void installPlugin( URI uri, String urn, String name )
+ {
+ final String label = uri + ":" + name;
+ if( null != getTaskDefinitions().get( label ) )
+ {
+ return;
+ }
+
+ try
+ {
+ m_project.log( "installing: " + uri + " as " + urn );
+ Strategy strategy = Strategy.load( null, null, uri, null );
+ ClassLoader classloader = strategy.getClassLoader();
+ ClassLoader current =
Thread.currentThread().getContextClassLoader();
+ if( strategy instanceof AntlibStrategy )
+ {
+ AntlibStrategy res = (AntlibStrategy) strategy;
+ String resource = res.getPath();
+ getProject().log( "installing antlib plugin [" + resource +
"]", Project.MSG_VERBOSE );
+ InputStream input = classloader.getResourceAsStream(
resource );
+ if( null == input )
+ {
+ final String error =
+ "Cannot load resource ["
+ + resource
+ + "] because it does not exist within the cloassloader
defined by the uri ["
+ + uri
+ + "]"
+ + "\n" + classloader.toString();
+ throw new BuildException( error );
+ }
+ installAntlib( classloader, input, urn );
+ }
+ else
+ {
+ final String error =
+ "Strategy class not supported ["
+ + strategy.getClass().getName()
+ + "].";
+ throw new BuildException( error );
+ }
+ m_URIS.add( uri );
+ }
+ catch( BuildException e )
+ {
+ throw e;
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Could not load plugin: " + uri;
+ throw new BuildException( error, e );
+ }
+ }
+
+ private void installAntlib( ClassLoader classloader, InputStream input,
String urn )
+ {
+ try
+ {
+ Element root = ElementHelper.getRootElement( input );
+ Element[] tasks = ElementHelper.getChildren( root, "taskdef" );
+ for( int i=0; i < tasks.length; i++ )
+ {
+ Element task = tasks[i];
+ String key = urn + ":" + ElementHelper.getAttribute( task,
"name" );
+ getProject().log( "installing task [" + key + "]",
Project.MSG_VERBOSE );
+ String classname = ElementHelper.getAttribute( task,
"classname" );
+ Class clazz = classloader.loadClass( classname );
+ super.addTaskDefinition( key, clazz );
+ }
+ Element[] types = ElementHelper.getChildren( root, "typedef" );
+ for( int i=0; i < types.length; i++ )
+ {
+ Element type = types[i];
+ String key = urn + ":" + ElementHelper.getAttribute( type,
"name" );
+ getProject().log( "installing type [" + key + "]",
Project.MSG_VERBOSE );
+ String classname = ElementHelper.getAttribute( type,
"classname" );
+ Class clazz = classloader.loadClass( classname );
+ super.addDataTypeDefinition( key, clazz );
+ }
+ }
+ catch( Exception e )
+ {
+ final String error =
+ "Antlib installation error: " + urn;
+ throw new BuildException( error, e );
+ }
+ }
+
+ /**
+ * Returns the current project.
+ * @return the project
+ */
+ private Project getProject()
+ {
+ return m_project;
+ }
+
+ /**
+ * Convert a urn to a url wrapping any errors in a build exception.
+ * @param urn the urn
+ * @return the uri
+ * @exception BuildException if a convertion error occurs
+ */
+ private URI convertToURI( String urn ) throws BuildException
+ {
+ try
+ {
+ return new URI( urn );
+ }
+ catch( Exception e )
+ {
+ final String error =
+ "Unable to convert the urn ["
+ + urn
+ + "] to a uri.";
+ throw new BuildException( error, e );
+ }
+ }
+
+ /**
+ * Notification that the build has started.
+ * @param event the build event
+ * @exception BuildException if a build error occurs
+ */
+ public void buildStarted( BuildEvent event )
+ throws BuildException
+ {
+ initialize( event.getProject(), false );
+ }
+
+ /**
+ * Notification that a sub build has started.
+ * @param event the build event
+ */
+ public void subBuildStarted( BuildEvent event )
+ {
+ initialize( event.getProject(), true );
+ }
+
+ /**
+ * Notification that a sub build has finished.
+ * @param event the build event
+ */
+ public void subBuildFinished( BuildEvent event )
+ {
+ }
+
+ /**
+ * Notification that the build has finished.
+ * @param event the build event
+ */
+ public void buildFinished( BuildEvent event )
+ {
+ }
+
+ /**
+ * Notification that the build target has started.
+ * @param event the build event
+ */
+ public void targetStarted( BuildEvent event )
+ {
+ }
+
+ /**
+ * Notification that the build target has finished.
+ * @param event the build event
+ */
+ public void targetFinished( BuildEvent event )
+ {
+ }
+
+ /**
+ * Notification that the build task has started.
+ * @param event the build event
+ */
+ public void taskStarted( BuildEvent event )
+ {
+ }
+
+ /**
+ * Notification that the build task has finaished.
+ * @param event the build event
+ */
+ public void taskFinished( BuildEvent event )
+ {
+ }
+
+ /**
+ * Notification of a message logged.
+ * @param event the build event
+ */
+ public void messageLogged( BuildEvent event )
+ {
+ }
+}
+

Added: trunk/main/depot/tools/src/main/dpml/tools/transit/TransitTask.java
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/transit/TransitTask.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/transit/TransitTask.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,172 @@
+/*
+ * Copyright 2004-2005 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package dpml.tools.transit;
+
+import java.io.File;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+import net.dpml.transit.Transit;
+
+import static net.dpml.transit.Transit.VERSION;
+
+/**
+ * Ant task that provides support for the import of build file templates
+ * via an artifact url.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+abstract class TransitTask extends Task
+{
+ private static boolean m_INIT = false;
+
+ /**
+ * Set the project.
+ * @param project the project
+ */
+ public void setProject( Project project )
+ {
+ super.setProject( project );
+ initialize( this );
+ }
+
+ /**
+ * Initialize the supplied task.
+ * @param task the task to initialize
+ * @exception BuildException if an initialization error occurs
+ */
+ public static void initialize( Task task ) throws BuildException
+ {
+ synchronized( TransitTask.class )
+ {
+ Project project = task.getProject();
+ if( !m_INIT )
+ {
+ m_INIT = true;
+ if( null == System.getProperty( "java.protocol.handler.pkgs"
) )
+ {
+ System.setProperty( "java.protocol.handler.pkgs",
"net.dpml.transit" );
+ }
+ try
+ {
+ Transit transit = Transit.getInstance();
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Internal error while initializing Transit";
+ throw new BuildException( error, e );
+ }
+ }
+ checkProperties( project );
+ }
+ }
+
+ /**
+ * Declares four properties into the current project covering the DPML
home directory,
+ * template directory, doc and main cache directories.
+ * @param project the current project
+ * @exception BuildException if an execution error occurs
+ */
+ private static void checkProperties( Project project ) throws
BuildException
+ {
+ if( null == project )
+ {
+ throw new NullPointerException( "project" );
+ }
+
+ updateProperty( project, "dpml.transit.version", VERSION );
+
+ File home = Transit.HOME;
+ File system = Transit.SYSTEM;
+ File data = Transit.DATA;
+ File prefs = Transit.PREFS;
+
+ File docs = new File( data, "docs" );
+ File dist = new File( data, "dist" );
+ File logs = new File( data, "logs" );
+
+ updateProperty( project, "dpml.home", home.getAbsolutePath() );
+ updateProperty( project, "dpml.system", system.getAbsolutePath() );
+ updateProperty( project, "dpml.data", data.getAbsolutePath() );
+ updateProperty( project, "dpml.docs", docs.getAbsolutePath() );
+ updateProperty( project, "dpml.dist", dist.getAbsolutePath() );
+ updateProperty( project, "dpml.logs", dist.getAbsolutePath() );
+ updateProperty( project, "dpml.prefs", prefs.getAbsolutePath() );
+
+ File cache = Transit.getInstance().getCacheDirectory();
+ if( null == project.getReference( "dpml.cache" ) )
+ {
+ try
+ {
+ project.addReference( "dpml.cache", cache );
+ }
+ catch( Throwable e )
+ {
+ throw new BuildException( e );
+ }
+ }
+
+ try
+ {
+ updateProperty( project, "dpml.cache", cache.getAbsolutePath() );
+ }
+ catch( Throwable e )
+ {
+ throw new BuildException( e );
+ }
+
+ String auth = project.getProperty( "dpml.transit.authority" );
+ if( null != auth )
+ {
+ System.setProperty(
+ "dpml.transit.authority",
+ System.getProperty(
+ "dpml.transit.authority", auth )
+ );
+ }
+ }
+
+ /**
+ * Update a property. If the property is already defined, the
implementation
+ * checks if the current value is the same as the supplied value and if
not the
+ * property value is updated. If not property exists for the given key a
new
+ * property will be created.
+ *
+ * @param project the ant project
+ * @param key the property key
+ * @param value the property value
+ */
+ private static void updateProperty( Project project, String key, String
value )
+ {
+ String v = project.getProperty( key );
+ if( null == v )
+ {
+ project.setProperty( key, value );
+ }
+ else if( !v.equals( value ) )
+ {
+ project.setNewProperty( key, value );
+ }
+ }
+}
+

Added: trunk/main/depot/tools/src/main/dpml/tools/transit/antlib.xml
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/transit/antlib.xml
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/transit/antlib.xml
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<antlib xmlns:current="ant:current">
+ <taskdef name="init" classname="dpml.tools.transit.MainTask"/>
+ <taskdef name="plugin" classname="dpml.tools.transit.PluginTask"/>
+ <taskdef name="import"
classname="dpml.tools.transit.ImportArtifactTask"/>
+ <taskdef name="get" classname="dpml.tools.transit.GetTask"/>
+</antlib>

Added: trunk/main/depot/tools/src/main/dpml/tools/transit/package.html
===================================================================
--- trunk/main/depot/tools/src/main/net/dpml/tools/transit/package.html
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/main/dpml/tools/transit/package.html
2007-02-08 23:31:25 UTC (rev 1818)
@@ -0,0 +1,36 @@
+
+<body>
+<p>
+ Ant tasks supporting Transit-based repository access.
+ The init task is used to established a number of transit related ant
+ properties and the plugin task is used to load antlibs, taskdefs,
typedefs
+ and build listeners using classloaders established relative to
resources
+ managed by the transit system.
+</p>
+
+ <p><i>Example build file:</i></p>
+
+<pre>
+&lt;project name="example" xmlns:transit="antlib:net.dpml.transit"&gt;
+
+ &lt;transit:import uri="local:template:dpml/tools/standard"/&gt;
+
+&lt;/project&gt;
+</pre>
+
+ <p><i>Example of a request to load and register a task
definition.</i></p>
+
+<pre>
+&lt;project name="example" xmlns:transit="antlib:net.dpml.transit"&gt;
+
+ &lt;transit:plugin
uri="artifact:plugin:dpml/magic/dpml-magic-doc#3000"&gt;
+ &lt;task class="net.dpml.magic.doc.DocTask" name="docs"/&gt;
+ &lt;/transit:plugin&gt;
+
+ &lt;docs/&gt;
+
+&lt;/project&gt;
+</pre>
+
+</body>
+

Copied: trunk/main/depot/tools/src/test/dpml (from rev 1789,
trunk/main/depot/tools/src/test/net/dpml)

Modified:
trunk/main/depot/tools/src/test/dpml/tools/info/AbstractTestCase.java
===================================================================
--- trunk/main/depot/tools/src/test/net/dpml/tools/info/AbstractTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++ trunk/main/depot/tools/src/test/dpml/tools/info/AbstractTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,7 +16,7 @@
* limitations under the License.
*/

-package net.dpml.tools.info;
+package dpml.tools.info;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -29,7 +29,7 @@
/**
* The ModuleDirective class describes a module data-structure.
*
- * @author <a href="http://www.dpml.net";>The Digital Product Meta Library</a>
+ * @author <a href="http://www.dpml.net";>The Digital Product Management
Laboratory</a>
*/
abstract class AbstractTestCase extends TestCase
{

Modified:
trunk/main/depot/tools/src/test/dpml/tools/info/ListenerDirectiveTestCase.java
===================================================================
---
trunk/main/depot/tools/src/test/net/dpml/tools/info/ListenerDirectiveTestCase.java
2006-11-30 21:08:46 UTC (rev 1789)
+++
trunk/main/depot/tools/src/test/dpml/tools/info/ListenerDirectiveTestCase.java
2007-02-08 23:31:25 UTC (rev 1818)
@@ -16,21 +16,21 @@
* limitations under the License.
*/

-package net.dpml.tools.info;
+package dpml.tools.info;

import java.net.URI;

/**
* The ModuleDirective class describes a module data-structure.
*
- * @author <a href="http://www.dpml.net";>The Digital Product Meta Library</a>
+ * @author <a href="http://www.dpml.net";>The Digital Product Management
Laboratory</a>
*/
public final class ListenerDirectiveTestCase extends AbstractTestCase
{
static final String NAME = "test";
static final int PRIORITY = 0;
static final String SPEC = "local:plugin:acme/widget";
- static final String CLASSNAME = "net.dpml.tools.process.JarProcess";
+ static final String CLASSNAME = "dpml.tools.process.JarProcess";
static final ListenerDirective[] LISTENERS = new ListenerDirective[3];

static




  • r1818 - in trunk/main/depot: . build build/etc build/etc/bin build/etc/bootstrap build/src/main build/src/main/dpml build/src/main/dpml/build library library/etc/data library/etc/data/ant library/etc/data/commons-cli library/etc/data/dpml library/etc/data/jgoodies library/etc/data/junit library/etc/data/samples library/etc/data/xstream library/src/main library/src/main/dpml/library library/src/main/dpml/library/impl library/src/main/dpml/library/info library/src/test library/src/test/dpml/library library/src/test/dpml/library/impl library/src/test/dpml/library/info library/src/test/net plugins plugins/checkstyle plugins/checkstyle/etc plugins/checkstyle/src/main plugins/checkstyle/src/main/dpml/tools/checkstyle plugins/checkstyle/src/main/net plugins/convert plugins/convert/etc plugins/convert/src/main plugins/convert/src/main/net tools tools/etc tools/etc/bootstrap tools/etc/prefs/templates tools/etc/prefs/xmls tools/src/main tools/src/main/dpml/tools tools/src/mai! n/dpml/tools/impl tools/src/main/dpml/tools/info tools/src/main/dpml/tools/tasks tools/src/main/dpml/tools/transit tools/src/test tools/src/test/dpml/tools/info, mcconnell at BerliOS, 02/08/2007

Archive powered by MHonArc 2.6.24.

Top of Page