ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dona...@apache.org
Subject cvs commit: jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/file Touch.java
Date Sun, 30 Dec 2001 11:10:35 GMT
donaldp     01/12/30 03:10:35

  Added:       proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/file
                        Touch.java
  Log:
  Move touch into the file package
  
  Revision  Changes    Path
  1.1                  jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/file/Touch.java
  
  Index: Touch.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.tools.ant.taskdefs.file;
  
  import java.io.File;
  import java.io.FileOutputStream;
  import java.io.IOException;
  import java.text.DateFormat;
  import java.text.ParseException;
  import java.util.ArrayList;
  import java.util.Locale;
  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;
  
  /**
   * Touch a file and/or fileset(s) -- corresponds to the Unix touch command. <p>
   *
   * If the file to touch doesn't exist, an empty one is created. </p> <p>
   *
   * Note: Setting the modification time of files is not supported in JDK 1.1.</p>
   *
   * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
   * @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;
  
      /**
       * 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;
      }
  
      /**
       * 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 )
      {
          this.file = file;
      }
  
      /**
       * Milliseconds since 01/01/1970 00:00 am.
       *
       * @param millis The new Millis value
       */
      public void setMillis( long millis )
      {
          this.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 )
      {
          filesets.add( set );
      }
  
      /**
       * Execute the touch operation.
       *
       * @exception TaskException Description of Exception
       */
      public void execute()
          throws TaskException
      {
          if( file == null && filesets.size() == 0 )
          {
              throw
                  new TaskException( "Specify at least one source - a file or a fileset."
);
          }
  
          if( file != null && file.exists() && file.isDirectory() )
          {
              throw new TaskException( "Use a fileset to touch directories." );
          }
  
          if( dateTime != null )
          {
              DateFormat df = DateFormat.getDateTimeInstance( DateFormat.SHORT,
                                                              DateFormat.SHORT,
                                                              Locale.US );
              try
              {
                  setMillis( df.parse( dateTime ).getTime() );
                  if( millis < 0 )
                  {
                      throw new TaskException( "Date of " + dateTime
                                               + " results in negative milliseconds value
relative to epoch (January 1, 1970, 00:00:00 GMT)." );
                  }
              }
              catch( ParseException pe )
              {
                  throw new TaskException( pe.getMessage(), pe );
              }
          }
  
          touch();
      }
  
      /**
       * Does the actual work. Entry point for Untar and Expand as well.
       *
       * @exception TaskException Description of Exception
       */
      protected void touch()
          throws TaskException
      {
          if( file != null )
          {
              if( !file.exists() )
              {
                  getLogger().info( "Creating " + file );
                  try
                  {
                      FileOutputStream fos = new FileOutputStream( file );
                      fos.write( new byte[ 0 ] );
                      fos.close();
                  }
                  catch( IOException ioe )
                  {
                      throw new TaskException( "Could not create " + file, ioe );
                  }
              }
          }
  
          boolean resetMillis = false;
          if( millis < 0 )
          {
              resetMillis = true;
              millis = System.currentTimeMillis();
          }
  
          if( file != null )
          {
              touch( file );
          }
  
          // deal with the filesets
          for( int i = 0; i < filesets.size(); i++ )
          {
              FileSet fs = (FileSet)filesets.get( i );
              DirectoryScanner ds = fs.getDirectoryScanner( getProject() );
              File fromDir = fs.getDir( getProject() );
  
              String[] srcFiles = ds.getIncludedFiles();
              String[] srcDirs = ds.getIncludedDirectories();
  
              for( int j = 0; j < srcFiles.length; j++ )
              {
                  touch( new File( fromDir, srcFiles[ j ] ) );
              }
  
              for( int j = 0; j < srcDirs.length; j++ )
              {
                  touch( new File( fromDir, srcDirs[ j ] ) );
              }
          }
  
          if( resetMillis )
          {
              millis = -1;
          }
      }
  
      protected void touch( File file )
          throws TaskException
      {
          if( !file.canWrite() )
          {
              throw new TaskException( "Can not change modification date of read-only file
" + file );
          }
  
          final long time = ( millis < 0 ) ? System.currentTimeMillis() : millis;
          file.setLastModified( time );
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


Mime
View raw message