bloritsch 2002/09/25 08:10:53
Modified: fortress build.xml default.properties
fortress/src/java/org/apache/excalibur/fortress
DefaultContainerManager.java
Added: fortress/src/java/org/apache/excalibur/fortress/util
ComponentStateValidator.java
fortress/src/test/org/apache/excalibur/fortress/util/test
ComponentTestCase.java FullLifecycleComponent.java
Log:
make Util no longer necessary
Revision Changes Path
1.53 +0 -2 jakarta-avalon-excalibur/fortress/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-avalon-excalibur/fortress/build.xml,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- build.xml 25 Sep 2002 14:43:43 -0000 1.52
+++ build.xml 25 Sep 2002 15:10:53 -0000 1.53
@@ -20,7 +20,6 @@
<pathelement location="${excalibur-instrument-manager.jar}"/>
<pathelement location="${excalibur-instrument-manager-interfaces.jar}"/>
<pathelement location="${excalibur-event.jar}"/>
- <pathelement location="${excalibur-util.jar}"/>
<pathelement location="${excalibur-logger.jar}"/>
<pathelement location="${excalibur-sourceresolve.jar}"/>
<pathelement location="${excalibur-concurrent.jar}"/>
@@ -81,7 +80,6 @@
<copy file="${excalibur-instrument-manager.jar}"
todir="${build.dir}/tempjars"/>
<copy file="${excalibur-instrument-manager-interfaces.jar}"
todir="${build.dir}/tempjars"/>
<copy file="${excalibur-event.jar}" todir="${build.dir}/tempjars"/>
- <copy file="${excalibur-util.jar}" todir="${build.dir}/tempjars"/>
<copy file="${excalibur-logger.jar}" todir="${build.dir}/tempjars"/>
<copy file="${excalibur-sourceresolve.jar}" todir="${build.dir}/tempjars"/>
<copy file="${excalibur-concurrent.jar}" todir="${build.dir}/tempjars"/>
1.37 +0 -5 jakarta-avalon-excalibur/fortress/default.properties
Index: default.properties
===================================================================
RCS file: /home/cvs/jakarta-avalon-excalibur/fortress/default.properties,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- default.properties 19 Sep 2002 04:07:23 -0000 1.36
+++ default.properties 25 Sep 2002 15:10:53 -0000 1.37
@@ -53,11 +53,6 @@
excalibur-event.lib=${excalibur-event.home}
excalibur-event.jar=${excalibur-event.lib}/excalibur-event-1.0a.jar
-# ----- Excalibur util, version 1.0 or later -----
-excalibur-util.home=${basedir}/../util/dist
-excalibur-util.lib=${excalibur-util.home}
-excalibur-util.jar=${excalibur-util.lib}/excalibur-util-1.0.jar
-
# ----- Excalibur Source Resolver, version 1.0 or later -----
excalibur-sourceresolve.home=${basedir}/../sourceresolve/dist
excalibur-sourceresolve.lib=${excalibur-sourceresolve.home}
1.25 +2 -4
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/DefaultContainerManager.java
Index: DefaultContainerManager.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/DefaultContainerManager.java,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- DefaultContainerManager.java 17 Sep 2002 17:39:59 -0000 1.24
+++ DefaultContainerManager.java 25 Sep 2002 15:10:53 -0000 1.25
@@ -53,7 +53,6 @@
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.activity.Startable;
-import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
@@ -61,7 +60,6 @@
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.ConsoleLogger;
-import org.apache.avalon.framework.logger.NullLogger;
import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.parameters.Parameterizable;
@@ -69,7 +67,7 @@
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.excalibur.fortress.util.ContextManager;
-import org.apache.excalibur.util.ComponentStateValidator;
+import org.apache.excalibur.fortress.util.ComponentStateValidator;
/**
* The ContainerManager is a single point of contact to manage your Container
1.1
jakarta-avalon-excalibur/fortress/src/java/org/apache/excalibur/fortress/util/ComponentStateValidator.java
Index: ComponentStateValidator.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.excalibur.fortress.util;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.activity.Startable;
import org.apache.avalon.framework.activity.Suspendable;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.avalon.framework.component.Recomposable;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Reconfigurable;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.context.Recontextualizable;
import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.logger.Loggable;
import org.apache.avalon.framework.parameters.Parameterizable;
/**
* This class provides basic facilities for enforcing Avalon's contracts
* within your own code.
*
* Based on Avalon version from Sandbox.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Michael McKibben</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Leif Mortenson</a>
* @version CVS $Revision: 1.1 $ $Date: 2002/09/25 15:10:53 $
*/
public final class ComponentStateValidator
{
private static final String WRITE_FAIL = "Value is already bound";
// Interfaces
private static final long LOG_ENABLED = 0x00000001;
private static final long LOGGABLE = 0x00000002;
private static final long CONTEXTUALIZABLE = 0x00000004;
private static final long COMPOSABLE = 0x00000008;
private static final long SERVICEABLE = 0x00000010;
private static final long CONFIGURABLE = 0x00000020;
private static final long PARAMETERIZABLE = 0x00000040;
private static final long INITIALIZABLE = 0x00000080;
private static final long STARTABLE = 0x00000100;
private static final long SUSPENDABLE = 0x00001000;
private static final long RECONTEXTUALIZABLE = 0x00002000;
private static final long RECOMPOSABLE = 0x00004000;
private static final long RECONFIGURABLE = 0x00008000;
private static final long DISPOSABLE = 0x00100000;
// Initialization Methods.
private static final long ENABLE_LOGGING = 0x00000001;
private static final long SET_LOGGER = 0x00000002;
private static final long CONTEXTUALIZE = 0x00000004;
private static final long SERVICE = 0x00000008;
private static final long COMPOSE = 0x00000010;
private static final long CONFIGURE = 0x00000020;
private static final long PARAMETERIZE = 0x00000040;
private static final long INITIALIZE = 0x00000080;
private static final long START = 0x00000100;
private static final long INIT_COMPLETE = 0x00000400;
// Active Service Methods
private static final long SUSPEND = 0x00001000;
private static final long RECONTEXTUALIZE = 0x00002000;
private static final long RECOMPOSE = 0x00004000;
private static final long RECONFIGURE = 0x00008000;
private static final long RESUME = 0x00010000;
// Destruction Methods
private static final long STOP = 0x00100000;
private static final long DISPOSE = 0x00200000;
// Masks
private static final long INIT_MASK = ENABLE_LOGGING | SET_LOGGER |
CONTEXTUALIZE | COMPOSE | SERVICE | CONFIGURE | PARAMETERIZE | INITIALIZE |
START;
private final long m_interfaces;
private final long m_methods;
private long m_state;
private boolean m_active;
private final Object m_object;
/**
* Create state validator from object (this can be used for more than just
* components).
*/
public ComponentStateValidator( final Object object )
{
m_object = object;
long methods = 0;
long interfaces = 0;
if( object instanceof LogEnabled )
{
interfaces |= LOG_ENABLED;
methods |= ENABLE_LOGGING;
}
if( object instanceof Loggable )
{
interfaces |= LOGGABLE;
methods |= SET_LOGGER;
}
if( object instanceof Contextualizable )
{
interfaces |= CONTEXTUALIZABLE;
methods |= CONTEXTUALIZE;
}
if( object instanceof Serviceable )
{
interfaces |= SERVICEABLE;
methods |= SERVICE;
}
if( object instanceof Composable )
{
if ( (interfaces & SERVICEABLE) > 0 )
{
throw new IllegalStateException("Cannot implement Composable and
Serviceable together");
}
interfaces |= COMPOSABLE;
methods |= COMPOSE;
}
if( object instanceof Configurable )
{
interfaces |= CONFIGURABLE;
methods |= CONFIGURE;
}
if( object instanceof Parameterizable )
{
interfaces |= PARAMETERIZABLE;
methods |= PARAMETERIZE;
}
if( object instanceof Initializable )
{
interfaces |= INITIALIZABLE;
methods |= INITIALIZE;
}
if( object instanceof Startable )
{
interfaces |= STARTABLE;
methods |= START | STOP;
}
if( object instanceof Suspendable )
{
interfaces |= SUSPENDABLE;
methods |= SUSPEND | RESUME;
}
if( object instanceof Recontextualizable )
{
interfaces |= RECONTEXTUALIZABLE;
methods |= RECONTEXTUALIZE;
}
if( object instanceof Recomposable )
{
interfaces |= RECOMPOSABLE;
methods |= RECOMPOSE;
}
if( object instanceof Reconfigurable )
{
interfaces |= RECONFIGURABLE;
methods |= RECONFIGURE;
}
if( object instanceof Disposable )
{
interfaces |= DISPOSABLE;
methods |= DISPOSE;
}
m_methods = methods;
m_interfaces = interfaces;
generalCheckInitComplete();
}
private String getInterfaceName( long interfaceId )
{
if( interfaceId == LOG_ENABLED )
{
return LogEnabled.class.getName();
}
else if( interfaceId == LOGGABLE )
{
return Loggable.class.getName();
}
else if( interfaceId == CONTEXTUALIZABLE )
{
return Contextualizable.class.getName();
}
else if( interfaceId == SERVICEABLE )
{
return Serviceable.class.getName();
}
else if( interfaceId == COMPOSABLE )
{
return Composable.class.getName();
}
else if( interfaceId == CONFIGURABLE )
{
return Configurable.class.getName();
}
else if( interfaceId == PARAMETERIZABLE )
{
return Parameterizable.class.getName();
}
else if( interfaceId == INITIALIZABLE )
{
return Initializable.class.getName();
}
else if( interfaceId == STARTABLE )
{
return Startable.class.getName();
}
else if( interfaceId == SUSPENDABLE )
{
return Suspendable.class.getName();
}
else if( interfaceId == RECONTEXTUALIZABLE )
{
return Recontextualizable.class.getName();
}
else if( interfaceId == RECOMPOSABLE )
{
return Recomposable.class.getName();
}
else if( interfaceId == RECONFIGURABLE )
{
return Reconfigurable.class.getName();
}
else if( interfaceId == DISPOSABLE )
{
return Disposable.class.getName();
}
else
{
throw new IllegalStateException( "Unknown Interface Id " + interfaceId );
}
}
private String getMethodName( long methodId )
{
if( methodId == ENABLE_LOGGING )
{
return "enableLogging()";
}
else if( methodId == SET_LOGGER )
{
return "setLogger()";
}
else if( methodId == CONTEXTUALIZE )
{
return "contextualize()";
}
else if( methodId == SERVICE )
{
return "service()";
}
else if( methodId == COMPOSE )
{
return "compose()";
}
else if( methodId == CONFIGURE )
{
return "configure()";
}
else if( methodId == PARAMETERIZE )
{
return "parameterize()";
}
else if( methodId == INITIALIZE )
{
return "initialize()";
}
else if( methodId == START )
{
return "start()";
}
else if( methodId == SUSPEND )
{
return "suspend()";
}
else if( methodId == RECONTEXTUALIZE )
{
return "recontextualize()";
}
else if( methodId == RECOMPOSE )
{
return "recompose()";
}
else if( methodId == RECONFIGURE )
{
return "reconfigure()";
}
else if( methodId == RESUME )
{
return "resume()";
}
else if( methodId == STOP )
{
return "stop()";
}
else if( methodId == DISPOSE )
{
return "dispose()";
}
else
{
throw new IllegalStateException( "Unknown Method Id " + methodId );
}
}
private String getLastMethod( long state )
{
for( int i = 31; i >= 0; i-- )
{
long methodId = 0x1 << i;
if( ( state & methodId ) != 0 )
{
return getMethodName( methodId );
}
}
throw new IllegalStateException( "No last state method found for state " +
state );
}
/**
* Test to see if this was the last initialization method.
*/
private void generalCheckInitComplete()
{
if( m_state == ( m_methods & INIT_MASK ) )
{
// All init methods called
m_active = true;
}
}
/**
* Initialization methods must be called in order, must all be called, may
* not be called more than once, and may not be called once any of the
* Descruction methods have been called.
*/
private void generalCheckInit( final String message, final long interfaceId,
final long methodId )
{
if( ( m_interfaces & interfaceId ) == 0 )
{
// Interface not implemented
if( message == null )
{
throw new IllegalStateException( m_object.getClass().getName() +
" does not implement " +
getInterfaceName( interfaceId ) + "." );
}
else
{
throw new IllegalStateException( message );
}
}
else if( ( m_state & methodId ) > 0 )
{
// Method already called.
if( message == null )
{
throw new IllegalStateException( getMethodName( methodId ) + "
already called." );
}
else
{
throw new IllegalStateException( message );
}
}
else if( m_state > methodId )
{
// Method called after a descruction method was called.
if( message == null )
{
throw new IllegalStateException( getMethodName( methodId ) +
" can not be called after " +
getLastMethod( m_state ) + "." );
}
else
{
throw new IllegalStateException( message );
}
}
else if( ( m_state & ( methodId - 1 ) ) != ( m_methods & ( methodId - 1 ) ) )
{
// One or more of the methods that should have been called before
// this method was not.
if( message == null )
{
throw new IllegalStateException( getMethodName( methodId ) +
" called out of order. " +
getLastMethod( m_methods & ( methodId - 1 ) ) +
" must be called first." );
}
else
{
throw new IllegalStateException( message );
}
}
// Add this method to the state
m_state |= methodId;
// See if the initialization is complete.
generalCheckInitComplete();
}
/**
* Active Service methods may only be called after all of the
* Initialization methods have been called, any before any of the
* Descruction methods have been called. While in the active state,
* the contracts of the methods allow the active state methods to be
* called any number of times, in any order.
* The resume() method should do nothing if suspend() has not yet been
* called for example.
*/
private void generalCheckActive( final String message, final long interfaceId,
final long methodId )
{
if( ( m_interfaces & interfaceId ) == 0 )
{
// Interface not implemented
if( message == null )
{
throw new IllegalStateException( m_object.getClass().getName() +
" does not implement " +
getInterfaceName( interfaceId ) + "." );
}
else
{
throw new IllegalStateException( message );
}
}
else if( !m_active )
{
// Component not in the active state.
if( m_state < INIT_COMPLETE )
{
// Still expecting initialization methods.
if( message == null )
{
throw new IllegalStateException( getMethodName( methodId ) +
" called before component was
made active. " +
getLastMethod( m_methods & (
INIT_COMPLETE - 1 ) ) +
" must be called first." );
}
else
{
throw new IllegalStateException( message );
}
}
else
{
// One or more destruction methods have been called.
if( message == null )
{
throw new IllegalStateException( getMethodName( methodId ) +
" called after component was
made inactive. Cannot call after " +
getLastMethod( m_state ) + "."
);
}
else
{
throw new IllegalStateException( message );
}
}
}
}
/**
* Descruction Methods must be called in order. They may be called before
* all of the Initialization methods have been called if there was an
* error.
*/
private void generalCheckDest( final String message, final long interfaceId,
final long methodId )
{
if( ( m_interfaces & interfaceId ) == 0 )
{
// Interface not implemented
if( message == null )
{
throw new IllegalStateException( m_object.getClass().getName() +
" does not implement " +
getInterfaceName( interfaceId ) + "." );
}
else
{
throw new IllegalStateException( message );
}
}
else if( m_state > methodId )
{
// Method called after a later descruction method was called.
if( message == null )
{
throw new IllegalStateException( getMethodName( methodId ) +
" can not be called after " +
getLastMethod( m_state ) + "." );
}
else
{
throw new IllegalStateException( message );
}
}
// Add this method to the state
m_state |= methodId;
// Deactivate
m_active = false;
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the ENABLE_LOGGING state has already been set, if the component implements
* LogEnabled, and if the state has progressed beyond the Logger stage.
*
* @throws IllegalStateException if the state is manage out of order
*/
public void checkLogEnabled()
{
checkLogEnabled( null );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the ENABLE_LOGGING state has already been set, if the component implements
* LogEnabled, and if the state has progressed beyond the Logger stage.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkLogEnabled( final String message )
{
generalCheckInit( message, LOG_ENABLED, ENABLE_LOGGING );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the SET_LOGGER state has already been set, if the component implements
* Loggable, and if the state has progressed beyond the Logger stage.
*
* @throws IllegalStateException if the state is manage out of order
*/
public void checkLoggable()
{
checkLogEnabled( null );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the SET_LOGGER state has already been set, if the component implements
* Loggable, and if the state has progressed beyond the Logger stage.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkLoggable( final String message )
{
generalCheckInit( message, LOGGABLE, SET_LOGGER );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the CONTEXTUALIZED state has already been set, if the component implements
* Contextualizable, and if the state has progressed beyond the Context stage.
*
* @throws IllegalStateException if the state is manage out of order
*/
public void checkContextualized()
{
checkContextualized( null );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the CONTEXTUALIZED state has already been set, if the component implements
* Contextualizable, and if the state has progressed beyond the Context stage.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkContextualized( final String message )
{
generalCheckInit( message, CONTEXTUALIZABLE, CONTEXTUALIZE );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the SERVICE state has already been set, if the component implements
* Composable, and if the state has progressed beyond the Configuration stage.
*
* @throws IllegalStateException if the state is manage out of order
*/
public void checkServiced()
{
checkServiced( null );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the SERVICE state has already been set, if the component implements
* Composable, and if the state has progressed beyond the Configuration stage.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkServiced( final String message )
{
generalCheckInit( message, SERVICEABLE, SERVICE );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the COMPOSED state has already been set, if the component implements
* Composable, and if the state has progressed beyond the Configuration stage.
*
* @throws IllegalStateException if the state is manage out of order
*/
public void checkComposed()
{
checkComposed( null );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the COMPOSED state has already been set, if the component implements
* Composable, and if the state has progressed beyond the Configuration stage.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkComposed( final String message )
{
generalCheckInit( message, COMPOSABLE, COMPOSE );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the CONFIGURED state has already been set, if the component implements
* Configurable, and if the state has progressed beyond the Configuration stage.
*
* @throws IllegalStateException if the state is manage out of order
*/
public void checkConfigured()
{
checkConfigured( null );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the CONFIGURED state has already been set, if the component implements
* Configurable, and if the state has progressed beyond the Configuration stage.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkConfigured( final String message )
{
generalCheckInit( message, CONFIGURABLE, CONFIGURE );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the PARAMETERIZED state has already been set, if the component implements
* Parameterizable, and if the state has progressed beyond the Parameters stage.
*
* @throws IllegalStateException if the state is manage out of order
*/
public void checkParameterized()
{
checkParameterized( null );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the PARAMETERIZED state has already been set, if the component implements
* Parameterizable, and if the state has progressed beyond the Parameters stage.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkParameterized( final String message )
{
generalCheckInit( message, PARAMETERIZABLE, PARAMETERIZE );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the INITIALIZED state has already been set, if the component implements
* Initializable, and if the state has progressed beyond the
<code>initialize</code> stage.
*
* @throws IllegalStateException if the state is manage out of order
*/
public void checkInitialized()
{
checkInitialized( null );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the INITIALIZED state has already been set, if the component implements
* Initializable, and if the state has progressed beyond the
<code>initialize</code> stage.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkInitialized( final String message )
{
generalCheckInit( message, INITIALIZABLE, INITIALIZE );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the STARTED state has already been set, if the component implements
* Startable, and if the state has progressed beyond the <code>start</code>
stage.
*
* @throws IllegalStateException if the state is manage out of order
*/
public void checkStarted()
{
checkStarted( null );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the STARTED state has already been set, if the component implements
* Startable, and if the state has progressed beyond the <code>start</code>
stage.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkStarted( final String message )
{
generalCheckInit( message, STARTABLE, START );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the SUSPENDED state has already been set, if the component implements
* Suspendable, and if the Component is active.
*
* @throws IllegalStateException if the state is manage out of order
*/
public void checkSuspended()
{
checkSuspended( null );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the SUSPENDED state has already been set, if the component implements
* Suspendable, and if the Component is active.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkSuspended( final String message )
{
generalCheckActive( message, SUSPENDABLE, SUSPEND );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the SUSPENDED state has not been set, if the component implements
* Suspendable, and if the Component is active.
*
* @throws IllegalStateException if the state is manage out of order
*/
public void checkResumed()
{
checkResumed( null );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the SUSPENDED state has not been set, if the component implements
* Suspendable, and if the Component is active.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkResumed( final String message )
{
generalCheckActive( message, SUSPENDABLE, RESUME );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the STOPPED state has not been set, if the component implements
* Startable, and if the Component is active.
*
* @throws IllegalStateException if the state is manage out of order
*/
public void checkStopped()
{
checkStopped( null );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the STOPPED state has not been set, if the component implements
* Startable, and if the Component is active.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkStopped( final String message )
{
generalCheckDest( message, STARTABLE, STOP );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the DISPOSED state has not been set, if the component implements
* Disposable.
*
* @throws IllegalStateException if the state is manage out of order
*/
public void checkDisposed()
{
checkDisposed( null );
}
/**
* Throw an exception if the initialization is out of order. It tests to see
* if the DISPOSED state has not been set, if the component implements
* Disposable.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkDisposed( final String message )
{
generalCheckDest( message, DISPOSABLE, DISPOSE );
}
/**
* Checks to see if the state is active.
*
* @throws IllegalStateException if the component is not active
*/
public void checkActive()
{
checkActive( null );
}
/**
* Checks to see if the state is active.
*
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the component is not active
*/
public void checkActive( final String message )
{
if( isActive() )
{
return;
}
// Component not in the active state.
if( m_state < INIT_COMPLETE )
{
// Still expecting initialization methods.
if( message == null )
{
throw new IllegalStateException( "Component not in the active state.
" +
getLastMethod( m_methods & (
INIT_COMPLETE - 1 ) ) +
" was not called." );
}
else
{
throw new IllegalStateException( message );
}
}
else
{
// One or more destruction methods have been called.
if( message == null )
{
throw new IllegalStateException( "Component not in the active state
because " +
getLastMethod( m_state ) + " was
called." );
}
else
{
throw new IllegalStateException( message );
}
}
}
/**
* Checks to see if the state is active, and returns true or false.
*
* @return <code>true</code> if active, <code>false</code> if not
*/
public boolean isActive()
{
return m_active;
}
/**
* Make sure object has not been assigned yet.
*
* @param object to test
* @throws IllegalStateException if the state is manage out of order
*/
public void checkNotAssigned( final Object object )
{
checkNotAssigned( object, WRITE_FAIL );
}
/**
* Make sure object has not been assigned yet.
*
* @param object to test
* @param message the message to include in the thrown exception
* @throws IllegalStateException if the state is manage out of order
*/
public void checkNotAssigned( final Object object, final String message )
{
if( null != object )
{
throw new IllegalStateException( message );
}
}
}
1.1
jakarta-avalon-excalibur/fortress/src/test/org/apache/excalibur/fortress/util/test/ComponentTestCase.java
Index: ComponentTestCase.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.excalibur.fortress.util.test;
import junit.framework.TestCase;
import org.apache.avalon.framework.component.DefaultComponentManager;
import org.apache.avalon.framework.configuration.DefaultConfiguration;
import org.apache.avalon.framework.context.DefaultContext;
import org.apache.avalon.framework.logger.NullLogger;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.excalibur.fortress.util.test.FullLifecycleComponent;
/**
* This class provides basic facilities for enforcing Avalon's contracts
* within your own code.
*
* @author <a href="[EMAIL PROTECTED]">Berin Loritsch</a>
* @version CVS $Revision: 1.1 $ $Date: 2002/09/25 15:10:53 $
*/
public final class ComponentTestCase
extends TestCase
{
public ComponentTestCase( String test )
{
super( test );
}
public void testCorrectLifecycle()
throws Exception
{
FullLifecycleComponent component = new FullLifecycleComponent();
component.enableLogging( new NullLogger() );
component.contextualize( new DefaultContext() );
component.compose( new DefaultComponentManager() );
component.configure( new DefaultConfiguration( "", "" ) );
component.parameterize( new Parameters() );
component.initialize();
component.start();
component.suspend();
component.resume();
component.stop();
component.dispose();
}
public void testMissingLogger()
throws Exception
{
FullLifecycleComponent component = new FullLifecycleComponent();
try
{
component.contextualize( new DefaultContext() );
}
catch( Exception e )
{
return;
}
fail( "Did not detect missing logger" );
}
public void testOutOfOrderInitialize()
throws Exception
{
FullLifecycleComponent component = new FullLifecycleComponent();
component.enableLogging( new NullLogger() );
component.contextualize( new DefaultContext() );
component.compose( new DefaultComponentManager() );
try
{
component.initialize();
component.parameterize( new Parameters() );
}
catch( Exception e )
{
return;
}
fail( "Did not detect out of order initialization" );
}
public void testOutOfOrderDispose()
throws Exception
{
FullLifecycleComponent component = new FullLifecycleComponent();
component.enableLogging( new NullLogger() );
component.contextualize( new DefaultContext() );
component.compose( new DefaultComponentManager() );
component.configure( new DefaultConfiguration( "", "" ) );
component.parameterize( new Parameters() );
component.initialize();
component.start();
component.suspend();
component.resume();
try
{
component.dispose();
component.stop();
}
catch( Exception e )
{
return;
}
fail( "Did not detect out of order disposal" );
}
public void testDoubleAssignOfLogger()
{
FullLifecycleComponent component = new FullLifecycleComponent();
try
{
component.enableLogging( new NullLogger() );
component.enableLogging( new NullLogger() );
}
catch( Exception e )
{
// test successfull
return;
}
fail( "Did not detect double assignment of Logger" );
}
public void testDoubleAssignOfContext()
{
FullLifecycleComponent component = new FullLifecycleComponent();
component.enableLogging( new NullLogger() );
try
{
component.contextualize( new DefaultContext() );
component.contextualize( new DefaultContext() );
}
catch( Exception e )
{
// test successfull
return;
}
fail( "Did not detect double assignment of Context" );
}
public void testDoubleAssignOfParameters()
throws Exception
{
FullLifecycleComponent component = new FullLifecycleComponent();
component.enableLogging( new NullLogger() );
component.contextualize( new DefaultContext() );
component.compose( new DefaultComponentManager() );
component.configure( new DefaultConfiguration( "", "" ) );
try
{
component.parameterize( new Parameters() );
component.parameterize( new Parameters() );
}
catch( Exception e )
{
// test successfull
return;
}
fail( "Did not detect double assignment of Parameters" );
}
public void testDoubleAssignOfConfiguration() throws Exception
{
FullLifecycleComponent component = new FullLifecycleComponent();
component.enableLogging( new NullLogger() );
component.contextualize( new DefaultContext() );
component.compose( new DefaultComponentManager() );
try
{
component.configure( new DefaultConfiguration( "", "" ) );
component.configure( new DefaultConfiguration( "", "" ) );
}
catch( Exception e )
{
// test successfull
return;
}
fail( "Did not detect double assignment of Configuration" );
}
public void testDoubleAssignOfComponentManger()
throws Exception
{
FullLifecycleComponent component = new FullLifecycleComponent();
component.enableLogging( new NullLogger() );
component.contextualize( new DefaultContext() );
try
{
component.compose( new DefaultComponentManager() );
component.compose( new DefaultComponentManager() );
}
catch( Exception e )
{
// test successfull
return;
}
fail( "Did not detect double assignment of ComponentLocator" );
}
}
1.1
jakarta-avalon-excalibur/fortress/src/test/org/apache/excalibur/fortress/util/test/FullLifecycleComponent.java
Index: FullLifecycleComponent.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.excalibur.fortress.util.test;
import org.apache.excalibur.fortress.util.ComponentStateValidator;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.activity.Startable;
import org.apache.avalon.framework.activity.Suspendable;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.parameters.ParameterException;
import org.apache.avalon.framework.parameters.Parameterizable;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.framework.thread.ThreadSafe;
/**
* This test class is used to test the AbstractComponent facilities for you.
*
* @author <a href="[EMAIL PROTECTED]">Berin Loritsch</a>
* @version CVS $Revision: 1.1 $ $Date: 2002/09/25 15:10:53 $
*/
public final class FullLifecycleComponent
implements LogEnabled, Contextualizable, Parameterizable, Configurable,
Composable, Initializable, Startable, Suspendable, Disposable,
ThreadSafe
{
private ComponentStateValidator m_validator = new ComponentStateValidator( this
);
private Logger m_logger;
private Context m_context;
private Parameters m_parameters;
private Configuration m_configuration;
private ComponentManager m_componentManager;
public void enableLogging( Logger logger )
{
m_validator.checkNotAssigned( m_logger );
m_validator.checkLogEnabled();
m_logger = logger;
}
public void contextualize( Context context )
throws ContextException
{
m_validator.checkNotAssigned( m_context );
m_validator.checkContextualized();
m_context = context;
}
public void parameterize( Parameters params )
throws ParameterException
{
m_validator.checkNotAssigned( m_parameters );
m_validator.checkParameterized();
m_parameters = params;
}
public void configure( Configuration config )
throws ConfigurationException
{
m_validator.checkNotAssigned( m_configuration );
m_validator.checkConfigured();
m_configuration = config;
}
public void compose( ComponentManager manager )
throws ComponentException
{
m_validator.checkNotAssigned( m_componentManager );
m_validator.checkComposed();
}
public void initialize()
throws Exception
{
m_validator.checkInitialized();
}
public void start()
throws Exception
{
m_validator.checkStarted();
}
public void suspend()
{
m_validator.checkSuspended();
}
public void resume()
{
m_validator.checkResumed();
}
public void stop()
throws Exception
{
m_validator.checkStopped();
}
public void dispose()
{
m_validator.checkDisposed();
m_logger = null;
m_context = null;
m_parameters = null;
m_configuration = null;
m_componentManager = null;
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>