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 2007/07/11 16:39:44 UTC

svn commit: r555287 [1/2] - in /incubator/tuscany/java/sdo: impl/src/main/java/org/apache/tuscany/sdo/helper/ impl/src/main/java/org/apache/tuscany/sdo/util/ impl/src/main/java/org/apache/tuscany/sdo/util/resource/ impl/src/test/java/org/apache/tuscany...

Author: kelvingoodson
Date: Wed Jul 11 07:39:42 2007
New Revision: 555287

URL: http://svn.apache.org/viewvc?view=rev&rev=555287
Log:
fix for TUSCANY-1317 

Added:
    incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XMLLoadOptionsTestCase.java
    incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XMLSaveOptionsTestCase.java
    incubator/tuscany/java/sdo/impl/src/test/resources/shallowquote1.xml
Modified:
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java
    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/HelperProviderImpl.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.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/helper/XMLHelperImpl.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/SDOUtil.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/ChangeSummaryStreamSerializer.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDODeserializer.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/XMLStreamSerializer.java
    incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/AllTests.java
    incubator/tuscany/java/sdo/lib/src/main/java/org/apache/tuscany/sdo/api/SDOHelper.java
    incubator/tuscany/java/sdo/lib/src/main/java/org/apache/tuscany/sdo/api/SDOUtil.java
    incubator/tuscany/java/sdo/lib/src/main/java/org/apache/tuscany/sdo/api/XMLStreamHelper.java
    incubator/tuscany/java/sdo/lib/src/main/java/org/apache/tuscany/sdo/spi/HelperProviderBase.java
    incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/JavaGenerator.java
    incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/XSD2JavaGenerator.java

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java?view=diff&rev=555287&r1=555286&r2=555287
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java Wed Jul 11 07:39:42 2007
@@ -25,41 +25,40 @@
 import commonj.sdo.DataObject;
 import commonj.sdo.Type;
 import commonj.sdo.helper.DataFactory;
-import commonj.sdo.helper.TypeHelper;
+import commonj.sdo.helper.HelperContext;
 
 /**
- * A Factory for creating DataObjects.  
- * The created DataObjects are not connected to any other DataObjects.
+ * A Factory for creating DataObjects. The created DataObjects are not connected
+ * to any other DataObjects.
  */
