hlship 2004/12/30 10:55:33
Modified: framework/src/test/hivemind/test/parse
TestDescriptorParser.java
framework/src/test/org/apache/hivemind/impl
TestRegistryInfrastructureConstructor.java
src/documentation/content/xdocs site.xml descriptor.xml
framework/src/java/org/apache/hivemind/parse
ImplementationDescriptor.java DescriptorParser.java
DescriptorParser.properties
ContributionDescriptor.java
framework/src/java/org/apache/hivemind/impl
RegistryInfrastructureConstructor.java
library/src/descriptor/META-INF hivemodule.xml
. build.xml status.xml
framework/src/java/org/apache/hivemind/ant
RegistrySerializer.java
hivebuild/hivedoc-xsl hivemind.xsl
Added: framework/src/test/hivemind/test/parse ImplementationIf.xml
ContributionIf.xml
src/documentation/content/xdocs conditional.xml
Log:
Finish implemenation of conditional contributions.
Revision Changes Path
1.29 +24 -0
jakarta-hivemind/framework/src/test/hivemind/test/parse/TestDescriptorParser.java
Index: TestDescriptorParser.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/test/hivemind/test/parse/TestDescriptorParser.java,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- TestDescriptorParser.java 20 Dec 2004 15:25:23 -0000 1.28
+++ TestDescriptorParser.java 30 Dec 2004 18:55:32 -0000 1.29
@@ -560,4 +560,28 @@
assertEquals("hivemind.test.parse", s.getModuleId());
assertEquals(Visibility.PRIVATE, s.getVisibility());
}
+
+ /** @since 1.1 */
+
+ public void testContributionIf() throws Exception
+ {
+ ModuleDescriptor md = parse("ContributionIf.xml");
+
+ List l = md.getContributions();
+ ContributionDescriptor cd = (ContributionDescriptor) l.get(0);
+
+ assertEquals("class foo.bar.Blat", cd.getConditionalExpression());
+ }
+
+ /** @since 1.1 */
+
+ public void testImplementationIf() throws Exception
+ {
+ ModuleDescriptor md = parse("ImplementationIf.xml");
+
+ List l = md.getImplementations();
+ ImplementationDescriptor id = (ImplementationDescriptor) l.get(0);
+
+ assertEquals("class foo.bar.Blat", id.getConditionalExpression());
+ }
}
1.1
jakarta-hivemind/framework/src/test/hivemind/test/parse/ImplementationIf.xml
Index: ImplementationIf.xml
===================================================================
<?xml version="1.0"?>
<!--
Copyright 2004 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="hivemind.test.parse" version="1.0.0">
<implementation service-id="foo.bar.Baz" if="class foo.bar.Blat">
<interceptor service-id="hivemind.LoggingInterceptor"/>
</implementation>
</module>
1.1
jakarta-hivemind/framework/src/test/hivemind/test/parse/ContributionIf.xml
Index: ContributionIf.xml
===================================================================
<?xml version="1.0"?>
<!--
Copyright 2004 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="hivemind.test.parse" version="1.0.0">
<contribution configuration-id="foo.bar.Baz" if="class foo.bar.Blat">
<zip zap="zoom"/>
</contribution>
</module>
1.3 +145 -0
jakarta-hivemind/framework/src/test/org/apache/hivemind/impl/TestRegistryInfrastructureConstructor.java
Index: TestRegistryInfrastructureConstructor.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/test/org/apache/hivemind/impl/TestRegistryInfrastructureConstructor.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TestRegistryInfrastructureConstructor.java 20 Dec 2004 15:25:21
-0000 1.2
+++ TestRegistryInfrastructureConstructor.java 30 Dec 2004 18:55:32
-0000 1.3
@@ -14,18 +14,24 @@
package org.apache.hivemind.impl;
+import java.util.List;
import java.util.Locale;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.hivemind.Element;
import org.apache.hivemind.ErrorHandler;
import org.apache.hivemind.Location;
import org.apache.hivemind.internal.ConfigurationPoint;
import org.apache.hivemind.internal.RegistryInfrastructure;
import org.apache.hivemind.parse.ConfigurationPointDescriptor;
+import org.apache.hivemind.parse.ContributionDescriptor;
import org.apache.hivemind.parse.ModuleDescriptor;
import org.apache.hivemind.schema.Schema;
+import org.apache.hivemind.test.AggregateArgumentsMatcher;
+import org.apache.hivemind.test.ArgumentMatcher;
import org.apache.hivemind.test.HiveMindTestCase;
+import org.apache.hivemind.test.TypeMatcher;
import org.easymock.MockControl;
/**
@@ -157,6 +163,145 @@
ric.addModuleDescriptor(zipZoop);
ric.constructRegistryInfrastructure(Locale.getDefault());
+
+ verifyControls();
+ }
+
+ private Element newElement(String name)
+ {
+ ElementImpl e = new ElementImpl();
+
+ e.setElementName(name);
+
+ return e;
+ }
+
+ public void testConditionalExpressionTrue()
+ {
+ MockControl ehControl = newControl(ErrorHandler.class);
+ ErrorHandler eh = (ErrorHandler) ehControl.getMock();
+
+ Log log =
LogFactory.getLog(TestRegistryInfrastructureConstructor.class);
+
+ replayControls();
+
+ ModuleDescriptor md = new ModuleDescriptor(new
DefaultClassResolver(), eh);
+ md.setModuleId("zip.zoop");
+
+ ConfigurationPointDescriptor cpd = new
ConfigurationPointDescriptor();
+
+ cpd.setId("Fred");
+
+ md.addConfigurationPoint(cpd);
+
+ ContributionDescriptor cd = new ContributionDescriptor();
+ cd.setConfigurationId("Fred");
+ cd.setConditionalExpression("class " + Location.class.getName());
+
+ cd.addElement(newElement("foo"));
+
+ md.addContribution(cd);
+
+ RegistryInfrastructureConstructor ric = new
RegistryInfrastructureConstructor(eh, log, null);
+
+ ric.addModuleDescriptor(md);
+
+ RegistryInfrastructure ri =
ric.constructRegistryInfrastructure(Locale.getDefault());
+
+ List l = ri.getConfiguration("zip.zoop.Fred", null);
+
+ Element e = (Element) l.get(0);
+
+ assertEquals("foo", e.getElementName());
+
+ verifyControls();
+ }
+
+ public void testConditionalExpressionFalse()
+ {
+ MockControl ehControl = newControl(ErrorHandler.class);
+ ErrorHandler eh = (ErrorHandler) ehControl.getMock();
+
+ Log log =
LogFactory.getLog(TestRegistryInfrastructureConstructor.class);
+
+ replayControls();
+
+ ModuleDescriptor md = new ModuleDescriptor(new
DefaultClassResolver(), eh);
+ md.setModuleId("zip.zoop");
+
+ ConfigurationPointDescriptor cpd = new
ConfigurationPointDescriptor();
+
+ cpd.setId("Fred");
+
+ md.addConfigurationPoint(cpd);
+
+ ContributionDescriptor cd = new ContributionDescriptor();
+ cd.setConfigurationId("Fred");
+ cd.setConditionalExpression("class foo.bar.Baz");
+
+ cd.addElement(newElement("bar"));
+
+ md.addContribution(cd);
+
+ RegistryInfrastructureConstructor ric = new
RegistryInfrastructureConstructor(eh, log, null);
+
+ ric.addModuleDescriptor(md);
+
+ RegistryInfrastructure ri =
ric.constructRegistryInfrastructure(Locale.getDefault());
+
+ List l = ri.getConfiguration("zip.zoop.Fred", null);
+
+ assertTrue(l.isEmpty());
+
+ verifyControls();
+ }
+
+ public void testConditionalExpressionError()
+ {
+ MockControl ehControl = newControl(ErrorHandler.class);
+ ErrorHandler eh = (ErrorHandler) ehControl.getMock();
+
+ Log log =
LogFactory.getLog(TestRegistryInfrastructureConstructor.class);
+
+ Location location = fabricateLocation(1);
+
+ eh.error(
+ log,
+ "Unexpected token <AND> in expression 'and class foo'.",
+ location,
+ new RuntimeException());
+ ehControl.setMatcher(new AggregateArgumentsMatcher(new
ArgumentMatcher[]
+ { null, null, null, new TypeMatcher() }));
+
+ replayControls();
+
+ ModuleDescriptor md = new ModuleDescriptor(new
DefaultClassResolver(), eh);
+ md.setModuleId("zip.zoop");
+
+ ConfigurationPointDescriptor cpd = new
ConfigurationPointDescriptor();
+
+ cpd.setId("Fred");
+
+ md.addConfigurationPoint(cpd);
+
+ ContributionDescriptor cd = new ContributionDescriptor();
+ cd.setConfigurationId("Fred");
+ cd.setConditionalExpression("and class foo");
+ cd.setLocation(location);
+
+ cd.addElement(newElement("bar"));
+
+ md.addContribution(cd);
+
+ RegistryInfrastructureConstructor ric = new
RegistryInfrastructureConstructor(eh, log, null);
+
+ ric.addModuleDescriptor(md);
+
+ RegistryInfrastructure ri =
ric.constructRegistryInfrastructure(Locale.getDefault());
+
+ List l = ri.getConfiguration("zip.zoop.Fred", null);
+
+ assertTrue(l.isEmpty());
verifyControls();
}
1.35 +1 -0 jakarta-hivemind/src/documentation/content/xdocs/site.xml
Index: site.xml
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/src/documentation/content/xdocs/site.xml,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- site.xml 19 Nov 2004 20:28:49 -0000 1.34
+++ site.xml 30 Dec 2004 18:55:32 -0000 1.35
@@ -34,6 +34,7 @@
<descriptor label="Module Descriptor"
href="descriptor.html"/>
<rules label="Contribution Processing Rules"
href="rules.html"/>
<dependencies label="Dependencies" href="dependencies.html"/>
+ <conditional label="Conditional Contributions"
href="conditional.html"/>
</reference>
<project-info label="Project Information">
1.17 +13 -0
jakarta-hivemind/src/documentation/content/xdocs/descriptor.xml
Index: descriptor.xml
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/src/documentation/content/xdocs/descriptor.xml,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- descriptor.xml 20 Dec 2004 15:25:23 -0000 1.16
+++ descriptor.xml 30 Dec 2004 18:55:32 -0000 1.17
@@ -17,6 +17,7 @@
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN"
"http://xml.apache.org/forrest/dtd/document-v13.dtd" [
<!ENTITY % common-links SYSTEM "links.ent">
+ <!ENTITY conditional-expression '<link href="site:conditional">conditional
expression</link>'>
%common-links;
]>
<document>
@@ -150,6 +151,12 @@
the fully qualified id of an
&_configuration-point; in another
module.</td>
</tr>
+ <tr>
+ <td>if</td>
+ <td>string</td>
+ <td>no</td>
+ <td>A &conditional-expression; controlling whether the
contribution is used or ignored.</td>
+ </tr>
</table>
<p>The content of the &_contribution; consists of
elements. These elements
are converted, in accordance with the
configuration point's &schema;,
@@ -313,6 +320,12 @@
<td>The id of the service to extend;
this may be a fully qualified id,
or the local id of a service
within the same module.</td>
</tr>
+ <tr>
+ <td>if</td>
+ <td>string</td>
+ <td>no</td>
+ <td>A &conditional-expression; controlling whether the
contribution is used or ignored.</td>
+ </tr>
</table>
<p>Contains: &create-instance;, &interceptor;,
&invoke-factory; </p>
</section>
1.1
jakarta-hivemind/src/documentation/content/xdocs/conditional.xml
Index: conditional.xml
===================================================================
<?xml version="1.0"?>
<!--
Copyright 2004 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 "-//APACHE//DTD Documentation V1.3//EN"
"http://xml.apache.org/forrest/dtd/document-v13.dtd" [
<!ENTITY % common-links SYSTEM "links.ent">
%common-links;
]>
<document>
<header>
<title>Conditional Contributions</title>
</header>
<body>
<p>
In certain cases, it is desirable to <em>conditionally contribute</em>
to a configuration point, or to a
service point. One way of doing this is to factor the contributions
into their own module, and control whether that
module (and its descriptor) is on the classpath at runtime. This can be
cumbersome, however.
</p>
<p>
A second method is to mark certain contributions (&contribution; and
&implementation; elements) as conditional, using the
<code>if</code> attribute.
</p>
<p>
When the <code>if</code> attribute is non-null, it is evaluated as a
<em>conditional expression</em>. If the expression
evaluates to true, then the contribution is used. If false, the the
contribution is silently discarded. The expression
evaluation occurs while the Registry is being constructed.
</p>
<p>
This mechanism allows you to test for certain conditions, such as the
presense of a
particular class or a particular JVM system property. These basic
conditions can be combined with
and, or and not operators, and parenthesis to control order of
evaluation.
</p>
<p>
For example, the expression <code>class
org.springframework.beans.factory.BeanFactory</code> would evaluate to true if
the BeanFactory
class was on the classpath.
</p>
<p>
The format for conditional expressions is:
</p>
<source>
expression := <em>term</em> <code>or</code> <em>expression</em>
:= <em>term</em> <code>and</code> <em>expression</em>
:= <em>term</em>
term := ( <em>expression</em> )
:= <code>not</code> ( <em>expression</em> )
:= <code>property</code> <em>symbol</em>
:= <code>class</code> <em>symbol</em>
</source>
<p>
The keywords ("and", "or", "not", "property", "class") are <em>not</em> case
sensitive.
</p>
<p>
Symbols are Java identifiers ... they are either JVM system properties or
fully qualified Java class names.
</p>
<p>
Whitespace is ignored.
</p>
<p>
The <code>property</code> keyword treats its symbol as a JVM system property,
as with <code>Boolean.getBoolean()</code>.
</p>
<p>
The <code>class</code> keyword treats its symbol as a Java class name,
evaluating to true if such a class exists.
</p>
</body>
</document>
1.5 +17 -0
jakarta-hivemind/framework/src/java/org/apache/hivemind/parse/ImplementationDescriptor.java
Index: ImplementationDescriptor.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/parse/ImplementationDescriptor.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ImplementationDescriptor.java 19 Dec 2004 15:43:07 -0000 1.4
+++ ImplementationDescriptor.java 30 Dec 2004 18:55:32 -0000 1.5
@@ -25,6 +25,10 @@
{
private String _serviceId;
+ /** @since 1.1 */
+
+ private String _conditionalExpression;
+
public String getServiceId()
{
return _serviceId;
@@ -38,5 +42,18 @@
protected void extendDescription(ToStringBuilder builder)
{
builder.append("serviceId", _serviceId);
+ builder.append("conditionalExpression", _conditionalExpression);
+ }
+
+ /** @since 1.1 */
+ public String getConditionalExpression()
+ {
+ return _conditionalExpression;
+ }
+
+ /** @since 1.1 */
+ public void setConditionalExpression(String conditionalExpression)
+ {
+ _conditionalExpression = conditionalExpression;
}
}
1.45 +2 -0
jakarta-hivemind/framework/src/java/org/apache/hivemind/parse/DescriptorParser.java
Index: DescriptorParser.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/parse/DescriptorParser.java,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- DescriptorParser.java 28 Dec 2004 22:43:15 -0000 1.44
+++ DescriptorParser.java 30 Dec 2004 18:55:32 -0000 1.45
@@ -763,6 +763,7 @@
checkAttributes();
cd.setConfigurationId(getAttribute("configuration-id"));
+ cd.setConditionalExpression(getAttribute("if"));
md.addContribution(cd);
}
@@ -907,6 +908,7 @@
checkAttributes();
id.setServiceId(getAttribute("service-id"));
+ id.setConditionalExpression(getAttribute("if"));
md.addImplementation(id);
}
1.16 +2 -0
jakarta-hivemind/framework/src/java/org/apache/hivemind/parse/DescriptorParser.properties
Index: DescriptorParser.properties
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/parse/DescriptorParser.properties,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- DescriptorParser.properties 20 Dec 2004 15:25:23 -0000 1.15
+++ DescriptorParser.properties 30 Dec 2004 18:55:32 -0000 1.16
@@ -22,6 +22,7 @@
required.module.version=true
required.contribution.configuration-id=true
+required.contribution.if=false
required.configuration-point.id=true
required.configuration-point.occurs=false
@@ -35,6 +36,7 @@
required.service-point.visibility=false
required.implementation.service-id=true
+required.implementation.if=false
required.create-instance.class=true
required.create-instance.model=false
1.5 +19 -4
jakarta-hivemind/framework/src/java/org/apache/hivemind/parse/ContributionDescriptor.java
Index: ContributionDescriptor.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/parse/ContributionDescriptor.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ContributionDescriptor.java 14 Oct 2004 14:31:31 -0000 1.4
+++ ContributionDescriptor.java 30 Dec 2004 18:55:32 -0000 1.5
@@ -23,7 +23,7 @@
/**
* Descriptor for <contribution> element.
- *
+ *
* @author Howard Lewis Ship
*/
public final class ContributionDescriptor extends BaseAnnotationHolder
@@ -32,9 +32,12 @@
private List _elements;
+ /** @since 1.1 */
+ private String _conditionalExpression;
+
/**
- * Returns the extension id, which may be a local id (simple name)
- * or an extended id (including a module id prefix).
+ * Returns the extension id, which may be a local id (simple name) or an
extended id (including
+ * a module id prefix).
*/
public String getConfigurationId()
{
@@ -50,6 +53,7 @@
{
ToStringBuilder builder = new ToStringBuilder(this);
builder.append("configurationId", _configurationId);
+ builder.append("conditionalExpression", _conditionalExpression);
return builder.toString();
}
@@ -70,4 +74,15 @@
return _elements;
}
-}
+ /** @since 1.1 */
+ public String getConditionalExpression()
+ {
+ return _conditionalExpression;
+ }
+
+ /** @since 1.1 */
+ public void setConditionalExpression(String conditionalExpression)
+ {
+ _conditionalExpression = conditionalExpression;
+ }
+}
\ No newline at end of file
1.8 +50 -4
jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/RegistryInfrastructureConstructor.java
Index: RegistryInfrastructureConstructor.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/impl/RegistryInfrastructureConstructor.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- RegistryInfrastructureConstructor.java 19 Dec 2004 15:43:07 -0000
1.7
+++ RegistryInfrastructureConstructor.java 30 Dec 2004 18:55:32 -0000
1.8
@@ -26,6 +26,9 @@
import org.apache.hivemind.Location;
import org.apache.hivemind.Occurances;
import org.apache.hivemind.ShutdownCoordinator;
+import org.apache.hivemind.conditional.EvaluationContextImpl;
+import org.apache.hivemind.conditional.Node;
+import org.apache.hivemind.conditional.Parser;
import org.apache.hivemind.internal.ConfigurationPoint;
import org.apache.hivemind.internal.Module;
import org.apache.hivemind.internal.RegistryInfrastructure;
@@ -59,6 +62,10 @@
private RegistryAssembly _assembly;
+ /** @since 1.1 */
+
+ private Parser _conditionalExpressionParser;
+
public RegistryInfrastructureConstructor(ErrorHandler errorHandler, Log
log,
RegistryAssembly assembly)
{
@@ -397,6 +404,10 @@
{
ImplementationDescriptor impl = (ImplementationDescriptor)
implementations.get(i);
+ if (!includeContribution(impl.getConditionalExpression(),
sourceModule, impl
+ .getLocation()))
+ continue;
+
String pointId = impl.getServiceId();
String qualifiedId = IdUtils.qualify(moduleId, pointId);
@@ -417,6 +428,9 @@
{
ContributionDescriptor cd = (ContributionDescriptor)
contributions.get(i);
+ if (!includeContribution(cd.getConditionalExpression(),
sourceModule, cd.getLocation()))
+ continue;
+
String pointId = cd.getConfigurationId();
String qualifiedId = IdUtils.qualify(moduleId, pointId);
@@ -542,6 +556,7 @@
for (int i = 0; i < count; i++)
{
InterceptorDescriptor ind = (InterceptorDescriptor)
interceptors.get(i);
+
addInterceptor(sourceModule, pointId, ind);
}
}
@@ -577,8 +592,6 @@
return;
}
-
-
if (point.getServiceConstructor(isDefault) != null)
{
_errorHandler.error(
@@ -589,8 +602,7 @@
return;
}
-
-
+
point.setServiceModel(builder.getServiceModel());
point.setServiceConstructor(builder.createConstructor(point,
sourceModule), isDefault);
}
@@ -678,6 +690,40 @@
expected), point.getLocation(), null);
}
+ }
+
+ /**
+ * Filters a contribution based on an expression. Returns true if the
expression is null, or
+ * evaluates to true. Returns false if the expression if non-null and
evaluates to false, or an
+ * exception occurs evaluating the expression.
+ *
+ * @param expression
+ * to parse and evaluate
+ * @param location
+ * of the expression (used if an error is reported)
+ * @since 1.1
+ */
+
+ private boolean includeContribution(String expression, Module module,
Location location)
+ {
+ if (expression == null)
+ return true;
+
+ if (_conditionalExpressionParser == null)
+ _conditionalExpressionParser = new Parser();
+
+ try
+ {
+ Node node = _conditionalExpressionParser.parse(expression);
+
+ return node.evaluate(new
EvaluationContextImpl(module.getClassResolver()));
+ }
+ catch (RuntimeException ex)
+ {
+ _errorHandler.error(_log, ex.getMessage(), location, ex);
+
+ return false;
+ }
}
private static int size(Collection c)
1.18 +1 -1
jakarta-hivemind/library/src/descriptor/META-INF/hivemodule.xml
Index: hivemodule.xml
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/library/src/descriptor/META-INF/hivemodule.xml,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- hivemodule.xml 19 Dec 2004 15:41:45 -0000 1.17
+++ hivemodule.xml 30 Dec 2004 18:55:32 -0000 1.18
@@ -15,7 +15,7 @@
limitations under the License.
-->
-<module id="hivemind.lib" version="1.0.0">
+<module id="hivemind.lib" version="1.1.0">
Standard library for HiveMind, providing commonly used services.
1.12 +1 -3 jakarta-hivemind/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-hivemind/build.xml,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- build.xml 28 Oct 2004 22:09:53 -0000 1.11
+++ build.xml 30 Dec 2004 18:55:32 -0000 1.12
@@ -32,9 +32,7 @@
descriptors. -->
<path id="hivedoc.classpath">
- <fileset dir="${target.dir}" includes="*.jar"/>
- <!-- Pick up some hivemind dependencies -->
- <fileset dir="${external.lib.dir}" includes="**/*.jar"/>
+ <fileset dir="${external.lib.dir}" includes="*.jar"/>
</path>
<import file="${hivebuild.dir}/hivedoc-report.xml"/>
1.88 +4 -1 jakarta-hivemind/status.xml
Index: status.xml
===================================================================
RCS file: /home/cvs/jakarta-hivemind/status.xml,v
retrieving revision 1.87
retrieving revision 1.88
diff -u -r1.87 -r1.88
--- status.xml 22 Dec 2004 00:11:02 -0000 1.87
+++ status.xml 30 Dec 2004 18:55:32 -0000 1.88
@@ -124,8 +124,11 @@
<action type="update" dev="HLS">
Move ContextResource from Tapestry to HiveMind.
</action>
- <action type="change" dev="HLS">
+ <action type="update" dev="HLS">
Change HiveMindFilter load WEB-INF/hivemodule.xml if present.
+ </action>
+ <action type="add" dev="HLS">
+ Add support for conditional contributions.
</action>
</release>
1.8 +6 -0
jakarta-hivemind/framework/src/java/org/apache/hivemind/ant/RegistrySerializer.java
Index: RegistrySerializer.java
===================================================================
RCS file:
/home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/ant/RegistrySerializer.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- RegistrySerializer.java 28 Dec 2004 22:43:15 -0000 1.7
+++ RegistrySerializer.java 30 Dec 2004 18:55:33 -0000 1.8
@@ -381,6 +381,9 @@
contribution.setAttribute("configuration-id",
qualify(cd.getConfigurationId()));
+ if (cd.getConditionalExpression() != null)
+ contribution.setAttribute("if", cd.getConditionalExpression());
+
contribution.setAttribute("uid", Integer.toString(_uid++));
List parameters = cd.getElements();
@@ -407,6 +410,9 @@
Element implementation = _document.createElement("implementation");
implementation.setAttribute("service-id",
qualify(id.getServiceId()));
+
+ if (id.getConditionalExpression() != null)
+ implementation.setAttribute("if", id.getConditionalExpression());
implementation.setAttribute("uid", Integer.toString(_uid++));
1.6 +12 -0 jakarta-hivemind/hivebuild/hivedoc-xsl/hivemind.xsl
Index: hivemind.xsl
===================================================================
RCS file: /home/cvs/jakarta-hivemind/hivebuild/hivedoc-xsl/hivemind.xsl,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- hivemind.xsl 27 Sep 2004 14:37:35 -0000 1.5
+++ hivemind.xsl 30 Dec 2004 18:55:33 -0000 1.6
@@ -260,6 +260,9 @@
<xsl:sort select="../@id"/>
<h3>Contributions from module <a href="../module/{../@[EMAIL
PROTECTED]"> <xsl:value-of select="../@id"/>
</a> </h3>
+ <xsl:if test="@if">
+ <p><em>If: <xsl:value-of select="@if"/></em></p>
+ </xsl:if>
<ul>
<xsl:apply-templates select="*" mode="raw"/>
</ul>
@@ -392,6 +395,9 @@
<xsl:template match="contribution">
<h2> <xsl:attribute name="id"><xsl:value-of
select="@uid"/></xsl:attribute> Contribution to <xsl:apply-templates
select="/registry/module/[EMAIL PROTECTED] =
current()/@configuration-id]" mode="link"/> </h2>
+ <xsl:if test="@if">
+ <p><em>If: <xsl:value-of select="@if"/></em></p>
+ </xsl:if>
<ul>
<xsl:apply-templates mode="raw"/>
</ul>
@@ -460,6 +466,9 @@
<xsl:sort select="../@id"/>
<h3>Implementations from module <a href="../module/{../@[EMAIL
PROTECTED]"> <xsl:value-of select="../@id"/>
</a> </h3>
+ <xsl:if test="@if">
+ <p><em>If: <xsl:value-of select="@if"/></em></p>
+ </xsl:if>
<ul>
<xsl:apply-templates/>
</ul>
@@ -477,6 +486,9 @@
<xsl:template match="implementation">
<h2> <xsl:attribute name="id"><xsl:value-of
select="@uid"/></xsl:attribute> Service Implementation
<xsl:apply-templates select="/registry/module/[EMAIL PROTECTED] =
current()/@service-id]" mode="link"/> </h2>
+ <xsl:if test="@if">
+ <p><em>If: <xsl:value-of select="@if"/></em></p>
+ </xsl:if>
<ul>
<xsl:apply-templates/>
</ul>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]