Browse Source

Introduce the concept of a PropertyStore. The PropertyStore is where all the properties are stored (oh der!) and it is where things like immutability, scoping and so forth are controlled from.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272257 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 23 years ago
parent
commit
42c6021a9e
8 changed files with 419 additions and 101 deletions
  1. +251
    -0
      proposal/myrmidon/src/java/org/apache/myrmidon/components/store/DefaultPropertyStore.java
  2. +5
    -0
      proposal/myrmidon/src/java/org/apache/myrmidon/components/store/Resources.properties
  3. +45
    -83
      proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java
  4. +20
    -15
      proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java
  5. +3
    -1
      proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/model/NameValidator.java
  6. +86
    -0
      proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/store/PropertyStore.java
  7. +4
    -1
      proposal/myrmidon/src/test/org/apache/myrmidon/components/configurer/test/DefaultConfigurerTestCase.java
  8. +5
    -1
      proposal/myrmidon/src/test/org/apache/myrmidon/components/property/test/AbstractPropertyResolverTestCase.java

+ 251
- 0
proposal/myrmidon/src/java/org/apache/myrmidon/components/store/DefaultPropertyStore.java View File

@@ -0,0 +1,251 @@
/*
* 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.myrmidon.components.store;

import java.io.File;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.myrmidon.api.TaskContext;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.interfaces.model.DefaultNameValidator;
import org.apache.myrmidon.interfaces.model.NameValidator;
import org.apache.myrmidon.interfaces.store.PropertyStore;

/**
* This is the Default implementation of PropertyStore. It follows
* the following rules;
*
* <ul>
* <li>The property names must pass DefaultNameValidator checks</li>
* <li>The store is mutable</li>
* <li>If the key is TaskContext.NAME then value must be a string.</li>
* <li>If the key is TaskContext.BASE_DIRECTORY then value must be a key.</li>
* </ul>
*
* @author <a href="mailto:peter@apache.org">Peter Donald</a>
* @version $Revision$ $Date$
* @see PropertyStore
*/
public class DefaultPropertyStore
implements PropertyStore
{
private final static Resources REZ =
ResourceManager.getPackageResources( DefaultPropertyStore.class );

/**
* The parent store (may be null).
*/
private final PropertyStore m_parent;

/**
* The name validator to check property names against.
*/
private final NameValidator m_validator;

/**
* The underlying map where propertys are actually stored.
*/
private final Map m_contextData = new Hashtable();

/**
* Construct a PropertyStore with no parent and
* default name-validator.
*/
public DefaultPropertyStore()
{
this( null, null );
}

/**
* Construct a PropertyStore with specified parent.
*
* @param parent the parent PropertyStore (may be null)
*/
public DefaultPropertyStore( final PropertyStore parent,
final NameValidator validator )
{
m_parent = parent;

NameValidator candidateValidator = validator;
if( null == candidateValidator )
{
candidateValidator = createDefaultNameValidator();
}

m_validator = candidateValidator;

}

/**
* Set the property with specified name to specified value.
* The specific implementation will apply various rules
* before setting the property.
*
* @param name the name of property
* @param value the value of property
* @throws Exception if property can not be set
*/
public void setProperty( final String name, final Object value )
throws Exception
{
checkPropertyName( name );
checkPropertyValid( name, value );

if ( value == null )
{
m_contextData.remove( name );
}
else
{
m_contextData.put( name, value );
}
}

/**
* Return <code>true</code> if the specified property is set.
*
* @param name the name of property
*/
public boolean isPropertySet( final String name )
{
try
{
final Object value = getProperty( name );
if( null != value )
{
return true;
}
}
catch( Exception e )
{
}
return false;
}

/**
* Retrieve the value of specified property.
* Will return null if no such property exists.
*
* @param name the name of the property
* @return the value of the property, or null if no such property
* @throws Exception if theres an error retrieving property, such
* as an invalid property name
*/
public Object getProperty( String name )
throws Exception
{
Object value = m_contextData.get( name );
if( value == null && m_parent != null )
{
value = m_parent.getProperty( name );
}
return value;
}

/**
* Retrieve a copy of all the properties that are "in-scope"
* for store.
*
* @return a copy of all the properties that are "in-scope"
* for store.
* @throws Exception if theres an error retrieving propertys
*/
public Map getProperties()
throws Exception
{
final Map properties = new HashMap();
if( m_parent != null )
{
properties.putAll( m_parent.getProperties() );
}
properties.putAll( m_contextData );
return properties;
}

/**
* Return a child PropertyStore with specified name.
* This is to allow support for scoped stores. However a
* store may choose to be unscoped and just return a
* reference to itself.
*
* @param name the name of child store
* @return the child store
* @throws Exception if theres an error creating child store
*/
public PropertyStore createChildStore( final String name )
throws Exception
{
final DefaultPropertyStore store = new DefaultPropertyStore( this, m_validator );

final String newName = getProperty( TaskContext.NAME ) + "." + name;
store.setProperty( TaskContext.NAME, newName );

return store;
}

/**
* Checks that the supplied property name is valid.
*/
private void checkPropertyName( final String name )
throws TaskException
{
try
{
m_validator.validate( name );
}
catch( Exception e )
{
String message = REZ.getString( "bad-property-name.error" );
throw new TaskException( message, e );
}
}

/**
* Make sure property is valid if it is one of the "magic" properties.
*
* @param name the name of property
* @param value the value of proeprty
* @exception TaskException if an error occurs
*/
private void checkPropertyValid( final String name, final Object value )
throws TaskException
{
if( TaskContext.BASE_DIRECTORY.equals( name ) && !( value instanceof File ) )
{
final String message =
REZ.getString( "bad-property.error",
TaskContext.BASE_DIRECTORY,
File.class.getName() );
throw new TaskException( message );
}
else if( TaskContext.NAME.equals( name ) && !( value instanceof String ) )
{
final String message =
REZ.getString( "bad-property.error",
TaskContext.NAME,
String.class.getName() );
throw new TaskException( message );
}
}

/**
* Create an instance of the default the name validator.
*
* @return the default NameValidator
*/
private static NameValidator createDefaultNameValidator()
{
final DefaultNameValidator defaultValidator = new DefaultNameValidator();
defaultValidator.setAllowInternalWhitespace( false );
defaultValidator.setAdditionalInternalCharacters( "_-.+" );
return defaultValidator;
}
}

