You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by cz...@apache.org on 2001/12/17 11:02:21 UTC

cvs commit: jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/source/validity NOPValidity.java TimeStampValidity.java

cziegeler    01/12/17 02:02:21

  Modified:    src/scratchpad/org/apache/avalon/excalibur/source
                        Source.java URLSource.java
  Added:       src/scratchpad/org/apache/avalon/excalibur/monitor
                        Monitorable.java SourceResource.java
               src/scratchpad/org/apache/avalon/excalibur/source
                        SourceValidity.java
               src/scratchpad/org/apache/avalon/excalibur/source/validity
                        NOPValidity.java TimeStampValidity.java
  Log:
  * Added Monitorable Interface for Resource monitoring of arbitrary objects.
  * Linked packages source and monitor
  * Changed support for caching of Source objects from too specific lastModified
    to validity objects (e.g. to support expire dates etc.)
  
  Revision  Changes    Path
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/monitor/Monitorable.java
  
  Index: Monitorable.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.avalon.excalibur.monitor;
  
  /**
   * Describes an object which can be monitored.
   *
   * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
   */
  public interface Monitorable {
  
      /**
       *  Get the corresponding Resource object for monitoring.
       */
      Resource getResource()
      throws Exception;
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/monitor/SourceResource.java
  
  Index: SourceResource.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.avalon.excalibur.monitor;
  
  import org.apache.avalon.excalibur.source.Source;
  import org.apache.avalon.excalibur.source.SourceValidity;
  
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.io.OutputStream;
  import java.io.Reader;
  import java.io.Writer;
  
  /**
   *
   * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
   * @version $Id: SourceResource.java,v 1.1 2001/12/17 10:02:21 cziegeler Exp $
   */
  public final class SourceResource extends StreamResource
  {
      private final Source source;
      private SourceValidity validity;
  
      /**
       * Instantiate the SourceResource 
       */
      public SourceResource ( Source source)
      throws Exception
      {
          super( source.getSystemId() );
  
          this.source = source;
          m_previousModified = System.currentTimeMillis();
          this.validity = source.getValidity();
      }
  
      /**
       * Determines the last time this resource was modified
       */
      public long lastModified()
      {
          if (this.validity == null) {
              return System.currentTimeMillis();
          } else {
              SourceValidity newVal = this.source.getValidity();
              if ( newVal != null && this.validity.isValid( newVal ) == true) {
                  return m_previousModified;
              } else {
                  this.validity = newVal;
                  return System.currentTimeMillis();
              }
          }
      }
  
      /**
       * Sets the resource value with an OutputStream
       */
      public InputStream getResourceAsStream() throws IOException
      {
          return this.source.getInputStream();
      }
  
      /**
       * Sets the resource value with a Writer
       */
      public Reader getResourceAsReader() throws IOException
      {
          return new InputStreamReader( this.getResourceAsStream() );
      }
  
      /**
       * Sets the resource value with an OutputStream
       */
      public OutputStream setResourceAsStream() throws IOException
      {
          throw new IOException("setResourceAsStream() not supported for URLResource");
      }
  
      /**
       * Sets the resource value with a Writer
       */
      public Writer setResourceAsWriter() throws IOException
      {
           throw new IOException("setResourceAsWriter() not supported for URLResource");
      }
  }
  
  
  
  1.7       +37 -33    jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/source/Source.java
  
  Index: Source.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/source/Source.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Source.java	2001/12/11 09:53:36	1.6
  +++ Source.java	2001/12/17 10:02:21	1.7
  @@ -20,39 +20,43 @@
    *
    * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
    * @author <a href="mailto:ovidiu@cup.hp.com">Ovidiu Predescu</a>
  - * @version CVS $Revision: 1.6 $ $Date: 2001/12/11 09:53:36 $
  + * @version CVS $Revision: 1.7 $ $Date: 2001/12/17 10:02:21 $
    */
   public interface Source {
  -  /**
  -   * Get the last modification date of the source or 0 if it
  -   * is not possible to determine the date.
  -   */
  -  long getLastModified();
  -
  -  /**
  -   * Get the content length of the source or -1 if it
  -   * is not possible to determine the length.
  -   */
  -  long getContentLength();
  -
  -  /**
  -   * Return an <code>InputStream</code> object to read from the source.
  -   */
  -  InputStream getInputStream()
  -  throws IOException;
  -
  -  /**
  -   * Return an <code>InputSource</code> object to read the XML
  -   * content.
  -   *
  -   * @return an <code>InputSource</code> value
  -   * @exception IOException if an error occurs
  -   */
  -  InputSource getInputSource()
  -  throws IOException;
  -
  -  /**
  -   * Return the unique identifer for this source
  -   */
  -  String getSystemId();
  +
  +    /**
  +     * Get the content length of the source or -1 if it
  +     * is not possible to determine the length.
  +     */
  +    long getContentLength();
  +
  +    /**
  +     * Return an <code>InputStream</code> object to read from the source.
  +     */
  +    InputStream getInputStream()
  +    throws IOException;
  +
  +    /**
  +     * Return an <code>InputSource</code> object to read the XML
  +     * content.
  +     *
  +     * @return an <code>InputSource</code> value
  +     * @exception IOException if an error occurs
  +     */
  +    InputSource getInputSource()
  +    throws IOException;
  +
  +    /**
  +     * Return the unique identifer for this source
  +     */
  +    String getSystemId();
  +
  +    /**
  +     *  Get the Validity object. This can either wrap the last modification
  +     *  date or the expires information or...
  +     *  If it is currently not possible to calculate such an information
  +     *  <code>null</code> is returned.
  +     */
  +    SourceValidity getValidity();
  +
   }
  
  
  
  1.8       +37 -3     jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/source/URLSource.java
  
  Index: URLSource.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/source/URLSource.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- URLSource.java	2001/12/11 09:53:36	1.7
  +++ URLSource.java	2001/12/17 10:02:21	1.8
  @@ -9,6 +9,11 @@
   
   import org.apache.avalon.framework.component.Composable;
   import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.excalibur.monitor.FileResource;
  +import org.apache.avalon.excalibur.monitor.Monitorable;
  +import org.apache.avalon.excalibur.monitor.Resource;
  +import org.apache.avalon.excalibur.monitor.SourceResource;
  +import org.apache.avalon.excalibur.source.validity.TimeStampValidity;
   import org.apache.avalon.excalibur.xml.Parser;
   import org.apache.avalon.excalibur.xml.XMLConsumer;
   import org.apache.avalon.excalibur.xml.XMLizable;
  @@ -26,10 +31,11 @@
    * Description of a source which is described by an URL.
    *
    * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
  - * @version CVS $Revision: 1.7 $ $Date: 2001/12/11 09:53:36 $
  + * @version CVS $Revision: 1.8 $ $Date: 2001/12/17 10:02:21 $
    */
   
  -public final class URLSource implements ModifiableSource, XMLizable {
  +public final class URLSource 
  +implements ModifiableSource, XMLizable, Monitorable {
   
       /** Identifier for file urls */
       private final String FILE = "file:";
  @@ -83,7 +89,7 @@
       private void getInfos() {
           if (this.gotInfos == false) {
               if (this.isFile == true) {
  -                File file = new File(systemId.substring(FILE.length()));
  +                File file = new File(this.systemId.substring(FILE.length()));
                   this.lastModificationDate = file.lastModified();
                   this.contentLength = file.length();
               } else {
  @@ -116,6 +122,19 @@
       }
   
       /**
  +     *  Get the corresponding Resource object for monitoring.
  +     */
  +    public Resource getResource() 
  +    throws Exception {
  +        this.getInfos();
  +        if (this.isFile == true) {
  +            return new FileResource(this.systemId.substring(FILE.length()));
  +        } else {
  +            return new SourceResource(this);
  +        }
  +    }
  +
  +    /**
        * Get the content length of the source or -1 if it
        * is not possible to determine the length.
        */
  @@ -194,6 +213,21 @@
        */
       public String getSystemId() {
           return this.systemId;
  +    }
  +
  +    /**
  +     *  Get the Validity object. This can either wrap the last modification
  +     *  date or the expires information or...
  +     *  If it is currently not possible to calculate such an information
  +     *  <code>null</code> is returned.
  +     */
  +    public SourceValidity getValidity() {
  +        final long lm = this.getLastModified();
  +        if (lm == -1) {
  +            return null;
  +        } else {
  +            return new TimeStampValidity(lm);
  +        }
       }
   
       /**
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/source/SourceValidity.java
  
  Index: SourceValidity.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.avalon.excalibur.source;
  
  /**
   * A Validity object contains all information to check if a Source object is
   * still valid.
   *
   * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
   * @version CVS $Revision: 1.1 $ $Date: 2001/12/17 10:02:21 $
   */
  public interface SourceValidity 
  extends java.io.Serializable {
  
      /**
       * Check if the component is still valid.
       * This is only true, if the incoming Validity is of the same
       * type and has the same values.
       * The invocation order is that the isValid method of the
       * old Validity object is called with the new one as a parameter
       */
      boolean isValid(SourceValidity newValidity);
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/source/validity/NOPValidity.java
  
  Index: NOPValidity.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.avalon.excalibur.source.validity;
  
  import org.apache.avalon.excalibur.source.SourceValidity;
  
  /**
   * A validation object which is always valid.
   *
   * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
   * @version CVS $Revision: 1.1 $ $Date: 2001/12/17 10:02:21 $
   */
  public final class NOPValidity
  implements SourceValidity {
  
      public boolean isValid(SourceValidity newValidity) {
          return newValidity instanceof NOPValidity;
      }
  
      public String toString() {
          return "NOPValidity";
      }
  
  }
  
  
  
  1.1                  jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/source/validity/TimeStampValidity.java
  
  Index: TimeStampValidity.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.avalon.excalibur.source.validity;
  
  import org.apache.avalon.excalibur.source.SourceValidity;
  
  /**
   * A validation object for time-stamps.
   *
   * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
   * @version CVS $Revision: 1.1 $ $Date: 2001/12/17 10:02:21 $
   */
  public final class TimeStampValidity
  implements SourceValidity {
  
      private long timeStamp;
  
      public TimeStampValidity(long timeStamp) {
          this.timeStamp = timeStamp;
      }
  
      public boolean isValid(SourceValidity newValidity) {
          if (newValidity instanceof TimeStampValidity) {
              return this.timeStamp == ((TimeStampValidity)newValidity).getTimeStamp();
          }
          return false;
      }
  
      public long getTimeStamp() {
          return this.timeStamp;
      }
  
      public String toString() {
          return "TimeStampValidity: " + this.timeStamp;
      }
  
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>