git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270494 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -14,9 +14,9 @@ import java.text.DateFormat; | |||
| import java.text.ParseException; | |||
| import java.util.ArrayList; | |||
| import java.util.Locale; | |||
| import org.apache.myrmidon.api.AbstractTask; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import org.apache.tools.ant.DirectoryScanner; | |||
| import org.apache.tools.ant.Task; | |||
| import org.apache.tools.ant.types.FileSet; | |||
| /** | |||
| @@ -30,53 +30,45 @@ import org.apache.tools.ant.types.FileSet; | |||
| * @author <a href="mailto:mj@servidium.com">Michael J. Sikorsky</a> | |||
| * @author <a href="mailto:shaw@servidium.com">Robert Shaw</a> | |||
| */ | |||
| public class Touch extends Task | |||
| {// required | |||
| private long millis = -1; | |||
| private ArrayList filesets = new ArrayList(); | |||
| private String dateTime; | |||
| private File file; | |||
| public class Touch | |||
| extends AbstractTask | |||
| { | |||
| private long m_millis = -1; | |||
| private String m_dateTime; | |||
| private ArrayList m_filesets = new ArrayList(); | |||
| private File m_file; | |||
| /** | |||
| * Date in the format MM/DD/YYYY HH:MM AM_PM. | |||
| * | |||
| * @param dateTime The new Datetime value | |||
| */ | |||
| public void setDatetime( String dateTime ) | |||
| { | |||
| this.dateTime = dateTime; | |||
| m_dateTime = dateTime; | |||
| } | |||
| /** | |||
| * Sets a single source file to touch. If the file does not exist an empty | |||
| * file will be created. | |||
| * | |||
| * @param file The new File value | |||
| */ | |||
| public void setFile( File file ) | |||
| public void setFile( final File file ) | |||
| { | |||
| this.file = file; | |||
| m_file = file; | |||
| } | |||
| /** | |||
| * Milliseconds since 01/01/1970 00:00 am. | |||
| * | |||
| * @param millis The new Millis value | |||
| */ | |||
| public void setMillis( long millis ) | |||
| public void setMillis( final long millis ) | |||
| { | |||
| this.millis = millis; | |||
| m_millis = millis; | |||
| } | |||
| /** | |||
| * Adds a set of files (nested fileset attribute). | |||
| * | |||
| * @param set The feature to be added to the Fileset attribute | |||
| */ | |||
| public void addFileset( FileSet set ) | |||
| public void addFileset( final FileSet set ) | |||
| { | |||
| filesets.add( set ); | |||
| m_filesets.add( set ); | |||
| } | |||
| /** | |||
| @@ -87,32 +79,26 @@ public class Touch extends Task | |||
| public void execute() | |||
| throws TaskException | |||
| { | |||
| if( file == null && filesets.size() == 0 ) | |||
| { | |||
| throw | |||
| new TaskException( "Specify at least one source - a file or a fileset." ); | |||
| } | |||
| validate(); | |||
| if( file != null && file.exists() && file.isDirectory() ) | |||
| if( m_dateTime != null ) | |||
| { | |||
| throw new TaskException( "Use a fileset to touch directories." ); | |||
| } | |||
| if( dateTime != null ) | |||
| { | |||
| DateFormat df = DateFormat.getDateTimeInstance( DateFormat.SHORT, | |||
| DateFormat.SHORT, | |||
| Locale.US ); | |||
| final DateFormat format = | |||
| DateFormat.getDateTimeInstance( DateFormat.SHORT, | |||
| DateFormat.SHORT, | |||
| Locale.US ); | |||
| try | |||
| { | |||
| setMillis( df.parse( dateTime ).getTime() ); | |||
| if( millis < 0 ) | |||
| final long millis = format.parse( m_dateTime ).getTime(); | |||
| if( 0 > millis ) | |||
| { | |||
| throw new TaskException( "Date of " + dateTime | |||
| + " results in negative milliseconds value relative to epoch (January 1, 1970, 00:00:00 GMT)." ); | |||
| final String message = "Date of " + m_dateTime + " results in negative " + | |||
| "milliseconds value relative to epoch (January 1, 1970, 00:00:00 GMT)."; | |||
| throw new TaskException( message ); | |||
| } | |||
| setMillis( millis ); | |||
| } | |||
| catch( ParseException pe ) | |||
| catch( final ParseException pe ) | |||
| { | |||
| throw new TaskException( pe.getMessage(), pe ); | |||
| } | |||
| @@ -121,53 +107,61 @@ public class Touch extends Task | |||
| touch(); | |||
| } | |||
| /** | |||
| * Does the actual work. Entry point for Untar and Expand as well. | |||
| * | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| public void touch() | |||
| private void validate() | |||
| throws TaskException | |||
| { | |||
| if( null == m_file && 0 == m_filesets.size() ) | |||
| { | |||
| final String message = "Specify at least one source - a file or a fileset."; | |||
| throw new TaskException( message ); | |||
| } | |||
| if( null != m_file && m_file.exists() && m_file.isDirectory() ) | |||
| { | |||
| final String message = "Use a fileset to touch directories."; | |||
| throw new TaskException( message ); | |||
| } | |||
| } | |||
| private void touch() | |||
| throws TaskException | |||
| { | |||
| if( file != null ) | |||
| if( m_millis < 0 ) | |||
| { | |||
| m_millis = System.currentTimeMillis(); | |||
| } | |||
| if( m_file != null ) | |||
| { | |||
| if( !file.exists() ) | |||
| if( !m_file.exists() ) | |||
| { | |||
| getLogger().info( "Creating " + file ); | |||
| getLogger().info( "Creating " + m_file ); | |||
| try | |||
| { | |||
| FileOutputStream fos = new FileOutputStream( file ); | |||
| FileOutputStream fos = new FileOutputStream( m_file ); | |||
| fos.write( new byte[ 0 ] ); | |||
| fos.close(); | |||
| } | |||
| catch( IOException ioe ) | |||
| catch( final IOException ioe ) | |||
| { | |||
| throw new TaskException( "Could not create " + file, ioe ); | |||
| final String message = "Could not create " + m_file; | |||
| throw new TaskException( message, ioe ); | |||
| } | |||
| } | |||
| } | |||
| boolean resetMillis = false; | |||
| if( millis < 0 ) | |||
| { | |||
| resetMillis = true; | |||
| millis = System.currentTimeMillis(); | |||
| } | |||
| if( file != null ) | |||
| { | |||
| touch( file ); | |||
| touch( m_file ); | |||
| } | |||
| // deal with the filesets | |||
| for( int i = 0; i < filesets.size(); i++ ) | |||
| final int size = m_filesets.size(); | |||
| for( int i = 0; i < size; i++ ) | |||
| { | |||
| FileSet fs = (FileSet)filesets.get( i ); | |||
| DirectoryScanner ds = fs.getDirectoryScanner( getProject() ); | |||
| File fromDir = fs.getDir( getProject() ); | |||
| final FileSet fs = (FileSet)m_filesets.get( i ); | |||
| final DirectoryScanner ds = fs.getDirectoryScanner( null ); | |||
| final File fromDir = fs.getDir( null ); | |||
| String[] srcFiles = ds.getIncludedFiles(); | |||
| String[] srcDirs = ds.getIncludedDirectories(); | |||
| final String[] srcFiles = ds.getIncludedFiles(); | |||
| final String[] srcDirs = ds.getIncludedDirectories(); | |||
| for( int j = 0; j < srcFiles.length; j++ ) | |||
| { | |||
| @@ -179,14 +173,9 @@ public class Touch extends Task | |||
| touch( new File( fromDir, srcDirs[ j ] ) ); | |||
| } | |||
| } | |||
| if( resetMillis ) | |||
| { | |||
| millis = -1; | |||
| } | |||
| } | |||
| protected void touch( File file ) | |||
| private void touch( final File file ) | |||
| throws TaskException | |||
| { | |||
| if( !file.canWrite() ) | |||
| @@ -194,7 +183,7 @@ public class Touch extends Task | |||
| throw new TaskException( "Can not change modification date of read-only file " + file ); | |||
| } | |||
| final long time = ( millis < 0 ) ? System.currentTimeMillis() : millis; | |||
| final long time = ( m_millis < 0 ) ? System.currentTimeMillis() : m_millis; | |||
| file.setLastModified( time ); | |||
| } | |||
| } | |||
| @@ -14,9 +14,9 @@ import java.text.DateFormat; | |||
| import java.text.ParseException; | |||
| import java.util.ArrayList; | |||
| import java.util.Locale; | |||
| import org.apache.myrmidon.api.AbstractTask; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import org.apache.tools.ant.DirectoryScanner; | |||
| import org.apache.tools.ant.Task; | |||
| import org.apache.tools.ant.types.FileSet; | |||
| /** | |||
| @@ -30,53 +30,45 @@ import org.apache.tools.ant.types.FileSet; | |||
| * @author <a href="mailto:mj@servidium.com">Michael J. Sikorsky</a> | |||
| * @author <a href="mailto:shaw@servidium.com">Robert Shaw</a> | |||
| */ | |||
| public class Touch extends Task | |||
| {// required | |||
| private long millis = -1; | |||
| private ArrayList filesets = new ArrayList(); | |||
| private String dateTime; | |||
| private File file; | |||
| public class Touch | |||
| extends AbstractTask | |||
| { | |||
| private long m_millis = -1; | |||
| private String m_dateTime; | |||
| private ArrayList m_filesets = new ArrayList(); | |||
| private File m_file; | |||
| /** | |||
| * Date in the format MM/DD/YYYY HH:MM AM_PM. | |||
| * | |||
| * @param dateTime The new Datetime value | |||
| */ | |||
| public void setDatetime( String dateTime ) | |||
| { | |||
| this.dateTime = dateTime; | |||
| m_dateTime = dateTime; | |||
| } | |||
| /** | |||
| * Sets a single source file to touch. If the file does not exist an empty | |||
| * file will be created. | |||
| * | |||
| * @param file The new File value | |||
| */ | |||
| public void setFile( File file ) | |||
| public void setFile( final File file ) | |||
| { | |||
| this.file = file; | |||
| m_file = file; | |||
| } | |||
| /** | |||
| * Milliseconds since 01/01/1970 00:00 am. | |||
| * | |||
| * @param millis The new Millis value | |||
| */ | |||
| public void setMillis( long millis ) | |||
| public void setMillis( final long millis ) | |||
| { | |||
| this.millis = millis; | |||
| m_millis = millis; | |||
| } | |||
| /** | |||
| * Adds a set of files (nested fileset attribute). | |||
| * | |||
| * @param set The feature to be added to the Fileset attribute | |||
| */ | |||
| public void addFileset( FileSet set ) | |||
| public void addFileset( final FileSet set ) | |||
| { | |||
| filesets.add( set ); | |||
| m_filesets.add( set ); | |||
| } | |||
| /** | |||
| @@ -87,32 +79,26 @@ public class Touch extends Task | |||
| public void execute() | |||
| throws TaskException | |||
| { | |||
| if( file == null && filesets.size() == 0 ) | |||
| { | |||
| throw | |||
| new TaskException( "Specify at least one source - a file or a fileset." ); | |||
| } | |||
| validate(); | |||
| if( file != null && file.exists() && file.isDirectory() ) | |||
| if( m_dateTime != null ) | |||
| { | |||
| throw new TaskException( "Use a fileset to touch directories." ); | |||
| } | |||
| if( dateTime != null ) | |||
| { | |||
| DateFormat df = DateFormat.getDateTimeInstance( DateFormat.SHORT, | |||
| DateFormat.SHORT, | |||
| Locale.US ); | |||
| final DateFormat format = | |||
| DateFormat.getDateTimeInstance( DateFormat.SHORT, | |||
| DateFormat.SHORT, | |||
| Locale.US ); | |||
| try | |||
| { | |||
| setMillis( df.parse( dateTime ).getTime() ); | |||
| if( millis < 0 ) | |||
| final long millis = format.parse( m_dateTime ).getTime(); | |||
| if( 0 > millis ) | |||
| { | |||
| throw new TaskException( "Date of " + dateTime | |||
| + " results in negative milliseconds value relative to epoch (January 1, 1970, 00:00:00 GMT)." ); | |||
| final String message = "Date of " + m_dateTime + " results in negative " + | |||
| "milliseconds value relative to epoch (January 1, 1970, 00:00:00 GMT)."; | |||
| throw new TaskException( message ); | |||
| } | |||
| setMillis( millis ); | |||
| } | |||
| catch( ParseException pe ) | |||
| catch( final ParseException pe ) | |||
| { | |||
| throw new TaskException( pe.getMessage(), pe ); | |||
| } | |||
| @@ -121,53 +107,61 @@ public class Touch extends Task | |||
| touch(); | |||
| } | |||
| /** | |||
| * Does the actual work. Entry point for Untar and Expand as well. | |||
| * | |||
| * @exception TaskException Description of Exception | |||
| */ | |||
| public void touch() | |||
| private void validate() | |||
| throws TaskException | |||
| { | |||
| if( null == m_file && 0 == m_filesets.size() ) | |||
| { | |||
| final String message = "Specify at least one source - a file or a fileset."; | |||
| throw new TaskException( message ); | |||
| } | |||
| if( null != m_file && m_file.exists() && m_file.isDirectory() ) | |||
| { | |||
| final String message = "Use a fileset to touch directories."; | |||
| throw new TaskException( message ); | |||
| } | |||
| } | |||
| private void touch() | |||
| throws TaskException | |||
| { | |||
| if( file != null ) | |||
| if( m_millis < 0 ) | |||
| { | |||
| m_millis = System.currentTimeMillis(); | |||
| } | |||
| if( m_file != null ) | |||
| { | |||
| if( !file.exists() ) | |||
| if( !m_file.exists() ) | |||
| { | |||
| getLogger().info( "Creating " + file ); | |||
| getLogger().info( "Creating " + m_file ); | |||
| try | |||
| { | |||
| FileOutputStream fos = new FileOutputStream( file ); | |||
| FileOutputStream fos = new FileOutputStream( m_file ); | |||
| fos.write( new byte[ 0 ] ); | |||
| fos.close(); | |||
| } | |||
| catch( IOException ioe ) | |||
| catch( final IOException ioe ) | |||
| { | |||
| throw new TaskException( "Could not create " + file, ioe ); | |||
| final String message = "Could not create " + m_file; | |||
| throw new TaskException( message, ioe ); | |||
| } | |||
| } | |||
| } | |||
| boolean resetMillis = false; | |||
| if( millis < 0 ) | |||
| { | |||
| resetMillis = true; | |||
| millis = System.currentTimeMillis(); | |||
| } | |||
| if( file != null ) | |||
| { | |||
| touch( file ); | |||
| touch( m_file ); | |||
| } | |||
| // deal with the filesets | |||
| for( int i = 0; i < filesets.size(); i++ ) | |||
| final int size = m_filesets.size(); | |||
| for( int i = 0; i < size; i++ ) | |||
| { | |||
| FileSet fs = (FileSet)filesets.get( i ); | |||
| DirectoryScanner ds = fs.getDirectoryScanner( getProject() ); | |||
| File fromDir = fs.getDir( getProject() ); | |||
| final FileSet fs = (FileSet)m_filesets.get( i ); | |||
| final DirectoryScanner ds = fs.getDirectoryScanner( null ); | |||
| final File fromDir = fs.getDir( null ); | |||
| String[] srcFiles = ds.getIncludedFiles(); | |||
| String[] srcDirs = ds.getIncludedDirectories(); | |||
| final String[] srcFiles = ds.getIncludedFiles(); | |||
| final String[] srcDirs = ds.getIncludedDirectories(); | |||
| for( int j = 0; j < srcFiles.length; j++ ) | |||
| { | |||
| @@ -179,14 +173,9 @@ public class Touch extends Task | |||
| touch( new File( fromDir, srcDirs[ j ] ) ); | |||
| } | |||
| } | |||
| if( resetMillis ) | |||
| { | |||
| millis = -1; | |||
| } | |||
| } | |||
| protected void touch( File file ) | |||
| private void touch( final File file ) | |||
| throws TaskException | |||
| { | |||
| if( !file.canWrite() ) | |||
| @@ -194,7 +183,7 @@ public class Touch extends Task | |||
| throw new TaskException( "Can not change modification date of read-only file " + file ); | |||
| } | |||
| final long time = ( millis < 0 ) ? System.currentTimeMillis() : millis; | |||
| final long time = ( m_millis < 0 ) ? System.currentTimeMillis() : m_millis; | |||
| file.setLastModified( time ); | |||
| } | |||
| } | |||