Browse Source

Module for basic functionality useful in almost all domains

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268601 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 24 years ago
parent
commit
08cddc0345
13 changed files with 691 additions and 0 deletions
  1. +87
    -0
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/AntCall.java
  2. +33
    -0
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/Echo.java
  3. +96
    -0
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/Pattern.java
  4. +183
    -0
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/Property.java
  5. +32
    -0
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToByteConverter.java
  6. +32
    -0
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToClassConverter.java
  7. +32
    -0
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToDoubleConverter.java
  8. +35
    -0
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFileConverter.java
  9. +32
    -0
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFloatConverter.java
  10. +32
    -0
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToIntegerConverter.java
  11. +32
    -0
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToLongConverter.java
  12. +32
    -0
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToShortConverter.java
  13. +33
    -0
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToURLConverter.java

+ 87
- 0
proposal/myrmidon/src/java/org/apache/ant/modules/basic/AntCall.java View File

@@ -0,0 +1,87 @@
/*
* 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.ant.modules.basic;

import java.util.ArrayList;
import org.apache.ant.AntException;
import org.apache.ant.project.Project;
import org.apache.ant.project.ProjectEngine;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.DefaultTaskletContext;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
import org.apache.avalon.Context;

/**
* This is abstract base class for tasklets.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class AntCall
extends AbstractTasklet
implements Composer
{
protected ProjectEngine m_projectEngine;
protected Project m_project;
protected String m_target;
protected ArrayList m_properties = new ArrayList();
protected TaskletContext m_childContext;
protected ComponentManager m_componentManager;

public void contextualize( final Context context )
{
super.contextualize( context );
m_childContext = new DefaultTaskletContext( getContext() );
}

public void compose( final ComponentManager componentManager )
throws ComponentManagerException
{
m_componentManager = componentManager;
m_projectEngine = (ProjectEngine)componentManager.
lookup( "org.apache.ant.project.ProjectEngine" );
m_project = (Project)componentManager.lookup( "org.apache.ant.project.Project" );
}

public void setTarget( final String target )
{
m_target = target;
}

public Property createParam()
throws Exception
{
final Property property = new Property();
property.setLogger( getLogger() );
property.contextualize( m_childContext );
property.compose( m_componentManager );
m_properties.add( property );
return property;
}

public void run()
throws AntException
{
if( null == m_target )
{
throw new AntException( "Target attribute must be specified" );
}

final int size = m_properties.size();
for( int i = 0; i < size; i++ )
{
final Property property = (Property)m_properties.get( i );
property.run();
}

getLogger().info( "Calling target " + m_target );
m_projectEngine.execute( m_project, m_target, m_childContext );
}
}

+ 33
- 0
proposal/myrmidon/src/java/org/apache/ant/modules/basic/Echo.java View File

@@ -0,0 +1,33 @@
/*
* 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.ant.modules.basic;

import org.apache.ant.AntException;
import org.apache.ant.tasklet.AbstractTasklet;

/**
* This is the echo task to display a message.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class Echo
extends AbstractTasklet
{
protected String m_message;

public void setMessage( final String message )
{
m_message = message;
}

public void run()
throws AntException
{
getLogger().warn( m_message );
}
}

+ 96
- 0
proposal/myrmidon/src/java/org/apache/ant/modules/basic/Pattern.java View File

@@ -0,0 +1,96 @@
/*
* 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.ant.modules.basic;

import org.apache.ant.AntException;
import org.apache.ant.tasklet.DataType;
import org.apache.ant.util.Condition;

/**
* Basic data type for holding patterns.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class Pattern
implements DataType
{
protected String m_name;
protected Condition m_condition;

/**
* Retrieve name (aka value) of pattern.
*
* @return the name/value of pattern
*/
public String getName()
{
return m_name;
}
/**
* Get condition associated with pattern if any.
*
* @return the Condition
*/
public Condition getCondition()
{
return m_condition;
}
/**
* Setter method for name/value of pattern.
* Conforms to ant setter patterns
*
* @param name the value
*/
public void setName( final String name )
{
m_name = name;
}

