From ab8c0b3d29af93c2d263cf2924f98827e365e56c Mon Sep 17 00:00:00 2001 From: Peter Donald Date: Wed, 27 Jun 2001 00:50:09 +0000 Subject: [PATCH] Integrate change of Condition package into rest of system. Add a new Executor and allow possibility of "dry runs". Ie runs that don't actually execute commands. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269238 13f79535-47bb-0310-9956-ffa450edef68 --- .../components/embeddor/DefaultEmbeddor.java | 2 + .../executor/AspectAwareExecutor.java | 8 +- .../components/executor/PrintingExecutor.java | 76 +++++++++++++++++++ .../manager/DefaultProjectManager.java | 2 +- .../myrmidon/components/model/Target.java | 1 + .../apache/myrmidon/framework/DataType.java | 2 +- .../apache/myrmidon/framework/Pattern.java | 2 +- .../apache/myrmidon/frontends/CLIMain.java | 22 +++++- 8 files changed, 109 insertions(+), 6 deletions(-) create mode 100644 proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/PrintingExecutor.java diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java index 3881cf0df..ec0bb6a6c 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java @@ -132,6 +132,7 @@ public class DefaultEmbeddor setupLogger( projectManager ); + if( projectManager instanceof Composable ) { final DefaultComponentManager componentManager = @@ -237,6 +238,7 @@ public class DefaultEmbeddor "org.apache.myrmidon.components.type.DefaultTypeManager" ); defaults.setParameter( Executor.ROLE, //"org.apache.myrmidon.components.executor.DefaultExecutor" ); + //"org.apache.myrmidon.components.executor.PrintingExecutor" ); "org.apache.myrmidon.components.executor.AspectAwareExecutor" ); defaults.setParameter( ProjectManager.ROLE, "org.apache.myrmidon.components.manager.DefaultProjectManager" ); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java index 3f8c0e483..965dde3dc 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java @@ -95,13 +95,19 @@ public class AspectAwareExecutor getLogger().debug( "Executing" ); getAspectManager().preExecute(); - task.execute(); + doExecute( taskModel, task ); getLogger().debug( "Disposing" ); getAspectManager().preDestroy(); doDispose( task, taskModel ); } + protected void doExecute( final Configuration taskModel, final Task task ) + throws TaskException + { + task.execute(); + } + //TODO: Extract and clean taskModel here. //Get all parameters from model and provide to appropriate aspect. //aspect( final Parameters parameters, final Configuration[] elements ) diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/PrintingExecutor.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/PrintingExecutor.java new file mode 100644 index 000000000..6ba68aa49 --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/PrintingExecutor.java @@ -0,0 +1,76 @@ +/* + * 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 file. + */ +package org.apache.myrmidon.components.executor; + +import org.apache.myrmidon.api.Task; +import org.apache.myrmidon.api.TaskException; +import org.apache.avalon.framework.configuration.Configuration; + +public class PrintingExecutor + extends AspectAwareExecutor +{ + protected void doExecute( final Configuration taskModel, final Task task ) + throws TaskException + { + final StringBuffer sb = new StringBuffer(); + printConfiguration( taskModel, 0, sb ); + + System.out.println( sb.toString() ); + } + + private void printConfiguration( final Configuration taskModel, + final int level, + final StringBuffer sb ) + { + for( int i = 0; i < level; i++ ) + { + sb.append( ' ' ); + } + + sb.append( '<' ); + sb.append( taskModel.getName() ); + + + final String[] names = taskModel.getAttributeNames(); + for( int i = 0; i < names.length; i++ ) + { + final String name = names[ i ]; + final String value = taskModel.getAttribute( name, null ); + + sb.append( ' ' ); + sb.append( name ); + sb.append( "=\"" ); + sb.append( value ); + sb.append( '\"' ); + } + + final Configuration[] children = taskModel.getChildren(); + if( 0 == children.length ) + { + sb.append( "/>\n" ); + } + else + { + sb.append( ">\n" ); + + for( int i = 0; i < children.length; i++ ) + { + printConfiguration( children[ i ], level + 1, sb ); + } + + for( int i = 0; i < level; i++ ) + { + sb.append( ' ' ); + } + + sb.append( "\n" ); + } + } +} diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/manager/DefaultProjectManager.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/manager/DefaultProjectManager.java index 43e39877c..1c00abb38 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/manager/DefaultProjectManager.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/manager/DefaultProjectManager.java @@ -29,7 +29,7 @@ import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.components.executor.DefaultExecutionFrame; import org.apache.myrmidon.components.executor.ExecutionFrame; import org.apache.myrmidon.components.executor.Executor; -import org.apache.myrmidon.components.model.Condition; +import org.apache.myrmidon.framework.Condition; import org.apache.myrmidon.components.model.Project; import org.apache.myrmidon.components.model.Target; import org.apache.myrmidon.components.type.TypeManager; diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/model/Target.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/model/Target.java index 096392e8e..3e88fd225 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/model/Target.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/model/Target.java @@ -9,6 +9,7 @@ package org.apache.myrmidon.components.model; import java.util.ArrayList; import org.apache.avalon.framework.configuration.Configuration; +import org.apache.myrmidon.framework.Condition; /** * Targets in build file. diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/DataType.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/DataType.java index d64c2e057..e6a9b55d3 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/DataType.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/DataType.java @@ -15,5 +15,5 @@ package org.apache.myrmidon.framework; */ public interface DataType { - String ROLE = "org.apache.myrmidon.api.DataType"; + String ROLE = "org.apache.myrmidon.framework.DataType"; } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Pattern.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Pattern.java index a2440d1cd..998e86853 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Pattern.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Pattern.java @@ -8,7 +8,7 @@ package org.apache.myrmidon.framework; import org.apache.myrmidon.api.TaskException; -import org.apache.myrmidon.components.model.Condition; +import org.apache.myrmidon.framework.Condition; /** * Basic data type for holding patterns. diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/frontends/CLIMain.java b/proposal/myrmidon/src/java/org/apache/myrmidon/frontends/CLIMain.java index 92cc52bc9..87b40ac56 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/frontends/CLIMain.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/frontends/CLIMain.java @@ -37,6 +37,7 @@ import org.apache.myrmidon.api.DefaultTaskContext; import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.components.builder.ProjectBuilder; +import org.apache.myrmidon.components.executor.Executor; import org.apache.myrmidon.components.embeddor.Embeddor; import org.apache.myrmidon.components.embeddor.DefaultEmbeddor; import org.apache.myrmidon.components.manager.LogTargetToListenerAdapter; @@ -67,13 +68,14 @@ public class CLIMain private static final int TASKLIB_DIR_OPT = 5; private static final int INCREMENTAL_OPT = 6; private static final int HOME_DIR_OPT = 7; + private static final int DRY_RUN_OPT = 8; //incompatable options for info options private static final int[] INFO_OPT_INCOMPAT = new int[] { HELP_OPT, QUIET_OPT, VERBOSE_OPT, FILE_OPT, LOG_LEVEL_OPT, VERSION_OPT, LISTENER_OPT, - DEFINE_OPT //TASKLIB_DIR_OPT, HOME_DIR_OPT + DEFINE_OPT, DRY_RUN_OPT //TASKLIB_DIR_OPT, HOME_DIR_OPT }; //incompatable options for other logging options @@ -96,6 +98,9 @@ public class CLIMain ///List of user supplied parameters for builder private Parameters m_builderParameters = new Parameters(); + ///Determine whether tasks are actually executed + private boolean m_dryRun = false; + /** * Main entry point called to run standard Myrmidon. * @@ -132,7 +137,7 @@ public class CLIMain private CLOptionDescriptor[] createCLOptions() { //TODO: localise - final CLOptionDescriptor[] options = new CLOptionDescriptor[ 12 ]; + final CLOptionDescriptor[] options = new CLOptionDescriptor[ 13 ]; options[0] = new CLOptionDescriptor( "help", @@ -210,6 +215,11 @@ public class CLIMain BUILDER_PARAM_OPT, "Define a builder parameter (ie -Bfoo=var)" ); + options[12] = + new CLOptionDescriptor( "dry-run", + CLOptionDescriptor.ARGUMENT_DISALLOWED, + DRY_RUN_OPT, + "Do not execute tasks - just print them out" ); return options; } @@ -259,6 +269,8 @@ public class CLIMain m_builderParameters.setParameter( option.getArgument( 0 ), option.getArgument( 1 ) ); break; + case DRY_RUN_OPT: m_dryRun = true; break; + case 0: m_targets.add( option.getArgument() ); break; } } @@ -318,6 +330,12 @@ public class CLIMain //getLogger().debug( "Ant Lib Directory: " + m_libDir ); //getLogger().debug( "Ant Task Lib Directory: " + m_taskLibDir ); + if( m_dryRun ) + { + m_parameters.setParameter( Executor.ROLE, + "org.apache.myrmidon.components.executor.PrintingExecutor" ); + } + final Embeddor embeddor = new DefaultEmbeddor(); setupLogger( embeddor ); embeddor.parameterize( m_parameters );