bloritsch    01/08/09 14:12:31

  Modified:    src/org/apache/cocoon/acting
                        DatabaseAuthenticatorAction.java
               src/org/apache/cocoon/components/classloader
                        ClassLoaderManagerImpl.java
               src/org/apache/cocoon/reading DatabaseReader.java
  Log:
  Add messages for DBAuthenticator, cleaned up ClassLoaderManagerImpl a bit, and
  added functionality to qualify the Database reader more carefully (where and order-by
  parameters).  Also added code to handle the condition of the dbcolumn that was 
supposed
  to house the last-modified date is null.
  
  Revision  Changes    Path
  1.8       +6 -3      
xml-cocoon2/src/org/apache/cocoon/acting/DatabaseAuthenticatorAction.java
  
  Index: DatabaseAuthenticatorAction.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/acting/DatabaseAuthenticatorAction.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- DatabaseAuthenticatorAction.java  2001/07/20 13:37:17     1.7
  +++ DatabaseAuthenticatorAction.java  2001/08/09 21:12:31     1.8
  @@ -1,4 +1,4 @@
  -// $Id: DatabaseAuthenticatorAction.java,v 1.7 2001/07/20 13:37:17 cziegeler Exp $
  +// $Id: DatabaseAuthenticatorAction.java,v 1.8 2001/08/09 21:12:31 bloritsch Exp $
   package org.apache.cocoon.acting;
   
   import java.sql.Connection;
  @@ -51,7 +51,7 @@
    * not verified.
    *
    * @author Martin Man <[EMAIL PROTECTED]>
  - * @version CVS $Revision: 1.7 $ $Date: 2001/07/20 13:37:17 $
  + * @version CVS $Revision: 1.8 $ $Date: 2001/08/09 21:12:31 $
    */
   public class DatabaseAuthenticatorAction extends AbstractDatabaseAction
   {
  @@ -98,6 +98,7 @@
               String query = this.getAuthQuery (conf, req);
               if (query == null) {
                   getLogger ().debug ("DBAUTH: have not got query");
  +                req.setAttribute("message", "The authenticator is misconfigured");
                   return null;
               }
   
  @@ -129,6 +130,8 @@
               }
   
               conn.rollback();
  +
  +            req.setAttribute("message", "The username or password were incorrect, 
please check your CAPS LOCK key and try again.");
               getLogger ().debug ("DBAUTH: no results for query");
           } catch (Exception e) {
               if (conn != null) {
  @@ -249,5 +252,5 @@
       }
   }
   
  -// $Id: DatabaseAuthenticatorAction.java,v 1.7 2001/07/20 13:37:17 cziegeler Exp $
  +// $Id: DatabaseAuthenticatorAction.java,v 1.8 2001/08/09 21:12:31 bloritsch Exp $
   // vim: set et ts=4 sw=4:
  
  
  
  1.3       +17 -4     
xml-cocoon2/src/org/apache/cocoon/components/classloader/ClassLoaderManagerImpl.java
  
  Index: ClassLoaderManagerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/classloader/ClassLoaderManagerImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ClassLoaderManagerImpl.java       2001/05/31 17:37:47     1.2
  +++ ClassLoaderManagerImpl.java       2001/08/09 21:12:31     1.3
  @@ -11,6 +11,10 @@
   import java.io.IOException;
   import java.net.MalformedURLException;
   import java.net.URL;
  +import java.util.Set;
  +import java.util.HashSet;
  +import java.util.Collections;
  +import java.util.Vector;
   import org.apache.avalon.framework.thread.ThreadSafe;
   import org.apache.cocoon.util.ClassUtils;
   
  @@ -18,7 +22,7 @@
    * A singleton-like implementation of <code>ClassLoaderManager</code>
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Ricardo Rocha</a>
  - * @version CVS $Revision: 1.2 $ $Date: 2001/05/31 17:37:47 $
  + * @version CVS $Revision: 1.3 $ $Date: 2001/08/09 21:12:31 $
    */
   public class ClassLoaderManagerImpl implements ClassLoaderManager, ThreadSafe {
     /**
  @@ -26,6 +30,8 @@
      */
     protected static RepositoryClassLoader instance = null;
   
  +  protected static Set fileSet = Collections.synchronizedSet(new HashSet());
  +
     /**
      * A constructor that ensures only a single class loader instance exists
      *
  @@ -43,7 +49,10 @@
      * @exception IOException If the directory is invalid
      */
     public void addDirectory(File directoryName) throws IOException {
  -    instance.addDirectory(directoryName);
  +    if ( ! ClassLoaderManagerImpl.fileSet.contains(directoryName)) {
  +        ClassLoaderManagerImpl.fileSet.add(directoryName);
  +        ClassLoaderManagerImpl.instance.addDirectory(directoryName);
  +    }
     }
   
     /**
  @@ -54,7 +63,7 @@
      * @exception ClassNotFoundException If the class is not found
      */
     public Class loadClass(String className) throws ClassNotFoundException {
  -    return instance.loadClass(className);
  +    return ClassLoaderManagerImpl.instance.loadClass(className);
     }
   
     /**
  @@ -62,6 +71,10 @@
      *
      */
     public void reinstantiate() {
  -    instance = new RepositoryClassLoader();
  +    if ( ClassLoaderManagerImpl.fileSet.isEmpty()) {
  +      ClassLoaderManagerImpl.instance = new RepositoryClassLoader();
  +    } else {
  +      ClassLoaderManagerImpl.instance = new RepositoryClassLoader(new 
Vector(ClassLoaderManagerImpl.fileSet));
  +    }
     }
   }
  
  
  
  1.5       +30 -4     xml-cocoon2/src/org/apache/cocoon/reading/DatabaseReader.java
  
  Index: DatabaseReader.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/reading/DatabaseReader.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DatabaseReader.java       2001/07/12 10:23:15     1.4
  +++ DatabaseReader.java       2001/08/09 21:12:31     1.5
  @@ -53,7 +53,7 @@
   public class DatabaseReader extends AbstractReader implements Composable, 
