ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From umag...@apache.org
Subject cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs LoadProperties.java
Date Fri, 19 Jul 2002 17:48:36 GMT
umagesh     2002/07/19 10:48:36

  Modified:    .        WHATSNEW
               docs/manual/CoreTasks loadproperties.html
               src/main/org/apache/tools/ant/filters StringInputStream.java
               src/main/org/apache/tools/ant/taskdefs LoadProperties.java
  Log:
  * Add encoding attribute to <loadproperties>
  * Remove dependency of <loadproperties> on StringInputStream
  * Modify StringInputStream to support encoding
  * Note that StringInputStream is not being used by any other Ant classes - the sole consumer
was LoadProperties which no longer uses it.
  
  Revision  Changes    Path
  1.278     +2 -0      jakarta-ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/WHATSNEW,v
  retrieving revision 1.277
  retrieving revision 1.278
  diff -u -r1.277 -r1.278
  --- WHATSNEW	17 Jul 2002 07:36:51 -0000	1.277
  +++ WHATSNEW	19 Jul 2002 17:48:36 -0000	1.278
  @@ -24,6 +24,8 @@
   Other changes:
   --------------
   
  +* <loadproperties> has a new encoding attribute.
  +
   * <echoproperties> can now create XML output.
   
   * <echoproperties> has a new srcfile attribute that can make it read
  
  
  
  1.2       +5 -0      jakarta-ant/docs/manual/CoreTasks/loadproperties.html
  
  Index: loadproperties.html
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/docs/manual/CoreTasks/loadproperties.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- loadproperties.html	6 Mar 2002 03:25:49 -0000	1.1
  +++ loadproperties.html	19 Jul 2002 17:48:36 -0000	1.2
  @@ -28,6 +28,11 @@
       <td valign="top">source file</td>
       <td valign="top" align="center">Yes</td>
     </tr>
  +  <tr>
  +    <td valign="top">encoding</td>
  +    <td valign="top">encoding to use when loading the file</td>
  +    <td align="center" valign="top">No</td>
  +  </tr>
   </table>
   <p>
   The LoadProperties task supports nested <a href="../CoreTypes/filterchain.html">
  
  
  
  1.8       +112 -25   jakarta-ant/src/main/org/apache/tools/ant/filters/StringInputStream.java
  
  Index: StringInputStream.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/filters/StringInputStream.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- StringInputStream.java	30 Apr 2002 10:32:01 -0000	1.7
  +++ StringInputStream.java	19 Jul 2002 17:48:36 -0000	1.8
  @@ -58,8 +58,7 @@
   import java.io.StringReader;
   
   /**
  - * Wraps a String as an InputStream. Note that data will be lost for
  - * characters not in ISO Latin 1, as a simple char->byte mapping is assumed.
  + * Wraps a String as an InputStream.
    *
    * @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
    */
  @@ -68,9 +67,15 @@
       /** Source string, stored as a StringReader */
       private StringReader in;
   
  +    private String encoding;
  +
  +    private byte[] slack;
  +
  +    private int begin;
  +
       /**
        * Composes a stream from a String
  -     * 
  +     *
        * @param source The string to read from. Must not be <code>null</code>.
        */
       public StringInputStream(String source) {
  @@ -78,32 +83,88 @@
       }
   
       /**
  -     * Reads from the Stringreader, returning the same value. Note that
  -     * data will be lost for characters not in ISO Latin 1. Clients
  -     * assuming a return value in the range -1 to 255 may even fail on
  -     * such input.
  -     * 
  -     * @return the value of the next character in the StringReader
  -     * 
  -     * @exception IOException if the original StringReader fails to be read
  +     * Composes a stream from a String with the specified encoding
  +     *
  +     * @param source The string to read from. Must not be <code>null</code>.
  +     * @param encoding The encoding scheme.
        */
  -    public int read() throws IOException {
  -        return in.read();
  +    public StringInputStream(String source, String encoding) {
  +        in = new StringReader(source);
  +        this.encoding = encoding;
       }
   
       /**
  -     * Closes the Stringreader.
  -     * 
  -     * @exception IOException if the original StringReader fails to be closed
  +     * Reads from the Stringreader, returning the same value.
  +     *
  +     * @return the value of the next character in the StringReader
  +     *
  +     * @exception IOException if the original StringReader fails to be read
        */
  -    public void close() throws IOException {
  -        in.close();
  +    public synchronized int read() throws IOException {
  +        if (in == null) {
  +            throw new IOException("Stream Closed");
  +        }
  +
  +        byte result;
  +        if (slack != null && begin < slack.length) {
  +            result = slack[begin];
  +            if (++begin == slack.length) {
  +                slack = null;
  +            }
  +        } else {
  +            byte[] buf = new byte[1];
  +            if (read(buf, 0, 1) <= 0) {
  +                return -1;
  +            }
  +            result = buf[0];
  +        }
  +        if (result < 0) {
  +            return 256 + result;
  +        } else {
  +            return result;
  +        }
  +    }
  +
  +    public synchronized int read(byte[] b, int off, int len)
  +        throws IOException {
  +
  +        if (in == null) {
  +            throw new IOException("Stream Closed");
  +        }
  +
  +        while (slack == null) {
  +            char[] buf = new char[len]; // might read too much
  +            int n = in.read(buf);
  +            if (n == -1) {
  +                return -1;
  +            }
  +            if (n > 0) {
  +                String s = new String(buf, 0, n);
  +                if (encoding == null) {
  +                    slack = s.getBytes();
  +                } else {
  +                    slack = s.getBytes(encoding);
  +                }
  +                begin = 0;
  +            }
  +        }
  +
  +        if (len > slack.length - begin) {
  +            len = slack.length - begin;
  +        }
  +
  +        System.arraycopy(slack, begin, b, off, len);
  +
  +        if ((begin += len) >= slack.length) {
  +            slack = null;
  +        }
  +        return len;
       }
   
       /**
        * Marks the read limit of the StringReader.
  -     * 
  -     * @param limit the maximum limit of bytes that can be read before the 
  +     *
  +     * @param limit the maximum limit of bytes that can be read before the
        *              mark position becomes invalid
        */
       public synchronized void mark(final int limit) {
  @@ -114,20 +175,46 @@
           }
       }
   
  +
  +    public synchronized int available() throws IOException {
  +        if (in == null) {
  +            throw new IOException("Stream Closed");
  +        }
  +        if (slack != null) {
  +            return slack.length - begin;
  +        }
  +        if (in.ready()) {
  +            return 1;
  +        } else {
  +            return 0;
  +        }
  +    }
  +
  +    public boolean markSupported () {
  +        return false;   // would be imprecise
  +    }
  +
       /**
        * Resets the StringReader.
  -     * 
  +     *
        * @exception IOException if the StringReader fails to be reset
        */
       public synchronized void reset() throws IOException {
  +        if (in == null) {
  +            throw new IOException("Stream Closed");
  +        }
  +        slack = null;
           in.reset();
       }
   
       /**
  -     * @see InputStream#markSupported
  +     * Closes the Stringreader.
  +     *
  +     * @exception IOException if the original StringReader fails to be closed
        */
  -    public boolean markSupported() {
  -        return in.markSupported();
  +    public synchronized void close() throws IOException {
  +        in.close();
  +        slack = null;
  +        in = null;
       }
   }
  -
  
  
  
  1.8       +35 -5     jakarta-ant/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java
  
  Index: LoadProperties.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- LoadProperties.java	22 Jun 2002 23:38:32 -0000	1.7
  +++ LoadProperties.java	19 Jul 2002 17:48:36 -0000	1.8
  @@ -56,12 +56,12 @@
   import org.apache.tools.ant.Task;
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.types.FilterChain;
  -import org.apache.tools.ant.filters.StringInputStream;
   import org.apache.tools.ant.filters.util.ChainReaderHelper;
   
   import java.io.File;
   import java.io.FileInputStream;
   import java.io.BufferedInputStream;
  +import java.io.ByteArrayInputStream;
   import java.io.InputStreamReader;
   import java.io.Reader;
   import java.io.IOException;
  @@ -89,6 +89,12 @@
       private final Vector filterChains = new Vector();
   
       /**
  +     * Encoding to use for filenames, defaults to the platform's default
  +     * encoding.
  +     */
  +    private String encoding = null;
  +
  +    /**
        * Sets the file to load.
        *
        * @param srcFile The new SrcFile value
  @@ -98,6 +104,21 @@
       }
   
       /**
  +     * Encoding to use for input, defaults to the platform's default
  +     * encoding. <p>
  +     *
  +     * For a list of possible values see <a href="http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html">
  +     * http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html
  +     * </a>.</p>
  +     *
  +     * @param encoding The new Encoding value
  +     */
  +
  +    public final void setEncoding(final String encoding) {
  +        this.encoding = encoding;
  +    }
  +
  +    /**
        * read in a source file's contents and load them up as Ant properties
        *
        * @exception BuildException if something goes wrong with the build
  @@ -127,7 +148,11 @@
               //open up the file
               fis = new FileInputStream(srcFile);
               bis = new BufferedInputStream(fis);
  -            instream = new InputStreamReader(bis);
  +            if (encoding == null) {
  +                instream = new InputStreamReader(bis);
  +            } else {
  +                instream = new InputStreamReader(bis, encoding);
  +            }
   
               ChainReaderHelper crh = new ChainReaderHelper();
               crh.setBufferSize(size);
  @@ -143,9 +168,14 @@
                       text = text + "\n";
                   }
   
  -                final StringInputStream sis = new StringInputStream(text);
  +                ByteArrayInputStream tis = null;
  +                if ( encoding == null ) {
  +                    tis = new ByteArrayInputStream(text.getBytes());
  +                } else {
  +                    tis = new ByteArrayInputStream(text.getBytes(encoding));
  +                }
                   final Properties props = new Properties();
  -                props.load(sis);
  +                props.load(tis);
                   final Enumeration e = props.keys();
                   while (e.hasMoreElements()) {
                       final String key = (String) e.nextElement();
  @@ -155,7 +185,7 @@
                           project.setNewProperty(key, value);
                       }
                   }
  -                sis.close();
  +                tis.close();
               }
   
           } catch (final IOException ioe) {
  
  
  

--
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