/**
* Set if clause on pattern.
*
* @param condition the condition
* @exception AntException if an error occurs
*/
public void setIf( final String condition )
throws AntException
{
verifyConditionNull();
m_condition = new Condition( true, condition );
}

/**
* Set unless clause of pattern.
*
* @param condition the unless clause
* @exception AntException if an error occurs
*/
public void setUnless( final String condition )
throws AntException
{
verifyConditionNull();
m_condition = new Condition( false, condition );
}

/**
* Utility method to make sure condition unset.
* Made so that it is not possible for both if and unless to be set.
*
* @exception AntException if an error occurs
*/
protected void verifyConditionNull()
throws AntException
{
if( null != m_condition )
{
throw new AntException( "Can only set one of if/else for pattern data type" );
}
}
}

+ 183
- 0
proposal/myrmidon/src/java/org/apache/ant/modules/basic/Property.java View File

@@ -0,0 +1,183 @@
/*
* 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.ant.modules.basic;

import java.util.Iterator;
import org.apache.ant.AntException;
import org.apache.ant.configuration.Configurable;
import org.apache.ant.configuration.Configuration;
import org.apache.ant.configuration.Configurer;
import org.apache.ant.convert.Converter;
import org.apache.ant.tasklet.DataType;
import org.apache.ant.tasklet.engine.DataTypeEngine;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
import org.apache.avalon.ConfigurationException;
import org.apache.avalon.Resolvable;

/**
* This is the property "task" to declare a binding of a datatype to a name.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class Property
extends AbstractTasklet
implements Configurable, Composer
{
protected String m_name;
protected Object m_value;
protected boolean m_localScope = true;
protected DataTypeEngine m_engine;
protected Converter m_converter;
protected Configurer m_configurer;
public void compose( final ComponentManager componentManager )
throws ComponentManagerException
{
m_configurer = (Configurer)componentManager.
lookup( "org.apache.ant.configuration.Configurer" );

m_engine = (DataTypeEngine)componentManager.
lookup( "org.apache.ant.tasklet.engine.DataTypeEngine" );

m_converter = (Converter)componentManager.lookup( "org.apache.ant.convert.Converter" );
}

public void configure( final Configuration configuration )
throws ConfigurationException
{
final Iterator attributes = configuration.getAttributeNames();

while( attributes.hasNext() )
{
final String name = (String)attributes.next();
final String value = configuration.getAttribute( name );

final Object object = getContext().resolveValue( value );

if( null == object )
{
throw new AntException( "Value for attribute " + name + "resolved to null" );
}

if( name.equals( "name" ) )
{
try
{
final String convertedValue =
(String)m_converter.convert( String.class, object, getContext() );
setName( convertedValue );
}
catch( final Exception e )
{
throw new ConfigurationException( "Error converting value", e );
}
}
else if( name.equals( "value" ) )
{
setValue( object );
}
else if( name.equals( "local-scope" ) )
{
try
{
final Boolean localScope =
(Boolean)m_converter.convert( Boolean.class, object, getContext() );
setLocalScope( Boolean.TRUE == localScope );
}
catch( final Exception e )
{
throw new ConfigurationException( "Error converting value", e );
}
}
else
{
throw new ConfigurationException( "Unknown attribute " + name );
}
}

final Iterator children = configuration.getChildren();
while( children.hasNext() )
{
final Configuration child = (Configuration)children.next();

try
{
final DataType value = m_engine.createDataType( child.getName() );
setValue( value );
m_configurer.configure( value, child, getContext() );
}
catch( final Exception e )
{
throw new ConfigurationException( "Unable to set datatype", e );
}
}
}

public void setName( final String name )
{
m_name = name;
}
public void setValue( final Object value )
throws AntException
{
if( null != m_value )
{
throw new AntException( "Value can not be set multiple times" );
}

m_value = value;
}
public void setLocalScope( final boolean localScope )
{
m_localScope = localScope;
}

public void run()
throws AntException
{
if( null == m_name )
{
throw new AntException( "Name must be specified" );
}

if( null == m_value )
{
throw new AntException( "Value must be specified" );
}

final TaskletContext context = getContext();

Object value = m_value;

if( value instanceof String )
{
value = context.resolveValue( (String)value );
}

while( null != value && value instanceof Resolvable )
{
value = ((Resolvable)value).resolve( context );
}

if( m_localScope )
{
context.setProperty( m_name, value );
}
else
{
context.setProperty( m_name, value, TaskletContext.PARENT );
}
}
}

+ 32
- 0
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToByteConverter.java View File

@@ -0,0 +1,32 @@
/*
* 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.ant.modules.basic;

import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;

/**
* String to byte converter
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class StringToByteConverter
extends AbstractConverter
{
public StringToByteConverter()
{
super( String.class, Byte.class );
}

public Object convert( final Object original, final Context context )
throws Exception
{
return new Byte( (String)original );
}
}


+ 32
- 0
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToClassConverter.java View File

@@ -0,0 +1,32 @@
/*
* 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.ant.modules.basic;

import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;

/**
* String to class converter
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class StringToClassConverter
extends AbstractConverter
{
public StringToClassConverter()
{
super( String.class, Class.class );
}

public Object convert( final Object original, final Context context )
throws Exception
{
return Class.forName( (String)original );
}
}


+ 32
- 0
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToDoubleConverter.java View File

@@ -0,0 +1,32 @@
/*
* 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.ant.modules.basic;

import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;

/**
* String to double converter
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class StringToDoubleConverter
extends AbstractConverter
{
public StringToDoubleConverter()
{
super( String.class, Double.class );
}

public Object convert( final Object original, final Context context )
throws Exception
{
return new Double( (String)original );
}
}


+ 35
- 0
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFileConverter.java View File

@@ -0,0 +1,35 @@
/*
* 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.ant.modules.basic;

import java.io.File;
import org.apache.ant.convert.AbstractConverter;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.avalon.Context;

/**
* String to file converter
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class StringToFileConverter
extends AbstractConverter
{
public StringToFileConverter()
{
super( String.class, File.class );
}

public Object convert( final Object original, final Context context )
throws Exception
{
final TaskletContext taskletContext = (TaskletContext)context;
return taskletContext.resolveFile( (String)original );
}
}


+ 32
- 0
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFloatConverter.java View File

@@ -0,0 +1,32 @@
/*
* 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.ant.modules.basic;

import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;

/**
* String to float converter
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class StringToFloatConverter
extends AbstractConverter
{
public StringToFloatConverter()
{
super( String.class, Float.class );
}

public Object convert( final Object original, final Context context )
throws Exception
{
return new Float( (String)original );
}
}


+ 32
- 0
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToIntegerConverter.java View File

@@ -0,0 +1,32 @@
/*
* 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.ant.modules.basic;

import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;

/**
* String to integer converter.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class StringToIntegerConverter
extends AbstractConverter
{
public StringToIntegerConverter()
{
super( String.class, Integer.class );
}

public Object convert( final Object original, final Context context )
throws Exception
{
return new Integer( (String)original );
}
}


+ 32
- 0
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToLongConverter.java View File

@@ -0,0 +1,32 @@
/*
* 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.ant.modules.basic;

import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;

/**
* String to long converter
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class StringToLongConverter
extends AbstractConverter
{
public StringToLongConverter()
{
super( String.class, Long.class );
}

public Object convert( final Object original, final Context context )
throws Exception
{
return new Long( (String)original );
}
}


+ 32
- 0
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToShortConverter.java View File

@@ -0,0 +1,32 @@
/*
* 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.ant.modules.basic;

import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;

/**
* String to short converter
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class StringToShortConverter
extends AbstractConverter
{
public StringToShortConverter()
{
super( String.class, Short.class );
}

public Object convert( final Object original, final Context context )
throws Exception
{
return new Short( (String)original );
}
}


+ 33
- 0
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToURLConverter.java View File

@@ -0,0 +1,33 @@
/*
* 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.ant.modules.basic;

import java.net.URL;
import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;

/**
* String to url converter
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class StringToURLConverter
extends AbstractConverter
{
public StringToURLConverter()
{
super( String.class, URL.class );
}

public Object convert( final Object original, final Context context )
throws Exception
{
return new URL( (String)original );
}
}


Loading…
Cancel
Save