+ 5
- 0
proposal/myrmidon/src/java/org/apache/myrmidon/components/store/Resources.properties View File

@@ -0,0 +1,5 @@
unknown-prop.error=Unknown property {0}.
bad-property.error=Property {0} must have a value of type {1}.
bad-property-name.error=Invalid property name.
null-resolved-value.error=Value "{0}" resolved to null.
bad-resolve.error=Unable to resolve value "{0}".

+ 45
- 83
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java View File

@@ -8,19 +8,18 @@
package org.apache.myrmidon.components.workspace; package org.apache.myrmidon.components.workspace;


import java.io.File; import java.io.File;
import java.util.Hashtable;
import java.util.Map; import java.util.Map;
import java.util.HashMap;
import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.excalibur.io.FileUtil; import org.apache.avalon.excalibur.io.FileUtil;
import org.apache.avalon.framework.logger.Logger; import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.service.DefaultServiceManager;
import org.apache.avalon.framework.service.ServiceException; import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager; import org.apache.avalon.framework.service.ServiceManager;
import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.api.TaskContext;
import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.interfaces.model.DefaultNameValidator;
import org.apache.myrmidon.interfaces.property.PropertyResolver; import org.apache.myrmidon.interfaces.property.PropertyResolver;
import org.apache.myrmidon.interfaces.store.PropertyStore;


