hlship 2003/08/11 10:45:28 Modified: hivemind/src/java/org/apache/commons/hivemind/service/impl AbstractLoggingInterceptor.java hivemind/src/test/hivemind/test/services TestServices.java hivemind/src/java/org/apache/commons/hivemind/impl ExtensionPointImpl.java InvokeFactoryServiceConstructor.java hivemind/src/test/hivemind/test/config TestExtensionPoint.java Symbols.xml hivemind/src/test/hivemind/test/parse TestDescriptorParser.java hivemind/src/META-INF hivemodule.xml hivemind/src/test/hivemind/test HiveMindTestCase.java hivemind/src/test/hivemind/test/rules TestClassTranslator.java TestEnumerationTranslator.java TestExtensionPointTranslator.java hivemind/src/test/hivemind/test/config/impl test.properties Added: hivemind/src/java/org/apache/commons/hivemind/service/impl FactoryDefaultsSymbolSource.java FactoryDefault.java hivemind/src/test/hivemind/test/services ArrayResult.xml ArrayService.java hivemind/src/test/hivemind/test/services/impl ArrayServiceImpl.java Log: Add a "FactoryDefaults" extension point for registering values for symbols. Improve how the LoggingInterceptor logs Object arrays (as parameters or result values). Revision Changes Path 1.2 +43 -3 jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/service/impl/AbstractLoggingInterceptor.java Index: AbstractLoggingInterceptor.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/service/impl/AbstractLoggingInterceptor.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- AbstractLoggingInterceptor.java 9 Jul 2003 11:27:24 -0000 1.1 +++ AbstractLoggingInterceptor.java 11 Aug 2003 17:45:27 -0000 1.2 @@ -95,7 +95,7 @@ if (i > 0) buffer.append(", "); - buffer.append(arg); + convert(buffer, arg); } buffer.append(")"); @@ -103,6 +103,44 @@ _log.debug(buffer.toString()); } + private void convert(StringBuffer buffer, Object input) + { + if (input == null) + { + buffer.append("<null>"); + return; + } + + // Primitive types, and non-object arrays + // use toString(). Less than ideal for int[], etc., but + // that's a lot of work for a rare case. + + if (!(input instanceof Object[])) + { + buffer.append(input.toString()); + return; + } + + buffer.append("("); + buffer.append(ClassFabUtils.getJavaClassName(input.getClass())); + buffer.append("){"); + + Object[] array = (Object[]) input; + int count = array.length; + + for (int i = 0; i < count; i++) + { + if (i > 0) + buffer.append(", "); + + // We use convert() again, because it could be a multi-dimensional array + // (god help us) where each element must be converted. + convert(buffer, array[i]); + } + + buffer.append("}"); + } + protected void _logExit(String methodName, Object result) { StringBuffer buffer = new StringBuffer(BUFFER_SIZE); @@ -110,7 +148,9 @@ buffer.append("END "); buffer.append(methodName); buffer.append("() ["); - buffer.append(result); + + convert(buffer, result); + buffer.append("]"); _log.debug(buffer.toString()); 1.1 jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/service/impl/FactoryDefaultsSymbolSource.java Index: FactoryDefaultsSymbolSource.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.service.impl; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.hivemind.Initializable; import org.apache.commons.hivemind.ServiceExtensionPoint; import org.apache.commons.hivemind.SymbolSource; import org.apache.commons.hivemind.impl.BaseLocatable; /** * Implementation of [EMAIL PROTECTED] org.apache.commons.hivemind.SymbolSource} driven * off of the <code>hivemind.FactoryDefaults</code> extension point. * * @author Howard Lewis Ship * @version $Id: FactoryDefaultsSymbolSource.java,v 1.1 2003/08/11 17:45:27 hlship Exp $ */ public class FactoryDefaultsSymbolSource extends BaseLocatable implements SymbolSource, Initializable { private List _factoryDefaults; private Map _symbols = new HashMap(); public String valueForSymbol(String name) { return (String) _symbols.get(name); } public void initializeService(ServiceExtensionPoint point, Object service) { int count = _factoryDefaults.size(); for (int i = 0; i < count; i++) { FactoryDefault fd = (FactoryDefault) _factoryDefaults.get(i); _symbols.put(fd.getSymbol(), fd.getValue()); } } public List getFactoryDefaults() { return _factoryDefaults; } public void setFactoryDefaults(List list) { _factoryDefaults = list; } } 1.1 jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/service/impl/FactoryDefault.java Index: FactoryDefault.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.service.impl; /** * Default symbol value defined by the * <code>hivemind.FactoryDefaults</code> extension point. * * @author Howard Lewis Ship * @version $Id: FactoryDefault.java,v 1.1 2003/08/11 17:45:27 hlship Exp $ */ public class FactoryDefault { private String _symbol; private String _value; public String getSymbol() { return _symbol; } public String getValue() { return _value; } public void setSymbol(String string) { _symbol = string; } public void setValue(String string) { _value = string; } } 1.19 +25 -6 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.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- TestServices.java 8 Aug 2003 13:51:10 -0000 1.18 +++ TestServices.java 11 Aug 2003 17:45:27 -0000 1.19 @@ -371,11 +371,12 @@ assertEquals("ToStringImpl of toString()", ts.toString()); List events = getInterceptedLogEvents(); - checkLoggingEvent("hivemind.test.services.ToString", "BEGIN toString\\(\\)", events); + checkLoggingEvent("hivemind.test.services.ToString", "BEGIN toString()", events, true); checkLoggingEvent( "hivemind.test.services.ToString", - "END toString\\(\\) \\[ToStringImpl of toString\\(\\)\\]", - events); + "END toString() [ToStringImpl of toString()]", + events, + true); } @@ -396,7 +397,7 @@ s.logMessage("This is a test."); - checkLoggingEvent("hivemind.test.services.BuilderAccess", "This is a test\\."); + checkLoggingEvent("hivemind.test.services.BuilderAccess", "This is a test.", true); } public void testBuilderAccessFailure() throws Exception @@ -414,6 +415,24 @@ checkLoggingEvent( BuilderFactory.class.getName(), - "Unable to set property EVIL of [EMAIL PROTECTED]: Unknown property 'EVIL'"); + "Unable to set property EVIL of [EMAIL PROTECTED]: Unknown property 'EVIL'", + false); } + + public void testArrayResult() throws Exception + { + Registry r = buildRegistry("ArrayResult.xml"); + + ArrayService s = + (ArrayService) r.getService("hivemind.test.services.ArrayResult", ArrayService.class); + + interceptLogging("hivemind.test.services.ArrayResult"); + + String[] result = s.returnArrayType(); + + checkList(new String[] { "alpha", "beta" }, result); + + checkLoggingEvent(null, "END returnArrayType() [(java.lang.String[]){alpha, beta}]", true); + } + } 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/services/ArrayResult.xml Index: ArrayResult.xml =================================================================== <?xml version="1.0" encoding="UTF-8"?> <!-- $Id: ArrayResult.xml,v 1.1 2003/08/11 17:45:27 hlship Exp $ --> <module id="hivemind.test.services" version="1.0.0"> <service id="ArrayResult" interface="hivemind.test.services.ArrayService"> <create-instance class="hivemind.test.services.impl.ArrayServiceImpl"/> <interceptor service-id="hivemind.LoggingInterceptor"/> </service> </module> 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/services/ArrayService.java Index: ArrayService.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; /** * Used to test code that ensures a return type that is an array works properly. * * @author Howard Lewis Ship * @version $Id: ArrayService.java,v 1.1 2003/08/11 17:45:27 hlship Exp $ */ public interface ArrayService { public String[] returnArrayType(); } 1.5 +18 -10 jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/impl/ExtensionPointImpl.java Index: ExtensionPointImpl.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/impl/ExtensionPointImpl.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- ExtensionPointImpl.java 8 Aug 2003 13:51:08 -0000 1.4 +++ ExtensionPointImpl.java 11 Aug 2003 17:45:27 -0000 1.5 @@ -98,12 +98,28 @@ builder.append("schema", _schema); } + /** + * Returns the number of contributions; it is expected + * that each top-level [EMAIL PROTECTED] org.apache.commons.hivemind.Element} + * in each [EMAIL PROTECTED] Extension} will convert to one element instance; + * the value returned is the total number of top-level elements + * in all contributed Extensions. + */ public int getContributionCount() { if (_extensions == null) return 0; - return _extensions.size(); + int total = 0; + + int count = _extensions.size(); + for (int i = 0; i < count; i++) + { + Extension e = (Extension) _extensions.get(i); + total += e.getElements().size(); + } + + return total; } public void addExtension(Extension extension) @@ -112,14 +128,6 @@ _extensions = new ArrayList(); _extensions.add(extension); - } - - public void addExtensions(List extensions) - { - if (_extensions == null) - _extensions = new ArrayList(extensions); - else - _extensions.addAll(extensions); } public Occurances getExpectedCount() 1.3 +6 -4 jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/impl/InvokeFactoryServiceConstructor.java Index: InvokeFactoryServiceConstructor.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/java/org/apache/commons/hivemind/impl/InvokeFactoryServiceConstructor.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- InvokeFactoryServiceConstructor.java 8 Aug 2003 13:51:08 -0000 1.2 +++ InvokeFactoryServiceConstructor.java 11 Aug 2003 17:45:27 -0000 1.3 @@ -89,10 +89,12 @@ { Registry registry = _contributingModule.getRegistry(); - String factoryModuleId = RegistryImpl.split(_factoryServiceId); + String qualifiedFactoryId = HiveMind.qualify(_contributingModule, _factoryServiceId); + + String factoryModuleId = RegistryImpl.split(qualifiedFactoryId); Module factoryModule = registry.getModule(factoryModuleId); ServiceExtensionPoint factoryPoint = - factoryModule.getServiceExtensionPoint(_factoryServiceId); + factoryModule.getServiceExtensionPoint(qualifiedFactoryId); ServiceImplementationFactory factory = (ServiceImplementationFactory) factoryPoint.getService( @@ -100,7 +102,7 @@ if (factory == null) throw new ApplicationRuntimeException( - HiveMind.format("InvokeFactoryDescriptor.factory-is-null", _factoryServiceId), + HiveMind.format("InvokeFactoryDescriptor.factory-is-null", qualifiedFactoryId), getLocation(), null); 1.7 +38 -25 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/config/TestExtensionPoint.java Index: TestExtensionPoint.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/config/TestExtensionPoint.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- TestExtensionPoint.java 5 Aug 2003 15:41:44 -0000 1.6 +++ TestExtensionPoint.java 11 Aug 2003 17:45:28 -0000 1.7 @@ -201,7 +201,8 @@ checkLoggingEvent( BooleanTranslator.class.getName(), - "'maybe' \\(in element flag at .*\\) is not a boolean value"); + "'maybe' \\(in element flag at .*\\) is not a boolean value", + false); assertEquals(3, l.size()); @@ -226,12 +227,21 @@ List events = getInterceptedLogEvents(); - checkLoggingEvent(null, "Value 2 \\(at .*\\) is less than minimum value 5\\.", events); - checkLoggingEvent(null, "Value 12 \\(at .*\\) is greater than maximum value 10\\.", events); + checkLoggingEvent( + null, + "Value 2 \\(at .*\\) is less than minimum value 5\\.", + events, + false); + checkLoggingEvent( + null, + "Value 12 \\(at .*\\) is greater than maximum value 10\\.", + events, + false); checkLoggingEvent( null, "'fred' \\(in element int at .*\\) is not an integer value\\.", - events); + events, + false); assertEquals(5, l.size()); @@ -245,14 +255,14 @@ h = (IntHolder) l.get(2); assertEquals(10, h.getValue()); - - h = (IntHolder)l.get(3); - + + h = (IntHolder) l.get(3); + + assertEquals(6, h.getValue()); + + h = (IntHolder) l.get(3); + assertEquals(6, h.getValue()); - - h = (IntHolder)l.get(3); - - assertEquals(6, h.getValue()); } @@ -297,7 +307,10 @@ assertEquals("work", d.getKey()); assertEquals("${work}", d.getValue()); - checkLoggingEvent(RegistryImpl.class.getName(), "No value available for symbol 'work'"); + checkLoggingEvent( + RegistryImpl.class.getName(), + "No value available for symbol 'work'", + true); } public void testNoSchema() throws Exception @@ -334,24 +347,24 @@ assertEquals("message", d.getKey()); assertEquals("Some Damn Thing", d.getValue()); } - + public void testTranslatorClass() throws Exception - { - Registry r = buildRegistry("TranslatorClass.xml"); + { + Registry r = buildRegistry("TranslatorClass.xml"); - List l = r.getExtensionPointElements("hivemind.test.config.TranslatorClass"); + List l = r.getExtensionPointElements("hivemind.test.config.TranslatorClass"); - assertEquals(2, l.size()); + assertEquals(2, l.size()); - Datum d = (Datum) l.get(0); + Datum d = (Datum) l.get(0); - assertEquals("key1", d.getKey()); - assertEquals("VALUE1", d.getValue()); - assertNotNull(d.getLocation()); + assertEquals("key1", d.getKey()); + assertEquals("VALUE1", d.getValue()); + assertNotNull(d.getLocation()); - d = (Datum) l.get(1); + d = (Datum) l.get(1); - assertEquals("key2", d.getKey()); - assertEquals("VALUE2", d.getValue()); - } + assertEquals("key2", d.getKey()); + assertEquals("VALUE2", d.getValue()); + } } 1.5 +6 -1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/config/Symbols.xml Index: Symbols.xml =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/config/Symbols.xml,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- Symbols.xml 31 Jul 2003 21:06:25 -0000 1.4 +++ Symbols.xml 11 Aug 2003 17:45:28 -0000 1.5 @@ -24,4 +24,9 @@ <extension point-id="hivemind.SymbolSource"> <source class="hivemind.test.config.impl.MockSymbolSource"/> </extension> + + <extension point-id="hivemind.FactoryDefaults"> + <default symbol="dog" value="dino"/> + <default symbol="friend" value="george"/> + </extension> </module> 1.1 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/services/impl/ArrayServiceImpl.java Index: ArrayServiceImpl.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 hivemind.test.services.ArrayService; /** * Used to test code that ensures a return type that is an array works properly. * * @author Howard Lewis Ship * @version $Id: ArrayServiceImpl.java,v 1.1 2003/08/11 17:45:28 hlship Exp $ */ public class ArrayServiceImpl implements ArrayService { public String[] returnArrayType() { return new String[] { "alpha", "beta" }; } } 1.20 +3 -2 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/parse/TestDescriptorParser.java Index: TestDescriptorParser.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/parse/TestDescriptorParser.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- TestDescriptorParser.java 8 Aug 2003 13:51:10 -0000 1.19 +++ TestDescriptorParser.java 11 Aug 2003 17:45:28 -0000 1.20 @@ -359,7 +359,8 @@ checkLoggingEvent( DescriptorParser.class.getName(), - "Unknown attribute 'bad-attribute' in element module/extension-point/schema \\(at .*\\)"); + "Unknown attribute 'bad-attribute' in element module/extension-point/schema \\(at .*\\)", + false); } 1.14 +57 -1 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.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- hivemodule.xml 7 Aug 2003 15:51:43 -0000 1.13 +++ hivemodule.xml 11 Aug 2003 17:45:28 -0000 1.14 @@ -40,6 +40,62 @@ </extension-point> + <extension point-id="SymbolSource"> + + <source order="1000000" service-id="FactoryDefaultsSymbolSource"/> + + </extension> + + <extension-point id="FactoryDefaults"> + + <description> + Extension point for setting "factory defaults" for symbol values. + </description> + + <schema> + + <element name="default"> + + <description> + Provides a default symbol value. + </description> + + <attribute name="symbol" required="true"> + <description> + The id of the symbol to define a default value for. + </description> + </attribute> + + <attribute name="value" required="true"> + <description> + The value for the symbol. + </description> + </attribute> + + <rules> + <create-object class="org.apache.commons.hivemind.service.impl.FactoryDefault"/> + <read-attribute attribute="symbol" property="symbol"/> + <read-attribute attribute="value" property="value"/> + <invoke-parent method="addElement"/> + </rules> + </element> + + </schema> + + </extension-point> + + <service id="FactoryDefaultsSymbolSource" interface="org.apache.commons.hivemind.SymbolSource"> + <description> + SymbolSource implementation driven by the FactoryDefaults extension point. + </description> + + <invoke-factory service-id="BuilderFactory"> + <construct class="org.apache.commons.hivemind.service.impl.FactoryDefaultsSymbolSource"> + <set-extension-point point-id="FactoryDefaults" property="factoryDefaults"/> + </construct> + </invoke-factory> + </service> + <service id="ClassFactory" interface="org.apache.commons.hivemind.service.ClassFactory"> <description>Wrapper around Javassist used to dynamically create classes such as service interceptors.</description> 1.16 +17 -6 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/HiveMindTestCase.java Index: HiveMindTestCase.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/HiveMindTestCase.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- HiveMindTestCase.java 8 Aug 2003 13:51:09 -0000 1.15 +++ HiveMindTestCase.java 11 Aug 2003 17:45:28 -0000 1.16 @@ -277,25 +277,28 @@ /** * Checks to see if any logging event matches a given regexp pattern. */ - protected void checkLoggingEvent(String name, String pattern) throws Exception + protected void checkLoggingEvent(String name, String pattern, boolean exact) throws Exception { - checkLoggingEvent(name, pattern, getInterceptedLogEvents()); + checkLoggingEvent(name, pattern, getInterceptedLogEvents(), exact); } /** * Checks to see if any LoggingEvent in the list of events matches the name and message pattern. * @param name logger name to match or null to match all - * @param pattern regexp pattern to search for + * @param pattern regexp pattern or string to search for * @param event list of LoggingEvent to search. + * @param exact if true, then the actual message must exactly match the pattern (which is NOT a regexp pattern). If true, + * the message must match against pattern as a regexp pattern. */ - protected void checkLoggingEvent(String name, String pattern, List events) throws Exception + protected void checkLoggingEvent(String name, String pattern, List events, boolean exact) + throws Exception { if (_compiler == null) _compiler = new Perl5Compiler(); Pattern compiled = null; - if (_matcher == null) + if (_matcher == null & !exact) _matcher = new Perl5Matcher(); int count = events.size(); @@ -308,6 +311,14 @@ continue; String eventMessage = e.getMessage().toString(); + + if (exact) + { + if (eventMessage.indexOf(pattern) >= 0) + return; + + continue; + } if (compiled == null) compiled = _compiler.compile(pattern); 1.5 +5 -3 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/TestClassTranslator.java Index: TestClassTranslator.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/TestClassTranslator.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- TestClassTranslator.java 8 Aug 2003 13:51:10 -0000 1.4 +++ TestClassTranslator.java 11 Aug 2003 17:45:28 -0000 1.5 @@ -107,7 +107,8 @@ checkLoggingEvent( null, - "'bad.class.Name' is not a valid class name \\(at .*\\): Could not load class bad.class.Name"); + "'bad.class.Name' is not a valid class name \\(at .*\\): Could not load class bad.class.Name", + false); } public void testLocatable() throws Exception @@ -137,6 +138,7 @@ checkLoggingEvent( RuleUtils.class.getName(), - "Unable to set property value of [EMAIL PROTECTED] to {} \\(at datum/value\\): "); + "Unable to set property value of [EMAIL PROTECTED] to {} \\(at datum/value\\): ", + false); } } 1.3 +5 -3 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/TestEnumerationTranslator.java Index: TestEnumerationTranslator.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/TestEnumerationTranslator.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- TestEnumerationTranslator.java 8 Aug 2003 13:51:10 -0000 1.2 +++ TestEnumerationTranslator.java 11 Aug 2003 17:45:28 -0000 1.3 @@ -144,7 +144,8 @@ checkLoggingEvent( EnumerationTranslator.class.getName(), - "'fred' \\(at .*\\) is not a recognized enumerated value\\."); + "'fred' \\(at .*\\) is not a recognized enumerated value\\.", + false); } @@ -161,7 +162,8 @@ checkLoggingEvent( EnumerationTranslator.class.getName(), - "Unable to obtain value for static field java\\.lang\\.Boolean\\.HONEST_TO_GOD_TRUE:"); + "Unable to obtain value for static field java.lang.Boolean.HONEST_TO_GOD_TRUE:", + true); } } 1.2 +3 -2 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/TestExtensionPointTranslator.java Index: TestExtensionPointTranslator.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/rules/TestExtensionPointTranslator.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- TestExtensionPointTranslator.java 5 Aug 2003 00:50:36 -0000 1.1 +++ TestExtensionPointTranslator.java 11 Aug 2003 17:45:28 -0000 1.2 @@ -111,7 +111,8 @@ checkLoggingEvent( ExtensionPointTranslator.class.getName(), "Error accessing extension point hivemind\\.test\\.rules\\.missing \\(at .*\\): " - + "Extension point hivemind\\.test\\.rules\\.missing does not exist\\."); + + "Extension point hivemind\\.test\\.rules\\.missing does not exist\\.", + false); assertNull(h.getDatums()); } 1.2 +1 -2 jakarta-commons-sandbox/hivemind/src/test/hivemind/test/config/impl/test.properties Index: test.properties =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/hivemind/src/test/hivemind/test/config/impl/test.properties,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- test.properties 29 Jul 2003 22:20:49 -0000 1.1 +++ test.properties 11 Aug 2003 17:45:28 -0000 1.2 @@ -3,4 +3,3 @@ wife=wilma husband=fred friend=barney -dog=dino
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]