-public class DataFactoryImpl implements DataFactory
-{
-  protected TypeHelper typeHelper;
-  
-  public DataFactoryImpl(TypeHelper typeHelper)
-  {
-    this.typeHelper = typeHelper;
-  }
-
-  public DataObject create(String uri, String typeName)
-  {
-    Type type = typeHelper.getType(uri, typeName);
-    return create(type);
-  }
-
-  public DataObject create(Class interfaceClass)
-  {
-    //TODO more efficient implementation ... this is a really bad one!
-    Type type = typeHelper.getType(interfaceClass);
-    return create(type);
-  }
-  
-  public DataObject create(Type type)
-  {
-    if ((type instanceof EClass) && !type.isAbstract())
-    {
-      EClass eClass = (EClass)type;
-      return (DataObject)EcoreUtil.create(eClass);
+public class DataFactoryImpl implements DataFactory {
+    protected HelperContext helperContext;
+
+    public DataFactoryImpl(HelperContext hc) {
+        this.helperContext = hc;
+    }
+
+    public DataObject create(String uri, String typeName) {
+        Type type = helperContext.getTypeHelper().getType(uri, typeName);
+        return create(type);
+    }
+
+    public DataObject create(Class interfaceClass) {
+        // TODO more efficient implementation ... this is a really bad one!
+        Type type = helperContext.getTypeHelper().getType(interfaceClass);
+        return create(type);
     }
-    throw new IllegalArgumentException();
-  }
+
+    public DataObject create(Type type) {
+        if ((type instanceof EClass) && !type.isAbstract()) {
+            EClass eClass = (EClass)type;
+            return (DataObject)EcoreUtil.create(eClass);
+        }
+        throw new IllegalArgumentException();
+    }
+
+    public HelperContext getHelperContext() {
+        return helperContext;
+    }
+
 }

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=555287&r1=555286&r2=555287
==============================================================================
--- 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 Wed Jul 11 07:39:42 2007
@@ -20,7 +20,9 @@
 
 package org.apache.tuscany.sdo.helper;
 
+import java.util.HashMap;
 import java.util.Iterator;
+import java.util.Map;
 
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.impl.EPackageRegistryImpl;
@@ -35,64 +37,144 @@
 import commonj.sdo.helper.XMLHelper;
 import commonj.sdo.helper.XSDHelper;
 
-public class HelperContextImpl implements HelperContext
-{
-	private DataFactory dataFactory;
-	private TypeHelper typeHelper;
-	private XMLHelper xmlHelper;
-	private XSDHelper xsdHelper;
-
-	public HelperContextImpl(ExtendedMetaData extendedMetaData, boolean extensibleNamespaces) {
-        typeHelper = new TypeHelperImpl(extendedMetaData);
-        dataFactory = new DataFactoryImpl(typeHelper);
-        xmlHelper = new XMLHelperImpl(typeHelper);
-        xsdHelper = new XSDHelperImpl(typeHelper, extensibleNamespaces);
+import org.apache.tuscany.sdo.api.XMLStreamHelper;
+
+public class HelperContextImpl implements HelperContext {
+    /*
+     * Relationship: HelperContext*Impl* ---1:1---> ExtendedMetaData ---1:1--->
+     * Map (:defaultOption) <---1:1---> TypeHelper <---1:1---> XMLHelper
+     * <---1:1---> XMLStreamHelper <---1:1---> XSDHelper <---1:1---> DataFactory
+     */
+
+    protected ExtendedMetaData extendedMetaData;
+    protected DataFactory dataFactory;
+    protected TypeHelper typeHelper;
+    protected XMLHelper xmlHelper;
+    protected XSDHelper xsdHelper;
+    protected XMLStreamHelper xmlStreamHelper;
+    protected Map defaultOptions;
+
+    public HelperContextImpl(ExtendedMetaData extendedMetaData, boolean extensibleNamespaces) {
+        this.defaultOptions = null;
+        this.extendedMetaData = extendedMetaData;
+        typeHelper = new TypeHelperImpl(this);
+        dataFactory = new DataFactoryImpl(this);
+        xmlHelper = new XMLHelperImpl(this);
+        xsdHelper = new XSDHelperImpl(this, null, extensibleNamespaces);
+        xmlStreamHelper = new XMLStreamHelperImpl(this);
+    }
+    
+
+    public HelperContextImpl(ExtendedMetaData extendedMetaData, boolean extensibleNamespaces, Map options) {
+        this.defaultOptions = options;
+        this.extendedMetaData = extendedMetaData;
+        typeHelper = new TypeHelperImpl(this);
+        dataFactory = new DataFactoryImpl(this);
+        xmlHelper = new XMLHelperImpl(this);
+        xsdHelper = new XSDHelperImpl(this, null, extensibleNamespaces);
+        xmlStreamHelper = new XMLStreamHelperImpl(this);
+    }
+
+    // many places this is called in existing code
+    // This is used for supporting the deprecated util -
+    // org.apache.tuscany.sdo.util.SDOUtil
+    // Once we conpletely remove this deprecated util, we can remove the below
+    // constructor
+    public HelperContextImpl(TypeHelper scope) {
+        this(scope, null);
+    }
+
+
+    public HelperContextImpl(TypeHelper scope, Map options) {
+        this.defaultOptions = options;
+        typeHelper = scope;
+        this.extendedMetaData = ((TypeHelperImpl)scope).getExtendedMetaData();
+        dataFactory = new DataFactoryImpl(this);
+        xmlHelper = new XMLHelperImpl(this);
+        xsdHelper = new XSDHelperImpl(this);
+        xmlStreamHelper = new XMLStreamHelperImpl(this);
     }
 
     public HelperContextImpl(boolean extensibleNamespaces) {
         this(new SDOExtendedMetaDataImpl(new EPackageRegistryImpl(getBuiltInModelRegistry())), extensibleNamespaces);
     }
-    
+
+
+    public HelperContextImpl(boolean extensibleNamespaces, Map options) {
+        this(new SDOExtendedMetaDataImpl(new EPackageRegistryImpl(getBuiltInModelRegistry())), extensibleNamespaces,
+             options);
+    }
+
     static protected EPackage.Registry builtInModelRegistry = null;
-    static protected EPackage.Registry getBuiltInModelRegistry()
-    {
-      if (builtInModelRegistry == null) {
-        builtInModelRegistry = new EPackageRegistryImpl();
-        for (Iterator iter = TypeHelperImpl.getBuiltInModels().iterator(); iter.hasNext(); )
-        {
-          EPackage ePackage = (EPackage)iter.next();
-          builtInModelRegistry.put(ePackage.getNsURI(), ePackage);
+
+    static protected EPackage.Registry getBuiltInModelRegistry() {
+        if (builtInModelRegistry == null) {
+            builtInModelRegistry = new EPackageRegistryImpl();
+            for (Iterator iter = TypeHelperImpl.getBuiltInModels().iterator(); iter.hasNext();) {
+                EPackage ePackage = (EPackage)iter.next();
+                builtInModelRegistry.put(ePackage.getNsURI(), ePackage);
+            }
         }
-      }
-      return builtInModelRegistry;
+        return builtInModelRegistry;
+    }
+
+    public CopyHelper getCopyHelper() {
+        return CopyHelper.INSTANCE;
+    }
+
+    public DataFactory getDataFactory() {
+        return dataFactory;
+    }
+
+    public DataHelper getDataHelper() {
+        return DataHelper.INSTANCE;
+    }
+
+    public EqualityHelper getEqualityHelper() {
+        return EqualityHelper.INSTANCE;
+    }
+
+    public TypeHelper getTypeHelper() {
+        return typeHelper;
+    }
+
+    public XMLHelper getXMLHelper() {
+        return xmlHelper;
+    }
+
+    public XMLStreamHelper getXMLStreamHelper() {
+        return xmlStreamHelper;
+    }
+
+    public XSDHelper getXSDHelper() {
+        return xsdHelper;
     }
-    
-	public CopyHelper getCopyHelper() {
-		return CopyHelper.INSTANCE;
-	}
-
-	public DataFactory getDataFactory() {
-		return dataFactory;
-	}
-
-	public DataHelper getDataHelper() {
-		return DataHelper.INSTANCE;
-	}
-
-	public EqualityHelper getEqualityHelper() {
-		return EqualityHelper.INSTANCE;
-	}
-
-	public TypeHelper getTypeHelper() {
-		return typeHelper;
-	}
-
-	public XMLHelper getXMLHelper() {
-		return xmlHelper;
-	}
-
-	public XSDHelper getXSDHelper() {
-		return xsdHelper;
-	}
 
+    public void setOptions(Map options) {
+        this.defaultOptions = options;
+    }
+
+    public Map getOptions() {
+        return this.defaultOptions;
+    }
+
+    public Map getMergedOption(Map options) {
+        Map mergedOptions = null;// copy to be used for merge
+
+        if (defaultOptions == null) {
+            return options;
+        }
+        
+        mergedOptions = new HashMap(defaultOptions);
+        if (options == null) {
+            return mergedOptions;
+        }
+        mergedOptions.putAll(options);
+        
+        return mergedOptions;
+    }
+
+    public ExtendedMetaData getExtendedMetaData() {
+        return extendedMetaData;
+    }
 }

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperProviderImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperProviderImpl.java?view=diff&rev=555287&r1=555286&r2=555287
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperProviderImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperProviderImpl.java Wed Jul 11 07:39:42 2007
@@ -44,6 +44,6 @@
     equalityHelper = new EqualityHelperImpl();
     dataHelper = new DataHelperImpl();
     sdoHelper = new SDOHelperImpl();
-  }
-  
+    xmlStreamHelper = ((HelperContextImpl)hc).getXMLStreamHelper();
+  }  
 }

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.java?view=diff&rev=555287&r1=555286&r2=555287
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.java Wed Jul 11 07:39:42 2007
@@ -75,431 +75,387 @@
 import commonj.sdo.helper.HelperContext;
 import commonj.sdo.helper.TypeHelper;
 
-public class SDOHelperImpl extends SDOHelperBase implements SDOHelper, SDOHelper.MetaDataBuilder
-{
-  public DataObject createDataTypeWrapper(Type dataType, Object value)
-  {
-    SimpleAnyTypeDataObject simpleAnyType = SDOFactory.eINSTANCE.createSimpleAnyTypeDataObject();
-    simpleAnyType.setInstanceType((EDataType)dataType);
-    simpleAnyType.setValue(value);
-    return simpleAnyType;
-  }
-  
-  public Object createFromString(Type dataType, String literal)
-  {
-    return EcoreUtil.createFromString((EDataType)dataType, literal);
-  }
-  
-  public String convertToString(Type dataType, Object value)
-  {
-    return EcoreUtil.convertToString((EDataType)dataType, value);
-  }
-
-  public Type getXSDSDOType(String xsdType)
-  {    
-    Type type = null;
-    String name = (String)xsdToSdoMappings.get(xsdType);
-    if (name != null) type = (Type)((ModelFactoryImpl)ModelFactory.INSTANCE).getEClassifier(name);
-    return type;
-  }
-  
-  public Sequence getSubstitutionValues(DataObject dataObject, Property head)
-  {
-    final EStructuralFeature  group = ExtendedMetaData.INSTANCE.getGroup((EStructuralFeature)head);
-    return null == group
-      ? null
-      : (Sequence)((FeatureMap.Internal)((EObject)dataObject).eGet(group)).getWrapper();
-  }
-  
-  public Type getJavaSDOType(Class javaClass)
-  {    
-    String name = (String)javaToSdoMappings.get(javaClass);
-    if (name != null)
-    {
-      return (Type)((ModelFactoryImpl)ModelFactory.INSTANCE).getEClassifier(name);
-    }
-    return null;
-  }
-
-  public boolean isRequired(Property property)
-  {
-    return ((EStructuralFeature)property).isRequired();
-  }
-  
-  public int getUpperBound(Property property)
-  {
-    return ((EStructuralFeature) property).getUpperBound();
-  }
-
-  public boolean isMany(Property property, DataObject context) 
-  {
-    return FeatureMapUtil.isMany((EObject) context, (EStructuralFeature) property);
-  }
-
-  public DataGraph createDataGraph()
-  {
-    return SDOFactory.eINSTANCE.createDataGraph();
-  }
-  
-  public void setRootObject(DataGraph dataGraph, DataObject rootObject)
-  {
-    ((DataGraphImpl)dataGraph).setERootObject((EObject)rootObject);
-  }
-  
-  public static DataGraph loadDataGraph(InputStream inputStream, Map options) throws IOException
-  {
-    ResourceSet resourceSet = DataObjectUtil.createResourceSet();
-    Resource resource = resourceSet.createResource(URI.createURI("all.datagraph"));
-    resource.load(inputStream, options);
-    return (DataGraph)resource.getContents().get(0);
-  }
-  
-  static final Object LOADING_SCOPE = XMLResource.OPTION_EXTENDED_META_DATA;
-
-  protected void registerLoadingScope(Map options, TypeHelper scope)
-  {
-    Object extendedMetaData = ((TypeHelperImpl) scope).getExtendedMetaData();
-    options.put(LOADING_SCOPE, extendedMetaData);
-  }
-
-  public DataGraph loadDataGraph(InputStream inputStream, Map options, TypeHelper scope) throws IOException
-  {
-    DataGraph result = null;
-    if (scope == null || scope == TypeHelper.INSTANCE) {
-      result = loadDataGraph(inputStream, options);
-    } else if (options == null) {
-      options = new HashMap();
-      registerLoadingScope(options, scope);
-      result = loadDataGraph(inputStream, options);
-    } else if (options.containsKey(LOADING_SCOPE)) {
-      Object restore = options.get(LOADING_SCOPE);
-      registerLoadingScope(options, scope);
-      try
-      {
-        result = loadDataGraph(inputStream, options);
-      }
-      finally
-      {
-        options.put(LOADING_SCOPE, restore);
-      }
-    } else {
-      registerLoadingScope(options, scope);
-      try
-      {
-        result = loadDataGraph(inputStream, options);
-      }
-      finally
-      {
-        options.remove(LOADING_SCOPE);
-      }
-    }
-    return result;
-  }
-  
-  public void saveDataGraph(DataGraph dataGraph, OutputStream outputStream, Map options) throws IOException
-  {
-    ((DataGraphImpl)dataGraph).getDataGraphResource().save(outputStream, options);
-  }
-  
-  public void registerDataGraphTypes(DataGraph dataGraph, List/*Type*/ types)
-  {
-    //if (types == null)
-    //  types = SDOUtil.getDataGraphTypes(dataGraph);
-    
-    Set/*EPackage*/ packages = new HashSet(); 
-    for (final Iterator iterator = types.iterator(); iterator.hasNext(); ) {
-      EClassifier type = (EClassifier)iterator.next();  
-      packages.add(type.getEPackage());
-    }
-
-    ResourceSet resourceSet = ((DataGraphImpl)dataGraph).getResourceSet();
-
-    for (Iterator iterator = packages.iterator(); iterator.hasNext(); ) {
-      EPackage typePackage = (EPackage)iterator.next();
-      Resource resource = typePackage.eResource();
-      if (resource == null) {
-        resource = resourceSet.createResource(URI.createURI(".ecore"));
-        resource.setURI(URI.createURI(typePackage.getNsURI()));
-        resource.getContents().add(typePackage);
-      }
-      else if (resource.getResourceSet() != resourceSet)
-        resourceSet.getResources().add(resource);
-    }
-  }
-  
-  public HelperContext createHelperContext(boolean extensibleNamespaces)
-  {
-    return new HelperContextImpl(extensibleNamespaces);
-  }
-  
-  public CopyHelper createCrossScopeCopyHelper(TypeHelper targetScope) 
-  {
-    return new CrossScopeCopyHelperImpl(targetScope); 
-  }
-  
-  public XMLStreamHelper createXMLStreamHelper(TypeHelper scope)
-  {
-    return new XMLStreamHelperImpl(scope);
-  }
-  
-  public List getTypes(TypeHelper scope, String uri) {
-
-      EPackage ePackage = ((TypeHelperImpl) scope).getExtendedMetaData().getPackage(uri);
-      if (ePackage != null) {
-        return new ArrayList(ePackage.getEClassifiers());
-      }
-      return null;
-  }
-  
-  public List getOpenContentProperties(DataObject dataObject)
-  {
-    List result = new UniqueEList();
-    ((ClassImpl)dataObject.getType()).addOpenProperties((EObject)dataObject, result);
-    return result;
-  }
-
-  public boolean isDocumentRoot(Type type)
-  {
-    return "".equals(SDOExtendedMetaData.INSTANCE.getName((EClassifier)type));
-  }
-  
-  public Type createType(TypeHelper scope, String uri, String name, boolean isDataType)
-  {
-    ExtendedMetaData extendedMetaData = ((TypeHelperImpl)scope).getExtendedMetaData();
-    if ("".equals(uri)) uri = null; //FB
-    
-    EPackage ePackage = extendedMetaData.getPackage(uri);
-    if (ePackage == null)
-    {
-      ePackage = EcoreFactory.eINSTANCE.createEPackage();
-      ePackage.setEFactoryInstance(new DynamicDataObjectImpl.FactoryImpl());
-      ePackage.setNsURI(uri);
-      String packagePrefix = uri != null ? URI.createURI(uri).trimFileExtension().lastSegment() : ""; //FB
-      ePackage.setName(packagePrefix);
-      ePackage.setNsPrefix(packagePrefix);
-      extendedMetaData.putPackage(uri, ePackage);
-    }
-
-    EClassifier eClassifier = ePackage.getEClassifier(name);
-    if (eClassifier != null) // already defined?
-    {
-      //throw new IllegalArgumentException();
-      return null;
-    }
-    
-    if (name != null)
-    { 
-      eClassifier = isDataType ? (EClassifier)SDOFactory.eINSTANCE.createDataType() : (EClassifier)SDOFactory.eINSTANCE.createClass();
-      eClassifier.setName(name);
-    }
-    else
-    {
-      eClassifier = DataObjectUtil.createDocumentRoot();
-    }
-    
-    ePackage.getEClassifiers().add(eClassifier);
-
-    return (Type)eClassifier;
-  }
-  
-  public void addBaseType(Type type, Type baseType)
-  {
-    ((EClass)type).getESuperTypes().add(baseType);
-  }
-  
-  public void addAliasName(Type type, String aliasName)
-  {
-    throw new UnsupportedOperationException(); // TODO: implement this method properly
-    //type.getAliasNames().add(aliasName);
-  }
-  
-  public void setOpen(Type type, boolean isOpen)
-  {
-    if (isOpen == type.isOpen()) return;
-
-    if (isOpen)
-    {
-      EAttribute eAttribute = (EAttribute)SDOFactory.eINSTANCE.createAttribute();
-      ((EClass)type).getEStructuralFeatures().add(eAttribute);
-
-      eAttribute.setName("any");
-      eAttribute.setUnique(false);
-      eAttribute.setUpperBound(ETypedElement.UNBOUNDED_MULTIPLICITY);
-      eAttribute.setEType(EcorePackage.eINSTANCE.getEFeatureMapEntry());
-      ExtendedMetaData.INSTANCE.setFeatureKind(eAttribute, ExtendedMetaData.ELEMENT_WILDCARD_FEATURE);
-      ExtendedMetaData.INSTANCE.setProcessingKind(eAttribute, ExtendedMetaData.LAX_PROCESSING);
-      ExtendedMetaData.INSTANCE.setWildcards(eAttribute, Collections.singletonList("##any"));
-      
-      //FB TBD Add an "anyAttribute" EAttribute as well.
-      
-      if (ExtendedMetaData.INSTANCE.getMixedFeature((EClass)type) != null) {
-        eAttribute.setDerived(true);
-        eAttribute.setTransient(true);
-        eAttribute.setVolatile(true);
-      }
-    }
-    else
-    {
-      EClass eClass = (EClass)type;
-      EAttribute any = (EAttribute)eClass.getEStructuralFeature("any");
-      eClass.getEStructuralFeatures().remove(any);  
-    }
-  }
-  
-  public void setSequenced(Type type, boolean isSequenced)
-  {
-    // currently, we require setSequenced to be called first, before anything else is added to the type.
-    if (type.isDataType() || !type.getProperties().isEmpty())
-    {
-      if (type.getName() != "DocumentRoot") // document root is a special case
-        throw new IllegalArgumentException();
-    }
-    
-    if (isSequenced) {
-      EClass eClass = (EClass)type;
-      ExtendedMetaData.INSTANCE.setContentKind(eClass, ExtendedMetaData.MIXED_CONTENT);
-      EAttribute mixedFeature = (EAttribute)SDOFactory.eINSTANCE.createAttribute();
-      mixedFeature.setName("mixed");
-      mixedFeature.setUnique(false);
-      mixedFeature.setEType(EcorePackage.eINSTANCE.getEFeatureMapEntry());
-      mixedFeature.setLowerBound(0);
-      mixedFeature.setUpperBound(-1);
-      //eClass.getEStructuralFeatures().add(mixedFeature);
-      ((ClassImpl)eClass).setSequenceFeature(mixedFeature);
-      ExtendedMetaData.INSTANCE.setFeatureKind(mixedFeature, ExtendedMetaData.ELEMENT_WILDCARD_FEATURE);
-      ExtendedMetaData.INSTANCE.setName(mixedFeature, ":mixed"); 
-    }
-    else
-    {
-      // nothing to do, because of current restriction that setSequence must be called first.
-    }
-  }
-  
-  public void setAbstract(Type type, boolean isAbstract)
-  {
-    ((EClass)type).setAbstract(isAbstract);
-  }
-  
-  public void setJavaClassName(Type type, String javaClassName)
-  {
-    ((EClassifier)type).setInstanceClassName(javaClassName);
-  }
-  
-  public Property createProperty(Type containingType, String name, Type propertyType)
-  {
-    EStructuralFeature eStructuralFeature = 
-      propertyType.isDataType() ? 
-        (EStructuralFeature)SDOFactory.eINSTANCE.createAttribute() :
-        (EStructuralFeature)SDOFactory.eINSTANCE.createReference();
-
-    eStructuralFeature.setName(name);
-    eStructuralFeature.setEType((EClassifier)propertyType);
-    ((EClass)containingType).getEStructuralFeatures().add(eStructuralFeature);
-
-    if ("".equals(ExtendedMetaData.INSTANCE.getName((EClass)containingType))) // DocumentRoot containingType?
-    {
-      ExtendedMetaData.INSTANCE.setNamespace(eStructuralFeature, containingType.getURI());
-      //FB???eStructuralFeature.setUnique(false);
-      //FB???eStructuralFeature.setUpperBound(ETypedElement.UNSPECIFIED_MULTIPLICITY);
-    }
-    
-    if (ExtendedMetaData.INSTANCE.getMixedFeature((EClass)containingType) != null) {
-      eStructuralFeature.setDerived(true);
-      eStructuralFeature.setTransient(true);
-      eStructuralFeature.setVolatile(true);
-      ExtendedMetaData.INSTANCE.setFeatureKind(eStructuralFeature, ExtendedMetaData.ELEMENT_FEATURE);
-    }
-    else
-    {
-      //FB TBD ... figure out how to decide whether to use ELEMENT_FEATURE or ATTRIBUTE_FEATURE
-      //ExtendedMetaData.INSTANCE.setFeatureKind(eStructuralFeature, ExtendedMetaData.ELEMENT_FEATURE);
-    }
-    
-    return (Property)eStructuralFeature;
-  }
-  
-  public Property createOpenContentProperty(TypeHelper scope, String uri, String name, Type type)
-  {
-    ExtendedMetaData extendedMetaData = ((TypeHelperImpl)scope).getExtendedMetaData();
-
-    // get/create document root
-    EPackage ePackage = extendedMetaData.getPackage(uri);
-    Type documentRoot = ePackage != null ? (Type)extendedMetaData.getType(ePackage, "") : null;
-    if (documentRoot == null) 
-    {
-      documentRoot = createType(scope, uri, null, false);
-    }
-
-    // Determine if property already exists
-    Property newProperty = documentRoot.getProperty(name);
-    if (newProperty == null)
-    {
-      // Create the new property 'under' the document root.....
-      newProperty = createProperty(documentRoot, name, type);
-    }
-    else
-    {
-      // if property already exists, validate the expected type
-      if (!newProperty.getType().equals(type))
-        throw new IllegalArgumentException();
-    }
-    return newProperty;
-  }
-  
-  public void addAliasName(Property property, String aliasName)
-  {
-    throw new UnsupportedOperationException(); // TODO: implement this method properly
-    //property.getAliasNames().add(aliasName);
-  }
- 
-  public void setMany(Property property, boolean isMany)
-  {
-    ((EStructuralFeature)property).setUpperBound(isMany ? EStructuralFeature.UNBOUNDED_MULTIPLICITY : 1);
-  }
-  
-  public void setContainment(Property property, boolean isContainment)
-  {
-    ((EReference)property).setContainment(isContainment);
-  }
-
-  public void setDefault(Property property, String defaultValue)
-  {
-    ((EStructuralFeature)property).setDefaultValueLiteral(defaultValue);
-  }
-  
-  public void setReadOnly(Property property, boolean isReadOnly)
-  {
-    ((EStructuralFeature)property).setChangeable(!isReadOnly);
-  }
-  
-  public void setOpposite(Property property, Property opposite)
-  {
-    ((EReference)property).setEOpposite((EReference)opposite);
-  }
-  
-  public void addTypeInstanceProperty(Type definedType, Property instanceProperty, Object value)
-  {
-    addInstanceProperty((EModelElement)definedType, instanceProperty, value);
-  }
-
-  public void addPropertyInstanceProperty(Property definedProperty, Property instanceProperty, Object value)
-  {
-    addInstanceProperty((EModelElement)definedProperty, instanceProperty, value);
-  }
-  
-  protected void addInstanceProperty(EModelElement metaObject, Property property, Object value)
-  {
-    String uri = property.getContainingType().getURI();
-    EAnnotation eAnnotation = metaObject.getEAnnotation(uri);
-    if (eAnnotation == null)
-    {
-      eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
-      eAnnotation.setSource(uri);
-      metaObject.getEAnnotations().add(eAnnotation);
-    }
-    //TODO if (property.isMany()) ... // convert list of values
-    String stringValue = convertToString(property.getType(), value);
-    eAnnotation.getDetails().put(property.getName(), stringValue);
-  }
-  
+public class SDOHelperImpl extends SDOHelperBase implements SDOHelper, SDOHelper.MetaDataBuilder {
+    public DataObject createDataTypeWrapper(Type dataType, Object value) {
+        SimpleAnyTypeDataObject simpleAnyType = SDOFactory.eINSTANCE.createSimpleAnyTypeDataObject();
+        simpleAnyType.setInstanceType((EDataType)dataType);
+        simpleAnyType.setValue(value);
+        return simpleAnyType;
+    }
+
+    public Object createFromString(Type dataType, String literal) {
+        return EcoreUtil.createFromString((EDataType)dataType, literal);
+    }
+
+    public String convertToString(Type dataType, Object value) {
+        return EcoreUtil.convertToString((EDataType)dataType, value);
+    }
+
+    public Type getXSDSDOType(String xsdType) {
+        Type type = null;
+        String name = (String)xsdToSdoMappings.get(xsdType);
+        if (name != null)
+            type = (Type)((ModelFactoryImpl)ModelFactory.INSTANCE).getEClassifier(name);
+        return type;
+    }
+
+    public Sequence getSubstitutionValues(DataObject dataObject, Property head) {
+        final EStructuralFeature group = ExtendedMetaData.INSTANCE.getGroup((EStructuralFeature)head);
+        return null == group ? null : (Sequence)((FeatureMap.Internal)((EObject)dataObject).eGet(group)).getWrapper();
+    }
+
+    public Type getJavaSDOType(Class javaClass) {
+        String name = (String)javaToSdoMappings.get(javaClass);
+        if (name != null) {
+            return (Type)((ModelFactoryImpl)ModelFactory.INSTANCE).getEClassifier(name);
+        }
+        return null;
+    }
+
+    public boolean isRequired(Property property) {
+        return ((EStructuralFeature)property).isRequired();
+    }
+
+    public int getUpperBound(Property property) {
+        return ((EStructuralFeature)property).getUpperBound();
+    }
+
+    public boolean isMany(Property property, DataObject context) {
+        return FeatureMapUtil.isMany((EObject)context, (EStructuralFeature)property);
+    }
+
+    public DataGraph createDataGraph() {
+        return SDOFactory.eINSTANCE.createDataGraph();
+    }
+
+    public void setRootObject(DataGraph dataGraph, DataObject rootObject) {
+        ((DataGraphImpl)dataGraph).setERootObject((EObject)rootObject);
+    }
+
+    public static DataGraph loadDataGraph(InputStream inputStream, Map options) throws IOException {
+        ResourceSet resourceSet = DataObjectUtil.createResourceSet();
+        Resource resource = resourceSet.createResource(URI.createURI("all.datagraph"));
+        resource.load(inputStream, options);
+        return (DataGraph)resource.getContents().get(0);
+    }
+
+    static final Object LOADING_SCOPE = XMLResource.OPTION_EXTENDED_META_DATA;
+
+    protected void registerLoadingScope(Map options, TypeHelper scope) {
+        Object extendedMetaData = ((TypeHelperImpl)scope).getExtendedMetaData();
+        options.put(LOADING_SCOPE, extendedMetaData);
+    }
+
+    public DataGraph loadDataGraph(InputStream inputStream, Map options, TypeHelper scope) throws IOException {
+        DataGraph result = null;
+        if (scope == null || scope == TypeHelper.INSTANCE) {
+            result = loadDataGraph(inputStream, options);
+        } else if (options == null) {
+            options = new HashMap();
+            registerLoadingScope(options, scope);
+            result = loadDataGraph(inputStream, options);
+        } else if (options.containsKey(LOADING_SCOPE)) {
+            Object restore = options.get(LOADING_SCOPE);
+            registerLoadingScope(options, scope);
+            try {
+                result = loadDataGraph(inputStream, options);
+            } finally {
+                options.put(LOADING_SCOPE, restore);
+            }
+        } else {
+            registerLoadingScope(options, scope);
+            try {
+                result = loadDataGraph(inputStream, options);
+            } finally {
+                options.remove(LOADING_SCOPE);
+            }
+        }
+        return result;
+    }
+
+    public void saveDataGraph(DataGraph dataGraph, OutputStream outputStream, Map options) throws IOException {
+        ((DataGraphImpl)dataGraph).getDataGraphResource().save(outputStream, options);
+    }
+
+    public void registerDataGraphTypes(DataGraph dataGraph, List/* Type */types) {
+        // if (types == null)
+        // types = SDOUtil.getDataGraphTypes(dataGraph);
+
+        Set/* EPackage */packages = new HashSet();
+        for (final Iterator iterator = types.iterator(); iterator.hasNext();) {
+            EClassifier type = (EClassifier)iterator.next();
+            packages.add(type.getEPackage());
+        }
+
+        ResourceSet resourceSet = ((DataGraphImpl)dataGraph).getResourceSet();
+
+        for (Iterator iterator = packages.iterator(); iterator.hasNext();) {
+            EPackage typePackage = (EPackage)iterator.next();
+            Resource resource = typePackage.eResource();
+            if (resource == null) {
+                resource = resourceSet.createResource(URI.createURI(".ecore"));
+                resource.setURI(URI.createURI(typePackage.getNsURI()));
+                resource.getContents().add(typePackage);
+            } else if (resource.getResourceSet() != resourceSet)
+                resourceSet.getResources().add(resource);
+        }
+    }
+
+    public HelperContext createHelperContext(boolean extensibleNamespaces) {
+        return new HelperContextImpl(extensibleNamespaces);
+    }
+
+    public HelperContext createHelperContext(boolean extensibleNamespaces, Map options) {
+        return new HelperContextImpl(extensibleNamespaces, options);
+    }
+
+    public CopyHelper createCrossScopeCopyHelper(TypeHelper targetScope) {
+        return new CrossScopeCopyHelperImpl(targetScope);
+    }
+
+
+    public XMLStreamHelper createXMLStreamHelper(TypeHelper scope) {
+        return (new HelperContextImpl(scope)).getXMLStreamHelper();
+    }
+
+
+    public XMLStreamHelper createXMLStreamHelper(TypeHelper scope, Map options) {
+        HelperContext helperContextImpl = new HelperContextImpl(scope, options);
+        return ((HelperContextImpl)helperContextImpl).getXMLStreamHelper();
+    }
+
+    public List getTypes(TypeHelper scope, String uri) {
+
+        EPackage ePackage = ((TypeHelperImpl)scope).getExtendedMetaData().getPackage(uri);
+        if (ePackage != null) {
+            return new ArrayList(ePackage.getEClassifiers());
+        }
+        return null;
+    }
+
+    public List getOpenContentProperties(DataObject dataObject) {
+        List result = new UniqueEList();
+        ((ClassImpl)dataObject.getType()).addOpenProperties((EObject)dataObject, result);
+        return result;
+    }
+
+    public boolean isDocumentRoot(Type type) {
+        return "".equals(SDOExtendedMetaData.INSTANCE.getName((EClassifier)type));
+    }
+
+    public Type createType(TypeHelper scope, String uri, String name, boolean isDataType) {
+        ExtendedMetaData extendedMetaData = ((TypeHelperImpl)scope).getExtendedMetaData();
+        if ("".equals(uri))
+            uri = null; // FB
+
+        EPackage ePackage = extendedMetaData.getPackage(uri);
+        if (ePackage == null) {
+            ePackage = EcoreFactory.eINSTANCE.createEPackage();
+            ePackage.setEFactoryInstance(new DynamicDataObjectImpl.FactoryImpl());
+            ePackage.setNsURI(uri);
+            String packagePrefix = uri != null ? URI.createURI(uri).trimFileExtension().lastSegment() : ""; // FB
+            ePackage.setName(packagePrefix);
+            ePackage.setNsPrefix(packagePrefix);
+            extendedMetaData.putPackage(uri, ePackage);
+        }
+
+        EClassifier eClassifier = ePackage.getEClassifier(name);
+        if (eClassifier != null) // already defined?
+        {
+            // throw new IllegalArgumentException();
+            return null;
+        }
+
+        if (name != null) {
+            eClassifier =
+                isDataType ? (EClassifier)SDOFactory.eINSTANCE.createDataType() : (EClassifier)SDOFactory.eINSTANCE
+                    .createClass();
+            eClassifier.setName(name);
+        } else {
+            eClassifier = DataObjectUtil.createDocumentRoot();
+        }
+
+        ePackage.getEClassifiers().add(eClassifier);
+
+        return (Type)eClassifier;
+    }
+
+    public void addBaseType(Type type, Type baseType) {
+        ((EClass)type).getESuperTypes().add(baseType);
+    }
+
+    public void addAliasName(Type type, String aliasName) {
+        throw new UnsupportedOperationException(); // TODO: implement this
+                                                    // method properly
+        // type.getAliasNames().add(aliasName);
+    }
+
+    public void setOpen(Type type, boolean isOpen) {
+        if (isOpen == type.isOpen())
+            return;
+
+        if (isOpen) {
+            EAttribute eAttribute = (EAttribute)SDOFactory.eINSTANCE.createAttribute();
+            ((EClass)type).getEStructuralFeatures().add(eAttribute);
+
+            eAttribute.setName("any");
+            eAttribute.setUnique(false);
+            eAttribute.setUpperBound(ETypedElement.UNBOUNDED_MULTIPLICITY);
+            eAttribute.setEType(EcorePackage.eINSTANCE.getEFeatureMapEntry());
+            ExtendedMetaData.INSTANCE.setFeatureKind(eAttribute, ExtendedMetaData.ELEMENT_WILDCARD_FEATURE);
+            ExtendedMetaData.INSTANCE.setProcessingKind(eAttribute, ExtendedMetaData.LAX_PROCESSING);
+            ExtendedMetaData.INSTANCE.setWildcards(eAttribute, Collections.singletonList("##any"));
+
+            // FB TBD Add an "anyAttribute" EAttribute as well.
+
+            if (ExtendedMetaData.INSTANCE.getMixedFeature((EClass)type) != null) {
+                eAttribute.setDerived(true);
+                eAttribute.setTransient(true);
+                eAttribute.setVolatile(true);
+            }
+        } else {
+            EClass eClass = (EClass)type;
+            EAttribute any = (EAttribute)eClass.getEStructuralFeature("any");
+            eClass.getEStructuralFeatures().remove(any);
+        }
+    }
+
+    public void setSequenced(Type type, boolean isSequenced) {
+        // currently, we require setSequenced to be called first, before
+        // anything else is added to the type.
+        if (type.isDataType() || !type.getProperties().isEmpty()) {
+            if (type.getName() != "DocumentRoot") // document root is a
+                                                    // special case
+                throw new IllegalArgumentException();
+        }
+
+        if (isSequenced) {
+            EClass eClass = (EClass)type;
+            ExtendedMetaData.INSTANCE.setContentKind(eClass, ExtendedMetaData.MIXED_CONTENT);
+            EAttribute mixedFeature = (EAttribute)SDOFactory.eINSTANCE.createAttribute();
+            mixedFeature.setName("mixed");
+            mixedFeature.setUnique(false);
+            mixedFeature.setEType(EcorePackage.eINSTANCE.getEFeatureMapEntry());
+            mixedFeature.setLowerBound(0);
+            mixedFeature.setUpperBound(-1);
+            // eClass.getEStructuralFeatures().add(mixedFeature);
+            ((ClassImpl)eClass).setSequenceFeature(mixedFeature);
+            ExtendedMetaData.INSTANCE.setFeatureKind(mixedFeature, ExtendedMetaData.ELEMENT_WILDCARD_FEATURE);
+            ExtendedMetaData.INSTANCE.setName(mixedFeature, ":mixed");
+        } else {
+            // nothing to do, because of current restriction that setSequence
+            // must be called first.
+        }
+    }
+
+    public void setAbstract(Type type, boolean isAbstract) {
+        ((EClass)type).setAbstract(isAbstract);
+    }
+
+    public void setJavaClassName(Type type, String javaClassName) {
+        ((EClassifier)type).setInstanceClassName(javaClassName);
+    }
+
+    public Property createProperty(Type containingType, String name, Type propertyType) {
+        EStructuralFeature eStructuralFeature =
+            propertyType.isDataType() ? (EStructuralFeature)SDOFactory.eINSTANCE.createAttribute()
+                : (EStructuralFeature)SDOFactory.eINSTANCE.createReference();
+
+        eStructuralFeature.setName(name);
+        eStructuralFeature.setEType((EClassifier)propertyType);
+        ((EClass)containingType).getEStructuralFeatures().add(eStructuralFeature);
+
+        if ("".equals(ExtendedMetaData.INSTANCE.getName((EClass)containingType))) // DocumentRoot
+                                                                                    // containingType?
+        {
+            ExtendedMetaData.INSTANCE.setNamespace(eStructuralFeature, containingType.getURI());
+            // FB???eStructuralFeature.setUnique(false);
+            // FB???eStructuralFeature.setUpperBound(ETypedElement.UNSPECIFIED_MULTIPLICITY);
+        }
+
+        if (ExtendedMetaData.INSTANCE.getMixedFeature((EClass)containingType) != null) {
+            eStructuralFeature.setDerived(true);
+            eStructuralFeature.setTransient(true);
+            eStructuralFeature.setVolatile(true);
+            ExtendedMetaData.INSTANCE.setFeatureKind(eStructuralFeature, ExtendedMetaData.ELEMENT_FEATURE);
+        } else {
+            // FB TBD ... figure out how to decide whether to use
+            // ELEMENT_FEATURE or ATTRIBUTE_FEATURE
+            // ExtendedMetaData.INSTANCE.setFeatureKind(eStructuralFeature,
+            // ExtendedMetaData.ELEMENT_FEATURE);
+        }
+
+        return (Property)eStructuralFeature;
+    }
+
+    public Property createOpenContentProperty(TypeHelper scope, String uri, String name, Type type) {
+        ExtendedMetaData extendedMetaData = ((TypeHelperImpl)scope).getExtendedMetaData();
+
+        // get/create document root
+        EPackage ePackage = extendedMetaData.getPackage(uri);
+        Type documentRoot = ePackage != null ? (Type)extendedMetaData.getType(ePackage, "") : null;
+        if (documentRoot == null) {
+            documentRoot = createType(scope, uri, null, false);
+        }
+
+        // Determine if property already exists
+        Property newProperty = documentRoot.getProperty(name);
+        if (newProperty == null) {
+            // Create the new property 'under' the document root.....
+            newProperty = createProperty(documentRoot, name, type);
+        } else {
+            // if property already exists, validate the expected type
+            if (!newProperty.getType().equals(type))
+                throw new IllegalArgumentException();
+        }
+        return newProperty;
+    }
+
+    public void addAliasName(Property property, String aliasName) {
+        throw new UnsupportedOperationException(); // TODO: implement this
+                                                    // method properly
+        // property.getAliasNames().add(aliasName);
+    }
+
+    public void setMany(Property property, boolean isMany) {
+        ((EStructuralFeature)property).setUpperBound(isMany ? EStructuralFeature.UNBOUNDED_MULTIPLICITY : 1);
+    }
+
+    public void setContainment(Property property, boolean isContainment) {
+        ((EReference)property).setContainment(isContainment);
+    }
+
+    public void setDefault(Property property, String defaultValue) {
+        ((EStructuralFeature)property).setDefaultValueLiteral(defaultValue);
+    }
+
+    public void setReadOnly(Property property, boolean isReadOnly) {
+        ((EStructuralFeature)property).setChangeable(!isReadOnly);
+    }
+
+    public void setOpposite(Property property, Property opposite) {
+        ((EReference)property).setEOpposite((EReference)opposite);
+    }
+
+    public void addTypeInstanceProperty(Type definedType, Property instanceProperty, Object value) {
+        addInstanceProperty((EModelElement)definedType, instanceProperty, value);
+    }
+
+    public void addPropertyInstanceProperty(Property definedProperty, Property instanceProperty, Object value) {
+        addInstanceProperty((EModelElement)definedProperty, instanceProperty, value);
+    }
+
+    protected void addInstanceProperty(EModelElement metaObject, Property property, Object value) {
+        String uri = property.getContainingType().getURI();
+        EAnnotation eAnnotation = metaObject.getEAnnotation(uri);
+        if (eAnnotation == null) {
+            eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
+            eAnnotation.setSource(uri);
+            metaObject.getEAnnotations().add(eAnnotation);
+        }
+        // TODO if (property.isMany()) ... // convert list of values
+        String stringValue = convertToString(property.getType(), value);
+        eAnnotation.getDetails().put(property.getName(), stringValue);
+    }
+
 }

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=555287&r1=555286&r2=555287
==============================================================================
--- 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 Wed Jul 11 07:39:42 2007
@@ -19,7 +19,6 @@
  */
 package org.apache.tuscany.sdo.helper;
 
-
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -39,289 +38,255 @@
 import commonj.sdo.DataObject;
 import commonj.sdo.Property;
 import commonj.sdo.Type;
+import commonj.sdo.helper.HelperContext;
 import commonj.sdo.helper.TypeHelper;
 
-
 /**
- * Look up a Type given the uri and typeName or interfaceClass.
- * SDO Types are available through the
- *   getType("commonj.sdo", typeName) method.
- * Defines Types from DataObjects.
+ * Look up a Type given the uri and typeName or interfaceClass. SDO Types are
+ * available through the getType("commonj.sdo", typeName) method. Defines Types
+ * from DataObjects.
  */
-public class TypeHelperImpl implements TypeHelper
-{
-  protected ExtendedMetaData extendedMetaData;
-  
-  static protected Set builtInModels = null;
-  
-  static public Set getBuiltInModels()
-  {
-    if (builtInModels == null) {
-      builtInModels = new HashSet();
-      builtInModels.add(ModelFactory.INSTANCE);
-      builtInModels.add(JavaFactory.INSTANCE);
-      builtInModels.add(XMLFactory.INSTANCE);
-      builtInModels.add(InternalFactory.INSTANCE);
-    }
-    return TypeHelperImpl.builtInModels;
-  }  
-
-  public ExtendedMetaData getExtendedMetaData()
-  {
-    return extendedMetaData;
-  }
-  
-  public TypeHelperImpl(ExtendedMetaData extendedMetaData)
-  {
-    this.extendedMetaData = extendedMetaData;
-    
-    // Register the standard (predefined) SDO types
-    getBuiltInModels(); // Simply accessing EMF packages causes auto registration in global registry
-    
-    //MetadataFactoryImpl.init(); //FB do we want to preregister this?
-  }
-  
-  public Type getType(String uri, String typeName)
-  {
-    EPackage ePackage = extendedMetaData.getPackage(uri);
-
-    if (ePackage != null)
-    {
-      EClassifier eClassifier = ePackage.getEClassifier(typeName);
-      if (eClassifier == null)
-      {
-        eClassifier = extendedMetaData.getType(ePackage, typeName);
-      }
-      return (Type)eClassifier;
-    }
-    return null;
-  }
-  
-  public Type getType(Class interfaceClass)
-  {
-    Type type = SDOUtil.getJavaSDOType(interfaceClass);
-    if (type != null)
-    {
-      return type;
+public class TypeHelperImpl implements TypeHelper {
+    protected HelperContext helperContext;
+    private ExtendedMetaData extendedMetaData;
+
+    static protected Set builtInModels = null;
+
+    static public Set getBuiltInModels() {
+        if (builtInModels == null) {
+            builtInModels = new HashSet();
+            builtInModels.add(ModelFactory.INSTANCE);
+            builtInModels.add(JavaFactory.INSTANCE);
+            builtInModels.add(XMLFactory.INSTANCE);
+            builtInModels.add(InternalFactory.INSTANCE);
+        }
+        return TypeHelperImpl.builtInModels;
+    }
+
+    public ExtendedMetaData getExtendedMetaData() {
+        return extendedMetaData;
     }
+
+    // JIRA-helperContext
+    public TypeHelperImpl(HelperContext hc) {
+        this.helperContext = hc;
+        this.extendedMetaData = ((HelperContextImpl)hc).extendedMetaData;
         
-    //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;
-          }
-        }
-      }
+        // Register the standard (predefined) SDO types
+        getBuiltInModels(); // Simply accessing EMF packages causes auto
+                            // registration in global registry
+
+        // MetadataFactoryImpl.init(); //FB do we want to preregister this?
     }
-    
-    // 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();
-      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)
-          {
+
+
+    public Type getType(String uri, String typeName) {
+        EPackage ePackage = extendedMetaData.getPackage(uri);
+
+        if (ePackage != null) {
+            EClassifier eClassifier = ePackage.getEClassifier(typeName);
+            if (eClassifier == null) {
+                eClassifier = extendedMetaData.getType(ePackage, typeName);
+            }
             return (Type)eClassifier;
-          }
         }
-      }
+        return null;
     }
-    
-    return null;
-  }
-
-  public Type define(DataObject type)
-  {
-    if (!(type instanceof org.apache.tuscany.sdo.model.Type))
-      throw new IllegalArgumentException();
-    org.apache.tuscany.sdo.model.Type modeledType = (org.apache.tuscany.sdo.model.Type)type;
-    
-    boolean isDataType = modeledType.isDataType();
-    Type definedType = SDOUtil.createType(this, modeledType.getUri(), modeledType.getName(), isDataType);  
-    if (definedType == null)
-    {
-      // If type already defined, return existing Type.
-      return getType(modeledType.getUri(), modeledType.getName());
-    }
-    
-    SDOUtil.setJavaClassName(definedType, modeledType.getInstanceClassName()); 
-    
-    if (!isDataType)
-    {
-      SDOUtil.setSequenced(definedType, modeledType.isSequenced());
-      SDOUtil.setOpen(definedType, modeledType.isOpen());
-      SDOUtil.setAbstract(definedType, modeledType.isAbstract());
-      
-      for (Iterator iter = modeledType.getBaseType().iterator(); iter.hasNext(); )
-      {
-        Type baseType = getDefinedType((org.apache.tuscany.sdo.model.Type)iter.next());
-        SDOUtil.addBaseType(definedType, baseType);
-      }
-      
-      for (Iterator iter = modeledType.getAliasName().iterator(); iter.hasNext(); )
-      {
-        String aliasName = (String)iter.next();
-        SDOUtil.addAliasName(definedType, aliasName);
-      }
-      
-      for (Iterator iter = modeledType.getProperty().iterator(); iter.hasNext(); )
-      {
-        org.apache.tuscany.sdo.model.Property modeledProperty = (org.apache.tuscany.sdo.model.Property)iter.next();
+
+
+    public Type getType(Class interfaceClass) {
+        Type type = SDOUtil.getJavaSDOType(interfaceClass);
+        if (type != null) {
+            return type;
+        }
         
+        SDOExtendedMetaDataImpl sdoExtendedMetaData = (SDOExtendedMetaDataImpl)extendedMetaData;
+
+        // TODO more efficient implementation ... this is a really bad one!
+
+        // check the local scope package registry
+        for (Iterator iter = sdoExtendedMetaData.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();
+            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;
+                    }
+                }
+            }
+        }
+
+        return null;
+    }
+
+    public Type define(DataObject type) {
+        if (!(type instanceof org.apache.tuscany.sdo.model.Type))
+            throw new IllegalArgumentException();
+        org.apache.tuscany.sdo.model.Type modeledType = (org.apache.tuscany.sdo.model.Type)type;
+
+        boolean isDataType = modeledType.isDataType();
+        Type definedType = SDOUtil.createType(this, modeledType.getUri(), modeledType.getName(), isDataType);
+        if (definedType == null) {
+            // If type already defined, return existing Type.
+            return getType(modeledType.getUri(), modeledType.getName());
+        }
+
+        SDOUtil.setJavaClassName(definedType, modeledType.getInstanceClassName());
+
+        if (!isDataType) {
+            SDOUtil.setSequenced(definedType, modeledType.isSequenced());
+            SDOUtil.setOpen(definedType, modeledType.isOpen());
+            SDOUtil.setAbstract(definedType, modeledType.isAbstract());
+
+            for (Iterator iter = modeledType.getBaseType().iterator(); iter.hasNext();) {
+                Type baseType = getDefinedType((org.apache.tuscany.sdo.model.Type)iter.next());
+                SDOUtil.addBaseType(definedType, baseType);
+            }
+
+            for (Iterator iter = modeledType.getAliasName().iterator(); iter.hasNext();) {
+                String aliasName = (String)iter.next();
+                SDOUtil.addAliasName(definedType, aliasName);
+            }
+
+            for (Iterator iter = modeledType.getProperty().iterator(); iter.hasNext();) {
+                org.apache.tuscany.sdo.model.Property modeledProperty =
+                    (org.apache.tuscany.sdo.model.Property)iter.next();
+
+                Type propertyType = getDefinedType(modeledProperty.getType_());
+                Property definedProperty = SDOUtil.createProperty(definedType, modeledProperty.getName(), propertyType);
+
+                initializeProperty(definedProperty, modeledProperty);
+            }
+
+            // define a global property to accompany the type definition
+            if (!SDOUtil.isDocumentRoot(definedType)) {
+                String propertyName = definedType.getName();
+                if (!Character.isLowerCase(propertyName.charAt(0))) {
+                    propertyName = propertyName.substring(0, 1).toLowerCase() + propertyName.substring(1);
+                }
+                Property globalProperty =
+                    SDOUtil.createOpenContentProperty(this, definedType.getURI(), propertyName, definedType);
+                SDOUtil.setContainment(globalProperty, true);
+            }
+        } // if (!isDataType)
+
+        addTypeInstanceProperties(definedType, (DataObject)modeledType);
+
+        return definedType;
+    }
+
+    protected void addTypeInstanceProperties(Type definedType, DataObject modeledType) {
+        List instanceProperties = SDOUtil.getOpenContentProperties(modeledType);
+        for (Iterator iter = instanceProperties.iterator(); iter.hasNext();) {
+            Property property = (Property)iter.next();
+            SDOUtil.addTypeInstanceProperty(definedType, property, modeledType.get(property));
+        }
+    }
+
+    protected void addPropertyInstanceProperties(Property definedProperty, DataObject modeledProperty) {
+        List instanceProperties = SDOUtil.getOpenContentProperties(modeledProperty);
+        for (Iterator iter = instanceProperties.iterator(); iter.hasNext();) {
+            Property property = (Property)iter.next();
+            SDOUtil.addPropertyInstanceProperty(definedProperty, property, modeledProperty.get(property));
+        }
+    }
+
+    public List /* Type */define(List /* DataObject */types) {
+        int count = types.size();
+        List definedTypes = new ArrayList(count);
+        for (int i = 0; i < count; i++) {
+            definedTypes.add(define((DataObject)types.get(i)));
+        }
+        return definedTypes;
+    }
+
+    protected Type getDefinedType(org.apache.tuscany.sdo.model.Type modeledType) {
+        if (modeledType instanceof Type) {
+            return (Type)modeledType;
+        } else {
+            EClassifier eClassifier = extendedMetaData.getType(modeledType.getUri(), modeledType.getName());
+            if (eClassifier != null) {
+                return (Type)eClassifier;
+            } else {
+                return define((DataObject)modeledType);
+            }
+        }
+    }
+
+    protected Property getDefinedProperty(org.apache.tuscany.sdo.model.Property modeledProperty) {
+        if (modeledProperty instanceof Property) {
+            return (Property)modeledProperty;
+        } else {
+            DataObject modeledContainingType = ((DataObject)modeledProperty).getContainer();
+
+            Type definedContainingType = getDefinedType((org.apache.tuscany.sdo.model.Type)modeledContainingType);
+            String propertyName = modeledProperty.getName();
+
+            return definedContainingType.getProperty(propertyName);
+        }
+    }
+
+    protected void initializeProperty(Property newProperty, org.apache.tuscany.sdo.model.Property modeledProperty) {
+        SDOUtil.setMany(newProperty, modeledProperty.isMany());
+        SDOUtil.setDefault(newProperty, modeledProperty.getDefault_());
+        SDOUtil.setReadOnly(newProperty, modeledProperty.isReadOnly());
+        for (Iterator iter = modeledProperty.getAliasName().iterator(); iter.hasNext();) {
+            String aliasName = (String)iter.next();
+            SDOUtil.addAliasName(newProperty, aliasName);
+        }
+        if (!newProperty.getType().isDataType()) {
+            SDOUtil.setContainment(newProperty, modeledProperty.isContainment());
+            if (modeledProperty.getOpposite_() != null) {
+                SDOUtil.setOpposite(newProperty, getDefinedProperty(modeledProperty.getOpposite_()));
+            }
+        }
+        addPropertyInstanceProperties(newProperty, (DataObject)modeledProperty);
+    }
+
+    public static final String TUSCANY_NO_URI = "http://tuscany-no-uri";
+
+    public Property defineOpenContentProperty(String uri, DataObject property) {
+        // validate property and get type
+        if (!(property instanceof org.apache.tuscany.sdo.model.impl.PropertyImpl))
+            throw new IllegalArgumentException();
+        org.apache.tuscany.sdo.model.Property modeledProperty = (org.apache.tuscany.sdo.model.Property)property;
         Type propertyType = getDefinedType(modeledProperty.getType_());
-        Property definedProperty = SDOUtil.createProperty(definedType, modeledProperty.getName(), propertyType);
-        
-        initializeProperty(definedProperty, modeledProperty);
-      }
 
-      // define a global property to accompany the type definition
-      if (!SDOUtil.isDocumentRoot(definedType)) 
-      { 
-        String propertyName = definedType.getName();
-        if (!Character.isLowerCase(propertyName.charAt(0))) 
-        {
-          propertyName = propertyName.substring(0, 1).toLowerCase() + propertyName.substring(1);
-        }
-        Property globalProperty = SDOUtil.createOpenContentProperty(this, definedType.getURI(), propertyName, definedType);
-        SDOUtil.setContainment(globalProperty, true);
-      }
-    } // if (!isDataType)
-    
-    addTypeInstanceProperties(definedType, (DataObject)modeledType);
-
-    return definedType;
-  }
-  
-  protected void addTypeInstanceProperties(Type definedType, DataObject modeledType)
-  {
-    List instanceProperties = SDOUtil.getOpenContentProperties(modeledType);
-    for (Iterator iter = instanceProperties.iterator(); iter.hasNext(); )
-    {
-      Property property = (Property)iter.next();
-      SDOUtil.addTypeInstanceProperty(definedType, property, modeledType.get(property));
-    }
-  }
-  
-  protected void addPropertyInstanceProperties(Property definedProperty, DataObject modeledProperty)
-  {
-    List instanceProperties = SDOUtil.getOpenContentProperties(modeledProperty);
-    for (Iterator iter = instanceProperties.iterator(); iter.hasNext(); )
-    {
-      Property property = (Property)iter.next();
-      SDOUtil.addPropertyInstanceProperty(definedProperty, property, modeledProperty.get(property));
-    }
-  }
-
-  public List /* Type */define(List /* DataObject */types)
-  {
-    int count = types.size();
-    List definedTypes = new ArrayList(count);
-    for (int i = 0; i < count; i++)
-    {
-      definedTypes.add(define((DataObject)types.get(i)));
-    }
-    return definedTypes;
-  }
-  
-  protected Type getDefinedType(org.apache.tuscany.sdo.model.Type modeledType)
-  {
-    if (modeledType instanceof Type)
-    {
-      return (Type)modeledType;
-    }
-    else
-    {
-      EClassifier eClassifier = extendedMetaData.getType(modeledType.getUri(), modeledType.getName());
-      if (eClassifier != null)
-      {
-        return (Type)eClassifier;
-      }
-      else
-      {
-        return define((DataObject)modeledType);
-      }
-    }
-  }
-  
-  protected Property getDefinedProperty(org.apache.tuscany.sdo.model.Property modeledProperty)
-  {
-    if (modeledProperty instanceof Property)
-    {
-      return (Property)modeledProperty;
-    }
-    else
-    {
-      DataObject modeledContainingType = ((DataObject)modeledProperty).getContainer();
-      
-      Type definedContainingType = getDefinedType((org.apache.tuscany.sdo.model.Type)modeledContainingType);
-      String propertyName = modeledProperty.getName();
-    
-      return definedContainingType.getProperty(propertyName);
-    }
-  }
-  
-  protected void initializeProperty(Property newProperty, org.apache.tuscany.sdo.model.Property modeledProperty)
-  {
-    SDOUtil.setMany(newProperty, modeledProperty.isMany());
-    SDOUtil.setDefault(newProperty, modeledProperty.getDefault_());
-    SDOUtil.setReadOnly(newProperty, modeledProperty.isReadOnly());
-    for (Iterator iter = modeledProperty.getAliasName().iterator(); iter.hasNext();)
-    {
-      String aliasName = (String)iter.next();
-      SDOUtil.addAliasName(newProperty, aliasName);
-    }
-    if (!newProperty.getType().isDataType())
-    {
-      SDOUtil.setContainment(newProperty, modeledProperty.isContainment());
-      if (modeledProperty.getOpposite_() != null)
-      {
-        SDOUtil.setOpposite(newProperty, getDefinedProperty(modeledProperty.getOpposite_()));
-      }
-    }
-    addPropertyInstanceProperties(newProperty, (DataObject)modeledProperty);
-  }
-  
-  public static final String TUSCANY_NO_URI="http://tuscany-no-uri";
-  
-  public Property defineOpenContentProperty(String uri, DataObject property)
-  {
-    // validate property and get type
-    if (!(property instanceof org.apache.tuscany.sdo.model.impl.PropertyImpl))
-      throw new IllegalArgumentException();
-    org.apache.tuscany.sdo.model.Property modeledProperty = (org.apache.tuscany.sdo.model.Property)property;
-    Type propertyType = getDefinedType(modeledProperty.getType_());
-
-    if (uri == null) uri = TUSCANY_NO_URI;
-
-    Property newProperty = SDOUtil.createOpenContentProperty(this, uri, modeledProperty.getName(), propertyType);
-   
-    // Propagate the modeled property's attributes
-    initializeProperty(newProperty, modeledProperty);
-
-    return newProperty;
-  }
-
-  public Property getOpenContentProperty(String uri, String propertyName)
-  {
-    //return (Property)extendedMetaData.getElement(uri, propertyName);
-    EClass documentRoot = (EClass)extendedMetaData.getType(uri, "");
-    return documentRoot != null ? (Property)documentRoot.getEStructuralFeature(propertyName) : null;
-  }
+        if (uri == null)
+            uri = TUSCANY_NO_URI;
+
+        Property newProperty = SDOUtil.createOpenContentProperty(this, uri, modeledProperty.getName(), propertyType);
 
