git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269642 13f79535-47bb-0310-9956-ffa450edef68master
@@ -10,6 +10,8 @@ package org.apache.myrmidon.components.embeddor; | |||
import java.io.File; | |||
import java.io.FilenameFilter; | |||
import java.util.Map; | |||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
import org.apache.avalon.excalibur.io.ExtensionFileFilter; | |||
import org.apache.avalon.excalibur.io.FileUtil; | |||
import org.apache.avalon.framework.activity.Initializable; | |||
@@ -28,11 +30,11 @@ import org.apache.myrmidon.components.converter.MasterConverter; | |||
import org.apache.myrmidon.components.deployer.Deployer; | |||
import org.apache.myrmidon.components.deployer.DeploymentException; | |||
import org.apache.myrmidon.components.executor.Executor; | |||
import org.apache.myrmidon.components.workspace.Workspace; | |||
import org.apache.myrmidon.components.model.Project; | |||
import org.apache.myrmidon.components.role.RoleManager; | |||
import org.apache.myrmidon.components.type.TypeFactory; | |||
import org.apache.myrmidon.components.type.TypeManager; | |||
import org.apache.myrmidon.components.workspace.Workspace; | |||
/** | |||
* Default implementation of Embeddor. | |||
@@ -44,6 +46,9 @@ public class DefaultEmbeddor | |||
extends AbstractLoggable | |||
implements Embeddor | |||
{ | |||
private static final Resources REZ = | |||
ResourceManager.getPackageResources( DefaultEmbeddor.class ); | |||
private Deployer m_deployer; | |||
private RoleManager m_roleManager; | |||
@@ -75,8 +80,8 @@ public class DefaultEmbeddor | |||
m_parameters = parameters; | |||
} | |||
public Project createProject( final String location, | |||
String type, | |||
public Project createProject( final String location, | |||
String type, | |||
final Parameters parameters ) | |||
throws Exception | |||
{ | |||
@@ -94,7 +99,7 @@ public class DefaultEmbeddor | |||
return FileUtil.getExtension( location ); | |||
} | |||
private ProjectBuilder getProjectBuilder( final String type, | |||
private ProjectBuilder getProjectBuilder( final String type, | |||
final Parameters parameters ) | |||
throws Exception | |||
{ | |||
@@ -112,12 +117,12 @@ public class DefaultEmbeddor | |||
if( builder instanceof Parameterizable ) | |||
{ | |||
((Parameterizable)builder).parameterize( parameters ); | |||
} | |||
} | |||
if( builder instanceof Initializable ) | |||
{ | |||
((Initializable)builder).initialize(); | |||
} | |||
} | |||
return builder; | |||
} | |||
@@ -126,7 +131,7 @@ public class DefaultEmbeddor | |||
throws Exception | |||
{ | |||
final String component = getParameter( Workspace.ROLE ); | |||
final Workspace workspace = | |||
final Workspace workspace = | |||
(Workspace)createComponent( component, Workspace.class ); | |||
setupLogger( workspace ); | |||
@@ -140,12 +145,12 @@ public class DefaultEmbeddor | |||
if( workspace instanceof Parameterizable ) | |||
{ | |||
((Parameterizable)workspace).parameterize( parameters ); | |||
} | |||
} | |||
if( workspace instanceof Initializable ) | |||
{ | |||
((Initializable)workspace).initialize(); | |||
} | |||
} | |||
return workspace; | |||
} | |||
@@ -416,11 +421,13 @@ public class DefaultEmbeddor | |||
{ | |||
if( !file.exists() ) | |||
{ | |||
throw new Exception( name + " (" + file + ") does not exist" ); | |||
final String message = REZ.getString( "file-no-exist.error", name, file ); | |||
throw new Exception( message ); | |||
} | |||
else if( !file.isDirectory() ) | |||
{ | |||
throw new Exception( name + " (" + file + ") is not a directory" ); | |||
final String message = REZ.getString( "file-not-dir.error", name, file ); | |||
throw new Exception( message ); | |||
} | |||
} | |||
@@ -464,28 +471,31 @@ public class DefaultEmbeddor | |||
if( !clazz.isInstance( object ) ) | |||
{ | |||
throw new Exception( "Object " + component + " is not an instance of " + | |||
clazz ); | |||
final String message = REZ.getString( "bad-type.error", component, clazz.getName() ); | |||
throw new Exception( message ); | |||
} | |||
return object; | |||
} | |||
catch( final IllegalAccessException iae ) | |||
{ | |||
throw new Exception( "Non-public constructor for " + clazz + " " + component ); | |||
final String message = REZ.getString( "bad-ctor.error", clazz.getName(), component ); | |||
throw new Exception( message ); | |||
} | |||
catch( final InstantiationException ie ) | |||
{ | |||
throw new Exception( "Error instantiating class for " + clazz + " " + component ); | |||
final String message = | |||
REZ.getString( "no-instantiate.error", clazz.getName(), component ); | |||
throw new Exception( message ); | |||
} | |||
catch( final ClassNotFoundException cnfe ) | |||
{ | |||
throw new Exception( "Could not find the class for " + clazz + | |||
" (" + component + ")" ); | |||
final String message = | |||
REZ.getString( "no-class.error", clazz.getName(), component ); | |||
throw new Exception( message ); | |||
} | |||
} | |||
private void deployFromDirectory( final Deployer deployer, | |||
final File directory, | |||
final FilenameFilter filter ) | |||
@@ -522,8 +532,8 @@ public class DefaultEmbeddor | |||
} | |||
catch( final Exception e ) | |||
{ | |||
throw new DeploymentException( "Unable to retrieve filename for file " + | |||
files[ i ], e ); | |||
final String message = REZ.getString( "bad-filename.error", files[ i ] ); | |||
throw new DeploymentException( message, e ); | |||
} | |||
} | |||
} | |||
@@ -0,0 +1,7 @@ | |||
file-no-exist.error={0} ({1}) does not exist. | |||
file-not-dir.error={0} ({1}) is not a directory. | |||
bad-type.error=Object {0} is not an instance of {1}. | |||
bad-ctor.error=Non-public constructor for {0} {1}. | |||
no-instantiate.error=Error instantiating class for {0} {1}. | |||
no-class.error=Could not find the class for {0} ({1}). | |||
bad-filename.error=Unable to retrieve filename for file {0}. |
@@ -7,13 +7,15 @@ | |||
*/ | |||
package org.apache.myrmidon.components.executor; | |||
import java.util.HashMap; | |||
import java.util.ArrayList; | |||
import java.util.HashMap; | |||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
import org.apache.avalon.framework.component.ComponentException; | |||
import org.apache.avalon.framework.component.ComponentManager; | |||
import org.apache.avalon.framework.configuration.Configuration; | |||
import org.apache.avalon.framework.parameters.Parameters; | |||
import org.apache.avalon.framework.configuration.DefaultConfiguration; | |||
import org.apache.avalon.framework.parameters.Parameters; | |||
import org.apache.log.Logger; | |||
import org.apache.myrmidon.api.Task; | |||
import org.apache.myrmidon.api.TaskContext; | |||
@@ -24,6 +26,9 @@ import org.apache.myrmidon.components.aspect.AspectManager; | |||
public class AspectAwareExecutor | |||
extends DefaultExecutor | |||
{ | |||
private static final Resources REZ = | |||
ResourceManager.getPackageResources( AspectAwareExecutor.class ); | |||
private final static Parameters EMPTY_PARAMETERS; | |||
private final static Configuration[] EMPTY_ELEMENTS = new Configuration[ 0 ]; | |||
@@ -71,33 +76,33 @@ public class AspectAwareExecutor | |||
taskModel = getAspectManager().preCreate( taskModel ); | |||
taskModel = prepareAspects( taskModel ); | |||
getLogger().debug( "Pre-Create" ); | |||
debug( "creating.notice" ); | |||
final Task task = createTask( taskModel.getName(), frame ); | |||
getAspectManager().postCreate( task ); | |||
getLogger().debug( "Pre-Loggable" ); | |||
debug( "logger.notice" ); | |||
final Logger logger = frame.getLogger(); | |||
getAspectManager().preLoggable( logger ); | |||
doLoggable( task, taskModel, logger ); | |||
getLogger().debug( "Contextualizing" ); | |||
debug( "contextualizing.notice" ); | |||
doContextualize( task, taskModel, frame.getContext() ); | |||
getLogger().debug( "Composing" ); | |||
debug( "composing.notice" ); | |||
doCompose( task, taskModel, frame.getComponentManager() ); | |||
getLogger().debug( "Configuring" ); | |||
debug( "configuring.notice" ); | |||
getAspectManager().preConfigure( taskModel ); | |||
doConfigure( task, taskModel, frame.getContext() ); | |||
getLogger().debug( "Initializing" ); | |||
debug( "initializing.notice" ); | |||
doInitialize( task, taskModel ); | |||
getLogger().debug( "Executing" ); | |||
debug( "executing.notice" ); | |||
getAspectManager().preExecute(); | |||
doExecute( taskModel, task ); | |||
getLogger().debug( "Disposing" ); | |||
debug( "disposing.notice" ); | |||
getAspectManager().preDestroy(); | |||
doDispose( task, taskModel ); | |||
} | |||
@@ -114,7 +119,7 @@ public class AspectAwareExecutor | |||
private final Configuration prepareAspects( final Configuration taskModel ) | |||
throws TaskException | |||
{ | |||
final DefaultConfiguration newTaskModel = | |||
final DefaultConfiguration newTaskModel = | |||
new DefaultConfiguration( taskModel.getName(), taskModel.getLocation() ); | |||
final HashMap parameterMap = new HashMap(); | |||
final HashMap elementMap = new HashMap(); | |||
@@ -128,12 +133,12 @@ public class AspectAwareExecutor | |||
return newTaskModel; | |||
} | |||
private final void dispatchAspectsSettings( final HashMap parameterMap, | |||
private final void dispatchAspectsSettings( final HashMap parameterMap, | |||
final HashMap elementMap ) | |||
throws TaskException | |||
{ | |||
final String[] names = getAspectManager().getNames(); | |||
for( int i = 0; i < names.length; i++ ) | |||
{ | |||
final ArrayList elementList = (ArrayList)elementMap.remove( names[ i ] ); | |||
@@ -147,18 +152,18 @@ public class AspectAwareExecutor | |||
{ | |||
elements = (Configuration[])elementList.toArray( EMPTY_ELEMENTS ); | |||
} | |||
dispatch( names[ i ], parameters, elements ); | |||
} | |||
} | |||
private final void checkForUnusedSettings( final HashMap parameterMap, | |||
private final void checkForUnusedSettings( final HashMap parameterMap, | |||
final HashMap elementMap ) | |||
throws TaskException | |||
{ | |||
if( 0 != parameterMap.size() ) | |||
{ | |||
final String[] namespaces = | |||
final String[] namespaces = | |||
(String[])parameterMap.keySet().toArray( new String[ 0 ] ); | |||
for( int i = 0; i < namespaces.length; i++ ) | |||
@@ -166,48 +171,51 @@ public class AspectAwareExecutor | |||
final String namespace = namespaces[ i ]; | |||
final Parameters parameters = (Parameters)parameterMap.get( namespace ); | |||
final ArrayList elementList = (ArrayList)elementMap.remove( namespace ); | |||
Configuration[] elements = null; | |||
if( null == elementList ) elements = EMPTY_ELEMENTS; | |||
else | |||
{ | |||
elements = (Configuration[])elementList.toArray( EMPTY_ELEMENTS ); | |||
} | |||
unusedSetting( namespace, parameters, elements ); | |||
} | |||
} | |||
if( 0 != elementMap.size() ) | |||
{ | |||
final String[] namespaces = | |||
final String[] namespaces = | |||
(String[])elementMap.keySet().toArray( new String[ 0 ] ); | |||
for( int i = 0; i < namespaces.length; i++ ) | |||
{ | |||
final String namespace = namespaces[ i ]; | |||
final ArrayList elementList = (ArrayList)elementMap.remove( namespace ); | |||
final Configuration[] elements = | |||
final Configuration[] elements = | |||
(Configuration[])elementList.toArray( EMPTY_ELEMENTS ); | |||
unusedSetting( namespace, EMPTY_PARAMETERS, elements ); | |||
} | |||
} | |||
} | |||
private void unusedSetting( final String namespace, | |||
final Parameters parameters, | |||
private void unusedSetting( final String namespace, | |||
final Parameters parameters, | |||
final Configuration[] elements ) | |||
throws TaskException | |||
{ | |||
throw new TaskException( "Unused aspect settings for namespace " + namespace + | |||
" (parameterCount=" + parameters.getNames().length + | |||
" elementCount=" + elements.length + ")" ); | |||
final String message = | |||
REZ.getString( "unused-settings.error", | |||
namespace, | |||
Integer.toString( parameters.getNames().length ), | |||
Integer.toString( elements.length ) ); | |||
throw new TaskException( message ); | |||
} | |||
private void dispatch( final String namespace, | |||
final Parameters parameters, | |||
private void dispatch( final String namespace, | |||
final Parameters parameters, | |||
final Configuration[] elements ) | |||
throws TaskException | |||
{ | |||
@@ -215,13 +223,16 @@ public class AspectAwareExecutor | |||
if( getLogger().isDebugEnabled() ) | |||
{ | |||
getLogger().debug( "Dispatching Aspect Settings to: " + namespace + | |||
" parameterCount=" + parameters.getNames().length + | |||
" elementCount=" + elements.length ); | |||
final String message = | |||
REZ.getString( "dispatch-settings.notice", | |||
namespace, | |||
Integer.toString( parameters.getNames().length ), | |||
Integer.toString( elements.length ) ); | |||
getLogger().debug( message ); | |||
} | |||
} | |||
private final void processElements( final Configuration taskModel, | |||
private final void processElements( final Configuration taskModel, | |||
final DefaultConfiguration newTaskModel, | |||
final HashMap map ) | |||
{ | |||
@@ -230,8 +241,8 @@ public class AspectAwareExecutor | |||
{ | |||
final String name = elements[ i ].getName(); | |||
final int index = name.indexOf( ':' ); | |||
if( -1 == index ) | |||
if( -1 == index ) | |||
{ | |||
newTaskModel.addChild( elements[ i ] ); | |||
} | |||
@@ -245,7 +256,7 @@ public class AspectAwareExecutor | |||
} | |||
} | |||
private final void processAttributes( final Configuration taskModel, | |||
private final void processAttributes( final Configuration taskModel, | |||
final DefaultConfiguration newTaskModel, | |||
final HashMap map ) | |||
{ | |||
@@ -256,8 +267,8 @@ public class AspectAwareExecutor | |||
final String value = taskModel.getAttribute( name, null ); | |||
final int index = name.indexOf( ':' ); | |||
if( -1 == index ) | |||
if( -1 == index ) | |||
{ | |||
newTaskModel.setAttribute( name, value ); | |||
} | |||
@@ -7,6 +7,8 @@ | |||
*/ | |||
package org.apache.myrmidon.components.executor; | |||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
import org.apache.avalon.framework.activity.Disposable; | |||
import org.apache.avalon.framework.activity.Initializable; | |||
import org.apache.avalon.framework.component.Component; | |||
@@ -34,6 +36,9 @@ public class DefaultExecutor | |||
extends AbstractLoggable | |||
implements Executor, Composable | |||
{ | |||
private static final Resources REZ = | |||
ResourceManager.getPackageResources( DefaultExecutor.class ); | |||
private Configurer m_configurer; | |||
/** | |||
@@ -51,30 +56,40 @@ public class DefaultExecutor | |||
public void execute( final Configuration taskModel, final ExecutionFrame frame ) | |||
throws TaskException | |||
{ | |||
getLogger().debug( "Creating" ); | |||
debug( "creating.notice" ); | |||
final Task task = createTask( taskModel.getName(), frame ); | |||
debug( "logger.notice" ); | |||
doLoggable( task, taskModel, frame.getLogger() ); | |||
getLogger().debug( "Contextualizing" ); | |||
debug( "contextualizing.notice" ); | |||
doContextualize( task, taskModel, frame.getContext() ); | |||
getLogger().debug( "Composing" ); | |||
debug( "composing.notice" ); | |||
doCompose( task, taskModel, frame.getComponentManager() ); | |||
getLogger().debug( "Configuring" ); | |||
debug( "configuring.notice" ); | |||
doConfigure( task, taskModel, frame.getContext() ); | |||
getLogger().debug( "Initializing" ); | |||
debug( "initializing.notice" ); | |||
doInitialize( task, taskModel ); | |||
getLogger().debug( "Running" ); | |||
debug( "executing.notice" ); | |||
task.execute(); | |||
getLogger().debug( "Disposing" ); | |||
debug( "disposing.notice" ); | |||
doDispose( task, taskModel ); | |||
} | |||
protected final void debug( final String key ) | |||
{ | |||
if( getLogger().isDebugEnabled() ) | |||
{ | |||
final String message = REZ.getString( key ); | |||
getLogger().debug( message ); | |||
} | |||
} | |||
protected final Task createTask( final String name, final ExecutionFrame frame ) | |||
throws TaskException | |||
{ | |||
@@ -85,7 +100,8 @@ public class DefaultExecutor | |||
} | |||
catch( final TypeException te ) | |||
{ | |||
throw new TaskException( "Unable to create task " + name, te ); | |||
final String message = REZ.getString( "no-create.error", name ); | |||
throw new TaskException( message, te ); | |||
} | |||
} | |||
@@ -97,13 +113,16 @@ public class DefaultExecutor | |||
try { m_configurer.configure( task, taskModel, context ); } | |||
catch( final Throwable throwable ) | |||
{ | |||
throw new TaskException( "Error configuring task " + taskModel.getName() + " at " + | |||
taskModel.getLocation() + "(Reason: " + | |||
throwable.getMessage() + ")", throwable ); | |||
final String message = | |||
REZ.getString( "config.error", | |||
taskModel.getName(), | |||
taskModel.getLocation(), | |||
throwable.getMessage() ); | |||
throw new TaskException( message, throwable ); | |||
} | |||
} | |||
protected final void doCompose( final Task task, | |||
protected final void doCompose( final Task task, | |||
final Configuration taskModel, | |||
final ComponentManager componentManager ) | |||
throws TaskException | |||
@@ -113,9 +132,12 @@ public class DefaultExecutor | |||
try { ((Composable)task).compose( componentManager ); } | |||
catch( final Throwable throwable ) | |||
{ | |||
throw new TaskException( "Error composing task " + taskModel.getName() + " at " + | |||
taskModel.getLocation() + "(Reason: " + | |||
throwable.getMessage() + ")", throwable ); | |||
final String message = | |||
REZ.getString( "compose.error", | |||
taskModel.getName(), | |||
taskModel.getLocation(), | |||
throwable.getMessage() ); | |||
throw new TaskException( message, throwable ); | |||
} | |||
} | |||
} | |||
@@ -134,9 +156,12 @@ public class DefaultExecutor | |||
} | |||
catch( final Throwable throwable ) | |||
{ | |||
throw new TaskException( "Error contextualizing task " + taskModel.getName() + " at " + | |||
taskModel.getLocation() + "(Reason: " + | |||
throwable.getMessage() + ")", throwable ); | |||
final String message = | |||
REZ.getString( "compose.error", | |||
taskModel.getName(), | |||
taskModel.getLocation(), | |||
throwable.getMessage() ); | |||
throw new TaskException( message, throwable ); | |||
} | |||
} | |||
@@ -148,15 +173,18 @@ public class DefaultExecutor | |||
try { ((Disposable)task).dispose(); } | |||
catch( final Throwable throwable ) | |||
{ | |||
throw new TaskException( "Error disposing task " + taskModel.getName() + " at " + | |||
taskModel.getLocation() + "(Reason: " + | |||
throwable.getMessage() + ")", throwable ); | |||
final String message = | |||
REZ.getString( "dispose.error", | |||
taskModel.getName(), | |||
taskModel.getLocation(), | |||
throwable.getMessage() ); | |||
throw new TaskException( message, throwable ); | |||
} | |||
} | |||
} | |||
protected final void doLoggable( final Task task, | |||
final Configuration taskModel, | |||
protected final void doLoggable( final Task task, | |||
final Configuration taskModel, | |||
final Logger logger ) | |||
throws TaskException | |||
{ | |||
@@ -165,9 +193,12 @@ public class DefaultExecutor | |||
try { ((Loggable)task).setLogger( logger ); } | |||
catch( final Throwable throwable ) | |||
{ | |||
throw new TaskException( "Error setting logger for task " + taskModel.getName() + | |||
" at " + taskModel.getLocation() + "(Reason: " + | |||
throwable.getMessage() + ")", throwable ); | |||
final String message = | |||
REZ.getString( "logger.error", | |||
taskModel.getName(), | |||
taskModel.getLocation(), | |||
throwable.getMessage() ); | |||
throw new TaskException( message, throwable ); | |||
} | |||
} | |||
} | |||
@@ -180,9 +211,12 @@ public class DefaultExecutor | |||
try { ((Initializable)task).initialize(); } | |||
catch( final Throwable throwable ) | |||
{ | |||
throw new TaskException( "Error initializing task " + taskModel.getName() + " at " + | |||
taskModel.getLocation() + "(Reason: " + | |||
throwable.getMessage() + ")", throwable ); | |||
final String message = | |||
REZ.getString( "init.error", | |||
taskModel.getName(), | |||
taskModel.getLocation(), | |||
throwable.getMessage() ); | |||
throw new TaskException( message, throwable ); | |||
} | |||
} | |||
} | |||
@@ -0,0 +1,19 @@ | |||
creating.notice=Creating. | |||
logger.notice=Setting Logger. | |||
contextualizing.notice=Contextualizing. | |||
composing.notice=Composing. | |||
configuring.notice=Configuring. | |||
initializing.notice=Initializing. | |||
executing.notice=Executing. | |||
disposing.notice=Disposing. | |||
no-create.error=Unable to create task {0}. | |||
config.error=Error configuring task {0} at {1} (Reason: {2}). | |||
compose.error=Error composing task {0} at {1} (Reason: {2}). | |||
context.error=Error contextualizing task {0} at {1} (Reason: {2}). | |||
dispose.error=Error disposing task {0} at {1} (Reason: {2}). | |||
init.error=Error initializing task {0} at {1} (Reason: {2}). | |||
logger.error=Error setting logger for task {0} at {1} (Reason: {2}). | |||
unused-settings.error=Unused aspect settings for namespace {0} (parameterCount={1} elementCount={2}). | |||
dispatch-settings.notice=Dispatching Aspect Settings to namespace {0} (parameterCount={1} elementCount={2}). |
@@ -11,6 +11,8 @@ import java.io.File; | |||
import java.io.IOException; | |||
import java.util.ArrayList; | |||
import java.util.HashMap; | |||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
/** | |||
* Default project implementation. | |||
@@ -20,6 +22,9 @@ import java.util.HashMap; | |||
public class DefaultProject | |||
implements Project | |||
{ | |||
private static final Resources REZ = | |||
ResourceManager.getPackageResources( DefaultProject.class ); | |||
///The imports | |||
private final ArrayList m_imports = new ArrayList(); | |||
@@ -167,8 +172,8 @@ public class DefaultProject | |||
{ | |||
if( null != m_targets.get( name ) ) | |||
{ | |||
throw new IllegalArgumentException( "Can not have two targets in a " + | |||
"file with the name " + name ); | |||
final String message = REZ.getString( "duplicate-target.error", name ); | |||
throw new IllegalArgumentException( message ); | |||
} | |||
else | |||
{ | |||
@@ -187,8 +192,8 @@ public class DefaultProject | |||
{ | |||
if( null != m_projects.get( name ) ) | |||
{ | |||
throw new IllegalArgumentException( "Can not have two projects referenced in a " + | |||
"file with the name " + name ); | |||
final String message = REZ.getString( "duplicate-project.error", name ); | |||
throw new IllegalArgumentException( message ); | |||
} | |||
else | |||
{ | |||
@@ -0,0 +1,2 @@ | |||
duplicate-project.error=Can not have two projects referenced in a file with the name {0}. | |||
duplicate-target.error=Can not have two targets in a file with the name {0}. |
@@ -12,6 +12,8 @@ import java.util.Enumeration; | |||
import java.util.HashMap; | |||
import javax.xml.parsers.SAXParser; | |||
import javax.xml.parsers.SAXParserFactory; | |||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
import org.apache.avalon.framework.activity.Initializable; | |||
import org.apache.avalon.framework.configuration.Configuration; | |||
import org.apache.avalon.framework.configuration.ConfigurationException; | |||
@@ -28,6 +30,9 @@ import org.xml.sax.XMLReader; | |||
public class DefaultRoleManager | |||
implements RoleManager, Initializable | |||
{ | |||
private static final Resources REZ = | |||
ResourceManager.getPackageResources( DefaultRoleManager.class ); | |||
private final static String ROLE_DESCRIPTOR = "META-INF/ant-roles.xml"; | |||
/** Parent <code>RoleManager</code> for nested resolution */ | |||
@@ -152,15 +157,15 @@ public class DefaultRoleManager | |||
final String oldRole = (String)m_names.get( name ); | |||
if( null != oldRole && oldRole.equals( role ) ) | |||
{ | |||
throw new IllegalArgumentException( "Name already mapped to another role (" + | |||
oldRole + ")" ); | |||
final String message = REZ.getString( "duplicate-name.error", oldRole ); | |||
throw new IllegalArgumentException( message ); | |||
} | |||
final String oldName = (String)m_roles.get( role ); | |||
if( null != oldName && oldName.equals( name ) ) | |||
{ | |||
throw new IllegalArgumentException( "Role already mapped to another name (" + | |||
oldName + ")" ); | |||
final String message = REZ.getString( "duplicate-role.error", oldName ); | |||
throw new IllegalArgumentException( message ); | |||
} | |||
m_names.put( name, role ); | |||
@@ -0,0 +1,2 @@ | |||
duplicate-name.error=Name already mapped to another role ({0}). | |||
duplicate-role.error=Role already mapped to another name ({0}). |
@@ -10,6 +10,8 @@ package org.apache.myrmidon.components.type; | |||
import java.net.URL; | |||
import java.util.HashMap; | |||
import java.net.URLClassLoader; | |||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
/** | |||
* Create a type instance based on name. | |||
@@ -20,6 +22,9 @@ import java.net.URLClassLoader; | |||
public class DefaultTypeFactory | |||
implements TypeFactory | |||
{ | |||
private static final Resources REZ = | |||
ResourceManager.getPackageResources( DefaultTypeFactory.class ); | |||
///A Map of shortnames to classnames | |||
private final HashMap m_classNames = new HashMap(); | |||
@@ -77,7 +82,8 @@ public class DefaultTypeFactory | |||
} | |||
catch( final Exception e ) | |||
{ | |||
throw new TypeException( "Unable to instantiate '" + name + "'", e ); | |||
final String message = REZ.getString( "no-instantiate.error", name ); | |||
throw new TypeException( message, e ); | |||
} | |||
} | |||
@@ -88,8 +94,8 @@ public class DefaultTypeFactory | |||
if( null == className ) | |||
{ | |||
throw new TypeException( "Malconfigured factory, no clasname for '" + | |||
name + "'" ); | |||
final String message = REZ.getString( "no-mapping.error", name ); | |||
throw new TypeException( message ); | |||
} | |||
return className; | |||
@@ -8,6 +8,8 @@ | |||
package org.apache.myrmidon.components.type; | |||
import java.util.HashMap; | |||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
/** | |||
* The interface that is used to manage types. | |||
@@ -17,6 +19,9 @@ import java.util.HashMap; | |||
public class DefaultTypeManager | |||
implements TypeManager | |||
{ | |||
private static final Resources REZ = | |||
ResourceManager.getPackageResources( DefaultTypeManager.class ); | |||
///Parent type manager to inherit values from. | |||
private final DefaultTypeManager m_parent; | |||
@@ -92,8 +97,8 @@ public class DefaultTypeManager | |||
} | |||
catch( final Exception e ) | |||
{ | |||
throw new TypeException( "Role '" + role + "' does not specify " + | |||
"accessible work interface" ); | |||
final String message = REZ.getString( "no-work-interface.error", role ); | |||
throw new TypeException( message ); | |||
} | |||
} | |||
@@ -8,6 +8,8 @@ | |||
package org.apache.myrmidon.components.type; | |||
import java.util.HashMap; | |||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
/** | |||
* This factory acts as a proxy to set of object factorys. | |||
@@ -15,8 +17,11 @@ import java.util.HashMap; | |||
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | |||
*/ | |||
public class MultiSourceTypeFactory | |||
implements TypeFactory | |||
implements TypeFactory | |||
{ | |||
private static final Resources REZ = | |||
ResourceManager.getPackageResources( MultiSourceTypeFactory.class ); | |||
///Parent Selector | |||
private final MultiSourceTypeFactory m_parent; | |||
@@ -58,14 +63,15 @@ public class MultiSourceTypeFactory | |||
{ | |||
TypeFactory factory = getTypeFactory( name ); | |||
if( null == factory && null != m_parent ) | |||
if( null == factory && null != m_parent ) | |||
{ | |||
factory = m_parent.getTypeFactory( name ); | |||
} | |||
if( null == factory ) | |||
if( null == factory ) | |||
{ | |||
throw new TypeException( "Failed to locate factory for '" + name + "'" ); | |||
final String message = REZ.getString( "no-factory.error", name ); | |||
throw new TypeException( message ); | |||
} | |||
else | |||
{ | |||
@@ -73,8 +79,8 @@ public class MultiSourceTypeFactory | |||
if( !m_type.isInstance( object ) ) | |||
{ | |||
throw new TypeException( "Object '" + name + "' is not of " + | |||
"correct Type (" + m_type.getName() + ")" ); | |||
final String message = REZ.getString( "no-factory.error", name, m_type.getName() ); | |||
throw new TypeException( message ); | |||
} | |||
return object; | |||
@@ -0,0 +1,5 @@ | |||
no-instantiate.error=Unable to instantiate ({0}). | |||
no-mapping.error=Malconfigured factory, no clasname for ({0}). | |||
no-factory.error=Failed to locate factory for {0}. | |||
bad-type.error=Object {0} is not of correct Type ({1}). | |||
no-work-interface.error=Role {0} does not specify accessible work interface. |
@@ -12,21 +12,22 @@ import java.util.ArrayList; | |||
import java.util.HashMap; | |||
import java.util.Iterator; | |||
import java.util.Map; | |||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
import org.apache.avalon.framework.activity.Disposable; | |||
import org.apache.avalon.framework.activity.Initializable; | |||
import org.apache.avalon.framework.context.ContextException; | |||
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.component.DefaultComponentManager; | |||
import org.apache.avalon.framework.configuration.Configuration; | |||
import org.apache.avalon.framework.context.ContextException; | |||
import org.apache.avalon.framework.logger.AbstractLoggable; | |||
import org.apache.avalon.framework.parameters.ParameterException; | |||
import org.apache.avalon.framework.parameters.Parameterizable; | |||
import org.apache.avalon.framework.parameters.Parameters; | |||
import org.apache.log.Hierarchy; | |||
import org.apache.log.Logger; | |||
import org.apache.log.LogTarget; | |||
import org.apache.myrmidon.api.DefaultTaskContext; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.api.TaskException; | |||
@@ -52,6 +53,9 @@ public class DefaultWorkspace | |||
extends AbstractLoggable | |||
implements Workspace, Composable, Parameterizable, Initializable | |||
{ | |||
private static final Resources REZ = | |||
ResourceManager.getPackageResources( DefaultWorkspace.class ); | |||
private Executor m_executor; | |||
private ProjectListenerSupport m_listenerSupport = new ProjectListenerSupport(); | |||
private ComponentManager m_componentManager; | |||
@@ -109,7 +113,7 @@ public class DefaultWorkspace | |||
m_hierarchy = new Hierarchy(); | |||
final LogTarget target = new LogTargetToListenerAdapter( m_listenerSupport ); | |||
final LogTargetToListenerAdapter target = new LogTargetToListenerAdapter( m_listenerSupport ); | |||
m_hierarchy.setDefaultLogTarget( target ); | |||
} | |||
@@ -158,21 +162,22 @@ public class DefaultWorkspace | |||
throws TaskException | |||
{ | |||
//TODO: In future this will be expanded to allow | |||
//users to specify search path or automagically | |||
//add entries to lib path (like user specific or | |||
//users to specify search path or automagically | |||
//add entries to lib path (like user specific or | |||
//workspace specific) | |||
final String name = libraryName.replace( '/', File.separatorChar ) + ".atl"; | |||
final String home = System.getProperty( "myrmidon.home" ); | |||
final File homeDir = new File( home + File.separatorChar + "ext" ); | |||
final File library = new File( homeDir, name ); | |||
if( library.exists() ) | |||
{ | |||
if( !library.canRead() ) | |||
{ | |||
throw new TaskException( "Unable to read library at " + library ); | |||
final String message = REZ.getString( "no-read.error", library ); | |||
throw new TaskException( message ); | |||
} | |||
else | |||
{ | |||
@@ -180,7 +185,8 @@ public class DefaultWorkspace | |||
} | |||
} | |||
throw new TaskException( "Unable to locate Type Library " + libraryName ); | |||
final String message = REZ.getString( "no-library.error", libraryName ); | |||
throw new TaskException( message ); | |||
} | |||
private void deployTypeLib( final Deployer deployer, final Project project ) | |||
@@ -206,8 +212,8 @@ public class DefaultWorkspace | |||
} | |||
catch( final DeploymentException de ) | |||
{ | |||
throw new TaskException( "Error deploying type library " + | |||
typeLib + " at " + file, de ); | |||
final String message = REZ.getString( "no-deploy.error", typeLib, file ); | |||
throw new TaskException( message, de ); | |||
} | |||
} | |||
} | |||
@@ -235,7 +241,8 @@ public class DefaultWorkspace | |||
try { deployer.compose( componentManager ); } | |||
catch( final ComponentException ce ) | |||
{ | |||
throw new TaskException( "Error configuring deployer", ce ); | |||
final String message = REZ.getString( "bad-deployer-config.error" ); | |||
throw new TaskException( message, ce ); | |||
} | |||
//HACK: Didn't call initialize because Deployer contained in Embeddor | |||
@@ -272,7 +279,8 @@ public class DefaultWorkspace | |||
} | |||
catch( final Exception e ) | |||
{ | |||
throw new TaskException( "Error setting up ExecutionFrame", e ); | |||
final String message = REZ.getString( "bad-frame.error" ); | |||
throw new TaskException( message, e ); | |||
} | |||
return frame; | |||
@@ -301,7 +309,8 @@ public class DefaultWorkspace | |||
if( null == other ) | |||
{ | |||
//TODO: Fix this so location information included in description | |||
throw new TaskException( "Project '" + name + "' not found." ); | |||
final String message = REZ.getString( "no-project.error", name ); | |||
throw new TaskException( message ); | |||
} | |||
return other; | |||
@@ -338,7 +347,8 @@ public class DefaultWorkspace | |||
final Target target = project.getTarget( targetName ); | |||
if( null == target ) | |||
{ | |||
throw new TaskException( "Unable to find target " + targetName ); | |||
final String message = REZ.getString( "no-target.error", targetName ); | |||
throw new TaskException( message ); | |||
} | |||
//add target to list of targets executed | |||
@@ -385,19 +395,20 @@ public class DefaultWorkspace | |||
{ | |||
if( false == condition.evaluate( frame.getContext() ) ) | |||
{ | |||
getLogger().debug( "Skipping target " + name + | |||
" as it does not satisfy condition" ); | |||
final String message = REZ.getString( "skip-target.notice", name ); | |||
getLogger().debug( message ); | |||
return; | |||
} | |||
} | |||
catch( final ContextException ce ) | |||
{ | |||
throw new TaskException( "Error evaluating Condition for target " + | |||
name, ce ); | |||
final String message = REZ.getString( "condition-eval.error", name ); | |||
throw new TaskException( message, ce ); | |||
} | |||
} | |||
getLogger().debug( "Executing target " + name ); | |||
final String message = REZ.getString( "exec-target.notice", name ); | |||
getLogger().debug( message ); | |||
//frame.getContext().setProperty( Project.TARGET, target ); | |||
@@ -420,7 +431,9 @@ public class DefaultWorkspace | |||
throws TaskException | |||
{ | |||
final String name = task.getName(); | |||
getLogger().debug( "Executing task " + name ); | |||
final String message = REZ.getString( "exec-task.notice", name ); | |||
getLogger().debug( message ); | |||
//is setting name even necessary ??? | |||
frame.getContext().setProperty( TaskContext.NAME, name ); | |||
@@ -0,0 +1,11 @@ | |||
no-read.error=Unable to read library at {0}. | |||
no-library.error=Unable to locate Type Library {0}. | |||
no-deploy.error=Error deploying type library {0} at {1}. | |||
bad-deployer-config.error=Error configuring deployer. | |||
bad-frame.error=Error setting up ExecutionFrame. | |||
no-project.error=Project {0} not found. | |||
no-target.error=Target {0} not found. | |||
skip-target.notice=Skipping target {0} as it does not satisfy condition. | |||
condition-eval.error=Error evaluating Condition for target {0}. | |||
exec-target.notice=Executing target {0}. | |||
exec-task.notice=Executing task {0}. |