You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ps...@apache.org on 2004/01/11 08:24:30 UTC

cvs commit: jakarta-commons/math/src/java/org/apache/commons/math/random ValueServer.java

psteitz     2004/01/10 23:24:30

  Modified:    math/src/java/org/apache/commons/math/random
                        ValueServer.java
  Log:
  Refactored file handling methods to eliminate use of URL.toFile(). Addressing PR #25972, reported by Bill Barker.
  
  Revision  Changes    Path
  1.9       +53 -29    jakarta-commons/math/src/java/org/apache/commons/math/random/ValueServer.java
  
  Index: ValueServer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/random/ValueServer.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ValueServer.java	19 Nov 2003 03:28:24 -0000	1.8
  +++ ValueServer.java	11 Jan 2004 07:24:30 -0000	1.9
  @@ -54,11 +54,10 @@
   
   package org.apache.commons.math.random;
   import java.io.BufferedReader;
  -import java.io.FileReader;
  -import java.io.File;
  +import java.io.InputStreamReader;
  +import java.io.IOException;
   import java.io.Serializable;
   import java.net.URL;
  -import java.io.IOException;
   import java.net.MalformedURLException;
   
   /**
  @@ -69,7 +68,7 @@
    * <p> 
    * Supported <code>mode</code> values are: <ul>
    * <li> DIGEST_MODE -- uses an empirical distribution </li>
  - * <li> REPLAY_MODE -- replays data from <code>valuesFile</code></li> 
  + * <li> REPLAY_MODE -- replays data from <code>valuesFileURL</code></li> 
    * <li> UNIFORM_MODE -- generates uniformly distributed random values with
    *                      mean = <code>mu</code> </li>
    * <li> EXPONENTIAL_MODE -- generates exponentially distributed random values
  @@ -178,7 +177,7 @@
       
       /** 
        * Computes the empirical distribution using values from the file
  -     * in <code>valuesFilePath</code>, using the default number of bins.
  +     * in <code>valuesFileURL</code>, using the default number of bins.
        * <p>
        * <code>valuesFileURL</code> must exist and be
        * readable by *this at runtime.
  @@ -190,12 +189,12 @@
        */
       public void computeDistribution() throws IOException {
           empiricalDistribution = new EmpiricalDistributionImpl();
  -        empiricalDistribution.load(valuesFileURL.getFile());
  +        empiricalDistribution.load(valuesFileURL);
       }
       
       /** 
        * Computes the empirical distribution using values from the file
  -     * in <code>valuesFilePath</code> and <code>binCount</code> bins.
  +     * in <code>valuesFileURL</code> and <code>binCount</code> bins.
        * <p>
        * <code>valuesFileURL</code> must exist and be
        * readable by *this at runtime.
  @@ -210,7 +209,7 @@
       public void computeDistribution(int binCount) 
               throws IOException {
           empiricalDistribution = new EmpiricalDistributionImpl(binCount);
  -        empiricalDistribution.load(valuesFileURL.getFile());
  +        empiricalDistribution.load(valuesFileURL);
           mu = empiricalDistribution.getSampleStats().getMean();
           sigma = empiricalDistribution.getSampleStats().getStandardDeviation();
       }
  @@ -229,21 +228,32 @@
           this.mode = mode;
       }
       
  -    /** Getter for property valuesFilePath.
  -     * @return Value of property valuesFilePath.
  +    /**
  +     * Getter for <code>valuesFileURL<code>
  +     * @return Value of property valuesFileURL.
        */
  -    public String getValuesFileURL() {
  -        return valuesFileURL.toString();
  +    public URL getValuesFileURL() {
  +        return valuesFileURL;
       }
       
  -    /** Setter for property valuesFilePath.
  -     * @param url New value of property valuesFilePath.
  +    /**
  +     * Sets the <code>valuesFileURL</code> using a string URL representation
  +     * @param url String representation for new valuesFileURL.
        * @throws MalformedURLException if url is not well formed
  +     * @deprecated use {@link #setValuesFileURL(URL)} to be removed before 0.1 release
        */
       public void setValuesFileURL(String url) throws MalformedURLException {
           this.valuesFileURL = new URL(url);
       }
       
  +    /**
  +     * Sets the <code>valuesFileURL</code>
  +     * @param url New value of property valuesFileURL.
  +     */
  +    public void setValuesFileURL(URL url) {
  +        this.valuesFileURL = url;
  +    }
  +    
       /** Getter for property empiricalDistribution.
        * @return Value of property empiricalDistribution.
        */
  @@ -252,17 +262,32 @@
       }    
       
       /**  
  -     * Opens <code>valuesFilePath</code> to use in REPLAY_MODE.
  +     * Opens <code>valuesFileURL</code> to use in REPLAY_MODE.
        *
        * @throws IOException if an error occurs opening the file
  +     * @deprecated use {@link #resetReplayFile} to be removed before 0.1 release
        */
       public void openReplayFile() throws IOException {
  -        filePointer = new BufferedReader(new FileReader
  -                            (new File(valuesFileURL.getFile())));
  +        resetReplayFile();
  +    }
  +    
  +    /**  
  +     * Resets REPLAY_MODE file pointer to the beginning of the <code>valuesFileURL</code>.
  +     *
  +     * @throws IOException if an error occurs opening the file
  +     */
  +    public void resetReplayFile() throws IOException {
  +        if (filePointer != null) {
  +            try {
  +                filePointer.close();
  +                filePointer = null;
  +            } catch (IOException ex) {}
  +        }
  +        filePointer = new BufferedReader(new InputStreamReader(valuesFileURL.openStream()));
       }
       
       /** 
  -     * Closes <code>valuesFilePath</code> after use in REPLAY_MODE.
  +     * Closes <code>valuesFileURL</code> after use in REPLAY_MODE.
        *
        * @throws IOException if an error occurs closing the file
        */
  @@ -322,16 +347,15 @@
       }
       
       /**
  -     * Gets next sequential value from the <code>valuesFilePath</code> 
  -     * opened by <code>openReplayFile()</code>.
  +     * Gets next sequential value from the <code>valuesFileURL</code>.
        * <p>
  -     * Throws an IOException if <code>filePointer</code> is null or read fails.
  -     * Will wrap around to BOF is EOF is encountered.
  +     * Throws an IOException if the read fails.
        * <p>
  -     * <strong>Preconditions</strong>: <ul>
  -     * <li> openReplayfile() must have completed successfully before 
  -     * invoking this method; otherwise an <code>IlleglaStateException</code>
  -     * will be thrown</li></ul>
  +     * This method will open the <code>valuesFileURL</code> if there is no 
  +     * replay file open.
  +     * <p>
  +     * The <code>valuesFileURL</code> will be closed and reopened to wrap around 
  +     * from EOF to BOF if EOF is encountered.
        *
        * @return next value from the replay file
        * @throws IOException if there is a problem reading from the file
  @@ -339,11 +363,11 @@
       private double getNextReplay() throws IOException {
           String str = null;
           if (filePointer == null) {
  -            throw new IllegalStateException("replay file not open");
  +            resetReplayFile();
           }
           if ((str = filePointer.readLine()) == null) {
               closeReplayFile();
  -            openReplayFile();
  +            resetReplayFile();
               str = filePointer.readLine();
           }         
           return new Double(str).doubleValue();
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org