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]>