You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hivemind.apache.org by ah...@apache.org on 2005/08/06 13:57:42 UTC
svn commit: r230544 [1/2] - in /jakarta/hivemind/trunk:
examples/src/descriptor/META-INF/
examples/src/documentation/content/xdocs/hivemind-examples/
examples/src/java/com/panorama/startup/
examples/src/java/com/panorama/startup/impl/ examples/src/java...
Author: ahuegen
Date: Sat Aug 6 04:56:53 2005
New Revision: 230544
URL: http://svn.apache.org/viewcvs?rev=230544&view=rev
Log:
Added highlighting for xml and java source in forrest docs.
Added new example for setter based dependency injection.
Added:
jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/setters.xml
jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/
jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/SetterService.java
jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/setters.xml
jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/textResource.properties
jakarta/hivemind/trunk/examples/src/test/org/
jakarta/hivemind/trunk/examples/src/test/org/apache/
jakarta/hivemind/trunk/examples/src/test/org/apache/hivemind/
jakarta/hivemind/trunk/examples/src/test/org/apache/hivemind/examples/
jakarta/hivemind/trunk/examples/src/test/org/apache/hivemind/examples/setters/
jakarta/hivemind/trunk/examples/src/test/org/apache/hivemind/examples/setters/TestSetters.java
jakarta/hivemind/trunk/src/documentation/classes/
jakarta/hivemind/trunk/src/documentation/classes/CatalogManager.properties
jakarta/hivemind/trunk/src/documentation/resources/schema/
jakarta/hivemind/trunk/src/documentation/resources/schema/catalog.xcat
jakarta/hivemind/trunk/src/documentation/resources/schema/dtd/
jakarta/hivemind/trunk/src/documentation/resources/schema/dtd/hm-document.dtd
jakarta/hivemind/trunk/src/documentation/resources/stylesheets/
jakarta/hivemind/trunk/src/documentation/resources/stylesheets/sourceHighlighter.xsl
jakarta/hivemind/trunk/src/documentation/sitemap.xmap
jakarta/hivemind/trunk/tools/
jakarta/hivemind/trunk/tools/forrest/
jakarta/hivemind/trunk/tools/forrest/.classpath
jakarta/hivemind/trunk/tools/forrest/.project
jakarta/hivemind/trunk/tools/forrest/src/
jakarta/hivemind/trunk/tools/forrest/src/org/
jakarta/hivemind/trunk/tools/forrest/src/org/apache/
jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/
jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/tools/
jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/tools/forrest/
jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/tools/forrest/Java2XmlRenderer.java
jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/tools/forrest/SourceHighlighterTransformer.java
jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/tools/forrest/Xml2XmlRenderer.java
Modified:
jakarta/hivemind/trunk/examples/src/descriptor/META-INF/examples.xml
jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/calc.xml
jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/index.xml
jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/panorama.xml
jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/Executable.java
jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/PanoramaMain.java
jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/ExecuteStatic.java
jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/Task.java
jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/TaskExecutor.java
jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/ExampleUtils.java
jakarta/hivemind/trunk/examples/src/test/com/panorama/startup/impl/TestTaskExecutor.java
jakarta/hivemind/trunk/hivebuild/forrestdoc.xml
jakarta/hivemind/trunk/jmx/src/documentation/content/xdocs/hivemind-jmx/measurePerformance.xml
jakarta/hivemind/trunk/src/documentation/content/xdocs/site.xml
jakarta/hivemind/trunk/src/documentation/skinconf.xml
Modified: jakarta/hivemind/trunk/examples/src/descriptor/META-INF/examples.xml
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/descriptor/META-INF/examples.xml?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/examples/src/descriptor/META-INF/examples.xml (original)
+++ jakarta/hivemind/trunk/examples/src/descriptor/META-INF/examples.xml Sat Aug 6 04:56:53 2005
@@ -1,20 +1,4 @@
<?xml version="1.0"?>
-<!--
- Copyright 2004, 2005 The Apache Software Foundation
-
- 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.
--->
-
<module id="examples" version="1.0.0" package="org.apache.hivemind.examples">
<service-point id="Adder">
<create-instance class="impl.AdderImpl"/>
@@ -34,7 +18,6 @@
</service-point>
<service-point id="Calculator">
<invoke-factory>
-
<!-- Most properties are autowired by the BuilderFactory -->
<construct class="impl.CalculatorImpl"/>
</invoke-factory>
Modified: jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/calc.xml
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/calc.xml?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/calc.xml (original)
+++ jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/calc.xml Sat Aug 6 04:56:53 2005
@@ -15,18 +15,19 @@
limitations under the License.
-->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "http://xml.apache.org/forrest/dtd/document-v13.dtd"
+<!DOCTYPE document PUBLIC "-//HM//DTD Documentation V1.0//EN" "hm-document.dtd"
+
[
- <!ENTITY projectroot '../'>
- <!ENTITY % common-links SYSTEM "../links.ent">
- %common-links;
+ <!ENTITY projectroot '../'>
+ <!ENTITY % common-links SYSTEM "../links.ent">
+ %common-links;
]>
<document>
<header>
<title>Calculator</title>
- </header>
-
+ </header>
+
<body>
<p>
@@ -37,6 +38,39 @@
</p>
<p>
+The logging configuration enables logging for the <code>hivemind</code> logger; that and the logging interceptors produces
+quite a bit of output. You can see that a <em>proxy</em> is created for services initially, and that the "core service implementation" for the service
+is created later ... the core service implementation consists of an instance of the service's POJO class, wrapped with any interceptors
+(the logging interceptor, in this case).
+</p>
+
+<p>
+The Registry is built from the following module deployment descriptor:
+</p>
+<xmlsourcefile file="examples/src/descriptor/META-INF/examples.xml" />
+
+<p>
+The service-point for the Calculator service is very simple ... as the comment
+indicates, the BuilderFactory is capable of locating the other services (Adder, Subtracter, etc.) by their
+<em>interface</em>, rather than requiring <code>set-service</code> elements to connect properites
+to services (using the target service's ids). These <em>properties</em> of the Calculator <em>implementation</em>
+are <em>autowired</em> to the matching services. Autowriring works only because just a single service within the
+<em>entire</em> Registry implements the specific interface. You would see errors if no service implemented
+the interface, or if more than one did.
+</p>
+
+<p>
+This module descriptor also demonstrates two new feature of HiveMind 1.1:
+</p>
+
+<ul>
+<li>A package name is provided
+in the &module; element, allowing class names to be abbreviated when referenced elsewhere in the descriptor.</li>
+<li>The interface attribute of &service-point; is omitted, because it defaults to the service point id.</li>
+</ul>
+<section>
+ <title>Running the examples</title>
+<p>
After compiling the examples, you can use Ant to run them:
</p>
@@ -87,65 +121,6 @@
BUILD SUCCESSFUL
Total time: 3 seconds]]></source>
-
-<p>
-The logging configuration enables logging for the <code>hivemind</code> logger; that and the logging interceptors produces
-quite a bit of output. You can see that a <em>proxy</em> is created for services initially, and that the "core service implementation" for the service
-is created later ... the core service implementation consists of an instance of the service's POJO class, wrapped with any interceptors
-(the logging interceptor, in this case).
-</p>
-
-<p>
-The Registry is built from the following module deployment descriptor:
-</p>
-
-<source><![CDATA[
-<?xml version="1.0"?>
-<module id="examples" version="1.0.0" package="org.apache.hivemind.examples">
- <service-point id="Adder">
- <create-instance class="impl.AdderImpl"/>
- <interceptor service-id="hivemind.LoggingInterceptor"/>
- </service-point>
- <service-point id="Subtracter">
- <create-instance class="impl.SubtracterImpl"/>
- <interceptor service-id="hivemind.LoggingInterceptor"/>
- </service-point>
- <service-point id="Multiplier">
- <create-instance class="impl.MultiplierImpl"/>
- <interceptor service-id="hivemind.LoggingInterceptor"/>
- </service-point>
- <service-point id="Divider">
- <create-instance class="impl.DividerImpl"/>
- <interceptor service-id="hivemind.LoggingInterceptor"/>
- </service-point>
- <service-point id="Calculator">
- <invoke-factory>
- <!-- Most properties are autowired by the BuilderFactory -->
- <construct class="impl.CalculatorImpl"/>
- </invoke-factory>
- <interceptor service-id="hivemind.LoggingInterceptor"/>
- </service-point>
-</module>]]></source>
-
-<p>
-The service-point for the Calculator service is very simple ... as the comment
-indicates, the BuilderFactory is capable of locating the other services (Adder, Subtracter, etc.) by their
-<em>interface</em>, rather than requiring <code>set-service</code> elements to connect properites
-to services (using the target service's ids). These <em>properties</em> of the Calculator <em>implementation</em>
-are <em>autowired</em> to the matching services. Autowriring works only because just a single service within the
-<em>entire</em> Registry implements the specific interface. You would see errors if no service implemented
-the interface, or if more than one did.
-</p>
-
-<p>
-This module descriptor also demonstrates two new feature of HiveMind 1.1:
-</p>
-
-<ul>
-<li>A package name is provided
-in the &module; element, allowing class names to be abbreviated when referenced elsewhere in the descriptor.</li>
-<li>The interface attribute of &service-point; is omitted, because it defaults to the service point id.</li>
-</ul>
-
+</section>
</body>
</document>
Modified: jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/index.xml
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/index.xml?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/index.xml (original)
+++ jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/index.xml Sat Aug 6 04:56:53 2005
@@ -24,64 +24,24 @@
<body>
-<p>
-Provided with HiveMind is sample application code, used to demonstrate ideas and features of the framework.
-</p>
-
-<p>
-The example source code is provided with the standard distribution. You can build the code using Ant:
-</p>
-
-<source><![CDATA[bash-2.05b$ ant compile
-Buildfile: build.xml
-
-compile:
-
--display-download-warning:
- [mkdir] Created dir: C:\workspace\jakarta-hivemind\examples\target\module-lib\compile
- [copy] Copying 1 file to C:\workspace\jakarta-hivemind\examples\target\module-lib\compile
-
--display-download-warning:
- [copy] Copying 1 file to C:\workspace\jakarta-hivemind\examples\target\module-lib\compile
-
--display-download-warning:
- [copy] Copying 1 file to C:\workspace\jakarta-hivemind\examples\target\module-lib\compile
-
--display-download-warning:
- [mkdir] Created dir: C:\workspace\jakarta-hivemind\examples\target\module-lib\run
- [copy] Copying 1 file to C:\workspace\jakarta-hivemind\examples\target\module-lib\run
-
--display-download-warning:
- [copy] Copying 1 file to C:\workspace\jakarta-hivemind\examples\target\module-lib\run
-
--display-download-warning:
- [copy] Copying 1 file to C:\workspace\jakarta-hivemind\examples\target\module-lib\run
-
--display-download-warning:
- [mkdir] Created dir: C:\workspace\jakarta-hivemind\examples\target\module-lib\test
- [copy] Copying 1 file to C:\workspace\jakarta-hivemind\examples\target\module-lib\test
- [copy] Copying 1 file to C:\workspace\jakarta-hivemind\examples\target\module-lib\compile
-
--compile-init:
- [mkdir] Created dir: C:\workspace\jakarta-hivemind\examples\target\generated-java
- [mkdir] Created dir: C:\workspace\jakarta-hivemind\examples\target\classes
- [echo]
- [echo]
- [echo] *** Compiling Java sources to target/classes ...
- [echo]
- [javac] Compiling 17 source files to C:\workspace\jakarta-hivemind\examples\target\classes
- [echo]
- [echo]
- [echo] *** Copying resources to target/classes ...
- [echo]
-
-BUILD SUCCESSFUL
-Total time: 4 seconds]]>
-</source>
-
-<warning>
- Details on how to setup your local build environment are forthcoming.
-</warning>
+ <p>
+ Provided with HiveMind is sample application code, used to demonstrate ideas and features of the framework.
+ </p>
+
+ <p>
+ The example source code is provided with the standard distribution. You can build the code using ant.
+ Execute the "compile" target of the build.xml in the examples folder.
+ </p>
+ <section>
+ <title>Index of examples</title>
+ <ul>
+ <li><link href="site:examples.calc">Calculator</link>: Service construction, autowiring</li>
+ <li><link href="site:examples.panorama">Panorama Startup</link>: Schemas, contributions, unit testing</li>
+ <li><link href="site:examples.logging">Logging Interceptor</link>: Interceptors, ServiceInterceptorFactory</li>
+ <li><link href="site:examples.setters">Setters</link>: Setter based dependency injection</li>
+ </ul>
+ </section>
+
</body>
</document>
Modified: jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/panorama.xml
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/panorama.xml?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/panorama.xml (original)
+++ jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/panorama.xml Sat Aug 6 04:56:53 2005
@@ -15,7 +15,7 @@
limitations under the License.
-->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "http://xml.apache.org/forrest/dtd/document-v13.dtd"
+<!DOCTYPE document PUBLIC "-//HM//DTD Documentation V1.0//EN" "hm-document.dtd"
[
<!ENTITY projectroot '../'>
<!ENTITY % common-links SYSTEM "../links.ent">
@@ -25,7 +25,7 @@
<header>
<title>Panorama Startup</title>
- </header>
+ </header>
<body>
<p>
@@ -121,7 +121,7 @@
The schema definition (with desriptions removed, for compactness) follows:
</p>
-<source><![CDATA[
+<xmlsource><![CDATA[
<schema id="Tasks">
<element name="task">
<attribute name="title" required="true"/>
@@ -157,7 +157,7 @@
<read-attribute attribute="method" property="methodName"/>
</rules>
</element>
-</schema>]]></source>
+</schema>]]></xmlsource>
<note>
For more details, see <link href="hivedocs/schema/panorama.startup.Tasks.html">the HiveDoc for
@@ -204,7 +204,7 @@
a Startup service that uses the configuration point.
</p>
-<source><![CDATA[
+<xmlsource><![CDATA[
<configuration-point id="Startup" schema-id="Tasks"/>
<service-point id="Startup" interface="java.lang.Runnable">
@@ -217,7 +217,7 @@
<contribution id="hivemind.Startup">
<startup object="service:Startup"/>
-</contribution>]]></source>
+</contribution>]]></xmlsource>
<p>
@@ -237,18 +237,7 @@
<section>
<title>Executable.java</title>
-<source><![CDATA[package com.panorama.startup;
-
-/**
- * Much like {@link java.lang.Runnable}, but allows the caller
- * to handle any exceptions thrown.
- *
- * @author Howard Lewis Ship
- */
-public interface Executable
-{
- public void execute() throws Exception;
-}]]></source>
+<javasourcefile file="examples/src/java/com/panorama/startup/Executable.java" />
<p>
The Executable interface is implemented by tasks, and by services or other objects that need to
@@ -262,82 +251,7 @@
<section>
<title>Task.java</title>
-<source><![CDATA[package com.panorama.startup.impl;
-
-import org.apache.hivemind.impl.BaseLocatable;
-
-import com.panorama.startup.Executable;
-
-/**
- * An operation that may be executed. A Task exists to wrap
- * an {@link com.panorama.startup.Executable} object with
- * a title and ordering information (id, after, before).
- *
- * @author Howard Lewis Ship
- */
-public class Task extends BaseLocatable implements Executable
-{
- private String _id;
- private String _title;
- private String _after;
- private String _before;
- private Executable _executable;
-
- public String getBefore()
- {
- return _before;
- }
-
- public String getId()
- {
- return _id;
- }
-
- public String getAfter()
- {
- return _after;
- }
-
- public String getTitle()
- {
- return _title;
- }
-
- public void setExecutable(Executable executable)
- {
- _executable = executable;
- }
-
- public void setBefore(String string)
- {
- _before = string;
- }
-
- public void setId(String string)
- {
- _id = string;
- }
-
- public void setAfter(String string)
- {
- _after = string;
- }
-
- public void setTitle(String string)
- {
- _title = string;
- }
-
- /**
- * Delegates to the {@link #setExecutable(Executable) executable} object.
- */
- public void execute() throws Exception
- {
- _executable.execute();
- }
-
-}
-]]></source>
+<javasourcefile file="examples/src/java/com/panorama/startup/impl/Task.java" />
<p>
The Task class is a wrapper around an Executable object; whether that's a service, some arbitrary object,
@@ -350,50 +264,7 @@
<title>ExecuteStatic.java</title>
-<source><![CDATA[package com.panorama.startup.impl;
-
-import java.lang.reflect.Method;
-
-import com.panorama.startup.Executable;
-
-/**
- * Used to access the legacy startup code that is in the form
- * of a public static method (usually <code>init()</code>) on some
- * class.
- *
- * @author Howard Lewis Ship
- */
-public class ExecuteStatic implements Executable
-{
- private String _methodName = "init";
- private Class _targetClass;
-
- public void execute() throws Exception
- {
- Method m = _targetClass.getMethod(_methodName, null);
-
- m.invoke(null, null);
- }
-
- /**
- * Sets the name of the method to invoke; if not set, the default is <code>init</code>.
- * The target class must have a public static method with that name taking no
- * parameters.
- */
- public void setMethodName(String string)
- {
- _methodName = string;
- }
-
- /**
- * Sets the class to invoke the method on.
- */
- public void setTargetClass(Class targetClass)
- {
- _targetClass = targetClass;
- }
-}
-]]></source>
+<javasourcefile file="examples/src/java/com/panorama/startup/impl/ExecuteStatic.java" />
<p>
ExecuteStatic uses Java reflection to invoke a public static method of a particular class.
@@ -404,141 +275,7 @@
<section>
<title>TaskExecutor.java</title>
-<source><![CDATA[package com.panorama.startup.impl;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Messages;
-import org.apache.hivemind.order.Orderer;
-
-/**
- * A service that executes a series of {@link com.panorama.startup.impl.Task}s. Tasks have
- * an ordering based on pre- and post-requisites.
- *
- * @author Howard Lewis Ship
- */
-public class TaskExecutor implements Runnable
-{
- private ErrorLog _errorLog;
- private Log _log;
- private List _tasks;
- private Messages _messages;
-
- /**
- * Orders the {@link #setTasks(List) tasks} into an execution order, and executes
- * each in turn. Logs the elapsed time, number of tasks, and the number of failures (if any).
- */
- public void run()
- {
- long startTime = System.currentTimeMillis();
-
- Orderer orderer = new Orderer(_errorLog, task());
-
- Iterator i = _tasks.iterator();
- while (i.hasNext())
- {
- Task t = (Task) i.next();
-
- orderer.add(t, t.getId(), t.getAfter(), t.getBefore());
- }
-
- List orderedTasks = orderer.getOrderedObjects();
-
- int failures = 0;
-
- i = orderedTasks.iterator();
- while (i.hasNext())
- {
- Task t = (Task) i.next();
-
- if (!execute(t))
- failures++;
- }
-
- long elapsedTime = System.currentTimeMillis() - startTime;
-
- if (failures == 0)
- _log.info(success(orderedTasks.size(), elapsedTime));
- else
- _log.info(failure(failures, orderedTasks.size(), elapsedTime));
- }
-
- /**
- * Execute a single task.
- *
- * @return true on success, false on failure
- */
- private boolean execute(Task t)
- {
- _log.info(executingTask(t));
-
- try
- {
- t.execute();
-
- return true;
- }
- catch (Exception ex)
- {
- _errorLog.error(exceptionInTask(t, ex), t.getLocation(), ex);
-
- return false;
- }
- }
-
- private String task()
- {
- return _messages.getMessage("task");
- }
-
- private String executingTask(Task t)
- {
- return _messages.format("executing-task", t.getTitle());
- }
-
- private String exceptionInTask(Task t, Throwable cause)
- {
- return _messages.format("exception-in-task", t.getTitle(), cause);
- }
-
- private String success(int count, long elapsedTimeMillis)
- {
- return _messages.format("success", new Integer(count), new Long(elapsedTimeMillis));
- }
-
- private String failure(int failureCount, int totalCount, long elapsedTimeMillis)
- {
- return _messages.format(
- "failure",
- new Integer(failureCount),
- new Integer(totalCount),
- new Long(elapsedTimeMillis));
- }
-
- public void setErrorLog(ErrorLog errorLog)
- {
- _errorLog = errorLog;
- }
-
- public void setLog(Log log)
- {
- _log = log;
- }
-
- public void setMessages(Messages messages)
- {
- _messages = messages;
- }
-
- public void setTasks(List list)
- {
- _tasks = list;
- }
-
-}]]></source>
+<javasourcefile file="examples/src/java/com/panorama/startup/impl/TaskExecutor.java" />
<p>
This class is where it all comes together; it is the core service implementation for the
@@ -573,108 +310,7 @@
<title>TestTaskExcecutor.java</title>
</section>
-<source><![CDATA[package com.panorama.startup.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-
-import org.apache.commons.logging.Log;
-import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.hivemind.ErrorLog;
-import org.apache.hivemind.Messages;
-import org.apache.hivemind.Resource;
-import org.apache.hivemind.impl.MessagesImpl;
-import org.apache.hivemind.test.ExceptionAwareArgumentsMatcher;
-import org.apache.hivemind.test.HiveMindTestCase;
-import org.apache.hivemind.test.RegexpArgumentsMatcher;
-import org.apache.hivemind.util.FileResource;
-import org.easymock.MockControl;
-
-import com.panorama.startup.Executable;
-
-/**
- * Tests for the {@link com.panorama.startup.impl.TaskExecutor} service.
- *
- * @author Howard Lewis Ship
- */
-public class TestTaskExecutor extends HiveMindTestCase
-{
- private static List _tokens = new ArrayList();
-
- protected void setUp()
- {
- _tokens.clear();
- }
-
- protected void tearDown()
- {
- _tokens.clear();
- }
-
- public static void addToken(String token)
- {
- _tokens.add(token);
- }
-
- public Messages getMessages()
- {
- . . .
- }
-
- public void testSuccess()
- {
- ExecutableFixture f1 = new ExecutableFixture("f1");
-
- Task t1 = new Task();
-
- t1.setExecutable(f1);
- t1.setId("first");
- t1.setAfter("second");
- t1.setTitle("Fixture #1");
-
- ExecutableFixture f2 = new ExecutableFixture("f2");
-
- Task t2 = new Task();
- t2.setExecutable(f2);
- t2.setId("second");
- t2.setTitle("Fixture #2");
-
- List tasks = new ArrayList();
- tasks.add(t1);
- tasks.add(t2);
-
- MockControl logControl = newControl(Log.class);
- Log log = (Log) logControl.getMock();
-
- TaskExecutor e = new TaskExecutor();
-
- ErrorLog errorLog = (ErrorLog) newMock(ErrorLog.class);
-
- e.setErrorLog(errorLog);
- e.setLog(log);
- e.setMessages(getMessages());
- e.setTasks(tasks);
-
- // Note the ordering; explicitly set, to check that ordering does
- // take place.
- log.info("Executing task Fixture #2.");
- log.info("Executing task Fixture #1.");
- log.info("Executed 2 tasks \\(in \\d+ milliseconds\\)\\.");
- logControl.setMatcher(new RegexpArgumentsMatcher());
-
- replayControls();
-
- e.run();
-
- assertListsEqual(new String[] { "f2", "f1" }, _tokens);
-
- verifyControls();
- }
-
-}
-]]></source>
+<javasourcefile file="examples/src/test/com/panorama/startup/impl/TestTaskExecutor.java" />
<p>
In this listing (which is a paired down version of the real class), you can see how
Added: jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/setters.xml
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/setters.xml?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/setters.xml (added)
+++ jakarta/hivemind/trunk/examples/src/documentation/content/xdocs/hivemind-examples/setters.xml Sat Aug 6 04:56:53 2005
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2004, 2005 The Apache Software Foundation
+
+ 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.
+-->
+
+<!DOCTYPE document PUBLIC "-//HM//DTD Documentation V1.0//EN" "hm-document.dtd"
+
+[
+ <!ENTITY projectroot '../'>
+ <!ENTITY % common-links SYSTEM "../links.ent">
+ %common-links;
+]>
+<document>
+
+ <header>
+ <title>Setter based dependency injection</title>
+ </header>
+
+ <body>
+
+ <p>
+ This example demonstrates the use of setter based injection for the
+ construction of service points. All "set-xxx" elements that are understood
+ by the BuilderFactory are used.
+ </p>
+ <section>
+ <title>settersRegistry.xml</title>
+ <xmlsourcefile file="examples/src/java/org/apache/hivemind/examples/setters/setters.xml" />
+ </section>
+ <section>
+ <title>SetterService.java</title>
+ <javasourcefile file="examples/src/java/org/apache/hivemind/examples/setters/SetterService.java" />
+ </section>
+
+ </body>
+</document>
Modified: jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/Executable.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/Executable.java?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/Executable.java (original)
+++ jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/Executable.java Sat Aug 6 04:56:53 2005
@@ -1,17 +1,3 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// 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 com.panorama.startup;
/**
Modified: jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/PanoramaMain.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/PanoramaMain.java?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/PanoramaMain.java (original)
+++ jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/PanoramaMain.java Sat Aug 6 04:56:53 2005
@@ -1,17 +1,3 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// 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 com.panorama.startup;
import org.apache.hivemind.Registry;
Modified: jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/ExecuteStatic.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/ExecuteStatic.java?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/ExecuteStatic.java (original)
+++ jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/ExecuteStatic.java Sat Aug 6 04:56:53 2005
@@ -1,17 +1,3 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// 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 com.panorama.startup.impl;
import java.lang.reflect.Method;
Modified: jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/Task.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/Task.java?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/Task.java (original)
+++ jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/Task.java Sat Aug 6 04:56:53 2005
@@ -1,17 +1,3 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// 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 com.panorama.startup.impl;
import org.apache.hivemind.impl.BaseLocatable;
Modified: jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/TaskExecutor.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/TaskExecutor.java?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/TaskExecutor.java (original)
+++ jakarta/hivemind/trunk/examples/src/java/com/panorama/startup/impl/TaskExecutor.java Sat Aug 6 04:56:53 2005
@@ -1,17 +1,3 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// 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 com.panorama.startup.impl;
import java.util.Iterator;
Modified: jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/ExampleUtils.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/ExampleUtils.java?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/ExampleUtils.java (original)
+++ jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/ExampleUtils.java Sat Aug 6 04:56:53 2005
@@ -14,14 +14,20 @@
package org.apache.hivemind.examples;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
import org.apache.hivemind.ClassResolver;
+import org.apache.hivemind.ModuleDescriptorProvider;
import org.apache.hivemind.Registry;
+import org.apache.hivemind.Resource;
import org.apache.hivemind.impl.DefaultClassResolver;
import org.apache.hivemind.impl.RegistryBuilder;
import org.apache.hivemind.impl.XmlModuleDescriptorProvider;
import org.apache.hivemind.util.FileResource;
+import org.apache.hivemind.util.URLResource;
/**
* Utilities needed by the examples.
@@ -46,16 +52,67 @@
String path = projectRoot + "/examples/src/descriptor/META-INF/" + fileName;
ClassResolver resolver = new DefaultClassResolver();
- RegistryBuilder builder = new RegistryBuilder();
-
- builder.addModuleDescriptorProvider(new XmlModuleDescriptorProvider(resolver));
// Register the examples.xml file, which (given its non-standard name)
// is not visible.
- builder.addModuleDescriptorProvider(new XmlModuleDescriptorProvider(resolver,
- new FileResource(path)));
+ ModuleDescriptorProvider provider = new XmlModuleDescriptorProvider(resolver,
+ new FileResource(path));
+ return buildRegistry(provider);
+ }
+
+ /**
+ * Convenience method for invoking {@link #buildClasspathRegistry(String[])} with only a single
+ * file.
+ */
+ public static Registry buildClasspathRegistry(String file) throws Exception
+ {
+ return buildClasspathRegistry(new String[] { file });
+ }
+
+ /**
+ * Builds a registry for files in the classpath.
+ */
+ public static Registry buildClasspathRegistry(String[] files) throws Exception
+ {
+ ClassResolver resolver = new DefaultClassResolver();
+
+ List descriptorResources = new ArrayList();
+ for (int i = 0; i < files.length; i++)
+ {
+ Resource resource = getResource(files[i]);
+ descriptorResources.add(resource);
+ }
+
+ ModuleDescriptorProvider provider = new XmlModuleDescriptorProvider(resolver,
+ descriptorResources);
+
+ return buildRegistry(provider);
+ }
+
+ protected static Registry buildRegistry(ModuleDescriptorProvider customProvider)
+ {
+ ClassResolver resolver = new DefaultClassResolver();
+
+ RegistryBuilder builder = new RegistryBuilder();
+
+ builder.addModuleDescriptorProvider(new XmlModuleDescriptorProvider(resolver));
+ builder.addModuleDescriptorProvider(customProvider);
return builder.constructRegistry(Locale.getDefault());
+ }
+
+ /**
+ * Returns the given file as a {@link Resource} from the classpath. Typically, this is to find
+ * files in the same folder as the invoking class.
+ */
+ protected static Resource getResource(String file)
+ {
+ URL url = ExampleUtils.class.getResource(file);
+
+ if (url == null)
+ throw new NullPointerException("No resource named '" + file + "'.");
+
+ return new URLResource(url);
}
}
Added: jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/SetterService.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/SetterService.java?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/SetterService.java (added)
+++ jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/SetterService.java Sat Aug 6 04:56:53 2005
@@ -0,0 +1,94 @@
+package org.apache.hivemind.examples.setters;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.hivemind.Resource;
+import org.apache.hivemind.examples.Adder;
+
+/**
+ * Demonstrates the use of setter based dependency injection using the BuilderFactory.
+ *
+ * @author Achim Huegen
+ */
+public class SetterService implements Runnable
+{
+ private String _stringValue;
+
+ private int _intValue;
+
+ private double _doubleValue;
+
+ private Adder _adderService;
+
+ private List _configuration;
+
+ private Collection _container;
+
+ private Resource _textResource;
+
+ public void setAdderService(Adder adderService)
+ {
+ _adderService = adderService;
+ }
+
+ public void setConfiguration(List configuration)
+ {
+ _configuration = configuration;
+ }
+
+ public void setContainer(Collection container)
+ {
+ _container = container;
+ }
+
+ public void setDoubleValue(double doubleValue)
+ {
+ _doubleValue = doubleValue;
+ }
+
+ public void setIntValue(int intValue)
+ {
+ _intValue = intValue;
+ }
+
+ public void setStringValue(String stringValue)
+ {
+ _stringValue = stringValue;
+ }
+
+ public void setTextResource(Resource textResource)
+ {
+ _textResource = textResource;
+ }
+
+ public void run()
+ {
+ System.out.println("StringValue: " + _stringValue);
+ System.out.println("IntValue: " + _intValue);
+ System.out.println("DoubleValue: " + _doubleValue);
+ System.out.println("AdderService result: " + _adderService.add(10, 20));
+ System.out.println("Configuration size: " + _configuration.size());
+ System.out.println("Container type: " + _container.getClass().getName());
+ Properties properties = loadResource();
+ System.out.println("Text resource content: " + properties.toString());
+ }
+
+ /**
+ * Loads the properties file reference by property textResource
+ */
+ private Properties loadResource()
+ {
+ Properties properties = new Properties();
+ try
+ {
+ properties.load(_textResource.getResourceURL().openStream());
+ }
+ catch (IOException ignore)
+ {
+ }
+ return properties;
+ }
+}
Added: jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/setters.xml
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/setters.xml?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/setters.xml (added)
+++ jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/setters.xml Sat Aug 6 04:56:53 2005
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module id="hivemind.examples.setters" version="1.0.0">
+
+ <service-point id="Service" interface="java.lang.Runnable">
+ <invoke-factory>
+ <construct class="org.apache.hivemind.examples.setters.SetterService">
+ <set property="stringValue" value="Hello world." />
+ <set property="intValue" value="20" />
+ <set property="doubleValue" value="11.23" />
+ <set-object property="container" value="instance:java.util.HashSet" />
+ <set-configuration property="configuration" configuration-id="hivemind.Translators" />
+ <set-resource property="textResource" path="textResource.properties" />
+ <set-service property="adderService" service-id="Adder"/>
+ </construct>
+ </invoke-factory>
+ </service-point>
+
+ <service-point id="Adder" interface="org.apache.hivemind.examples.Adder">
+ <create-instance class="org.apache.hivemind.examples.impl.AdderImpl"/>
+ </service-point>
+
+</module>
\ No newline at end of file
Added: jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/textResource.properties
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/textResource.properties?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/textResource.properties (added)
+++ jakarta/hivemind/trunk/examples/src/java/org/apache/hivemind/examples/setters/textResource.properties Sat Aug 6 04:56:53 2005
@@ -0,0 +1,2 @@
+Key1 = Text1
+Key2 = Text2
\ No newline at end of file
Modified: jakarta/hivemind/trunk/examples/src/test/com/panorama/startup/impl/TestTaskExecutor.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/test/com/panorama/startup/impl/TestTaskExecutor.java?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/examples/src/test/com/panorama/startup/impl/TestTaskExecutor.java (original)
+++ jakarta/hivemind/trunk/examples/src/test/com/panorama/startup/impl/TestTaskExecutor.java Sat Aug 6 04:56:53 2005
@@ -1,17 +1,3 @@
-// Copyright 2004, 2005 The Apache Software Foundation
-//
-// 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 com.panorama.startup.impl;
import java.util.ArrayList;
Added: jakarta/hivemind/trunk/examples/src/test/org/apache/hivemind/examples/setters/TestSetters.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/examples/src/test/org/apache/hivemind/examples/setters/TestSetters.java?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/examples/src/test/org/apache/hivemind/examples/setters/TestSetters.java (added)
+++ jakarta/hivemind/trunk/examples/src/test/org/apache/hivemind/examples/setters/TestSetters.java Sat Aug 6 04:56:53 2005
@@ -0,0 +1,21 @@
+package org.apache.hivemind.examples.setters;
+
+import org.apache.hivemind.Registry;
+import org.apache.hivemind.examples.ExampleUtils;
+
+import junit.framework.TestCase;
+
+/**
+ * Runs the setters example.
+ *
+ * @author Achim Huegen
+ */
+public class TestSetters extends TestCase
+{
+ public void testRun() throws Exception
+ {
+ Registry registry = ExampleUtils.buildClasspathRegistry("/org/apache/hivemind/examples/setters/setters.xml");
+ Runnable setterService = (Runnable) registry.getService("hivemind.examples.setters.Service", Runnable.class);
+ setterService.run();
+ }
+}
Modified: jakarta/hivemind/trunk/hivebuild/forrestdoc.xml
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/hivebuild/forrestdoc.xml?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/hivebuild/forrestdoc.xml (original)
+++ jakarta/hivemind/trunk/hivebuild/forrestdoc.xml Sat Aug 6 04:56:53 2005
@@ -17,33 +17,77 @@
<project name="forrestdoc">
+ <property name="jhighlight.lib" value="${external.lib.dir}/jhighlight-1.0rc.jar" />
+
<fail unless="ant.file.hivebuild" message="Must import hivebuild.xml first."/>
<fail unless="ant.file.dependency" message="Must import dependency.xml first."/>
- <property name="forrest-package-dir" value="${external.package.dir}/apache-forrest-0.6"/>
- <property name="forrest.home" location="${forrest-package-dir}/src/core"/>
+ <!-- compile additional transformers (sourceHighlighter) -->
+ <target name="-compileForrestTransformer" description="">
+ <!-- jhighlight is currently not available on ibiblio but this will change soon ... -->
+ <antcall target="-display-download-warning"/>
+ <grab-file dest="${jhighlight.lib}"
+ src="http://www.yagni.de/download/jhighlight-1.0rc.jar" />
+
+ <mkdir dir="${hivebuild.classes.dir}"/>
+ <property environment="env"/>
+ <javac srcdir="tools/forrest/src"
+ destdir="${hivebuild.classes.dir}" debug="on" verbose="on" debuglevel="lines,vars,source">
+ <classpath>
+ <pathelement location="${jhighlight.lib}"/>
+ <fileset dir="${env.FORREST_HOME}" id="id">
+ <include name="**/*.jar"/>
+ </fileset>
+ </classpath>
+ </javac>
+ <!-- Create a jar in forrest optional lib folder -->
+ <jar destfile="${env.FORREST_HOME}/lib/optional/hivemindTransformers.jar"
+ update="false">
+ <fileset dir="${hivebuild.classes.dir}">
+ <include name="**/*.class"/>
+ </fileset>
+ </jar>
+ <copy todir="${env.FORREST_HOME}/lib/optional" file="${jhighlight.lib}">
+ </copy>
+ </target>
+
+ <!-- macro for launching forrest (0.7) -->
+ <macrodef name="forrest">
+ <attribute name="target" default="run" description="target for forrest to execute"/>
+ <sequential>
+ <property environment="env"/>
+ <property name="forrest.home" location="${env.FORREST_HOME}" />
+ <property name="forrest.ant.home" location="${forrest.home}/tools/ant" />
+ <java classname="org.apache.tools.ant.Main" fork="true" failonerror="true" maxmemory="128M">
+ <classpath>
+ <pathelement location="${jhighlight.lib}"/>
+ <fileset dir="${forrest.ant.home}/lib">
+ <include name="*.jar" />
+ </fileset>
+ <pathelement path="${java.home}/../lib/tools.jar" />
+ </classpath>
+ <sysproperty key="ant.home" value="${forrest.ant.home}" />
+ <sysproperty key="forrest.home" value="${forrest.home}" />
+ <sysproperty key="basedir" value="${basedir}" />
+ <sysproperty key="java.endorsed.dirs" value="${forrest.home}/lib/endorsed" />
+ <arg line="-f ${forrest.home}/main/forrest.build.xml @{target}" />
+ </java>
+ </sequential>
+ </macrodef>
<target name="run-forrest" description="Runs Forrest to generate final site documentation.">
<announce message="Invoking Forrest ..."/>
- <property environment="env"/>
-
- <!-- The extension is a problem; this will work for Windows and Cygwin but not pure Windows -->
-
- <exec dir="${basedir}" executable="${env.FORREST_HOME}/bin/forrest.bat"/>
+ <antcall target="-compileForrestTransformer" />
+
+ <forrest target="site" />
</target>
<target name="live-forrest" description="Runs Forrest interactively.">
<announce message="Invoking Forrest. Open a browser to http://localhost:8888 ..."/>
- <property environment="env"/>
-
- <!-- The extension is a problem; this will work for Windows and Cygwin but not pure Windows -->
-
- <exec dir="${basedir}" executable="${env.FORREST_HOME}/bin/forrest.bat">
- <arg line="run"/>
- </exec>
+ <forrest target="run" />
</target>
<macrodef name="add-report-to-menu">
Modified: jakarta/hivemind/trunk/jmx/src/documentation/content/xdocs/hivemind-jmx/measurePerformance.xml
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/jmx/src/documentation/content/xdocs/hivemind-jmx/measurePerformance.xml?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/jmx/src/documentation/content/xdocs/hivemind-jmx/measurePerformance.xml (original)
+++ jakarta/hivemind/trunk/jmx/src/documentation/content/xdocs/hivemind-jmx/measurePerformance.xml Sat Aug 6 04:56:53 2005
@@ -15,12 +15,12 @@
limitations under the License.
-->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN"
- "http://xml.apache.org/forrest/dtd/document-v13.dtd" [
+<!DOCTYPE document PUBLIC "-//HM//DTD Documentation V1.0//EN" "hm-document.dtd"
+ [
<!ENTITY projectroot '../'>
<!ENTITY % common-links SYSTEM "../links.ent">
%common-links;
- ]>
+ ]>
<document>
<header>
<title>Measure service performance</title>
@@ -32,7 +32,8 @@
execution duration.<br/>
Add the Interceptor to your service and choose which methods
are to be intercepted by inclusion and exclusion:</p>
- <source><![CDATA[
+
+ <xmlsource><![CDATA[
<service-point id="Calculator"
interface="org.apache.hivemind.management.Calculator">
<invoke-factory>
@@ -43,7 +44,7 @@
<include method="add"/>
<include method="subtract"/>
</interceptor>
-</service-point>]]></source>
+</service-point>]]></xmlsource>
<p>
The statistics are displayed by a MBean named like your service,
with an additional name part "decorator=PerformanceCollector":<br/><br/>
Added: jakarta/hivemind/trunk/src/documentation/classes/CatalogManager.properties
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/src/documentation/classes/CatalogManager.properties?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/src/documentation/classes/CatalogManager.properties (added)
+++ jakarta/hivemind/trunk/src/documentation/classes/CatalogManager.properties Sat Aug 6 04:56:53 2005
@@ -0,0 +1,30 @@
+# verbosity:
+# The level of messages for status/debug (messages go to standard output).
+# The setting here is for your own local catalogs.
+# The verbosity of Forrest's core catalogs is controlled via
+# main/webapp/WEB-INF/cocoon.xconf
+#
+# The following messages are provided ...
+# 0 = none
+# 1 = ? (... not sure yet)
+# 2 = 1+, Loading catalog, Resolved public, Resolved system
+# 3 = 2+, Catalog does not exist, resolvePublic, resolveSystem
+# 10 = 3+, List all catalog entries when loading a catalog
+# (Cocoon also logs the "Resolved public" messages.)
+verbosity=1
+
+# catalogs ... list of additional catalogs to load
+# (Note that Apache Forrest will automatically load its own default catalog
+# from main/webapp/resources/schema/catalog.xcat)
+# Use either full pathnames or relative pathnames.
+# pathname separator is always semi-colon (;) regardless of operating system
+# directory separator is always slash (/) regardless of operating system
+catalogs=../resources/schema/catalog.xcat
+
+# relative-catalogs
+# If false, relative catalog URIs are made absolute with respect to the
+# base URI of the CatalogManager.properties file. This setting only
+# applies to catalog URIs obtained from the catalogs property in the
+# CatalogManager.properties file
+# Example: relative-catalogs=[yes|no]
+relative-catalogs=no
Modified: jakarta/hivemind/trunk/src/documentation/content/xdocs/site.xml
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/src/documentation/content/xdocs/site.xml?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/src/documentation/content/xdocs/site.xml (original)
+++ jakarta/hivemind/trunk/src/documentation/content/xdocs/site.xml Sat Aug 6 04:56:53 2005
@@ -177,6 +177,7 @@
<examples.calc label="Calculator" href="calc.html"/>
<examples.panorama label="Panorama Startup" href="panorama.html"/>
<examples.logging label="Logging Interceptor" href="logging.html"/>
+ <examples.setters href="setters.html"/>
<reports label="Reports">
&hivemind-examples-report-menu.ent;
Added: jakarta/hivemind/trunk/src/documentation/resources/schema/catalog.xcat
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/src/documentation/resources/schema/catalog.xcat?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/src/documentation/resources/schema/catalog.xcat (added)
+++ jakarta/hivemind/trunk/src/documentation/resources/schema/catalog.xcat Sat Aug 6 04:56:53 2005
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!-- Defines the new document type that allows source highlighting sections -->
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+ <public publicId="-//HM//DTD Documentation V1.0//EN"
+ uri="dtd/hm-document.dtd"/>
+</catalog>
Added: jakarta/hivemind/trunk/src/documentation/resources/schema/dtd/hm-document.dtd
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/src/documentation/resources/schema/dtd/hm-document.dtd?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/src/documentation/resources/schema/dtd/hm-document.dtd (added)
+++ jakarta/hivemind/trunk/src/documentation/resources/schema/dtd/hm-document.dtd Sat Aug 6 04:56:53 2005
@@ -0,0 +1,46 @@
+<!-- =============================================================== -->
+<!-- Include the Common ISO Character Entity Sets -->
+<!-- =============================================================== -->
+
+<!ENTITY % common-charents PUBLIC
+"-//APACHE//ENTITIES Common Character Entity Sets V1.0//EN"
+"common-charents-v10.mod">
+%common-charents;
+
+<!-- =============================================================== -->
+<!-- Document -->
+<!-- =============================================================== -->
+
+<!ENTITY % document PUBLIC "-//APACHE//ENTITIES Documentation V1.3//EN"
+"document-v13.mod">
+
+<!-- Override this entity so that 'javasource' is allowed below 'section' -->
+<!ENTITY % local.sections "|javasource|javasourcefile|xmlsource|xmlsourcefile">
+
+%document;
+
+<!ELEMENT javasource (%content.mix;)*>
+<!ATTLIST javasource
+ %common.att;
+ %xmlspace.att;
+>
+
+<!ELEMENT javasourcefile EMPTY>
+<!ATTLIST javasourcefile
+ file CDATA #REQUIRED
+>
+
+<!ELEMENT xmlsource (%content.mix;)*>
+<!ATTLIST xmlsource
+ %common.att;
+ %xmlspace.att;
+>
+
+<!ELEMENT xmlsourcefile EMPTY>
+<!ATTLIST xmlsourcefile
+ file CDATA #REQUIRED
+>
+
+<!-- =============================================================== -->
+<!-- End of DTD -->
+<!-- =============================================================== -->
Added: jakarta/hivemind/trunk/src/documentation/resources/stylesheets/sourceHighlighter.xsl
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/src/documentation/resources/stylesheets/sourceHighlighter.xsl?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/src/documentation/resources/stylesheets/sourceHighlighter.xsl (added)
+++ jakarta/hivemind/trunk/src/documentation/resources/stylesheets/sourceHighlighter.xsl Sat Aug 6 04:56:53 2005
@@ -0,0 +1,109 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2004, 2005 The Apache Software Foundation
+
+ 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.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <!-- Template that transforms source code that was already processed
+ by the SourceHighlighter transformer to xhtml markup -->
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <!-- the obligatory copy-everything -->
+
+ <xsl:template match="node() | @*">
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <!-- java code -->
+ <xsl:template match="javasource-processed">
+ <pre class="java-code">
+ <xsl:apply-templates mode="javasource"/>
+ </pre>
+ </xsl:template>
+
+ <xsl:template match="java-plain" mode="javasource">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="java-keyword" mode="javasource">
+ <span class="java-keyword"><xsl:apply-templates/></span>
+ </xsl:template>
+
+ <xsl:template match="java-type" mode="javasource">
+ <span class="java-type"><xsl:apply-templates/></span>
+ </xsl:template>
+
+ <xsl:template match="java-operator" mode="javasource">
+ <span class="java-operator"><xsl:apply-templates/></span>
+ </xsl:template>
+
+ <xsl:template match="java-separator" mode="javasource">
+ <span class="java-separator"><xsl:apply-templates/></span>
+ </xsl:template>
+
+ <xsl:template match="java-literal" mode="javasource">
+ <span class="java-literal"><xsl:apply-templates/></span>
+ </xsl:template>
+
+ <xsl:template match="java-comment" mode="javasource">
+ <span class="java-comment"><xsl:apply-templates/></span>
+ </xsl:template>
+
+ <xsl:template match="java-javadoc_comment" mode="javasource">
+ <span class="java-javadoc-comment"><xsl:apply-templates/></span>
+ </xsl:template>
+
+ <xsl:template match="java-javadoc_tag" mode="javasource">
+ <span class="java-javadoc-tag"><xsl:apply-templates/></span>
+ </xsl:template>
+
+ <!-- xml code -->
+ <xsl:template match="xmlsource-processed">
+ <pre class="xml-code">
+ <xsl:apply-templates mode="xmlsource"/>
+ </pre>
+ </xsl:template>
+
+ <xsl:template match="xml-plain" mode="xmlsource">
+ <span class="xml-plain"><xsl:apply-templates/></span>
+ </xsl:template>
+
+ <xsl:template match="xml-tag" mode="xmlsource">
+ <span class="xml-tag"><xsl:apply-templates/></span>
+ </xsl:template>
+
+ <xsl:template match="xml-attribute" mode="xmlsource">
+ <span class="xml-attribute"><xsl:apply-templates/></span>
+ </xsl:template>
+
+ <xsl:template match="xml-attribute-value" mode="xmlsource">
+ <span class="xml-attribute-value"><xsl:apply-templates/></span>
+ </xsl:template>
+
+ <xsl:template match="xml-cdata" mode="xmlsource">
+ <span class="xml-cdata"><xsl:apply-templates/></span>
+ </xsl:template>
+
+ <xsl:template match="xml-comment" mode="xmlsource">
+ <span class="xml-comment"><xsl:apply-templates/></span>
+ </xsl:template>
+
+</xsl:stylesheet>
Added: jakarta/hivemind/trunk/src/documentation/sitemap.xmap
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/src/documentation/sitemap.xmap?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/src/documentation/sitemap.xmap (added)
+++ jakarta/hivemind/trunk/src/documentation/sitemap.xmap Sat Aug 6 04:56:53 2005
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
+ <!-- custom sitemap needed for support of javasource elements -->
+ <map:components>
+ <map:actions>
+ <map:action logger="sitemap.action.sourcetype" name="sourcetype" src="org.apache.forrest.sourcetype.SourceTypeAction">
+ <sourcetype name="hm-document">
+ <document-declaration public-id="-//HM//DTD Documentation V1.0//EN" />
+ </sourcetype>
+ </map:action>
+ </map:actions>
+
+ <map:selectors default="parameter">
+ <map:selector logger="sitemap.selector.parameter" name="parameter" src="org.apache.cocoon.selection.ParameterSelector" />
+ </map:selectors>
+
+ <map:transformers >
+ <map:transformer name="sourceHighlighter"
+ src="org.apache.hivemind.tools.forrest.SourceHighlighterTransformer"
+ logger="SourceHighlighterTransformer" >
+
+ </map:transformer>
+ </map:transformers>
+
+ </map:components>
+
+ <map:resources>
+ <map:resource name="transform-to-document">
+ <map:act type="sourcetype" src="{src}">
+ <map:select type="parameter">
+ <map:parameter name="parameter-selector-test" value="{sourcetype}" />
+
+ <!-- add transformer to documents that use the hm-document dtd -->
+ <map:when test="hm-document">
+ <map:generate src="{project:content.xdocs}{../../1}.xml" />
+ <map:transform type="sourceHighlighter" >
+ <map:parameter name="sourcepath" value="{project:content}../../../" />
+ </map:transform>
+ <map:transform src="{project:resources.stylesheets}/sourceHighlighter.xsl"/>
+ <map:serialize type="xml-document"/>
+ </map:when>
+ </map:select>
+ </map:act>
+ </map:resource>
+ </map:resources>
+
+ <map:pipelines>
+ <map:pipeline>
+ <!-- intercept the standard processing -->
+ <map:match pattern="**.xml">
+ <map:call resource="transform-to-document">
+ <map:parameter name="src" value="{project:content.xdocs}{1}.xml" />
+ </map:call>
+ </map:match>
+ </map:pipeline>
+ </map:pipelines>
+</map:sitemap>
+
+
Modified: jakarta/hivemind/trunk/src/documentation/skinconf.xml
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/src/documentation/skinconf.xml?rev=230544&r1=230543&r2=230544&view=diff
==============================================================================
--- jakarta/hivemind/trunk/src/documentation/skinconf.xml (original)
+++ jakarta/hivemind/trunk/src/documentation/skinconf.xml Sat Aug 6 04:56:53 2005
@@ -151,6 +151,74 @@
padding: 2px;
background-color: #ffffcc;
}
+
+ /* Styles for syntax highlighting of java code */
+
+ .java-code {
+ border: solid thin;
+ padding: 2px;
+ padding-left: 4px;
+ background-color: #ffffcc;
+ }
+
+ .java-keyword {
+ color: #7F0055;
+ font-weight: bold;
+ }
+
+ .java-comment {
+ color: #3F7F5F;
+ font-style: italic;
+ }
+
+ .java-javadoc-comment {
+ color: #5078A0;
+ font-weight: normal;
+ }
+
+ .java-javadoc-tag {
+ color: #5078A0;
+ font-weight: bold;
+ }
+
+ .java-literal {
+ color: #2A00FF;
+ }
+
+ .java-type,.java-operator,.java-separator {
+ }
+
+ /* Styles for syntax highlighting of xml code */
+
+ .xml-code {
+ border: solid thin;
+ padding: 2px;
+ padding-left: 4px;
+ background-color: #ffffcc;
+ }
+
+ .xml-plain {
+ color: #3F7F5F;
+ }
+
+ .xml-tag {
+ color: #000080;
+ font-weight: bold;
+ }
+
+ .xml-attribute {
+ color: #7F0055;
+ font-weight: bold;
+ }
+
+ .xml-attribute-value, .xml-cdata {
+ }
+
+ .xml-comment {
+ color: #3F7F5F;
+ font-style: italic;
+ }
+
</extra-css>
<colors>
Added: jakarta/hivemind/trunk/tools/forrest/.classpath
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/tools/forrest/.classpath?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/tools/forrest/.classpath (added)
+++ jakarta/hivemind/trunk/tools/forrest/.classpath Sat Aug 6 04:56:53 2005
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="lib" path="lib/jhighlight-1.0rc.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="FORREST_HOME/lib/core/avalon-framework-api-4.1.5.jar"/>
+ <classpathentry kind="var" path="FORREST_HOME/lib/core/cocoon-2.2.0-dev-r125082.jar"/>
+ <classpathentry kind="var" path="FORREST_HOME/lib/core/commons-logging-1.0.4.jar"/>
+ <classpathentry kind="var" path="FORREST_HOME/lib/core/excalibur-pool-api-2.0.0.jar"/>
+ <classpathentry kind="var" path="FORREST_HOME/lib/core/excalibur-xmlutil-1.0.jar"/>
+ <classpathentry kind="output" path="target/eclipse-classes"/>
+</classpath>
Added: jakarta/hivemind/trunk/tools/forrest/.project
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/tools/forrest/.project?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/tools/forrest/.project (added)
+++ jakarta/hivemind/trunk/tools/forrest/.project Sat Aug 6 04:56:53 2005
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>SourceHighlighter</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/tools/forrest/Java2XmlRenderer.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/tools/forrest/Java2XmlRenderer.java?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/tools/forrest/Java2XmlRenderer.java (added)
+++ jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/tools/forrest/Java2XmlRenderer.java Sat Aug 6 04:56:53 2005
@@ -0,0 +1,141 @@
+// Copyright 2004, 2005 The Apache Software Foundation
+//
+// 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 org.apache.hivemind.tools.forrest;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+
+import org.apache.cocoon.transformation.AbstractSAXTransformer;
+import com.uwyn.jhighlight.highlighter.JavaHighlighter;
+import com.uwyn.jhighlight.tools.StringUtils;
+
+/**
+ * Renders java code as xml markup that can be transformed to html.
+ * Parses the code using the JHighlight library and outputs
+ * the code embedded in special xml-elements that mark the type
+ * of the tokens. For example a java keyword is embedded
+ * in a <java-keyword> element.
+ *
+ * @author Achim Huegen
+ */
+public class Java2XmlRenderer
+{
+
+ /**
+ * Processes java code. Outputs the xml code by creating sax events in the sax transformer.
+ *
+ * @param in
+ * @param sax
+ * @param spacesPerTab
+ * @throws Exception
+ */
+ public void process(InputStream in, AbstractSAXTransformer sax, int spacesPerTab) throws Exception
+ {
+ JavaHighlighter highlighter = new JavaHighlighter();
+
+ JavaHighlighter.ASSERT_IS_KEYWORD = true;
+ Reader isr = new InputStreamReader(in);
+
+ BufferedReader r = new BufferedReader(isr);
+ String line;
+ String token;
+ int length;
+ int style;
+ String css_class;
+ String previous_class = null;
+
+ int previous_style = 0;
+
+ // Read source line by line and apply styles
+ while ((line = r.readLine()) != null)
+ {
+ line += "\n";
+ line = StringUtils.convertTabsToSpaces(line, spacesPerTab);
+
+ Reader lineReader = new StringReader(line);
+
+ highlighter.setReader(lineReader);
+
+ int index = 0;
+ while (index < line.length())
+ {
+ style = highlighter.getNextToken();
+ length = highlighter.getTokenLength();
+ token = line.substring(index, index + length);
+ if (style != previous_style)
+ {
+ css_class = getCssClass(style);
+ if (css_class != null)
+ {
+ if (previous_class != null)
+ {
+ sax.sendEndElementEvent(previous_class);
+ }
+ sax.sendStartElementEvent(css_class);
+ previous_class = css_class;
+ previous_style = style;
+ }
+ }
+
+ sax.sendTextEvent(token);
+ index += length;
+
+ }
+
+ }
+ if (previous_class != null)
+ {
+ sax.sendEndElementEvent(previous_class);
+ }
+ }
+
+ /**
+ * Map the jhighlighter styles to css styles
+ * @param style
+ * @return css style
+ */
+ protected String getCssClass(int style)
+ {
+ switch (style)
+ {
+ case JavaHighlighter.PLAIN_STYLE:
+ return "java-plain";
+ case JavaHighlighter.KEYWORD_STYLE:
+ return "java-keyword";
+ case JavaHighlighter.TYPE_STYLE:
+ return "java-type";
+ case JavaHighlighter.OPERATOR_STYLE:
+ return "java-operator";
+ // ignore separators, special formatting not needed
+ // case JavaHighlighter.SEPARATOR_STYLE:
+ // return "java-separator";
+ case JavaHighlighter.LITERAL_STYLE:
+ return "java-literal";
+ case JavaHighlighter.JAVA_COMMENT_STYLE:
+ return "java-comment";
+ case JavaHighlighter.JAVADOC_COMMENT_STYLE:
+ return "java-javadoc_comment";
+ case JavaHighlighter.JAVADOC_TAG_STYLE:
+ return "java-javadoc_tag";
+ }
+
+ return null;
+
+ }
+
+}
\ No newline at end of file
Added: jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/tools/forrest/SourceHighlighterTransformer.java
URL: http://svn.apache.org/viewcvs/jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/tools/forrest/SourceHighlighterTransformer.java?rev=230544&view=auto
==============================================================================
--- jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/tools/forrest/SourceHighlighterTransformer.java (added)
+++ jakarta/hivemind/trunk/tools/forrest/src/org/apache/hivemind/tools/forrest/SourceHighlighterTransformer.java Sat Aug 6 04:56:53 2005
@@ -0,0 +1,245 @@
+// Copyright 2004, 2005 The Apache Software Foundation
+//
+// 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 org.apache.hivemind.tools.forrest;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
+import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
+import org.apache.cocoon.environment.SourceResolver;
+import org.apache.cocoon.sitemap.PatternException;
+import org.apache.cocoon.transformation.AbstractSAXTransformer;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+/**
+ * Cocoon transformer that highlights java and xml source code.
+ * Supports the javasource, xmlsource, javasourcefiles and
+ * xmlsourcefile attributes.
+ * javasource/xmlsource: the content embedded in the tag is highlighted
+ * javasourcefile/xmlsourcefile: the file referenced by the file attribute
+ * is loaded, hightlighted and inserted at the tag position.
+ *
+ * The source file names must be defined relative. Multiple root
+ * folders can be defined in sitemap.xmap by the parameter <code>sourcepath</code>.
+ * Multiple paths must be separated by semicolons. A file is searched
+ * for in all root paths in the order of definition.
+ *
+ * @author Achim Huegen
+ */
+public class SourceHighlighterTransformer extends AbstractSAXTransformer
+{
+ private static final String JAVASOURCE_TAG_NAME = "javasource";
+ private static final String JAVASOURCEFILE_TAG_NAME = "javasourcefile";
+ private static final String XMLSOURCE_TAG_NAME = "xmlsource";
+ private static final String XMLSOURCEFILE_TAG_NAME = "xmlsourcefile";
+
+ private List _sourcepaths = new ArrayList();
+ private int javaSourceSpacesPerTab = 2;
+ private int xmlSourceSpacesPerTab = 2;
+
+ static
+ {
+ System.out.println("SourceHighlighterTransformer activated");
+ }
+
+ public SourceHighlighterTransformer()
+ {
+ }
+
+ public void endElement(String uri, String name, String raw) throws SAXException
+ {
+ try
+ {
+ if (name.equals(JAVASOURCE_TAG_NAME))
+ {
+ String srcStr = this.endTextRecording();
+ Java2XmlRenderer render = new Java2XmlRenderer();
+ // Highlight code that is embedded in tag
+ sendStartElementEvent("javasource-processed");
+ InputStream codeStream = new ByteArrayInputStream(srcStr.getBytes());
+ render.process(codeStream, this, javaSourceSpacesPerTab);
+ sendEndElementEvent("javasource-processed");
+ }
+ else if (name.equals(JAVASOURCEFILE_TAG_NAME)) {
+ // don't call super
+ }
+ else if (name.equals(XMLSOURCE_TAG_NAME))
+ {
+ String srcStr = this.endTextRecording();
+ Xml2XmlRenderer render = new Xml2XmlRenderer();
+ // Highlight code that is embedded in tag
+ sendStartElementEvent("xmlsource-processed");
+ InputStream codeStream = new ByteArrayInputStream(srcStr.getBytes());
+ render.process(codeStream, this, xmlSourceSpacesPerTab);
+ sendEndElementEvent("xmlsource-processed");
+ }
+ else if (name.equals(XMLSOURCEFILE_TAG_NAME)) {
+ // don't call super
+ }
+ else {
+ super.endElement(uri, name, raw);
+ }
+ }
+ catch (RuntimeException e)
+ {
+ // Forrest/Cocoon error handling needs some support
+ e.printStackTrace();
+ throw e;
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace();
+ throw new SAXException(e.getMessage());
+ }
+
+ }
+
+ public void startElement(String uri, String name, String raw, Attributes attr) throws SAXException
+ {
+ try
+ {
+ if (name.equals(JAVASOURCE_TAG_NAME))
+ {
+ this.startTextRecording();
+ }
+ else if (name.equals(JAVASOURCEFILE_TAG_NAME)) {
+ System.out.println("Highlighting file started");
+ // Read java source file and highlight content
+ String fileName = attr.getValue("file");
+ InputStream codeStream = readSourceFile(fileName);
+ if (codeStream != null) {
+ Java2XmlRenderer render = new Java2XmlRenderer();
+ sendStartElementEvent("javasource-processed");
+ render.process(codeStream, this, javaSourceSpacesPerTab);
+ sendEndElementEvent("javasource-processed");
+ }
+ System.out.println("Highlighting file finished");
+ }
+ else if (name.equals(XMLSOURCE_TAG_NAME))
+ {
+ this.startTextRecording();
+ }
+ else if (name.equals(XMLSOURCEFILE_TAG_NAME)) {
+ System.out.println("Highlighting file started");
+ // Read xml file and highlight content
+ String fileName = attr.getValue("file");
+ InputStream codeStream = readSourceFile(fileName);
+ if (codeStream != null) {
+ Xml2XmlRenderer render = new Xml2XmlRenderer();
+ sendStartElementEvent("xmlsource-processed");
+ render.process(codeStream, this, xmlSourceSpacesPerTab);
+ sendEndElementEvent("xmlsource-processed");
+ }
+ System.out.println("Highlighting file finished");
+ }
+ else {
+ super.startElement(uri, name, raw, attr);
+ }
+ }
+ catch (FileNotFoundException e) {
+ throw new SAXException(e.getMessage());
+ }
+ catch (RuntimeException e)
+ {
+ // Forrest/Cocoon error handling needs some support
+ e.printStackTrace();
+ throw e;
+ }
+ catch (Throwable e)
+ {
+ e.printStackTrace();
+ throw new SAXException(e.getMessage());
+ }
+ }
+
+ /**
+ * Reads a source file
+ * @param fileName path relative to a root folder
+ * @return
+ * @throws FileNotFoundException
+ */
+ protected InputStream readSourceFile(String fileName) throws FileNotFoundException
+ {
+ for (Iterator iter = _sourcepaths.iterator(); iter.hasNext();)
+ {
+ String sourcepath = (String) iter.next();
+ String absFileName = sourcepath + File.separator + fileName;
+ File file = new File(absFileName);
+ if (file.exists()) {
+ InputStream result = new FileInputStream(absFileName);
+ return result;
+ }
+ }
+ throw new FileNotFoundException("Source File " + fileName + " couldn't be found.");
+ }
+
+ /**
+ * @see org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver, java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters)
+ */
+ public void setup(SourceResolver resolver, Map objectModel, String source, Parameters parameters) throws ProcessingException, SAXException, IOException
+ {
+ super.setup(resolver, objectModel, source, parameters);
+ try {
+ String sourcePaths = parameters.getParameter("sourcepath", "");
+ StringTokenizer tokenizer = new StringTokenizer(sourcePaths, ";");
+ while (tokenizer.hasMoreElements())
+ {
+ String path = (String) tokenizer.nextElement();
+ path = makeAbsolutePath(path);
+ _sourcepaths.add(path);
+ }
+ } catch (Throwable e) {
+ e.printStackTrace();
+ throw new ProcessingException(e.getMessage());
+ }
+ }
+
+ /**
+ * Resolves variables in path and makes it absolute
+ * @param path
+ * @return
+ * @throws ProcessingException
+ * @throws IOException
+ */
+ private String makeAbsolutePath(String path) throws ProcessingException, IOException
+ {
+ String resolvedPath = null;
+ try
+ {
+ VariableResolver resolver = VariableResolverFactory.getResolver(path, manager);
+ resolvedPath = resolver.resolve(null, objectModel);
+ }
+ catch (PatternException e)
+ {
+ throw new ProcessingException(e);
+ }
+ File pathFile = new File(resolvedPath);
+ return pathFile.getCanonicalPath();
+ }
+
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: hivemind-cvs-unsubscribe@jakarta.apache.org
For additional commands, e-mail: hivemind-cvs-help@jakarta.apache.org