Author: bdaniel
Date: Thu Sep 7 11:53:02 2006
New Revision: 441174
URL: http://svn.apache.org/viewvc?view=rev&rev=441174
Log:
Tuscany-710 Make use of new function in SDO to register Types with a DataGraph
Removed:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java?view=diff&rev=441174&r1=441173&r2=441174
==============================================================================
---
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java
(original)
+++
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java
Thu Sep 7 11:53:02 2006
@@ -22,14 +22,20 @@
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import org.apache.tuscany.das.rdb.config.Config;
+import org.apache.tuscany.das.rdb.config.Relationship;
import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
-import org.apache.tuscany.das.rdb.graphbuilder.schema.ESchemaMaker;
import org.apache.tuscany.das.rdb.impl.ResultSetShape;
+import org.apache.tuscany.sdo.util.DataObjectUtil;
+import org.apache.tuscany.sdo.util.SDOUtil;
+import commonj.sdo.Property;
import commonj.sdo.Type;
+import commonj.sdo.helper.TypeHelper;
/**
@@ -39,6 +45,8 @@
private MappingWrapper configWrapper;
private final Collection resultSets = new ArrayList();
private String typeURI;
+ private Type rootType = null;
+ private TypeHelper typeHelper = SDOUtil.createTypeHelper();
public GraphBuilderMetadata(Collection results, Config model,
ResultSetShape shape) throws SQLException {
@@ -56,13 +64,15 @@
}
-
+ /**
+ * Returns the collection of ResultMetadata objects
+ */
public Collection getResultMetadata() {
return this.resultSets;
}
/**
- * @return
+ * Returns the set of defined relationships
*/
public Collection getRelationships() {
@@ -71,18 +81,170 @@
/**
- * @return
+ * Returns the root Type
*/
- public Type getSchema() {
- ESchemaMaker schemaMaker = new ESchemaMaker(this);
- if ( this.typeURI == null ) {
- return schemaMaker.createTypes();
- } else {
- return schemaMaker.createTypes(this.typeURI);
+ public Type getRootType() {
+ if ( this.rootType == null ) {
+ if ( this.typeURI == null )
+ createDynamicTypes();
+ else
+ createDynamicRoot();
}
+
+ return this.rootType ;
}
public MappingWrapper getConfigWrapper() {
return this.configWrapper;
}
+
+ /**
+ * Creates a set of SDO Types based on the query results and supplied
config information
+ */
+
+ private void createDynamicTypes() {
+
+ DataObjectUtil.initRuntime();
+
+ Type root = SDOUtil.createType(typeHelper, getDefaultURI(),
"DataGraphRoot", false);
+
+ Iterator iter = getResultMetadata().iterator();
+ while (iter.hasNext()) {
+
+ ResultMetadata resultMetadata = (ResultMetadata)
iter.next();
+
+ // Create a Type for each Table represented in the
ResultSet
+ Iterator names =
resultMetadata.getAllTablePropertyNames()
+ .iterator();
+ while (names.hasNext()) {
+ String tableName = (String) names.next();
+
+ if ( root.getProperty(tableName) == null ) {
+ Type tableType =
SDOUtil.createType(typeHelper, getDefaultURI(), tableName, false);
+ Property property =
SDOUtil.createProperty(root, tableName, tableType);
+ SDOUtil.setMany(property,true);
+ SDOUtil.setContainment(property, true);
+ }
+ }
+
+ // TODO tablePropertyMap is temporary until Tuscany-203
is fixed
+ HashMap tablePropertyMap = new HashMap();
+
+ for (int i = 1; i <= resultMetadata.getResultSetSize();
i++) {
+
+ Property ref =
root.getProperty(resultMetadata.getTablePropertyName(i));
+
+ // TODO Temporary code to check to see if a
property has already been added.
+ // Replace when Tuscany-203 is fixed
+ ArrayList addedProperties = (ArrayList)
tablePropertyMap.get(ref.getName());
+ if ( addedProperties == null ) {
+ addedProperties = new ArrayList();
+ tablePropertyMap.put(ref.getName(),
addedProperties);
+ }
+
+ if (ref == null)
+ throw new RuntimeException("Could not
find table "
+ +
resultMetadata.getTablePropertyName(i)
+ + " in the SDO model");
+
+ String columnName =
resultMetadata.getColumnPropertyName(i);
+
+ // TODO temporary check until Tuscany-203 is
fixed
+ if ( !addedProperties.contains(columnName)) {
+ addedProperties.add(columnName);
+ Type atype =
resultMetadata.getDataType(i);
+
+ SDOUtil.createProperty(ref.getType(),
columnName, atype);
+
+ }
+
+ }
+ }
+
+
+ MappingWrapper wrapper = getConfigWrapper();
+ Iterator i = getRelationships().iterator();
+ while (i.hasNext()) {
+ Relationship r = (Relationship) i.next();
+
+ String parentName = wrapper
+
.getTableTypeName(r.getPrimaryKeyTable());
+ String childName =
wrapper.getTableTypeName(r.getForeignKeyTable());
+
+ if (parentName == null) {
+ throw new RuntimeException("The parent table ("
+ + r.getPrimaryKeyTable() + ")
in relationship "
+ + r.getName()
+ + " was not found in the
mapping information.");
+ } else if (childName == null) {
+ throw new RuntimeException("The child table ("
+ + r.getForeignKeyTable() + ")
in relationship "
+ + r.getName()
+ + " was not found in the
mapping information.");
+ }
+
+ Property parentProperty = root.getProperty(parentName);
+ Property childProperty = root.getProperty(childName);
+
+ if (parentProperty == null) {
+ throw new RuntimeException("The parent table ("
+ parentName
+ + ") in relationship " +
r.getName()
+ + " was not found.");
+ } else if (childProperty == null) {
+ throw new RuntimeException("The child table ("
+ childName
+ + ") in relationship " +
r.getName()
+ + " was not found.");
+ }
+
+ Type parent = parentProperty.getType();
+ Type child = childProperty.getType();
+
+ Property parentProp = SDOUtil.createProperty(parent,
r.getName(),
+ child);
+ Property childProp = SDOUtil.createProperty(child,
r.getName()
+ + "_opposite", parent);
+ SDOUtil.setOpposite(parentProp, childProp);
+ SDOUtil.setOpposite(childProp, parentProp);
+ SDOUtil.setMany(parentProp, r.isMany());
+ }
+
+
+ this.rootType = root;
+ }
+
+ private String getDefaultURI() {
+ return "http:///org.apache.tuscany.das.rdb/das";
+ }
+
+ /**
+ * Create a dynamic root Type to act as a container Type for a set of
generated Types
+ *
+ */
+ private void createDynamicRoot() {
+ Type root = SDOUtil.createType(typeHelper, getDefaultURI() +
"/DataGraphRoot", "DataGraphRoot", false);
+
+ List types = SDOUtil.getTypes(typeHelper, typeURI);
+ if ( types == null )
+ throw new RuntimeException("SDO Types have not been
registered for URI " + typeURI);
+
+ Iterator i = types.iterator();
+ while ( i.hasNext() ) {
+ Type type = (Type) i.next();
+ Property property = SDOUtil.createProperty(root,
type.getName(), type);
+ SDOUtil.setContainment(property, true);
+ SDOUtil.setMany(property, true);
+ }
+ this.rootType = root;
+ }
+
+ public List getDefinedTypes() {
+ if ( this.typeURI == null ) {
+ return SDOUtil.getTypes(typeHelper, getDefaultURI());
+ } else {
+ List types = SDOUtil.getTypes(typeHelper, typeURI);
+ types.add(rootType);
+ return types;
+ }
+ }
+
}
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java?view=diff&rev=441174&r1=441173&r2=441174
==============================================================================
---
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
(original)
+++
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
Thu Sep 7 11:53:02 2006
@@ -81,9 +81,11 @@
// Create the DataGraph
DataGraph g = SDOUtil.createDataGraph();
- // Create the root object
- g.createRootObject(gbmd.getSchema());
+ // Create the root object
+ g.createRootObject(gbmd.getRootType());
+ SDOUtil.registerDataGraphTypes(g, gbmd.getDefinedTypes());
+
ChangeSummary summary = g.getChangeSummary();
ResultSetProcessor rsp = new ResultSetProcessor(g.getRootObject(),
gbmd);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]