You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ke...@apache.org on 2006/12/21 13:39:45 UTC

svn commit: r489339 [1/4] - in /incubator/tuscany/java/sdo: impl/src/main/java/org/apache/tuscany/sdo/helper/ impl/src/main/java/org/apache/tuscany/sdo/impl/ impl/src/main/java/org/apache/tuscany/sdo/model/impl/ impl/src/main/java/org/apache/tuscany/sd...

Author: kelvingoodson
Date: Thu Dec 21 04:39:44 2006
New Revision: 489339

URL: http://svn.apache.org/viewvc?view=rev&rev=489339
Log:
TUSCANY-684 added register(HelperContext scope) method to generated Factory instance -- also added an introspectable pattern version to the Factory implementation, and commentary to the generated classes on the options that were used to generate the classes.  

Added:
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/noInterfaces/
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/noInterfaces/simple/
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/noInterfaces/simple/Quote.java   (with props)
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/noInterfaces/simple/SimpleFactory.java   (with props)
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/simple/cs/
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/simple/cs/CSFactory.java   (with props)
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/simple/cs/Quote.java   (with props)
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/simple/cs/QuoteBase.java   (with props)
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/simple/cs/impl/
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/simple/cs/impl/CSFactoryImpl.java   (with props)
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/simple/cs/impl/QuoteBaseImpl.java   (with props)
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/simple/cs/impl/QuoteImpl.java   (with props)
Removed:
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/simple/impl/SimplePackageImpl.java
    incubator/tuscany/java/sdo/tools/src/test/java/org/example/
Modified:
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOExtendedMetaDataImpl.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/FactoryBase.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/model/impl/ModelFactoryImpl.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/SDOUtil.java
    incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/templates/model/SDOFactoryClass.java
    incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/util/SDOGenUtil.java
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/simple/Quote.java
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/simple/SimpleFactory.java
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/simple/impl/QuoteImpl.java
    incubator/tuscany/java/sdo/tools/src/test/java/com/example/simple/impl/SimpleFactoryImpl.java
    incubator/tuscany/java/sdo/tools/src/test/java/org/apache/tuscany/sdo/test/ChangeSummaryGenTestCase.java
    incubator/tuscany/java/sdo/tools/src/test/java/org/apache/tuscany/sdo/test/SimpleStaticTest.java
    incubator/tuscany/java/sdo/tools/templates/models/SDOFactoryClass.javajet

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java?view=diff&rev=489339&r1=489338&r2=489339
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java Thu Dec 21 04:39:44 2006
@@ -41,17 +41,15 @@
 	private XSDHelper xsdHelper;
 
 	