/** /**
* Default implementation of TaskContext. * Default implementation of TaskContext.
@@ -34,33 +33,35 @@ public class DefaultTaskContext
private static final Resources REZ = private static final Resources REZ =
ResourceManager.getPackageResources( DefaultTaskContext.class ); ResourceManager.getPackageResources( DefaultTaskContext.class );


// Property name validator allows digits, but no internal whitespace.
private static DefaultNameValidator c_propertyNameValidator =
new DefaultNameValidator();

static
{
c_propertyNameValidator.setAllowInternalWhitespace( false );
c_propertyNameValidator.setAdditionalInternalCharacters( "_-.+" );
}

private final Map m_contextData = new Hashtable();
private final TaskContext m_parent;
private final ServiceManager m_serviceManager; private final ServiceManager m_serviceManager;
private final Logger m_logger; private final Logger m_logger;
private final PropertyStore m_store;
private PropertyResolver m_propertyResolver; private PropertyResolver m_propertyResolver;


/** /**
* Constructor that takes both parent context and a service directory. * Constructor that takes both parent context and a service directory.
*/ */
public DefaultTaskContext( final TaskContext parent,
final ServiceManager serviceManager,
final Logger logger )
public DefaultTaskContext( final ServiceManager serviceManager,
final Logger logger,
final PropertyStore store )
throws TaskException throws TaskException
{ {
m_parent = parent;
m_serviceManager = serviceManager; m_serviceManager = serviceManager;
m_logger = logger; m_logger = logger;
m_store = store;

if( null == m_serviceManager )
{
throw new NullPointerException( "serviceManager" );
}
if( null == m_logger )
{
throw new NullPointerException( "logger" );
}
if( null == m_store )
{
throw new NullPointerException( "store" );
}
} }


/** /**
@@ -96,8 +97,8 @@ public class DefaultTaskContext
public Object getService( final Class serviceClass ) public Object getService( final Class serviceClass )
throws TaskException throws TaskException
{ {
// Try this context first
final String name = serviceClass.getName(); final String name = serviceClass.getName();
//Note that this will chain up to parent ServiceManagers (if any)
if( null != m_serviceManager && m_serviceManager.hasService( name ) ) if( null != m_serviceManager && m_serviceManager.hasService( name ) )
{ {
try try
@@ -110,12 +111,6 @@ public class DefaultTaskContext
} }
} }


// Try parent
if( null != m_parent )
{
return m_parent.getService( serviceClass );
}

// Not found // Not found
final String message = REZ.getString( "bad-find-service.error", name ); final String message = REZ.getString( "bad-find-service.error", name );
throw new TaskException( message ); throw new TaskException( message );
@@ -179,12 +174,14 @@ public class DefaultTaskContext
*/ */
public Object getProperty( final String name ) public Object getProperty( final String name )
{ {
Object value = m_contextData.get( name );
if( value == null && m_parent != null )
try
{
return m_store.getProperty( name );
}
catch( final Exception e )
{ {
value = m_parent.getProperty( name );
return null;
} }
return value;
} }


/** /**
@@ -193,14 +190,16 @@ public class DefaultTaskContext
* @return the map of all property names to values * @return the map of all property names to values
*/ */
public Map getProperties() public Map getProperties()
throws TaskException
{ {
Map props = new HashMap();
if( m_parent != null )
try
{
return m_store.getProperties();
}
catch( final Exception e )
{ {
props.putAll( m_parent.getProperties() );
throw new TaskException( e.getMessage(), e );
} }
props.putAll( m_contextData );
return props;
} }


/** /**
@@ -212,16 +211,13 @@ public class DefaultTaskContext
public void setProperty( final String name, final Object value ) public void setProperty( final String name, final Object value )
throws TaskException throws TaskException
{ {
checkPropertyName( name );
checkPropertyValid( name, value );

if ( value == null )
try
{ {
m_contextData.remove( name );
m_store.setProperty( name, value );
} }
else
catch( final Exception e )
{ {
m_contextData.put( name, value );
throw new TaskException( e.getMessage(), e );
} }
} }


@@ -390,53 +386,19 @@ public class DefaultTaskContext
*/ */
public TaskContext createSubContext( final String name ) public TaskContext createSubContext( final String name )
throws TaskException throws TaskException
{
final DefaultTaskContext context =
new DefaultTaskContext( this, m_serviceManager, m_logger );

context.setProperty( TaskContext.NAME, getName() + "." + name );
context.setProperty( TaskContext.BASE_DIRECTORY, getBaseDirectory() );

return context;
}

