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";;
+       }       
+       
 
 }


Reply via email to