Author: kwilliams
Date: Tue Apr 18 13:35:51 2006
New Revision: 395031
URL: http://svn.apache.org/viewcvs?rev=395031&view=rev
Log:
Applying patch for TUCANY-156
Converting to SDO apis for dynamic type creation
Removed:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/EAttributeMaker.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/EReferenceMaker.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/graphbuilder/schema/ESchemaMaker.java
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/GraphBuilderMetadata.java?rev=395031&r1=395030&r2=395031&view=diff
==============================================================================
---
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
Tue Apr 18 13:35:51 2006
@@ -86,7 +86,7 @@
public Type getSchema() {
if ( this.schema == null ) {
ESchemaMaker schemaMaker = new ESchemaMaker(this);
- return schemaMaker.createESchema();
+ return schemaMaker.createTypes();
} else {
return this.schema;
}
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java
URL:
http://svn.apache.org/viewcvs/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java?rev=395031&r1=395030&r2=395031&view=diff
==============================================================================
---
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java
(original)
+++
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/schema/ESchemaMaker.java
Tue Apr 18 13:35:51 2006
@@ -16,6 +16,8 @@
*/
package org.apache.tuscany.das.rdb.graphbuilder.schema;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import org.apache.tuscany.das.rdb.config.Relationship;
@@ -23,19 +25,10 @@
import org.apache.tuscany.das.rdb.graphbuilder.impl.GraphBuilderMetadata;
import org.apache.tuscany.das.rdb.graphbuilder.impl.ResultMetadata;
import org.apache.tuscany.das.rdb.util.DebugUtil;
-import org.apache.tuscany.sdo.SDOFactory;
-import org.apache.tuscany.sdo.impl.AttributeImpl;
-import org.apache.tuscany.sdo.impl.ClassImpl;
-import org.apache.tuscany.sdo.impl.DynamicDataObjectImpl;
-import org.apache.tuscany.sdo.impl.ReferenceImpl;
import org.apache.tuscany.sdo.util.DataObjectUtil;
import org.apache.tuscany.sdo.util.SDOUtil;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EcoreFactory;
-import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import commonj.sdo.Property;
import commonj.sdo.Type;
import commonj.sdo.helper.TypeHelper;
@@ -49,50 +42,17 @@
private final GraphBuilderMetadata metadata;
- private EPackage dataGraphPackage;
-
- private final String nsPrefix;
-
- private final String pkgName;
-
private boolean debug = false;
/**
- * Constructor for ESchemaMaker. Creates an EMF Schema based on the
metadata
+ * Constructor for ESchemaMaker. Creates an SDO model based on the
metadata
* passed in.
*
* @param metadata
*/
public ESchemaMaker(GraphBuilderMetadata metadata) {
- this(metadata, null, null);
- }
-
- /**
- * Constructor for ESshemaMaker. Creates an EMF Schema based on the
supplied
- * metadata, namespace prefix, and package name
- *
- * @param metadata
- * the metadata
- * @param nsPrefix
- * the namespace prefix - this affects the generated
- * Factory/Package name - defaults to datagraph
- * @param pkgName
- * the package name - determines package name for generated
code -
- * defaults to datagraph
- */
- public ESchemaMaker(GraphBuilderMetadata metadata, String nsPrefix,
- String pkgName) {
- if (nsPrefix == null)
- nsPrefix = "datagraph";
- if (pkgName == null)
- pkgName = "datagraph";
-
this.metadata = metadata;
- this.nsPrefix = nsPrefix;
- this.pkgName = pkgName;
-
- TypeHelper helper = TypeHelper.INSTANCE;
- }
+ }
/**
* Creates an EMF Schema by using the
@@ -102,18 +62,14 @@
* @link Metadata elements into EMF Schema elements.
*/
- public Type createESchema() {
- TypeHelper.INSTANCE.getType("commonj.sdo", "Integer");
+ public Type createTypes() {
+ TypeHelper types = SDOUtil.createTypeHelper();
+
DataObjectUtil.initRuntime();
SDOUtil.createDataGraph();
- ClassImpl rootClass = (ClassImpl)
SDOFactory.eINSTANCE.createClass();
- Type rootType = (Type) rootClass;
-
- rootClass.setName("DataGraphRoot");
- getEPackage().getEClassifiers().add(rootClass);
-
- EReferenceMaker refMaker = new EReferenceMaker();
+
+ Type rootType = SDOUtil.createType(types, getURI(),
"DataGraphRoot", false);
Iterator iter = metadata.getResultMetadata().iterator();
while (iter.hasNext()) {
@@ -124,40 +80,47 @@
.iterator();
while (names.hasNext()) {
String tableName = (String) names.next();
- if (rootClass.getEStructuralFeature(tableName)
== null) {
- Type clazz = createType(tableName);
-
getEPackage().getEClassifiers().add(clazz);
- ReferenceImpl ref =
refMaker.createOneToManyReference(
- tableName, clazz, true);
-
rootClass.getEStructuralFeatures().add(ref);
- }
+
+ Type tableType = SDOUtil.createType(types,
getURI(), tableName, false);
+ Property property =
SDOUtil.createProperty(rootType, 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.getColumnNames().size(); i++) {
- ReferenceImpl ref = (ReferenceImpl) rootType
-
.getProperty(resultMetadata.getTablePropertyName(i));
-
+ Property ref =
rootType.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");
- EClass clazz = ref.getEReferenceType();
+
String columnName =
resultMetadata.getColumnPropertyName(i);
- if (clazz.getEStructuralFeature(columnName) ==
null) {
- Type atype = (Type)
resultMetadata.getDataType(i);
-
- // EDataType type = (EDataType)
atype.getEClassifier();
-
- AttributeImpl attr =
getAttributeMaker().createEAttribute(
- columnName, atype);
+ // TODO temporary check until Tuscany-203 is
fixed
+ if ( !addedProperties.contains(columnName)) {
+ addedProperties.add(columnName);
+ Type atype = (Type)
resultMetadata.getDataType(i);
+
+ SDOUtil.createProperty(ref.getType(),
columnName, atype);
DebugUtil.debugln(getClass(), debug,
"Adding column "
+ columnName + " to "
- +
resultMetadata.getTablePropertyName(i));
-
clazz.getEStructuralFeatures().add(attr);
+ +
resultMetadata.getTablePropertyName(i));
}
+
}
}
@@ -167,10 +130,10 @@
while (i.hasNext()) {
Relationship r = (Relationship) i.next();
- EClass parent = (EClass)
getEPackage().getEClassifier(
-
wrapper.getTablePropertyName(r.getPrimaryKeyTable()));
- EClass child = (EClass)
getEPackage().getEClassifier(
-
wrapper.getTablePropertyName(r.getForeignKeyTable()));
+ Type parent = rootType.getProperty(
+
wrapper.getTablePropertyName(r.getPrimaryKeyTable())).getType();
+ Type child = rootType.getProperty(
+
wrapper.getTablePropertyName(r.getForeignKeyTable())).getType();
if (parent == null) {
throw new RuntimeException("The parent
table ("
+
r.getPrimaryKeyTable() + ") in relationship "
@@ -183,79 +146,26 @@
+ " was not found in
the mapping information.");
}
- ReferenceImpl ref = refMaker.createReference(r,
(Type)parent, (Type)child);
-
- DebugUtil.debugln(getClass(), debug, "Adding
reference: "
- + ref.getName() + " to " +
parent.getName());
- if (parent.getEStructuralFeature(ref.getName())
== null)
-
parent.getEStructuralFeatures().add(ref);
-
- if
(child.getEStructuralFeature(ref.getEOpposite().getName()) == null)
-
child.getEStructuralFeatures().add(ref.getEOpposite());
+ // ReferenceImpl ref = refMaker.createReference(r,
parent, child);
+
+ 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());
+
+
}
}
-
- // EcoreUtil.freeze(rootObject.getEPackage());
-
- return (Type) rootClass;
- }
-
- /**
- * Create an EClass with the specified name
- *
- * @param name
- * @return EClass
- */
- protected Type createType(String name) {
- ClassImpl ecl = (ClassImpl) SDOFactory.eINSTANCE.createClass();
- ecl.setName(name);
-
- return ecl;
- }
-
- /**
- * Get an EAttributeMaker singleton
- *
- * @return EAttributeMaker
- */
- private EAttributeMaker getAttributeMaker() {
- return EAttributeMaker.singleton();
- }
-
-
- /**
- * @return the EPackage for this schema
- */
- public EPackage getEPackage() {
- if (this.dataGraphPackage == null)
- this.dataGraphPackage = createEPackage();
- return this.dataGraphPackage;
- }
-
- /**
- * Create the EPackage for this schema Uses the packageName and nsPrefix
- * values set in the constructors The EPackage overrides the default
- * EFactory so that DataObjects will be created using MapDataObjectImpl.
- *
- * @return the new EPackage
- */
- protected EPackage createEPackage() {
- EPackage pkg = EcoreFactory.eINSTANCE.createEPackage();
- pkg.setName(pkgName);
- pkg.setNsPrefix(nsPrefix);
- pkg.setNsURI("datagraph.ecore");
-
- pkg.setEFactoryInstance(new EFactoryImpl() {
- public EObject basicCreate(EClass cls) {
- EObject result = new DynamicDataObjectImpl(cls);
- return result;
- }
- });
-
- return pkg;
+ return rootType;
}
+
+ private String getURI() {
+ return "http:///org.apache.tuscany.das.rdb/das";
+ }
+
}