/**
* Checks that the supplied property name is valid.
*/
private void checkPropertyName( final String name ) throws TaskException
{ {
try try
{ {
c_propertyNameValidator.validate( name );
}
catch( Exception e )
{
String message = REZ.getString( "bad-property-name.error" );
throw new TaskException( message, e );
}
}
final PropertyStore store = m_store.createChildStore( name );
final DefaultServiceManager serviceManager =
new DefaultServiceManager( m_serviceManager );
final Logger logger = m_logger.getChildLogger( name );


/**
* Make sure property is valid if it is one of the "magic" properties.
*
* @param name the name of property
* @param value the value of proeprty
* @exception TaskException if an error occurs
*/
private void checkPropertyValid( final String name, final Object value )
throws TaskException
{
if( BASE_DIRECTORY.equals( name ) && !( value instanceof File ) )
{
final String message =
REZ.getString( "bad-property.error", BASE_DIRECTORY, File.class.getName() );
throw new TaskException( message );
return new DefaultTaskContext( serviceManager, logger, store );
} }
else if( NAME.equals( name ) && !( value instanceof String ) )
catch( final Exception e )
{ {
final String message =
REZ.getString( "bad-property.error", NAME, String.class.getName() );
throw new TaskException( message );
throw new TaskException( e.getMessage(), e );
} }
} }
} }

+ 20
- 15
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java View File

@@ -37,7 +37,9 @@ import org.apache.myrmidon.interfaces.model.Target;
import org.apache.myrmidon.interfaces.model.TypeLib; import org.apache.myrmidon.interfaces.model.TypeLib;
import org.apache.myrmidon.interfaces.type.TypeManager; import org.apache.myrmidon.interfaces.type.TypeManager;
import org.apache.myrmidon.interfaces.workspace.Workspace; import org.apache.myrmidon.interfaces.workspace.Workspace;
import org.apache.myrmidon.interfaces.store.PropertyStore;
import org.apache.myrmidon.listeners.ProjectListener; import org.apache.myrmidon.listeners.ProjectListener;
import org.apache.myrmidon.components.store.DefaultPropertyStore;


