Author: kwilliams
Date: Tue Apr 25 21:36:17 2006
New Revision: 397085
URL: http://svn.apache.org/viewcvs?rev=397085&view=rev
Log:
Cleaning up Command interface (TUSCANY-230)
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandFactoryImpl.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java?rev=397085&r1=397084&r2=397085&view=diff
==============================================================================
---
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java
(original)
+++
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/Command.java
Tue Apr 25 21:36:17 2006
@@ -214,70 +214,9 @@
public void setConnection(Connection connection, boolean
manageTransactions);
/**
- * Add relationship metadata necessary for processing query results.
This is
- * an alternative to providing the same information in a config file.
- *
- * @param parent
- * a name identifying the relationship parent key (example:
- * "CUSTOMER.ID")
- * @param child
- * a name identifying the relationship child key
- * ("ORDER.CUSTOMER_ID")
- */
- public void addRelationship(String parent, String child);
-
- /**
- * Add relationship metadata necessary for processing query results.
This is
- * an alternative to providing the same information in a config file.
- *
- * @param parentKey
- * the parent key for the relationship
- * @param childKey
- * the child key in the relationship
- * @see Key
- */
- public void addRelationship(Key parentKey, Key childKey);
-
- /**
- * Add primary key metadata. This is an alternative to providing the
same
- * information in a config file.
- *
- * @param pk
- * the string identifying a prmary key. (Example:
"CUSTOMER.ID")
- */
- public void addPrimaryKey(String pk);
-
- /**
- * Add primary key metadata. This is an alternative to providing the
same
- * information in a config file.
- *
- * @param key
- * the primary key
- * @see Key
- */
- public void addPrimaryKey(Key key);
-
- /**
- * Associate a [EMAIL PROTECTED] Converter} with a column to be used by
this command.
- * This is an alternative to providing the same information in a config
- * file.
- *
- * @param name
- * the name of the column being assigned a converter
(example:
- * "CUSTOMER.LASTNAME")
- * @param converterName
- * the name of the converter instance being assigned
(example:
- * org.company.project.StringConverter)
- * @see Converter
- */
- public void addConverter(String name, String converterName);
-
- /**
* Cleans up and realeases all resources associated with this command.
This
* should be called when the application is done with this command.
*/
public void close();
-
-
}
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java?rev=397085&r1=397084&r2=397085&view=diff
==============================================================================
---
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
(original)
+++
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
Tue Apr 25 21:36:17 2006
@@ -210,6 +210,23 @@
+ name + " in table " + t.getName());
return null;
}
+
+ public Column getColumnByPropertyName(Table t, String propertyName) {
+ if (t == null)
+ return null;
+ Iterator i = t.getColumn().iterator();
+ while (i.hasNext()) {
+ Column c = (Column) i.next();
+ if (c.getName().equals(propertyName))
+ return c;
+ if (c.getPropertyName() != null &&
c.getPropertyName().equals(propertyName))
+ return c;
+ }
+ DebugUtil.debugln(getClass(), debug, "WARNING: Could not find column "
+ + propertyName + " in table " + t.getName());
+ return null;
+ }
+
public String getColumnPropertyName(String tableName, String
columnName) {
Table t = getTable(tableName);
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandFactoryImpl.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandFactoryImpl.java?rev=397085&r1=397084&r2=397085&view=diff
==============================================================================
---
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandFactoryImpl.java
(original)
+++
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/CommandFactoryImpl.java
Tue Apr 25 21:36:17 2006
@@ -70,7 +70,7 @@
case 'D':
return new DeleteCommandImpl(sql);
case '{':
- return new SPCommandImpl(sql);
+ return new SPCommandImpl(sql, config);
default:
throw new Error("SQL => " + sql + " is not valid");
}
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java?rev=397085&r1=397084&r2=397085&view=diff
==============================================================================
---
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java
(original)
+++
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java
Tue Apr 25 21:36:17 2006
@@ -1,28 +1,30 @@
/**
-*
-* Copyright 2005 The Apache Software Foundation or its licensors, as
applicable.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as
applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package org.apache.tuscany.das.rdb.impl;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import org.apache.tuscany.das.rdb.config.Column;
import org.apache.tuscany.das.rdb.config.Config;
import org.apache.tuscany.das.rdb.config.KeyPair;
import org.apache.tuscany.das.rdb.config.Relationship;
+import org.apache.tuscany.das.rdb.config.Table;
import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
import org.apache.tuscany.das.rdb.util.DebugUtil;
@@ -37,96 +39,110 @@
*/
public class DatabaseObject {
- private final MappingWrapper mappingWrapper;
+ private final MappingWrapper mappingWrapper;
+
+ private final DataObject dataObject;
- private final DataObject dataObject;
+ private Property parentReference;
- private Property parentReference;
+ private static final boolean debug = false;
- private static final boolean debug = false;
+ private HashMap keyMappings = new HashMap();
+
+ public DatabaseObject(Config model, DataObject changedObject) {
+ this.mappingWrapper = new MappingWrapper(model);
+ this.dataObject = changedObject;
+ initialize();
+ }
+
+ // Initialize Key Mappings
+ private void initialize() {
+ if (mappingWrapper.getConfig() != null) {
+ List relationships = mappingWrapper.getConfig().getRelationship();
+ Iterator i = relationships.iterator();
+ while (i.hasNext()) {
+ Relationship r = (Relationship) i.next();
+ DebugUtil.debugln(getClass(), debug, "Initializing
relationship: " + r.getName());
+ if (r.getForeignKeyTable().equals(getTypeName())) {
+ List pairs = r.getKeyPair();
+ Iterator iter = pairs.iterator();
+ while (iter.hasNext()) {
+ KeyPair pair = (KeyPair) iter.next();
+ keyMappings.put(pair.getForeignKeyColumn(), r);
+ }
+ }
+ }
+ }
+ }
+
+ public Object get(String parameter) {
+
+ if (isPartOfPrimaryKey(parameter))
+ return dataObject.get(parameter);
+
+ Relationship r = (Relationship) keyMappings.get(parameter);
+ if (r == null)
+ return dataObject.get(parameter);
+
+ Property parentRef = getParentReference(r.getPrimaryKeyTable());
+ DataObject parent = dataObject.getDataObject(parentRef);
+ if (parent == null)
+ return null;
+ String parentKey = getParentKey(r, parameter);
+ return parent.get(parentKey);
+
+ }
+
+ private String getParentKey(Relationship r, String parameter) {
+ List keyPairs = r.getKeyPair();
+ Iterator i = keyPairs.iterator();
+ while (i.hasNext()) {
+ KeyPair pair = (KeyPair) i.next();
+ if (pair.getForeignKeyColumn().equals(parameter))
+ return pair.getPrimaryKeyColumn();
+ }
+ return null;
+ }
+
+ public Property getParentReference(String parentName) {
+ if (this.parentReference == null) {
+
+ Iterator i = dataObject.getType().getProperties().iterator();
+ while (i.hasNext()) {
+ Property ref = (Property) i.next();
+ if ((!ref.getType().isDataType()) &&
(ref.getType().getName().equals(parentName))) {
+ this.parentReference = ref;
+ }
+ }
+ }
+ return this.parentReference;
+ }
+
+ public String getTableName() {
+ if (mappingWrapper.getConfig() != null)
+ return
mappingWrapper.getTableByPropertyName(getTypeName()).getName();
+ else
+ return null;
+ }
+
+ public String getTypeName() {
+ return dataObject.getType().getName();
+ }
+
+ public void setPropagatedID(String propagatedID, int id) {
+ dataObject.setInt(propagatedID, id);
+ }
+
+ private boolean isPartOfPrimaryKey(String parameter) {
+ if (mappingWrapper.getConfig() == null)
+ return false;
+ Table t = mappingWrapper.getTable(getTableName());
+ if (t == null)
+ return false;
+ Column c = mappingWrapper.getColumnByPropertyName(t, parameter);
+ if (c == null)
+ return false;
+ return c.isPrimaryKey();
+ }
- private HashMap keyMappings = new HashMap();
-
- public DatabaseObject(Config model, DataObject changedObject) {
- this.mappingWrapper = new MappingWrapper(model);
- this.dataObject = changedObject;
- initialize();
- }
-
- // Initialize Key Mappings
- private void initialize() {
- if (mappingWrapper.getConfig() != null) {
- List relationships =
mappingWrapper.getConfig().getRelationship();
- Iterator i = relationships.iterator();
- while (i.hasNext()) {
- Relationship r = (Relationship) i.next();
- DebugUtil.debugln(getClass(), debug,
- "Initializing relationship: " +
r.getName());
- if
(r.getForeignKeyTable().equals(getTypeName())) {
- List pairs = r.getKeyPair();
- Iterator iter = pairs.iterator();
- while (iter.hasNext()) {
- KeyPair pair = (KeyPair)
iter.next();
-
keyMappings.put(pair.getForeignKeyColumn(), r);
- }
- }
- }
- }
- }
-
- public Object get(String parameter) {
- Relationship r = (Relationship) keyMappings.get(parameter);
- if (r == null)
- return dataObject.get(parameter);
-
- Property parentRef = getParentReference(r.getPrimaryKeyTable());
- DataObject parent = dataObject.getDataObject(parentRef);
- if ( parent == null )
- return null;
- String parentKey = getParentKey(r, parameter);
- return parent.get(parentKey);
-
- }
-
- private String getParentKey(Relationship r, String parameter) {
- List keyPairs = r.getKeyPair();
- Iterator i = keyPairs.iterator();
- while (i.hasNext()) {
- KeyPair pair = (KeyPair) i.next();
- if (pair.getForeignKeyColumn().equals(parameter))
- return pair.getPrimaryKeyColumn();
- }
- return null;
- }
-
- public Property getParentReference(String parentName) {
- if (this.parentReference == null) {
-
- Iterator i =
dataObject.getType().getProperties().iterator();
- while (i.hasNext()) {
- Property ref = (Property) i.next();
- if ((!ref.getType().isDataType()) &&
-
(ref.getType().getName().equals(parentName))) {
- this.parentReference = ref;
- }
- }
- }
- return this.parentReference;
- }
-
- public String getTableName() {
- if (mappingWrapper.getConfig() != null)
- return
mappingWrapper.getTableByPropertyName(getTypeName())
- .getName();
- else
- return null;
- }
-
- public String getTypeName() {
- return dataObject.getType().getName();
- }
-
- public void setPropagatedID(String propagatedID, int id) {
- dataObject.setInt(propagatedID, id);
- }
}
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java?rev=397085&r1=397084&r2=397085&view=diff
==============================================================================
---
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java
(original)
+++
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/SPCommandImpl.java
Tue Apr 25 21:36:17 2006
@@ -19,6 +19,7 @@
import java.sql.ResultSet;
import java.sql.SQLException;
+import org.apache.tuscany.das.rdb.config.Config;
import org.apache.tuscany.das.rdb.util.DebugUtil;
import commonj.sdo.DataObject;
@@ -28,6 +29,10 @@
public SPCommandImpl(String sqlString) {
super(sqlString);
}
+
+ public SPCommandImpl(String sqlString, Config config) {
+ super(sqlString, config);
+ }
public DataObject executeQuery() {