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