/** /**
* This is the default implementation of Workspace. * This is the default implementation of Workspace.
@@ -56,7 +58,7 @@ public class DefaultWorkspace
private ProjectListenerSupport m_listenerSupport = new ProjectListenerSupport(); private ProjectListenerSupport m_listenerSupport = new ProjectListenerSupport();
private ServiceManager m_serviceManager; private ServiceManager m_serviceManager;
private Parameters m_parameters; private Parameters m_parameters;
private TaskContext m_baseContext;
private PropertyStore m_baseStore;
private HashMap m_entries = new HashMap(); private HashMap m_entries = new HashMap();
private TypeManager m_typeManager; private TypeManager m_typeManager;
private Deployer m_deployer; private Deployer m_deployer;
@@ -105,7 +107,7 @@ public class DefaultWorkspace
public void initialize() public void initialize()
throws Exception throws Exception
{ {
m_baseContext = createBaseContext();
m_baseStore = createBaseStore();
} }


/** /**
@@ -128,22 +130,22 @@ public class DefaultWorkspace
m_listenerSupport.projectFinished( project.getProjectName() ); m_listenerSupport.projectFinished( project.getProjectName() );
} }


private TaskContext createBaseContext()
throws TaskException
private PropertyStore createBaseStore()
throws Exception
{ {
final TaskContext context = new DefaultTaskContext( null, null, null );
final DefaultPropertyStore store = new DefaultPropertyStore();


final String[] names = m_parameters.getNames(); final String[] names = m_parameters.getNames();
for( int i = 0; i < names.length; i++ ) for( int i = 0; i < names.length; i++ )
{ {
final String value = m_parameters.getParameter( names[ i ], null ); final String value = m_parameters.getParameter( names[ i ], null );
context.setProperty( names[ i ], value );
store.setProperty( names[ i ], value );
} }


//Add system properties so that they overide user-defined properties //Add system properties so that they overide user-defined properties
addToContext( context, System.getProperties() );
addToStore( store, System.getProperties() );


return context;
return store;
} }


private File findTypeLib( final String libraryName ) private File findTypeLib( final String libraryName )
@@ -250,9 +252,12 @@ public class DefaultWorkspace
final Logger logger = final Logger logger =
new RoutingLogger( getLogger(), m_listenerSupport ); new RoutingLogger( getLogger(), m_listenerSupport );


// Create and configure the context
//TODO: Put this in Execution Frame
final PropertyStore store = m_baseStore.createChildStore("");

// Create and configure the context
final DefaultTaskContext context = final DefaultTaskContext context =
new DefaultTaskContext( m_baseContext, serviceManager, logger );
new DefaultTaskContext( serviceManager, logger, store );
context.setProperty( TaskContext.BASE_DIRECTORY, project.getBaseDirectory() ); context.setProperty( TaskContext.BASE_DIRECTORY, project.getBaseDirectory() );


final DefaultExecutionFrame frame = final DefaultExecutionFrame frame =
@@ -467,13 +472,13 @@ public class DefaultWorkspace
} }


/** /**
* Helper method to add values to a context
* Helper method to add values to a store.
* *
* @param context the context
* @param store the store
* @param map the map of names->values * @param map the map of names->values
*/ */
private void addToContext( final TaskContext context, final Map map )
throws TaskException
private void addToStore( final PropertyStore store, final Map map )
throws Exception
{ {
final Iterator keys = map.keySet().iterator(); final Iterator keys = map.keySet().iterator();


@@ -481,7 +486,7 @@ public class DefaultWorkspace
{ {
final String key = (String)keys.next(); final String key = (String)keys.next();
final Object value = map.get( key ); final Object value = map.get( key );
context.setProperty( key, value );
store.setProperty( key, value );
} }
} }
} }

+ 3
- 1
proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/model/NameValidator.java View File

@@ -17,8 +17,10 @@ public interface NameValidator
{ {
/** /**
* Validates the supplied name, failing if it is not. * Validates the supplied name, failing if it is not.
*
* @param name The name to be validated. * @param name The name to be validated.
* @throws Exception is the supplied name is not valid. * @throws Exception is the supplied name is not valid.
*/ */
void validate( String name ) throws Exception;
void validate( String name )
throws Exception;
} }

+ 86
- 0
proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/store/PropertyStore.java View File

@@ -0,0 +1,86 @@
/*
* 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.myrmidon.interfaces.store;

import java.util.Map;

/**
* This component stores and manages properties. It is also
* responsible for instituting the various policies regarding
* propertys. ie It will enforce rules regarding
*
* <ul>
* <li>Valid property names?</li>
* <li>Are propertys mutable?</li>
* <li>Are propertys scoped?</li>
* <li>Is mapping between name and value correct?</li>
* </ul>
*
* @author <a href="mailto:peter@apache.org">Peter Donald</a>
* @version $Revision$ $Date$
*/
public interface PropertyStore
{
/** Role name for this interface. */
String ROLE = PropertyStore.class.getName();

/**
* Set the property with specified name to specified value.
* The specific implementation will apply various rules
* before setting the property.
*
* @param name the name of property
* @param value the value of property
* @throws Exception if property can not be set
*/
void setProperty( String name, Object value )
throws Exception;

/**
* Return <code>true</code> if the specified property is set.
*
* @param name the name of property
*/
boolean isPropertySet( String name );

/**
* Retrieve the value of specified property.
* Will return null if no such property exists.
*
* @param name the name of the property
* @return the value of the property, or null if no such property
* @throws Exception if theres an error retrieving property, such
* as an invalid property name
*/
Object getProperty( String name )
throws Exception;

/**
* Retrieve a copy of all the properties that are "in-scope"
* for store.
*
* @return a copy of all the properties that are "in-scope"
* for store.
* @throws Exception if theres an error retrieving propertys
*/
Map getProperties()
throws Exception;

/**
* Return a child PropertyStore with specified name.
* This is to allow support for scoped stores. However a
* store may choose to be unscoped and just return a
* reference to itself.
*
* @param name the name of child store
* @return the child store
* @throws Exception if theres an error creating child store
*/
PropertyStore createChildStore( String name )
throws Exception;
}

