Return-Path: Delivered-To: apmail-jakarta-hivemind-cvs-archive@www.apache.org Received: (qmail 33010 invoked from network); 22 Jun 2006 14:43:07 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 22 Jun 2006 14:43:07 -0000 Received: (qmail 44219 invoked by uid 500); 22 Jun 2006 14:43:05 -0000 Delivered-To: apmail-jakarta-hivemind-cvs-archive@jakarta.apache.org Received: (qmail 44047 invoked by uid 500); 22 Jun 2006 14:43:04 -0000 Mailing-List: contact hivemind-cvs-help@jakarta.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: hivemind-dev@jakarta.apache.org List-Id: Delivered-To: mailing list hivemind-cvs@jakarta.apache.org Received: (qmail 44011 invoked by uid 99); 22 Jun 2006 14:43:04 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 22 Jun 2006 07:43:04 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 22 Jun 2006 07:43:03 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 40C781A983A; Thu, 22 Jun 2006 07:42:43 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r416385 - in /jakarta/hivemind/trunk: ./ framework/src/java/org/apache/hivemind/impl/ framework/src/java/org/apache/hivemind/parse/ framework/src/test/hivemind/test/ framework/src/test/hivemind/test/parse/ src/documentation/content/xdocs/ Date: Thu, 22 Jun 2006 14:42:40 -0000 To: hivemind-cvs@jakarta.apache.org From: knut@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20060622144243.40C781A983A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: knut Date: Thu Jun 22 07:42:39 2006 New Revision: 416385 URL: http://svn.apache.org/viewvc?rev=416385&view=rev Log: adds "if" attribute to (see HIVEMIND-85) Added: jakarta/hivemind/trunk/framework/src/test/hivemind/test/ConditionalIncludedSubmodule.xml jakarta/hivemind/trunk/framework/src/test/hivemind/test/ConditionalNotIncludedSubmodule.xml jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/IncludeSubModule.xml jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/SubModule.xml jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/SubModuleIf.xml Modified: jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/XmlModuleDescriptorProvider.java jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/DescriptorParser.java jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/DescriptorParser.properties jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/SubModuleDescriptor.java jakarta/hivemind/trunk/framework/src/test/hivemind/test/TestSubModule.java jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/TestDescriptorParser.java jakarta/hivemind/trunk/src/documentation/content/xdocs/conditional.xml jakarta/hivemind/trunk/src/documentation/content/xdocs/descriptor.xml jakarta/hivemind/trunk/status.xml Modified: jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/XmlModuleDescriptorProvider.java URL: http://svn.apache.org/viewvc/jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/XmlModuleDescriptorProvider.java?rev=416385&r1=416384&r2=416385&view=diff ============================================================================== --- jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/XmlModuleDescriptorProvider.java (original) +++ jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/impl/XmlModuleDescriptorProvider.java Thu Jun 22 07:42:39 2006 @@ -27,8 +27,12 @@ import org.apache.hivemind.ClassResolver; import org.apache.hivemind.ErrorHandler; import org.apache.hivemind.HiveMind; +import org.apache.hivemind.Location; import org.apache.hivemind.ModuleDescriptorProvider; import org.apache.hivemind.Resource; +import org.apache.hivemind.conditional.EvaluationContextImpl; +import org.apache.hivemind.conditional.Node; +import org.apache.hivemind.conditional.Parser; import org.apache.hivemind.parse.ModuleDescriptor; import org.apache.hivemind.parse.SubModuleDescriptor; import org.apache.hivemind.parse.XmlResourceProcessor; @@ -73,6 +77,8 @@ */ private XmlResourceProcessor _processor; + private Parser _conditionalExpressionParser; + /** * Convenience constructor. Equivalent to using * {@link #XmlModuleDescriptorProvider(ClassResolver, String)}with {@link #HIVE_MODULE_XML} as @@ -206,7 +212,46 @@ continue; } - processResource(smd.getDescriptor()); + // Only include the sub-module if the expression evaluates to true + if (includeSubModule(smd.getConditionalExpression(), moduleDescriptor + .getClassResolver(), smd.getLocation())) + processResource(smd.getDescriptor()); + } + } + + /** + * Filters a sub-module based on a condition 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 + * The expression to evaluate + * @param classResolver + * The ClassResolver to use for class lookups + * @param location + * The location from where the expression was loaded + * @since 1.1 + */ + private boolean includeSubModule(String expression, ClassResolver classResolver, + Location location) + { + if (expression == null) + return true; + + if (_conditionalExpressionParser == null) + _conditionalExpressionParser = new Parser(); + + try + { + Node node = _conditionalExpressionParser.parse(expression); + + return node.evaluate(new EvaluationContextImpl(classResolver)); + } + catch (RuntimeException ex) + { + _errorHandler.error(LOG, ex.getMessage(), location, ex); + + return false; } } Modified: jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/DescriptorParser.java URL: http://svn.apache.org/viewvc/jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/DescriptorParser.java?rev=416385&r1=416384&r2=416385&view=diff ============================================================================== --- jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/DescriptorParser.java (original) +++ jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/DescriptorParser.java Thu Jun 22 07:42:39 2006 @@ -1171,6 +1171,7 @@ Resource descriptor = getResource().getRelativeResource(getAttribute("descriptor")); smd.setDescriptor(descriptor); + smd.setConditionalExpression(getAttribute("if")); md.addSubModule(smd); } Modified: jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/DescriptorParser.properties URL: http://svn.apache.org/viewvc/jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/DescriptorParser.properties?rev=416385&r1=416384&r2=416385&view=diff ============================================================================== --- jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/DescriptorParser.properties (original) +++ jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/DescriptorParser.properties Thu Jun 22 07:42:39 2006 @@ -82,6 +82,7 @@ required.map.property=true required.sub-module.descriptor=true +required.sub-module.if=false required.set-property.property=true required.set-property.value=true Modified: jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/SubModuleDescriptor.java URL: http://svn.apache.org/viewvc/jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/SubModuleDescriptor.java?rev=416385&r1=416384&r2=416385&view=diff ============================================================================== --- jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/SubModuleDescriptor.java (original) +++ jakarta/hivemind/trunk/framework/src/java/org/apache/hivemind/parse/SubModuleDescriptor.java Thu Jun 22 07:42:39 2006 @@ -20,7 +20,7 @@ /** * Descriptor for <sub-module> element. - * + * * @author Knut Wannheden */ public final class SubModuleDescriptor extends BaseLocatable @@ -28,6 +28,8 @@ private Resource _descriptor; + private String _conditionalExpression; + public Resource getDescriptor() { return _descriptor; @@ -36,6 +38,22 @@ public void setDescriptor(Resource descriptor) { _descriptor = descriptor; + } + + /** + * @since 1.1.2 + */ + public String getConditionalExpression() + { + return _conditionalExpression; + } + + /** + * @since 1.1.2 + */ + public void setConditionalExpression(String conditionalExpression) + { + _conditionalExpression = conditionalExpression; } public String toString() Added: jakarta/hivemind/trunk/framework/src/test/hivemind/test/ConditionalIncludedSubmodule.xml URL: http://svn.apache.org/viewvc/jakarta/hivemind/trunk/framework/src/test/hivemind/test/ConditionalIncludedSubmodule.xml?rev=416385&view=auto ============================================================================== --- jakarta/hivemind/trunk/framework/src/test/hivemind/test/ConditionalIncludedSubmodule.xml (added) +++ jakarta/hivemind/trunk/framework/src/test/hivemind/test/ConditionalIncludedSubmodule.xml Thu Jun 22 07:42:39 2006 @@ -0,0 +1,24 @@ + + + + + + + + \ No newline at end of file Added: jakarta/hivemind/trunk/framework/src/test/hivemind/test/ConditionalNotIncludedSubmodule.xml URL: http://svn.apache.org/viewvc/jakarta/hivemind/trunk/framework/src/test/hivemind/test/ConditionalNotIncludedSubmodule.xml?rev=416385&view=auto ============================================================================== --- jakarta/hivemind/trunk/framework/src/test/hivemind/test/ConditionalNotIncludedSubmodule.xml (added) +++ jakarta/hivemind/trunk/framework/src/test/hivemind/test/ConditionalNotIncludedSubmodule.xml Thu Jun 22 07:42:39 2006 @@ -0,0 +1,24 @@ + + + + + + + + \ No newline at end of file Modified: jakarta/hivemind/trunk/framework/src/test/hivemind/test/TestSubModule.java URL: http://svn.apache.org/viewvc/jakarta/hivemind/trunk/framework/src/test/hivemind/test/TestSubModule.java?rev=416385&r1=416384&r2=416385&view=diff ============================================================================== --- jakarta/hivemind/trunk/framework/src/test/hivemind/test/TestSubModule.java (original) +++ jakarta/hivemind/trunk/framework/src/test/hivemind/test/TestSubModule.java Thu Jun 22 07:42:39 2006 @@ -16,6 +16,7 @@ import hivemind.test.services.SimpleService; +import org.apache.hivemind.ApplicationRuntimeException; import org.apache.hivemind.Registry; /** @@ -44,6 +45,31 @@ buildFrameworkRegistry("MissingSubModule.xml"); assertLoggedMessagePattern("Sub-module .*?/DoesNotExist\\.xml does not exist\\."); + } + + public void testConditionalSubModuleIncluded() throws Exception + { + Registry r = buildFrameworkRegistry("ConditionalIncludedSubmodule.xml"); + SimpleService s = (SimpleService) r.getService( + "hivemind.test.outer.Simple", + SimpleService.class); + assertEquals(11, s.add(4, 7)); + } + + public void testConditionalSubModuleNotIncluded() throws Exception + { + Registry r = buildFrameworkRegistry("ConditionalNotIncludedSubmodule.xml"); + + try + { + r.getService("hivemind.test.outer.Simple", SimpleService.class); + + fail("Service point hivemind.test.outer.Simple should not exist."); + } + catch (ApplicationRuntimeException e) + { + assertEquals("Service point hivemind.test.outer.Simple does not exist.", e.getMessage()); + } } } Added: jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/IncludeSubModule.xml URL: http://svn.apache.org/viewvc/jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/IncludeSubModule.xml?rev=416385&view=auto ============================================================================== --- jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/IncludeSubModule.xml (added) +++ jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/IncludeSubModule.xml Thu Jun 22 07:42:39 2006 @@ -0,0 +1,22 @@ + + + + + + + + Added: jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/SubModule.xml URL: http://svn.apache.org/viewvc/jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/SubModule.xml?rev=416385&view=auto ============================================================================== --- jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/SubModule.xml (added) +++ jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/SubModule.xml Thu Jun 22 07:42:39 2006 @@ -0,0 +1,22 @@ + + + + + + + + Added: jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/SubModuleIf.xml URL: http://svn.apache.org/viewvc/jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/SubModuleIf.xml?rev=416385&view=auto ============================================================================== --- jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/SubModuleIf.xml (added) +++ jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/SubModuleIf.xml Thu Jun 22 07:42:39 2006 @@ -0,0 +1,22 @@ + + + + + + + + Modified: jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/TestDescriptorParser.java URL: http://svn.apache.org/viewvc/jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/TestDescriptorParser.java?rev=416385&r1=416384&r2=416385&view=diff ============================================================================== --- jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/TestDescriptorParser.java (original) +++ jakarta/hivemind/trunk/framework/src/test/hivemind/test/parse/TestDescriptorParser.java Thu Jun 22 07:42:39 2006 @@ -37,6 +37,7 @@ import org.apache.hivemind.parse.InterceptorDescriptor; import org.apache.hivemind.parse.ModuleDescriptor; import org.apache.hivemind.parse.ServicePointDescriptor; +import org.apache.hivemind.parse.SubModuleDescriptor; import org.apache.hivemind.parse.XmlResourceProcessor; import org.apache.hivemind.schema.AttributeModel; import org.apache.hivemind.schema.ElementModel; @@ -639,5 +640,25 @@ ServicePointDescriptor spd = (ServicePointDescriptor) md.getServicePoints().get(0); assertEquals("hivemind.test.NoInterface", spd.getInterfaceClassName()); + } + + /** @since 1.1.2 */ + public void testSubModule() throws Exception + { + ModuleDescriptor md = parse("SubModule.xml"); + List l = md.getSubModules(); + assertEquals(1, l.size()); + SubModuleDescriptor smd = (SubModuleDescriptor) l.get(0); + assertNull(smd.getConditionalExpression()); + } + + /** @since 1.1.2 */ + public void testSubModuleIf() throws Exception + { + ModuleDescriptor md = parse("SubModuleIf.xml"); + List l = md.getSubModules(); + assertEquals(1, l.size()); + SubModuleDescriptor smd = (SubModuleDescriptor) l.get(0); + assertEquals("class foo.bar.Blat", smd.getConditionalExpression()); } } Modified: jakarta/hivemind/trunk/src/documentation/content/xdocs/conditional.xml URL: http://svn.apache.org/viewvc/jakarta/hivemind/trunk/src/documentation/content/xdocs/conditional.xml?rev=416385&r1=416384&r2=416385&view=diff ============================================================================== --- jakarta/hivemind/trunk/src/documentation/content/xdocs/conditional.xml (original) +++ jakarta/hivemind/trunk/src/documentation/content/xdocs/conditional.xml Thu Jun 22 07:42:39 2006 @@ -1,6 +1,6 @@