+        // Propagate the modeled property's attributes
+        initializeProperty(newProperty, modeledProperty);
+
+        return newProperty;
+    }
+
+
+    public Property getOpenContentProperty(String uri, String propertyName) {
+        EClass documentRoot = (EClass)extendedMetaData.getType(uri, "");
+        return documentRoot != null ? (Property)documentRoot.getEStructuralFeature(propertyName) : null;
+    }
+
+    public HelperContext getHelperContext() {
+        return helperContext;
+    }
 }

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLHelperImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLHelperImpl.java?view=diff&rev=555287&r1=555286&r2=555287
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLHelperImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLHelperImpl.java Wed Jul 11 07:39:42 2007
@@ -26,6 +26,7 @@
 import java.io.StringReader;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.util.Map;
 
 import javax.xml.transform.Result;
 import javax.xml.transform.Source;
@@ -40,128 +41,151 @@
 import org.xml.sax.InputSource;
 
 import commonj.sdo.DataObject;
-import commonj.sdo.helper.TypeHelper;
+import commonj.sdo.helper.HelperContext;
 import commonj.sdo.helper.XMLDocument;
 import commonj.sdo.helper.XMLHelper;
 
 /**
- * A helper to convert XML documents into DataObects and 
- * DataObjects into XML documnets.
+ * A helper to convert XML documents into DataObects and DataObjects into XML
+ * documnets.
  */