+ 4
- 1
proposal/myrmidon/src/test/org/apache/myrmidon/components/configurer/test/DefaultConfigurerTestCase.java View File

@@ -15,6 +15,7 @@ import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.configuration.DefaultConfiguration; import org.apache.avalon.framework.configuration.DefaultConfiguration;
import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.api.TaskContext;
import org.apache.myrmidon.components.AbstractComponentTest; import org.apache.myrmidon.components.AbstractComponentTest;
import org.apache.myrmidon.components.store.DefaultPropertyStore;
import org.apache.myrmidon.components.configurer.DefaultConfigurer; import org.apache.myrmidon.components.configurer.DefaultConfigurer;
import org.apache.myrmidon.components.configurer.test.data.ConfigTestAttributeConvert; import org.apache.myrmidon.components.configurer.test.data.ConfigTestAttributeConvert;
import org.apache.myrmidon.components.configurer.test.data.ConfigTestConfigAdder; import org.apache.myrmidon.components.configurer.test.data.ConfigTestConfigAdder;
@@ -76,7 +77,9 @@ public class DefaultConfigurerTestCase
m_configurer = (Configurer)getServiceManager().lookup( Configurer.ROLE ); m_configurer = (Configurer)getServiceManager().lookup( Configurer.ROLE );


// Setup a context // Setup a context
m_context = new DefaultTaskContext( null, getServiceManager(), getLogger() );
final DefaultPropertyStore store = new DefaultPropertyStore();
m_context =
new DefaultTaskContext( getServiceManager(), getLogger(), store );
final File baseDir = new File( "." ).getAbsoluteFile(); final File baseDir = new File( "." ).getAbsoluteFile();
m_context.setProperty( TaskContext.BASE_DIRECTORY, baseDir ); m_context.setProperty( TaskContext.BASE_DIRECTORY, baseDir );
} }


+ 5
- 1
proposal/myrmidon/src/test/org/apache/myrmidon/components/property/test/AbstractPropertyResolverTestCase.java View File

@@ -11,9 +11,11 @@ import java.io.File;
import java.util.Date; import java.util.Date;
import org.apache.aut.converter.lib.ObjectToStringConverter; import org.apache.aut.converter.lib.ObjectToStringConverter;
import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.framework.service.DefaultServiceManager;
import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.api.TaskContext;
import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.components.AbstractComponentTest; import org.apache.myrmidon.components.AbstractComponentTest;
import org.apache.myrmidon.components.store.DefaultPropertyStore;
import org.apache.myrmidon.components.workspace.DefaultTaskContext; import org.apache.myrmidon.components.workspace.DefaultTaskContext;
import org.apache.myrmidon.interfaces.property.PropertyResolver; import org.apache.myrmidon.interfaces.property.PropertyResolver;


@@ -40,7 +42,9 @@ public abstract class AbstractPropertyResolverTestCase
{ {
m_resolver = (PropertyResolver)getServiceManager().lookup( PropertyResolver.ROLE ); m_resolver = (PropertyResolver)getServiceManager().lookup( PropertyResolver.ROLE );


m_context = new DefaultTaskContext( null, null, getLogger() );
final DefaultPropertyStore store = new DefaultPropertyStore();
final DefaultServiceManager serviceManager = new DefaultServiceManager();
m_context = new DefaultTaskContext( serviceManager, getLogger(), store );
m_context.setProperty( "intProp", new Integer( 333 ) ); m_context.setProperty( "intProp", new Integer( 333 ) );
m_context.setProperty( "stringProp", "String property" ); m_context.setProperty( "stringProp", "String property" );




Loading…
Cancel
Save