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

cvs commit: jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server AbstractRequestHandler.java

hammant     01/11/17 09:04:27

  Modified:    apps/db/src/java/org/apache/avalon/db/basic/actions
                        BasicDeleteRows.java BasicUpdateRows.java
               apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql
                        BasicLXSQLDeleteRowsHandler.java
                        BasicLXSQLUpdateRowsHandler.java
               apps/db/src/java/org/apache/avalon/db/basic/parser
                        BasicLXSQLParser.java
               apps/db/src/java/org/apache/avalon/db/data Queryable.java
               apps/db/src/java/org/apache/avalon/db/data/impl
                        AbstractQueryable.java
               apps/db/src/java/org/apache/avalon/db/server
                        AbstractRequestHandler.java
  Added:       apps/db/src/java/org/apache/avalon/db/basic/actions
                        SimpleWhereClause.java
                        SimpleWhereClauseMatchingRowCallback.java
  Log:
  refactor of whereClause processing (start of)
  
  Revision  Changes    Path
  1.2       +22 -9     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicDeleteRows.java
  
  Index: BasicDeleteRows.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicDeleteRows.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BasicDeleteRows.java	2001/11/15 12:40:29	1.1
  +++ BasicDeleteRows.java	2001/11/17 17:04:26	1.2
  @@ -11,22 +11,25 @@
   import org.apache.avalon.db.actions.impl.AbstractAction;
   import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.actions.DeleteRows;
  -import org.apache.avalon.db.data.Queryable;
  +import org.apache.avalon.db.data.impl.AbstractQueryable;
  +import org.apache.avalon.db.basic.data.BasicRow;
   import org.apache.avalon.framework.logger.LogEnabled;
  -import org.w3c.dom.Document;
   
  +import java.util.Iterator;
   
  +
   /**
    * Class BasicDeleteRows
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
  -public class BasicDeleteRows extends AbstractAction implements DeleteRows ,LogEnabled {
  +public class BasicDeleteRows extends AbstractAction
  +        implements DeleteRows, LogEnabled, SimpleWhereClauseMatchingRowCallback {
   
  -    private Document mDocument;
  -    private Queryable mQueryable;
  +    private SimpleWhereClause mWhereClause;
  +    private AbstractQueryable mQueryable;
       private int mRecordCount;
   
       /**
  @@ -37,9 +40,9 @@
        * @param document
        *
        */
  -    public BasicDeleteRows(Queryable queryable, Document document) {
  +    public BasicDeleteRows(AbstractQueryable queryable, SimpleWhereClause whereClause) {
           mQueryable = queryable;
  -        mDocument = document;
  +        mWhereClause = whereClause;
       }
   
       public void initialize() throws ActionException {
  @@ -53,10 +56,20 @@
        */
       public void execute() throws ActionException {
   
  -        //TODO
  +        Iterator it = mQueryable.getRows().iterator();
  +        mWhereClause.testRows(it, this);
   
       }
   
  +    /**
  +     * Method rowMatches
  +     *
  +     * This is the callback from JavaScript
  +     */
  +    public void rowMatches(BasicRow row) {
  +        mQueryable.deleteRow(row);
  +        mRecordCount++;
  +    }
   
       public int getRecordCount() {
           return mRecordCount;
  
  
  
  1.2       +21 -8     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicUpdateRows.java
  
  Index: BasicUpdateRows.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/BasicUpdateRows.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BasicUpdateRows.java	2001/11/16 06:14:59	1.1
  +++ BasicUpdateRows.java	2001/11/17 17:04:26	1.2
  @@ -11,22 +11,24 @@
   import org.apache.avalon.db.actions.impl.AbstractAction;
   import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.actions.UpdateRows;
  -import org.apache.avalon.db.data.Queryable;
  +import org.apache.avalon.db.data.impl.AbstractQueryable;
  +import org.apache.avalon.db.basic.data.BasicRow;
   import org.apache.avalon.framework.logger.LogEnabled;
  -import org.w3c.dom.Document;
   
  +import java.util.Iterator;
   
   /**
    * Class BasicUpdateRows
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
  -public class BasicUpdateRows extends AbstractAction implements UpdateRows ,LogEnabled {
  +public class BasicUpdateRows extends AbstractAction
  +        implements UpdateRows, LogEnabled, SimpleWhereClauseMatchingRowCallback {
   
  -    private Document mDocument;
  -    private Queryable mQueryable;
  +    private SimpleWhereClause mWhereClause;
  +    private AbstractQueryable mQueryable;
       private int mRecordCount;
   
       /**
  @@ -37,9 +39,9 @@
        * @param document
        *
        */
  -    public BasicUpdateRows(Queryable queryable, Document document) {
  +    public BasicUpdateRows(AbstractQueryable queryable, SimpleWhereClause whereClause) {
           mQueryable = queryable;
  -        mDocument = document;
  +        mWhereClause = whereClause;
       }
   
       public void initialize() throws ActionException {
  @@ -53,10 +55,21 @@
        */
       public void execute() throws ActionException {
   
  -        //TODO
  +        Iterator it = mQueryable.getRows().iterator();
  +        mWhereClause.testRows(it, this);
   
       }
   
  +    /**
  +     * Method rowMatches
  +     *
  +     * This is the callback from JavaScript
  +     */
  +    public void rowMatches(BasicRow row) {
  +        // TODO all the setting of columns
  +        mQueryable.rowChanged(row);
  +        mRecordCount++;
  +    }
   
       public int getRecordCount() {
           return mRecordCount;
  
  
  
  1.1                  jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/SimpleWhereClause.java
  
  Index: SimpleWhereClause.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 file.
   */
  package org.apache.avalon.db.basic.actions;
  
  import org.apache.avalon.db.basic.data.BasicRow;
  import org.apache.avalon.db.actions.ActionException;
  import org.apache.avalon.db.utils.RhinoHelper;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  
  import java.util.Iterator;
  
  /**
   * Class SimpleWhereClause
   *
   *
   * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
   * @author Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">g-froehlich@gmx.de</a>
   * @version $Revision: 1.1 $
   */
  public class SimpleWhereClause extends AbstractLogEnabled {
      private String mWhereClause;
  
      public SimpleWhereClause(String whereClause) {
          this.mWhereClause = whereClause;
      }
  
      public String getWhereClause() {
          return mWhereClause;
      }
  
      public void testRows(Iterator rowIterator, SimpleWhereClauseMatchingRowCallback callBack) throws ActionException {
          RhinoHelper rh = new RhinoHelper();
          rh.addBean("iterator",rowIterator);
          rh.addBean("callback",callBack);
          rh.addBean("my",this); // TODO replace "my" with pointer to helper bean.
          getLogger().debug("mWhereClause" + mWhereClause.toString());
          String js =
              "while(iterator.hasNext()) {" +
                 "var row = it.next();" +
                 "if ( " + mWhereClause + " ) {" +
                    "callBack.rowMatches(row);" +
                 "}" +
              "}";
          rh.executeAction(js);
      }
  
      public boolean testRow(BasicRow row) throws ActionException {
          if(!mWhereClause.toString().equals("")) {
              RhinoHelper rh = new RhinoHelper();
              MatchingHelper mh = new MatchingHelper();
              rh.addBean("row",row);
              rh.addBean("callback",mh);
              rh.addBean("my",this); // TODO replace "my" with pointer to helper bean.
              getLogger().debug("mWhereClause" + mWhereClause.toString());
              rh.executeAction("if (" + mWhereClause.toString() + ") { rc.itDidMatch(true); } ");
              return mh.matched;
          } else {
              return true;
          }
      }
      public class MatchingHelper implements SimpleWhereClauseMatchingRowCallback {
          public boolean matched = false;
          public void rowMatches(BasicRow row) {
              matched = true;
          }
      }
  }
  
  
  
  1.1                  jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/actions/SimpleWhereClauseMatchingRowCallback.java
  
  Index: SimpleWhereClauseMatchingRowCallback.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 file.
   */
  package org.apache.avalon.db.basic.actions;
  
  import org.apache.avalon.db.basic.data.BasicRow;
  
  /**
   * Class SimpleWhereClauseMatchingRowCallback
   *
   *
   * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
   * @version $Revision: 1.1 $
   */
  public interface SimpleWhereClauseMatchingRowCallback {
  
      void rowMatches(BasicRow row);
  }
  
  
  
  1.3       +9 -2      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLDeleteRowsHandler.java
  
  Index: BasicLXSQLDeleteRowsHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLDeleteRowsHandler.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BasicLXSQLDeleteRowsHandler.java	2001/11/16 06:14:59	1.2
  +++ BasicLXSQLDeleteRowsHandler.java	2001/11/17 17:04:26	1.3
  @@ -12,6 +12,7 @@
   
   import org.apache.avalon.db.basic.parser.BasicLXSQLParser;
   import org.apache.avalon.db.basic.actions.BasicDeleteRows;
  +import org.apache.avalon.db.basic.actions.SimpleWhereClause;
   import org.apache.avalon.db.services.DatabasePersistor;
   import org.apache.avalon.db.transport.Reply;
   import org.apache.avalon.db.transport.Request;
  @@ -20,6 +21,7 @@
   import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.actions.DeleteRows;
   import org.apache.avalon.db.data.Queryable;
  +import org.apache.avalon.db.data.impl.AbstractQueryable;
   
   import org.w3c.dom.Document;
   import org.w3c.dom.Element;
  @@ -30,7 +32,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public class BasicLXSQLDeleteRowsHandler extends BasicLXSQLHandler {
   
  @@ -65,7 +67,12 @@
           Element rootElement = doc.getDocumentElement();
           String queryableStr = rootElement.getAttribute("from");
           Queryable queryable = (Queryable) mDatabasePersistor.getQueryable(queryableStr);
  -        DeleteRows action = new BasicDeleteRows(queryable, doc);
  +
  +        SimpleWhereClause swc = new SimpleWhereClause("TODO");
  +        swc.enableLogging(super.getLogger());
  +
  +
  +        DeleteRows action = new BasicDeleteRows((AbstractQueryable) queryable, swc);
   
           mParser.initializeAction(action);
           action.execute();
  
  
  
  1.2       +8 -2      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLUpdateRowsHandler.java
  
  Index: BasicLXSQLUpdateRowsHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/handlers/lxsql/BasicLXSQLUpdateRowsHandler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BasicLXSQLUpdateRowsHandler.java	2001/11/16 06:14:59	1.1
  +++ BasicLXSQLUpdateRowsHandler.java	2001/11/17 17:04:27	1.2
  @@ -12,6 +12,7 @@
   
   import org.apache.avalon.db.basic.parser.BasicLXSQLParser;
   import org.apache.avalon.db.basic.actions.BasicUpdateRows;
  +import org.apache.avalon.db.basic.actions.SimpleWhereClause;
   import org.apache.avalon.db.services.DatabasePersistor;
   import org.apache.avalon.db.transport.Reply;
   import org.apache.avalon.db.transport.Request;
  @@ -20,6 +21,7 @@
   import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.actions.UpdateRows;
   import org.apache.avalon.db.data.Queryable;
  +import org.apache.avalon.db.data.impl.AbstractQueryable;
   
   import org.w3c.dom.Document;
   import org.w3c.dom.Element;
  @@ -30,7 +32,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public class BasicLXSQLUpdateRowsHandler extends BasicLXSQLHandler {
   
  @@ -65,7 +67,11 @@
           Element rootElement = doc.getDocumentElement();
           String queryableStr = rootElement.getAttribute("from");
           Queryable queryable = (Queryable) mDatabasePersistor.getQueryable(queryableStr);
  -        UpdateRows action = new BasicUpdateRows(queryable, doc);
  +
  +        SimpleWhereClause swc = new SimpleWhereClause("TODO");
  +        swc.enableLogging(super.getLogger());
  +
  +        UpdateRows action = new BasicUpdateRows((AbstractQueryable) queryable, swc);
   
           mParser.initializeAction(action);
           action.execute();
  
  
  
  1.16      +8 -0      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/parser/BasicLXSQLParser.java
  
  Index: BasicLXSQLParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/parser/BasicLXSQLParser.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- BasicLXSQLParser.java	2001/11/16 06:14:59	1.15
  +++ BasicLXSQLParser.java	2001/11/17 17:04:27	1.16
  @@ -49,6 +49,14 @@
           handlers[Request.SELECTSIMPLE] = new BasicLXSQLSelectSimpleHandler(this,mDatabasePersistor);
           handlers[Request.UPDATEROWS] = new BasicLXSQLUpdateRowsHandler(this,mDatabasePersistor);
   
  +        // decorate them with logging capability.
  +        for (int i = 0; i < handlers.length; i++) {
  +            if (handlers[i] != null) {
  +                handlers[i].enableLogging(super.getLogger());
  +            }
  +        }
  +
  +
           //TODO more
           return handlers;
       }
  
  
  
  1.3       +2 -1      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/Queryable.java
  
  Index: Queryable.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/Queryable.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Queryable.java	2001/11/12 15:09:04	1.2
  +++ Queryable.java	2001/11/17 17:04:27	1.3
  @@ -8,6 +8,7 @@
    */
   package org.apache.avalon.db.data;
   
  +import java.util.Collection;
   
   
   /**
  @@ -15,7 +16,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version * $Revision: 1.2 $
  + * @version * $Revision: 1.3 $
    */
   public interface Queryable extends Nameable, Cataloged {
       Column[] getColumns();
  
  
  
  1.5       +13 -1     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractQueryable.java
  
  Index: AbstractQueryable.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/data/impl/AbstractQueryable.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AbstractQueryable.java	2001/11/12 22:14:29	1.4
  +++ AbstractQueryable.java	2001/11/17 17:04:27	1.5
  @@ -26,7 +26,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.4 $
  + * @version $Revision: 1.5 $
    */
   public abstract class AbstractQueryable extends AbstractNameable implements Queryable {
   
  @@ -84,8 +84,20 @@
           AbstractTableRow atr = (AbstractTableRow) row;
           mRows.add(atr);
           atr.setAbstractQueryable(this);
  +        this.notifyRowListenersAdded(new Row[] {row});
  +    }
   
  +    public void deleteRow(Row row) {
  +        AbstractTableRow atr = (AbstractTableRow) row;
  +        mRows.remove(atr);
  +        this.notifyRowListenersDeleted(new Row[] {row});
  +        atr.setAbstractQueryable(null);
       }
  +
  +    public void rowChanged(Row row) {
  +        this.notifyRowListenersChanged(new Row[] {row});
  +    }
  +
   
       public void addRowListener(RowListener rowListener) {
           mListeners.add(new WeakReference(rowListener));
  
  
  
  1.2       +2 -1      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server/AbstractRequestHandler.java
  
  Index: AbstractRequestHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server/AbstractRequestHandler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AbstractRequestHandler.java	2001/11/15 14:29:57	1.1
  +++ AbstractRequestHandler.java	2001/11/17 17:04:27	1.2
  @@ -12,8 +12,9 @@
   import org.apache.avalon.db.transport.Reply;
   import org.apache.avalon.db.actions.Action;
   import org.apache.avalon.db.actions.ActionException;
  +import org.apache.avalon.framework.logger.AbstractLogEnabled;
   
  -public abstract class AbstractRequestHandler {
  +public abstract class AbstractRequestHandler extends AbstractLogEnabled  {
   
       public abstract Reply handleRequest(Request request) throws ActionException;
   
  
  
  

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