-public class XMLHelperImpl implements XMLHelper
-{
-  ExtendedMetaData extendedMetaData;
-  
-  public XMLHelperImpl(ExtendedMetaData extendedMetaData)
-  {
-    this.extendedMetaData = extendedMetaData;
-  }
-  
-  public XMLHelperImpl(TypeHelper typeHelper)
-  {
-    this.extendedMetaData = ((TypeHelperImpl)typeHelper).extendedMetaData;
-  }
-  
-  public XMLDocument load(String inputString)
-  {
-    try
-    {
-      return load(new StringReader(inputString), null, null);
-    }
-    catch (IOException e)
-    {
-      throw new RuntimeException(e); // should never happen
-    }
-  }
-
-  public XMLDocument load(InputStream inputStream) throws IOException
-  {
-    return load(inputStream, null, null);
-  }
-  
-  public XMLDocument load(InputStream inputStream, String locationURI, Object options) throws IOException
-  {
-    XMLDocumentImpl document = new XMLDocumentImpl(extendedMetaData, options);
-    document.load(inputStream, locationURI, options);
-    return document;
-  }
-
-  public XMLDocument load(Reader inputReader, String locationURI, Object options) throws IOException
-  {
-    XMLDocumentImpl document = new XMLDocumentImpl(extendedMetaData, options);
-    document.load(inputReader, locationURI, options);
-    return document;
-  }
-  
-  public XMLDocument load(Source source, String locationURI, Object options) throws IOException
-  {
-      if (source instanceof DOMSource) {
-          DOMSource domSource = (DOMSource)source;
-          XMLDocumentImpl document = new XMLDocumentImpl(extendedMetaData, options);
-          document.load(domSource.getNode(), options);
-          return document;
-      }
-      else if (source instanceof SAXSource) {
-          XMLDocumentImpl document = new XMLDocumentImpl(extendedMetaData, options);
-          InputSource inputSource = SAXSource.sourceToInputSource(source);
-          document.load(inputSource, locationURI, options);
-          return document;
-      }
-      else if (source instanceof StreamSource) {
-          return load(((StreamSource)source).getInputStream(), locationURI, options);
-      }
-      else {
-          throw new UnsupportedOperationException();
-      }
-  }
-  
-  public String save(DataObject dataObject, String rootElementURI, String rootElementName)
-  {
-    StringWriter stringWriter = new StringWriter();
-    try
-    {
-      save(createDocument(dataObject, rootElementURI, rootElementName), stringWriter, null);
-      return stringWriter.toString();
-    }
-    catch (IOException e)
-    {
-      throw new RuntimeException(e); // should never happen
-    }
-  }
-
-  public void save(DataObject dataObject, String rootElementURI, String rootElementName, OutputStream outputStream) throws IOException
-  {
-    save(createDocument(dataObject, rootElementURI, rootElementName), outputStream, null);
-  }
-  
-  public void save(XMLDocument xmlDocument, OutputStream outputStream, Object options) throws IOException
-  {
-    ((XMLDocumentImpl)xmlDocument).save(outputStream, options);
-  }
-
-  public void save(XMLDocument xmlDocument, Writer outputWriter, Object options) throws IOException
-  {
-    ((XMLDocumentImpl)xmlDocument).save(outputWriter, options);
-  }
-  
-  public void save(XMLDocument xmlDocument, Result outputResult, Object options) throws IOException
-  {
-      if (outputResult instanceof DOMResult) {
-          ((XMLDocumentImpl)xmlDocument).save(((DOMResult)outputResult).getNode(), options);
-      }
-      else if (outputResult instanceof SAXResult) {
-          throw new UnsupportedOperationException();
-      }
-      else if (outputResult instanceof StreamResult) {
-          save(xmlDocument, ((StreamResult)outputResult).getOutputStream(), options);
-      }
-      else {
-          throw new UnsupportedOperationException();
-      }
-  }
-
-  public XMLDocument createDocument(DataObject dataObject, String rootElementURI, String rootElementName)
-  {
-    return new XMLDocumentImpl(extendedMetaData, dataObject, rootElementURI, rootElementName);
-  }
+public class XMLHelperImpl implements XMLHelper {
+    protected HelperContext helperContext;
+    private ExtendedMetaData extendedMetaData;
+
+
+    public XMLHelperImpl(HelperContext hc) {
+        this.helperContext = hc;
+        this.extendedMetaData = ((HelperContextImpl)hc).extendedMetaData;
+    }
+
+    public XMLDocument load(String inputString) {
+        try {
+            return load(new StringReader(inputString), null, null);
+        } catch (IOException e) {
+            throw new RuntimeException(e); // should never happen
+        }
+    }
+
+    public XMLDocument load(String inputString, Object options) {
+        try {
+            return load(new StringReader(inputString), null, options);
+        } catch (IOException e) {
+            throw new RuntimeException(e); // should never happen
+        }
+    }
+
+    public XMLDocument load(InputStream inputStream) throws IOException {
+        return load(inputStream, null, null);
+    }
+
+    private Object checkSetOptions(Object options) throws IOException {
+        if (options != null && !(options instanceof Map)) {
+            throw new IOException("Invalid load options!");
+        }
+
+        if (helperContext != null) {
+            return ((HelperContextImpl)helperContext).getMergedOption((Map)options);
+        } else {// null is acceptable as it will be ignored
+            return options;
+        }
+    }
+
+    public XMLDocument load(InputStream inputStream, String locationURI, Object options) throws IOException {
+        options = checkSetOptions(options);
+        XMLDocumentImpl document = new XMLDocumentImpl(extendedMetaData, options);
+        document.load(inputStream, locationURI, options);
+        return document;
+    }
+
+    public XMLDocument load(Reader inputReader, String locationURI, Object options) throws IOException {
+        XMLDocumentImpl document = new XMLDocumentImpl(extendedMetaData, options);
+        options = checkSetOptions(options);
+        document.load(inputReader, locationURI, options);
+        return document;
+    }
+
+    public XMLDocument load(Source source, String locationURI, Object options) throws IOException {
+        options = checkSetOptions(options);
+        if (source instanceof DOMSource) {
+            DOMSource domSource = (DOMSource)source;
+            XMLDocumentImpl document = new XMLDocumentImpl(extendedMetaData, options);
+            document.load(domSource.getNode(), options);
+            return document;
+        } else if (source instanceof SAXSource) {
+            XMLDocumentImpl document = new XMLDocumentImpl(extendedMetaData, options);
+            InputSource inputSource = SAXSource.sourceToInputSource(source);
+            document.load(inputSource, locationURI, options);
+            return document;
+        } else if (source instanceof StreamSource) {
+            return load(((StreamSource)source).getInputStream(), locationURI, options);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    public String save(DataObject dataObject, String rootElementURI, String rootElementName) {
+        StringWriter stringWriter = new StringWriter();
+        try {
+            save(createDocument(dataObject, rootElementURI, rootElementName), stringWriter, null);
+            return stringWriter.toString();
+        } catch (IOException e) {
+            throw new RuntimeException(e); // should never happen
+        }
+    }
+
+    public String save(DataObject dataObject, String rootElementURI, String rootElementName, Object options) {
+        StringWriter stringWriter = new StringWriter();
+        try {
+            save(createDocument(dataObject, rootElementURI, rootElementName), stringWriter, options);
+            return stringWriter.toString();
+        } catch (IOException e) {
+            throw new RuntimeException(e); // should never happen
+        }
+    }
+
+    public void save(DataObject dataObject, String rootElementURI, String rootElementName, OutputStream outputStream)
+        throws IOException {
+        save(createDocument(dataObject, rootElementURI, rootElementName), outputStream, null);
+    }
+
+
+    public void save(DataObject dataObject,
+                     String rootElementURI,
+                     String rootElementName,
+                     OutputStream outputStream,
+                     Object options) throws IOException {
+        save(createDocument(dataObject, rootElementURI, rootElementName), outputStream, null);
+    }
+
+    public void save(XMLDocument xmlDocument, OutputStream outputStream, Object options) throws IOException {
+        options = checkSetOptions(options);
+        ((XMLDocumentImpl)xmlDocument).save(outputStream, options);
+    }
+
+    public void save(XMLDocument xmlDocument, Writer outputWriter, Object options) throws IOException {
+        options = checkSetOptions(options);
+        ((XMLDocumentImpl)xmlDocument).save(outputWriter, options);
+    }
+
+    public void save(XMLDocument xmlDocument, Result outputResult, Object options) throws IOException {
+        options = checkSetOptions(options);
+        if (outputResult instanceof DOMResult) {
+            ((XMLDocumentImpl)xmlDocument).save(((DOMResult)outputResult).getNode(), options);
+        } else if (outputResult instanceof SAXResult) {
+            throw new UnsupportedOperationException();
+        } else if (outputResult instanceof StreamResult) {
+            save(xmlDocument, ((StreamResult)outputResult).getOutputStream(), options);
+        } else {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    public XMLDocument createDocument(DataObject dataObject, String rootElementURI, String rootElementName) {
+        return new XMLDocumentImpl(extendedMetaData, dataObject, rootElementURI, rootElementName);
+    }
+
+    public HelperContext getHelperContext() {
+        return helperContext;
+    }
 }

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java?view=diff&rev=555287&r1=555286&r2=555287
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java Wed Jul 11 07:39:42 2007
@@ -19,7 +19,11 @@
  */
 package org.apache.tuscany.sdo.helper;
 
+import java.io.IOException;
+import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
+import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
@@ -28,108 +32,121 @@
 import org.apache.tuscany.sdo.util.resource.DataObjectXMLStreamReader;
 import org.apache.tuscany.sdo.util.resource.XMLDocumentStreamReader;
 import org.apache.tuscany.sdo.util.resource.XMLStreamSerializer;
+//import org.apache.tuscany.sdo.api.XMLStreamHelper;
 import org.eclipse.emf.ecore.resource.Resource;
 
 import commonj.sdo.DataObject;
 import commonj.sdo.Property;
-import commonj.sdo.helper.TypeHelper;
+import commonj.sdo.helper.HelperContext;
 import commonj.sdo.helper.XMLDocument;
 
 /**
  * @version $Rev$ $Date$
  */
-public class XMLStreamHelperImpl implements XMLStreamHelper
-{
-  TypeHelperImpl typeHelper;
-  
-  public XMLStreamHelperImpl(TypeHelper typeHelper)
-  {
-    this.typeHelper = (TypeHelperImpl)typeHelper;
-  }
-
-  public XMLDocument load(XMLStreamReader reader) throws XMLStreamException, IllegalStateException
-  {
-    if (reader.getEventType() != XMLStreamConstants.START_DOCUMENT)
-      throw new IllegalStateException();
-    
-    return loadDocument(reader, null);
-  }
-  
-  public void save(XMLDocument document, XMLStreamWriter writer) throws XMLStreamException
-  {
-      XMLStreamReader reader = createXMLStreamReader(document);
-      new XMLStreamSerializer().serialize(reader, writer);
-  }
-
-  public XMLStreamReader createXMLStreamReader(XMLDocument document) throws XMLStreamException
-  {
-      XMLStreamReader reader =  new DataObjectXMLStreamReader(document.getRootObject(), document.getRootElementURI(), document.getRootElementName(), typeHelper);
-      // Wrap the reader so that its position will be START_ELEMENT
-      return new XMLDocumentStreamReader(reader);
-      
-  }
-
-  public final DataObject loadObject(XMLStreamReader reader, Map options) throws XMLStreamException, IllegalStateException
-  {
-    if (reader.getEventType() != XMLStreamConstants.START_ELEMENT)
-      throw new IllegalStateException();
-    
-    // StAX2SAXAdapter won't produce START_DOCUMENT if the reader is posisitioned at START_ELEMENT and the EMF loader will fail
-    // Wrap the reader so it represents a document
-    reader = new XMLDocumentStreamReader(reader);
-    
-    return loadDocument(reader, options).getRootObject();
-  }
-
-  public DataObject loadObject(XMLStreamReader reader) throws XMLStreamException, IllegalStateException
-  {
-    return loadObject(reader, null);
-  }
-
-  public void saveObject(DataObject sdo, XMLStreamWriter writer) throws XMLStreamException
-  {
-      XMLStreamReader reader = createXMLStreamReader(sdo);
-      new XMLStreamSerializer().serialize(new XMLDocumentStreamReader(reader), writer);
-  }
-
-  public XMLStreamReader createXMLStreamReader(DataObject dataObject)
-  {
-    String rootElementURI;
-    String rootElementName;
-    
-    Property property = dataObject.getContainmentProperty();
-    if (property != null)
-    {
-      rootElementName = property.getName();
-      rootElementURI = property.getType().getURI();
-    }
-    else
-    {
-      rootElementName = dataObject.getType().getName();
-      rootElementURI = dataObject.getType().getURI();
-    }
-    
-    return new DataObjectXMLStreamReader(dataObject, rootElementURI, rootElementName, typeHelper);
-  }
-  
-  protected XMLDocument loadDocument(XMLStreamReader reader, Map options) throws XMLStreamException
-  {
-    try {
-      XMLDocumentImpl document = new XMLDocumentImpl(typeHelper.extendedMetaData, null);
-      document.load(reader, options);
-      return document;
-    }
-    catch (Exception e) {
-      if (e instanceof Resource.IOWrappedException)
-      {
-        Resource.IOWrappedException ioe = (Resource.IOWrappedException)e;
-        if (ioe.getWrappedException() instanceof XMLStreamException)
-        {
-          throw (XMLStreamException)ioe.getWrappedException();
+public class XMLStreamHelperImpl implements XMLStreamHelper {
+    protected HelperContext helperContext;
+
+    public XMLStreamHelperImpl(HelperContext hc) {
+        this.helperContext = hc;
+    }
+
+    private Map checkSetOptions(Map options) {
+        if (helperContext != null) {
+            return ((HelperContextImpl)helperContext).getMergedOption(options);
+        } else {// null is acceptable as it will be ignored
+            return options;
+        }
+    }
+
+    public XMLDocument load(XMLStreamReader reader) throws XMLStreamException, IllegalStateException {
+        if (reader.getEventType() != XMLStreamConstants.START_DOCUMENT)
+            throw new IllegalStateException();
+
+        return loadDocument(reader, null);
+    }
+
+    public void save(XMLDocument document, XMLStreamWriter writer) throws XMLStreamException {
+        XMLStreamReader reader = createXMLStreamReader(document);
+        new XMLStreamSerializer().serialize(reader, writer);
+    }
+
+    public void save(XMLDocument document, XMLStreamWriter writer, Map options) throws XMLStreamException {
+        XMLStreamReader reader = createXMLStreamReader(document);
+        options = checkSetOptions(options);
+        new XMLStreamSerializer().serialize(reader, writer, options);
+    }
+
+    public XMLStreamReader createXMLStreamReader(XMLDocument document) throws XMLStreamException {
+        XMLStreamReader reader =
+            new DataObjectXMLStreamReader(document.getRootObject(), document.getRootElementURI(), document
+                .getRootElementName(), helperContext.getTypeHelper());
+        // Wrap the reader so that its position will be START_ELEMENT
+        return new XMLDocumentStreamReader(reader);
+
+    }
+
+    public final DataObject loadObject(XMLStreamReader reader, Map options) throws XMLStreamException,
+        IllegalStateException {
+        if (reader.getEventType() != XMLStreamConstants.START_ELEMENT)
+            throw new IllegalStateException();
+
+        // StAX2SAXAdapter won't produce START_DOCUMENT if the reader is
+        // posisitioned at START_ELEMENT and the EMF loader will fail
+        // Wrap the reader so it represents a document
+        reader = new XMLDocumentStreamReader(reader);
+
+        return loadDocument(reader, options).getRootObject();
+    }
+
+    public DataObject loadObject(XMLStreamReader reader) throws XMLStreamException, IllegalStateException {
+        return loadObject(reader, null);
+    }
+
+    public void saveObject(DataObject sdo, XMLStreamWriter writer) throws XMLStreamException {
+        XMLStreamReader reader = createXMLStreamReader(sdo);
+        new XMLStreamSerializer().serialize(new XMLDocumentStreamReader(reader), writer);
+    }
+
+    public void saveObject(DataObject sdo, XMLStreamWriter writer, Map options) throws XMLStreamException {
+        XMLStreamReader reader = createXMLStreamReader(sdo);
+        options = checkSetOptions(options);
+        new XMLStreamSerializer().serialize(new XMLDocumentStreamReader(reader), writer, options);
+    }
+
+    public XMLStreamReader createXMLStreamReader(DataObject dataObject) {
+        String rootElementURI;
+        String rootElementName;
+
+        Property property = dataObject.getContainmentProperty();
+        if (property != null) {
+            rootElementName = property.getName();
+            rootElementURI = property.getType().getURI();
+        } else {
+            rootElementName = dataObject.getType().getName();
+            rootElementURI = dataObject.getType().getURI();
         }
-      }
-      throw new RuntimeException(e); // ????
+
+        return new DataObjectXMLStreamReader(dataObject, rootElementURI, rootElementName, helperContext.getTypeHelper());
     }
-  }
 
+    protected XMLDocument loadDocument(XMLStreamReader reader, Map options) throws XMLStreamException {
+        try {
+            XMLDocumentImpl document = new XMLDocumentImpl(((HelperContextImpl)helperContext).extendedMetaData, null);
+            options = checkSetOptions(options);
+            document.load(reader, options);
+            return document;
+        } catch (Exception e) {
+            if (e instanceof Resource.IOWrappedException) {
+                Resource.IOWrappedException ioe = (Resource.IOWrappedException)e;
+                if (ioe.getWrappedException() instanceof XMLStreamException) {
+                    throw (XMLStreamException)ioe.getWrappedException();
+                }
+            }
+            throw new RuntimeException(e); // ????
+        }
+    }
+
+    public HelperContext getHelperContext() {
+        return helperContext;
+    }
 }



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