hlship 2003/08/04 17:50:36 Modified: hivemind/src/test/hivemind/test/services RecursiveService.xml TestServices.java Tracker.xml hivemind/src/java/org/apache/commons/hivemind/schema/rules ServiceTranslator.java hivemind/src/java/org/apache/commons/hivemind/parse DescriptorParser.java hivemind/src/test/hivemind/test HiveMindSuite.java hivemind/src/java/org/apache/commons/hivemind/service/impl SetPropertyValue.java hivemind/src/java/org/apache/commons/hivemind HiveMind.java HiveMindMessages.properties hivemind/xdocs rules.xml hivemind/src/META-INF hivemodule.xml Added: hivemind/src/test/hivemind/test/services Constructed.java ServiceTranslator.xml hivemind/src/java/org/apache/commons/hivemind/schema/rules EnumerationTranslator.java ExtensionPointTranslator.java hivemind/src/test/hivemind/test/rules ExtensionPointTranslator.xml TestExtensionPointTranslator.java TestBooleanTranslator.java DatumHolder.java MockModule.java MockSchemaProcessor.java TestClassTranslator.java TestEnumerationTranslator.java hivemind/src/test/hivemind/test/services/impl ConstructedImpl.java hivemind/src/test/hivemind/test/rules/impl DatumHolderImpl.java Log: Add new translators for enumerations and for extension points. Allow BuilderFactory to set properties of the service implementation to services and extension points. Revision Changes Path 1.6 +4 -4 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/services/RecursiveService.xml Index: RecursiveService.xml =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/services/RecursiveService.xml,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- RecursiveService.xml 31 Jul 2003 21:06:24 -0000 1.5 +++ RecursiveService.xml 5 Aug 2003 00:50:36 -0000 1.6 @@ -6,7 +6,7 @@ <service id="Fred" interface="org.apache.commons.hivemind.ServiceInterceptorFactory"> <invoke-factory service-id="hivemind.BuilderFactory"> <construct class="hivemind.test.services.impl.TrackerFactory"> - <property name="name" value="Fred"/> + <set property="name" value="Fred"/> </construct> </invoke-factory> <interceptor service-id="Barney"/> @@ -15,7 +15,7 @@ <service id="Barney" interface="org.apache.commons.hivemind.ServiceInterceptorFactory"> <invoke-factory service-id="hivemind.BuilderFactory"> <construct class="hivemind.test.services.impl.TrackerFactory"> - <property name="name" value="Barney"/> + <set property="name" value="Barney"/> </construct> </invoke-factory> <interceptor service-id="Wilma"/> @@ -24,7 +24,7 @@ <service id="Wilma" interface="org.apache.commons.hivemind.ServiceInterceptorFactory"> <invoke-factory service-id="hivemind.BuilderFactory"> <construct class="hivemind.test.services.impl.TrackerFactory"> - <property name="name" value="Wilma"/> + <set property="name" value="Wilma"/> </construct> </invoke-factory> <!-- Here's the cycle! --> 1.15 +24 -1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/services/TestServices.java Index: TestServices.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/services/TestServices.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- TestServices.java 30 Jul 2003 22:34:53 -0000 1.14 +++ TestServices.java 5 Aug 2003 00:50:36 -0000 1.15 @@ -68,6 +68,7 @@ import java.util.List; import org.apache.commons.hivemind.Registry; +import org.apache.commons.hivemind.service.NameLookup; import org.apache.tapestry.ApplicationRuntimeException; /** @@ -326,5 +327,27 @@ // The bad impl multiplies, not add. assertEquals(28, s.add(4, 7)); + } + + public void testServiceTranslator() throws Exception + { + Registry r = buildRegistry("ServiceTranslator.xml"); + + SimpleService ss = + (SimpleService) r.getService("hivemind.test.services.Simple", SimpleService.class); + + assertNotNull(ss); + + NameLookup nl = (NameLookup) r.getService("hivemind.NameLookup", NameLookup.class); + + assertNotNull(nl); + + Constructed c = + (Constructed) r.getService("hivemind.test.services.Constructed", Constructed.class); + + assertNotNull(c); + + assertSame(ss, c.getSimpleService()); + assertSame(nl, c.getNameLookup()); } } 1.5 +4 -4 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/services/Tracker.xml Index: Tracker.xml =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/services/Tracker.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- Tracker.xml 31 Jul 2003 21:06:24 -0000 1.4 +++ Tracker.xml 5 Aug 2003 00:50:36 -0000 1.5 @@ -5,7 +5,7 @@ interface="org.apache.commons.hivemind.ServiceInterceptorFactory"> <invoke-factory service-id="hivemind.BuilderFactory"> <construct class="hivemind.test.services.impl.TrackerFactory"> - <property name="name" value="Fred"/> + <set property="name" value="Fred"/> </construct> </invoke-factory> </service> @@ -13,7 +13,7 @@ interface="org.apache.commons.hivemind.ServiceInterceptorFactory"> <invoke-factory service-id="hivemind.BuilderFactory"> <construct class="hivemind.test.services.impl.TrackerFactory"> - <property name="name" value="Barney"/> + <set property="name" value="Barney"/> </construct> </invoke-factory> </service> @@ -21,7 +21,7 @@ interface="org.apache.commons.hivemind.ServiceInterceptorFactory"> <invoke-factory service-id="hivemind.BuilderFactory"> <construct class="hivemind.test.services.impl.TrackerFactory"> - <property name="name" value="Wilma"/> + <set property="name" value="Wilma"/> </construct> </invoke-factory> </service> 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/services/Constructed.java Index: Constructed.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package hivemind.test.services; import org.apache.commons.hivemind.service.NameLookup; /** * Interface used as part of tests of [EMAIL PROTECTED] org.apache.commons.hivemind.schema.rules.ServiceTranslator}. * * @author Howard Lewis Ship * @version $Id: Constructed.java,v 1.1 2003/08/05 00:50:36 hlship Exp $ */ public interface Constructed { public NameLookup getNameLookup(); public SimpleService getSimpleService(); } 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/services/ServiceTranslator.xml Index: ServiceTranslator.xml =================================================================== <?xml version="1.0" encoding="UTF-8"?> <!-- $Id: ServiceTranslator.xml,v 1.1 2003/08/05 00:50:36 hlship Exp $ --> <module id="hivemind.test.services" version="1.0.0"> <service id="Simple" interface="hivemind.test.services.SimpleService"> <create-instance class="hivemind.test.services.impl.SimpleServiceImpl"/> </service> <service id="Constructed" interface="hivemind.test.services.Constructed"> <invoke-factory service-id="hivemind.BuilderFactory"> <construct class="hivemind.test.services.impl.ConstructedImpl"> <set-service property="nameLookup" service-id="hivemind.NameLookup"/> <set-service property="simpleService" service-id="Simple"/> </construct> </invoke-factory> </service> </module> 1.2 +5 -7 jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/schema/rules/ServiceTranslator.java Index: ServiceTranslator.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/schema/rules/ServiceTranslator.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ServiceTranslator.java 29 Jul 2003 22:20:48 -0000 1.1 +++ ServiceTranslator.java 5 Aug 2003 00:50:36 -0000 1.2 @@ -59,6 +59,7 @@ import org.apache.commons.hivemind.Element; import org.apache.commons.hivemind.HiveMind; +import org.apache.commons.hivemind.Module; import org.apache.commons.hivemind.schema.SchemaProcessor; import org.apache.commons.hivemind.schema.Translator; import org.apache.commons.lang.StringUtils; @@ -85,16 +86,13 @@ if (StringUtils.isEmpty(inputValue)) return null; - String serviceId = inputValue; + Module module = processor.getContributingModule(); - if (serviceId.indexOf('.') <= 0) - serviceId = processor.getContributingModule().getModuleId() + "." + inputValue; + String serviceId = HiveMind.qualify(module, inputValue); try { - return processor.getContributingModule().getRegistry().getService( - serviceId, - Object.class); + return module.getRegistry().getService(serviceId, Object.class); } catch (Exception ex) { 1.1 jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/schema/rules/EnumerationTranslator.java Index: EnumerationTranslator.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package org.apache.commons.hivemind.schema.rules; import java.lang.reflect.Field; import java.util.Map; import org.apache.commons.hivemind.Element; import org.apache.commons.hivemind.HiveMind; import org.apache.commons.hivemind.schema.SchemaProcessor; import org.apache.commons.hivemind.schema.Translator; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Used to translate a set of strings to one of a number of constant values. * Each input string is matched against the name of a public static field * of a class. The name of the class, and the mappings, are provided * in the initializer. * * @author Howard Lewis Ship * @version $Id: EnumerationTranslator.java,v 1.1 2003/08/05 00:50:36 hlship Exp $ */ public class EnumerationTranslator implements Translator { private static final Log LOG = LogFactory.getLog(EnumerationTranslator.class); private Map _mappings; private String _className; private Class _class; /** * Initialized the translator; the intitializer is the name of the class, a comma, * and a series of key=value mappings from the input values to the names * of the public static fields of the class. */ public EnumerationTranslator(String initializer) { int commax = initializer.indexOf(','); _className = initializer.substring(0, commax); _mappings = RuleUtils.convertInitializer(initializer.substring(commax + 1)); } private synchronized Class getClass(SchemaProcessor processor) { if (_class == null) _class = processor.getContributingModule().getResourceResolver().findClass(_className); return _class; } public Object translate(SchemaProcessor processor, Element element, String inputValue) { if (StringUtils.isEmpty(inputValue)) return null; Class c = getClass(processor); String fieldName = (String) _mappings.get(inputValue); if (fieldName == null) { LOG.error( HiveMind.format( "EnumerationTranslator.not-recognized", inputValue, element.getLocation())); return null; } try { Field f = c.getField(fieldName); return f.get(null); } catch (Exception ex) { LOG.error( HiveMind.format( "EnumerationTranslator.error", _className, fieldName, ex.getMessage()), ex); } return null; } } 1.1 jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/schema/rules/ExtensionPointTranslator.java Index: ExtensionPointTranslator.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package org.apache.commons.hivemind.schema.rules; import org.apache.commons.hivemind.Element; import org.apache.commons.hivemind.HiveMind; import org.apache.commons.hivemind.Module; import org.apache.commons.hivemind.Registry; import org.apache.commons.hivemind.schema.SchemaProcessor; import org.apache.commons.hivemind.schema.Translator; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Interprets a string as an extension point id, and provides * the elements for that extension point. * * @author Howard Lewis Ship * @version $Id: ExtensionPointTranslator.java,v 1.1 2003/08/05 00:50:36 hlship Exp $ */ public class ExtensionPointTranslator implements Translator { private static final Log LOG = LogFactory.getLog(ExtensionPointTranslator.class); public Object translate(SchemaProcessor processor, Element element, String inputValue) { if (StringUtils.isEmpty(inputValue)) return null; Module module = processor.getContributingModule(); String pointId = HiveMind.qualify(module, inputValue); Registry registry = module.getRegistry(); try { return registry.getExtensionPointElements(pointId); } catch (Exception ex) { LOG.error( HiveMind.format( "ExtensionPointTranslator.error", pointId, element.getLocation(), ex.getMessage()), ex); } return null; } } 1.19 +6 -1 jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/parse/DescriptorParser.java Index: DescriptorParser.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/parse/DescriptorParser.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- DescriptorParser.java 4 Aug 2003 14:21:56 -0000 1.18 +++ DescriptorParser.java 5 Aug 2003 00:50:36 -0000 1.19 @@ -81,6 +81,8 @@ import org.apache.commons.hivemind.schema.impl.AttributeModelImpl; import org.apache.commons.hivemind.schema.impl.ElementModelImpl; import org.apache.commons.hivemind.schema.impl.SchemaImpl; +import org.apache.commons.hivemind.schema.rules.EnumerationTranslator; +import org.apache.commons.hivemind.schema.rules.ExtensionPointTranslator; import org.apache.commons.hivemind.schema.rules.InvokeParentRule; import org.apache.commons.hivemind.schema.rules.BooleanTranslator; import org.apache.commons.hivemind.schema.rules.ClassTranslator; @@ -99,6 +101,7 @@ import org.apache.tapestry.IResourceResolver; import org.apache.tapestry.Location; import org.apache.tapestry.util.xml.DocumentParseException; +import org.apache.tools.ant.types.EnumeratedAttribute; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.Locator; @@ -310,6 +313,8 @@ _builtinTranslators.put("class", ClassTranslator.class); _builtinTranslators.put("int", IntTranslator.class); _builtinTranslators.put("service", ServiceTranslator.class); + _builtinTranslators.put("enumeration", EnumerationTranslator.class); + _builtinTranslators.put("extension-point", ExtensionPointTranslator.class); } /** 1.11 +9 -1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/HiveMindSuite.java Index: HiveMindSuite.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/HiveMindSuite.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- HiveMindSuite.java 4 Aug 2003 14:21:56 -0000 1.10 +++ HiveMindSuite.java 5 Aug 2003 00:50:36 -0000 1.11 @@ -82,6 +82,12 @@ suite.addTestSuite(TestConvertInitializer.class); + suite.addTestSuite(TestBooleanTranslator.class); + + suite.addTestSuite(TestClassTranslator.class); + + suite.addTestSuite(TestEnumerationTranslator.class); + suite.addTestSuite(TestMessagesImpl.class); suite.addTestSuite(TestDescriptorParser.class); @@ -97,6 +103,8 @@ suite.addTestSuite(TestManifestClassPath.class); suite.addTestSuite(TestConstructRegistry.class); + + suite.addTestSuite(TestExtensionPointTranslator.class); return suite; } 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/ExtensionPointTranslator.xml Index: ExtensionPointTranslator.xml =================================================================== <?xml version="1.0"?> <!-- $Id: ExtensionPointTranslator.xml,v 1.1 2003/08/05 00:50:36 hlship Exp $ --> <module id="hivemind.test.rules" version="1.0.0"> <extension-point id="EP"> <schema> <element name="datum"> <attribute name="key" required="true"/> <attribute name="value" required="true"/> <rules> <create-object class="hivemind.test.config.impl.Datum"/> <read-attribute property="key" attribute="key"/> <read-attribute property="value" attribute="value"/> <invoke-parent method="addElement"/> </rules> </element> </schema> </extension-point> <extension point-id="EP"> <datum key="key1" value="value1"/> <datum key="key2" value="value2"/> </extension> <service id="ExtensionPointTranslator" interface="hivemind.test.rules.DatumHolder"> <invoke-factory service-id="hivemind.BuilderFactory"> <construct class="hivemind.test.rules.impl.DatumHolderImpl"> <set-extension-point property="elements" point-id="EP"/> </construct> </invoke-factory> </service> <service id="Failure" interface="hivemind.test.rules.DatumHolder"> <invoke-factory service-id="hivemind.BuilderFactory"> <construct class="hivemind.test.rules.impl.DatumHolderImpl"> <set-extension-point property="elements" point-id="missing"/> </construct> </invoke-factory> </service> </module> 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/TestExtensionPointTranslator.java Index: TestExtensionPointTranslator.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package hivemind.test.rules; import java.util.List; import hivemind.test.HiveMindTestCase; import org.apache.commons.hivemind.Registry; import org.apache.commons.hivemind.schema.rules.ExtensionPointTranslator; /** * Tests for [EMAIL PROTECTED] org.apache.commons.hivemind.schema.rules.ExtensionPointTranslator}. * * @author Howard Lewis Ship * @version $Id: TestExtensionPointTranslator.java,v 1.1 2003/08/05 00:50:36 hlship Exp $ */ public class TestExtensionPointTranslator extends HiveMindTestCase { public TestExtensionPointTranslator(String name) { super(name); } public void testNull() { ExtensionPointTranslator t = new ExtensionPointTranslator(); assertNull(t.translate(null, null, null)); } public void testExtensionPointTranslator() throws Exception { Registry r = buildRegistry("ExtensionPointTranslator.xml"); DatumHolder h = (DatumHolder) r.getService( "hivemind.test.rules.ExtensionPointTranslator", DatumHolder.class); List l1 = h.getDatums(); List l2 = r.getExtensionPointElements("hivemind.test.rules.EP"); assertSame(l2, l1); } public void testFailure() throws Exception { Registry r = buildRegistry("ExtensionPointTranslator.xml"); interceptLogging(); DatumHolder h = (DatumHolder) r.getService("hivemind.test.rules.Failure", DatumHolder.class); checkLoggingEvent( ExtensionPointTranslator.class.getName(), "Error accessing extension point hivemind\\.test\\.rules\\.missing \\(at .*\\): " + "Extension point hivemind\\.test\\.rules\\.missing does not exist\\."); assertNull(h.getDatums()); } } 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/TestBooleanTranslator.java Index: TestBooleanTranslator.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package hivemind.test.rules; import org.apache.commons.hivemind.schema.rules.BooleanTranslator; import hivemind.test.HiveMindTestCase; /** * Fill in some gaps * for [EMAIL PROTECTED] org.apache.commons.hivemind.schema.rules.BooleanTranslator}. * * @author Howard Lewis Ship * @version $Id: TestBooleanTranslator.java,v 1.1 2003/08/05 00:50:36 hlship Exp $ */ public class TestBooleanTranslator extends HiveMindTestCase { public TestBooleanTranslator(String name) { super(name); } public void testNull() { BooleanTranslator t = new BooleanTranslator(); assertEquals(Boolean.FALSE, t.translate(null, null, null)); } public void testInitializer() { BooleanTranslator t = new BooleanTranslator("default=true"); assertEquals(Boolean.TRUE, t.translate(null, null, null)); } } 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/DatumHolder.java Index: DatumHolder.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package hivemind.test.rules; import java.util.List; /** * Part of tests for [EMAIL PROTECTED] org.apache.commons.hivemind.schema.rules.ExtensionPointTranslator}. * * @author Howard Lewis Ship * @version $Id: DatumHolder.java,v 1.1 2003/08/05 00:50:36 hlship Exp $ */ public interface DatumHolder { public List getDatums(); } 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/MockModule.java Index: MockModule.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package hivemind.test.rules; import java.util.List; import org.apache.commons.hivemind.Module; import org.apache.commons.hivemind.Registry; import org.apache.commons.hivemind.ServiceExtensionPoint; import org.apache.tapestry.ILocation; import org.apache.tapestry.IMessages; import org.apache.tapestry.IResourceResolver; import org.apache.tapestry.util.DefaultResourceResolver; /** * Mock implementation of [EMAIL PROTECTED] org.apache.commons.hivemind.Module} used * for testing puposes. * * @author Howard Lewis Ship * @version $Id: MockModule.java,v 1.1 2003/08/05 00:50:36 hlship Exp $ */ public class MockModule implements Module { private IResourceResolver _resolver = new DefaultResourceResolver(); public String getModuleId() { return null; } public Object getService(String serviceId, Class serviceInterface) { return null; } public ServiceExtensionPoint getServiceExtensionPoint(String serviceId) { return null; } public List getExtensionPointElements(String extensionPointId) { return null; } public Registry getRegistry() { return null; } public IResourceResolver getResourceResolver() { return _resolver; } public IMessages getMessages() { return null; } public ILocation getLocation() { return null; } } 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/MockSchemaProcessor.java Index: MockSchemaProcessor.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package hivemind.test.rules; import org.apache.commons.hivemind.Module; import org.apache.commons.hivemind.schema.SchemaProcessor; public class MockSchemaProcessor implements SchemaProcessor { private Module _contributingModule = new MockModule(); public void addElement(Object element) { } public void push(Object object) { } public Object pop() { return null; } public Object peek() { return null; } public Object peek(int depth) { return null; } public Module getContributingModule() { return _contributingModule; } public String getElementPath() { return "foo/bar/baz"; } } 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/TestClassTranslator.java Index: TestClassTranslator.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package hivemind.test.rules; import hivemind.test.HiveMindTestCase; import org.apache.commons.hivemind.impl.ElementImpl; import org.apache.commons.hivemind.schema.SchemaProcessor; import org.apache.commons.hivemind.schema.rules.ClassTranslator; import org.apache.tapestry.ApplicationRuntimeException; import org.apache.tapestry.ILocation; import org.apache.tapestry.Location; import org.apache.tapestry.spec.BaseLocatable; /** * Fill in some gaps in * [EMAIL PROTECTED] org.apache.commons.hivemind.schema.rules.ClassTranslator}. * * @author Howard Lewis Ship * @version $Id: TestClassTranslator.java,v 1.1 2003/08/05 00:50:36 hlship Exp $ */ public class TestClassTranslator extends HiveMindTestCase { public TestClassTranslator(String name) { super(name); } public void testNull() { ClassTranslator t = new ClassTranslator(); assertNull(t.translate(null, null, null)); } public void testBadClass() throws Exception { ClassTranslator t = new ClassTranslator(); ElementImpl e = new ElementImpl(); ILocation l = new Location(getLocation("TestClassTranslator.class"), 50); e.setLocation(l); SchemaProcessor p = new MockSchemaProcessor(); interceptLogging(); Object r = t.translate(p, e, "bad.class.Name"); assertNull(r); checkLoggingEvent( null, "'bad.class.Name' is not a valid class name \\(at .*\\): Could not load class bad.class.Name"); } public void testLocatable() throws Exception { ClassTranslator t = new ClassTranslator(); ElementImpl e = new ElementImpl(); ILocation l = new Location(getLocation("TestClassTranslator.class"), 50); e.setLocation(l); SchemaProcessor p = new MockSchemaProcessor(); BaseLocatable r = (BaseLocatable) t.translate(p, e, BaseLocatable.class.getName()); assertNotNull(r); assertSame(l, r.getLocation()); } } 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/TestEnumerationTranslator.java Index: TestEnumerationTranslator.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package hivemind.test.rules; import hivemind.test.HiveMindTestCase; import org.apache.commons.hivemind.Element; import org.apache.commons.hivemind.impl.ElementImpl; import org.apache.commons.hivemind.schema.SchemaProcessor; import org.apache.commons.hivemind.schema.rules.EnumerationTranslator; import org.apache.tapestry.ApplicationRuntimeException; import org.apache.tapestry.ILocation; import org.apache.tapestry.Location; /** * Tests for [EMAIL PROTECTED] org.apache.commons.hivemind.schema.rules.EnumerationTranslator}. * * @author Howard Lewis Ship * @version $Id: TestEnumerationTranslator.java,v 1.1 2003/08/05 00:50:36 hlship Exp $ */ public class TestEnumerationTranslator extends HiveMindTestCase { public TestEnumerationTranslator(String name) { super(name); } private Element forgeElement() { ElementImpl e = new ElementImpl(); ILocation l = new Location(getLocation("TestEnumerationTranslator.class"), 50); e.setLocation(l); return e; } public void testNull() { SchemaProcessor p = new MockSchemaProcessor(); Element e = forgeElement(); EnumerationTranslator t = new EnumerationTranslator("java.lang.Boolean,true=TRUE,false=FALSE"); assertEquals(null, t.translate(p, e, null)); } public void testMatch() { SchemaProcessor p = new MockSchemaProcessor(); Element e = forgeElement(); EnumerationTranslator t = new EnumerationTranslator("java.lang.Boolean,true=TRUE,false=FALSE"); assertEquals(Boolean.TRUE, t.translate(p, e, "true")); assertEquals(Boolean.FALSE, t.translate(p, e, "false")); } public void testBadClass() { SchemaProcessor p = new MockSchemaProcessor(); Element e = forgeElement(); EnumerationTranslator t = new EnumerationTranslator("lava.jang.Boolean,true=TRUE,false=FALSE"); try { t.translate(p, e, "true"); unreachable(); } catch (ApplicationRuntimeException ex) { checkException(ex, "Could not load class lava.jang.Boolean"); } } public void testUnrecognizedValue() throws Exception { SchemaProcessor p = new MockSchemaProcessor(); Element e = forgeElement(); EnumerationTranslator t = new EnumerationTranslator("java.lang.Boolean,true=TRUE,false=FALSE"); interceptLogging(); assertEquals(null, t.translate(p, e, "fred")); checkLoggingEvent( EnumerationTranslator.class.getName(), "'fred' \\(at .*\\) is not a recognized enumerated value\\."); } public void testBadField() throws Exception { SchemaProcessor p = new MockSchemaProcessor(); Element e = forgeElement(); EnumerationTranslator t = new EnumerationTranslator("java.lang.Boolean,true=HONEST_TO_GOD_TRUE,false=FALSE"); interceptLogging(); assertEquals(null, t.translate(p, e, "true")); checkLoggingEvent( EnumerationTranslator.class.getName(), "Unable to obtain value for static field java\\.lang\\.Boolean\\.HONEST_TO_GOD_TRUE:"); } } 1.2 +4 -4 jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/service/impl/SetPropertyValue.java Index: SetPropertyValue.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/service/impl/SetPropertyValue.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SetPropertyValue.java 30 Jul 2003 22:34:53 -0000 1.1 +++ SetPropertyValue.java 5 Aug 2003 00:50:36 -0000 1.2 @@ -68,14 +68,14 @@ public class SetPropertyValue { private String _propertyName; - private String _value; + private Object _value; public String getPropertyName() { return _propertyName; } - public String getValue() + public Object getValue() { return _value; } @@ -85,7 +85,7 @@ _propertyName = string; } - public void setValue(String string) + public void setValue(Object string) { _value = string; } 1.13 +14 -1 jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/HiveMind.java Index: HiveMind.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/HiveMind.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- HiveMind.java 4 Aug 2003 14:21:56 -0000 1.12 +++ HiveMind.java 5 Aug 2003 00:50:36 -0000 1.13 @@ -272,4 +272,17 @@ return Collections.unmodifiableList(sorted); } + /** + * Returns a fully qualfied id. If the id contains a '.', then it + * is returned unchanged. Otherwise, the module's id is prefixed (with a + * seperator '.') and returned; + */ + public static String qualify(Module module, String id) + { + if (id.indexOf('.') > 0) + return id; + + return module.getModuleId() + "." + id; + } + } 1.18 +8 -1 jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/HiveMindMessages.properties Index: HiveMindMessages.properties =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/HiveMindMessages.properties,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- HiveMindMessages.properties 4 Aug 2003 14:21:56 -0000 1.17 +++ HiveMindMessages.properties 5 Aug 2003 00:50:36 -0000 1.18 @@ -106,6 +106,8 @@ CreateObjectRule.error-creating-object=Error creating instance of class {0} (at {1}): {2} +ClassTranslator.bad-class-name=''{0}'' is not a valid class name (at {1}): {2} + BooleanTranslator.invalid-value=''{0}'' (in element {1} at {2}) is not a boolean value (which should be either ''true'' or ''false''). IntTranslator.invalid-value=''{0}'' (in element {1} at {2}) is not an integer value. @@ -114,7 +116,12 @@ ServiceTranslator.invalid-value=Error resolving service {0} (in element {1} at {2}): {3} +EnumerationTranslator.not-recognized=''{0}'' (at {1}) is not a recognized enumerated value. +EnumerationTranslator.error=Unable to obtain value for static field {0}.{1}: {2} + RuleUtils.invalid-initializer=Initializer string (''{0}'') is not in proper format (key=value[,key=value]*). + +ExtensionPointTranslator.error=Error accessing extension point {0} (at {1}): {2} # service.impl package 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/services/impl/ConstructedImpl.java Index: ConstructedImpl.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package hivemind.test.services.impl; import org.apache.commons.hivemind.service.NameLookup; import org.apache.tapestry.spec.BaseLocatable; import hivemind.test.services.Constructed; import hivemind.test.services.SimpleService; /** * Used for testing [EMAIL PROTECTED] org.apache.commons.hivemind.schema.rules.ServiceTranslator}. * * @author Howard Lewis Ship * @version $Id: ConstructedImpl.java,v 1.1 2003/08/05 00:50:36 hlship Exp $ */ public class ConstructedImpl extends BaseLocatable implements Constructed { private NameLookup _nameLookup; private SimpleService _simpleService; public NameLookup getNameLookup() { return _nameLookup; } public SimpleService getSimpleService() { return _simpleService; } public void setNameLookup(NameLookup lookup) { _nameLookup = lookup; } public void setSimpleService(SimpleService service) { _simpleService = service; } } 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/impl/DatumHolderImpl.java Index: DatumHolderImpl.java =================================================================== /* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package hivemind.test.rules.impl; import java.util.List; import hivemind.test.rules.DatumHolder; /** * Part of test suite for [EMAIL PROTECTED] org.apache.commons.hivemind.schema.rules.ExtensionPointTranslator}. * * @author Howard Lewis Ship * @version $Id: DatumHolderImpl.java,v 1.1 2003/08/05 00:50:36 hlship Exp $ */ public class DatumHolderImpl implements DatumHolder { public List _elements; public List getDatums() { return getElements(); } public List getElements() { return _elements; } public void setElements(List list) { _elements = list; } } 1.3 +51 -7 jakarta-commons-sandbox/hivemind/xdocs/rules.xml Index: rules.xml =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/xdocs/rules.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- rules.xml 4 Aug 2003 14:21:56 -0000 1.2 +++ rules.xml 5 Aug 2003 00:50:36 -0000 1.3 @@ -44,13 +44,13 @@ </p> <p> -XML Processing is based on an <i>object stack</i>. Several rules will manipulate the top object on the stack, setting properties +XML Processing is based on an object stack. Several rules will manipulate the top object on the stack, setting properties based on attributes or content. The &create-object; rule will instantiate a new object at <code>begin()</code> and pop it off the stack at <code>end()</code>. </p> <p> -In several cases, rule descriptions reference the <i>parent</i> and <i>child</i> objects. The top object on +In several cases, rule descriptions reference the parent and child objects. The top object on the stack is the child, the object beneath that is the parent. The &set-parent; and &invoke-parent; rules are useful for creating hierarchies of objects. </p> @@ -229,7 +229,7 @@ <p> Commonly, it is necessary to perform some translation or transformation of string attribute value to convert the -value into some other type, such as boolean, integer or date. This can be accomplished by specifying a <i>translator</i> +value into some other type, such as boolean, integer or date. This can be accomplished by specifying a translator in the &read-attribute; rule (it also applies to element content, and the &read-content; rule). </p> @@ -241,10 +241,10 @@ </p> <p> -Translators can be configured using <i>initializer strings</i>. The initializer string is separated from the +Translators can be configured using initializer strings. The initializer string is separated from the translator id (or translator class name) by a comma, ex: <code>int,min=0</code>. Initializer -strings are <i>generally</i> in the format of -<code><i>key</i>=<i>value</i>[,<i>key</i>=<i>value</i>]*</code> ... but each Translator +strings are generally in the format of +<code>key=value[,key=value]*</code> ... but each Translator is free to interpret the initializer string its own way. </p> @@ -266,6 +266,50 @@ <p> The class translator converts a fully qualified class name into an object instance. The class must implement a public no-arguments constructor. +</p> + +</subsection> + +<subsection name="enumeration"> + +<p> +The enumeration translator converts input strings into enumerated values. Enumeration <em>requires</em> +an initializer string, with a special format: +<br/> +<code> +enumeration,class-name,input=field-name[,input=field-name]* +</code> +</p> + +<p> +That is, the initializer begins with the name of the class containing some number of public static fields. +Input values are mapped against field names. Example: + +<br/> + +<code> + enumeration,java.lang.Boolean,yes=TRUE,no=FALSE +</code> +</p> + +<p> +If the input is null or empty, then the translator returns null. If there is an error (such as an invalid class +name or unrecognized input value) then an error is logged and null is returned. +</p> + +</subsection> + +<subsection name="extension-point"> + +<p> +The extension-point translator converts an input value into an extension point id, then obtains +the elements for that extension point as the value. The id may be fully qualified, or a local id within +the contributing module. +</p> + +<p> +A null input value returns null. Invalid input, such as an unknown extension point id, will be logged as an error and +null will be returned. </p> </subsection> 1.10 +53 -6 jakarta-commons-sandbox/hivemind/src/META-INF/hivemodule.xml Index: hivemodule.xml =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/META-INF/hivemodule.xml,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- hivemodule.xml 31 Jul 2003 21:06:25 -0000 1.9 +++ hivemodule.xml 5 Aug 2003 00:50:36 -0000 1.10 @@ -87,21 +87,68 @@ <invoke-parent method="addElement"/> </rules> - <element name="property"> + <element name="set"> <description> - Each property element identifies a property of the service instance to update and a value to update to. + Configures a property of the service instance to a string value. </description> - <attribute name="name" required="true"/> - <attribute name="value" required="true"/> + <attribute name="property" required="true"> + <description>The name of a property of the service instance to configure.</description> + </attribute> + <attribute name="value" required="true"> + <description>A literal string value to set the property to.</description> + </attribute> <rules> <create-object class="org.apache.commons.hivemind.service.impl.SetPropertyValue"/> - <read-attribute property="propertyName" attribute="name"/> + <read-attribute property="propertyName" attribute="property"/> <read-attribute property="value" attribute="value"/> <invoke-parent method="addProperty"/> </rules> </element> + <element name="set-service"> + <description> + Configures a property of the service instance to another service. + </description> + + <attribute name="property" required="true"> + <description>The name of the property of the service instance to configure.</description> + </attribute> + + <attribute name="service-id" required="true"> + <description>The id of the service.</description> + </attribute> + + <rules> + <create-object class="org.apache.commons.hivemind.service.impl.SetPropertyValue"/> + <read-attribute property="propertyName" attribute="property"/> + <read-attribute property="value" attribute="service-id" translator="service"/> + <invoke-parent method="addProperty"/> + </rules> + + </element> + + <element name="set-extension-point"> + <description>Configures a property of the service instance to the elements + contributed to an extension point.</description> + + + <attribute name="property" required="true"> + <description>The name of the property of the service instance to configure.</description> + </attribute> + + <attribute name="point-id" required="true"> + <description>The id of the extension point to access.</description> + </attribute> + + <rules> + <create-object class="org.apache.commons.hivemind.service.impl.SetPropertyValue"/> + <read-attribute property="propertyName" attribute="property"/> + <read-attribute property="value" attribute="point-id" translator="extension-point"/> + <invoke-parent method="addProperty"/> + </rules> + + </element> </element> </parameters-schema>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]