hammant     01/11/07 04:01:14

  Modified:    apps/db/src/java/org/apache/avalon/db/bcel/actions
                        AbstractBCELAction.java BCELCreateTable.java
               apps/db/src/java/org/apache/avalon/db/bcel/parser
                        BCELSQLParser.java BCELSQLParser.xinfo
                        LXSQLParser.java
  Added:       apps/db/src/java/org/apache/avalon/db/basic/data
                        BasicRow.java BasicTable.java
               apps/db/src/java/org/apache/avalon/db/bcel/parser
                        BCELHelper.java
               apps/db/src/java/org/apache/avalon/db/server
                        AbstractLXSQLParser.java AbstractParser.java
                        AbstractSQLParser.java
  Removed:     apps/db/src/java/org/apache/avalon/db/bcel/parser
                        BaseBCELParser.java
               apps/db/src/java/org/apache/avalon/db/parser
                        DefaultSQLParser.java DefaultSQLParser.xinfo
  Log:
  Refactoring and start of Basic data impl
  
  Revision  Changes    Path
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/data/BasicRow.java
  
  Index: BasicRow.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.data;
  
  import org.apache.avalon.db.data.impl.AbstractTableRow;
  import org.apache.avalon.db.data.Column;
  
  import java.util.Vector;
  
  public class BasicRow extends AbstractTableRow {
  
      protected Vector mRow;
      protected Column[] mColumns;
  
      public BasicRow(BasicTable basicTable, Vector row) {
          mColumns = basicTable.getColumns();
          mRow = row;
      }
  
      public void setValue(String columnName, Object value) {
          for (int x = 0; x < mColumns.length; x++) {
              if (mColumns[x].getColumnName().equals(columnName)) {
                  mRow.setElementAt(value,x);
              }
          }
      }
  
      public Object getValue(String columnName) {
          for (int x = 0; x < mColumns.length; x++) {
              if (mColumns[x].getColumnName().equals(columnName)) {
                  return mRow.elementAt(x);
              }
          }
          return null; //TODO
      }
  }
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/basic/data/BasicTable.java
  
  Index: BasicTable.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.data;
  
  import org.apache.avalon.db.data.impl.AbstractTable;
  import org.apache.avalon.db.data.Column;
  
  public class BasicTable extends AbstractTable {
  
      protected Class mRowClass;
  
      public BasicTable(String name, Column[] columns, Class rowClass) {
          super(name, columns);
          mRowClass = rowClass;
      }
  
  
  }
  
  
  
  1.4       +4 -4      
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/actions/AbstractBCELAction.java
  
  Index: AbstractBCELAction.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/actions/AbstractBCELAction.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AbstractBCELAction.java   2001/11/05 01:01:27     1.3
  +++ AbstractBCELAction.java   2001/11/07 12:01:14     1.4
  @@ -8,18 +8,18 @@
   package org.apache.avalon.db.bcel.actions;
   
   import org.apache.avalon.db.services.DatabasePersistor;
  -import org.apache.avalon.db.bcel.parser.BaseBCELParser;
  +import org.apache.avalon.db.bcel.parser.BCELHelper;
   
   public class AbstractBCELAction {
   
       protected DatabasePersistor mDatabasePersistor;
  -    protected BaseBCELParser mBCELParser;
  +    protected BCELHelper mBCELHelper;
   
       public void setDatabasePersistor(DatabasePersistor databasePersistor) {
           mDatabasePersistor = databasePersistor;
       }
  -    public void setBCELParser(BaseBCELParser bcelParser) {
  -        mBCELParser = bcelParser;
  +    public void setBCELHelper(BCELHelper bcelHelper) {
  +        mBCELHelper = bcelHelper;
       }
   
   }
  
  
  
  1.7       +2 -2      
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/actions/BCELCreateTable.java
  
  Index: BCELCreateTable.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/actions/BCELCreateTable.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- BCELCreateTable.java      2001/11/05 08:06:48     1.6
  +++ BCELCreateTable.java      2001/11/07 12:01:14     1.7
  @@ -27,7 +27,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.6 $
  + * @version $Revision: 1.7 $
    */
   public class BCELCreateTable extends AbstractBCELAction implements 
CreateTable {
   
  @@ -74,7 +74,7 @@
           byte[] bytes = mPendingRowClass.getBytes();
           System.out.println("here 1a");
           System.out.println("get table, it's parent class and all referenced 
classes (crashes here)");
  -        Class rowClass = mBCELParser.makeGeneratedClass(mTableRowClassName, 
bytes);
  +        Class rowClass = mBCELHelper.makeGeneratedClass(mTableRowClassName, 
bytes);
           System.out.println("here 1b");
           Table table = new BCELTable(mTableName, mColumns, rowClass);
           mDatabasePersistor.addTable(mTableName, table);
  
  
  
  1.7       +34 -39    
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BCELSQLParser.java
  
  Index: BCELSQLParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BCELSQLParser.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- BCELSQLParser.java        2001/11/05 09:54:19     1.6
  +++ BCELSQLParser.java        2001/11/07 12:01:14     1.7
  @@ -8,50 +8,29 @@
    */
   package org.apache.avalon.db.bcel.parser;
   
  -
  -
  -import org.apache.avalon.db.services.SQLParser;
  -import org.apache.avalon.db.services.DatabasePersistor;
  -import org.apache.avalon.db.actions.Action;
  +import org.apache.avalon.db.server.AbstractSQLParser;
  +import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.actions.Select;
   import org.apache.avalon.db.actions.CreateTable;
   import org.apache.avalon.db.actions.Insert;
  -import org.apache.avalon.db.actions.ActionException;
  -import org.apache.avalon.db.transport.Request;
   import org.apache.avalon.db.transport.SelectRequest;
   import org.apache.avalon.db.transport.CreateTableRequest;
   import org.apache.avalon.db.transport.InsertRequest;
  -import org.apache.avalon.db.bcel.actions.BCELCreateTable;
  -import org.apache.avalon.db.bcel.data.BCELTable;
  -import org.apache.avalon.db.data.Table;
  -import org.apache.avalon.db.data.Column;
  +import org.apache.avalon.db.utils.StringUtils;
   import org.apache.avalon.db.data.impl.DefaultColumn;
  -import org.apache.avalon.phoenix.Block;
  -import org.apache.avalon.framework.context.Contextualizable;
  -import org.apache.avalon.framework.context.Context;
  -import org.apache.avalon.framework.context.ContextException;
  -import org.apache.avalon.framework.component.Composable;
  +import org.apache.avalon.db.data.Column;
  +import org.apache.avalon.db.data.Table;
  +import org.apache.avalon.db.bcel.actions.BCELCreateTable;
   import org.apache.avalon.framework.component.ComponentManager;
   import org.apache.avalon.framework.component.ComponentException;
  -import org.apache.avalon.framework.configuration.Configurable;
  -import org.apache.avalon.framework.configuration.Configuration;
  -import org.apache.avalon.framework.configuration.ConfigurationException;
  -import org.apache.avalon.framework.activity.Initializable;
  -import org.apache.avalon.framework.logger.AbstractLoggable;
  -import org.apache.bcel.Constants;
  -import org.apache.bcel.generic.ConstantPoolGen;
  -import org.apache.bcel.generic.Type;
   import org.apache.bcel.generic.ClassGen;
  -import org.apache.bcel.generic.FieldGen;
  -import org.apache.bcel.generic.InstructionList;
  -import org.apache.bcel.generic.MethodGen;
  +import org.apache.bcel.generic.ConstantPoolGen;
   import org.apache.bcel.generic.InstructionFactory;
  -
  -import org.apache.bcel.classfile.Field;
  +import org.apache.bcel.generic.Type;
  +import org.apache.bcel.Constants;
   
   import java.util.StringTokenizer;
   import java.util.Vector;
  -import java.util.HashMap;
   
   
   /**
  @@ -59,9 +38,17 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.6 $
  + * @version $Revision: 1.7 $
    */
  -public class BCELSQLParser extends BaseBCELParser {
  +public class BCELSQLParser extends AbstractSQLParser {
  +
  +    protected BCELHelper bcelHelper = new BCELHelper();
  +
  +    public void compose(ComponentManager componentManager) throws 
ComponentException {
  +        super.compose(componentManager);
  +        bcelHelper.setDatabasePersistor(mDatabasePersistor);
  +    }
  +
   
       /**
        * Method createSelectAction
  @@ -86,12 +73,16 @@
        *
        */
       public CreateTable createCreateTableAction(CreateTableRequest request) 
throws ActionException {
  +
  +        // ALL TODO
   
  -        String tableName = getWordThree(request.getSql());
  +        String[] words = StringUtils.split(request.getSql());
  +
  +        String tableName = words[2];
           String tableRowName = tableName + "Row";
           String values = getBracketedExpr(request.getSql());
           StringTokenizer st = new StringTokenizer(values, ",");
  -        String newTableRowClassName = createUniqueClassName(tableRowName);
  +        String newTableRowClassName = 
bcelHelper.createUniqueClassName(tableRowName);
           ClassGen cg = new ClassGen(newTableRowClassName,
                                      
"org.apache.avalon.db.data.impl.AbstractTableRow",
                                      "<SQL Generated>", Constants.ACC_PUBLIC | 
Constants.ACC_SUPER,
  @@ -108,11 +99,11 @@
   
               String fieldName = st2.nextToken();
               String sqlFieldType = st2.nextToken();
  -            Type fieldType = getType(sqlFieldType);
  +            Type fieldType = bcelHelper.getType(sqlFieldType);
               Column column = new DefaultColumn(fieldName, sqlFieldType, 
fieldType.toString());
   
               columns.add(column);
  -            createFieldAndSetter(cp, cg, factory, fieldType, fieldName, 
tableName);
  +            bcelHelper.createFieldAndSetter(cp, cg, factory, fieldType, 
fieldName, tableName);
           }
   
           //TODO need to create constrcutor suitable for superclass.
  @@ -138,16 +129,20 @@
        *
        */
       public Insert createInsertAction(InsertRequest request) throws 
ActionException {
  +
  +        // ALL TODO
  +
  +        String[] words = StringUtils.split(request.getSql());
   
  -        String tableName = getWordThree(request.getSql());
  +        String tableName = words[2];
           Table table = mDatabasePersistor.getTable(tableName);
  -        String type = getWordFour(request.getSql());
  +        String type = words[3];
   
           if (type.startsWith("(")) {
   
               //return createNamedColumnsInsert(table);
           } else if (type.startsWith("values")) {
  -            return createAllValuesInsert(table, request.getSql());
  +            //return bcelHelper.createAllValuesInsert(table, 
request.getSql());
           } else if (type.startsWith("select")) {
   
               //return createSelectInsert(table);
  
  
  
  1.2       +2 -1      
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BCELSQLParser.xinfo
  
  Index: BCELSQLParser.xinfo
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BCELSQLParser.xinfo,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BCELSQLParser.xinfo       2001/11/03 13:26:21     1.1
  +++ BCELSQLParser.xinfo       2001/11/07 12:01:14     1.2
  @@ -14,5 +14,6 @@
     <dependencies>
       <dependency>
         <service name="org.apache.avalon.db.services.DatabasePersistor" 
version="1.0"/>
  -    </dependency>        
  +    </dependency>
  +    </dependencies>        
   </blockinfo>
  
  
  
  1.14      +87 -175   
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/LXSQLParser.java
  
  Index: LXSQLParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/LXSQLParser.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- LXSQLParser.java  2001/11/06 00:32:34     1.13
  +++ LXSQLParser.java  2001/11/07 12:01:14     1.14
  @@ -8,67 +8,34 @@
    */
   package org.apache.avalon.db.bcel.parser;
   
  -import org.apache.avalon.db.services.SQLParser;
  -import org.apache.avalon.db.services.DatabasePersistor;
  -import org.apache.avalon.db.actions.Action;
  +import org.apache.avalon.db.server.AbstractLXSQLParser;
  +import org.apache.avalon.db.bcel.actions.BCELSelect;
  +import org.apache.avalon.db.bcel.actions.AbstractBCELAction;
  +import org.apache.avalon.db.bcel.actions.BCELCreateTable;
  +import org.apache.avalon.db.bcel.actions.BCELInsert;
  +import org.apache.avalon.db.bcel.data.BCELTable;
   import org.apache.avalon.db.actions.Select;
  +import org.apache.avalon.db.actions.ActionException;
   import org.apache.avalon.db.actions.CreateTable;
   import org.apache.avalon.db.actions.Insert;
  -import org.apache.avalon.db.actions.ActionException;
  -import org.apache.avalon.db.transport.Request;
   import org.apache.avalon.db.transport.SelectRequest;
   import org.apache.avalon.db.transport.CreateTableRequest;
   import org.apache.avalon.db.transport.InsertRequest;
  -import org.apache.avalon.db.bcel.actions.BCELCreateTable;
  -import org.apache.avalon.db.bcel.actions.AbstractBCELAction;
  -import org.apache.avalon.db.bcel.actions.BCELInsert;
  -import org.apache.avalon.db.bcel.actions.BCELSelect;
  -import org.apache.avalon.db.bcel.data.BCELTable;
  -import org.apache.avalon.db.data.Table;
   import org.apache.avalon.db.data.Column;
   import org.apache.avalon.db.data.impl.DefaultColumn;
  -import org.apache.avalon.phoenix.Block;
  -import org.apache.avalon.framework.context.Contextualizable;
  -import org.apache.avalon.framework.context.Context;
  -import org.apache.avalon.framework.context.ContextException;
  -import org.apache.avalon.framework.component.Composable;
   import org.apache.avalon.framework.component.ComponentManager;
   import org.apache.avalon.framework.component.ComponentException;
  -import org.apache.avalon.framework.configuration.Configurable;
  -import org.apache.avalon.framework.configuration.Configuration;
  -import org.apache.avalon.framework.configuration.ConfigurationException;
  -import org.apache.avalon.framework.activity.Initializable;
  -import org.apache.avalon.framework.logger.AbstractLoggable;
  -import org.apache.avalon.cornerstone.services.dom.DocumentBuilderFactory;
  -import org.apache.bcel.Constants;
  +import org.apache.bcel.generic.InstructionFactory;
   import org.apache.bcel.generic.ConstantPoolGen;
  -import org.apache.bcel.generic.Type;
   import org.apache.bcel.generic.ClassGen;
  -import org.apache.bcel.generic.FieldGen;
  -import org.apache.bcel.generic.InstructionList;
  -import org.apache.bcel.generic.MethodGen;
  -import org.apache.bcel.generic.InstructionFactory;
  -
  -import org.apache.bcel.classfile.Field;
  +import org.apache.bcel.generic.Type;
  +import org.apache.bcel.Constants;
  +import org.w3c.dom.Element;
   import org.w3c.dom.Document;
  -import org.w3c.dom.DocumentType;
   import org.w3c.dom.NodeList;
   import org.w3c.dom.Node;
  -import org.w3c.dom.NamedNodeMap;
  -import org.w3c.dom.Element;
  -import org.xml.sax.InputSource;
  -import org.xml.sax.SAXException;
   
  -import javax.xml.parsers.DocumentBuilder;
  -import javax.xml.parsers.ParserConfigurationException;
  -
  -import java.util.StringTokenizer;
   import java.util.Vector;
  -import java.util.HashMap;
  -import java.io.Reader;
  -import java.io.StringReader;
  -import java.io.IOException;
  -import java.io.ByteArrayInputStream;
   
   
   /**
  @@ -76,35 +43,15 @@
    *
    *
    * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  - * @version $Revision: 1.13 $
  + * @version $Revision: 1.14 $
    */
  -public class LXSQLParser extends BaseBCELParser {
  +public class LXSQLParser extends AbstractLXSQLParser {
   
  -    protected DocumentBuilderFactory mDocumentBuilderFactory;
  -    protected DocumentBuilder mDocumentBuilder;
  -    private final String XMLHDR = "<?xml version=\"1.0\" 
encoding=\"UTF-8\"?>\n";
  +    protected BCELHelper bcelHelper = new BCELHelper();
   
  -    /**
  -     * Method compose
  -     *
  -     *
  -     * @param componentManager
  -     *
  -     * @throws ComponentException
  -     *
  -     */
       public void compose(ComponentManager componentManager) throws 
ComponentException {
  -        mDocumentBuilderFactory =
  -            (DocumentBuilderFactory) 
componentManager.lookup(DocumentBuilderFactory.class.getName());
  -        try
  -        {
  -            mDocumentBuilder = mDocumentBuilderFactory.newDocumentBuilder();
  -        }
  -        catch (ParserConfigurationException pce)
  -        {
  -            throw new ComponentException("ParserConfiguration Exception in 
compose()",pce);
  -        }
           super.compose(componentManager);
  +        bcelHelper.setDatabasePersistor(mDatabasePersistor);
       }
   
       /**
  @@ -117,29 +64,20 @@
        *
        */
       public Select createSelectAction(SelectRequest request) throws 
ActionException {
  -        String docStr = XMLHDR + request.getSql();
  -        System.out.println("docStr=" + docStr);
   
  -        StringReader sr = new StringReader(docStr);
  -        InputSource is = new InputSource(sr);
   
  -        try {
  -            Document doc = mDocumentBuilder.parse(is);
  -            Element rootElement = doc.getDocumentElement();
  -            Select action = new BCELSelect(doc);
  -            if(request.getPrepared()) {
  -                action.setPrepared(true);
  -            } else if(request.getParams().length > 0) {
  -                action.setWithParams(true);
  -            }
  -            action.setDatabasePersistor(mDatabasePersistor);
  -            ((AbstractBCELAction) action).setBCELParser(this);
  -            return action;
  -        } catch (SAXException se) {
  -            throw new ActionException(se.getMessage());
  -        } catch (IOException ioe) {
  -            throw new ActionException(ioe.getMessage());
  +        Document doc = parseLXSQLString(request.getSql());
  +        Element rootElement = doc.getDocumentElement();
  +        Select action = new BCELSelect(doc);
  +        if(request.getPrepared()) {
  +            action.setPrepared(true);
  +        } else if(request.getParams().length > 0) {
  +            action.setWithParams(true);
           }
  +        action.setDatabasePersistor(mDatabasePersistor);
  +        ((AbstractBCELAction) action).setBCELHelper(bcelHelper);
  +        return action;
  +
       }
   
       /**
  @@ -153,77 +91,65 @@
        */
       public CreateTable createCreateTableAction(CreateTableRequest request) 
throws ActionException {
   
  -        String docStr = XMLHDR + request.getSql();
  -        System.out.println("docStr=" + docStr);
  -
  -        StringReader sr = new StringReader(docStr);
  -        InputSource is = new InputSource(sr);
  -
  -        try {
  -            Document doc = mDocumentBuilder.parse(is);
  +        Document doc = parseLXSQLString(request.getSql());
   
  -            Element rootElement = doc.getDocumentElement();
  -            getLogger().debug("rootElement=" + rootElement.getTagName());
  +        Element rootElement = doc.getDocumentElement();
  +        getLogger().debug("rootElement=" + rootElement.getTagName());
   
  -            String tableName = rootElement.getAttribute("name");
  -            String tableRowName = tableName + "Row";
  +        String tableName = rootElement.getAttribute("name");
  +        String tableRowName = tableName + "Row";
   
   
  -            String newTableRowClassName = 
createUniqueClassName(tableRowName);
  -            ClassGen cg = new ClassGen(newTableRowClassName,
  -                                   
"org.apache.avalon.db.data.impl.AbstractTableRow",
  -                                   "<SQL Generated>", Constants.ACC_PUBLIC | 
Constants.ACC_SUPER,
  -                                   null);
  -            ConstantPoolGen cp = cg.getConstantPool();
  -            cg.addEmptyConstructor(Constants.ACC_PUBLIC);
  -            InstructionFactory factory = new InstructionFactory(cg);
  -
  -            NodeList subRootNodes = rootElement.getChildNodes();
  -
  -            Vector columns = new Vector();
  -
  -            for (int f = 0 ; f < subRootNodes.getLength(); f++) {
  -                if (subRootNodes.item(f).getNodeName().equals("columns")) {
  -                    NodeList subColumnsNodes = 
subRootNodes.item(f).getChildNodes();
  -                    for (int x = 0 ; x < subColumnsNodes.getLength(); x++) {
  -                        if 
(subColumnsNodes.item(x).getNodeName().equals("column")) {
  -                            Node columnNode = subColumnsNodes.item(x);
  -                            String fieldName = 
columnNode.getAttributes().getNamedItem("name").getNodeValue();
  -                            String sqlFieldType = 
columnNode.getAttributes().getNamedItem("type").getNodeValue();
  -                            Type fieldType = getType(sqlFieldType);
  -                            Column column = new DefaultColumn(fieldName, 
sqlFieldType, fieldType.toString());
  -
  -                            columns.add(column);
  -                            createFieldAndSetter(cp, cg, factory, fieldType, 
fieldName, tableName);
  -                        } else {
  -                            // TODO  There should be no other element types 
inside <columns>
  -                        }
  -
  +        String newTableRowClassName = 
bcelHelper.createUniqueClassName(tableRowName);
  +        ClassGen cg = new ClassGen(newTableRowClassName,
  +                               
"org.apache.avalon.db.data.impl.AbstractTableRow",
  +                               "<SQL Generated>", Constants.ACC_PUBLIC | 
Constants.ACC_SUPER,
  +                               null);
  +        ConstantPoolGen cp = cg.getConstantPool();
  +        cg.addEmptyConstructor(Constants.ACC_PUBLIC);
  +        InstructionFactory factory = new InstructionFactory(cg);
  +
  +        NodeList subRootNodes = rootElement.getChildNodes();
  +
  +        Vector columns = new Vector();
  +
  +        for (int f = 0 ; f < subRootNodes.getLength(); f++) {
  +            if (subRootNodes.item(f).getNodeName().equals("columns")) {
  +                NodeList subColumnsNodes = 
subRootNodes.item(f).getChildNodes();
  +                for (int x = 0 ; x < subColumnsNodes.getLength(); x++) {
  +                    if 
(subColumnsNodes.item(x).getNodeName().equals("column")) {
  +                        Node columnNode = subColumnsNodes.item(x);
  +                        String fieldName = 
columnNode.getAttributes().getNamedItem("name").getNodeValue();
  +                        String sqlFieldType = 
columnNode.getAttributes().getNamedItem("type").getNodeValue();
  +                        Type fieldType = bcelHelper.getType(sqlFieldType);
  +                        Column column = new DefaultColumn(fieldName, 
sqlFieldType, fieldType.toString());
  +
  +                        columns.add(column);
  +                        bcelHelper.createFieldAndSetter(cp, cg, factory, 
fieldType, fieldName, tableName);
  +                    } else {
  +                        // TODO  There should be no other element types 
inside <columns>
                       }
   
  -                } else {
  -                    //TODO  Only <columns> is supported in <create-table> so 
far
                   }
  -            }
  -
  -            //TODO need to create constrcutor suitable for superclass.
   
  -            try {
  -                cg.getJavaClass().dump(newTableRowClassName + tableName + 
".class");
  -            } catch (java.io.IOException e) {
  -                System.err.println(e);
  +            } else {
  +                //TODO  Only <columns> is supported in <create-table> so far
               }
  +        }
  +
  +        //TODO need to create constrcutor suitable for superclass.
   
  -            CreateTable action = new BCELCreateTable(cg.getJavaClass(), 
tableName, tableRowName, newTableRowClassName, columns);
  -            action.setDatabasePersistor(mDatabasePersistor);
  -            ((AbstractBCELAction) action).setBCELParser(this);
  -            return action;
  -        } catch (SAXException se) {
  -            throw new ActionException(se.getMessage());
  -        } catch (IOException ioe) {
  -            throw new ActionException(ioe.getMessage());
  +        try {
  +            cg.getJavaClass().dump(newTableRowClassName + tableName + 
".class");
  +        } catch (java.io.IOException e) {
  +            System.err.println(e);
           }
   
  +        CreateTable action = new BCELCreateTable(cg.getJavaClass(), 
tableName, tableRowName, newTableRowClassName, columns);
  +        action.setDatabasePersistor(mDatabasePersistor);
  +        ((AbstractBCELAction) action).setBCELHelper(bcelHelper);
  +        return action;
  +
       }
   
   
  @@ -237,37 +163,23 @@
        *
        */
       public Insert createInsertAction(InsertRequest request) throws 
ActionException {
  -
  -        String docStr = XMLHDR + request.getSql();
  -        System.out.println("docStr=" + docStr);
   
  -        StringReader sr = new StringReader(docStr);
  -        InputSource is = new InputSource(sr);
  +        Document doc = parseLXSQLString(request.getSql());
  +        Element rootElement = doc.getDocumentElement();
  +        String tableName = rootElement.getAttribute("table-name");
  +
  +        System.out.println("mDatabasePersistor" + mDatabasePersistor);
  +        System.out.println("=tn=" + tableName);
  +        String uniqueTableName = bcelHelper.getGeneratedClassName(tableName);
  +        System.out.println("=utn=" + uniqueTableName);
  +        BCELTable table = (BCELTable) mDatabasePersistor.getTable(tableName);
  +        System.out.println("=table=" + table);
  +        Insert action = new BCELInsert(table, doc);
  +        action.setDatabasePersistor(mDatabasePersistor);
  +        ((AbstractBCELAction) action).setBCELHelper(bcelHelper);
   
  -        try {
  -            Document doc = mDocumentBuilder.parse(is);
  +        return action;
   
  -            Element rootElement = doc.getDocumentElement();
  -            String tableName = rootElement.getAttribute("table-name");
  -
  -            System.out.println("mDatabasePersistor" + mDatabasePersistor);
  -            System.out.println("=tn=" + tableName);
  -            String uniqueTableName = getGeneratedClassName(tableName);
  -            System.out.println("=utn=" + uniqueTableName);
  -            BCELTable table = (BCELTable) 
mDatabasePersistor.getTable(tableName);
  -            System.out.println("=table=" + table);
  -            Insert action = new BCELInsert(table, doc);
  -            action.setDatabasePersistor(mDatabasePersistor);
  -            ((AbstractBCELAction) action).setBCELParser(this);
  -
  -            return action;
  -
  -
  -        } catch (SAXException se) {
  -            throw new ActionException(se.getMessage());
  -        } catch (IOException ioe) {
  -            throw new ActionException(ioe.getMessage());
  -        }
       }
   
   }
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcel/parser/BCELHelper.java
  
  Index: BCELHelper.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.bcel.parser;
  
  
  
  import org.apache.avalon.db.services.SQLParser;
  import org.apache.avalon.db.services.DatabasePersistor;
  import org.apache.avalon.db.actions.Action;
  import org.apache.avalon.db.actions.Select;
  import org.apache.avalon.db.actions.CreateTable;
  import org.apache.avalon.db.actions.Insert;
  import org.apache.avalon.db.transport.Request;
  import org.apache.avalon.db.transport.SelectRequest;
  import org.apache.avalon.db.transport.CreateTableRequest;
  import org.apache.avalon.db.transport.InsertRequest;
  import org.apache.avalon.db.bcel.actions.BCELCreateTable;
  import org.apache.avalon.db.bcel.actions.BCELInsert;
  import org.apache.avalon.db.bcel.data.BCELTable;
  import org.apache.avalon.db.data.Table;
  import org.apache.avalon.db.data.Column;
  import org.apache.avalon.db.data.impl.DefaultColumn;
  import org.apache.avalon.phoenix.Block;
  import org.apache.avalon.phoenix.BlockContext;
  import org.apache.avalon.framework.context.Contextualizable;
  import org.apache.avalon.framework.context.Context;
  import org.apache.avalon.framework.context.ContextException;
  import org.apache.avalon.framework.component.Composable;
  import org.apache.avalon.framework.component.ComponentManager;
  import org.apache.avalon.framework.component.ComponentException;
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.activity.Initializable;
  import org.apache.avalon.framework.logger.AbstractLoggable;
  import org.apache.bcel.Constants;
  import org.apache.bcel.generic.ConstantPoolGen;
  import org.apache.bcel.generic.Type;
  import org.apache.bcel.generic.ClassGen;
  import org.apache.bcel.generic.FieldGen;
  import org.apache.bcel.generic.InstructionList;
  import org.apache.bcel.generic.MethodGen;
  import org.apache.bcel.generic.InstructionFactory;
  import org.apache.bcel.generic.InstructionConstants;
  
  import org.apache.bcel.classfile.Field;
  
  import java.util.StringTokenizer;
  import java.util.Vector;
  import java.util.HashMap;
  
  
  /**
   * Class BCELSQLParser
   *
   *
   * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
   * @version $Revision: 1.8 $
   */
  public class BCELHelper  {
  
      protected DatabasePersistor mDatabasePersistor;
      protected GeneratedObjectClassLoader mGenClassLoader = new 
GeneratedObjectClassLoader(BCELHelper.class.getClassLoader());
      protected static int mGenObjSeq;
      protected HashMap mGeneratedObjTranslation = new HashMap();
  
      /**
       * Method setDatabasePersistor
       *
       *
       * @param databasePersistor
       *
       */
      public void setDatabasePersistor(DatabasePersistor databasePersistor) {
          mDatabasePersistor = databasePersistor;
      }
  
      protected Type getType(String type) {
  
          System.out.println("Type=(" + type + ")");
  
          if (type.equals("varchar")) {
              return Type.STRING;
          } else if (type.equals("char")) {
              return Type.STRING;
          }
  
          return Type.VOID;
      }
  
      protected void createFieldAndSetter(ConstantPoolGen cp, ClassGen cg, 
InstructionFactory factory, Type fieldType, String name,
                                String table) {
  
          InstructionList il = new InstructionList();
  
          System.out.println("fn=" + name);
          System.out.println("Type2=" + fieldType);
          FieldGen fg = new FieldGen(Constants.ACC_PUBLIC, fieldType, name, cp);
  
          MethodGen mg = new MethodGen(Constants.ACC_PUBLIC,    // access flags
                                       Type.VOID,               // return type
                                       new Type[]{ fieldType }, new String[]{ 
"value" },    // arg names
                                       "set" + name, table,     // method, class
                                       il, cp);
  
          il.append(factory.createPrintln("Hello?!"));
          il.append(InstructionConstants.RETURN);
          mg.stripAttributes(true);
          mg.setMaxStack();
          mg.setMaxLocals();
          cg.addField(fg.getField());
          cg.addMethod(mg.getMethod());
      }
  
      public Class makeGeneratedClass(String name, byte[] bytes) {
          return mGenClassLoader.makeGeneratedClass(name, bytes);
      }
  
      public Object getGeneratedInstance(String name) {
          return mGenClassLoader.getGeneratedInstance(name);
      }
  
      public Class getGeneratedClass(String name) {
          return mGenClassLoader.findClass(name);
      }
  
      public String createUniqueClassName(String sqlObjectName){
          String className = "gen.A" + mGenObjSeq++;
          mGeneratedObjTranslation.put(sqlObjectName, className);
          return className;
      }
  
      public String getGeneratedClassName(String sqlObjectName){
          return (String) mGeneratedObjTranslation.get(sqlObjectName);
      }
  
  }
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server/AbstractLXSQLParser.java
  
  Index: AbstractLXSQLParser.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.server;
  
  import org.apache.avalon.cornerstone.services.dom.DocumentBuilderFactory;
  import org.apache.avalon.framework.component.ComponentException;
  import org.apache.avalon.framework.component.ComponentManager;
  import org.apache.avalon.db.actions.ActionException;
  import org.w3c.dom.Document;
  import org.xml.sax.InputSource;
  import org.xml.sax.SAXException;
  
  import javax.xml.parsers.DocumentBuilder;
  import javax.xml.parsers.ParserConfigurationException;
  import java.io.StringReader;
  import java.io.IOException;
  
  /**
   * Class BCELSQLParser
   *
   *
   * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
   * @version $Revision: 1.13 $
   */
  public abstract class AbstractLXSQLParser extends AbstractParser {
  
      private DocumentBuilderFactory mDocumentBuilderFactory;
      private DocumentBuilder mDocumentBuilder;
      private final String XMLHDR = "<?xml version=\"1.0\" 
encoding=\"UTF-8\"?>\n";
  
      /**
       * Method compose
       *
       *
       * @param componentManager
       *
       * @throws ComponentException
       *
       */
      public void compose(ComponentManager componentManager) throws 
ComponentException {
          mDocumentBuilderFactory =
              (DocumentBuilderFactory) 
componentManager.lookup(DocumentBuilderFactory.class.getName());
          try
          {
              mDocumentBuilder = mDocumentBuilderFactory.newDocumentBuilder();
          }
          catch (ParserConfigurationException pce)
          {
              throw new ComponentException("ParserConfiguration Exception in 
compose()",pce);
          }
          super.compose(componentManager);
      }
  
  
      protected Document parseLXSQLString(String lxsql) throws ActionException {
          String docStr = XMLHDR + lxsql;
          System.out.println("lxStr=" + docStr);
  
          StringReader sr = new StringReader(docStr);
          InputSource is = new InputSource(sr);
  
          try {
              return mDocumentBuilder.parse(is);
          } catch (SAXException se) {
              throw new ActionException(se.getMessage());
          } catch (IOException ioe) {
              throw new ActionException(ioe.getMessage());
          }
      }
  
  
  }
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server/AbstractParser.java
  
  Index: AbstractParser.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.server;
  
  import org.apache.avalon.framework.logger.AbstractLoggable;
  import org.apache.avalon.framework.context.Contextualizable;
  import org.apache.avalon.framework.context.ContextException;
  import org.apache.avalon.framework.context.Context;
  import org.apache.avalon.framework.component.Composable;
  import org.apache.avalon.framework.component.ComponentManager;
  import org.apache.avalon.framework.component.ComponentException;
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.phoenix.Block;
  import org.apache.avalon.phoenix.BlockContext;
  import org.apache.avalon.db.services.SQLParser;
  import org.apache.avalon.db.services.DatabasePersistor;
  import org.apache.avalon.db.bcel.parser.GeneratedObjectClassLoader;
  
  import java.util.HashMap;
  
  
  /**
   * Class BCELSQLParser
   *
   *
   * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
   * @version $Revision: 1.8 $
   */
  public abstract class AbstractParser extends AbstractLoggable
          implements Block, SQLParser, Contextualizable, Composable, 
Configurable {
  
      protected DatabasePersistor mDatabasePersistor;
      protected GeneratedObjectClassLoader mGenClassLoader = new 
GeneratedObjectClassLoader(AbstractParser.class.getClassLoader());
      protected static int mGenObjSeq;
      protected HashMap mGeneratedObjTranslation = new HashMap();
      protected BlockContext mBlockContext;
  
      /**
       * Method contextualize
       *
       *
       * @param context
       *
       * @throws ContextException
       *
       */
      public final void contextualize(Context context) throws ContextException {
          mBlockContext = (BlockContext) context;
      }
  
      /**
       * Method compose
       *
       *
       * @param componentManager
       *
       * @throws ComponentException
       *
       */
      public void compose(ComponentManager componentManager) throws 
ComponentException {
          mDatabasePersistor =
              (DatabasePersistor) 
componentManager.lookup(DatabasePersistor.class.getName());
      }
  
      /**
       * Method configure
       *
       *
       * @param configuration
       *
       * @throws ConfigurationException
       *
       */
      public void configure(Configuration configuration) throws 
ConfigurationException {
  
      }
  
  
  
  }
  
  
  
  1.1                  
jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server/AbstractSQLParser.java
  
  Index: AbstractSQLParser.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.server;
  
  /**
   * Class BCELSQLParser
   *
   *
   * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
   * @version $Revision: 1.13 $
   */
  public abstract class AbstractSQLParser extends AbstractParser {
  
      protected String getBracketedExpr(String str) {
  
          int ix0 = str.indexOf('(');
          int ix1 = str.lastIndexOf(')');
  
          System.out.println("str=" + str);
          System.out.println("ix0=" + ix0);
          System.out.println("ix1=" + ix1);
  
          return str.substring(ix0 + 1, ix1);
      }
  
  
  }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to