You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by bd...@apache.org on 2006/09/07 20:53:06 UTC
svn commit: r441174 - in
/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb:
graphbuilder/impl/GraphBuilderMetadata.java
graphbuilder/schema/ESchemaMaker.java impl/ReadCommandImpl.java
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: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org