-	public HelperContextImpl(TypeHelper scope) {
-		if(scope == null) {
-		    EPackage.Registry registry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE);
-		    ExtendedMetaData extendedMetaData = new SDOExtendedMetaDataImpl(registry); //TODO create subclass that makes demand() methods synchronous
-		    typeHelper = new TypeHelperImpl(extendedMetaData);
-		} else {
-			typeHelper = scope;
-		}
-		dataFactory = new DataFactoryImpl(typeHelper);
-		xmlHelper = new XMLHelperImpl(typeHelper);
-		xsdHelper = new XSDHelperImpl(typeHelper);
+	public HelperContextImpl() {
+
+          EPackage.Registry registry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE);
+          ExtendedMetaData extendedMetaData = new SDOExtendedMetaDataImpl(registry); //TODO create subclass that makes demand() methods synchronous
+          typeHelper = new TypeHelperImpl(extendedMetaData);
+          
+          dataFactory = new DataFactoryImpl(typeHelper);
+          xmlHelper = new XMLHelperImpl(typeHelper);
+          xsdHelper = new XSDHelperImpl(typeHelper);
 	}
 
 	public CopyHelper getCopyHelper() {

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOExtendedMetaDataImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOExtendedMetaDataImpl.java?view=diff&rev=489339&r1=489338&r2=489339
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOExtendedMetaDataImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOExtendedMetaDataImpl.java Thu Dec 21 04:39:44 2006
@@ -56,7 +56,8 @@
   public EPackage getPackage(String namespace)
   {
     if ("".equals(namespace)) namespace = null; //FB
-    return super.getPackage(namespace);
+    EPackage result = registry.getEPackage(namespace);
+    return result == null ? super.getPackage(namespace) : result;
   }
 
   /**
@@ -101,6 +102,11 @@
   public void setAliasNames(EModelElement modelElement, String aliasNames) {
     EAnnotation eAnnotation = getAnnotation(modelElement, true);
     eAnnotation.getDetails().put("aliasNames", aliasNames);
+  }
+  
+  public EPackage.Registry getRegistry()
+  {
+    return registry;
   }
   
 }

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java?view=diff&rev=489339&r1=489338&r2=489339
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java Thu Dec 21 04:39:44 2006
@@ -82,6 +82,7 @@
   public Type getType(String uri, String typeName)
   {
     EPackage ePackage = extendedMetaData.getPackage(uri);
+
     if (ePackage != null)
     {
       EClassifier eClassifier = ePackage.getEClassifier(typeName);
@@ -101,8 +102,28 @@
     {
       return type;
     }
-    
+        
     //TODO more efficient implementation ... this is a really bad one!
+    
+    // check the local scope package registry
+    for (Iterator iter = ((SDOExtendedMetaDataImpl)extendedMetaData).getRegistry().values().iterator(); iter.hasNext(); )
+    {
+      Object value = iter.next();
+      if (value instanceof EPackage)
+      {
+        EPackage ePackage = (EPackage)value;
+        for (Iterator iter2 = ePackage.getEClassifiers().iterator(); iter2.hasNext(); )
+        {
+          EClassifier eClassifier = (EClassifier)iter2.next();
+          if (eClassifier.getInstanceClass() == interfaceClass)
+          {
+            return (Type)eClassifier;
+          }
+        }
+      }
+    }
+    
+    // if it wasnt in the local scope look in the EMF global package registry
     for (Iterator iter = EPackage.Registry.INSTANCE.values().iterator(); iter.hasNext(); )
     {
       Object value = iter.next();

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/FactoryBase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/FactoryBase.java?view=diff&rev=489339&r1=489338&r2=489339
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/FactoryBase.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/FactoryBase.java Thu Dec 21 04:39:44 2006
@@ -71,13 +71,22 @@
 
     createResource(namespaceURI);
     setNsURI(namespaceURI);
-    //FIXME ... figure out proper (scoped) way to register static packages
-    EPackage.Registry.INSTANCE.put(namespaceURI, this);
+    
+    // TODO this is a bit of a kludge until we figure out how to connect type scopes
+    if(namespaceURI.startsWith("commonj.sdo")) {
+      if("commonj.sdo".equals(namespaceURI) ||
+         "commonj.sdo/java".equals(namespaceURI) ||
+         "commonj.sdo/xml".equals(namespaceURI)
+      ) {
+        EPackage.Registry.INSTANCE.put(namespaceURI, this);
+      }
+    }
     
     ((SDOEFactoryImpl)getEFactoryInstance()).sdoFactory = this;
   }
 
-  
+ 
+
   public DataObject create(int typeNumber)
   {
     return null;

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/model/impl/ModelFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/model/impl/ModelFactoryImpl.java?view=diff&rev=489339&r1=489338&r2=489339
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/model/impl/ModelFactoryImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/model/impl/ModelFactoryImpl.java Thu Dec 21 04:39:44 2006
@@ -48,7 +48,8 @@
  *         List getTypeList();
  *   6. Delete all the createXXXFromString() and convertXXXToString() methods in the newly generated ModelFactoryImpl and
  *      replace them with the ones from this file (resolve any missing imports).
- *   7. Move this JavaDoc comment into the newly generated ModelFactoryImpl class.
+ *   7. Comment out the call to registerStaticTypes of ModelFactory.class in the init() method
+ *   8. Move this JavaDoc comment into the newly generated ModelFactoryImpl class.
  * <!-- end-user-doc -->
  * @generated
  */
@@ -694,7 +695,7 @@
 
     // Initialize simple dependencies
     SDOUtil.registerStaticTypes(SDOFactory.class);
-    SDOUtil.registerStaticTypes(ModelFactory.class);
+    // SDOUtil.registerStaticTypes(ModelFactory.class);
 
     // Create package meta-data objects
     theModelFactoryImpl.createMetaData();

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/SDOUtil.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/SDOUtil.java?view=diff&rev=489339&r1=489338&r2=489339
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/SDOUtil.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/SDOUtil.java Thu Dec 21 04:39:44 2006
@@ -65,6 +65,7 @@
 import org.eclipse.emf.ecore.ETypedElement;
 import org.eclipse.emf.ecore.EcoreFactory;
 import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
 import org.eclipse.emf.ecore.impl.EPackageRegistryImpl;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
@@ -295,7 +296,7 @@
    */
   public static HelperContext createHelperContext()
   {
-    return new HelperContextImpl(null);
+    return new HelperContextImpl();
   }
 
   /**
@@ -379,14 +380,14 @@
 
       EPackage ePackage = ((TypeHelperImpl) scope).getExtendedMetaData().getPackage(uri);
       if (ePackage != null) {
-          /**
-           * ePackage.getEclassifiers will return an EList ( simple extension of List ).
-           * 
-           * When a Type is generated from XML EMF will create a DocumentRoot type As this is EMF specific it should be removed
-           */
-          List result = new ArrayList(ePackage.getEClassifiers());
-          result.remove(((TypeHelperImpl) scope).getExtendedMetaData().getDocumentRoot(ePackage));
-          return result;
+        /**
+         * ePackage.getEclassifiers will return an EList ( simple extension of List ).
+         * 
+         * When a Type is generated from XML EMF will create a DocumentRoot type As this is EMF specific it should be removed
+         */
+        List result = new ArrayList(ePackage.getEClassifiers());
+        result.remove(((TypeHelperImpl) scope).getExtendedMetaData().getDocumentRoot(ePackage));
+        return result;
       }
       return null;
   }