Configurable, Disposable, Cacheable, Poolable {
       private ComponentSelector dbselector;
       private String dsn;
  -    private long lastModified = 0;
  +    private long lastModified = new Date().getTime();
       private Blob resource = null;
       private Connection con = null;
       private DataSourceComponent datasource = null;
  @@ -100,7 +100,7 @@
               PreparedStatement statement = con.prepareStatement(getQuery());
               statement.setString(1, this.source);
               ResultSet set = statement.executeQuery();
  -            if (set.next() == false) throw new ResourceNotFoundException("There is 
no image with that key");
  +            if (set.next() == false) throw new ResourceNotFoundException("There is 
no resource with that key");
   
               Response response = (Response) 
objectModel.get(Constants.RESPONSE_OBJECT);
               Request request = (Request) objectModel.get(Constants.REQUEST_OBJECT);
  @@ -144,6 +144,8 @@
        *   &lt;parameter name="last-modified" 
value="database_timestamp_column_name"/&gt;
        *   &lt;parameter name="content-type" value="content_mime_type"/&gt;
        *   &lt;parameter name="expires" value="number_of_millis_before_refresh"/&gt;
  +     *   &lt;parameter name="where" value="alternate_key = 'foo'"/&gt;
  +     *   &lt;parameter name="order-by" value="alternate_key DESC"/&gt;
        * </pre>
        *
        * Lastly, the <code>key</code> value is derived from the value of
  @@ -175,6 +177,8 @@
           String table = this.parameters.getParameter("table", null);
           String column = this.parameters.getParameter("image", null);
           String key = this.parameters.getParameter("key", null);
  +        String where = this.parameters.getParameter("where", null);
  +        String orderBy = this.parameters.getParameter("order-by", null);
   
           if (table == null || column == null || key==null) {
               throw new ProcessingException("We are missing a required parameter.  
Please include 'table', 'image', and 'key'");
  @@ -189,9 +193,27 @@
               query.append(", ").append(date);
           }
   
  +        if (null != orderBy) {
  +            query.append(", ");
  +
  +            if (orderBy.endsWith(" DESC")) {
  +                query.append(orderBy.substring(0, orderBy.length() - 5));
  +            } else {
  +                query.append(orderBy);
  +            }
  +        }
  +
           query.append(" FROM ").append(table);
           query.append(" WHERE ").append(key).append(" = ?");
   
  +        if (null != where) {
  +            query.append(" AND ").append(where);
  +        }
  +
  +        if (null != orderBy) {
  +            query.append(" ORDER BY ").append(orderBy);
  +        }
  +
           return query.toString();
       }
   
  @@ -213,11 +235,15 @@
   
           if (lastModified != null) {
               Timestamp modified = set.getTimestamp(lastModified, null);
  -            this.lastModified = modified.getTime();
  +            if (null != modified) {
  +                this.lastModified = modified.getTime();
  +            } else {
  +                // assume it has never been modified
  +            }
   
               response.setDateHeader("Last-Modified", this.lastModified);
   
  -            return modified.getTime() > request.getDateHeader("if-modified-since");
  +            return this.lastModified > request.getDateHeader("if-modified-since");
           }
   
           // if we have nothing to compare to, then we must assume it
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to