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:16:55 UTC
svn commit: r555279 [1/2] - in
/incubator/tuscany/branches/sdo-1.0-incubating:
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...
Author: kelvingoodson
Date: Wed Jul 11 07:16:50 2007
New Revision: 555279
URL: http://svn.apache.org/viewvc?view=rev&rev=555279
Log:
TUSCANY-1317 -- committing first in the 1.0-incubating branch, since SDO builds and tests cleanly -- I will commit in the trunk when I have finished testing the SCA build.
Added:
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLLoadOptionsTestCase.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/XMLSaveOptionsTestCase.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/test/resources/shallowquote1.xml
Modified:
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperProviderImpl.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLHelperImpl.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/SDOUtil.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/ChangeSummaryStreamSerializer.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDODeserializer.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/XMLStreamSerializer.java
incubator/tuscany/branches/sdo-1.0-incubating/impl/src/test/java/org/apache/tuscany/sdo/test/AllTests.java
incubator/tuscany/branches/sdo-1.0-incubating/lib/src/main/java/org/apache/tuscany/sdo/api/SDOHelper.java
incubator/tuscany/branches/sdo-1.0-incubating/lib/src/main/java/org/apache/tuscany/sdo/api/SDOUtil.java
incubator/tuscany/branches/sdo-1.0-incubating/lib/src/main/java/org/apache/tuscany/sdo/api/XMLStreamHelper.java
incubator/tuscany/branches/sdo-1.0-incubating/lib/src/main/java/org/apache/tuscany/sdo/spi/HelperProviderBase.java
incubator/tuscany/branches/sdo-1.0-incubating/tools/src/main/java/org/apache/tuscany/sdo/generate/JavaGenerator.java
incubator/tuscany/branches/sdo-1.0-incubating/tools/src/main/java/org/apache/tuscany/sdo/generate/XSD2JavaGenerator.java
Modified: incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java?view=diff&rev=555279&r1=555278&r2=555279
==============================================================================
--- incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java (original)
+++ incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java Wed Jul 11 07:16:50 2007
@@ -25,41 +25,41 @@
import commonj.sdo.DataObject;
import commonj.sdo.Type;
import commonj.sdo.helper.DataFactory;
+import commonj.sdo.helper.HelperContext;
import commonj.sdo.helper.TypeHelper;
/**
- * 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/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java?view=diff&rev=555279&r1=555278&r2=555279
==============================================================================
--- incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java (original)
+++ incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java Wed Jul 11 07:16:50 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/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperProviderImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperProviderImpl.java?view=diff&rev=555279&r1=555278&r2=555279
==============================================================================
--- incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperProviderImpl.java (original)
+++ incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperProviderImpl.java Wed Jul 11 07:16:50 2007
@@ -44,6 +44,6 @@
equalityHelper = new EqualityHelperImpl();
dataHelper = new DataHelperImpl();
sdoHelper = new SDOHelperImpl();
- }
-
+ xmlStreamHelper = ((HelperContextImpl)hc).getXMLStreamHelper();
+ }
}
Modified: incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.java?view=diff&rev=555279&r1=555278&r2=555279
==============================================================================
--- incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.java (original)
+++ incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.java Wed Jul 11 07:16:50 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/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java?view=diff&rev=555279&r1=555278&r2=555279
==============================================================================
--- incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java (original)
+++ incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java Wed Jul 11 07:16:50 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/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLHelperImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLHelperImpl.java?view=diff&rev=555279&r1=555278&r2=555279
==============================================================================
--- incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLHelperImpl.java (original)
+++ incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLHelperImpl.java Wed Jul 11 07:16:50 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/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java?view=diff&rev=555279&r1=555278&r2=555279
==============================================================================
--- incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java (original)
+++ incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java Wed Jul 11 07:16:50 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