conor       2003/02/20 06:11:36

  Modified:    src/main/org/apache/tools/ant/taskdefs/cvslib
                        ChangeLogTask.java
  Log:
  Allow date format to be specified other than the locale default provided
  by IntrospectionHelper
  
  PR:   16879
  Submitted by: Ken Gentle
  
  Revision  Changes    Path
  1.21      +89 -4     
ant/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java
  
  Index: ChangeLogTask.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -w -u -r1.20 -r1.21
  --- ChangeLogTask.java        10 Feb 2003 14:13:43 -0000      1.20
  +++ ChangeLogTask.java        20 Feb 2003 14:11:35 -0000      1.21
  @@ -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
  @@ -61,6 +61,7 @@
   import java.io.PrintWriter;
   import java.io.UnsupportedEncodingException;
   import java.text.SimpleDateFormat;
  +import java.text.ParseException;
   import java.util.Date;
   import java.util.Enumeration;
   import java.util.Properties;
  @@ -100,7 +101,7 @@
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Jeff Martin</a>
    * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
  - * @version $Revision$ $Date$
  + * @author <a href="mailto:[EMAIL PROTECTED]">Ken Gentle</a>
    * @since Ant 1.5
    * @ant.task name="cvschangelog"
    */
  @@ -120,16 +121,33 @@
       /** The earliest date at which to start processing entrys.  */
       private Date m_start;
   
  +    /** 
  +     * The start date as a string, possibly to be interpreted according
  +     * to a format
  +     */
  +    private String m_startDate;
  +     
  +
       /** The latest date at which to stop processing entrys.  */
       private Date m_stop;
   
       /**
  +     * The stop date as a string
  +     */
  +    private String m_stopDate;
  +
  +    /**
        * Filesets containting list of files against which the cvs log will be
        * performed. If empty then all files will in the working directory will
        * be checked.
        */
       private final Vector m_filesets = new Vector();
   
  +    /** 
  +     * The <code>SimpleDateFormat</code> pattern to be used in parsing date 
  +     * attributes
  +     */ 
  +    private String m_datePattern = "yyyy-MM-dd";
   
       /**
        * Set the base dir for cvs.
  @@ -213,6 +231,61 @@
           m_filesets.addElement(fileSet);
       }
   
  +    /**
  +     * <code>SimpleDateFormat</code> pattern to be used in parsing date
  +     * attributes.
  +     * 
  +     * @param pattern <code>SimpleDateFormat</code> pattern.
  +     */
  +    public void setDatePattern(final String datePattern) {
  +        m_datePattern = datePattern;
  +    }
  + 
  +    /**
  +     * 
  +     * @param startDate
  +     */
  +    public void setStartDate(final String startDate) {
  +        m_startDate = startDate;
  +    }
  +
  +    public void setEndDate(final String stopDate) {
  +        m_stopDate = stopDate;
  +    }
  +
  +    private void determineDates() {
  +        SimpleDateFormat format;
  +        try {
  +            format = new SimpleDateFormat(m_datePattern);
  +        } catch (IllegalArgumentException iae) {
  +            final String message = "Illegal SimpleDateFormat pattern '"
  +                 + m_datePattern + "'";
  +            throw new BuildException(message);
  +        }
  +        
  +        
  +        if (m_startDate != null) {
  +            try {
  +                m_start = format.parse(m_startDate);
  +            } catch (ParseException e) {
  +                final String message = "Can't parse date '" + m_startDate
  +                     + "' with pattern '" + m_datePattern + "'";
  +                throw new BuildException(message);
  +            }
  +        }
  +        
  +        if (m_stopDate != null) {
  +            try {
  +                m_stop = format.parse(m_stopDate);
  +            } catch (ParseException e) {
  +                final String message = "Can't parse date '" + m_stopDate
  +                     + "' with pattern '" + m_datePattern + "'";
  +                throw new BuildException(message);
  +            }
  +        }
  +                   
  +    }
  +    
   
       /**
        * Execute task
  @@ -226,6 +299,7 @@
           try {
   
               validate();
  +            determineDates();
   
               final Properties userList = new Properties();
   
  @@ -287,7 +361,8 @@
                   final int resultCode = exe.execute();
   
                   if (0 != resultCode) {
  -                    throw new BuildException("Error running cvs log");
  +                    throw new BuildException("Error running cvs log - " 
  +                        + "command returned '"+resultCode+"'");              
  
                   }
               } catch (final IOException ioe) {
                   throw new BuildException(ioe.toString());
  @@ -337,6 +412,16 @@
                    + m_usersFile.getAbsolutePath();
   
               throw new BuildException(message);
  +        }
  +        
  +        if (m_start != null && m_startDate != null) {
  +            throw new BuildException("You cannot specify the start date 
using "  
  +                + "both \"startdate\" and \"start\" (or \"daysinpast\")");
  +        }
  +        
  +        if (m_stop != null && m_stopDate != null) {
  +            throw new BuildException("You cannot specify the stop date using 
"  
  +                + "both \"stopdate\" and \"stop\"");
           }
       }
   
  
  
  

Reply via email to