git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274774 13f79535-47bb-0310-9956-ffa450edef68master
@@ -35,7 +35,7 @@ | |||
<!-- Import conventions --> | |||
<module name="AvoidStarImport"/> | |||
<module name="IllegalImport"/> | |||
<!-- <module name="IllegalImport"/> --> | |||
<module name="RedundantImport"/> | |||
<module name="UnusedImports"/> | |||
@@ -100,7 +100,7 @@ | |||
<noframes> | |||
<h2>Frame Alert</h2> | |||
<p> | |||
This document is designed to be viewed using the frames feature. | |||
This document is designed to be viewed using the frames feature. | |||
If you see this message, you are using a non-frame-capable web client. | |||
</p> | |||
</noframes> | |||
@@ -113,8 +113,8 @@ | |||
<td class="text-align:right"><h2>CheckStyle Audit</h2></td> | |||
</tr> | |||
<tr> | |||
<td class="text-align:right">Designed for use with | |||
<a href='http://checkstyle.sourceforge.net/'>CheckStyle</a> and | |||
<td class="text-align:right">Designed for use with | |||
<a href='http://checkstyle.sourceforge.net/'>CheckStyle</a> and | |||
<a href='http://ant.apache.org/'>Ant</a>.</td> | |||
</tr> | |||
</table> | |||
@@ -152,10 +152,10 @@ | |||
background-color:#FFFFFF; | |||
color:#000000; | |||
} | |||
.a td { | |||
.oddrow td { | |||
background: #efefef; | |||
} | |||
.b td { | |||
.evenrow td { | |||
background: #fff; | |||
} | |||
th, td { | |||
@@ -305,14 +305,17 @@ | |||
<h3>Summary</h3> | |||
<xsl:variable name="fileCount" select="count(file)"/> | |||
<xsl:variable name="errorCount" select="count(file/error)"/> | |||
<xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/> | |||
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> | |||
<tr> | |||
<th>Files</th> | |||
<th>Total Files</th> | |||
<th>Files With Errors</th> | |||
<th>Errors</th> | |||
</tr> | |||
<tr> | |||
<xsl:call-template name="alternated-row"/> | |||
<td><xsl:value-of select="$fileCount"/></td> | |||
<td><xsl:value-of select="$fileErrorCount"/></td> | |||
<td><xsl:value-of select="$errorCount"/></td> | |||
</tr> | |||
</table> | |||
@@ -320,8 +323,8 @@ | |||
<xsl:template name="alternated-row"> | |||
<xsl:attribute name="class"> | |||
<xsl:if test="position() mod 2 = 1">a</xsl:if> | |||
<xsl:if test="position() mod 2 = 0">b</xsl:if> | |||
<xsl:if test="position() mod 2 = 1">oddrow</xsl:if> | |||
<xsl:if test="position() mod 2 = 0">evenrow</xsl:if> | |||
</xsl:attribute> | |||
</xsl:template> | |||
</xsl:stylesheet> | |||
@@ -91,7 +91,7 @@ | |||
</table> | |||
</section> | |||
</xsl:template> | |||
<xsl:template match="file" mode="filelist"> | |||
<tr> | |||
<xsl:call-template name="alternated-row"/> | |||
@@ -139,14 +139,17 @@ | |||
<section name="Summary"> | |||
<xsl:variable name="fileCount" select="count(file)"/> | |||
<xsl:variable name="errorCount" select="count(file/error)"/> | |||
<xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/> | |||
<table> | |||
<tr> | |||
<th>Files</th> | |||
<th>Files With Errors</th> | |||
<th>Errors</th> | |||
</tr> | |||
<tr> | |||
<xsl:call-template name="alternated-row"/> | |||
<td><xsl:value-of select="$fileCount"/></td> | |||
<td><xsl:value-of select="$fileErrorCount"/></td> | |||
<td><xsl:value-of select="$errorCount"/></td> | |||
</tr> | |||
</table> | |||
@@ -63,12 +63,12 @@ import java.util.Enumeration; | |||
- ns param. It could be used to provide "namespaces" for properties, which | |||
may be more flexible. | |||
- Object value. In ant1.5 String is used for Properties - but it would be nice | |||
to support generic Objects ( the property remains imutable - you can't change | |||
the associated object ). This will also allow JSP-EL style setting using the | |||
Object if an attribute contains only the property ( name="${property}" could | |||
avoid Object->String->Object conversion ) | |||
- Currently we "chain" only for get and set property ( probably most users | |||
will only need that - if they need more they can replace the top helper ). | |||
to support generic Objects (the property remains imutable - you can't change | |||
the associated object). This will also allow JSP-EL style setting using the | |||
Object if an attribute contains only the property (name="${property}" could | |||
avoid Object->String->Object conversion) | |||
- Currently we "chain" only for get and set property (probably most users | |||
will only need that - if they need more they can replace the top helper). | |||
Need to discuss this and find if we need more. | |||
*/ | |||
@@ -84,66 +84,89 @@ import java.util.Enumeration; | |||
*/ | |||
public class PropertyHelper { | |||
protected Project project; | |||
protected PropertyHelper next; | |||
private Project project; | |||
private PropertyHelper next; | |||
/** Project properties map (usually String to String). */ | |||
protected Hashtable properties = new Hashtable(); | |||
private Hashtable properties = new Hashtable(); | |||
/** | |||
* Map of "user" properties (as created in the Ant task, for example). | |||
* Note that these key/value pairs are also always put into the | |||
* project properties, so only the project properties need to be queried. | |||
* Mapping is String to String. | |||
*/ | |||
protected Hashtable userProperties = new Hashtable(); | |||
private Hashtable userProperties = new Hashtable(); | |||
/** | |||
* Map of inherited "user" properties - that are those "user" | |||
* properties that have been created by tasks and not been set | |||
* from the command line or a GUI tool. | |||
* Mapping is String to String. | |||
*/ | |||
protected Hashtable inheritedProperties = new Hashtable(); | |||
private Hashtable inheritedProperties = new Hashtable(); | |||
/** | |||
* Default constructor. | |||
*/ | |||
protected PropertyHelper() { | |||
} | |||
// -------------------- Hook management -------------------- | |||
public void setProject(Project p ) { | |||
this.project=p; | |||
/** | |||
* Set the project for which this helper is performing property resolution | |||
* | |||
* @param p the projetc instance. | |||
*/ | |||
public void setProject(Project p) { | |||
this.project = p; | |||
} | |||
/** There are 2 ways to hook into property handling: | |||
* - you can replace the main PropertyHelper. The replacement is required | |||
* to support the same semantics ( of course :-) | |||
* to support the same semantics (of course :-) | |||
* | |||
* - you can chain a property helper capable of storing some properties. | |||
* Again, you are required to respect the immutability semantics ( at | |||
* least for non-dynamic properties ) | |||
* Again, you are required to respect the immutability semantics (at | |||
* least for non-dynamic properties) | |||
* | |||
* @param next | |||
* @param next the next property helper in the chain. | |||
*/ | |||
public void setNext( PropertyHelper next ) { | |||
this.next=next; | |||
public void setNext(PropertyHelper next) { | |||
this.next = next; | |||
} | |||
/** | |||
* Get the next property helper in the chain. | |||
* | |||
* @return the next proprty helper. | |||
*/ | |||
public PropertyHelper getNext() { | |||
return next; | |||
} | |||
/** Factory method to create a property processor. | |||
* Users can provide their own or replace it using "ant.PropertyHelper" | |||
* reference. User tasks can also add themself to the chain, and provide | |||
* dynamic properties. | |||
/** | |||
* Factory method to create a property processor. | |||
* Users can provide their own or replace it using "ant.PropertyHelper" | |||
* reference. User tasks can also add themself to the chain, and provide | |||
* dynamic properties. | |||
* | |||
* @param project the project fro which the property helper is required. | |||
* | |||
* @return the project's property helper. | |||
*/ | |||
public static PropertyHelper getPropertyHelper(Project project) { | |||
PropertyHelper ph=(PropertyHelper)project.getReference( "ant.PropertyHelper" ); | |||
if( ph!=null ) return ph; | |||
ph=new PropertyHelper(); | |||
ph.setProject( project ); | |||
PropertyHelper helper | |||
= (PropertyHelper) project.getReference("ant.PropertyHelper"); | |||
if (helper != null) { | |||
return helper; | |||
} | |||
helper = new PropertyHelper(); | |||
helper.setProject(project); | |||
project.addReference( "ant.PropertyHelper",ph ); | |||
return ph; | |||
project.addReference("ant.PropertyHelper", helper); | |||
return helper; | |||
} | |||
// -------------------- Methods to override -------------------- | |||
@@ -161,19 +184,18 @@ public class PropertyHelper { | |||
* @param value The new value of the property. | |||
* Must not be <code>null</code>. | |||
* @return true if this helper has stored the property, false if it | |||
* couldn't. Each helper should delegate to the next one ( unless it | |||
* has a good reason not to ). | |||
* couldn't. Each helper should delegate to the next one (unless it | |||
* has a good reason not to). | |||
*/ | |||
public boolean setPropertyHook(String ns, String name, | |||
Object value, | |||
boolean inherited, boolean user, | |||
boolean isNew) | |||
{ | |||
if( getNext()!=null ) { | |||
boolean subst=getNext().setPropertyHook(ns, name, value, | |||
boolean isNew) { | |||
if (getNext() != null) { | |||
boolean subst = getNext().setPropertyHook(ns, name, value, | |||
inherited, user, isNew); | |||
// If next has handled the property | |||
if( subst ) { | |||
if (subst) { | |||
return true; | |||
} | |||
} | |||
@@ -189,15 +211,19 @@ public class PropertyHelper { | |||
* @return | |||
*/ | |||
public Object getPropertyHook(String ns, String name, boolean user) { | |||
if( getNext() != null ) { | |||
Object o=getNext().getPropertyHook(ns, name, user); | |||
if( o!= null ) return o; | |||
if (getNext() != null) { | |||
Object o = getNext().getPropertyHook(ns, name, user); | |||
if (o != null) { | |||
return o; | |||
} | |||
} | |||
// Experimental/Testing, will be removed | |||
if( name.startsWith( "toString:" )) { | |||
name=name.substring( "toString:".length()); | |||
Object v=project.getReference( name ); | |||
if( v==null ) return null; | |||
if (name.startsWith("toString:")) { | |||
name = name.substring("toString:".length()); | |||
Object v = project.getReference(name); | |||
if (v == null) { | |||
return null; | |||
} | |||
return v.toString(); | |||
} | |||
@@ -207,9 +233,9 @@ public class PropertyHelper { | |||
// -------------------- Optional methods -------------------- | |||
// You can override those methods if you want to optimize or | |||
// do advanced things ( like support a special syntax ). | |||
// do advanced things (like support a special syntax). | |||
// The methods do not chain - you should use them when embedding ant | |||
// ( by replacing the main helper ) | |||
// (by replacing the main helper) | |||
/** | |||
* Parses a string containing <code>${xxx}</code> style property | |||
@@ -232,8 +258,7 @@ public class PropertyHelper { | |||
*/ | |||
public void parsePropertyString(String value, Vector fragments, | |||
Vector propertyRefs) | |||
throws BuildException | |||
{ | |||
throws BuildException { | |||
parsePropertyStringDefault(value, fragments, propertyRefs); | |||
} | |||
@@ -256,8 +281,7 @@ public class PropertyHelper { | |||
*/ | |||
public String replaceProperties(String ns, String value, | |||
Hashtable keys) | |||
throws BuildException | |||
{ | |||
throws BuildException { | |||
if (value == null) { | |||
return null; | |||
} | |||
@@ -274,22 +298,22 @@ public class PropertyHelper { | |||
String fragment = (String) i.nextElement(); | |||
if (fragment == null) { | |||
String propertyName = (String) j.nextElement(); | |||
Object replacement=null; | |||
Object replacement = null; | |||
// try to get it from the project or keys | |||
// Backward compatibility | |||
if( keys!=null ) { | |||
replacement=keys.get(propertyName); | |||
if (keys != null) { | |||
replacement = keys.get(propertyName); | |||
} | |||
if( replacement==null ) { | |||
replacement=getProperty(ns, propertyName); | |||
if (replacement == null) { | |||
replacement = getProperty(ns, propertyName); | |||
} | |||
if (replacement == null ) { | |||
if (replacement == null) { | |||
project.log("Property ${" + propertyName | |||
+ "} has not been set", Project.MSG_VERBOSE); | |||
} | |||
fragment = (replacement!=null) | |||
fragment = (replacement != null) | |||
? replacement.toString() | |||
: "${" + propertyName + "}"; | |||
} | |||
@@ -309,19 +333,18 @@ public class PropertyHelper { | |||
* added. | |||
*/ | |||
public synchronized boolean setProperty(String ns, String name, | |||
Object value, boolean verbose) | |||
{ | |||
// user ( CLI ) properties take precedence | |||
Object value, boolean verbose) { | |||
// user (CLI) properties take precedence | |||
if (null != userProperties.get(name)) { | |||
if( verbose ) { | |||
if (verbose) { | |||
project.log("Override ignored for user property " + name, | |||
Project.MSG_VERBOSE); | |||
} | |||
return false; | |||
} | |||
boolean done=this.setPropertyHook(ns, name, value, false, false, false); | |||
if( done ) { | |||
boolean done = setPropertyHook(ns, name, value, false, false, false); | |||
if (done) { | |||
return true; | |||
} | |||
@@ -330,9 +353,9 @@ public class PropertyHelper { | |||
Project.MSG_VERBOSE); | |||
} | |||
if( verbose ) { | |||
project.log("Setting project property: " + name + " -> " + | |||
value, Project.MSG_DEBUG); | |||
if (verbose) { | |||
project.log("Setting project property: " + name + " -> " | |||
+ value, Project.MSG_DEBUG); | |||
} | |||
properties.put(name, value); | |||
return true; | |||
@@ -350,22 +373,21 @@ public class PropertyHelper { | |||
* @since Ant 1.6 | |||
*/ | |||
public synchronized void setNewProperty(String ns, String name, | |||
Object value) | |||
{ | |||
Object value) { | |||
if (null != properties.get(name)) { | |||
project.log("Override ignored for property " + name, | |||
Project.MSG_VERBOSE); | |||
return; | |||
} | |||
boolean done=this.setPropertyHook(ns, name, value, false, true, false); | |||
if( done ) { | |||
boolean done = setPropertyHook(ns, name, value, false, true, false); | |||
if (done) { | |||
return; | |||
} | |||
project.log("Setting project property: " + name + " -> " + | |||
value, Project.MSG_DEBUG); | |||
if( name!= null && value!=null ) { | |||
project.log("Setting project property: " + name + " -> " | |||
+ value, Project.MSG_DEBUG); | |||
if (name != null && value != null) { | |||
properties.put(name, value); | |||
} | |||
} | |||
@@ -379,14 +401,13 @@ public class PropertyHelper { | |||
* Must not be <code>null</code>. | |||
*/ | |||
public synchronized void setUserProperty(String ns, String name, | |||
Object value) | |||
{ | |||
project.log("Setting ro project property: " + name + " -> " + | |||
value, Project.MSG_DEBUG); | |||
Object value) { | |||
project.log("Setting ro project property: " + name + " -> " | |||
+ value, Project.MSG_DEBUG); | |||
userProperties.put(name, value); | |||
boolean done=this.setPropertyHook(ns, name, value, false, false, true); | |||
if( done ) { | |||
boolean done = setPropertyHook(ns, name, value, false, false, true); | |||
if (done) { | |||
return; | |||
} | |||
properties.put(name, value); | |||
@@ -404,16 +425,15 @@ public class PropertyHelper { | |||
* Must not be <code>null</code>. | |||
*/ | |||
public synchronized void setInheritedProperty(String ns, String name, | |||
Object value) | |||
{ | |||
Object value) { | |||
inheritedProperties.put(name, value); | |||
project.log("Setting ro project property: " + name + " -> " + | |||
value, Project.MSG_DEBUG); | |||
project.log("Setting ro project property: " + name + " -> " | |||
+ value, Project.MSG_DEBUG); | |||
userProperties.put(name, value); | |||
boolean done=this.setPropertyHook(ns, name, value, true, false, false); | |||
if( done ) { | |||
boolean done = setPropertyHook(ns, name, value, true, false, false); | |||
if (done) { | |||
return; | |||
} | |||
properties.put(name, value); | |||
@@ -436,8 +456,8 @@ public class PropertyHelper { | |||
return null; | |||
} | |||
Object o=getPropertyHook(ns, name, false); | |||
if( o!= null ) { | |||
Object o = getPropertyHook(ns, name, false); | |||
if (o != null) { | |||
return o; | |||
} | |||
@@ -456,8 +476,8 @@ public class PropertyHelper { | |||
if (name == null) { | |||
return null; | |||
} | |||
Object o=getPropertyHook(ns, name, true); | |||
if( o!= null ) { | |||
Object o = getPropertyHook(ns, name, true); | |||
if (o != null) { | |||
return o; | |||
} | |||
return userProperties.get(name); | |||
@@ -466,7 +486,7 @@ public class PropertyHelper { | |||
// -------------------- Access to property tables -------------------- | |||
// This is used to support ant call and similar tasks. It should be | |||
// deprecated, it is possible to use a better ( more efficient ) | |||
// deprecated, it is possible to use a better (more efficient) | |||
// mechanism to preserve the context. | |||
// TODO: do we need to delegate ? | |||
@@ -559,16 +579,15 @@ public class PropertyHelper { | |||
// -------------------- Property parsing -------------------- | |||
// Moved from ProjectHelper. You can override the static method - | |||
// this is used for backward compatibility ( for code that calls | |||
// the parse method in ProjectHelper ). | |||
// this is used for backward compatibility (for code that calls | |||
// the parse method in ProjectHelper). | |||
/** Default parsing method. It is here only to support backward compat | |||
* for the static ProjectHelper.parsePropertyString(). | |||
*/ | |||
static void parsePropertyStringDefault(String value, Vector fragments, | |||
Vector propertyRefs) | |||
throws BuildException | |||
{ | |||
throws BuildException { | |||
int prev = 0; | |||
int pos; | |||
//search for the next instance of $ from the 'prev' position | |||
@@ -57,7 +57,13 @@ package org.apache.tools.ant.listener; | |||
import org.apache.commons.logging.Log; | |||
import org.apache.commons.logging.LogConfigurationException; | |||
import org.apache.commons.logging.LogFactory; | |||
import org.apache.tools.ant.*; | |||
import org.apache.tools.ant.BuildListener; | |||
import org.apache.tools.ant.BuildLogger; | |||
import org.apache.tools.ant.BuildEvent; | |||
import org.apache.tools.ant.Project; | |||
import org.apache.tools.ant.Task; | |||
import org.apache.tools.ant.UnknownElement; | |||
import java.io.PrintStream; | |||
@@ -74,7 +80,7 @@ import java.io.PrintStream; | |||
* | |||
* In all target and project names we replace "." and " " with "-". | |||
* | |||
* TODO: we should use the advanced context logging features ( and expose them | |||
* TODO: we should use the advanced context logging features (and expose them | |||
* in c-l first :-) | |||
* TODO: this is _very_ inefficient. Switching the out and tracking the logs | |||
* can be optimized a lot - but may require few more changes to the core. | |||
@@ -96,18 +102,18 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||
public CommonsLoggingListener() { | |||
} | |||
private Log getLog( String cat, String suffix ) { | |||
if( suffix != null ) { | |||
suffix=suffix.replace('.', '-'); | |||
suffix=suffix.replace(' ', '-'); | |||
cat=cat + "." + suffix; | |||
private Log getLog(String cat, String suffix) { | |||
if (suffix != null) { | |||
suffix = suffix.replace('.', '-'); | |||
suffix = suffix.replace(' ', '-'); | |||
cat = cat + "." + suffix; | |||
} | |||
PrintStream tmpOut=System.out; | |||
PrintStream tmpErr=System.err; | |||
System.setOut( out ); | |||
System.setErr( err ); | |||
PrintStream tmpOut = System.out; | |||
PrintStream tmpErr = System.err; | |||
System.setOut(out); | |||
System.setErr(err); | |||
if( ! initialized ) { | |||
if (!initialized) { | |||
try { | |||
logFactory = LogFactory.getFactory(); | |||
} catch (LogConfigurationException e) { | |||
@@ -117,9 +123,9 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||
} | |||
initialized = true; | |||
Log log=logFactory.getInstance(cat); | |||
System.setOut( tmpOut ); | |||
System.setErr( tmpErr ); | |||
Log log = logFactory.getInstance(cat); | |||
System.setOut(tmpOut); | |||
System.setErr(tmpErr); | |||
return log; | |||
} | |||
@@ -127,11 +133,11 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||
* @see BuildListener#buildStarted | |||
*/ | |||
public void buildStarted(BuildEvent event) { | |||
String categoryString= "org.apache.tools.ant.Project"; | |||
Log log=getLog(categoryString, null); | |||
String categoryString = "org.apache.tools.ant.Project"; | |||
Log log = getLog(categoryString, null); | |||
if (initialized) { | |||
realLog( log, "Build started.", Project.MSG_INFO, null); | |||
realLog(log, "Build started.", Project.MSG_INFO, null); | |||
} | |||
} | |||
@@ -140,13 +146,13 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||
*/ | |||
public void buildFinished(BuildEvent event) { | |||
if (initialized) { | |||
String categoryString= "org.apache.tools.ant.Project"; | |||
Log log=getLog(categoryString, event.getProject().getName()); | |||
String categoryString = "org.apache.tools.ant.Project"; | |||
Log log = getLog(categoryString, event.getProject().getName()); | |||
if (event.getException() == null) { | |||
realLog( log, "Build finished.", Project.MSG_INFO, null); | |||
realLog(log, "Build finished.", Project.MSG_INFO, null); | |||
} else { | |||
realLog( log, "Build finished with error.", Project.MSG_ERR, | |||
realLog(log, "Build finished with error.", Project.MSG_ERR, | |||
event.getException()); | |||
} | |||
} | |||
@@ -158,10 +164,10 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||
public void targetStarted(BuildEvent event) { | |||
if (initialized) { | |||
Log log = getLog("org.apache.tools.ant.Target", | |||
event.getTarget().getName() ); | |||
event.getTarget().getName()); | |||
// Since task log category includes target, we don't really | |||
// need this message | |||
realLog( log, "Start: " + event.getTarget().getName(), | |||
realLog(log, "Start: " + event.getTarget().getName(), | |||
Project.MSG_DEBUG, null); | |||
} | |||
} | |||
@@ -173,7 +179,7 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||
if (initialized) { | |||
String targetName = event.getTarget().getName(); | |||
Log log = getLog("org.apache.tools.ant.Target", | |||
event.getTarget().getName() ); | |||
event.getTarget().getName()); | |||
if (event.getException() == null) { | |||
realLog(log, "Target end: " + targetName, Project.MSG_DEBUG, null); | |||
} else { | |||
@@ -190,16 +196,16 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||
public void taskStarted(BuildEvent event) { | |||
if (initialized) { | |||
Task task = event.getTask(); | |||
Object real=task; | |||
if( task instanceof UnknownElement ) { | |||
Object realObj=((UnknownElement)task).getTask(); | |||
if( realObj!=null ) { | |||
real=realObj; | |||
Object real = task; | |||
if (task instanceof UnknownElement) { | |||
Object realObj = ((UnknownElement) task).getTask(); | |||
if (realObj != null) { | |||
real = realObj; | |||
} | |||
} | |||
Log log = getLog(real.getClass().getName(), null); | |||
if( log.isTraceEnabled()) { | |||
realLog( log, "Task \"" + task.getTaskName() + "\" started ", | |||
if (log.isTraceEnabled()) { | |||
realLog(log, "Task \"" + task.getTaskName() + "\" started ", | |||
Project.MSG_VERBOSE, null); | |||
} | |||
} | |||
@@ -211,21 +217,21 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||
public void taskFinished(BuildEvent event) { | |||
if (initialized) { | |||
Task task = event.getTask(); | |||
Object real=task; | |||
if( task instanceof UnknownElement ) { | |||
Object realObj=((UnknownElement)task).getTask(); | |||
if( realObj!=null ) { | |||
real=realObj; | |||
Object real = task; | |||
if (task instanceof UnknownElement) { | |||
Object realObj = ((UnknownElement) task).getTask(); | |||
if (realObj != null) { | |||
real = realObj; | |||
} | |||
} | |||
Log log = getLog(real.getClass().getName(), null); | |||
if (event.getException() == null) { | |||
if( log.isTraceEnabled() ) { | |||
realLog( log, "Task \"" + task.getTaskName() + "\" finished.", | |||
if (log.isTraceEnabled()) { | |||
realLog(log, "Task \"" + task.getTaskName() + "\" finished.", | |||
Project.MSG_VERBOSE, null); | |||
} | |||
} else { | |||
realLog( log, "Task \"" + task.getTaskName() | |||
realLog(log, "Task \"" + task.getTaskName() | |||
+ "\" finished with error.", Project.MSG_ERR, | |||
event.getException()); | |||
} | |||
@@ -239,63 +245,62 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||
public void messageLogged(BuildEvent event) { | |||
if (initialized) { | |||
Object categoryObject = event.getTask(); | |||
String categoryString=null; | |||
String categoryDetail=null; | |||
String categoryString = null; | |||
String categoryDetail = null; | |||
if (categoryObject == null) { | |||
categoryObject = event.getTarget(); | |||
if (categoryObject == null) { | |||
categoryObject = event.getProject(); | |||
categoryString="org.apache.tools.ant.Project"; | |||
categoryDetail=event.getProject().getName(); | |||
categoryString = "org.apache.tools.ant.Project"; | |||
categoryDetail = event.getProject().getName(); | |||
} else { | |||
categoryString= "org.apache.tools.ant.Target"; | |||
categoryDetail=event.getTarget().getName(); | |||
categoryString = "org.apache.tools.ant.Target"; | |||
categoryDetail = event.getTarget().getName(); | |||
} | |||
} else { | |||
// It's a task - append the target | |||
if( event.getTarget() != null ) { | |||
categoryString=categoryObject.getClass().getName(); | |||
categoryDetail=event.getTarget().getName(); | |||
if (event.getTarget() != null) { | |||
categoryString = categoryObject.getClass().getName(); | |||
categoryDetail = event.getTarget().getName(); | |||
} else { | |||
categoryString=categoryObject.getClass().getName(); | |||
categoryString = categoryObject.getClass().getName(); | |||
} | |||
} | |||
Log log = getLog(categoryString, categoryDetail); | |||
int priority=event.getPriority(); | |||
String message=event.getMessage(); | |||
realLog( log, message, priority , null); | |||
int priority = event.getPriority(); | |||
String message = event.getMessage(); | |||
realLog(log, message, priority , null); | |||
} | |||
} | |||
private void realLog( Log log, String message, int priority, Throwable t ) | |||
{ | |||
PrintStream tmpOut=System.out; | |||
PrintStream tmpErr=System.err; | |||
System.setOut( out ); | |||
System.setErr( err ); | |||
private void realLog(Log log, String message, int priority, Throwable t) { | |||
PrintStream tmpOut = System.out; | |||
PrintStream tmpErr = System.err; | |||
System.setOut(out); | |||
System.setErr(err); | |||
switch (priority) { | |||
case Project.MSG_ERR: | |||
if( t==null ) { | |||
if (t == null) { | |||
log.error(message); | |||
} else { | |||
log.error( message,t ); | |||
log.error(message, t); | |||
} | |||
break; | |||
case Project.MSG_WARN: | |||
if( t==null ) { | |||
if (t == null) { | |||
log.warn(message); | |||
} else { | |||
log.warn( message,t ); | |||
log.warn(message, t); | |||
} | |||
break; | |||
case Project.MSG_INFO: | |||
if( t==null ) { | |||
if (t == null) { | |||
log.info(message); | |||
} else { | |||
log.info( message,t ); | |||
log.info(message, t); | |||
} | |||
break; | |||
case Project.MSG_VERBOSE: | |||
@@ -308,8 +313,8 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||
log.error(message); | |||
break; | |||
} | |||
System.setOut( tmpOut ); | |||
System.setErr( tmpErr ); | |||
System.setOut(tmpOut); | |||
System.setErr(tmpErr); | |||
} | |||
PrintStream out; | |||
@@ -328,7 +333,7 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||
} | |||
public void setErrorPrintStream(PrintStream err) { | |||
this.err=err; | |||
this.err = err; | |||
} | |||
} |
@@ -353,6 +353,7 @@ public abstract class Definer extends Task { | |||
try { | |||
is.close(); | |||
} catch (IOException e) { | |||
// ignore | |||
} | |||
} | |||
} | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* Copyright (c) 2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2001-2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -61,6 +61,9 @@ package org.apache.tools.ant.taskdefs.optional.ccm; | |||
*/ | |||
public class CCMCheckout extends CCMCheck { | |||
/** | |||
* default constructor | |||
*/ | |||
public CCMCheckout() { | |||
super(); | |||
setCcmAction(COMMAND_CHECKOUT); | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -71,6 +71,9 @@ import org.apache.tools.ant.util.depend.AbstractAnalyzer; | |||
* @author Conor MacNeill | |||
*/ | |||
public class AntAnalyzer extends AbstractAnalyzer { | |||
/** | |||
* Default constructor | |||
*/ | |||
public AntAnalyzer() { | |||
} | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -138,7 +138,7 @@ public abstract class ConstantPoolEntry { | |||
* be read. | |||
* @return the appropriate ConstantPoolEntry subclass representing the | |||
* constant pool entry from the stream. | |||
* @exception IOException if the constant pool entry cannot be read | |||
* @exception IOException if the constant pool entry cannot be read | |||
* from the stream | |||
*/ | |||
public static ConstantPoolEntry readEntry(DataInputStream cpStream) | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -63,7 +63,7 @@ import java.io.IOException; | |||
* @author Conor MacNeill | |||
*/ | |||
public class DoubleCPInfo extends ConstantCPInfo { | |||
/** | |||
/** | |||
* Constructor | |||
*/ | |||
public DoubleCPInfo() { | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -89,7 +89,7 @@ public class StringCPInfo extends ConstantCPInfo { | |||
* @return the string representation of this constant pool entry. | |||
*/ | |||
public String toString() { | |||
return "String Constant Pool Entry for " | |||
return "String Constant Pool Entry for " | |||
+ getValue() + "[" + index + "]"; | |||
} | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -66,38 +66,35 @@ import org.apache.tools.ant.Task; | |||
* @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
* @ant.task name="jarlib-available" | |||
*/ | |||
public class JarLibAvailableTask | |||
extends Task | |||
{ | |||
public class JarLibAvailableTask extends Task { | |||
/** | |||
* The library to display information about. | |||
*/ | |||
private File m_file; | |||
private File libraryFile; | |||
/** | |||
* Filesets specifying all the librarys | |||
* to display information about. | |||
*/ | |||
private final Vector m_extensionSets = new Vector(); | |||
private final Vector extensionFileSets = new Vector(); | |||
/** | |||
* The name of the property to set if extension is available. | |||
*/ | |||
private String m_property; | |||
private String propertyName; | |||
/** | |||
* The extension that is required. | |||
*/ | |||
private ExtensionAdapter m_extension; | |||
private ExtensionAdapter requiredExtension; | |||
/** | |||
* The name of property to set if extensions are available. | |||
* | |||
* @param property The name of property to set if extensions is available. | |||
*/ | |||
public void setProperty( final String property ) | |||
{ | |||
m_property = property; | |||
public void setProperty(final String property) { | |||
this.propertyName = property; | |||
} | |||
/** | |||
@@ -105,9 +102,8 @@ public class JarLibAvailableTask | |||
* | |||
* @param file The jar library to check. | |||
*/ | |||
public void setFile( final File file ) | |||
{ | |||
m_file = file; | |||
public void setFile(final File file) { | |||
this.libraryFile = file; | |||
} | |||
/** | |||
@@ -115,15 +111,13 @@ public class JarLibAvailableTask | |||
* | |||
* @param extension Set the Extension looking for. | |||
*/ | |||
public void addConfiguredExtension( final ExtensionAdapter extension ) | |||
{ | |||
if( null != m_extension ) | |||
{ | |||
final String message = "Can not specify extension to " + | |||
"search for multiple times."; | |||
throw new BuildException( message ); | |||
public void addConfiguredExtension(final ExtensionAdapter extension) { | |||
if (null != requiredExtension) { | |||
final String message = "Can not specify extension to " | |||
+ "search for multiple times."; | |||
throw new BuildException(message); | |||
} | |||
m_extension = extension; | |||
requiredExtension = extension; | |||
} | |||
/** | |||
@@ -131,47 +125,42 @@ public class JarLibAvailableTask | |||
* | |||
* @param extensionSet a set of extensions to search in. | |||
*/ | |||
public void addConfiguredExtensionSet( final ExtensionSet extensionSet ) | |||
{ | |||
m_extensionSets.addElement( extensionSet ); | |||
public void addConfiguredExtensionSet(final ExtensionSet extensionSet) { | |||
extensionFileSets.addElement(extensionSet); | |||
} | |||
public void execute() | |||
throws BuildException | |||
{ | |||
/** | |||
* Execute the task. | |||
* | |||
* @throws BuildException if somethign goes wrong. | |||
*/ | |||
public void execute() throws BuildException { | |||
validate(); | |||
final Extension test = m_extension.toExtension(); | |||
final Extension test = requiredExtension.toExtension(); | |||
// Check if list of files to check has been specified | |||
if( !m_extensionSets.isEmpty() ) | |||
{ | |||
final Iterator iterator = m_extensionSets.iterator(); | |||
while( iterator.hasNext() ) | |||
{ | |||
final ExtensionSet extensionSet = (ExtensionSet)iterator.next(); | |||
if (!extensionFileSets.isEmpty()) { | |||
final Iterator iterator = extensionFileSets.iterator(); | |||
while (iterator.hasNext()) { | |||
final ExtensionSet extensionSet | |||
= (ExtensionSet) iterator.next(); | |||
final Extension[] extensions = | |||
extensionSet.toExtensions( getProject() ); | |||
for( int i = 0; i < extensions.length; i++ ) | |||
{ | |||
extensionSet.toExtensions(getProject()); | |||
for (int i = 0; i < extensions.length; i++) { | |||
final Extension extension = extensions[ i ]; | |||
if( extension.isCompatibleWith( test ) ) | |||
{ | |||
getProject().setNewProperty( m_property, "true" ); | |||
if (extension.isCompatibleWith(test)) { | |||
getProject().setNewProperty(propertyName, "true"); | |||
} | |||
} | |||
} | |||
} | |||
else | |||
{ | |||
final Manifest manifest = ExtensionUtil.getManifest( m_file ); | |||
final Extension[] extensions = Extension.getAvailable( manifest ); | |||
for( int i = 0; i < extensions.length; i++ ) | |||
{ | |||
} else { | |||
final Manifest manifest = ExtensionUtil.getManifest(libraryFile); | |||
final Extension[] extensions = Extension.getAvailable(manifest); | |||
for (int i = 0; i < extensions.length; i++) { | |||
final Extension extension = extensions[ i ]; | |||
if( extension.isCompatibleWith( test ) ) | |||
{ | |||
getProject().setNewProperty( m_property, "true" ); | |||
if (extension.isCompatibleWith(test)) { | |||
getProject().setNewProperty(propertyName, "true"); | |||
} | |||
} | |||
} | |||
@@ -182,29 +171,23 @@ public class JarLibAvailableTask | |||
* | |||
* @throws BuildException if invalid parameters found | |||
*/ | |||
private void validate() | |||
throws BuildException | |||
{ | |||
if( null == m_extension ) | |||
{ | |||
private void validate() throws BuildException { | |||
if (null == requiredExtension) { | |||
final String message = "Extension element must be specified."; | |||
throw new BuildException( message ); | |||
throw new BuildException(message); | |||
} | |||
if( null == m_file && m_extensionSets.isEmpty() ) | |||
{ | |||
if (null == libraryFile && extensionFileSets.isEmpty()) { | |||
final String message = "File attribute not specified."; | |||
throw new BuildException( message ); | |||
throw new BuildException(message); | |||
} | |||
if( null != m_file && !m_file.exists() ) | |||
{ | |||
final String message = "File '" + m_file + "' does not exist."; | |||
throw new BuildException( message ); | |||
if (null != libraryFile && !libraryFile.exists()) { | |||
final String message = "File '" + libraryFile + "' does not exist."; | |||
throw new BuildException(message); | |||
} | |||
if( null != m_file && !m_file.isFile() ) | |||
{ | |||
final String message = "\'" + m_file + "\' is not a file."; | |||
throw new BuildException( message ); | |||
if (null != libraryFile && !libraryFile.isFile()) { | |||
final String message = "\'" + libraryFile + "\' is not a file."; | |||
throw new BuildException(message); | |||
} | |||
} | |||
} |
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -75,28 +75,25 @@ import org.apache.tools.ant.types.FileSet; | |||
* @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
* @ant.task name="jarlib-display" | |||
*/ | |||
public class JarLibDisplayTask | |||
extends Task | |||
{ | |||
public class JarLibDisplayTask extends Task { | |||
/** | |||
* The library to display information about. | |||
*/ | |||
private File m_file; | |||
private File libraryFile; | |||
/** | |||
* Filesets specifying all the librarys | |||
* to display information about. | |||
*/ | |||
private final Vector m_filesets = new Vector(); | |||
private final Vector libraryFileSets = new Vector(); | |||
/** | |||
* The JAR library to display information for. | |||
* | |||
* @param file The jar library to display information for. | |||
*/ | |||
public void setFile( final File file ) | |||
{ | |||
m_file = file; | |||
public void setFile(final File file) { | |||
this.libraryFile = file; | |||
} | |||
/** | |||
@@ -104,37 +101,35 @@ public class JarLibDisplayTask | |||
* | |||
* @param fileSet a set of files about which library data will be displayed. | |||
*/ | |||
public void addFileset( final FileSet fileSet ) | |||
{ | |||
m_filesets.addElement( fileSet ); | |||
public void addFileset(final FileSet fileSet) { | |||
libraryFileSets.addElement(fileSet); | |||
} | |||
public void execute() | |||
throws BuildException | |||
{ | |||
/** | |||
* Execute the task. | |||
* | |||
* @throws BuildException if the task fails. | |||
*/ | |||
public void execute() throws BuildException { | |||
validate(); | |||
final LibraryDisplayer displayer = new LibraryDisplayer(); | |||
// Check if list of files to check has been specified | |||
if( !m_filesets.isEmpty() ) | |||
{ | |||
final Iterator iterator = m_filesets.iterator(); | |||
while( iterator.hasNext() ) | |||
{ | |||
final FileSet fileSet = (FileSet)iterator.next(); | |||
final DirectoryScanner scanner = fileSet.getDirectoryScanner( getProject() ); | |||
if (!libraryFileSets.isEmpty()) { | |||
final Iterator iterator = libraryFileSets.iterator(); | |||
while (iterator.hasNext()) { | |||
final FileSet fileSet = (FileSet) iterator.next(); | |||
final DirectoryScanner scanner | |||
= fileSet.getDirectoryScanner(getProject()); | |||
final File basedir = scanner.getBasedir(); | |||
final String[] files = scanner.getIncludedFiles(); | |||
for( int i = 0; i < files.length; i++ ) | |||
{ | |||
final File file = new File( basedir, files[ i ] ); | |||
displayer.displayLibrary( file ); | |||
for (int i = 0; i < files.length; i++) { | |||
final File file = new File(basedir, files[ i ]); | |||
displayer.displayLibrary(file); | |||
} | |||
} | |||
} | |||
else | |||
{ | |||
displayer.displayLibrary( m_file ); | |||
} else { | |||
displayer.displayLibrary(libraryFile); | |||
} | |||
} | |||
@@ -143,23 +138,18 @@ public class JarLibDisplayTask | |||
* | |||
* @throws BuildException if invalid parameters found | |||
*/ | |||
private void validate() | |||
throws BuildException | |||
{ | |||
if( null == m_file && m_filesets.isEmpty() ) | |||
{ | |||
private void validate() throws BuildException { | |||
if (null == libraryFile && libraryFileSets.isEmpty()) { | |||
final String message = "File attribute not specified."; | |||
throw new BuildException( message ); | |||
throw new BuildException(message); | |||
} | |||
if( null != m_file && !m_file.exists() ) | |||
{ | |||
final String message = "File '" + m_file + "' does not exist."; | |||
throw new BuildException( message ); | |||
if (null != libraryFile && !libraryFile.exists()) { | |||
final String message = "File '" + libraryFile + "' does not exist."; | |||
throw new BuildException(message); | |||
} | |||
if( null != m_file && !m_file.isFile() ) | |||
{ | |||
final String message = "\'" + m_file + "\' is not a file."; | |||
throw new BuildException( message ); | |||
if (null != libraryFile && !libraryFile.isFile()) { | |||
final String message = "\'" + libraryFile + "\' is not a file."; | |||
throw new BuildException(message); | |||
} | |||
} | |||
} |
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -80,9 +80,7 @@ import org.apache.tools.ant.Task; | |||
* @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
* @ant.task name="jarlib-manifest" | |||
*/ | |||
public final class JarLibManifestTask | |||
extends Task | |||
{ | |||
public final class JarLibManifestTask extends Task { | |||
/** | |||
* Version of manifest spec that task generates. | |||
*/ | |||
@@ -96,58 +94,56 @@ public final class JarLibManifestTask | |||
/** | |||
* The library to display information about. | |||
*/ | |||
private File m_destfile; | |||
private File destFile; | |||
/** | |||
* The extension supported by this library (if any). | |||
*/ | |||
private Extension m_extension; | |||
private Extension extension; | |||
/** | |||
* ExtensionAdapter objects representing | |||
* dependencies required by library. | |||
*/ | |||
private final ArrayList m_dependencies = new ArrayList(); | |||
private final ArrayList dependencies = new ArrayList(); | |||
/** | |||
* ExtensionAdapter objects representing optional | |||
* dependencies required by library. | |||
*/ | |||
private final ArrayList m_optionals = new ArrayList(); | |||
private final ArrayList optionals = new ArrayList(); | |||
/** | |||
* Extra attributes the user specifies for main section | |||
* in manifest. | |||
*/ | |||
private final ArrayList m_extraAttributes = new ArrayList(); | |||
private final ArrayList extraAttributes = new ArrayList(); | |||
/** | |||
* The location where generated manifest is placed. | |||
* | |||
* @param destfile The location where generated manifest is placed. | |||
* @param destFile The location where generated manifest is placed. | |||
*/ | |||
public void setDestfile( final File destfile ) | |||
{ | |||
m_destfile = destfile; | |||
public void setDestfile(final File destFile) { | |||
this.destFile = destFile; | |||
} | |||
/** | |||
* Adds an extension that this library implements. | |||
* | |||
* @param extensionAdapter an extension that this library implements. | |||
* | |||
* @throws BuildException if there is multiple extensions detected | |||
* in the library. | |||
*/ | |||
public void addConfiguredExtension( final ExtensionAdapter extensionAdapter ) | |||
throws BuildException | |||
{ | |||
if( null != m_extension ) | |||
{ | |||
public void addConfiguredExtension(final ExtensionAdapter extensionAdapter) | |||
throws BuildException { | |||
if (null != extension) { | |||
final String message = | |||
"Can not have multiple extensions defined in one library."; | |||
throw new BuildException( message ); | |||
} | |||
else | |||
{ | |||
m_extension = extensionAdapter.toExtension(); | |||
throw new BuildException(message); | |||
} else { | |||
extension = extensionAdapter.toExtension(); | |||
} | |||
} | |||
@@ -156,9 +152,8 @@ public final class JarLibManifestTask | |||
* | |||
* @param extensionSet a set of extensions that this library requires. | |||
*/ | |||
public void addConfiguredDepends( final ExtensionSet extensionSet ) | |||
{ | |||
m_dependencies.add( extensionSet ); | |||
public void addConfiguredDepends(final ExtensionSet extensionSet) { | |||
dependencies.add(extensionSet); | |||
} | |||
/** | |||
@@ -166,9 +161,8 @@ public final class JarLibManifestTask | |||
* | |||
* @param extensionSet a set of extensions that this library optionally requires. | |||
*/ | |||
public void addConfiguredOptions( final ExtensionSet extensionSet ) | |||
{ | |||
m_optionals.add( extensionSet ); | |||
public void addConfiguredOptions(final ExtensionSet extensionSet) { | |||
optionals.add(extensionSet); | |||
} | |||
/** | |||
@@ -176,56 +170,54 @@ public final class JarLibManifestTask | |||
* | |||
* @param attribute an attribute that is to be put in main section of manifest. | |||
*/ | |||
public void addConfiguredAttribute( final ExtraAttribute attribute ) | |||
{ | |||
m_extraAttributes.add( attribute ); | |||
public void addConfiguredAttribute(final ExtraAttribute attribute) { | |||
extraAttributes.add(attribute); | |||
} | |||
public void execute() | |||
throws BuildException | |||
{ | |||
/** | |||
* Execute the task. | |||
* | |||
* @throws BuildException if the task fails. | |||
*/ | |||
public void execute() throws BuildException { | |||
validate(); | |||
final Manifest manifest = new Manifest(); | |||
final Attributes attributes = manifest.getMainAttributes(); | |||
attributes.put( Attributes.Name.MANIFEST_VERSION, MANIFEST_VERSION ); | |||
final String createdBy = "Apache Ant " + getProject().getProperty( "ant.version" ); | |||
attributes.putValue( CREATED_BY, createdBy ); | |||
attributes.put(Attributes.Name.MANIFEST_VERSION, MANIFEST_VERSION); | |||
final String createdBy = "Apache Ant " + getProject().getProperty("ant.version"); | |||
attributes.putValue(CREATED_BY, createdBy); | |||
appendExtraAttributes( attributes ); | |||
appendExtraAttributes(attributes); | |||
if( null != m_extension ) | |||
{ | |||
Extension.addExtension( m_extension, attributes ); | |||
if (null != extension) { | |||
Extension.addExtension(extension, attributes); | |||
} | |||
//Add all the dependency data to manifest for dependencies | |||
final ArrayList depends = toExtensions( m_dependencies ); | |||
appendExtensionList( attributes, | |||
final ArrayList depends = toExtensions(dependencies); | |||
appendExtensionList(attributes, | |||
Extension.EXTENSION_LIST, | |||
"lib", | |||
depends.size() ); | |||
appendLibraryList( attributes, "lib", depends ); | |||
depends.size()); | |||
appendLibraryList(attributes, "lib", depends); | |||
//Add all the dependency data to manifest for "optional" | |||
//dependencies | |||
final ArrayList option = toExtensions( m_optionals ); | |||
appendExtensionList( attributes, | |||
final ArrayList option = toExtensions(optionals); | |||
appendExtensionList(attributes, | |||
Extension.OPTIONAL_EXTENSION_LIST, | |||
"opt", | |||
option.size() ); | |||
appendLibraryList( attributes, "opt", option ); | |||
option.size()); | |||
appendLibraryList(attributes, "opt", option); | |||
try | |||
{ | |||
final String message = "Generating manifest " + m_destfile.getAbsoluteFile(); | |||
log( message, Project.MSG_INFO ); | |||
writeManifest( manifest ); | |||
} | |||
catch( final IOException ioe ) | |||
{ | |||
throw new BuildException( ioe.getMessage(), ioe ); | |||
try { | |||
final String message = "Generating manifest " + destFile.getAbsoluteFile(); | |||
log(message, Project.MSG_INFO); | |||
writeManifest(manifest); | |||
} catch (final IOException ioe) { | |||
throw new BuildException(ioe.getMessage(), ioe); | |||
} | |||
} | |||
@@ -234,18 +226,14 @@ public final class JarLibManifestTask | |||
* | |||
* @throws BuildException if invalid parameters found | |||
*/ | |||
private void validate() | |||
throws BuildException | |||
{ | |||
if( null == m_destfile ) | |||
{ | |||
private void validate() throws BuildException { | |||
if (null == destFile) { | |||
final String message = "Destfile attribute not specified."; | |||
throw new BuildException( message ); | |||
throw new BuildException(message); | |||
} | |||
if( m_destfile.exists() && !m_destfile.isFile() ) | |||
{ | |||
final String message = m_destfile + " is not a file."; | |||
throw new BuildException( message ); | |||
if (destFile.exists() && !destFile.isFile()) { | |||
final String message = destFile + " is not a file."; | |||
throw new BuildException(message); | |||
} | |||
} | |||
@@ -255,15 +243,13 @@ public final class JarLibManifestTask | |||
* @param attributes the manifest section to write | |||
* attributes to | |||
*/ | |||
private void appendExtraAttributes( final Attributes attributes ) | |||
{ | |||
final Iterator iterator = m_extraAttributes.iterator(); | |||
while( iterator.hasNext() ) | |||
{ | |||
private void appendExtraAttributes(final Attributes attributes) { | |||
final Iterator iterator = extraAttributes.iterator(); | |||
while (iterator.hasNext()) { | |||
final ExtraAttribute attribute = | |||
(ExtraAttribute)iterator.next(); | |||
attributes.putValue( attribute.getName(), | |||
attribute.getValue() ); | |||
(ExtraAttribute) iterator.next(); | |||
attributes.putValue(attribute.getName(), | |||
attribute.getValue()); | |||
} | |||
} | |||
@@ -273,26 +259,19 @@ public final class JarLibManifestTask | |||
* @param manifest the manifest | |||
* @throws IOException if error writing file | |||
*/ | |||
private void writeManifest( final Manifest manifest ) | |||
throws IOException | |||
{ | |||
private void writeManifest(final Manifest manifest) | |||
throws IOException { | |||
FileOutputStream output = null; | |||
try | |||
{ | |||
output = new FileOutputStream( m_destfile ); | |||
manifest.write( output ); | |||
try { | |||
output = new FileOutputStream(destFile); | |||
manifest.write(output); | |||
output.flush(); | |||
} | |||
finally | |||
{ | |||
if( null != output ) | |||
{ | |||
try | |||
{ | |||
} finally { | |||
if (null != output) { | |||
try { | |||
output.close(); | |||
} | |||
catch( IOException e ) | |||
{ | |||
} catch (IOException e) { | |||
// ignore | |||
} | |||
} | |||
} | |||
@@ -309,17 +288,15 @@ public final class JarLibManifestTask | |||
* @param extensions the list of extensions | |||
* @throws BuildException if an error occurs | |||
*/ | |||
private void appendLibraryList( final Attributes attributes, | |||
private void appendLibraryList(final Attributes attributes, | |||
final String listPrefix, | |||
final ArrayList extensions ) | |||
throws BuildException | |||
{ | |||
final ArrayList extensions) | |||
throws BuildException { | |||
final int size = extensions.size(); | |||
for( int i = 0; i < size; i++ ) | |||
{ | |||
final Extension extension = (Extension)extensions.get( i ); | |||
for (int i = 0; i < size; i++) { | |||
final Extension extension = (Extension) extensions.get(i); | |||
final String prefix = listPrefix + i + "-"; | |||
Extension.addExtension( extension, prefix, attributes ); | |||
Extension.addExtension(extension, prefix, attributes); | |||
} | |||
} | |||
@@ -334,21 +311,19 @@ public final class JarLibManifestTask | |||
* @param attributes the attributes to add key-value to | |||
* @param extensionKey the key to use | |||
*/ | |||
private void appendExtensionList( final Attributes attributes, | |||
private void appendExtensionList(final Attributes attributes, | |||
final Attributes.Name extensionKey, | |||
final String listPrefix, | |||
final int size ) | |||
{ | |||
final int size) { | |||
final StringBuffer sb = new StringBuffer(); | |||
for( int i = 0; i < size; i++ ) | |||
{ | |||
sb.append( listPrefix + i ); | |||
sb.append( ' ' ); | |||
for (int i = 0; i < size; i++) { | |||
sb.append(listPrefix + i); | |||
sb.append(' '); | |||
} | |||
//add in something like | |||
//"Extension-List: javahelp java3d" | |||
attributes.put( extensionKey, sb.toString() ); | |||
attributes.put(extensionKey, sb.toString()); | |||
} | |||
/** | |||
@@ -357,19 +332,16 @@ public final class JarLibManifestTask | |||
* @param extensionSets the list of ExtensionSets to add to list | |||
* @throws BuildException if an error occurs | |||
*/ | |||
private ArrayList toExtensions( final ArrayList extensionSets ) | |||
throws BuildException | |||
{ | |||
private ArrayList toExtensions(final ArrayList extensionSets) | |||
throws BuildException { | |||
final ArrayList results = new ArrayList(); | |||
final int size = extensionSets.size(); | |||
for( int i = 0; i < size; i++ ) | |||
{ | |||
final ExtensionSet set = (ExtensionSet)extensionSets.get( i ); | |||
final Extension[] extensions = set.toExtensions( getProject() ); | |||
for( int j = 0; j < extensions.length; j++ ) | |||
{ | |||
results.add( extensions[ j ] ); | |||
for (int i = 0; i < size; i++) { | |||
final ExtensionSet set = (ExtensionSet) extensionSets.get(i); | |||
final Extension[] extensions = set.toExtensions(getProject()); | |||
for (int j = 0; j < extensions.length; j++) { | |||
results.add(extensions[ j ]); | |||
} | |||
} | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -71,24 +71,22 @@ import org.apache.tools.ant.taskdefs.optional.extension.resolvers.URLResolver; | |||
* @author <a href="mailto:jeff@socialchange.net.au">Jeff Turner</a> | |||
* @ant.task name="jarlib-resolve" | |||
*/ | |||
public class JarLibResolveTask | |||
extends Task | |||
{ | |||
public class JarLibResolveTask extends Task { | |||
/** | |||
* The name of the property in which the location of | |||
* library is stored. | |||
*/ | |||
private String m_property; | |||
private String propertyName; | |||
/** | |||
* The extension that is required. | |||
*/ | |||
private Extension m_extension; | |||
private Extension requiredExtension; | |||
/** | |||
* The set of resolvers to use to attempt to locate library. | |||
*/ | |||
private final ArrayList m_resolvers = new ArrayList(); | |||
private final ArrayList resolvers = new ArrayList(); | |||
/** | |||
* Flag to indicate that you should check that | |||
@@ -96,14 +94,14 @@ public class JarLibResolveTask | |||
* extension and if they don't then raise | |||
* an exception. | |||
*/ | |||
private boolean m_checkExtension = true; | |||
private boolean checkExtension = true; | |||
/** | |||
* Flag indicating whether or not you should | |||
* throw a BuildException if you cannot resolve | |||
* library. | |||
*/ | |||
private boolean m_failOnError = true; | |||
private boolean failOnError = true; | |||
/** | |||
* The name of the property in which the location of | |||
@@ -112,52 +110,56 @@ public class JarLibResolveTask | |||
* @param property The name of the property in which the location of | |||
* library is stored. | |||
*/ | |||
public void setProperty( final String property ) | |||
{ | |||
m_property = property; | |||
public void setProperty(final String property) { | |||
this.propertyName = property; | |||
} | |||
/** | |||
* If true, libraries returned by nested resolvers should be | |||
* checked to see if they supply extension. | |||
* Check nested libraries for extensions | |||
* | |||
* @param checkExtension if true, libraries returned by nested | |||
* resolvers should be checked to see if they supply extension. | |||
*/ | |||
public void setCheckExtension( final boolean checkExtension ) | |||
{ | |||
m_checkExtension = checkExtension; | |||
public void setCheckExtension(final boolean checkExtension) { | |||
this.checkExtension = checkExtension; | |||
} | |||
/** | |||
* If true, failure to locate library should fail build. | |||
* Set whether to fail if error. | |||
* | |||
* @param failOnError if true, failure to locate library should fail build. | |||
*/ | |||
public void setFailOnError( final boolean failOnError ) | |||
{ | |||
m_failOnError = failOnError; | |||
public void setFailOnError(final boolean failOnError) { | |||
this.failOnError = failOnError; | |||
} | |||
/** | |||
* Adds location resolver to look for a library in a location | |||
* relative to project directory. | |||
* | |||
* @param location the resolver location to search. | |||
*/ | |||
public void addConfiguredLocation( final LocationResolver location ) | |||
{ | |||
m_resolvers.add( location ); | |||
public void addConfiguredLocation(final LocationResolver location) { | |||
resolvers.add(location); | |||
} | |||
/** | |||
* Adds a URL resolver to download a library from a URL | |||
* to a local file. | |||
* | |||
* @param url the URL resolver from which to download the library | |||
*/ | |||
public void addConfiguredUrl( final URLResolver url ) | |||
{ | |||
m_resolvers.add( url ); | |||
public void addConfiguredUrl(final URLResolver url) { | |||
resolvers.add(url); | |||
} | |||
/** | |||
* Adds Ant resolver to run an Ant build file to generate a library. | |||
* | |||
* @param ant the AntResolver to generate the library. | |||
*/ | |||
public void addConfiguredAnt( final AntResolver ant ) | |||
{ | |||
m_resolvers.add( ant ); | |||
public void addConfiguredAnt(final AntResolver ant) { | |||
resolvers.add(ant); | |||
} | |||
/** | |||
@@ -165,74 +167,63 @@ public class JarLibResolveTask | |||
* | |||
* @param extension Set the Extension looking for. | |||
*/ | |||
public void addConfiguredExtension( final ExtensionAdapter extension ) | |||
{ | |||
if( null != m_extension ) | |||
{ | |||
final String message = "Can not specify extension to " + | |||
"resolve multiple times."; | |||
throw new BuildException( message ); | |||
public void addConfiguredExtension(final ExtensionAdapter extension) { | |||
if (null != requiredExtension) { | |||
final String message = "Can not specify extension to " | |||
+ "resolve multiple times."; | |||
throw new BuildException(message); | |||
} | |||
m_extension = extension.toExtension(); | |||
requiredExtension = extension.toExtension(); | |||
} | |||
public void execute() | |||
throws BuildException | |||
{ | |||
/** | |||
* Execute the task. | |||
* | |||
* @throws BuildException if the task fails. | |||
*/ | |||
public void execute() throws BuildException { | |||
validate(); | |||
getProject().log( "Resolving extension: " + m_extension, | |||
Project.MSG_VERBOSE ); | |||
getProject().log("Resolving extension: " + requiredExtension, | |||
Project.MSG_VERBOSE); | |||
String candidate = | |||
getProject().getProperty( m_property ); | |||
getProject().getProperty(propertyName); | |||
if( null != candidate ) | |||
{ | |||
if (null != candidate) { | |||
final String message = "Property Already set to: " + candidate; | |||
if( m_failOnError ) | |||
{ | |||
throw new BuildException( message ); | |||
} | |||
else | |||
{ | |||
getProject().log( message, Project.MSG_ERR ); | |||
if (failOnError) { | |||
throw new BuildException(message); | |||
} else { | |||
getProject().log(message, Project.MSG_ERR); | |||
return; | |||
} | |||
} | |||
final int size = m_resolvers.size(); | |||
for( int i = 0; i < size; i++ ) | |||
{ | |||
final int size = resolvers.size(); | |||
for (int i = 0; i < size; i++) { | |||
final ExtensionResolver resolver = | |||
(ExtensionResolver)m_resolvers.get( i ); | |||
(ExtensionResolver) resolvers.get(i); | |||
getProject().log( "Searching for extension using Resolver:" + resolver, | |||
Project.MSG_VERBOSE ); | |||
getProject().log("Searching for extension using Resolver:" + resolver, | |||
Project.MSG_VERBOSE); | |||
try | |||
{ | |||
try { | |||
final File file = | |||
resolver.resolve( m_extension, getProject() ); | |||
try | |||
{ | |||
checkExtension( file ); | |||
resolver.resolve(requiredExtension, getProject()); | |||
try { | |||
checkExtension(file); | |||
return; | |||
} catch (final BuildException be) { | |||
final String message = "File " + file + " returned by " | |||
+ "resolver failed to satisfy extension due to: " | |||
+ be.getMessage(); | |||
getProject().log(message, Project.MSG_WARN); | |||
} | |||
catch( final BuildException be ) | |||
{ | |||
final String message = | |||
"File " + file + " returned by resolver failed " + | |||
"to satisfy extension due to: " + be.getMessage(); | |||
getProject().log( message, Project.MSG_WARN ); | |||
} | |||
} | |||
catch( final BuildException be ) | |||
{ | |||
final String message = | |||
"Failed to resolve extension to file " + | |||
"using resolver " + resolver + " due to: " + be; | |||
getProject().log( message, Project.MSG_WARN ); | |||
} catch (final BuildException be) { | |||
final String message = "Failed to resolve extension to file " | |||
+ "using resolver " + resolver + " due to: " + be; | |||
getProject().log(message, Project.MSG_WARN); | |||
} | |||
} | |||
@@ -241,20 +232,16 @@ public class JarLibResolveTask | |||
/** | |||
* Utility method that will throw a {@link BuildException} | |||
* if {@link #m_failOnError} is true else it just displays | |||
* if {@link #failOnError} is true else it just displays | |||
* a warning. | |||
*/ | |||
private void missingExtension() | |||
{ | |||
private void missingExtension() { | |||
final String message = | |||
"Unable to resolve extension to a file"; | |||
if( m_failOnError ) | |||
{ | |||
throw new BuildException( message ); | |||
} | |||
else | |||
{ | |||
getProject().log( message, Project.MSG_ERR ); | |||
if (failOnError) { | |||
throw new BuildException(message); | |||
} else { | |||
getProject().log(message, Project.MSG_ERR); | |||
} | |||
} | |||
@@ -266,54 +253,44 @@ public class JarLibResolveTask | |||
* @param file the candidate library | |||
* @throws BuildException if library does not satisfy extension | |||
*/ | |||
private void checkExtension( final File file ) | |||
{ | |||
if( !file.exists() ) | |||
{ | |||
private void checkExtension(final File file) { | |||
if (!file.exists()) { | |||
final String message = | |||
"File " + file + " does not exist"; | |||
throw new BuildException( message ); | |||
throw new BuildException(message); | |||
} | |||
if( !file.isFile() ) | |||
{ | |||
if (!file.isFile()) { | |||
final String message = | |||
"File " + file + " is not a file"; | |||
throw new BuildException( message ); | |||
throw new BuildException(message); | |||
} | |||
if( !m_checkExtension ) | |||
{ | |||
final String message = "Setting property to " + | |||
file + " without verifying library satisfies extension"; | |||
getProject().log( message, Project.MSG_VERBOSE ); | |||
setLibraryProperty( file ); | |||
} | |||
else | |||
{ | |||
getProject().log( "Checking file " + file + | |||
" to see if it satisfies extension", | |||
Project.MSG_VERBOSE ); | |||
if (!checkExtension) { | |||
final String message = "Setting property to " + file | |||
+ " without verifying library satisfies extension"; | |||
getProject().log(message, Project.MSG_VERBOSE); | |||
setLibraryProperty(file); | |||
} else { | |||
getProject().log("Checking file " + file | |||
+ " to see if it satisfies extension", Project.MSG_VERBOSE); | |||
final Manifest manifest = | |||
ExtensionUtil.getManifest( file ); | |||
ExtensionUtil.getManifest(file); | |||
final Extension[] extensions = | |||
Extension.getAvailable( manifest ); | |||
for( int i = 0; i < extensions.length; i++ ) | |||
{ | |||
Extension.getAvailable(manifest); | |||
for (int i = 0; i < extensions.length; i++) { | |||
final Extension extension = extensions[ i ]; | |||
if( extension.isCompatibleWith( m_extension ) ) | |||
{ | |||
setLibraryProperty( file ); | |||
if (extension.isCompatibleWith(requiredExtension)) { | |||
setLibraryProperty(file); | |||
return; | |||
} | |||
} | |||
getProject().log( "File " + file + " skipped as it " + | |||
"does not satisfy extension", | |||
Project.MSG_VERBOSE ); | |||
getProject().log("File " + file + " skipped as it " | |||
+ "does not satisfy extension", Project.MSG_VERBOSE); | |||
final String message = | |||
"File " + file + " does not satisfy extension"; | |||
throw new BuildException( message ); | |||
throw new BuildException(message); | |||
} | |||
} | |||
@@ -324,10 +301,9 @@ public class JarLibResolveTask | |||
* | |||
* @param file the library | |||
*/ | |||
private void setLibraryProperty( final File file ) | |||
{ | |||
getProject().setNewProperty( m_property, | |||
file.getAbsolutePath() ); | |||
private void setLibraryProperty(final File file) { | |||
getProject().setNewProperty(propertyName, | |||
file.getAbsolutePath()); | |||
} | |||
/** | |||
@@ -335,19 +311,15 @@ public class JarLibResolveTask | |||
* | |||
* @throws BuildException if invalid parameters found | |||
*/ | |||
private void validate() | |||
throws BuildException | |||
{ | |||
if( null == m_property ) | |||
{ | |||
private void validate() throws BuildException { | |||
if (null == propertyName) { | |||
final String message = "Property attribute must be specified."; | |||
throw new BuildException( message ); | |||
throw new BuildException(message); | |||
} | |||
if( null == m_extension ) | |||
{ | |||
if (null == requiredExtension) { | |||
final String message = "Extension element must be specified."; | |||
throw new BuildException( message ); | |||
throw new BuildException(message); | |||
} | |||
} | |||
} |
@@ -72,6 +72,11 @@ import org.apache.tools.ant.BuildException; | |||
*/ | |||
public class P4Have extends P4Base { | |||
/** | |||
* Execute the Perforce <code>have</code> command. | |||
* | |||
* @throws BuildException if the command cannot be executed. | |||
*/ | |||
public void execute() throws BuildException { | |||
execP4Command("have " + P4CmdOpts + " " + P4View, new SimpleP4OutputHandler(this)); | |||
} | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -116,7 +116,7 @@ public class Chgrp extends AbstractAccessTask { | |||
* @param e User supplied executable that we won't accept. | |||
*/ | |||
public void setExecutable(String e) { | |||
throw new BuildException(taskType | |||
throw new BuildException(taskType | |||
+ " doesn\'t support the executable" | |||
+ " attribute", getLocation()); | |||
} | |||
@@ -138,7 +138,7 @@ public class MSVSSCHECKIN extends MSVSS { | |||
* | |||
* @param response The auto response value. | |||
*/ | |||
public void setAutoresponse(String response){ | |||
public void setAutoresponse(String response) { | |||
super.setInternalAutoResponse(response); | |||
} | |||
@@ -141,7 +141,7 @@ public class MSVSSLABEL extends MSVSS { | |||
* | |||
* @param response The auto response value. | |||
*/ | |||
public void setAutoresponse(String response){ | |||
public void setAutoresponse(String response) { | |||
super.setInternalAutoResponse(response); | |||
} | |||
} |
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -59,5 +59,10 @@ package org.apache.tools.ant.types; | |||
* @author Magesh Umasankar | |||
*/ | |||
public interface Parameterizable { | |||
/** | |||
* Set the parameters | |||
* | |||
* @param parameters an array of name/type/value parameters. | |||
*/ | |||
void setParameters(Parameter[] parameters); | |||
} |
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -84,7 +84,7 @@ public class ResourceLocation { | |||
/** | |||
* name of the catalog entry type, as per OASIS spec. | |||
*/ | |||
protected String name = null; | |||
private String name = null; | |||
/** publicId of the dtd/entity. */ | |||
private String publicId = null; | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -72,6 +72,9 @@ public class AndSelector extends BaseSelectorContainer { | |||
public AndSelector() { | |||
} | |||
/** | |||
* @return a string representation of the selector | |||
*/ | |||
public String toString() { | |||
StringBuffer buf = new StringBuffer(); | |||
if (hasSelectors()) { | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -78,7 +78,7 @@ public interface FileSelector { | |||
* @return whether the file should be selected or not | |||
* @exception BuildException if the selector was not configured correctly | |||
*/ | |||
public boolean isSelected(File basedir, String filename, File file) | |||
boolean isSelected(File basedir, String filename, File file) | |||
throws BuildException; | |||
} | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -73,6 +73,9 @@ public class NoneSelector extends BaseSelectorContainer { | |||
public NoneSelector() { | |||
} | |||
/** | |||
* @return a string representation of the selector | |||
*/ | |||
public String toString() { | |||
StringBuffer buf = new StringBuffer(); | |||
if (hasSelectors()) { | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -72,6 +72,9 @@ public class NotSelector extends NoneSelector { | |||
public NotSelector() { | |||
} | |||
/** | |||
* @return a string representation of the selector | |||
*/ | |||
public String toString() { | |||
StringBuffer buf = new StringBuffer(); | |||
if (hasSelectors()) { | |||
@@ -88,8 +91,8 @@ public class NotSelector extends NoneSelector { | |||
*/ | |||
public void verifySettings() { | |||
if (selectorCount() != 1) { | |||
setError("One and only one selector is allowed within the " + | |||
"<not> tag"); | |||
setError("One and only one selector is allowed within the " | |||
+ "<not> tag"); | |||
} | |||
} | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -72,6 +72,9 @@ public class OrSelector extends BaseSelectorContainer { | |||
public OrSelector() { | |||
} | |||
/** | |||
* @return a string representation of the selector | |||
*/ | |||
public String toString() { | |||
StringBuffer buf = new StringBuffer(); | |||
if (hasSelectors()) { | |||
@@ -165,9 +165,15 @@ public class FileUtils { | |||
* Convienence method to copy a file from a source to a destination. | |||
* No filtering is performed. | |||
* | |||
* @throws IOException | |||
* @param sourceFile Name of file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile Name of file to copy to. | |||
* Must not be <code>null</code>. | |||
* | |||
* @throws IOException if the copying fails | |||
*/ | |||
public void copyFile(String sourceFile, String destFile) throws IOException { | |||
public void copyFile(String sourceFile, String destFile) | |||
throws IOException { | |||
copyFile(new File(sourceFile), new File(destFile), null, false, false); | |||
} | |||
@@ -175,11 +181,19 @@ public class FileUtils { | |||
* Convienence method to copy a file from a source to a destination | |||
* specifying if token filtering must be used. | |||
* | |||
* @throws IOException | |||
* @param sourceFile Name of file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile Name of file to copy to. | |||
* Must not be <code>null</code>. | |||
* @param filters the collection of filters to apply to this copy | |||
* | |||
* @throws IOException if the copying fails | |||
*/ | |||
public void copyFile(String sourceFile, String destFile, FilterSetCollection filters) | |||
public void copyFile(String sourceFile, String destFile, | |||
FilterSetCollection filters) | |||
throws IOException { | |||
copyFile(new File(sourceFile), new File(destFile), filters, false, false); | |||
copyFile(new File(sourceFile), new File(destFile), filters, | |||
false, false); | |||
} | |||
/** | |||
@@ -187,7 +201,15 @@ public class FileUtils { | |||
* destination specifying if token filtering must be used and if | |||
* source files may overwrite newer destination files. | |||
* | |||
* @throws IOException | |||
* @param sourceFile Name of file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile Name of file to copy to. | |||
* Must not be <code>null</code>. | |||
* @param filters the collection of filters to apply to this copy | |||
* @param overwrite Whether or not the destination file should be | |||
* overwritten if it already exists. | |||
* | |||
* @throws IOException if the copying fails | |||
*/ | |||
public void copyFile(String sourceFile, String destFile, FilterSetCollection filters, | |||
boolean overwrite) throws IOException { | |||
@@ -202,7 +224,18 @@ public class FileUtils { | |||
* last modified time of <code>destFile</code> file should be made equal | |||
* to the last modified time of <code>sourceFile</code>. | |||
* | |||
* @throws IOException | |||
* @param sourceFile Name of file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile Name of file to copy to. | |||
* Must not be <code>null</code>. | |||
* @param filters the collection of filters to apply to this copy | |||
* @param overwrite Whether or not the destination file should be | |||
* overwritten if it already exists. | |||
* @param preserveLastModified Whether or not the last modified time of | |||
* the resulting file should be set to that | |||
* of the source file. | |||
* | |||
* @throws IOException if the copying fails | |||
*/ | |||
public void copyFile(String sourceFile, String destFile, FilterSetCollection filters, | |||
boolean overwrite, boolean preserveLastModified) | |||
@@ -218,9 +251,21 @@ public class FileUtils { | |||
* last modified time of <code>destFile</code> file should be made equal | |||
* to the last modified time of <code>sourceFile</code>. | |||
* | |||
* @throws IOException | |||
* @param sourceFile Name of file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile Name of file to copy to. | |||
* Must not be <code>null</code>. | |||
* @param filters the collection of filters to apply to this copy | |||
* @param overwrite Whether or not the destination file should be | |||
* overwritten if it already exists. | |||
* @param preserveLastModified Whether or not the last modified time of | |||
* the resulting file should be set to that | |||
* of the source file. | |||
* @param encoding the encoding used to read and write the files. | |||
* | |||
* @throws IOException if the copying fails | |||
* | |||
* @since 1.14, Ant 1.5 | |||
* @since Ant 1.5 | |||
*/ | |||
public void copyFile(String sourceFile, String destFile, | |||
FilterSetCollection filters, boolean overwrite, | |||
@@ -238,9 +283,23 @@ public class FileUtils { | |||
* <code>destFile</code> file should be made equal | |||
* to the last modified time of <code>sourceFile</code>. | |||
* | |||
* @throws IOException | |||
* @param sourceFile Name of file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile Name of file to copy to. | |||
* Must not be <code>null</code>. | |||
* @param filters the collection of filters to apply to this copy | |||
* @param filterChains filterChains to apply during the copy. | |||
* @param overwrite Whether or not the destination file should be | |||
* overwritten if it already exists. | |||
* @param preserveLastModified Whether or not the last modified time of | |||
* the resulting file should be set to that | |||
* of the source file. | |||
* @param encoding the encoding used to read and write the files. | |||
* @param project the project instance | |||
* | |||
* @throws IOException if the copying fails | |||
* | |||
* @since 1.15, Ant 1.5 | |||
* @since Ant 1.5 | |||
*/ | |||
public void copyFile(String sourceFile, String destFile, | |||
FilterSetCollection filters, Vector filterChains, | |||
@@ -260,7 +319,22 @@ public class FileUtils { | |||
* <code>destFile</code> file should be made equal | |||
* to the last modified time of <code>sourceFile</code>. | |||
* | |||
* @throws IOException | |||
* @param sourceFile Name of file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile Name of file to copy to. | |||
* Must not be <code>null</code>. | |||
* @param filters the collection of filters to apply to this copy | |||
* @param filterChains filterChains to apply during the copy. | |||
* @param overwrite Whether or not the destination file should be | |||
* overwritten if it already exists. | |||
* @param preserveLastModified Whether or not the last modified time of | |||
* the resulting file should be set to that | |||
* of the source file. | |||
* @param inputEncoding the encoding used to read the files. | |||
* @param outputEncoding the encoding used to write the files. | |||
* @param project the project instance | |||
* | |||
* @throws IOException if the copying fails | |||
* | |||
* @since Ant 1.6 | |||
*/ | |||
@@ -279,7 +353,12 @@ public class FileUtils { | |||
* Convienence method to copy a file from a source to a destination. | |||
* No filtering is performed. | |||
* | |||
* @throws IOException | |||
* @param sourceFile the file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile the file to copy to. | |||
* Must not be <code>null</code>. | |||
* | |||
* @throws IOException if the copying fails | |||
*/ | |||
public void copyFile(File sourceFile, File destFile) throws IOException { | |||
copyFile(sourceFile, destFile, null, false, false); | |||
@@ -289,7 +368,13 @@ public class FileUtils { | |||
* Convienence method to copy a file from a source to a destination | |||
* specifying if token filtering must be used. | |||
* | |||
* @throws IOException | |||
* @param sourceFile the file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile the file to copy to. | |||
* Must not be <code>null</code>. | |||
* @param filters the collection of filters to apply to this copy | |||
* | |||
* @throws IOException if the copying fails | |||
*/ | |||
public void copyFile(File sourceFile, File destFile, FilterSetCollection filters) | |||
throws IOException { | |||
@@ -301,7 +386,15 @@ public class FileUtils { | |||
* destination specifying if token filtering must be used and if | |||
* source files may overwrite newer destination files. | |||
* | |||
* @throws IOException | |||
* @param sourceFile the file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile the file to copy to. | |||
* Must not be <code>null</code>. | |||
* @param filters the collection of filters to apply to this copy | |||
* @param overwrite Whether or not the destination file should be | |||
* overwritten if it already exists. | |||
* | |||
* @throws IOException if the copying fails | |||
*/ | |||
public void copyFile(File sourceFile, File destFile, FilterSetCollection filters, | |||
boolean overwrite) throws IOException { | |||
@@ -315,7 +408,18 @@ public class FileUtils { | |||
* last modified time of <code>destFile</code> file should be made equal | |||
* to the last modified time of <code>sourceFile</code>. | |||
* | |||
* @throws IOException | |||
* @param sourceFile the file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile the file to copy to. | |||
* Must not be <code>null</code>. | |||
* @param filters the collection of filters to apply to this copy | |||
* @param overwrite Whether or not the destination file should be | |||
* overwritten if it already exists. | |||
* @param preserveLastModified Whether or not the last modified time of | |||
* the resulting file should be set to that | |||
* of the source file. | |||
* | |||
* @throws IOException if the copying fails | |||
*/ | |||
public void copyFile(File sourceFile, File destFile, FilterSetCollection filters, | |||
boolean overwrite, boolean preserveLastModified) | |||
@@ -332,9 +436,21 @@ public class FileUtils { | |||
* equal to the last modified time of <code>sourceFile</code> and | |||
* which character encoding to assume. | |||
* | |||
* @throws IOException | |||
* @param sourceFile the file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile the file to copy to. | |||
* Must not be <code>null</code>. | |||
* @param filters the collection of filters to apply to this copy | |||
* @param overwrite Whether or not the destination file should be | |||
* overwritten if it already exists. | |||
* @param preserveLastModified Whether or not the last modified time of | |||
* the resulting file should be set to that | |||
* of the source file. | |||
* @param encoding the encoding used to read and write the files. | |||
* | |||
* @throws IOException if the copying fails | |||
* | |||
* @since 1.14, Ant 1.5 | |||
* @since Ant 1.5 | |||
*/ | |||
public void copyFile(File sourceFile, File destFile, | |||
FilterSetCollection filters, boolean overwrite, | |||
@@ -352,9 +468,23 @@ public class FileUtils { | |||
* <code>destFile</code> file should be made equal | |||
* to the last modified time of <code>sourceFile</code>. | |||
* | |||
* @throws IOException | |||
* @param sourceFile the file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile the file to copy to. | |||
* Must not be <code>null</code>. | |||
* @param filters the collection of filters to apply to this copy | |||
* @param filterChains filterChains to apply during the copy. | |||
* @param overwrite Whether or not the destination file should be | |||
* overwritten if it already exists. | |||
* @param preserveLastModified Whether or not the last modified time of | |||
* the resulting file should be set to that | |||
* of the source file. | |||
* @param encoding the encoding used to read and write the files. | |||
* @param project the project instance | |||
* | |||
* @since 1.15, Ant 1.5 | |||
* @throws IOException if the copying fails | |||
* | |||
* @since Ant 1.5 | |||
*/ | |||
public void copyFile(File sourceFile, File destFile, | |||
FilterSetCollection filters, Vector filterChains, | |||
@@ -373,9 +503,25 @@ public class FileUtils { | |||
* <code>destFile</code> file should be made equal | |||
* to the last modified time of <code>sourceFile</code>. | |||
* | |||
* @throws IOException | |||
* @param sourceFile the file to copy from. | |||
* Must not be <code>null</code>. | |||
* @param destFile the file to copy to. | |||
* Must not be <code>null</code>. | |||
* @param filters the collection of filters to apply to this copy | |||
* @param filterChains filterChains to apply during the copy. | |||
* @param overwrite Whether or not the destination file should be | |||
* overwritten if it already exists. | |||
* @param preserveLastModified Whether or not the last modified time of | |||
* the resulting file should be set to that | |||
* of the source file. | |||
* @param inputEncoding the encoding used to read the files. | |||
* @param outputEncoding the encoding used to write the files. | |||
* @param project the project instance | |||
* | |||
* @since 1.15, Ant 1.6 | |||
* | |||
* @throws IOException if the copying fails | |||
* | |||
* @since Ant 1.6 | |||
*/ | |||
public void copyFile(File sourceFile, File destFile, | |||
FilterSetCollection filters, Vector filterChains, | |||
@@ -384,8 +530,8 @@ public class FileUtils { | |||
Project project) | |||
throws IOException { | |||
if (overwrite || !destFile.exists() || | |||
destFile.lastModified() < sourceFile.lastModified()) { | |||
if (overwrite || !destFile.exists() | |||
|| destFile.lastModified() < sourceFile.lastModified()) { | |||
if (destFile.exists() && destFile.isFile()) { | |||
destFile.delete(); | |||
@@ -411,19 +557,19 @@ public class FileUtils { | |||
if (inputEncoding == null) { | |||
in = new BufferedReader(new FileReader(sourceFile)); | |||
} else { | |||
in = | |||
new BufferedReader(new InputStreamReader( | |||
new FileInputStream(sourceFile), | |||
inputEncoding)); | |||
InputStreamReader isr | |||
= new InputStreamReader(new FileInputStream(sourceFile), | |||
inputEncoding); | |||
in = new BufferedReader(isr); | |||
} | |||
if (outputEncoding == null) { | |||
out = new BufferedWriter(new FileWriter(destFile)); | |||
} else { | |||
out = | |||
new BufferedWriter(new OutputStreamWriter( | |||
new FileOutputStream(destFile), | |||
outputEncoding)); | |||
OutputStreamWriter osw | |||
= new OutputStreamWriter(new FileOutputStream(destFile), | |||
outputEncoding); | |||
out = new BufferedWriter(osw); | |||
} | |||
if (filterChainsAvailable) { | |||
@@ -442,7 +588,8 @@ public class FileUtils { | |||
String line = lineTokenizer.getToken(in); | |||
while (line != null) { | |||
if (line.length() == 0) { | |||
// this should not happen, because the lines are returned with the end of line delimiter | |||
// this should not happen, because the lines are | |||
// returned with the end of line delimiter | |||
out.newLine(); | |||
} else { | |||
newline = filters.replaceTokens(line); | |||
@@ -495,7 +642,7 @@ public class FileUtils { | |||
Reader rdr = crh.getAssembledReader(); | |||
in = new BufferedReader(rdr); | |||
} | |||
char buffer[] = new char[1024*8]; | |||
char[] buffer = new char[1024 * 8]; | |||
while (true) { | |||
int nRead = in.read(buffer, 0, buffer.length); | |||
if (nRead == -1) { | |||
@@ -542,6 +689,8 @@ public class FileUtils { | |||
/** | |||
* see whether we have a setLastModified method in File and return it. | |||
* | |||
* @return a method to setLastModified. | |||
*/ | |||
protected final Method getSetLastModified() { | |||
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) { | |||
@@ -564,8 +713,14 @@ public class FileUtils { | |||
/** | |||
* Calls File.setLastModified(long time) in a Java 1.1 compatible way. | |||
* | |||
* @param file the file whose modified time is to be set | |||
* @param time the time to which the last modified time is to be set. | |||
* | |||
* @throws BuildException if the time cannot be set. | |||
*/ | |||
public void setFileLastModified(File file, long time) throws BuildException { | |||
public void setFileLastModified(File file, long time) | |||
throws BuildException { | |||
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) { | |||
return; | |||
} | |||
@@ -665,6 +820,9 @@ public class FileUtils { | |||
* \ as the separator.</li> | |||
* </ul> | |||
* | |||
* @param path the path to be normalized | |||
* @param the normalized version of the path. | |||
* | |||
* @throws java.lang.NullPointerException if the file path is | |||
* equal to null. | |||
*/ | |||
@@ -678,10 +836,10 @@ public class FileUtils { | |||
int colon = path.indexOf(":"); | |||
if (!onNetWare) { | |||
if (!path.startsWith(File.separator) && | |||
!(path.length() >= 2 && | |||
Character.isLetter(path.charAt(0)) && | |||
colon == 1)) { | |||
if (!path.startsWith(File.separator) | |||
&& !(path.length() >= 2 | |||
&& Character.isLetter(path.charAt(0)) | |||
&& colon == 1)) { | |||
String msg = path + " is not an absolute path"; | |||
throw new BuildException(msg); | |||
} | |||
@@ -696,11 +854,10 @@ public class FileUtils { | |||
boolean dosWithDrive = false; | |||
String root = null; | |||
// Eliminate consecutive slashes after the drive spec | |||
if ((!onNetWare && | |||
path.length() >= 2 && | |||
Character.isLetter(path.charAt(0)) && | |||
path.charAt(1) == ':') || | |||
(onNetWare && colon > -1)) { | |||
if ((!onNetWare && path.length() >= 2 | |||
&& Character.isLetter(path.charAt(0)) | |||
&& path.charAt(1) == ':') | |||
|| (onNetWare && colon > -1)) { | |||
dosWithDrive = true; | |||
@@ -792,6 +949,7 @@ public class FileUtils { | |||
* current working directory will be assumed if this parameter is | |||
* null. | |||
* | |||
* @return a File reference to the new temporary file. | |||
* @since ant 1.5 | |||
*/ | |||
public File createTempFile(String prefix, String suffix, File parentDir) { | |||
@@ -820,6 +978,13 @@ public class FileUtils { | |||
* buffers followed by long comparisions apart from the final 1-7 | |||
* bytes.</p> | |||
* | |||
* @param f1 the file whose content is to be compared. | |||
* @param f2 the other file whose content is to be compared. | |||
* | |||
* @return true if the content of the files is the same. | |||
* | |||
* @throws IOException if the files cannot be read. | |||
* | |||
* @since 1.9 | |||
*/ | |||
public boolean contentEquals(File f1, File f2) throws IOException { | |||
@@ -885,6 +1050,10 @@ public class FileUtils { | |||
/** | |||
* Emulation of File.getParentFile for JDK 1.1 | |||
* | |||
* | |||
* @param f the file whose parent is required. | |||
* @return the given file's parent, or null if the file does not have a | |||
* parent. | |||
* @since 1.10 | |||
*/ | |||
public File getParentFile(File f) { | |||
@@ -899,6 +1068,11 @@ public class FileUtils { | |||
/** | |||
* Read from reader till EOF | |||
* @param rdr the reader from which to read. | |||
* @return the contents read out of the given reader | |||
* | |||
* @throws IOException if the contents could not be read out from the | |||
* reader. | |||
*/ | |||
public static final String readFully(Reader rdr) throws IOException { | |||
return readFully(rdr, 8192); | |||
@@ -906,8 +1080,17 @@ public class FileUtils { | |||
/** | |||
* Read from reader till EOF | |||
* | |||
* @param rdr the reader from which to read. | |||
* @param bufferSize the buffer size to use when reading | |||
* | |||
* @return the contents read out of the given reader | |||
* | |||
* @throws IOException if the contents could not be read out from the | |||
* reader. | |||
*/ | |||
public static final String readFully(Reader rdr, int bufferSize) throws IOException { | |||
public static final String readFully(Reader rdr, int bufferSize) | |||
throws IOException { | |||
if (bufferSize <= 0) { | |||
throw new IllegalArgumentException("Buffer size must be greater " | |||
+ "than 0"); | |||
@@ -939,7 +1122,9 @@ public class FileUtils { | |||
* <p>This method does <strong>not</strong> guarantee that the | |||
* operation is atomic.</p> | |||
* | |||
* @since 1.21, Ant 1.5 | |||
* @param f the file to be created | |||
* @return true if the file did not exist already. | |||
* @since Ant 1.5 | |||
*/ | |||
public boolean createNewFile(File f) throws IOException { | |||
if (f != null) { | |||
@@ -972,6 +1157,7 @@ public class FileUtils { | |||
* @param parent the parent directory of the file to test | |||
* @param name the name of the file to test. | |||
* | |||
* @return true if the file is a symbolic link. | |||
* @since Ant 1.5 | |||
*/ | |||
public boolean isSymbolicLink(File parent, String name) | |||
@@ -1018,6 +1204,8 @@ public class FileUtils { | |||
* | |||
* <p>This code doesn't handle non-ASCII characters properly.</p> | |||
* | |||
* @param path the path in the local file system | |||
* @return the URI version of the local path. | |||
* @since Ant 1.6 | |||
*/ | |||
public String toURI(String path) { | |||
@@ -1065,6 +1253,8 @@ public class FileUtils { | |||
* <p>Swallows '%' that are not followed by two characters, | |||
* doesn't deal with non-ASCII characters.</p> | |||
* | |||
* @param uri the URI designating a file in the local filesystem. | |||
* @return the local file system path for the file. | |||
* @since Ant 1.6 | |||
*/ | |||
public String fromURI(String uri) { | |||
@@ -1119,6 +1309,11 @@ public class FileUtils { | |||
* the absolute paths and "normalize" the filenames | |||
* before comparing them.</p> | |||
* | |||
* @param f1 the file whose name is to be compared. | |||
* @param f2 the other file whose name is to be compared. | |||
* | |||
* @return true if the file are for the same file. | |||
* | |||
* @since Ant 1.5.3 | |||
*/ | |||
public boolean fileNameEquals(File f1, File f2) { | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -65,6 +65,10 @@ package org.apache.tools.ant.util; | |||
*/ | |||
public interface TimeoutObserver { | |||
/** | |||
* Called when the watchdow times out. | |||
* | |||
* @param w the watchdog that timed out. | |||
*/ | |||
void timeoutOccured(Watchdog w); | |||
} |