@@ -516,7 +517,7 @@
   
   public static Property createProperty(Type containingType, String name, Type propertyType)
   {
-  	EStructuralFeature eStructuralFeature = 
+    EStructuralFeature eStructuralFeature = 
       propertyType.isDataType() ? 
         (EStructuralFeature)SDOFactory.eINSTANCE.createAttribute() :
         (EStructuralFeature)SDOFactory.eINSTANCE.createReference();
@@ -584,35 +585,45 @@
    *  The registered types will be visible in all TypeHelper's created in the same classLoader
    *  scope as the call to this function.
    * @param factoryClass the generated factory class.
+   * @deprecated see the register(HelperContext) metods on generated Factory classes
    */
   public static void registerStaticTypes(Class factoryClass)
   {
     //TODO this implementation is temporary, until the SDO generated factory pattern is decided
+    //TODO might want to clean this implementation in the light of the requirement to regenerate all classes
+    //after noEMF became the default, so we have no compatibility requirements (unless we
+    //cater for the simple hand edit that would make M2 generated classes work) -- as this is
+    //deprecated I'm going to do nothing for now
     //
     String temp = factoryClass.getName().replaceFirst("Factory$", "PackageImpl");
     int lastDot = temp.lastIndexOf('.');
     String packageName = temp.substring(0, lastDot) + ".impl" + temp.substring(lastDot);
-    try // this case handles the current default generator pattern
+    
+    try // this case handles the old style EMF pattern
     {
       Class javaClass = getPackageClass(factoryClass, packageName);
       Field field = javaClass.getField("eINSTANCE");
-      field.get(null); 
+      EPackageImpl pkg = (EPackageImpl)field.get(null);
+      EPackage.Registry.INSTANCE.put(pkg.getNsURI(), pkg);
     }
     catch (Exception e1)
     {
       packageName = factoryClass.getName().replaceFirst("Factory$", "Package");
-      try // this case handles the -noInterfaces generator pattern
+      try // this case handles the EMF -noInterfaces generator pattern
       {
         Class javaClass = getPackageClass(factoryClass, packageName);
         Field field = javaClass.getField("eINSTANCE");
-        field.get(null); 
+        EPackageImpl pkg = (EPackageImpl)field.get(null);
+        EPackage.Registry.INSTANCE.put(pkg.getNsURI(), pkg);
       }
       catch (Exception e2)
       {
-        try // this case handles the -noEMF generator pattern
+        try // this case handles the default (was -noEMF) generator pattern
         {
           Field field = factoryClass.getField("INSTANCE");
-          field.get(null); 
+          EPackageImpl pkg = (EPackageImpl)field.get(null);
+          EPackage.Registry.INSTANCE.put(pkg.getNsURI(), pkg);
+          // TODO -- decide if we should block global initialization of Factories with the new register method.
         }
         catch (Exception e3)
         {
@@ -621,6 +632,7 @@
       }
     }
   }
+
 
   private static Class getPackageClass(Class factoryClass, String packageName) throws Exception
   {



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org