summaryrefslogtreecommitdiffstats
path: root/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper
diff options
context:
space:
mode:
Diffstat (limited to 'branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper')
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/BaseSDOExtendedMetaDataImpl.java167
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/BaseSDOXSDEcoreBuilder.java1771
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/CopyHelperImpl.java84
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/CrossScopeCopyHelperImpl.java255
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java59
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DataHelperImpl.java615
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DefaultHelperContextImpl.java72
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/EqualityHelperImpl.java96
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java193
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperProviderImpl.java50
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOAnnotations.java51
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOExtendedMetaDataImpl.java305
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.java530
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOSimpleDateFormat.java92
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java789
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java786
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java317
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java254
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLDocumentImpl.java574
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLHelperImpl.java193
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelper.java26
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java152
-rw-r--r--branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java327
23 files changed, 0 insertions, 7758 deletions
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/BaseSDOExtendedMetaDataImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/BaseSDOExtendedMetaDataImpl.java
deleted file mode 100644
index 88c714f8bf..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/BaseSDOExtendedMetaDataImpl.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.ETypedElement;
-import org.eclipse.emf.ecore.EcoreFactory;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.emf.ecore.util.BasicExtendedMetaData;
-import org.eclipse.emf.ecore.util.ExtendedMetaData;
-import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
-
-/**
- * A BasicExtendedMetaData that uses a supplied (SDO) ecore factory to create properties and types.
- */
-public class BaseSDOExtendedMetaDataImpl extends BasicExtendedMetaData
-{
- protected EcoreFactory ecoreFactory = EcoreFactory.eINSTANCE;
- protected DemandMetaData demandMetaData = new DemandMetaData();
-
- public static class DemandMetaData {
- EClassifier getEObject() { return EcorePackage.eINSTANCE.getEObject(); }
- EClassifier getAnyType() { return XMLTypePackage.eINSTANCE.getAnyType(); }
- EClassifier getAnySimpleType() { return XMLTypePackage.eINSTANCE.getAnySimpleType(); }
- EClassifier getXMLTypeDocumentRoot() { return XMLTypePackage.eINSTANCE.getXMLTypeDocumentRoot(); }
- }
-
- public BaseSDOExtendedMetaDataImpl(EPackage.Registry registry)
- {
- super(registry);
- }
-
- public EPackage demandPackage(String namespace)
- {
- EPackage ePackage = demandRegistry.getEPackage(namespace);
- if (ePackage == null)
- {
- ePackage = ecoreFactory.createEPackage();
- ePackage.setNsURI(namespace);
- setQualified(ePackage, namespace != null);
- if (namespace != null)
- {
- ePackage.setNsPrefix
- (namespace.equals(ExtendedMetaData.XMLNS_URI) ?
- namespace.equals(ExtendedMetaData.XML_URI) ?
- "xml" :
- "xmlns" :
- computePrefix(namespace));
- }
- demandRegistry.put(namespace, ePackage);
-
- // demandDocumentRoot(ePackage);
-
- EClass documentRootEClass = ecoreFactory.createEClass();
- documentRootEClass.getESuperTypes().add(demandMetaData.getXMLTypeDocumentRoot());
- documentRootEClass.setName("DocumentRoot");
- ePackage.getEClassifiers().add(documentRootEClass);
- setDocumentRoot(documentRootEClass);
- }
- return ePackage;
- }
-
- public EClassifier demandType(String namespace, String name)
- {
- EPackage ePackage = demandPackage(namespace);
- EClassifier eClassifier = getType(ePackage, name);
- if (eClassifier != null)
- {
- return eClassifier;
- }
- else
- {
- EClass eClass = ecoreFactory.createEClass();
- eClass.setName(name);
- eClass.getESuperTypes().add(demandMetaData.getAnyType());
- setContentKind(eClass, MIXED_CONTENT);
- ePackage.getEClassifiers().add(eClass);
- return eClass;
- }
- }
-
- public EStructuralFeature demandFeature(String namespace, String name, boolean isElement, boolean isReference)
- {
- EPackage ePackage = demandPackage(namespace);
- EClass documentRootEClass = getDocumentRoot(ePackage);
- EStructuralFeature eStructuralFeature =
- isElement ?
- getLocalElement(documentRootEClass, namespace, name) :
- getLocalAttribute(documentRootEClass, namespace, name);
- if (eStructuralFeature != null)
- {
- return eStructuralFeature;
- }
- else
- {
- if (isReference)
- {
- EReference eReference = ecoreFactory.createEReference();
- eReference.setContainment(isElement);
- eReference.setEType(demandMetaData.getEObject());
- eReference.setName(name);
- eReference.setDerived(true);
- eReference.setTransient(true);
- eReference.setVolatile(true);
- documentRootEClass.getEStructuralFeatures().add(eReference);
-
- setFeatureKind(eReference, isElement ? ELEMENT_FEATURE : ATTRIBUTE_FEATURE);
- setNamespace(eReference, namespace);
-
- // Mark the bound as unspecified so that it won't be considered many
- // but can nevertheless be recognized as being unspecified and perhaps still be treat as many.
- //
- if (isElement)
- {
- eReference.setUpperBound(ETypedElement.UNSPECIFIED_MULTIPLICITY);
- }
-
- return eReference;
- }
- else
- {
- EAttribute eAttribute = ecoreFactory.createEAttribute();
- eAttribute.setName(name);
- eAttribute.setEType(demandMetaData.getAnySimpleType());
- eAttribute.setDerived(true);
- eAttribute.setTransient(true);
- eAttribute.setVolatile(true);
- documentRootEClass.getEStructuralFeatures().add(eAttribute);
-
- setFeatureKind(eAttribute, isElement ? ELEMENT_FEATURE : ATTRIBUTE_FEATURE);
- setNamespace(eAttribute, namespace);
-
- // Mark the bound as unspecified so that it won't be considered many
- // but can nevertheless be recognized as being unspecified and perhaps still be treat as many.
- //
- if (isElement)
- {
- eAttribute.setUpperBound(ETypedElement.UNSPECIFIED_MULTIPLICITY);
- }
-
- return eAttribute;
- }
- }
- }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/BaseSDOXSDEcoreBuilder.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/BaseSDOXSDEcoreBuilder.java
deleted file mode 100644
index 3d297fa671..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/BaseSDOXSDEcoreBuilder.java
+++ /dev/null
@@ -1,1771 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EDataType;
-import org.eclipse.emf.ecore.EEnum;
-import org.eclipse.emf.ecore.EOperation;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EParameter;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.ETypedElement;
-import org.eclipse.emf.ecore.EcoreFactory;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.ecore.util.ExtendedMetaData;
-import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
-import org.eclipse.xsd.XSDAnnotation;
-import org.eclipse.xsd.XSDAttributeDeclaration;
-import org.eclipse.xsd.XSDAttributeUse;
-import org.eclipse.xsd.XSDComplexTypeContent;
-import org.eclipse.xsd.XSDComplexTypeDefinition;
-import org.eclipse.xsd.XSDComponent;
-import org.eclipse.xsd.XSDContentTypeCategory;
-import org.eclipse.xsd.XSDDerivationMethod;
-import org.eclipse.xsd.XSDElementDeclaration;
-import org.eclipse.xsd.XSDFeature;
-import org.eclipse.xsd.XSDLengthFacet;
-import org.eclipse.xsd.XSDMaxLengthFacet;
-import org.eclipse.xsd.XSDMinLengthFacet;
-import org.eclipse.xsd.XSDModelGroup;
-import org.eclipse.xsd.XSDModelGroupDefinition;
-import org.eclipse.xsd.XSDNamedComponent;
-import org.eclipse.xsd.XSDParticle;
-import org.eclipse.xsd.XSDSchema;
-import org.eclipse.xsd.XSDSimpleTypeDefinition;
-import org.eclipse.xsd.XSDTerm;
-import org.eclipse.xsd.XSDTypeDefinition;
-import org.eclipse.xsd.XSDVariety;
-import org.eclipse.xsd.XSDWildcard;
-import org.eclipse.xsd.ecore.XSDEcoreBuilder;
-import org.eclipse.xsd.util.XSDConstants;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-/**
- * An XSDEcoreBuilder that uses a supplied (SDO) ecore factory to create properties and types.
- */
-public class BaseSDOXSDEcoreBuilder extends XSDEcoreBuilder
-{
- protected EcorePackage ecorePackage = EcorePackage.eINSTANCE;
- protected EcoreFactory ecoreFactory = EcoreFactory.eINSTANCE;
-
- public BaseSDOXSDEcoreBuilder(ExtendedMetaData extendedMetaData)
- {
- super(extendedMetaData);
- }
-
- private void createDocumentRoot(XSDSchema xsdSchema, EPackage ePackage) {
- EClass documentEClass = ecoreFactory.createEClass();
- String name = getEcoreAttribute(xsdSchema, "documentRoot");
- if (name == null)
- {
- name = "DocumentRoot";
- }
- documentEClass.setName(name);
-
- extendedMetaData.setDocumentRoot(documentEClass);
-
- ePackage.getEClassifiers().add(documentEClass);
-
- createFeature
- (documentEClass,
- "mixed",
- ecorePackage.getEFeatureMapEntry(),
- null,
- 0,
- -1);
-
- EStructuralFeature xmlnsPrefixMapFeature =
- createFeature
- (documentEClass,
- "xMLNSPrefixMap",
- ecorePackage.getEStringToStringMapEntry(),
- null,
- 0,
- -1);
- extendedMetaData.setName(xmlnsPrefixMapFeature, "xmlns:prefix");
-
- EStructuralFeature xsiSchemaLocationMapFeature =
- createFeature
- (documentEClass,
- "xSISchemaLocation",
- ecorePackage.getEStringToStringMapEntry(),
- null,
- 0,
- -1);
- extendedMetaData.setName(xsiSchemaLocationMapFeature, "xsi:schemaLocation");
- }
-
- public EPackage getEPackage(XSDNamedComponent xsdNamedComponent)
- {
- XSDSchema containingXSDSchema = xsdNamedComponent.getSchema();
- if (containingXSDSchema != null && !xsdSchemas.contains(containingXSDSchema))
- {
- xsdSchemas.add(containingXSDSchema);
- addInput(containingXSDSchema);
- validate(containingXSDSchema);
- }
-
- String targetNamespace =
- containingXSDSchema == null ?
- xsdNamedComponent.getTargetNamespace() :
- containingXSDSchema.getTargetNamespace();
- EPackage ePackage = (EPackage)targetNamespaceToEPackageMap.get(targetNamespace);
- if (ePackage == null)
- {
- ePackage = ecoreFactory.createEPackage();
- setAnnotations(ePackage, containingXSDSchema);
- addOutput(ePackage);
- if (targetNamespace == null)
- {
- if (containingXSDSchema == null)
- {
- containingXSDSchema = rootSchema;
- }
- ePackage.setName(validName(containingXSDSchema.eResource().getURI().trimFileExtension().lastSegment(), true));
- ePackage.setNsURI(containingXSDSchema.eResource().getURI().toString());
-
- // Also register against the nsURI for the case that the target namespace is null.
- //
- // extendedMetaData.putPackage(ePackage.getNsURI(), ePackage);
- }
- else
- {
- String qualifiedPackageName = qualifiedPackageName(targetNamespace);
- ePackage.setName(qualifiedPackageName);
- ePackage.setNsURI(targetNamespace);
- }
-
- String nsPrefix = ePackage.getName();
- int index = nsPrefix.lastIndexOf('.');
- nsPrefix = index == -1 ? nsPrefix : nsPrefix.substring(index + 1);
-
- // http://www.w3.org/TR/REC-xml-names/#xmlReserved
- // Namespace Constraint: Leading "XML"
- // Prefixes beginning with the three-letter sequence x, m, l, in any case combination,
- // are reserved for use by XML and XML-related specifications.
- //
- if (nsPrefix.toLowerCase().startsWith("xml"))
- {
- nsPrefix = "_" + nsPrefix;
- }
- ePackage.setNsPrefix(nsPrefix);
-
- extendedMetaData.setQualified(ePackage, targetNamespace != null);
- extendedMetaData.putPackage(targetNamespace, ePackage);
-
- targetNamespaceToEPackageMap.put(targetNamespace, ePackage);
-
- createDocumentRoot(xsdNamedComponent.getSchema(), ePackage);
- }
-
- return ePackage;
- }
-
- protected EClassifier computeEClassifier(XSDTypeDefinition xsdTypeDefinition)
- {
- if (xsdTypeDefinition == null)
- {
- return getBuiltInEClassifier(rootSchema.getSchemaForSchemaNamespace(), "anySimpleType");
- }
- else if (xsdTypeDefinition instanceof XSDSimpleTypeDefinition)
- {
- return computeEDataType((XSDSimpleTypeDefinition)xsdTypeDefinition);
- }
- else
- {
- return computeEClass((XSDComplexTypeDefinition)xsdTypeDefinition);
- }
- }
-
- protected EDataType computeEDataType(XSDSimpleTypeDefinition xsdSimpleTypeDefinition)
- {
- if (xsdSimpleTypeDefinition == null)
- {
- return (EDataType)getBuiltInEClassifier(rootSchema.getSchemaForSchemaNamespace(), "anySimpleType");
- }
- else if (XSDConstants.isSchemaForSchemaNamespace(xsdSimpleTypeDefinition.getTargetNamespace()))
- {
- String name = xsdSimpleTypeDefinition.getName();
- if (name != null)
- {
- EDataType result = (EDataType)getBuiltInEClassifier(xsdSimpleTypeDefinition.getTargetNamespace(), "anyType".equals(name) ? "anySimpleType" : name);
- if (result != null)
- {
- return result;
- }
- }
- }
- else if (xsdSimpleTypeDefinition.getContainer() == null)
- {
- return (EDataType)getBuiltInEClassifier(rootSchema.getSchemaForSchemaNamespace(), "anySimpleType");
- }
-
- String explicitInstanceClassName = getEcoreAttribute(xsdSimpleTypeDefinition, "instanceClass");
- if (explicitInstanceClassName != null)
- {
- EDataType eDataType = ecoreFactory.createEDataType();
- setAnnotations(eDataType, xsdSimpleTypeDefinition);
-
- String aliasName = getEcoreAttribute(xsdSimpleTypeDefinition, "name");
- if (aliasName == null)
- {
- aliasName = validAliasName(xsdSimpleTypeDefinition, true);
- }
- eDataType.setName(aliasName);
- extendedMetaData.setName(eDataType, xsdSimpleTypeDefinition.getAliasName());
-
- eDataType.setInstanceClassName(explicitInstanceClassName);
-
- EPackage ePackage = getEPackage(xsdSimpleTypeDefinition);
- addToSortedList(ePackage.getEClassifiers(), eDataType);
-
- checkForPrimitive(xsdSimpleTypeDefinition, eDataType);
-
- handleFacets(xsdSimpleTypeDefinition, eDataType);
-
- String constraints = getEcoreAttribute(xsdSimpleTypeDefinition, "constraints");
- if (constraints != null)
- {
- EcoreUtil.setAnnotation(eDataType, EcorePackage.eNS_URI, "constraints", constraints);
- }
-
- if ("false".equals(getEcoreAttribute(xsdSimpleTypeDefinition, "serializable")))
- {
- eDataType.setSerializable(false);
- }
- return eDataType;
- }
- else
- {
- EEnum eEnum = computeEEnum(xsdSimpleTypeDefinition);
- if (eEnum != null)
- {
- return eEnum;
- }
- else
- {
- XSDSimpleTypeDefinition baseTypeDefinition = xsdSimpleTypeDefinition.getBaseTypeDefinition();
- if (baseTypeDefinition != null)
- {
- EDataType eDataType = ecoreFactory.createEDataType();
- setAnnotations(eDataType, xsdSimpleTypeDefinition);
-
- String name = getEcoreAttribute(xsdSimpleTypeDefinition, "name");
- if (name == null)
- {
- name = validAliasName(xsdSimpleTypeDefinition, true);
- }
-
- eDataType.setName(name);
- extendedMetaData.setName(eDataType, xsdSimpleTypeDefinition.getAliasName());
-
- EPackage ePackage = getEPackage(xsdSimpleTypeDefinition);
- addToSortedList(ePackage.getEClassifiers(), eDataType);
-
- if (baseTypeDefinition.getVariety() != xsdSimpleTypeDefinition.getVariety())
- {
- if (xsdSimpleTypeDefinition.getVariety() == XSDVariety.LIST_LITERAL)
- {
- EDataType itemEDataType = getEDataType(xsdSimpleTypeDefinition.getItemTypeDefinition());
- extendedMetaData.setItemType(eDataType, itemEDataType);
- eDataType.setInstanceClassName("java.util.List");
- }
- else
- {
- String instanceClassName = null;
- List memberTypes = new ArrayList();
- for (Iterator i = xsdSimpleTypeDefinition.getMemberTypeDefinitions().iterator(); i.hasNext(); )
- {
- XSDSimpleTypeDefinition memberTypeDefinition = (XSDSimpleTypeDefinition)i.next();
- EDataType memberEDataType = getEDataType(memberTypeDefinition);
- memberTypes.add(memberEDataType);
- String memberInstanceClassName = memberEDataType.getInstanceClassName();
- if (memberInstanceClassName == null && memberEDataType instanceof EEnum)
- {
- memberInstanceClassName = "org.eclipse.emf.common.util.Enumerator";
- }
- if (instanceClassName == null)
- {
- instanceClassName = memberInstanceClassName;
- }
- else if (instanceClassName != memberInstanceClassName)
- {
- instanceClassName = "java.lang.Object";
- }
- }
- extendedMetaData.setMemberTypes(eDataType, memberTypes);
- eDataType.setInstanceClassName(instanceClassName);
- }
- }
- else
- {
- EDataType baseEDataType = getEDataType(baseTypeDefinition);
- extendedMetaData.setBaseType(eDataType, baseEDataType);
- String instanceClassName = getInstanceClassName(xsdSimpleTypeDefinition, baseEDataType);
- eDataType.setInstanceClassName
- (instanceClassName == null ?
- "org.eclipse.emf.common.util.Enumerator" :
- instanceClassName);
- }
-
- checkForPrimitive(xsdSimpleTypeDefinition, eDataType);
- handleFacets(xsdSimpleTypeDefinition, eDataType);
-
- String constraints = getEcoreAttribute(xsdSimpleTypeDefinition, "constraints");
- if (constraints != null)
- {
- EcoreUtil.setAnnotation(eDataType, EcorePackage.eNS_URI, "constraints", constraints);
- }
-
- if ("false".equals(getEcoreAttribute(xsdSimpleTypeDefinition, "serializable")))
- {
- eDataType.setSerializable(false);
- }
-
- return eDataType;
- }
- }
- return (EDataType)getBuiltInEClassifier(rootSchema.getSchemaForSchemaNamespace(), "anySimpleType");
- }
- }
-
- protected void checkForPrimitive(EDataType eDataType)
- {
- int index = PRIMITIVES.indexOf(eDataType.getInstanceClassName());
- if (index != -1 || eDataType instanceof EEnum)
- {
- EDataType eDataTypeObject = ecoreFactory.createEDataType();
- eDataTypeObject.setName(eDataType.getName() + "Object");
- if (index != -1)
- {
- eDataTypeObject.setInstanceClassName(PRIMITIVE_WRAPPERS[index]);
- }
- else
- {
- eDataTypeObject.setInstanceClassName("org.eclipse.emf.common.util.Enumerator");
- }
- extendedMetaData.setName(eDataTypeObject, extendedMetaData.getName(eDataType) + ":Object");
- addToSortedList(eDataType.getEPackage().getEClassifiers(), eDataTypeObject);
- extendedMetaData.setBaseType(eDataTypeObject, eDataType);
-
- typeToTypeObjectMap.put(eDataType, eDataTypeObject);
- }
- }
-
- public EClass computeEClass(XSDComplexTypeDefinition xsdComplexTypeDefinition)
- {
- if (xsdComplexTypeDefinition == null)
- {
- return (EClass)getBuiltInEClassifier(rootSchema.getSchemaForSchemaNamespace(), "anyType");
- }
- else if (XSDConstants.isSchemaForSchemaNamespace(xsdComplexTypeDefinition.getTargetNamespace()))
- {
- String name = xsdComplexTypeDefinition.getName();
- if (name != null)
- {
- EClass result = (EClass)getBuiltInEClassifier(xsdComplexTypeDefinition.getTargetNamespace(), name);
- if (result != null)
- {
- return result;
- }
- }
- }
- else if (xsdComplexTypeDefinition.getContainer() == null)
- {
- return (EClass)getBuiltInEClassifier(rootSchema.getSchemaForSchemaNamespace(), "anyType");
- }
-
- EClass eClass = ecoreFactory.createEClass();
- setAnnotations(eClass, xsdComplexTypeDefinition);
- // Do this early to prevent recursive loop.
- xsdComponentToEModelElementMap.put(xsdComplexTypeDefinition, eClass);
-
- if ("true".equals(getEcoreAttribute(xsdComplexTypeDefinition, "interface")))
- {
- eClass.setInterface(true);
- }
-
- String instanceClassName = getEcoreAttribute(xsdComplexTypeDefinition, "instanceClass");
- if (instanceClassName != null)
- {
- eClass.setInstanceClassName(instanceClassName);
- }
-
- String aliasName = getEcoreAttribute(xsdComplexTypeDefinition, "name");
- if (aliasName == null)
- {
- aliasName = validAliasName(xsdComplexTypeDefinition, true);
- }
- eClass.setName(aliasName);
- extendedMetaData.setName(eClass, xsdComplexTypeDefinition.getAliasName());
-
- String constraints = getEcoreAttribute(xsdComplexTypeDefinition, "constraints");
- if (constraints != null)
- {
- EcoreUtil.setAnnotation(eClass, EcorePackage.eNS_URI, "constraints", constraints);
- }
-
- EPackage ePackage = getEPackage(xsdComplexTypeDefinition);
- addToSortedList(ePackage.getEClassifiers(), eClass);
-
- if (xsdComplexTypeDefinition.isAbstract())
- {
- eClass.setAbstract(true);
- }
-
- EClass baseClass = null;
- XSDTypeDefinition baseTypeDefinition = xsdComplexTypeDefinition.getBaseTypeDefinition();
- if (!baseTypeDefinition.isCircular())
- {
- EClassifier baseType = getEClassifier(baseTypeDefinition);
- if (baseType instanceof EClass && baseType != ecorePackage.getEObject())
- {
- eClass.getESuperTypes().add(baseClass = (EClass)baseType);
- }
- }
-
- boolean isRestriction =
- !eClass.getESuperTypes().isEmpty() &&
- xsdComplexTypeDefinition.getDerivationMethod() == XSDDerivationMethod.RESTRICTION_LITERAL;
-
- for (Iterator i = getEcoreTypeQNamesAttribute(xsdComplexTypeDefinition, "implements").iterator(); i.hasNext(); )
- {
- XSDTypeDefinition mixin = (XSDTypeDefinition)i.next();
- if (!XSDConstants.isURType(mixin))
- {
- EClassifier mixinType = getEClassifier(mixin);
- if (mixinType instanceof EClass && mixinType != ecorePackage.getEObject())
- {
- eClass.getESuperTypes().add(mixinType);
- }
- }
- }
-
- // 51210
- // EAnnotation contentParticle = null;
-
- if (xsdComplexTypeDefinition.getContentTypeCategory() == XSDContentTypeCategory.SIMPLE_LITERAL)
- {
- extendedMetaData.setContentKind(eClass, ExtendedMetaData.SIMPLE_CONTENT);
- if (!"SimpleAnyType".equals(eClass.getName()) || !XMLTypePackage.eNS_URI.equals(eClass.getEPackage().getNsURI()))
- {
- if (eClass.getEAllStructuralFeatures().isEmpty())
- {
- XSDComplexTypeContent xsdComplexTypeContent = xsdComplexTypeDefinition.getContent();
- String name = getEcoreAttribute(xsdComplexTypeContent, "name");
- if (name == null)
- {
- name = "value";
- }
- createFeature
- (eClass,
- null,
- name,
- xsdComplexTypeContent,
- false);
- }
- else
- {
- XSDSimpleTypeDefinition xsdSimpleTypeDefinition = xsdComplexTypeDefinition.getSimpleType();
- getEClassifier(xsdSimpleTypeDefinition);
- }
- }
- }
- else
- {
- EStructuralFeature globalGroup = null;
- boolean isMixed = xsdComplexTypeDefinition.getContentTypeCategory() == XSDContentTypeCategory.MIXED_LITERAL;
- String featureMapName = getEcoreAttribute(xsdComplexTypeDefinition, "featureMap");
- if (eClass.getESuperTypes().isEmpty() ?
- "true".equals(getEcoreAttribute(xsdComplexTypeDefinition, "mixed")) :
- extendedMetaData.getMixedFeature((EClass)eClass.getESuperTypes().get(0)) != null)
- {
- isMixed = true;
- }
- extendedMetaData.setContentKind
- (eClass,
- isMixed ?
- ExtendedMetaData.MIXED_CONTENT :
- xsdComplexTypeDefinition.getContentTypeCategory() == XSDContentTypeCategory.EMPTY_LITERAL ?
- ExtendedMetaData.EMPTY_CONTENT :
- ExtendedMetaData.ELEMENT_ONLY_CONTENT);
- if (isMixed)
- {
- EStructuralFeature mixedFeature = extendedMetaData.getMixedFeature(eClass);
- if (mixedFeature == null)
- {
- if (featureMapName == null)
- {
- featureMapName = "mixed";
- }
- mixedFeature =
- createFeature
- (eClass,
- featureMapName,
- ecorePackage.getEFeatureMapEntry(),
- null,
- 0,
- -1);
- extendedMetaData.setName(mixedFeature, ":mixed");
- }
- }
- else
- {
- globalGroup = extendedMetaData.getElement(eClass, null, ":group");
- if (globalGroup == null && featureMapName != null && eClass.getESuperTypes().isEmpty())
- {
- globalGroup =
- createFeature
- (eClass,
- featureMapName,
- ecorePackage.getEFeatureMapEntry(),
- null,
- 0,
- -1);
- extendedMetaData.setName(globalGroup, ":group");
- extendedMetaData.setFeatureKind(globalGroup, ExtendedMetaData.GROUP_FEATURE);
- }
- }
-
- if (xsdComplexTypeDefinition.getContent() != null)
- {
- // 51210
- // Map particleMap = new HashMap();
- Map groups = new HashMap();
- List particleInformation = collectParticles((XSDParticle)xsdComplexTypeDefinition.getContent());
- for (Iterator i = particleInformation.iterator(); i.hasNext(); )
- {
- EffectiveOccurrence effectiveOccurrence = (EffectiveOccurrence)i.next();
- XSDParticle xsdParticle = effectiveOccurrence.xsdParticle;
- EStructuralFeature group = (EStructuralFeature)groups.get(effectiveOccurrence.xsdModelGroup);
- XSDTerm xsdTerm = xsdParticle.getTerm();
- EStructuralFeature eStructuralFeature = null;
- String name = getEcoreAttribute(xsdParticle, "name");
- if (xsdTerm instanceof XSDModelGroup)
- {
- if (!isRestriction)
- {
- XSDModelGroup xsdModelGroup = (XSDModelGroup)xsdTerm;
- if (name == null)
- {
- name = getEcoreAttribute(xsdParticle, "featureMap");
- if (name == null)
- {
- name = getEcoreAttribute(xsdModelGroup, "name");
- if (name == null)
- {
- name = getEcoreAttribute(xsdModelGroup, "featureMap");
- if (name == null)
- {
- if (xsdModelGroup.getContainer() instanceof XSDModelGroupDefinition)
- {
- XSDModelGroupDefinition xsdModelGroupDefinition = (XSDModelGroupDefinition)xsdModelGroup.getContainer();
- name = getEcoreAttribute(xsdModelGroupDefinition, "name");
- if (name == null)
- {
- name = validName(xsdModelGroupDefinition.getName(), true);
- }
- }
- else
- {
- name = "group";
- }
- }
- }
- }
- }
-
- eStructuralFeature =
- createFeature
- (eClass,
- name,
- ecorePackage.getEFeatureMapEntry(),
- xsdParticle,
- 0,
- -1);
- groups.put(xsdTerm, eStructuralFeature);
- extendedMetaData.setName(eStructuralFeature, name + ":" + eClass.getEAllStructuralFeatures().indexOf(eStructuralFeature));
- }
- }
- else if (xsdTerm instanceof XSDWildcard)
- {
- if (!isRestriction)
- {
- if (name == null)
- {
- name = getEcoreAttribute(xsdTerm, "name");
- if (name == null)
- {
- name = "any";
- }
- }
- eStructuralFeature =
- createFeature
- (eClass,
- name,
- ecorePackage.getEFeatureMapEntry(),
- xsdParticle,
- effectiveOccurrence.minOccurs,
- effectiveOccurrence.maxOccurs);
- // 51210
- // particleMap.put(xsdParticle, eStructuralFeature);
- }
- }
- else
- {
- XSDElementDeclaration xsdElementDeclaration = (XSDElementDeclaration)xsdTerm;
-
- boolean isRedundant = false;
- if (isRestriction)
- {
- isRedundant =
- extendedMetaData.getElement
- (baseClass, xsdElementDeclaration.getTargetNamespace(), xsdElementDeclaration.getName()) != null;
-
- if (!isRedundant)
- {
- group =
- extendedMetaData.getElementWildcardAffiliation
- (baseClass, xsdElementDeclaration.getTargetNamespace(), xsdElementDeclaration.getName());
- }
- }
-
- if (!isRedundant)
- {
- if (name == null)
- {
- name = getEcoreAttribute(xsdElementDeclaration, "name");
- if (name == null)
- {
- name = validName(xsdElementDeclaration.getName(), true);
- }
- }
-
- String groupName = getEcoreAttribute(xsdParticle, "featureMap");
- if (groupName == null)
- {
- groupName = getEcoreAttribute(xsdElementDeclaration, "featureMap");
- }
-
- if (!"".equals(groupName) &&
- (groupName != null ||
- xsdElementDeclaration.isAbstract() ||
- xsdElementDeclaration.getSubstitutionGroup().size() > 1))
- {
- if (groupName == null)
- {
- groupName = name + "Group";
- }
- eStructuralFeature =
- createFeature
- (eClass,
- groupName,
- ecorePackage.getEFeatureMapEntry(),
- xsdParticle,
- effectiveOccurrence.minOccurs,
- effectiveOccurrence.maxOccurs);
-
- eStructuralFeature.setChangeable(true);
-
- extendedMetaData.setFeatureKind(eStructuralFeature, ExtendedMetaData.GROUP_FEATURE);
- extendedMetaData.setName(eStructuralFeature, xsdElementDeclaration.getName() + ":group");
-
- if (group != null)
- {
- extendedMetaData.setGroup(eStructuralFeature, group);
- eStructuralFeature.setDerived(true);
- eStructuralFeature.setTransient(true);
- eStructuralFeature.setVolatile(true);
- }
- else if (isMixed)
- {
- eStructuralFeature.setDerived(true);
- eStructuralFeature.setTransient(true);
- eStructuralFeature.setVolatile(true);
- }
- else if (globalGroup != null)
- {
- extendedMetaData.setGroup(eStructuralFeature, globalGroup);
- eStructuralFeature.setDerived(true);
- eStructuralFeature.setTransient(true);
- eStructuralFeature.setVolatile(true);
- }
-
- group = eStructuralFeature;
- }
-
- eStructuralFeature =
- createFeature(eClass, xsdElementDeclaration, name, xsdParticle, effectiveOccurrence.minOccurs, effectiveOccurrence.maxOccurs);
- // 51210
- // particleMap.put(xsdParticle, eStructuralFeature);
-
- // If the group is turned off, we better make the feature changeable.
- //
- if (!eStructuralFeature.isChangeable() && group == null && getEcoreAttribute(xsdParticle, xsdElementDeclaration, "changeable") == null)
- {
- eStructuralFeature.setChangeable(true);
- }
- }
- }
-
- if (eStructuralFeature != null)
- {
- if (group != null)
- {
- extendedMetaData.setGroup(eStructuralFeature, group);
- eStructuralFeature.setDerived(true);
- eStructuralFeature.setTransient(true);
- eStructuralFeature.setVolatile(true);
- }
- else if (isMixed)
- {
- eStructuralFeature.setDerived(true);
- eStructuralFeature.setTransient(true);
- eStructuralFeature.setVolatile(true);
- }
- else if (globalGroup != null)
- {
- extendedMetaData.setGroup(eStructuralFeature, globalGroup);
- eStructuralFeature.setDerived(true);
- eStructuralFeature.setTransient(true);
- eStructuralFeature.setVolatile(true);
- }
- }
- }
-
- // 51210
- // contentParticle = computeParticleConstraints(eClass, particleMap, (XSDParticle)xsdComplexTypeDefinition.getContent());
- }
- }
-
- // 51210
- // EAnnotation attributeParticle = null;
- // if (isRestriction)
- // {
- // attributeParticle = ecoreFactory.createEAnnotation();
- // attributeParticle.setSource("attributes");
- // }
-
- XSDWildcard baseXSDWildcard = null;
- Collection baseAttributeUses = Collections.EMPTY_LIST;
- Map baseAttributeURIs = new HashMap();
- if (baseTypeDefinition instanceof XSDComplexTypeDefinition)
- {
- XSDComplexTypeDefinition complexBaseTypeDefinition = (XSDComplexTypeDefinition)baseTypeDefinition;
- baseXSDWildcard = complexBaseTypeDefinition.getAttributeWildcard();
- baseAttributeUses = complexBaseTypeDefinition.getAttributeUses();
- for (Iterator i = baseAttributeUses.iterator(); i.hasNext(); )
- {
- XSDAttributeUse xsdAttributeUse = (XSDAttributeUse)i.next();
- baseAttributeURIs.put(xsdAttributeUse.getAttributeDeclaration().getURI(), xsdAttributeUse);
- }
- }
-
- for (Iterator i = getAttributeUses(xsdComplexTypeDefinition).iterator(); i.hasNext(); )
- {
- XSDAttributeUse xsdAttributeUse = (XSDAttributeUse)i.next();
- XSDAttributeDeclaration xsdAttributeDeclaration = xsdAttributeUse.getAttributeDeclaration();
- if (baseAttributeURIs.remove(xsdAttributeDeclaration.getURI()) == null)
- {
- String name = getEcoreAttribute(xsdAttributeUse, "name");
- if (name == null)
- {
- name = getEcoreAttribute(xsdAttributeDeclaration, "name");
- }
- if (name == null)
- {
- name = validName(xsdAttributeDeclaration.getName(), true);
- }
-
- EStructuralFeature eStructuralFeature =
- createFeature(eClass, xsdAttributeDeclaration, name, xsdAttributeUse, xsdAttributeUse.isRequired());
-
- if (isRestriction)
- {
- EStructuralFeature attributeWildcardEStructuralFeature =
- extendedMetaData.getAttributeWildcardAffiliation
- (baseClass, xsdAttributeDeclaration.getTargetNamespace(), xsdAttributeDeclaration.getName());
- if (attributeWildcardEStructuralFeature != null)
- {
- extendedMetaData.setGroup(eStructuralFeature, attributeWildcardEStructuralFeature);
- eStructuralFeature.setDerived(true);
- eStructuralFeature.setTransient(true);
- eStructuralFeature.setVolatile(true);
- }
- }
- }
- /* 51210
- else if (isRestriction && !baseAttributeUses.contains(xsdAttributeUse))
- {
- EStructuralFeature eStructuralFeature =
- extendedMetaData.getAttribute(eClass, xsdAttributeDeclaration.getTargetNamespace(), xsdAttributeDeclaration.getName());
- if (eStructuralFeature != null)
- {
- EAnnotation attributeEAnnotation = ecoreFactory.createEAnnotation();
- if (xsdAttributeUse.isRequired())
- {
- attributeEAnnotation.getDetails().put("minOccurs", "1");
- }
- attributeEAnnotation.getReferences().add(eStructuralFeature);
-
- if (xsdAttributeDeclaration.getTypeDefinition() != null)
- {
- EClassifier type = getEClassifier(xsdAttributeDeclaration.getTypeDefinition());
- if (type != eStructuralFeature.getEType() && type != null)
- {
- attributeEAnnotation.getReferences().add(type);
- }
- }
-
- attributeParticle.getContents().add(attributeEAnnotation);
- }
- }
- */
- }
-
- /* 51210
- if (isRestriction && !baseAttributeURIs.isEmpty())
- {
- for (Iterator i = baseAttributeURIs.values().iterator(); i.hasNext(); )
- {
- XSDAttributeUse xsdAttributeUse = (XSDAttributeUse)i.next();
- XSDAttributeDeclaration xsdAttributeDeclaration = xsdAttributeUse.getAttributeDeclaration();
- EStructuralFeature eStructuralFeature =
- extendedMetaData.getAttribute(eClass, xsdAttributeDeclaration.getTargetNamespace(), xsdAttributeDeclaration.getName());
- if (eStructuralFeature != null)
- {
- EAnnotation attributeEAnnotation = ecoreFactory.createEAnnotation();
- attributeEAnnotation.getReferences().add(eStructuralFeature);
- attributeEAnnotation.getDetails().put("maxOccurs", "0");
- attributeParticle.getContents().add(attributeEAnnotation);
- }
- }
- }
- */
-
- XSDWildcard xsdWildcard = xsdComplexTypeDefinition.getAttributeWildcard();
- if (xsdWildcard != null && baseXSDWildcard != xsdWildcard || XSDConstants.isURType(xsdComplexTypeDefinition))
- {
- if (isRestriction && !XSDConstants.isURType(xsdComplexTypeDefinition))
- {
- // 51210
- // attributeParticle.getDetails().put
- // ("wildcard", BasicExtendedMetaData.getEncodedWildcards(xsdComplexTypeDefinition.getTargetNamespace(), getWildcards(xsdWildcard)));
- }
- else
- {
- String name = getEcoreAttribute(xsdWildcard, "name");
- if (name == null)
- {
- name = "anyAttribute";
- }
- createFeature
- (eClass,
- name,
- ecorePackage.getEFeatureMapEntry(),
- xsdWildcard,
- 0,
- -1);
- }
- }
-
- if (isRestriction)
- {
- // 51210
- // EAnnotation restrictionParticle = ecoreFactory.createEAnnotation();
- // restrictionParticle.setSource("restriction");
- // if (contentParticle != null)
- // {
- // restrictionParticle.getContents().add(contentParticle);
- // }
- // if (!attributeParticle.getContents().isEmpty() || !attributeParticle.getDetails().isEmpty())
- // {
- // restrictionParticle.getContents().add(attributeParticle);
- // }
- // contentParticle = restrictionParticle;
-
- int baseContentKind = extendedMetaData.getContentKind((EClass)eClass.getESuperTypes().get(0));
- if (baseContentKind == ExtendedMetaData.MIXED_CONTENT &&
- xsdComplexTypeDefinition.getContentTypeCategory() == XSDContentTypeCategory.SIMPLE_LITERAL)
- {
- extendedMetaData.setContentKind(eClass, ExtendedMetaData.SIMPLE_CONTENT);
- EStructuralFeature eStructuralFeature =
- createFeature
- (eClass,
- "rawValue",
- getBuiltInEClassifier(xsdComplexTypeDefinition.getSchema().getSchemaForSchemaNamespace(), "string"),
- null,
- 0,
- 1);
- eStructuralFeature.setDerived(true);
- eStructuralFeature.setTransient(true);
- eStructuralFeature.setVolatile(true);
-
- eStructuralFeature =
- createFeature
- (eClass,
- "value",
- getBuiltInEClassifier(xsdComplexTypeDefinition.getSchema().getSchemaForSchemaNamespace(), "anySimpleType"),
- null,
- 0,
- 1);
- eStructuralFeature.setDerived(true);
- eStructuralFeature.setTransient(true);
- eStructuralFeature.setVolatile(true);
-
- if ("SimpleAnyType".equals(eClass.getName()) && XMLTypePackage.eNS_URI.equals(eClass.getEPackage().getNsURI()))
- {
- eStructuralFeature =
- createFeature
- (eClass,
- "instanceType",
- ecorePackage.getEDataType(),
- null,
- 1,
- 1);
-
- ((EReference)eStructuralFeature).setResolveProxies(false);
- }
- }
- else
- {
- extendedMetaData.setContentKind(eClass, baseContentKind);
- }
- }
-
- // 51210
- // extendedMetaData.setContent(eClass, contentParticle);
-
- XSDAnnotation xsdAnnotation = xsdComplexTypeDefinition.getAnnotation();
- if (xsdAnnotation != null)
- {
- List applicationInformationList = xsdAnnotation.getApplicationInformation(EcorePackage.eNS_URI);
- for (Iterator i = applicationInformationList.iterator(); i.hasNext(); )
- {
- Element applicationInformation = (Element)i.next();
- if ("operations".equals(applicationInformation.getAttributeNS(EcorePackage.eNS_URI, "key")))
- {
- for (Iterator j = getElements(applicationInformation, "operation").iterator(); j.hasNext(); )
- {
- EOperation eOperation = ecoreFactory.createEOperation();
- Element operation = (Element)j.next();
- String operationName = operation.getAttributeNS(null, "name");
- eOperation.setName(operationName);
- XSDTypeDefinition returnType = getEcoreTypeQNameAttribute(xsdComplexTypeDefinition, operation, null, "type");
- if (returnType != null)
- {
- EClassifier returnEType = getEClassifier(returnType);
- eOperation.setEType(returnEType);
- }
-
- List exceptions = getEcoreTypeQNamesAttribute(xsdComplexTypeDefinition, operation, null, "exceptions");
- for (Iterator k = exceptions.iterator(); k.hasNext(); )
- {
- XSDTypeDefinition exceptionTypeDefinition = (XSDTypeDefinition)k.next();
- eOperation.getEExceptions().add(getEClassifier(exceptionTypeDefinition));
- }
-
- for (Iterator k = getElements(operation, "parameter").iterator(); k.hasNext(); )
- {
- EParameter eParameter = ecoreFactory.createEParameter();
- Element parameter = (Element)k.next();
- String paramaterName = parameter.getAttributeNS(null, "name");
- XSDTypeDefinition parameterType = getEcoreTypeQNameAttribute(xsdComplexTypeDefinition, parameter, null, "type");
- EClassifier parameterEType = getEClassifier(parameterType);
- eParameter.setName(paramaterName);
- eParameter.setEType(parameterEType);
-
- populateETypedElement(eParameter, parameter);
- eOperation.getEParameters().add(eParameter);
- }
-
- List body = getElements(operation, "body");
- if (!body.isEmpty())
- {
- EcoreUtil.setAnnotation(eOperation, "http://www.eclipse.org/emf/2002/GenModel", "body", getText((Element)body.get(0)));
- }
-
- populateETypedElement(eOperation, operation);
- eClass.getEOperations().add(eOperation);
- }
- }
- }
- }
- return eClass;
- }
-
- private String getText(Element element)
- {
- StringBuffer text = new StringBuffer();
- for (Node node = element.getFirstChild(); node != null; node = node.getNextSibling())
- {
- switch (node.getNodeType())
- {
- case Node.TEXT_NODE:
- case Node.CDATA_SECTION_NODE:
- {
- text.append(node.getNodeValue());
- }
- }
- }
- return text.toString();
- }
-
- private List getElements(Element element, String localName)
- {
- List result = new ArrayList();
- for (Node node = element.getFirstChild(); node != null; node = node.getNextSibling())
- {
- if (node.getNodeType() == Node.ELEMENT_NODE)
- {
- Element child = (Element)node;
- if (localName.equals(child.getLocalName()) && child.getNamespaceURI() == null)
- {
- result.add(child);
- }
- }
- }
- return result;
- }
-
- protected EStructuralFeature createFeature
- (EClass eClass, String name, EClassifier type, XSDComponent xsdComponent, int minOccurs, int maxOccurs)
- {
- if (xsdComponent != null)
- {
- XSDSchema containingXSDSchema = xsdComponent.getSchema();
- if (containingXSDSchema != null && !xsdSchemas.contains(containingXSDSchema))
- {
- xsdSchemas.add(containingXSDSchema);
- addInput(containingXSDSchema);
- validate(containingXSDSchema);
- }
- }
- else if (extendedMetaData.getContentKind(eClass) == ExtendedMetaData.MIXED_CONTENT)
- {
- if (type == ecorePackage.getEFeatureMapEntry())
- {
- EAttribute eAttribute = ecoreFactory.createEAttribute();
- setAnnotations(eAttribute, xsdComponent);
- eAttribute.setName(Character.toLowerCase(name.charAt(0)) + name.substring(1));
- eAttribute.setUnique(false);
- eAttribute.setEType(type);
- eAttribute.setLowerBound(minOccurs);
- eAttribute.setUpperBound(maxOccurs);
- eClass.getEStructuralFeatures().add(eAttribute);
- extendedMetaData.setFeatureKind(eAttribute, ExtendedMetaData.ELEMENT_WILDCARD_FEATURE);
- extendedMetaData.setName(eAttribute, ":" + eAttribute.getName());
- return eAttribute;
- }
- else
- {
- EReference eReference = ecoreFactory.createEReference();
- setAnnotations(eReference, xsdComponent);
- eReference.setName(name);
- eReference.setEType(ecorePackage.getEStringToStringMapEntry());
- eReference.setLowerBound(0);
- eReference.setUpperBound(-1);
- eReference.setContainment(true);
- eReference.setResolveProxies(false);
- eReference.setTransient(true);
- eClass.getEStructuralFeatures().add(eReference);
- extendedMetaData.setFeatureKind(eReference, ExtendedMetaData.ATTRIBUTE_FEATURE);
- return eReference;
- }
- }
-
- if (type instanceof EClass)
- {
- EReference eReference = ecoreFactory.createEReference();
- setAnnotations(eReference, xsdComponent);
- eReference.setName(Character.toLowerCase(name.charAt(0)) + name.substring(1));
- eReference.setEType(type);
- eReference.setLowerBound(minOccurs);
- eReference.setUpperBound(maxOccurs);
-
- eClass.getEStructuralFeatures().add(eReference);
- if (xsdComponent == null || xsdComponent instanceof XSDSimpleTypeDefinition)
- {
- extendedMetaData.setName(eReference, ":" + eClass.getEAllStructuralFeatures().indexOf(eReference));
- extendedMetaData.setFeatureKind(eReference, ExtendedMetaData.SIMPLE_FEATURE);
- eReference.setResolveProxies(!isLocalReferenceType((XSDSimpleTypeDefinition)xsdComponent));
- }
- else
- {
- map(xsdComponent, eReference);
- if (xsdComponent instanceof XSDParticle)
- {
- eReference.setContainment(true);
- eReference.setResolveProxies(false);
-
- XSDParticle xsdParticle = (XSDParticle)xsdComponent;
-
- XSDTerm xsdTerm = ((XSDParticle)xsdComponent).getTerm();
- if (xsdTerm instanceof XSDElementDeclaration)
- {
- XSDElementDeclaration xsdElementDeclaration = (XSDElementDeclaration)xsdTerm;
- extendedMetaData.setFeatureKind(eReference, ExtendedMetaData.ELEMENT_FEATURE);
- extendedMetaData.setName(eReference, xsdElementDeclaration.getName());
- extendedMetaData.setNamespace(eReference, xsdElementDeclaration.getTargetNamespace());
-
- XSDTypeDefinition xsdType = getEffectiveTypeDefinition(xsdParticle, xsdElementDeclaration);
- if (xsdType instanceof XSDSimpleTypeDefinition)
- {
- eReference.setContainment(false);
- eReference.setResolveProxies(!isLocalReferenceType((XSDSimpleTypeDefinition)xsdType));
- }
-
- if (maxOccurs == 1 && xsdElementDeclaration.isNillable())
- {
- eReference.setUnsettable(true);
- }
-
- if (xsdElementDeclaration.isAbstract())
- {
- eReference.setChangeable(false);
- }
-
- String opposite = getEcoreAttribute(xsdParticle, "opposite");
- if (opposite != null)
- {
- eReferenceToOppositeNameMap.put(eReference, opposite);
- }
- }
- else if (xsdTerm instanceof XSDWildcard)
- {
- // EATM shouldn't happen
- XSDWildcard xsdWildcard = (XSDWildcard)xsdTerm;
- extendedMetaData.setFeatureKind(eReference, ExtendedMetaData.ELEMENT_WILDCARD_FEATURE);
- extendedMetaData.setWildcards(eReference, getWildcards(xsdWildcard));
- extendedMetaData.setProcessingKind(eReference, xsdWildcard.getProcessContents().getValue() + 1);
- extendedMetaData.setName(eReference, ":" + eClass.getEAllStructuralFeatures().indexOf(eReference));
- }
- else
- {
- extendedMetaData.setFeatureKind(eReference, ExtendedMetaData.GROUP_FEATURE);
- extendedMetaData.setName(eReference, ":" + eClass.getEAllStructuralFeatures().indexOf(eReference));
- }
- }
- else if (xsdComponent instanceof XSDElementDeclaration)
- {
- XSDElementDeclaration xsdElementDeclaration = (XSDElementDeclaration)xsdComponent;
- eReference.setContainment(true);
- eReference.setResolveProxies(false);
- extendedMetaData.setFeatureKind(eReference, ExtendedMetaData.ELEMENT_FEATURE);
- extendedMetaData.setName(eReference, xsdElementDeclaration.getName());
- extendedMetaData.setNamespace(eReference, xsdElementDeclaration.getTargetNamespace());
-
- XSDElementDeclaration substitutionGroupAffiliation = xsdElementDeclaration.getSubstitutionGroupAffiliation();
- if (substitutionGroupAffiliation != null)
- {
- EStructuralFeature affiliation = getEStructuralFeature(substitutionGroupAffiliation);
- extendedMetaData.setAffiliation(eReference, affiliation);
- }
- XSDTypeDefinition xsdType = getEffectiveTypeDefinition(null, xsdElementDeclaration);
- if (xsdType instanceof XSDSimpleTypeDefinition)
- {
- eReference.setResolveProxies(!isLocalReferenceType((XSDSimpleTypeDefinition)xsdType));
- }
-
- if (maxOccurs == 1 && xsdElementDeclaration.isNillable())
- {
- eReference.setUnsettable(true);
- }
-
- if (xsdElementDeclaration.isAbstract())
- {
- eReference.setChangeable(false);
- }
- }
- else if (xsdComponent instanceof XSDAttributeUse)
- {
- String opposite = getEcoreAttribute(xsdComponent, "opposite");
- if (opposite != null)
- {
- eReferenceToOppositeNameMap.put(eReference, opposite);
- }
-
- XSDAttributeUse xsdAttributeUse = (XSDAttributeUse)xsdComponent;
- XSDAttributeDeclaration xsdAttributeDeclaration = xsdAttributeUse.getAttributeDeclaration();
- extendedMetaData.setFeatureKind(eReference, ExtendedMetaData.ATTRIBUTE_FEATURE);
- extendedMetaData.setName(eReference, xsdAttributeDeclaration.getName());
- extendedMetaData.setNamespace(eReference, xsdAttributeDeclaration.getTargetNamespace());
- eReference.setResolveProxies
- (!isLocalReferenceType((XSDSimpleTypeDefinition)getEffectiveTypeDefinition(xsdAttributeUse, xsdAttributeDeclaration)));
- }
- else if (xsdComponent instanceof XSDAttributeDeclaration)
- {
- XSDAttributeDeclaration xsdAttributeDeclaration = (XSDAttributeDeclaration)xsdComponent;
- extendedMetaData.setFeatureKind(eReference, ExtendedMetaData.ATTRIBUTE_FEATURE);
- extendedMetaData.setName(eReference, xsdAttributeDeclaration.getName());
- extendedMetaData.setNamespace(eReference, xsdAttributeDeclaration.getTargetNamespace());
- eReference.setResolveProxies
- (!isLocalReferenceType((XSDSimpleTypeDefinition)getEffectiveTypeDefinition(null, xsdAttributeDeclaration)));
- }
- }
-
- return eReference;
- }
- else
- {
- EAttribute eAttribute = ecoreFactory.createEAttribute();
- setAnnotations(eAttribute, xsdComponent);
- eAttribute.setName(Character.toLowerCase(name.charAt(0)) + name.substring(1));
- eAttribute.setUnique(false);
- eAttribute.setEType(type);
- eAttribute.setLowerBound(minOccurs);
- eAttribute.setUpperBound(maxOccurs);
- eClass.getEStructuralFeatures().add(eAttribute);
-
- if (xsdComponent == null || xsdComponent instanceof XSDSimpleTypeDefinition)
- {
- extendedMetaData.setName(eAttribute, ":" + eClass.getEAllStructuralFeatures().indexOf(eAttribute));
- extendedMetaData.setFeatureKind(eAttribute, ExtendedMetaData.SIMPLE_FEATURE);
- }
- else
- {
- map(xsdComponent, eAttribute);
- if (xsdComponent instanceof XSDAttributeUse)
- {
- XSDAttributeUse xsdAttributeUse = (XSDAttributeUse)xsdComponent;
- XSDAttributeDeclaration xsdAttributeDeclaration = xsdAttributeUse.getAttributeDeclaration();
- extendedMetaData.setFeatureKind(eAttribute, ExtendedMetaData.ATTRIBUTE_FEATURE);
- extendedMetaData.setName(eAttribute, xsdAttributeDeclaration.getName());
- extendedMetaData.setNamespace(eAttribute, xsdAttributeDeclaration.getTargetNamespace());
-
- String defaultValue = getEcoreAttribute(xsdComponent, "default");
- if (defaultValue == null)
- {
- defaultValue = xsdAttributeUse.getLexicalValue();
- }
- eAttribute.setDefaultValueLiteral(defaultValue);
- initialize(eAttribute, (XSDSimpleTypeDefinition)getEffectiveTypeDefinition(xsdAttributeUse, xsdAttributeDeclaration));
- }
- else if (xsdComponent instanceof XSDAttributeDeclaration)
- {
- XSDAttributeDeclaration xsdAttributeDeclaration = (XSDAttributeDeclaration)xsdComponent;
- extendedMetaData.setFeatureKind(eAttribute, ExtendedMetaData.ATTRIBUTE_FEATURE);
- extendedMetaData.setName(eAttribute, xsdAttributeDeclaration.getName());
- extendedMetaData.setNamespace(eAttribute, xsdAttributeDeclaration.getTargetNamespace());
-
- eAttribute.setDefaultValueLiteral(xsdAttributeDeclaration.getLexicalValue());
- initialize(eAttribute, (XSDSimpleTypeDefinition)getEffectiveTypeDefinition(null, xsdAttributeDeclaration));
- }
- else if (xsdComponent instanceof XSDParticle)
- {
- XSDTerm xsdTerm = ((XSDParticle)xsdComponent).getTerm();
- if (xsdTerm instanceof XSDElementDeclaration)
- {
- XSDElementDeclaration xsdElementDeclaration = (XSDElementDeclaration)xsdTerm;
- extendedMetaData.setFeatureKind(eAttribute, ExtendedMetaData.ELEMENT_FEATURE);
- extendedMetaData.setName(eAttribute, xsdElementDeclaration.getName());
- extendedMetaData.setNamespace(eAttribute, xsdElementDeclaration.getTargetNamespace());
-
- eAttribute.setDefaultValueLiteral(xsdElementDeclaration.getLexicalValue());
- XSDTypeDefinition xsdType = getEffectiveTypeDefinition(xsdComponent, xsdElementDeclaration);
- if (xsdType instanceof XSDSimpleTypeDefinition)
- {
- initialize(eAttribute, (XSDSimpleTypeDefinition)xsdType);
- }
-
- if (xsdElementDeclaration.isNillable())
- {
- if (!canSupportNull((EDataType)type))
- {
- eAttribute.setEType(type = (EDataType)typeToTypeObjectMap.get(type));
- }
- if (maxOccurs == 1)
- {
- eAttribute.setUnsettable(true);
- }
- }
-
- if (xsdElementDeclaration.isAbstract())
- {
- eAttribute.setChangeable(false);
- }
- }
- else if (xsdTerm instanceof XSDWildcard)
- {
- XSDWildcard xsdWildcard = (XSDWildcard)xsdTerm;
- extendedMetaData.setFeatureKind(eAttribute, ExtendedMetaData.ELEMENT_WILDCARD_FEATURE);
- extendedMetaData.setWildcards(eAttribute, getWildcards(xsdWildcard));
- extendedMetaData.setProcessingKind(eAttribute, xsdWildcard.getProcessContents().getValue() + 1);
- extendedMetaData.setName(eAttribute, ":" + eClass.getEAllStructuralFeatures().indexOf(eAttribute));
- }
- else
- {
- extendedMetaData.setFeatureKind(eAttribute, ExtendedMetaData.GROUP_FEATURE);
- }
- }
- else if (xsdComponent instanceof XSDWildcard)
- {
- XSDWildcard xsdWildcard = (XSDWildcard)xsdComponent;
- extendedMetaData.setFeatureKind(eAttribute, ExtendedMetaData.ATTRIBUTE_WILDCARD_FEATURE);
- extendedMetaData.setWildcards(eAttribute, getWildcards(xsdWildcard));
- extendedMetaData.setProcessingKind(eAttribute, xsdWildcard.getProcessContents().getValue() + 1);
- extendedMetaData.setName(eAttribute, ":" + eClass.getEAllStructuralFeatures().indexOf(eAttribute));
- }
- else if (xsdComponent instanceof XSDElementDeclaration)
- {
- XSDElementDeclaration xsdElementDeclaration = (XSDElementDeclaration)xsdComponent;
- extendedMetaData.setFeatureKind(eAttribute, ExtendedMetaData.ELEMENT_FEATURE);
- extendedMetaData.setName(eAttribute, xsdElementDeclaration.getName());
- extendedMetaData.setNamespace(eAttribute, xsdElementDeclaration.getTargetNamespace());
-
- eAttribute.setDefaultValueLiteral(xsdElementDeclaration.getLexicalValue());
- XSDTypeDefinition xsdType = getEffectiveTypeDefinition(null, xsdElementDeclaration);
- if (xsdType instanceof XSDSimpleTypeDefinition)
- {
- initialize(eAttribute, (XSDSimpleTypeDefinition)xsdType);
- }
-
- XSDElementDeclaration substitutionGroupAffiliation = xsdElementDeclaration.getSubstitutionGroupAffiliation();
- if (substitutionGroupAffiliation != null)
- {
- EStructuralFeature affiliation = getEStructuralFeature(substitutionGroupAffiliation);
- extendedMetaData.setAffiliation(eAttribute, affiliation);
- }
-
- if (xsdElementDeclaration.isNillable() && !canSupportNull((EDataType)type))
- {
- eAttribute.setEType(type = (EDataType)typeToTypeObjectMap.get(type));
- if (maxOccurs == 1)
- {
- eAttribute.setUnsettable(true);
- }
- }
-
- if (xsdElementDeclaration.isAbstract())
- {
- eAttribute.setChangeable(false);
- }
- }
- }
-
- if (maxOccurs == 1 && (type.getDefaultValue() != null || eAttribute.getDefaultValueLiteral() != null))
- {
- eAttribute.setUnsettable(true);
- }
-
- return eAttribute;
- }
- }
-
- protected XSDTypeDefinition getEffectiveTypeDefinition(XSDComponent xsdComponent, XSDFeature xsdFeature)
- {
- return xsdFeature == null ?
- ((XSDComplexTypeDefinition)xsdComponent.eContainer()).getSimpleType() : xsdFeature.getType();
- }
-
- protected EStructuralFeature createFeature
- (EClass eClass, XSDElementDeclaration xsdElementDeclaration, String name, XSDComponent xsdComponent, int minOccurs, int maxOccurs)
- {
- XSDTypeDefinition elementTypeDefinition = getEffectiveTypeDefinition(xsdComponent, xsdElementDeclaration);
- EClassifier eClassifier = getEClassifier(elementTypeDefinition);
-
- XSDTypeDefinition referenceType = getEcoreTypeQNameAttribute(xsdComponent, "reference");
- if (referenceType == null)
- {
- referenceType = getEcoreTypeQNameAttribute(xsdElementDeclaration, "reference");
- }
- if (referenceType != null)
- {
- EClassifier referenceClassifier = getEClassifier(referenceType);
- boolean needsHolder = false;
- if (elementTypeDefinition instanceof XSDSimpleTypeDefinition)
- {
- XSDSimpleTypeDefinition xsdSimpleTypeDefinition = (XSDSimpleTypeDefinition)elementTypeDefinition;
- if (xsdSimpleTypeDefinition.getVariety() == XSDVariety.LIST_LITERAL)
- {
- needsHolder = true;
-
- EPackage holderPackage = getEPackage(xsdElementDeclaration);
- String holderName = xsdElementDeclaration.getName() + ":holder";
- EClass holderClass = (EClass)extendedMetaData.getType(holderPackage, holderName);
- if (holderClass == null)
- {
- // Create a holder class like an anonymous complex type.
- //
- holderClass = ecoreFactory.createEClass();
- setAnnotations(holderClass, xsdElementDeclaration);
- holderClass.setName(validName(holderName, true));
- extendedMetaData.setName(holderClass, holderName);
- extendedMetaData.setContentKind(holderClass, ExtendedMetaData.SIMPLE_CONTENT);
-
- addToSortedList(holderPackage.getEClassifiers(), holderClass);
-
- EReference holderReference =
- (EReference)createFeature
- (holderClass,
- "value",
- referenceClassifier,
- null,
- 0,
- -1);
-
- holderReference.setResolveProxies(!isLocalReferenceType(xsdSimpleTypeDefinition));
- }
- referenceClassifier = holderClass;
- }
- }
- EStructuralFeature result =
- createFeature
- (eClass,
- name,
- referenceClassifier,
- xsdComponent,
- minOccurs,
- maxOccurs);
- ((EReference)result).setContainment(needsHolder);
- if (needsHolder)
- {
- ((EReference)result).setUnsettable(false);
- ((EReference)result).setResolveProxies(false);
- }
- initialize(result, xsdElementDeclaration, xsdComponent);
- return result;
- }
- else
- {
- EStructuralFeature result =
- createFeature
- (eClass,
- name,
- eClassifier,
- xsdComponent,
- minOccurs,
- maxOccurs);
- initialize(result, xsdElementDeclaration, xsdComponent);
- return result;
- }
- }
-
- protected EStructuralFeature createFeature
- (EClass eClass, XSDAttributeDeclaration xsdAttributeDeclaration, String name, XSDComponent xsdComponent, boolean isRequired)
- {
- XSDSimpleTypeDefinition attributeTypeDefinition = (XSDSimpleTypeDefinition)getEffectiveTypeDefinition(xsdComponent, xsdAttributeDeclaration);
- if (attributeTypeDefinition == null)
- {
- attributeTypeDefinition = xsdComponent.getSchema().getSchemaForSchema().resolveSimpleTypeDefinition("anySimpleType");
- }
-
- XSDTypeDefinition referenceType = getEcoreTypeQNameAttribute(xsdComponent, "reference");
- if (referenceType == null && xsdAttributeDeclaration != null)
- {
- referenceType = getEcoreTypeQNameAttribute(xsdAttributeDeclaration, "reference");
- }
- if (referenceType != null)
- {
- int lowerBound = isRequired ? 1 : 0;
- int upperBound = 1;
- if (attributeTypeDefinition.getVariety() == XSDVariety.LIST_LITERAL)
- {
- XSDLengthFacet xsdLengthFacet = attributeTypeDefinition.getEffectiveLengthFacet();
- if (isRequired)
- {
- if (xsdLengthFacet != null)
- {
- lowerBound = xsdLengthFacet.getValue();
- }
- else
- {
- XSDMinLengthFacet xsdMinLengthFacet = attributeTypeDefinition.getEffectiveMinLengthFacet();
- if (xsdMinLengthFacet != null)
- {
- lowerBound = xsdMinLengthFacet.getValue();
- }
- }
- }
- if (xsdLengthFacet != null)
- {
- upperBound = xsdLengthFacet.getValue();
- }
- else
- {
- XSDMaxLengthFacet xsdMaxLengthFacet = attributeTypeDefinition.getEffectiveMaxLengthFacet();
- if (xsdMaxLengthFacet != null)
- {
- upperBound = xsdMaxLengthFacet.getValue();
- }
- else
- {
- upperBound = -1;
- }
- }
- }
-
- EClassifier referenceClassifier = getEClassifier(referenceType);
- EStructuralFeature result =
- createFeature
- (eClass,
- name,
- referenceClassifier,
- xsdComponent,
- lowerBound,
- upperBound);
- initialize(result, xsdAttributeDeclaration, xsdComponent);
- return result;
- }
- else
- {
- boolean isMany =
- attributeTypeDefinition.getVariety() == XSDVariety.LIST_LITERAL &&
- xsdComponent instanceof XSDAttributeUse &&
- "true".equals(getEcoreAttribute(xsdComponent, "many"));
- if (isMany)
- {
- EDataType eDataType = getEDataType(attributeTypeDefinition.getItemTypeDefinition());
- XSDLengthFacet xsdLengthFacet = attributeTypeDefinition.getEffectiveLengthFacet();
- int lowerBound = isRequired ? 1 : 0;
- int upperBound = -1;
- if (isRequired)
- {
- if (xsdLengthFacet != null)
- {
- lowerBound = xsdLengthFacet.getValue();
- }
- else
- {
- XSDMinLengthFacet xsdMinLengthFacet = attributeTypeDefinition.getEffectiveMinLengthFacet();
- if (xsdMinLengthFacet != null)
- {
- lowerBound = xsdMinLengthFacet.getValue();
- }
- }
- }
- if (xsdLengthFacet != null)
- {
- upperBound = xsdLengthFacet.getValue();
- }
- else
- {
- XSDMaxLengthFacet xsdMaxLengthFacet = attributeTypeDefinition.getEffectiveMaxLengthFacet();
- if (xsdMaxLengthFacet != null)
- {
- upperBound = xsdMaxLengthFacet.getValue();
- }
- }
- EStructuralFeature result =
- createFeature
- (eClass,
- name,
- eDataType,
- xsdComponent,
- lowerBound,
- upperBound);
- initialize(result, xsdAttributeDeclaration, xsdComponent);
- return result;
- }
- else
- {
- EDataType eDataType = getEDataType(attributeTypeDefinition);
- EStructuralFeature result =
- createFeature
- (eClass,
- name,
- eDataType,
- xsdComponent,
- isRequired ? 1 : 0,
- 1);
- initialize(result, xsdAttributeDeclaration, xsdComponent);
- return result;
- }
- }
- }
-
- public EStructuralFeature getEStructuralFeature(XSDFeature xsdFeature)
- {
- if ("true".equals(getEcoreAttribute(xsdFeature, "ignore"))) return null;
- EStructuralFeature eStructuralFeature = (EStructuralFeature)xsdComponentToEModelElementMap.get(xsdFeature);
- if (eStructuralFeature == null)
- {
- EPackage ePackage = getEPackage(xsdFeature);
- EClass documentEClass = extendedMetaData.getDocumentRoot(ePackage);
- if (documentEClass == null)
- {
- createDocumentRoot(xsdFeature.getSchema(), ePackage);
- }
-
- String name = getEcoreAttribute(xsdFeature, "name");
- if (name == null)
- {
- name= validName(xsdFeature.getName(), true);
- }
-
- if (xsdFeature instanceof XSDElementDeclaration)
- {
- // Mark the bound as unspecified so that it won't be considered many
- // but can nevertheless be recognized as being unspecified and perhaps still be treat as many.
- //
- EStructuralFeature result =
- createFeature(documentEClass, (XSDElementDeclaration)xsdFeature, name, xsdFeature, 0, ETypedElement.UNSPECIFIED_MULTIPLICITY);
-
- result.setDerived(true);
- result.setTransient(true);
- result.setVolatile(true);
- return result;
- }
- else
- {
- EStructuralFeature result =
- createFeature(documentEClass, (XSDAttributeDeclaration)xsdFeature, name, xsdFeature, false);
- return result;
- }
- }
-
- return eStructuralFeature;
- }
-
- public void generate(XSDSchema xsdSchema)
- {
- this.rootSchema = xsdSchema;
- if (xsdSchemas.add(xsdSchema))
- {
- addInput(xsdSchema);
- validate(xsdSchema);
- }
-
- Collection visitedElementDeclarations = new ArrayList();
- Collection elementDeclarations = new ArrayList(xsdSchema.getElementDeclarations());
-
- Collection visitedAttributeDeclarations = new ArrayList();
- Collection attributeDeclarations = new ArrayList(xsdSchema.getAttributeDeclarations());
-
- Collection visitedTypeDefinitions = new ArrayList();
- Collection typeDefinitions = new ArrayList(xsdSchema.getTypeDefinitions());
-
- while (!elementDeclarations.isEmpty() || !attributeDeclarations.isEmpty() || !typeDefinitions.isEmpty())
- {
- for (Iterator i = elementDeclarations.iterator(); i.hasNext(); )
- {
- XSDElementDeclaration xsdElementDeclaration = (XSDElementDeclaration)i.next();
- getEStructuralFeature(xsdElementDeclaration);
- }
- visitedElementDeclarations.addAll(elementDeclarations);
- elementDeclarations = new ArrayList(xsdSchema.getElementDeclarations());
- elementDeclarations.removeAll(visitedElementDeclarations);
-
- for (Iterator i = attributeDeclarations.iterator(); i.hasNext(); )
- {
- XSDAttributeDeclaration xsdAttributeDeclaration = (XSDAttributeDeclaration)i.next();
- if (!XSDConstants.isSchemaInstanceNamespace(xsdAttributeDeclaration.getTargetNamespace()))
- {
- getEStructuralFeature(xsdAttributeDeclaration);
- }
- }
- visitedAttributeDeclarations.addAll(attributeDeclarations);
- attributeDeclarations = new ArrayList(xsdSchema.getAttributeDeclarations());
- attributeDeclarations.removeAll(visitedAttributeDeclarations);
-
- for (Iterator i = typeDefinitions.iterator(); i.hasNext(); )
- {
- XSDTypeDefinition xsdTypeDefinition = (XSDTypeDefinition)i.next();
- getEClassifier(xsdTypeDefinition);
- }
- visitedTypeDefinitions.addAll(typeDefinitions);
- typeDefinitions = new ArrayList(xsdSchema.getTypeDefinitions());
- typeDefinitions.removeAll(visitedTypeDefinitions);
- }
-
- resolveNameConflicts();
-
- for (Iterator i = xsdSchemas.iterator(); i.hasNext(); )
- {
- XSDSchema generatedXSDSchema = (XSDSchema)i.next();
- EPackage ePackage = (EPackage)targetNamespaceToEPackageMap.get(generatedXSDSchema.getTargetNamespace());
- if (ePackage != null)
- {
- String packageName= getEcoreAttribute(generatedXSDSchema, "package");
- if (packageName != null)
- {
- ePackage.setName(packageName);
- }
- String packageNsPrefix= getEcoreAttribute(generatedXSDSchema, "nsPrefix");
- if (packageNsPrefix != null)
- {
- ePackage.setNsPrefix(packageNsPrefix);
- }
- }
- }
-
- for (Iterator i = eReferenceToOppositeNameMap.entrySet().iterator(); i.hasNext(); )
- {
- Map.Entry entry = (Map.Entry)i.next();
- EReference eReference = (EReference)entry.getKey();
- String opposite = (String)entry.getValue();
- EClass oppositeEClass = eReference.getEReferenceType();
- if (eReference.getEOpposite() == null)
- {
- EStructuralFeature eOppositeFeature = oppositeEClass.getEStructuralFeature(opposite);
-
- // Match by XML name if this fails.
- if (eOppositeFeature == null)
- {
- for (Iterator j = oppositeEClass.getEAllStructuralFeatures().iterator(); j.hasNext(); )
- {
- EStructuralFeature feature = (EStructuralFeature)j.next();
- if (opposite.equals(extendedMetaData.getName(feature)))
- {
- eOppositeFeature = feature;
- break;
- }
- }
- }
-
- if (eOppositeFeature instanceof EReference)
- {
- EReference eOpposite = (EReference)eOppositeFeature;
- eOpposite.setEOpposite(eReference);
- eReference.setEOpposite(eOpposite);
- }
- }
-
- if (eReference.getEOpposite() == null && eReference.isContainment())
- {
- EReference eOpposite = ecoreFactory.createEReference();
- eOpposite.setName(opposite);
- eOpposite.setEType(eReference.getEContainingClass());
- eOpposite.setLowerBound(0);
- eOpposite.setEOpposite(eReference);
- eReference.setEOpposite(eOpposite);
- eOpposite.setTransient(true);
- oppositeEClass.getEStructuralFeatures().add(eOpposite);
- }
- }
-
- eReferenceToOppositeNameMap.clear();
- }
-
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/CopyHelperImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/CopyHelperImpl.java
deleted file mode 100644
index d768076ecb..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/CopyHelperImpl.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.util.EcoreUtil.Copier;
-
-import commonj.sdo.ChangeSummary;
-import commonj.sdo.DataObject;
-import commonj.sdo.helper.CopyHelper;
-
-
-/**
- * A helper for copying DataObjects.
- */
-public class CopyHelperImpl implements CopyHelper
-{
- public DataObject copyShallow(DataObject dataObject)
- {
- Copier copier = new Copier()
- {
- protected void copyContainment(EReference eReference, EObject eObject, EObject copyEObject)
- {
- }
-
- protected void copyAttribute(EAttribute eAttribute, EObject eObject, EObject copyEObject) {
- if(("ChangeSummaryType".equals(eAttribute.getEType().getName()) && "commonj.sdo".equals(eAttribute.getEType().getEPackage().getNsURI()))) {
- boolean isLogging = ((ChangeSummary)eObject.eGet(eAttribute)).isLogging();
- ChangeSummary destSum = (ChangeSummary)copyEObject.eGet(eAttribute);
- if(isLogging) {
- if(!destSum.isLogging()) destSum.beginLogging();
- } else {
- if(destSum.isLogging()) destSum.endLogging();
- }
- } else {
- super.copyAttribute(eAttribute, eObject, copyEObject);
- }
- }
- };
- EObject result = copier.copy((EObject)dataObject);
- copier.copyReferences();
- return (DataObject)result;
- }
-
- public DataObject copy(DataObject dataObject)
- {
- Copier copier = new Copier()
- {
-
- protected void copyAttribute(EAttribute eAttribute, EObject eObject, EObject copyEObject) {
- if(("ChangeSummaryType".equals(eAttribute.getEType().getName()) && "commonj.sdo".equals(eAttribute.getEType().getEPackage().getNsURI()))) {
- throw new UnsupportedOperationException("This will be implemented when change summary serialization/deserialization is in place");
- } else {
- super.copyAttribute(eAttribute, eObject, copyEObject);
- }
- }
- };
- EObject result = copier.copy((EObject)dataObject);
- copier.copyReferences();
- return (DataObject)result;
- }
-
-
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/CrossScopeCopyHelperImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/CrossScopeCopyHelperImpl.java
deleted file mode 100644
index 3f51876035..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/CrossScopeCopyHelperImpl.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.ecore.util.FeatureMap;
-import org.eclipse.emf.ecore.util.FeatureMapUtil;
-import org.eclipse.emf.ecore.util.InternalEList;
-import org.eclipse.emf.ecore.util.EcoreUtil.Copier;
-
-import commonj.sdo.DataObject;
-import commonj.sdo.Type;
-import commonj.sdo.helper.CopyHelper;
-import commonj.sdo.helper.TypeHelper;
-
-/**
- * A CopyHelper implementation that creates the copy objects in a specific metadata scope.
- * The target scope must contain a compatible version of the Types needed to create the copy objects.
- */
-public class CrossScopeCopyHelperImpl implements CopyHelper
-{
- protected TypeHelper scope;
-
- public CrossScopeCopyHelperImpl(TypeHelper targetScope)
- {
- scope = targetScope;
- }
-
- public DataObject copyShallow(DataObject dataObject)
- {
- Copier copier = new CrossScopeCopier()
- {
- protected void copyContainment(EReference eReference, EObject eObject, EObject copyEObject)
- {
- }
- protected void copyAttribute(EAttribute eAttribute, EObject eObject, EObject copyEObject)
- {
- if (eObject.eIsSet(eAttribute) && !FeatureMapUtil.isFeatureMap(eAttribute))
- {
- super.copyAttribute(eAttribute,eObject,copyEObject);
- }
- }
- };
- EObject result = copier.copy((EObject)dataObject);
- copier.copyReferences();
- return (DataObject)result;
- }
-
- public DataObject copy(DataObject dataObject)
- {
- Copier copier = new CrossScopeCopier();
- DataObject result = (DataObject)copier.copy((EObject)dataObject);
- copier.copyReferences();
- return (DataObject)result;
- }
-
- protected class CrossScopeCopier extends EcoreUtil.Copier
- {
- protected boolean useOriginalReferences = false;
-
- protected EClass getTarget(EClass eClass)
- {
- EClass target = (EClass)get(eClass);
- if (target == null)
- {
- Type type = (Type)eClass;
- target = (EClass)scope.getType(type.getURI(), type.getName());
- }
- return target;
- }
-
- protected EStructuralFeature getTarget(EStructuralFeature eStructuralFeature)
- {
- EClass eClass = getTarget(eStructuralFeature.getEContainingClass());
- EStructuralFeature targetEf = eClass.getEStructuralFeature(eStructuralFeature.getName());
- return targetEf;
- }
-
- /**
- * This Method WILL BE REMOVED when EMF 3.0 is available
- */
- public void copyReferences()
- {
- for (Iterator i = entrySet().iterator(); i.hasNext();)
- {
- Map.Entry entry = (Map.Entry)i.next();
- EObject eObject = (EObject)entry.getKey();
- EObject copyEObject = (EObject)entry.getValue();
- EClass eClass = eObject.eClass();
- for (int j = 0, size = eClass.getFeatureCount(); j < size; ++j)
- {
- EStructuralFeature eStructuralFeature = eClass.getEStructuralFeature(j);
- if (eStructuralFeature.isChangeable() && !eStructuralFeature.isDerived())
- {
- if (eStructuralFeature instanceof EReference)
- {
- EReference eReference = (EReference)eStructuralFeature;
- if (!eReference.isContainment() && !eReference.isContainer())
- {
- copyReference(eReference, eObject, copyEObject);
- }
- }
- else if (FeatureMapUtil.isFeatureMap(eStructuralFeature))
- {
- FeatureMap featureMap = (FeatureMap)eObject.eGet(eStructuralFeature);
- FeatureMap copyFeatureMap = (FeatureMap)copyEObject.eGet(getTarget(eStructuralFeature));
- int copyFeatureMapSize = copyFeatureMap.size();
- for (int k = 0, featureMapSize = featureMap.size(); k < featureMapSize; ++k)
- {
- EStructuralFeature feature = featureMap.getEStructuralFeature(k);
- if (feature instanceof EReference)
- {
- Object referencedEObject = featureMap.getValue(k);
- Object copyReferencedEObject = get(referencedEObject);
- if (copyReferencedEObject == null && referencedEObject != null)
- {
- EReference reference = (EReference)feature;
- if (!useOriginalReferences || reference.isContainment() || reference.getEOpposite() != null)
- {
- continue;
- }
- copyReferencedEObject = referencedEObject;
- }
- // If we can't add it, it must aleady be in the list so find it and move it to the end.
- //
- if (!copyFeatureMap.add(feature, copyReferencedEObject))
- {
- for (int l = 0; l < copyFeatureMapSize; ++l)
- {
- if (copyFeatureMap.getEStructuralFeature(l) == feature && copyFeatureMap.getValue(l) == copyReferencedEObject)
- {
- copyFeatureMap.move(copyFeatureMap.size() - 1, l);
- --copyFeatureMapSize;
- break;
- }
- }
- }
- }
- else
- {
- copyFeatureMap.add(featureMap.get(k));
- }
- }
- }
- }
- }
- }
- }
-
- /**
- * This Method WILL BE REMOVED when EMF 3.0 is available
- */
- protected void copyReference(EReference eReference, EObject eObject, EObject copyEObject)
- {
- if (eObject.eIsSet(eReference))
- {
- if (eReference.isMany())
- {
- InternalEList source = (InternalEList)eObject.eGet(eReference);
- InternalEList target = (InternalEList)copyEObject.eGet(getTarget(eReference));
- if (source.isEmpty())
- {
- target.clear();
- }
- else
- {
- boolean isBidirectional = eReference.getEOpposite() != null;
- int index = 0;
- for (Iterator k = resolveProxies ? source.iterator() : source.basicIterator(); k.hasNext();)
- {
- Object referencedEObject = k.next();
- Object copyReferencedEObject = get(referencedEObject);
- if (copyReferencedEObject == null)
- {
- if (useOriginalReferences && !isBidirectional)
- {
- target.addUnique(index, referencedEObject);
- ++index;
- }
- }
- else
- {
- if (isBidirectional)
- {
- int position = target.indexOf(copyReferencedEObject);
- if (position == -1)
- {
- target.addUnique(index, copyReferencedEObject);
- }
- else if (index != position)
- {
- target.move(index, copyReferencedEObject);
- }
- }
- else
- {
- target.addUnique(index, copyReferencedEObject);
- }
- ++index;
- }
- }
- }
- }
- else
- {
- Object referencedEObject = eObject.eGet(eReference, resolveProxies);
- if (referencedEObject == null)
- {
- copyEObject.eSet(getTarget(eReference), null);
- }
- else
- {
- Object copyReferencedEObject = get(referencedEObject);
- if (copyReferencedEObject == null)
- {
- if (useOriginalReferences && eReference.getEOpposite() == null)
- {
- copyEObject.eSet(getTarget(eReference), referencedEObject);
- }
- }
- else
- {
- copyEObject.eSet(getTarget(eReference), copyReferencedEObject);
- }
- }
- }
- }
- }
- }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java
deleted file mode 100644
index 774d296eae..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DataFactoryImpl.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-import org.apache.tuscany.sdo.util.DataObjectUtil;
-
-import commonj.sdo.DataObject;
-import commonj.sdo.Type;
-import commonj.sdo.helper.DataFactory;
-import commonj.sdo.helper.HelperContext;
-
-/**
- * A Factory for creating DataObjects. The created DataObjects are not connected
- * to any other DataObjects.
- */
-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);
- }
-
- public DataObject create(Type type) {
- return DataObjectUtil.create(type);
- }
-
- public HelperContext getHelperContext() {
- return helperContext;
- }
-
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DataHelperImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DataHelperImpl.java
deleted file mode 100644
index d30da1cc4a..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DataHelperImpl.java
+++ /dev/null
@@ -1,615 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.TimeZone;
-
-import org.apache.tuscany.sdo.util.DataObjectUtil;
-
-import commonj.sdo.Property;
-import commonj.sdo.Type;
-import commonj.sdo.helper.DataHelper;
-
-/**
- * Data helper methods.
- */
-public class DataHelperImpl implements DataHelper
-{
- /**
- * @param dateString - Must comply to the pattern of yyyy-MM-dd'T'HH:mm:ss'.'SSS'Z'
- * @return null if dataString couldn't be parsed
- */
- public synchronized Date toDate(String dateString)
- {
- if (dateString == null)
- {
- return null;
- }
-
- SDOSimpleDateFormat format;
- Date result = null;
- boolean negative = false;
- String formatString;
- dateString = dateString.trim();
-
- // Determine if it is a negative Date, DateTime, or Duration
-
- if (dateString.length() > 2 && dateString.charAt(0) == '-' && dateString.charAt(1) != '-')
- {
- negative = true;
- dateString = dateString.substring(1);
- }
-
- // SDO Date Format ends with a Z
-
- if (dateString.endsWith("Z"))
- {
- if (dateString.indexOf('.') != -1)
- formatString = new String("yyyy-MM-dd'T'HH:mm:ss'.'S'Z'");
- else
- formatString = new String ("yyyy-MM-dd'T'HH:mm:ss'Z'");
-
- format = new SDOSimpleDateFormat(formatString);
- format.setTimeZone(TimeZone.getTimeZone("UTC"));
-
- result = checkFormat(dateString, format);
-
- // If no match, continue to try further possibilities
-
- if (result != null)
- {
- if (negative)
- return handleBCE(result);
- else
- return result;
- }
-
- }
-
- // Duration format begins with a P
-
- if (dateString.startsWith("P"))
- {
- // Remove any spaces in the dateString
-
- String durationString = dateString.replaceAll(" ", "");
-
- // Build the formatString based on the contents of dateString
-
- formatString = obtainDurationFormats(durationString);
- format = new SDOSimpleDateFormat(formatString);
- result = checkFormat(durationString, format);
- if (result != null)
- {
- if (negative)
- return handleNegative(result);
- else
- return result;
- }
- }
-
- formatString = obtainSpecificFormat(dateString);
-
- if (formatString != null)
- {
- format = new SDOSimpleDateFormat(formatString);
- result = checkFormat(dateString, format);
-
- if (result != null)
- {
- if (negative)
- return handleBCE(result);
- else
- return result;
- }
- }
-
- return null;
- }
-
- private synchronized Date checkFormat(String dateString, SDOSimpleDateFormat format)
- {
- String formatPattern = format.toPattern();
- StringBuffer addedFields = new StringBuffer();
- String fieldsString, parseString;
- SDOSimpleDateFormat compositeFormat;
- Date dateValue;
-
- // For certain permissable input strings (e.g. those resulting from toYear
- // toDay, toTime), there are fields missing which when converted to Date have
- // default values. (e.g. Year -> 1970). Because of this, there can be great
- // variation in how daylight savings time is accounted for. (e.g. In 1970 Britain
- // was on DST year round, and during the summer of 1944 was on double daylight time.)
- // Because these possible variations exist, it is assumed that the user would prefer
- // the current handling of daylight savings time. As such, the year, month and day
- // will default to their current values when absent. (The user should not be checking
- // for Year=1970 (etc.) as evidence of taking the default, as explicitly setting a
- // year to 1970 is valid and would then not be an instance of a default taken.)
-
- if (!(formatPattern.startsWith("P")))
- {
- if (formatPattern.indexOf('y') == -1)
- addedFields.append("yyyy ");
-
- if (formatPattern.indexOf('M') == -1)
- addedFields.append("MM ");
-
- if (formatPattern.indexOf('d') == -1)
- addedFields.append("dd ");
- }
-
- fieldsString = addedFields.toString();
-
- if (fieldsString.length() == 0)
- {
- parseString = dateString;
- compositeFormat = format;
- }
-
- else
- {
- compositeFormat = new SDOSimpleDateFormat(fieldsString);
- dateValue = new Date(System.currentTimeMillis());
- parseString = compositeFormat.format(dateValue) + dateString;
- compositeFormat.applyPattern(fieldsString + formatPattern);
- }
-
- try
- {
- return compositeFormat.parse(parseString);
- }
-
- catch (ParseException parseException)
- {
- }
-
- return null;
- }
-
- public synchronized String obtainSpecificFormat(String dateString)
- {
- StringBuffer formatBuffer = new StringBuffer();
- int colonIndex = dateString.indexOf(':');
- int hyphenIndex = dateString.indexOf('-');
-
- if (dateString.startsWith("--"))
- {
- if (dateString.charAt(2) == '-') // starts with ---
- formatBuffer.append("'---'dd");
- else if (dateString.substring(2).indexOf('-') == -1)
- formatBuffer.append("'--'MM");
- else
- formatBuffer.append("'--'MM'-'dd");
- }
-
- else if (colonIndex == 1 || colonIndex == 2)
- {
- if (dateString.indexOf('.') != -1)
- formatBuffer.append("HH:mm:ss'.'S");
- else if (dateString.substring(colonIndex + 1).indexOf(':') != -1)
- formatBuffer.append("HH:mm:ss");
- else
- formatBuffer.append("HH:mm");
- }
-
- else if (hyphenIndex != -1)
- {
- if (dateString.substring(hyphenIndex + 1).indexOf('-') == -1)
- formatBuffer.append("yyyy-MM");
- else if (colonIndex != -1)
- {
- if (dateString.indexOf('.') != -1)
- formatBuffer.append("yyyy-MM-dd'T'HH:mm:ss'.'S");
- else if (dateString.substring(colonIndex + 1).indexOf(':') != -1)
- formatBuffer.append("yyyy-MM-dd'T'HH:mm:ss");
- else
- formatBuffer.append("yyyy-MM-dd'T'HH:mm");
- }
- else
- formatBuffer.append ("yyyy-MM-dd");
- }
- else if (colonIndex == -1) // indexOf('-') == -1
- {
- formatBuffer.append("yyyy");
- }
- else
- return null;
-
- // Determine if a Time Zone is included and needs to be parsed.
- // ---------------------------------
- // The only letter allowed in the above formats is 'T'.
- // All times zones include at least one letter other than 'T'.
-
- int i = 0;
- boolean letterFound = false;
- char currentChar;
- while (i < dateString.length() && !letterFound)
- {
- currentChar = dateString.charAt(i);
- if (Character.isLetter(currentChar) && currentChar != 'T')
- letterFound = true;;
- i++;
- }
-
- if (letterFound)
- formatBuffer.append(" z");
-
- return formatBuffer.toString();
- }
-
- public synchronized String obtainDurationFormats(String dateString)
- {
- String firstPart, secondPart;
- StringBuffer formatBuffer = new StringBuffer("'P'");
-
- // Must divide it into two parts to distinguish between Months and Minutes
-
- int time_index = dateString.indexOf('T');
- if (time_index != -1)
- {
- firstPart = dateString.substring(0, time_index + 1);
- secondPart = dateString.substring(time_index);
- }
- else
- {
- firstPart = dateString;
- secondPart = null;
- }
-
- if (firstPart.indexOf('Y') != -1)
- formatBuffer.append("yyyy'Y'");
- if (firstPart.indexOf('M') != -1)
- formatBuffer.append("MM'M'");
- if (firstPart.indexOf('D') != -1)
- formatBuffer.append("dd'D'");
- if (time_index != -1)
- {
- formatBuffer.append("'T'");
-
- if (secondPart.indexOf('H') != -1)
- formatBuffer.append("HH'H'");
- if (secondPart.indexOf('M') != -1)
- formatBuffer.append("mm'M'");
- if (secondPart.indexOf("S.") != -1)
- formatBuffer.append("ss'S'.S");
- else if (secondPart.indexOf('S') != -1)
- formatBuffer.append("ss'S'");
- }
-
- return formatBuffer.toString().replaceAll("''", "");
- }
-
- // Return a negative Duration if a negative sign existed in dateString
- public synchronized Date handleNegative(Date output)
- {
- return new Date(0 - output.getTime());
- }
-
- // Return the date in BCE if a negative sign existed in dateString
-
- public synchronized Date handleBCE(Date output)
- {
- GregorianCalendar temp = new GregorianCalendar();
- temp.setTime(output);
- temp.set(GregorianCalendar.ERA, GregorianCalendar.BC);
-
- return temp.getTime();
- }
-
- public synchronized Calendar toCalendar(String dateString)
- {
- return toCalendar(dateString, null);
- }
-
- public synchronized Calendar toCalendar(String dateString, Locale locale)
- {
- if (dateString == null)
- {
- return null;
- }
-
- Date date = toDate(dateString);
- if (date == null)
- {
- return null;
- }
-
- Calendar calendar = locale != null ? new GregorianCalendar(locale) : new GregorianCalendar();
- calendar.setTime(date);
- return calendar;
- }
-
- public synchronized String toDateTime(Date date)
- {
- if (date == null)
- {
- return null;
- }
-
- SDOSimpleDateFormat f = new SDOSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.'SSS'Z'");
- f.setTimeZone(TimeZone.getTimeZone("UTC"));
-
- return f.format(date);
- }
-
- public synchronized String toDuration(Date date)
- {
- if (date == null)
- {
- return null;
- }
-
- SDOSimpleDateFormat f = new SDOSimpleDateFormat("'P'yyyy'Y' MM'M' dd'D' 'T' HH'H' mm'M' ss'S.'SSS");
-
- return f.format(date);
- }
-
- public synchronized String toTime(Date date)
- {
- if (date == null)
- {
- return null;
- }
-
- SDOSimpleDateFormat f = new SDOSimpleDateFormat("HH:mm:ss'.'SSS zz");
-
- return f.format(date);
- }
-
- public synchronized String toDay(Date date)
- {
- if (date == null)
- {
- return null;
- }
-
- SDOSimpleDateFormat f = new SDOSimpleDateFormat("---dd zz");
-
- return f.format(date);
- }
-
- public synchronized String toMonth(Date date)
- {
- if (date == null)
- {
- return null;
- }
-
- SDOSimpleDateFormat f = new SDOSimpleDateFormat("--MM zz");
-
- return f.format(date);
- }
-
- public synchronized String toMonthDay(Date date)
- {
- if (date == null)
- {
- return null;
- }
-
- SDOSimpleDateFormat f = new SDOSimpleDateFormat("--MM-dd zz");
-
- return f.format(date);
- }
-
- public synchronized String toYear(Date date)
- {
- if (date == null)
- {
- return null;
- }
-
- SDOSimpleDateFormat f = new SDOSimpleDateFormat("yyyy zz");
-
- return f.format(date);
- }
-
- public synchronized String toYearMonth(Date date)
- {
- if (date == null)
- {
- return null;
- }
-
- SDOSimpleDateFormat f = new SDOSimpleDateFormat("yyyy-MM zz");
-
- return f.format(date);
- }
-
- public synchronized String toYearMonthDay(Date date)
- {
- if (date == null)
- {
- return null;
- }
-
- SDOSimpleDateFormat f = new SDOSimpleDateFormat("yyyy-MM-dd zz");
-
- return f.format(date);
- }
-
- public synchronized String toDateTime(Calendar calendar)
- {
- if (calendar == null)
- {
- return null;
- }
-
- return toDateTime(calendar.getTime());
- }
-
- public synchronized String toDuration(Calendar calendar)
- {
- if (calendar == null)
- {
- return null;
- }
-
- return toDuration(calendar.getTime());
- }
-
- public synchronized String toTime(Calendar calendar)
- {
- if (calendar == null)
- {
- return null;
- }
-
- return toTime(calendar.getTime());
- }
-
- public synchronized String toDay(Calendar calendar)
- {
- if (calendar == null)
- {
- return null;
- }
-
- return toDay(calendar.getTime());
- }
-
- public synchronized String toMonth(Calendar calendar)
- {
- if (calendar == null)
- {
- return null;
- }
-
- return toMonth(calendar.getTime());
- }
-
- public synchronized String toMonthDay(Calendar calendar)
- {
- if (calendar == null)
- {
- return null;
- }
-
- return toMonthDay(calendar.getTime());
- }
-
- public synchronized String toYear(Calendar calendar)
- {
- if (calendar == null)
- {
- return null;
- }
-
- return toYear(calendar.getTime());
- }
-
- public synchronized String toYearMonth(Calendar calendar)
- {
- if (calendar == null)
- {
- return null;
- }
-
- return toYearMonth(calendar.getTime());
- }
-
- public synchronized String toYearMonthDay(Calendar calendar)
- {
- if (calendar == null)
- {
- return null;
- }
-
- return toYearMonthDay(calendar.getTime());
- }
-
- public Object convert(Type type, Object value)
- {
- Class typeClass = type.getInstanceClass();
- if (typeClass.isInstance(value))
- return value;
-
- if (typeClass == BigDecimal.class) {
- return DataObjectUtil.getBigDecimal(value);
- }
- else if (typeClass == BigInteger.class) {
- return DataObjectUtil.getBigInteger(value);
- }
- else if (typeClass == boolean.class || typeClass == Boolean.class) {
- return new Boolean(DataObjectUtil.getBoolean(value));
- }
- else if (typeClass == byte.class || typeClass == Byte.class) {
- return new Byte(DataObjectUtil.getByte(value));
- }
- else if (typeClass == byte[].class) {
- return DataObjectUtil.getBytes(value);
- }
- else if (typeClass == char.class || typeClass == Character.class) {
- return new Character(DataObjectUtil.getChar(value));
- }
- else if (typeClass == Date.class) {
- return DataObjectUtil.getDate(value);
- }
- else if (typeClass == double.class || typeClass == Double.class) {
- return new Double(DataObjectUtil.getDouble(value));
- }
- else if (typeClass == float.class || typeClass == Float.class) {
- return new Float(DataObjectUtil.getFloat(value));
- }
- else if (typeClass == int.class || typeClass == Integer.class) {
- return new Integer(DataObjectUtil.getInt(value));
- }
- else if (typeClass == long.class || typeClass == Long.class) {
- return new Long(DataObjectUtil.getLong(value));
- }
- else if (typeClass == short.class || typeClass == Short.class) {
- return new Short(DataObjectUtil.getShort(value));
- }
- else if (typeClass == String.class) {
- return DataObjectUtil.getString(value);
- }
-
- throw new IllegalArgumentException();
- }
-
- public Object convert(Property property, Object value)
- {
- Type type = property.getType();
- if (!property.isMany())
- {
- return convert(type, value);
- }
- else
- {
- List listValue = (List)value;
- List listResult = new ArrayList();
- for (Iterator iter = listValue.iterator(); iter.hasNext(); ) {
- listResult.add(convert(type, iter.next()));
- }
- return listResult;
- }
- }
-
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DefaultHelperContextImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DefaultHelperContextImpl.java
deleted file mode 100644
index f7ac22632a..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/DefaultHelperContextImpl.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.tuscany.sdo.helper;
-
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.impl.EPackageRegistryImpl;
-
-public class DefaultHelperContextImpl extends HelperContextImpl {
- public DefaultHelperContextImpl(final boolean extensibleNamespaces) {
- super(new SDOExtendedMetaDataImpl(new SDOPackageRegistryDelegator()), extensibleNamespaces);
- }
-
- public DefaultHelperContextImpl(final boolean extensibleNamespaces, final Map options) {
- super(new SDOExtendedMetaDataImpl(new SDOPackageRegistryDelegator()), extensibleNamespaces, options);
- }
-
- protected static class SDOPackageRegistryDelegator extends EPackageRegistryImpl.Delegator {
- /**
- * A map from class loader to its associated registry.
- */
- protected Map classLoaderToRegistryMap = new WeakHashMap();
-
- /**
- * Returns the package registry associated with the given class loader.
- * @param classLoader the class loader.
- * @return the package registry associated with the given class loader.
- */
- public synchronized EPackage.Registry getRegistry(final ClassLoader classLoader)
- {
- EPackage.Registry result = (EPackage.Registry)classLoaderToRegistryMap.get(classLoader);
- if (result == null)
- {
- if (classLoader == null)
- {
- result = HelperContextImpl.getBuiltInModelRegistry();
- }
- else
- {
- result = new EPackageRegistryImpl(getRegistry(classLoader.getParent()));
- classLoaderToRegistryMap.put(classLoader, result);
- }
- }
- return result;
- }
-
- protected EPackage.Registry delegateRegistry(final ClassLoader classLoader)
- {
- return getRegistry(classLoader);
- }
- }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/EqualityHelperImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/EqualityHelperImpl.java
deleted file mode 100644
index 0d3d8ee5b7..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/EqualityHelperImpl.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-
-import commonj.sdo.DataObject;
-import commonj.sdo.helper.EqualityHelper;
-
-
-/**
- * A helper for comparing DataObjects.
- */
-public class EqualityHelperImpl implements EqualityHelper
-{
- public boolean equalShallow(DataObject dataObject1, DataObject dataObject2)
- {
- EcoreUtil.EqualityHelper equalityHelper = new EcoreUtil.EqualityHelper()
- {
- protected boolean haveEqualFeature(EObject eObject1, EObject eObject2, EStructuralFeature feature)
- {
- if (feature instanceof EAttribute)
- {
- if(!("ChangeSummaryType".equals(feature.getEType().getName()) && "commonj.sdo".equals(feature.getEType().getEPackage().getNsURI()))) {
- boolean eIsSet = eObject1.eIsSet(feature);
- if (eIsSet != eObject2.eIsSet(feature) || !haveEqualAttribute(eObject1, eObject2, (EAttribute)feature))
- {
- return false;
- }
- }
- }
- return true;
- }
-
- protected boolean equalFeatureMapValues(Object value1, Object value2, EStructuralFeature feature)
- {
- if (feature instanceof EAttribute)
- {
- return value1 == null ? value2 == null : value1.equals(value2);
- }
- return true;
- }
- };
- return equalityHelper.equals((EObject)dataObject1, (EObject)dataObject2);
- }
-
- public boolean equal(DataObject dataObject1, DataObject dataObject2)
- {
- EcoreUtil.EqualityHelper equalityHelper = new EcoreUtil.EqualityHelper()
- {
- protected boolean haveEqualAttribute(EObject eObject1, EObject eObject2, EAttribute attribute) {
- if(("ChangeSummaryType".equals(attribute.getEType().getName()) && "commonj.sdo".equals(attribute.getEType().getEPackage().getNsURI()))) {
- throw new UnsupportedOperationException("This will be implemented when change summary serialzation/deserialization is in place");
- }
- else if( "Bytes".equals(attribute.getEType().getName()) ) {
- try
- {
- byte [] value1 = (byte [])eObject1.eGet(attribute);
- byte [] value2 = (byte [])eObject2.eGet(attribute);
-
- return( java.util.Arrays.equals(value1,value2) );
- }
- catch(Exception ex)
- {
- // if any exception is thrown, assumption is they are not equal
- return false;
- }
- }
- else {
- return super.haveEqualAttribute(eObject1, eObject2, attribute);
- }
- }
- };
- return equalityHelper.equals((EObject)dataObject1, (EObject)dataObject2); }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java
deleted file mode 100644
index 64ee628693..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperContextImpl.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-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.EcorePackage;
-import org.eclipse.emf.ecore.change.ChangePackage;
-import org.eclipse.emf.ecore.impl.EPackageRegistryImpl;
-import org.eclipse.emf.ecore.util.ExtendedMetaData;
-import org.eclipse.emf.ecore.xml.namespace.XMLNamespacePackage;
-import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
-
-import commonj.sdo.helper.CopyHelper;
-import commonj.sdo.helper.DataFactory;
-import commonj.sdo.helper.DataHelper;
-import commonj.sdo.helper.EqualityHelper;
-import commonj.sdo.helper.HelperContext;
-import commonj.sdo.helper.TypeHelper;
-import commonj.sdo.helper.XMLHelper;
-import commonj.sdo.helper.XSDHelper;
-
-import org.apache.tuscany.sdo.SDOPackage;
-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 = null;
-
- 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 public EPackage.Registry getBuiltInModelRegistry() {
- if (builtInModelRegistry == null) {
- EPackageRegistryImpl registry = new EPackageRegistryImpl();
- for (Iterator iter = TypeHelperImpl.getBuiltInModels().iterator(); iter.hasNext();) {
- EPackage ePackage = (EPackage)iter.next();
- registry.put(ePackage.getNsURI(), ePackage);
- }
-
- registry.put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE);
- registry.put(XMLTypePackage.eNS_URI, XMLTypePackage.eINSTANCE);
- registry.put(ChangePackage.eNS_URI, ChangePackage.eINSTANCE);
- registry.put(XMLNamespacePackage.eNS_URI, XMLNamespacePackage.eINSTANCE);
- registry.put(SDOPackage.eNS_URI, SDOPackage.eINSTANCE);
-
- builtInModelRegistry = registry;
- }
- 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 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;
- }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperProviderImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperProviderImpl.java
deleted file mode 100644
index 360617bd20..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/HelperProviderImpl.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-
-import org.apache.tuscany.sdo.spi.HelperProviderBase;
-
-import commonj.sdo.helper.HelperContext;
-
-/**
- * Create and manage all the default helper INSTANCEs
- */
-public class HelperProviderImpl extends HelperProviderBase
-{
- public HelperContext createDefaultHelpers()
- {
- //FB HelperContext hc = SDOUtil.createHelperContext();
- //FB The defulat HelperContext must use EMF's ClassLoader-delegating EPackage.Registry.INSTANCE, until we provide
- //FB another way to get (ClassLoader scope) support for HelperContext.
- HelperContext hc = new DefaultHelperContextImpl(false);
- typeHelper = hc.getTypeHelper();
- dataFactory = hc.getDataFactory();
- xmlHelper = hc.getXMLHelper();
- xsdHelper = hc.getXSDHelper();
- copyHelper = new CopyHelperImpl();
- equalityHelper = new EqualityHelperImpl();
- dataHelper = new DataHelperImpl();
- sdoHelper = new SDOHelperImpl();
- xmlStreamHelper = ((HelperContextImpl)hc).getXMLStreamHelper();
-
- return hc;
- }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOAnnotations.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOAnnotations.java
deleted file mode 100644
index 816fb3bf9f..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOAnnotations.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-public class SDOAnnotations
-{
- public static final String COLON = ":";
- public static final String COMMONJ_SDO_NS = "commonj.sdo";
- public static final String COMMONJ_SDO_NS_PREFIX = "sdo";
- public static final String SDO_JAVA_NS = "commonj.sdo/java";
- public static final String SDO_JAVA_NS_PREFIX = "sdoJava";
-
- public static final String JAVA_PACKAGE = SDO_JAVA_NS_PREFIX + COLON + "package";
- public static final String ALIAS_NAMES = COMMONJ_SDO_NS_PREFIX + COLON + "aliasName";
- public static final String READ_ONLY = COMMONJ_SDO_NS_PREFIX + COLON + "readOnly";
- public static final String INSTANCE_CLASS = SDO_JAVA_NS_PREFIX + COLON + "instanceClass";
- public static final String ABSTRACT_TYPE = "abstract";
- public static final String PROPERTY_TYPE = COMMONJ_SDO_NS_PREFIX + COLON + "propertyType";
- public static final String OPPOSITE_PROPERTY = COMMONJ_SDO_NS_PREFIX + COLON + "oppositeProperty";
-
-
- //used by the annotations map to uniquely identify schema elements that need to be annotated
- //and to store the corresponding annotations in a map
- public static final String SCHEMA = "schema";
- public static final String ELEMENT = "element";
- public static final String COMPLEX_TYPE = "complexType";
- public static final String SIMPLE_TYPE = "simpleType";
- public static final String ATTRIBUTE = "attribute";
-
- public static String makeAnnotationMapKey(String namespace, String schemaElementType, String nameAttrValue)
- {
- return namespace + schemaElementType + nameAttrValue;
- }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOExtendedMetaDataImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOExtendedMetaDataImpl.java
deleted file mode 100644
index ba632a0523..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOExtendedMetaDataImpl.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import org.apache.tuscany.sdo.SDOExtendedMetaData;
-import org.apache.tuscany.sdo.impl.SDOFactoryImpl.SDOEcoreFactory;
-import org.apache.tuscany.sdo.model.ModelFactory;
-import org.apache.tuscany.sdo.model.impl.ModelFactoryImpl;
-import org.eclipse.emf.ecore.EAnnotation;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EModelElement;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.EPackage.Registry;
-
-/**
- * TODO make demand() methods synchronous?
- */
-public class SDOExtendedMetaDataImpl
- extends BaseSDOExtendedMetaDataImpl
- implements SDOExtendedMetaData
-{
-
- public SDOExtendedMetaDataImpl() {
- this(HelperContextImpl.getBuiltInModelRegistry());
- }
-
- public SDOExtendedMetaDataImpl(Registry registry) {
- super(registry);
- ecoreFactory = new SDOEcoreFactory();
- demandMetaData = new SDODemandMetaData();
- }
-
- public static class SDODemandMetaData extends DemandMetaData {
- EClassifier getEObject() { return (EClassifier)((ModelFactoryImpl)ModelFactory.INSTANCE).getDataObject(); }
- EClassifier getAnySimpleType() { return (EClassifier)((ModelFactoryImpl)ModelFactory.INSTANCE).getObject(); }
- }
-
- public EPackage getPackage(String namespace)
- {
- if ("".equals(namespace)) namespace = null; //FB
- EPackage result = registry.getEPackage(namespace);
- return result == null ? super.getPackage(namespace) : result;
- }
-
- /**
- * Returns the listing of alias names as specified by the sdo:aliasNames
- * property.
- */
- public List getAliasNames(EModelElement modelElement) {
- EAnnotation eAnnotation = getAnnotation(modelElement, false);
- List list = null;
- if (eAnnotation != null) {
- String aliasNames = (String)eAnnotation.getDetails().get("aliasNames");
- if (aliasNames != null) {
- list = new ArrayList();
- StringTokenizer st = new StringTokenizer(aliasNames, " ");
- while (st.hasMoreTokens()) {
- String t = st.nextToken();
- list.add(t);
- }
- }
- }
- return list;
- }
-
-
- public void setAliasNames(EModelElement modelElement, List aliasNames) {
- if (aliasNames == null || aliasNames.isEmpty()) {
- setAliasNames(modelElement, (String)null);
- } else {
- StringBuffer buf = new StringBuffer();
- for (int n = 0; n < aliasNames.size(); n++) {
- String name = (String) aliasNames.get(n);
- buf.append(name);
- buf.append(" ");
- }
- setAliasNames(modelElement, buf.toString());
- }
- }
-
- /**
- * Adds an alias name per sdo:aliasName
- */
- public void setAliasNames(EModelElement modelElement, String aliasNames) {
- EAnnotation eAnnotation = getAnnotation(modelElement, true);
- eAnnotation.getDetails().put("aliasNames", aliasNames);
- }
-
- public EPackage.Registry getRegistry()
- {
- return registry;
- }
-
- boolean featureNamespaceMatchingLax = true;
-
- public void setFeatureNamespaceMatchingLax(boolean b) {
- featureNamespaceMatchingLax = b;
- }
-
- protected boolean isFeatureNamespaceMatchingLax() {
- return featureNamespaceMatchingLax;
- }
-
- /*
- * (non-Javadoc)
- *
- * Eagerly pre-cache the "holder"s for static packages.
- *
- * @see org.eclipse.emf.ecore.util.BasicExtendedMetaData#putPackage(java.lang.String,
- * org.eclipse.emf.ecore.EPackage)
- */
- public void putPackage(String namespace, EPackage ePackage) {
- for (Iterator iterator = ePackage.eAllContents(); iterator.hasNext();) {
- Object object = iterator.next();
- if (object instanceof EClassifier) {
- this.getName((EClassifier) object);
- } else if (object instanceof EStructuralFeature) {
- this.getName((EStructuralFeature) object);
- }
- }
- super.putPackage(namespace, ePackage);
- }
-
- /******************************************************************************************************
- * Following methods, getLocalAttribute & getLocalElement, ARE TEMPORARY COPIES FROM THE BASE CLASS.
- * One line (the last line)in each method is changed to support lax namespace matching.
- * DO NOT EDIT THESE METHODS. THEY WILL BE REMOVED WHEN WE MOVE TO EMF 2.3, WHICH FIXES THE PROBLEM.
- ******************************************************************************************************/
-
- public EStructuralFeature getLocalAttribute(EClass eClass, String namespace, String name)
- {
- EStructuralFeature result = null;
- if (isFeatureKindSpecific())
- {
- List allAttributes = getAllAttributes(eClass);
- for (int i = 0, size = allAttributes.size(); i < size; ++i)
- {
- EStructuralFeature eStructuralFeature = (EStructuralFeature) allAttributes.get(i);
- if (name.equals(getName(eStructuralFeature)))
- {
- String featureNamespace = getNamespace(eStructuralFeature);
- if (namespace == null)
- {
- if (featureNamespace == null)
- {
- return eStructuralFeature;
- }
- else if (result == null)
- {
- result = eStructuralFeature;
- }
- }
- else if (namespace.equals(featureNamespace))
- {
- return eStructuralFeature;
- }
- else if (featureNamespace == null && result == null)
- {
- result = eStructuralFeature;
- }
- }
- }
- }
- else
- {
- for (int i = 0, size = eClass.getFeatureCount(); i < size; ++i)
- {
- EStructuralFeature eStructuralFeature = eClass.getEStructuralFeature(i);
- switch (getFeatureKind(eStructuralFeature))
- {
- case UNSPECIFIED_FEATURE:
- case ATTRIBUTE_FEATURE:
- {
- if (name.equals(getName(eStructuralFeature)))
- {
- String featureNamespace = getNamespace(eStructuralFeature);
- if (namespace == null)
- {
- if (featureNamespace == null)
- {
- return eStructuralFeature;
- }
- else if (result == null)
- {
- result = eStructuralFeature;
- }
- }
- else if (namespace.equals(featureNamespace))
- {
- return eStructuralFeature;
- }
- else if (featureNamespace == null && result == null)
- {
- result = eStructuralFeature;
- }
- }
- break;
- }
- }
- }
- }
-
- return isFeatureNamespaceMatchingLax() ? result : null;
- }
-
- protected EStructuralFeature getLocalElement(EClass eClass, String namespace, String name)
- {
- EStructuralFeature result = null;
- if (isFeatureKindSpecific())
- {
- List allElements = getAllElements(eClass);
- for (int i = 0, size = allElements.size(); i < size; ++i)
- {
- EStructuralFeature eStructuralFeature = (EStructuralFeature) allElements.get(i);
- if (name.equals(getName(eStructuralFeature)))
- {
- String featureNamespace = getNamespace(eStructuralFeature);
- if (namespace == null)
- {
- if (featureNamespace == null)
- {
- return eStructuralFeature;
- }
- else if (result == null)
- {
- result = eStructuralFeature;
- }
- }
- else if (namespace.equals(featureNamespace))
- {
- return eStructuralFeature;
- }
- else if (featureNamespace == null && result == null)
- {
- result = eStructuralFeature;
- }
- }
- }
- }
- else
- {
- for (int i = 0, size = eClass.getFeatureCount(); i < size; ++i)
- {
- EStructuralFeature eStructuralFeature = eClass.getEStructuralFeature(i);
- switch (getFeatureKind(eStructuralFeature))
- {
- case UNSPECIFIED_FEATURE:
- case ELEMENT_FEATURE:
- {
- if (name.equals(getName(eStructuralFeature)))
- {
- String featureNamespace = getNamespace(eStructuralFeature);
- if (namespace == null)
- {
- if (featureNamespace == null)
- {
- return eStructuralFeature;
- }
- else if (result == null)
- {
- result = eStructuralFeature;
- }
- }
- else if (namespace.equals(featureNamespace))
- {
- return eStructuralFeature;
- }
- else if (featureNamespace == null && result == null)
- {
- result = eStructuralFeature;
- }
- }
- break;
- }
- }
- }
- }
-
- return isFeatureNamespaceMatchingLax() ? result : null;
- }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.java
deleted file mode 100644
index 922f092845..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOHelperImpl.java
+++ /dev/null
@@ -1,530 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.tuscany.sdo.SDOExtendedMetaData;
-import org.apache.tuscany.sdo.SDOFactory;
-import org.apache.tuscany.sdo.SimpleAnyTypeDataObject;
-import org.apache.tuscany.sdo.api.SDOHelper;
-import org.apache.tuscany.sdo.api.XMLStreamHelper;
-import org.apache.tuscany.sdo.api.EventListener;
-import org.apache.tuscany.sdo.impl.ClassImpl;
-import org.apache.tuscany.sdo.impl.DataGraphImpl;
-import org.apache.tuscany.sdo.impl.DynamicDataObjectImpl;
-import org.apache.tuscany.sdo.model.ModelFactory;
-import org.apache.tuscany.sdo.model.impl.ModelFactoryImpl;
-import org.apache.tuscany.sdo.spi.SDOHelperBase;
-import org.apache.tuscany.sdo.util.DataObjectUtil;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.common.util.UniqueEList;
-import org.eclipse.emf.ecore.EAnnotation;
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EDataType;
-import org.eclipse.emf.ecore.EModelElement;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.ETypedElement;
-import org.eclipse.emf.ecore.EcoreFactory;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.ecore.util.ExtendedMetaData;
-import org.eclipse.emf.ecore.util.FeatureMap;
-import org.eclipse.emf.ecore.util.FeatureMapUtil;
-import org.eclipse.emf.ecore.xmi.XMLResource;
-
-import commonj.sdo.DataGraph;
-import commonj.sdo.DataObject;
-import commonj.sdo.Property;
-import commonj.sdo.Sequence;
-import commonj.sdo.Type;
-import commonj.sdo.helper.CopyHelper;
-import commonj.sdo.helper.HelperContext;
-import commonj.sdo.helper.TypeHelper;
-import commonj.sdo.impl.HelperProvider;
-
-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 int getLowerBound(Property property) {
- return ((EStructuralFeature)property).getLowerBound();
- }
-
- public List getEnumerationFacet(Type type) {
- List instProps = type.getInstanceProperties();
- String propertyName = "enumeration";
- Property enumProperty = null;
-
- for (int i = 0; i < instProps.size(); i++)
- {
- Property prop = (Property)instProps.get(i);
- if (propertyName.equals(prop.getName()))
- enumProperty = prop;
- }
-
- return (List)DataObjectUtil.getMetaObjectInstanceProperty((EModelElement)type, enumProperty);
- }
-
- public List getPatternFacet(Type type) {
- List instProps = type.getInstanceProperties();
- String propertyName = "pattern";
- Property patternProperty = null;
-
- for (int i = 0; i < instProps.size(); i++)
- {
- Property prop = (Property)instProps.get(i);
- if (propertyName.equals(prop.getName()))
- patternProperty = prop;
- }
-
- return (List)DataObjectUtil.getMetaObjectInstanceProperty((EModelElement)type, patternProperty);
- }
-
- 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, HelperContext scope) throws IOException {
- if (scope == null) {
- scope = HelperProvider.getDefaultContext();
- }
- TypeHelper th = scope.getTypeHelper();
- DataGraph result = null;
- if (th == null || th == TypeHelper.INSTANCE) {
- result = loadDataGraph(inputStream, options);
- } else if (options == null) {
- options = new HashMap();
- registerLoadingScope(options, th);
- result = loadDataGraph(inputStream, options);
- } else if (options.containsKey(LOADING_SCOPE)) {
- Object restore = options.get(LOADING_SCOPE);
- registerLoadingScope(options, th);
- try {
- result = loadDataGraph(inputStream, options);
- } finally {
- options.put(LOADING_SCOPE, restore);
- }
- } else {
- registerLoadingScope(options, th);
- 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() {
- return new HelperContextImpl(false, null);
- }
-
- public HelperContext createHelperContext(boolean extensibleNamespaces) {
- return new HelperContextImpl(extensibleNamespaces);
- }
-
- public HelperContext createHelperContext(Map options) {
- return new HelperContextImpl(false, options);
- }
-
- public HelperContext createHelperContext(boolean extensibleNamespaces, Map options) {
- return new HelperContextImpl(extensibleNamespaces, options);
- }
-
-
- public CopyHelper createCrossScopeCopyHelper(HelperContext hc) {
- return new CrossScopeCopyHelperImpl(hc.getTypeHelper());
- }
-
-
- public XMLStreamHelper createXMLStreamHelper(HelperContext hc) {
- return ((HelperContextImpl)hc).getXMLStreamHelper();
- }
-
-
- public List getTypes(HelperContext hc, String uri) {
-
- EPackage ePackage = ((HelperContextImpl)hc).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(HelperContext hc, String uri, String name, boolean isDataType) {
- ExtendedMetaData extendedMetaData = ((HelperContextImpl)hc).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 {
- // By default, a SDO property is an XSD element
- ExtendedMetaData.INSTANCE.setFeatureKind(eStructuralFeature, ExtendedMetaData.ELEMENT_FEATURE);
- }
-
- return (Property)eStructuralFeature;
- }
-
- public void setPropertyXMLKind(Property property, boolean isXmlElement) {
- if (isXmlElement) {
- ExtendedMetaData.INSTANCE.setFeatureKind((EStructuralFeature)property, ExtendedMetaData.ELEMENT_FEATURE);
- }
- else {
- ExtendedMetaData.INSTANCE.setFeatureKind((EStructuralFeature)property, ExtendedMetaData.ATTRIBUTE_FEATURE);
- }
- }
-
-
- public Property createOpenContentProperty(HelperContext hc, String uri, String name, Type type)
- {
- ExtendedMetaData extendedMetaData = ((HelperContextImpl)hc).getExtendedMetaData();
-
- // get/create document root
- EPackage ePackage = extendedMetaData.getPackage(uri);
- Type documentRoot = ePackage != null ? (Type)extendedMetaData.getType(ePackage, "") : null;
- if (documentRoot == null) {
- documentRoot = createType(hc, 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 void addChangeListener(DataObject dob, EventListener listener) {
- // Adapter l = (Adapter)listener;
- ((Notifier)dob).eAdapters().add(listener);
- }
-
- public void removeChangeListener(DataObject dob, EventListener listener) {
- ((Notifier)dob).eAdapters().remove(listener);
- }
-
-
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOSimpleDateFormat.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOSimpleDateFormat.java
deleted file mode 100644
index 9d14a264d8..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOSimpleDateFormat.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.tuscany.sdo.helper;
-
-import java.text.DateFormatSymbols;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-import java.util.TimeZone;
-
-/**
- * Fixes the bug reported at JIRA TUSCANY-1659
- * This class ensures the time zone will be formatted as the abbreviation format.
- */
-public class SDOSimpleDateFormat extends SimpleDateFormat {
-
- private static final long serialVersionUID = 2519728288048681529L;
-
- public SDOSimpleDateFormat() {
- super();
- setTimeZone(getTimeZone());
-
- }
-
- public SDOSimpleDateFormat(String pattern) {
- super(pattern);
- setTimeZone(getTimeZone());
-
- }
-
- public SDOSimpleDateFormat(String pattern, Locale locale) {
- super(pattern, locale);
- setTimeZone(getTimeZone());
-
- }
-
- public SDOSimpleDateFormat(String pattern, DateFormatSymbols formatSymbols) {
- super(pattern, formatSymbols);
- setTimeZone(getTimeZone());
-
- }
-
- /**
- * Overrides the SimpleDateFormat.setTimeZone(TimeZone) method.
- * It checks if the TimeZone to be set is in the abbreviation format.
- * If not, it looks for its abbreviation format and set it.
- *
- * @param timeZone the time zone to be set
- *
- */
- public void setTimeZone(TimeZone timeZone) {
-
- if (timeZone.getID().length() != 3) {
- String[] timeZoneNames = TimeZone.getAvailableIDs(timeZone.getRawOffset());
-
- for (int i = 0 ; i < timeZoneNames.length ; i++ ) {
- String actualTimeZoneName = timeZoneNames[i].trim();
-
- // if the time zone name has 3 letters and ends with a T character,
- // it's considered to be the abbreviation format
- if (actualTimeZoneName.length() == 3 && actualTimeZoneName.charAt(actualTimeZoneName.length() - 1) == 'T') {
- timeZone = TimeZone.getTimeZone(timeZoneNames[i]);
- break;
-
- }
-
- }
-
- }
-
- super.setTimeZone(timeZone);
-
- }
-
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java
deleted file mode 100644
index 7a3a409479..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java
+++ /dev/null
@@ -1,789 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import javax.xml.XMLConstants;
-
-import org.apache.tuscany.sdo.SDOExtendedMetaData;
-import org.apache.tuscany.sdo.api.SDOUtil;
-import org.apache.tuscany.sdo.impl.AttributeImpl;
-import org.apache.tuscany.sdo.impl.SDOFactoryImpl.SDOEcoreFactory;
-import org.apache.tuscany.sdo.model.ModelFactory;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EDataType;
-import org.eclipse.emf.ecore.EEnum;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.impl.EPackageRegistryImpl;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.ecore.util.ExtendedMetaData;
-import org.eclipse.emf.ecore.util.EcoreUtil.UsageCrossReferencer;
-import org.eclipse.xsd.XSDComplexTypeDefinition;
-import org.eclipse.xsd.XSDComponent;
-import org.eclipse.xsd.XSDConcreteComponent;
-import org.eclipse.xsd.XSDElementDeclaration;
-import org.eclipse.xsd.XSDFeature;
-import org.eclipse.xsd.XSDNamedComponent;
-import org.eclipse.xsd.XSDParticle;
-import org.eclipse.xsd.XSDSchema;
-import org.eclipse.xsd.XSDSimpleTypeDefinition;
-import org.eclipse.xsd.XSDTerm;
-import org.eclipse.xsd.XSDTypeDefinition;
-import org.eclipse.xsd.ecore.EcoreSchemaBuilder;
-import org.eclipse.xsd.util.XSDResourceFactoryImpl;
-import org.eclipse.xsd.util.XSDResourceImpl;
-import org.eclipse.xsd.util.XSDSchemaLocator;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-public class SDOXSDEcoreBuilder extends BaseSDOXSDEcoreBuilder
-{
- protected boolean replaceConflictingTypes = false;
-
- public SDOXSDEcoreBuilder(ExtendedMetaData extendedMetaData, boolean replaceConflictingTypes)
- {
- super(extendedMetaData);
- ecoreFactory = new SDOEcoreFactory();
- this.replaceConflictingTypes = replaceConflictingTypes;
- populateTypeToTypeObjectMap((EPackage)ModelFactory.INSTANCE);
- }
-
- /**
- * Overrides method in EMF. This will cause the SDO Properties to be in the
- * order in which the Attributes appeared in the XSD.
- */
- protected boolean useSortedAttributes()
- {
- return false;
- }
-
- /*
- * Required for Java 1.4.2 support
- * Node#lookupPrefix is only available since DOM Level 3 (Java 5)
- * and it doesn't return rebound prefix.
- * XSDConstants.lookupQualifier isn't supposed to return rebound prefix either.
- * This lookupPrefix returns any bound prefix no matter rebound to other NameSpace or not, for {@link #getEPackage}.
- */
- static protected String lookupPrefix(Node element, String namespaceURI) {
- String prefix = element.getPrefix();
- if (prefix != null && namespaceURI != null && namespaceURI.equals(element.getNamespaceURI()))
- return prefix;
- NamedNodeMap attributes = element.getAttributes();
- if (attributes != null)
- for (int index = attributes.getLength(); index != 0;) {
- Node attribute = attributes.item(--index);
- if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(attribute.getNamespaceURI()) && attribute.getNodeValue().equals(namespaceURI)
- && XMLConstants.XMLNS_ATTRIBUTE.equals(attribute.getPrefix()))
- return attribute.getLocalName();
- }
- for (Node parent; (parent = element.getParentNode()) != null; element = parent)
- if (parent.getNodeType() == Node.ELEMENT_NODE)
- return lookupPrefix(parent, namespaceURI);
- return null;
- }
-
- public EPackage getEPackage(XSDNamedComponent xsdNamedComponent) {
- XSDSchema containingXSDSchema = xsdNamedComponent.getSchema();
- String targetNamespace = containingXSDSchema == null ?
- xsdNamedComponent.getTargetNamespace() : containingXSDSchema.getTargetNamespace();
- EPackage ePackage = (EPackage) targetNamespaceToEPackageMap.get(targetNamespace);
- if (ePackage != null)
- return ePackage;
- ePackage = super.getEPackage(xsdNamedComponent);
- String nsPrefix = lookupPrefix(xsdNamedComponent.getElement(), targetNamespace);
- if (nsPrefix != null)
- ePackage.setNsPrefix(nsPrefix);
- return ePackage;
- }
-
- public EClassifier getEClassifier(XSDTypeDefinition xsdTypeDefinition) {
- EClassifier eClassifier = null;
- if (xsdTypeDefinition != null)
- {
- if (rootSchema.getSchemaForSchemaNamespace().equals(xsdTypeDefinition.getTargetNamespace())) {
- eClassifier =
- getBuiltInEClassifier(xsdTypeDefinition.getURI(), xsdTypeDefinition.getName());
- }
- else if (xsdTypeDefinition.getContainer() == null) {
- EPackage pkg = extendedMetaData.getPackage(xsdTypeDefinition.getTargetNamespace());
- if(pkg != null) {
- eClassifier = pkg.getEClassifier(xsdTypeDefinition.getName());
- }
- }
- }
- if (eClassifier == null) {
- eClassifier = super.getEClassifier(xsdTypeDefinition);
- }
- return eClassifier;
- }
-
- public EDataType getEDataType(XSDSimpleTypeDefinition xsdSimpleTypeDefinition) {
- EDataType eClassifier = null;
- if (xsdSimpleTypeDefinition != null && rootSchema.getSchemaForSchemaNamespace().equals(xsdSimpleTypeDefinition.getTargetNamespace())) {
- eClassifier =
- (EDataType)getBuiltInEClassifier(
- xsdSimpleTypeDefinition.getURI(),
- xsdSimpleTypeDefinition.getName());
- } else {
- eClassifier = super.getEDataType(xsdSimpleTypeDefinition);
- }
- return (EDataType)eClassifier;
- }
-
-
- /* (non-Javadoc)
- * @see org.eclipse.xsd.ecore.XSDEcoreBuilder#createResourceSet()
- */
- protected ResourceSet createResourceSet() {
- ResourceSet result = super.createResourceSet();
- result.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new XSDResourceFactoryImpl());
- result.getAdapterFactories().add(new XSDSchemaAdapterFactoryImpl());
- result.setPackageRegistry(new EPackageRegistryImpl(HelperContextImpl.getBuiltInModelRegistry()));
-
- return result;
- }
-
- protected EClassifier getBuiltInEClassifier(String namespace, String name)
- {
- EClassifier eClassifier = null;
- if ("base64Binary".equals(name)) {
- eClassifier = (EClassifier)AttributeImpl.INTERNAL_BASE64_BYTES;
- }
- else if ("QName".equals(name)) {
- eClassifier = (EClassifier)AttributeImpl.INTERNAL_QNAME;
- }
- else {
- eClassifier = (EClassifier)SDOUtil.getXSDSDOType(name);
- }
-
- if (eClassifier == null)
- eClassifier = super.getBuiltInEClassifier(namespace, name);
- return eClassifier;
- }
-
- private void updateReferences(EObject oldEObject, EObject newEObject)
- {
- Collection usages = UsageCrossReferencer.find(oldEObject, targetNamespaceToEPackageMap.values());
- for (Iterator iter = usages.iterator(); iter.hasNext(); )
- {
- EStructuralFeature.Setting setting = (EStructuralFeature.Setting)iter.next();
- EObject referencingEObject = setting.getEObject();
- EStructuralFeature eStructuralFeature = setting.getEStructuralFeature();
- if (eStructuralFeature.isChangeable())
- {
- if (eStructuralFeature.isMany())
- {
- List refList = (List)referencingEObject.eGet(eStructuralFeature);
- int refIndex = refList.indexOf(oldEObject);
- if (refIndex != -1) refList.set(refIndex, newEObject);
- }
- else
- {
- referencingEObject.eSet(eStructuralFeature, newEObject);
- }
- }
- }
- }
-
- private XSDTypeDefinition getXSDTypeDefinition(EClassifier eClassifier)
- {
- //TODO Maybe we should create a reverse (eModelElementToXSDComponentMap) for better performance.
- // Use a HashMap subclass for xsdComponentToEModelElementMap that overrides put() to also add the
- // reverse mapping in eModelElementToXSDComponentMap
- XSDTypeDefinition xsdTypeDefinition = null;
- for (Iterator i = xsdComponentToEModelElementMap.entrySet().iterator(); i.hasNext(); )
- {
- Entry e = (Entry) i.next();
- if (eClassifier == e.getValue())
- {
- xsdTypeDefinition = (XSDTypeDefinition)e.getKey();
- break;
- }
- }
- return xsdTypeDefinition;
- }
-
- private boolean sameType(XSDTypeDefinition t1, XSDTypeDefinition t2)
- {
- XSDConcreteComponent n1 = t1, n2 = t2;
- while (n1 != null && n2 != null)
- {
- if (n1.eClass() != n2.eClass()) break;
- if (n1 instanceof XSDNamedComponent /*&& n2 instanceof XSDNamedComponent*/)
- {
- String s1 = ((XSDNamedComponent)n1).getName();
- String s2 = ((XSDNamedComponent)n2).getName();
- if (s1 == null ? s1 != s2 : !s1.equals(s2)) break;
- }
- n1 = n1.getContainer();
- n2 = n2.getContainer();
- }
- return n1 == null && n2 == null;
- }
-
- protected void removeDuplicateEClassifier(EClassifier eClassifier, XSDTypeDefinition xsdTypeDefinition)
- {
- EPackage ePackage = eClassifier.getEPackage();
- List eClassifiers = ePackage.getEClassifiers();
- String name = eClassifier.getName();
- int size = eClassifiers.size();
- for (int index = eClassifiers.indexOf(eClassifier); ++index < size; )
- {
- EClassifier nextEClassifier = (EClassifier)eClassifiers.get(index);
- if (!name.equals(nextEClassifier.getName())) break;
- if (extendedMetaData.getName(eClassifier).equals(extendedMetaData.getName(nextEClassifier)))
- {
- XSDTypeDefinition nextXSDTypeDefinition = getXSDTypeDefinition(nextEClassifier);
- if (!sameType(nextXSDTypeDefinition, xsdTypeDefinition))
- {
- //System.out.println("###EClassifier mismatch: ");
- //System.out.println(" old: " + extendedMetaData.getName(nextEClassifier));
- //System.out.println(" new: " + extendedMetaData.getName(eClassifier));
- continue;
- }
- eClassifiers.remove(index);
- updateReferences(nextEClassifier, eClassifier);
- break;
- }
- }
- }
-
- protected void removeDuplicateDocumentRootFeature(EClass eClass, EStructuralFeature eStructuralFeature)
- {
- List eStructuralFeatures = eClass.getEStructuralFeatures();
- int last = eStructuralFeatures.size() - 1;
- String name = extendedMetaData.getName(eStructuralFeature);
- for (int index = 0; index < last; index++)
- {
- EStructuralFeature otherEStructuralFeature = (EStructuralFeature)eStructuralFeatures.get(index);
- if (name.equals(extendedMetaData.getName(otherEStructuralFeature)))
- {
- if (otherEStructuralFeature.eClass() != eStructuralFeature.eClass())
- {
- //System.out.println("###EStructuralFeature mismatch: ");
- //System.out.println(" old: " + extendedMetaData.getName(otherEStructuralFeature));
- //System.out.println(" new: " + extendedMetaData.getName(eStructuralFeature));
- continue;
- }
- eStructuralFeatures.remove(index);
- updateReferences(otherEStructuralFeature, eStructuralFeature);
- break;
- }
- }
- }
-
- public EClass computeEClass(XSDComplexTypeDefinition xsdComplexTypeDefinition) {
- if (xsdComplexTypeDefinition == null) return super.computeEClass(xsdComplexTypeDefinition);
- EPackage ePackage = (EPackage)targetNamespaceToEPackageMap.get(xsdComplexTypeDefinition.getTargetNamespace());
- if (ePackage != null && TypeHelperImpl.getBuiltInModels().contains(ePackage)) {
- EClassifier eclassifier = ePackage.getEClassifier(xsdComplexTypeDefinition.getName());
- if (eclassifier != null) return (EClass)eclassifier;
- }
- EClass eClass = super.computeEClass(xsdComplexTypeDefinition);
- if (replaceConflictingTypes) removeDuplicateEClassifier(eClass, xsdComplexTypeDefinition);
- String aliasNames = getEcoreAttribute(xsdComplexTypeDefinition.getElement(), "aliasName");
- if (aliasNames != null) {
- SDOExtendedMetaData.INSTANCE.setAliasNames(eClass, aliasNames);
- }
- return eClass;
- }
-
- protected EClassifier computeEClassifier(XSDTypeDefinition xsdTypeDefinition) {
- if (xsdTypeDefinition == null) return super.computeEClassifier(xsdTypeDefinition);
- EPackage ePackage = (EPackage)targetNamespaceToEPackageMap.get(xsdTypeDefinition.getTargetNamespace());
- if (ePackage != null && TypeHelperImpl.getBuiltInModels().contains(ePackage)) {
- EClassifier eclassifier = ePackage.getEClassifier(xsdTypeDefinition.getName());
- if (eclassifier != null) return eclassifier;
- }
- EClassifier eclassifier = super.computeEClassifier(xsdTypeDefinition);
- EClassifier etype = (EClassifier) typeToTypeObjectMap.get(eclassifier);
- String aliasNames = getEcoreAttribute(xsdTypeDefinition.getElement(), "aliasName");
- if (aliasNames != null) {
- SDOExtendedMetaData.INSTANCE.setAliasNames(eclassifier, aliasNames);
- if (etype != null) {
- SDOExtendedMetaData.INSTANCE.setAliasNames(etype, aliasNames);
- }
- }
- return eclassifier;
- }
-
- protected EDataType computeEDataType(XSDSimpleTypeDefinition xsdSimpleTypeDefinition) {
- if (xsdSimpleTypeDefinition == null) return super.computeEDataType(xsdSimpleTypeDefinition);
- EPackage ePackage = (EPackage)targetNamespaceToEPackageMap.get(xsdSimpleTypeDefinition.getTargetNamespace());
- if (ePackage != null && TypeHelperImpl.getBuiltInModels().contains(ePackage)) {
- EClassifier eclassifier = ePackage.getEClassifier(xsdSimpleTypeDefinition.getName());
- if (eclassifier != null) return (EDataType)eclassifier;
- }
- EDataType eDataType = super.computeEDataType(xsdSimpleTypeDefinition);
- if (replaceConflictingTypes) removeDuplicateEClassifier(eDataType, xsdSimpleTypeDefinition);
- String aliasNames = getEcoreAttribute(xsdSimpleTypeDefinition.getElement(), "aliasName");
- if (aliasNames != null) {
- SDOExtendedMetaData.INSTANCE.setAliasNames(eDataType, aliasNames);
- }
- return eDataType;
- }
-
- protected EEnum computeEEnum(XSDSimpleTypeDefinition xsdSimpleTypeDefinition) {
- return null;
- }
-
- protected EStructuralFeature createFeature(EClass eClass, String name, EClassifier type, XSDComponent xsdComponent, int minOccurs, int maxOccurs) {
- EStructuralFeature feature = super.createFeature(eClass, name, type, xsdComponent, minOccurs, maxOccurs);
-
- if (xsdComponent instanceof XSDParticle) {
- XSDTerm xsdTerm = ((XSDParticle)xsdComponent).getTerm();
- if (xsdTerm instanceof XSDElementDeclaration && ((XSDElementDeclaration)xsdTerm).isNillable())
- EcoreUtil.setAnnotation(feature, ExtendedMetaData.ANNOTATION_URI, "nillable", "true");
- }
-
- //FB What is the following for?
- if (feature instanceof EReference)
- {
- EReference eReference = (EReference)feature;
- if (xsdComponent != null && xsdComponent instanceof XSDParticle)
- {
- XSDTerm xsdTerm = ((XSDParticle)xsdComponent).getTerm();
- if (xsdTerm instanceof XSDElementDeclaration)
- {
- XSDTypeDefinition elementTypeDefinition = getEffectiveTypeDefinition(xsdComponent, (XSDElementDeclaration)xsdTerm);
- EClassifier eClassifier = getEClassifier(elementTypeDefinition);
- if (elementTypeDefinition instanceof XSDSimpleTypeDefinition && eClassifier instanceof EClass)
- {
- eReference.setContainment(true);
- }
- }
- }
- }
-
- feature.setName(name); // this is needed because super.createFeature() does EMF name mangling (toLower)
-
- if (replaceConflictingTypes && "".equals(extendedMetaData.getName(eClass)))
- removeDuplicateDocumentRootFeature(eClass, feature);
-
- if (xsdComponent != null)
- {
- String aliasNames = getEcoreAttribute(xsdComponent.getElement(), "aliasName");
- if (aliasNames != null)
- {
- SDOExtendedMetaData.INSTANCE.setAliasNames(feature, aliasNames);
- }
- }
- return feature;
- }
-
- protected String getInstanceClassName(XSDTypeDefinition typeDefinition, EDataType baseEDataType) {
- String name = getEcoreAttribute(typeDefinition, "extendedInstanceClass");
- return (name != null) ? name : super.getInstanceClassName(typeDefinition, baseEDataType);
- }
-
- protected String getEcoreAttribute(Element element, String attribute)
- {
- String sdoAttribute = null;
-
- if ("name".equals(attribute))
- sdoAttribute = "name";
- else if ("opposite".equals(attribute))
- sdoAttribute = "oppositeProperty";
- else if ("mixed".equals(attribute))
- sdoAttribute = "sequence";
- else if ("string".equals(attribute))
- sdoAttribute = "string";
- else if ("changeable".equals(attribute))
- sdoAttribute = "readOnly";
- else if ("aliasName".equals(attribute))
- sdoAttribute = "aliasName";
-
- if (sdoAttribute != null)
- {
- String value =
- element != null && element.hasAttributeNS("commonj.sdo/xml", sdoAttribute) ?
- element.getAttributeNS("commonj.sdo/xml", sdoAttribute) :
- null;
- if ("changeable".equals(attribute)) {
- if ("true".equals(value)) value = "false";
- else if ("false".equals(value)) value = "true";
- }
- return value;
- }
-
- if ("package".equals(attribute))
- sdoAttribute = "package";
- else if ("instanceClass".equals(attribute))
- sdoAttribute = "instanceClass";
- else if ("extendedInstanceClass".equals(attribute))
- sdoAttribute = "extendedInstanceClass";
- else if ("nestedInterfaces".equals(attribute))
- sdoAttribute = "nestedInterfaces";
-
- if (sdoAttribute != null)
- {
- return
- element != null && element.hasAttributeNS("commonj.sdo/java", sdoAttribute) ?
- element.getAttributeNS("commonj.sdo/java", sdoAttribute) :
- null;
- }
-
- return super.getEcoreAttribute(element, attribute);
- }
-
- /*
- protected String getEcoreAttribute(XSDConcreteComponent xsdConcreteComponent, String attribute)
- {
- String value = super.getEcoreAttribute(xsdConcreteComponent, attribute);
- if ("package".equals(attribute) && value == null)
- {
- XSDSchema xsdSchema = (XSDSchema)xsdConcreteComponent;
- value = getDefaultPackageName(xsdSchema.getTargetNamespace());
- }
- return value;
- }
- */
-
- protected XSDTypeDefinition getEcoreTypeQNameAttribute(XSDConcreteComponent xsdConcreteComponent, String attribute)
- {
- if (xsdConcreteComponent == null) return null;
- String sdoAttribute = null;
-
- if ("reference".equals(attribute)) sdoAttribute = "propertyType";
- if ("dataType".equals(attribute)) sdoAttribute = "dataType";
-
- if (sdoAttribute != null)
- {
- Element element = xsdConcreteComponent.getElement();
- return element == null ? null : getEcoreTypeQNameAttribute(xsdConcreteComponent, element, "commonj.sdo/xml", sdoAttribute);
- }
-
- return super.getEcoreTypeQNameAttribute(xsdConcreteComponent, attribute);
- }
-
- /**
- * Override default EMF behavior so that the name is not mangled.
- */
- protected String validName(String name, int casing, String prefix) {
- return name;
- }
-
- /**
- * Override default EMF name mangling for anonymous types (simple and complex)
- */
- protected String validAliasName(XSDTypeDefinition xsdTypeDefinition, boolean isUpperCase) {
- return getAliasName(xsdTypeDefinition);
- }
-
- protected String getAliasName(XSDNamedComponent xsdNamedComponent) {
- String result = xsdNamedComponent.getName();
- if (result == null)
- {
- XSDConcreteComponent container = xsdNamedComponent.getContainer();
- if (container instanceof XSDNamedComponent)
- {
- result = getAliasName((XSDNamedComponent)container);
- if (container instanceof XSDTypeDefinition)
- {
- result = "_" + result;
- }
- }
-
- }
- return result;
- }
-
- protected XSDTypeDefinition getEffectiveTypeDefinition(XSDComponent xsdComponent, XSDFeature xsdFeature)
- {
- if (xsdFeature == null)
- {
- return super.getEffectiveTypeDefinition(xsdComponent, xsdFeature);
- }
- XSDTypeDefinition typeDef = getEcoreTypeQNameAttribute(xsdComponent, "dataType");
-
- String isString = getEcoreAttribute(xsdComponent, xsdFeature, "string");
- if ("true".equalsIgnoreCase(isString)) {
- typeDef =
- xsdFeature.resolveSimpleTypeDefinition(rootSchema.getSchemaForSchemaNamespace(), "string");
- }
- if (typeDef == null)
- typeDef = xsdFeature.getType();
- return typeDef;
- }
-
- /**
- * Override EMF algorithm.
- */
- public String qualifiedPackageName(String namespace)
- {
- return getDefaultPackageName(namespace);
- }
-
- //Code below here to provide common URI to java packagname
-
- public static String uncapNameStatic(String name)
- {
- if (name.length() == 0)
- {
- return name;
- }
- else
- {
- String lowerName = name.toLowerCase();
- int i;
- for (i = 0; i < name.length(); i++)
- {
- if (name.charAt(i) == lowerName.charAt(i))
- {
- break;
- }
- }
- if (i > 1 && i < name.length() && !Character.isDigit(name.charAt(i)))
- {
- --i;
- }
- return name.substring(0, i).toLowerCase() + name.substring(i);
- }
- }
-
- protected static String validNameStatic(String name, int casing, String prefix)
- {
- List parsedName = parseNameStatic(name, '_');
- StringBuffer result = new StringBuffer();
- for (Iterator i = parsedName.iterator(); i.hasNext(); )
- {
- String nameComponent = (String)i.next();
- if (nameComponent.length() > 0)
- {
- if (result.length() > 0 || casing == UPPER_CASE)
- {
- result.append(Character.toUpperCase(nameComponent.charAt(0)));
- result.append(nameComponent.substring(1));
- }
- else
- {
- result.append(nameComponent);
- }
- }
- }
-
- return
- result.length() == 0 ?
- prefix :
- Character.isJavaIdentifierStart(result.charAt(0)) ?
- casing == LOWER_CASE ?
- uncapNameStatic(result.toString()) :
- result.toString() :
- prefix + result;
- }
-
- protected static List parseNameStatic(String sourceName, char separator)
- {
- List result = new ArrayList();
- if (sourceName != null)
- {
- StringBuffer currentWord = new StringBuffer();
- boolean lastIsLower = false;
- for (int index = 0, length = sourceName.length(); index < length; ++index)
- {
- char curChar = sourceName.charAt(index);
- if (!Character.isJavaIdentifierPart(curChar))
- {
- curChar = separator;
- }
- if (Character.isUpperCase(curChar) || (!lastIsLower && Character.isDigit(curChar)) || curChar == separator)
- {
- if (lastIsLower && currentWord.length() > 1 || curChar == separator && currentWord.length() > 0)
- {
- result.add(currentWord.toString());
- currentWord = new StringBuffer();
- }
- lastIsLower = false;
- }
- else
- {
- if (!lastIsLower)
- {
- int currentWordLength = currentWord.length();
- if (currentWordLength > 1)
- {
- char lastChar = currentWord.charAt(--currentWordLength);
- currentWord.setLength(currentWordLength);
- result.add(currentWord.toString());
- currentWord = new StringBuffer();
- currentWord.append(lastChar);
- }
- }
- lastIsLower = true;
- }
-
- if (curChar != separator)
- {
- currentWord.append(curChar);
- }
- }
-
- result.add(currentWord.toString());
- }
- return result;
- }
-
- public static String getDefaultPackageName(String targetNamespace)
- {
- if (targetNamespace == null)
- return null;
-
- URI uri = URI.createURI(targetNamespace);
- List parsedName;
- if (uri.isHierarchical())
- {
- String host = uri.host();
- if (host != null && host.startsWith("www."))
- {
- host = host.substring(4);
- }
- parsedName = parseNameStatic(host, '.');
- Collections.reverse(parsedName);
- if (!parsedName.isEmpty())
- {
- parsedName.set(0, ((String)parsedName.get(0)).toLowerCase());
- }
-
- parsedName.addAll(parseNameStatic(uri.trimFileExtension().path(), '/'));
- }
- else
- {
- String opaquePart = uri.opaquePart();
- int index = opaquePart.indexOf(":");
- if (index != -1 && "urn".equalsIgnoreCase(uri.scheme()))
- {
- parsedName = parseNameStatic(opaquePart.substring(0, index), '-');
- if (parsedName.size() > 0 && DOMAINS.contains(parsedName.get(parsedName.size() - 1)))
- {
- Collections.reverse(parsedName);
- parsedName.set(0, ((String)parsedName.get(0)).toLowerCase());
- }
- parsedName.addAll(parseNameStatic(opaquePart.substring(index + 1), '/'));
- }
- else
- {
- parsedName = parseNameStatic(opaquePart, '/');
- }
- }
-
- StringBuffer qualifiedPackageName = new StringBuffer();
- for (Iterator i = parsedName.iterator(); i.hasNext(); )
- {
- String packageName = (String)i.next();
- if (packageName.length() > 0)
- {
- if (qualifiedPackageName.length() > 0)
- {
- qualifiedPackageName.append('.');
- }
- qualifiedPackageName.append(validNameStatic(packageName, LOWER_CASE,"_"));
- }
- }
-
- return qualifiedPackageName.toString().toLowerCase(); //make sure it's lower case .. we can't work with Axis if not.
- }
-
- private XSDSchema loadEPackage(EPackage ePackage)
- {
- XSDSchema ePackageXSDSchema = null;
- XSDEcoreSchemaBuilder schemaBuilder = new XSDEcoreSchemaBuilder(extendedMetaData);
- ePackageXSDSchema = schemaBuilder.getSchema(ePackage);
- xsdComponentToEModelElementMap.putAll(schemaBuilder.getXSDComponentToEModelElementMap());
- targetNamespaceToEPackageMap.put(ePackage.getNsURI(), ePackage);
- populateTypeToTypeObjectMap(ePackage);
- xsdSchemas.add(ePackageXSDSchema);
- return ePackageXSDSchema;
- }
-
- private static class XSDEcoreSchemaBuilder extends EcoreSchemaBuilder
- {
- public XSDEcoreSchemaBuilder(ExtendedMetaData extendedMetaData)
- {
- super(extendedMetaData);
- }
-
- public Map getXSDComponentToEModelElementMap()
- {
- return xsdComponentToEModelElementMap;
- }
- }
-
- class XSDSchemaAdapterFactoryImpl extends AdapterFactoryImpl
- {
- protected SchemaLocator schemaLocator = new SchemaLocator();
-
- public boolean isFactoryForType(Object type)
- {
- return type == XSDSchemaLocator.class;
- }
-
- public Adapter adaptNew(Notifier target, Object type)
- {
- return schemaLocator;
- }
-
- class SchemaLocator extends XSDResourceImpl.SchemaLocator
- {
- public XSDSchema locateSchema(XSDSchema xsdSchema, String namespaceURI,
- String rawSchemaLocationURI, String resolvedSchemaLocation)
- {
- if (targetNamespaceToEPackageMap.containsKey(namespaceURI))
- {
- for (Iterator iter = xsdSchemas.iterator(); iter.hasNext();) {
- XSDSchema schema = (XSDSchema)iter.next();
- String targetNamespace = schema.getTargetNamespace();
- if (targetNamespace != null && targetNamespace.equals(namespaceURI))
- {
- return schema;
- }
- }
- }
- if (namespaceURI != null && !namespaceURI.equals(xsdSchema.getTargetNamespace()))
- {
- EPackage ePackage = extendedMetaData.getPackage(namespaceURI);
- if (ePackage != null)
- {
- XSDSchema schema = loadEPackage(ePackage);
- return schema;
- }
- }
- return super.locateSchema(xsdSchema, namespaceURI, rawSchemaLocationURI, resolvedSchemaLocation);
- }
- }
- }
-
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java
deleted file mode 100644
index 8ff7769041..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java
+++ /dev/null
@@ -1,786 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.xml.namespace.QName;
-
-import org.apache.tuscany.sdo.util.SDOUtil;
-import org.eclipse.xsd.XSDAttributeDeclaration;
-import org.eclipse.xsd.XSDAttributeUse;
-import org.eclipse.xsd.XSDComplexTypeDefinition;
-import org.eclipse.xsd.XSDCompositor;
-import org.eclipse.xsd.XSDConstraint;
-import org.eclipse.xsd.XSDDerivationMethod;
-import org.eclipse.xsd.XSDElementDeclaration;
-import org.eclipse.xsd.XSDFactory;
-import org.eclipse.xsd.XSDForm;
-import org.eclipse.xsd.XSDImport;
-import org.eclipse.xsd.XSDInclude;
-import org.eclipse.xsd.XSDModelGroup;
-import org.eclipse.xsd.XSDParticle;
-import org.eclipse.xsd.XSDProcessContents;
-import org.eclipse.xsd.XSDSchema;
-import org.eclipse.xsd.XSDSchemaContent;
-import org.eclipse.xsd.XSDSimpleTypeDefinition;
-import org.eclipse.xsd.XSDTypeDefinition;
-import org.eclipse.xsd.XSDWildcard;
-
-import commonj.sdo.Property;
-import commonj.sdo.Type;
-import commonj.sdo.helper.XSDHelper;
-
-public class SchemaBuilder extends SDOAnnotations
-{
- public static final String DEFAULT_SCHEMA_LOCATION = "";
- public static final String NAME_SPACE_PREFIX = "stn_";
- private static int prefixCount = 1;
-
- //public static final String MIXED = "mixed";
- //public static final String GROUP = "group";
- public static final String EFEATURE_MAP_ENTRY = "EFeatureMapEntry";
-
- private Map schemaMap = null;
- protected Map targetNamespacePrefixMap = new Hashtable();
- protected Map schemaLocationMap = null;
- protected TypeTable typeTable = null;
- protected XSDFactory xsdFactory = XSDFactory.eINSTANCE;
-
-
- protected SchemaBuilder(Map schemaMap,
- Map nsPrefixMap,
- TypeTable typeTable,
- Map schemaLocMap )
- {
- this.schemaMap = schemaMap;
- this.targetNamespacePrefixMap = nsPrefixMap;
- this.typeTable = typeTable;
- this.schemaLocationMap = schemaLocMap;
- }
-
-
-
-
- private QName addAttribute2ComplexType(String targetNamespace,
- XSDComplexTypeDefinition complexType,
- Property aProperty)
- {
- QName attributeSchemaType = null;
- String prefix = null;
-
- try
- {
- attributeSchemaType = buildSchema(aProperty.getType());
- }
- catch ( IllegalArgumentException e )
- {
- //schema cannot be generated for this type as there exists an xsd already
- //so include that original XSD
- attributeSchemaType = new QName(aProperty.getType().getURI(),
- aProperty.getType().getName(),
- generatePrefix());
- if ( aProperty.getType().isDataType() )
- {
- typeTable.addSimpleSchemaType(aProperty.getType().getName(), attributeSchemaType);
-
- XSDSimpleTypeDefinition simpleType = xsdFactory.createXSDSimpleTypeDefinition();
- simpleType.setName(aProperty.getType().getName());
- simpleType.setTargetNamespace(aProperty.getType().getURI());
- typeTable.addXSDTypeDef(attributeSchemaType.getNamespaceURI(),
- attributeSchemaType.getLocalPart(),
- simpleType);
- }
- else
- {
- typeTable.addComplexSchemaType(aProperty.getType().getURI(),
- aProperty.getType().getName(),
- attributeSchemaType);
-
- XSDComplexTypeDefinition extComplexType = xsdFactory.createXSDComplexTypeDefinition();
- extComplexType.setName(aProperty.getType().getName());
- extComplexType.setTargetNamespace(aProperty.getType().getURI());
- typeTable.addXSDTypeDef(attributeSchemaType.getNamespaceURI(),
- attributeSchemaType.getLocalPart(),
- extComplexType);
- }
- includeExtXSD(aProperty.getType());
- }
- //ensure than an import is done rightaway so that the right prefixes will be used by the
- //attribute whose type is set as 'this type'. Otherwise when setting the type for the attribute
- //there will be a duplicate prefix (like Q1 or Q2... ) that will be created
- prefix = addImports((XSDSchema)schemaMap.get(targetNamespace), attributeSchemaType);
-
- XSDAttributeDeclaration attribute = xsdFactory.createXSDAttributeDeclaration();
- attribute.setName(aProperty.getName());
- XSDAttributeUse orderDateAttributeUse = xsdFactory.createXSDAttributeUse();
- orderDateAttributeUse.setContent(attribute);
- complexType.getAttributeContents().add(orderDateAttributeUse);
- attribute.updateElement();
-
- if ( aProperty.getType().isDataType() )
- {
- attribute.setTypeDefinition((XSDSimpleTypeDefinition)typeTable.getXSDTypeDef(attributeSchemaType.getNamespaceURI(),
- attributeSchemaType.getLocalPart()));
-
- }
- else
- {
- attribute.setTypeDefinition((XSDSimpleTypeDefinition)typeTable.getXSDTypeDef(
- typeTable.getSimpleSchemaTypeName("URI").getNamespaceURI(),
- typeTable.getSimpleSchemaTypeName("URI").getLocalPart()));
-
- }
-
- if ( aProperty.getDefault() != null )
- {
- attribute.setConstraint(XSDConstraint.DEFAULT_LITERAL);
- attribute.setLexicalValue(aProperty.getDefault().toString());
- }
-
- addAnnotations(attribute, aProperty );
- if ( !aProperty.getType().isDataType() )
- {
- String value = prefix + COLON + attributeSchemaType.getLocalPart();
- attribute.getElement().setAttribute(PROPERTY_TYPE, value);
- }
-
- return attributeSchemaType;
- }
-
- private QName addElement2ComplexType(String targetNamespace,
- XSDComplexTypeDefinition complexType,
- Property aProperty)
- {
- String prefix = null;
- QName elementSchemaType = null;
- try
- {
- elementSchemaType = buildSchema(aProperty.getType());
- }
- catch ( IllegalArgumentException e )
- {
- //schema cannot be generated for this type as there exists an xsd already
- //so include that original XSD
- elementSchemaType = new QName(aProperty.getType().getURI(),
- aProperty.getType().getName(),
- generatePrefix());
- if ( aProperty.getType().isDataType() )
- {
- typeTable.addSimpleSchemaType(aProperty.getType().getName(), elementSchemaType);
-
- XSDSimpleTypeDefinition simpleType = xsdFactory.createXSDSimpleTypeDefinition();
- simpleType.setName(aProperty.getType().getName());
- simpleType.setTargetNamespace(aProperty.getType().getURI());
- typeTable.addXSDTypeDef(elementSchemaType.getNamespaceURI(),
- elementSchemaType.getLocalPart(),
- simpleType);
- }
- else
- {
- typeTable.addComplexSchemaType(aProperty.getType().getURI(),
- aProperty.getType().getName(),
- elementSchemaType);
- XSDComplexTypeDefinition extComplexType = xsdFactory.createXSDComplexTypeDefinition();
- extComplexType.setName(aProperty.getType().getName());
- extComplexType.setTargetNamespace(aProperty.getType().getURI());
- typeTable.addXSDTypeDef(elementSchemaType.getNamespaceURI(),
- elementSchemaType.getLocalPart(),
- extComplexType);
- }
- includeExtXSD(aProperty.getType());
- }
-
- //ensure than an import is done rightaway so that the right prefixes will be used by the
- //element whose type is set as 'this type'. Otherwise when setting the type for the element
- //there will be a duplicate prefix (like Q1 or Q2... ) that will be created
- prefix = addImports((XSDSchema)schemaMap.get(targetNamespace), elementSchemaType);
-
- //XmlSchemaElement element = new XmlSchemaElement();
- XSDElementDeclaration element = xsdFactory.createXSDElementDeclaration();
- element.setName(aProperty.getName());
-
- XSDParticle aParticle = xsdFactory.createXSDParticle();
- aParticle.setContent(element);
-
- ((XSDModelGroup)((XSDParticle)complexType.getContent()).getContent()).
- getContents().add(aParticle);
-
- element.updateElement();
-
- if ( aProperty.isMany() )
- {
- aParticle.setMaxOccurs(-1);
- aParticle.setMinOccurs(0);
-
- }
-
- if ( aProperty.isContainment() )
- {
- element.setTypeDefinition(typeTable.getXSDTypeDef(elementSchemaType.getNamespaceURI(),
- elementSchemaType.getLocalPart()));
- }
- else
- {
- if ( !aProperty.getType().isDataType() )
- {
- QName qName = typeTable.getSimpleSchemaTypeName("URI");
- element.setTypeDefinition(typeTable.getXSDTypeDef(qName.getNamespaceURI(),
- qName.getLocalPart()));
- }
- }
-
- addAnnotations(element, aProperty);
- if ( !aProperty.isContainment() && !aProperty.getType().isDataType() )
- {
- String value = prefix + COLON + elementSchemaType.getLocalPart();
- element.getElement().setAttribute(PROPERTY_TYPE, value);
- }
- return elementSchemaType;
-
- }
-
- private void addAnnotations(XSDSchemaContent xsdContent, Property aProperty)
- {
- if ( !aProperty.getAliasNames().isEmpty() )
- {
- addAliasNamesAnnotation(xsdContent, aProperty.getAliasNames());
- }
-
- if ( aProperty.isReadOnly() )
- {
- xsdContent.getElement().setAttribute(READ_ONLY, Boolean.toString(aProperty.isReadOnly()));
- }
-
- if ( aProperty.getOpposite() != null )
- {
- xsdContent.getElement().setAttribute(OPPOSITE_PROPERTY, aProperty.getOpposite().getName());
- }
- }
-
-
- private QName buildComplexSchemaTypeContents(String targetNamespace,
- XSDComplexTypeDefinition complexType,
- Type dataType)
- {
- //clipProperties(dataType);
- List properties = dataType.getDeclaredProperties();
- Iterator iterator = properties.iterator();
- Property aProperty;
- QName propertySchemaTypeName = null;
-
- while ( iterator.hasNext() )
- {
- aProperty = (Property)iterator.next();
- if ( aProperty.isContainment() || aProperty.isMany() || !aProperty.getType().isDataType() )
- {
- propertySchemaTypeName = addElement2ComplexType(targetNamespace, complexType, aProperty);
- }
- else
- {
- propertySchemaTypeName = addAttribute2ComplexType(targetNamespace, complexType, aProperty);
- }
-
- /*if ( !EFEATURE_MAP_ENTRY.equals(aProperty.getType().getName()) )
- {
- addContents2ComplexType(targetNamespace, complexType, aProperty);
- }*/
- }
-
- return propertySchemaTypeName;
-
- }
-
- public QName buildComplexSchemaType(Type dataType)
- {
- //this is called from buildSchema only if isXSD(dataType) is false
- QName complexSchemaTypeName = null ;
- if ( !dataType.isDataType() &&
- (complexSchemaTypeName = typeTable.getComplexSchemaTypeName(dataType.getURI(), dataType.getName())) == null )
- {
- XSDSchema xmlSchema = getXmlSchema(dataType);
- String targetNamespace = dataType.getURI();
- String targetNamespacePrefix = (String)targetNamespacePrefixMap.get(targetNamespace);
-
- complexSchemaTypeName = new QName(targetNamespace,
- dataType.getName(),
- targetNamespacePrefix);
-
- XSDComplexTypeDefinition complexType = xsdFactory.createXSDComplexTypeDefinition();
- complexType.setName(dataType.getName());
- complexType.setTargetNamespace(targetNamespace);
- complexType.setAbstract(dataType.isAbstract());
-
- xmlSchema.getTypeDefinitions().add(complexType);
- xmlSchema.getContents().add(complexType);
-
- complexType.updateElement();
-
- addAnnotations(complexType, dataType);
-
- handleBaseExtn(xmlSchema, dataType, complexType);
- handleSDOSequence(dataType, complexType);
- handleSDOOpenType(dataType, complexType);
-
- //add before constructing the contents because a content element could
- //possibly be of type 'complexType'.
- typeTable.addComplexSchemaType(dataType.getURI(), dataType.getName(), complexSchemaTypeName);
- typeTable.addXSDTypeDef(dataType.getURI(), dataType.getName(), complexType);
-
- //now compose the contents for this complex type
- buildComplexSchemaTypeContents(targetNamespace, complexType, dataType);
-
- //finally create a global element for this type
- createGlobalElement(xmlSchema, complexType, complexSchemaTypeName);
- }
-
- return complexSchemaTypeName;
- }
-
- private void addAnnotations(XSDTypeDefinition xsdType, Type dataType)
- {
- if ( dataType.isAbstract() )
- {
- if ( xsdType instanceof XSDComplexTypeDefinition )
- {
- ((XSDComplexTypeDefinition)xsdType).setAbstract(dataType.isAbstract());
- }
- else
- {
- xsdType.getElement().setAttribute(ABSTRACT_TYPE,
- Boolean.toString(dataType.isAbstract()));
- }
- }
-
- //add alias names if it exists
- addAliasNamesAnnotation(xsdType,
- dataType.getAliasNames());
-
- //add instanceClass annotation
- if ( dataType.getInstanceClass() != null )
- {
- xsdType.getElement().setAttribute(INSTANCE_CLASS, dataType.getInstanceClass().getName());
- }
- }
-
-
- private QName buildSimpleSchemaType(Type dataType)
- {
- QName simpleSchemaTypeName = null;
- if ( dataType.isDataType() &&
- (simpleSchemaTypeName = typeTable.getSimpleSchemaTypeName(dataType.getName()) ) == null )
- {
- XSDSchema xmlSchema = getXmlSchema(dataType);
- XSDSimpleTypeDefinition simpleType = xsdFactory.createXSDSimpleTypeDefinition();
- //set the name
- simpleType.setName(dataType.getName());
- simpleType.setTargetNamespace(dataType.getURI());
- //set abstract=true if abstract
- simpleSchemaTypeName = new QName(dataType.getURI(),
- dataType.getName(),
- (String)targetNamespacePrefixMap.get(dataType.getURI()));
- xmlSchema.getContents().add(simpleType);
- simpleType.updateElement();
-
- addAnnotations(simpleType, dataType);
-
- if ( !dataType.getBaseTypes().isEmpty() )
- {
- Type baseType = (Type)dataType.getBaseTypes().get(0);
-
- QName baseSchemaType = null;
-
- try
- {
- baseSchemaType = buildSchema(baseType);
- }
- catch ( IllegalArgumentException e )
- {
- //this means that the base type comes from a original xsd and hence not generated
- baseSchemaType = new QName(baseType.getURI(),
- baseType.getName(),
- generatePrefix());
-
- typeTable.addSimpleSchemaType(baseType.getName(), baseSchemaType);
-
- XSDSimpleTypeDefinition baseTypeDef = xsdFactory.createXSDSimpleTypeDefinition();
- baseTypeDef.setName(baseType.getName());
- baseTypeDef.setTargetNamespace(baseType.getURI());
- typeTable.addXSDTypeDef(baseType.getURI(), baseType.getName(), baseTypeDef);
-
- //include external XSD locations
- includeExtXSD(baseType);
- }
-
- simpleType.setBaseTypeDefinition((XSDSimpleTypeDefinition)typeTable.
- getXSDTypeDef(baseSchemaType.getNamespaceURI(),baseSchemaType.getLocalPart()));
- addImports(xmlSchema, baseSchemaType);
- }
-
-
- typeTable.addSimpleSchemaType(dataType.getName(), simpleSchemaTypeName);
- typeTable.addXSDTypeDef(dataType.getURI(), dataType.getName(), simpleType);
- }
- return simpleSchemaTypeName;
- }
-
- private void includeExtXSD(Type dataType)
- {
- //now we know there is a type for which the xsd must come from outside
- //create a schema for the namespace of this type and add an include in it for
- //the xsd that is defined externally
- XSDSchema xmlSchema = getXmlSchema(dataType);
-
- //ideally there could be more than one external schema defintions for a namespace
- //and hence schemalocations will be a list of locations
- //List schemaLocations = (List)schemaLocationMap.get(dataType.getURI());
-
- //since as per the specs the input to XSDHelper is a map of <String, String> allowing
- //only one schemalocation for a namespace. So for now this single location will be
- //picked up and put into a list
- List schemaLocations = new Vector();
- if ( schemaLocationMap.get(dataType.getURI()) != null )
- {
- schemaLocations.add(schemaLocationMap.get(dataType.getURI()));
- }
-
- if ( schemaLocations.size() <= 0 )
- {
- schemaLocations.add(DEFAULT_SCHEMA_LOCATION);
- }
-
- Object schemaContent = null;
- Iterator includesIterator = xmlSchema.getContents().iterator();
- Iterator schemaLocIterator = schemaLocations.iterator();
- String aSchemaLocation = null;
- boolean includeExists = false;
- //include all external schema locations
- while ( schemaLocIterator.hasNext() )
- {
- aSchemaLocation = (String)schemaLocIterator.next();
- while ( includesIterator.hasNext() )
- {
- schemaContent = includesIterator.next();
- if ( schemaContent instanceof XSDInclude )
- {
- if ( !includeExists && aSchemaLocation.equals(
- ((XSDInclude)schemaContent).getSchemaLocation()
- ))
- {
- includeExists = true;
- }
- }
- }
-
- if ( !includeExists )
- {
- XSDInclude includeElement = xsdFactory.createXSDInclude();
- includeElement.setSchemaLocation(aSchemaLocation);
- xmlSchema.getContents().add(0, includeElement);
- }
- }
- }
-
- protected QName buildSchema(Type dataType) throws IllegalArgumentException
- {
- QName schemaTypeName = null;
-
- if ( dataType.isDataType() )
- {
- schemaTypeName = typeTable.getSimpleSchemaTypeName(dataType.getName());
- }
- else
- {
- schemaTypeName = typeTable.getComplexSchemaTypeName(dataType.getURI(), dataType.getName());
- }
-
- //attempt to generate only if we have not done it already..i.e the type is
- //not found in the typetable
- if ( schemaTypeName == null )
- {
- XSDHelper xsdHelper = SDOUtil.createHelperContext().getXSDHelper();
-
- if ( !xsdHelper.isXSD( dataType ) )
- {
- if ( dataType.isDataType() )
- {
- schemaTypeName = buildSimpleSchemaType(dataType);
- }
- else
- {
- schemaTypeName = buildComplexSchemaType(dataType);
- }
- }
- else
- {
- throw new IllegalArgumentException("Cannot generate XSD since SDO Type '" +
- dataType.getName() + "' was orginally generated from XSD. Use original XSD");
- }
- }
- return schemaTypeName;
- }
-
-
- private XSDSchema getXmlSchema(Type dataType)
- {
- XSDSchema xmlSchema = null;
-
- if ((xmlSchema = (XSDSchema) schemaMap.get(dataType.getURI())) == null)
- {
- String targetNamespacePrefix = generatePrefix();
-
- xmlSchema = xsdFactory.createXSDSchema();
- xmlSchema.setTargetNamespace(dataType.getURI());
- xmlSchema.setAttributeFormDefault(XSDForm.QUALIFIED_LITERAL);
- xmlSchema.setElementFormDefault(XSDForm.QUALIFIED_LITERAL);
-
- targetNamespacePrefixMap.put(dataType.getURI(), targetNamespacePrefix);
- schemaMap.put(dataType.getURI(), xmlSchema);
-
- xmlSchema.getQNamePrefixToNamespaceMap().put(TypeTable.XS_URI_PREFIX, TypeTable.XML_SCHEMA_URI);
- xmlSchema.setSchemaForSchemaQNamePrefix(TypeTable.XS_URI_PREFIX);
-
- xmlSchema.getQNamePrefixToNamespaceMap().put(targetNamespacePrefix, dataType.getURI());
- //xmlSchema.setSchemaForSchemaQNamePrefix(targetNamespacePrefix);
-
- addSDONamespaces(xmlSchema);
- addPackageAnnotation(xmlSchema, dataType);
- }
- return xmlSchema;
- }
-
-
- private void addSDONamespaces(XSDSchema xmlSchema)
- {
- xmlSchema.getQNamePrefixToNamespaceMap().put(COMMONJ_SDO_NS_PREFIX, COMMONJ_SDO_NS);
- //xmlSchema.setSchemaForSchemaQNamePrefix(COMMONJ_SDO_NS_PREFIX);
-
- xmlSchema.getQNamePrefixToNamespaceMap().put(SDO_JAVA_NS_PREFIX, SDO_JAVA_NS);
- //xmlSchema.setSchemaForSchemaQNamePrefix(SDO_JAVA_NS_PREFIX);
- }
-
-
- /**
- * JAM convert first name of an attribute into UpperCase as an example if
- * there is a instance variable called foo in a bean , then Jam give that as
- * Foo so this method is to correct that error
- *
- * @param wrongName
- * @return the right name, using english as the locale for case conversion
- */
- public static String getCorrectName(String wrongName)
- {
- if (wrongName.length() > 1) {
- return wrongName.substring(0, 1).toLowerCase(Locale.ENGLISH)
- + wrongName.substring(1, wrongName.length());
- } else {
- return wrongName.substring(0, 1).toLowerCase(Locale.ENGLISH);
- }
- }
-
- private String addImports(XSDSchema xmlSchema, QName schemaTypeName)
- {
- String prefix = null;
- Iterator iterator = xmlSchema.getQNamePrefixToNamespaceMap().keySet().iterator();
- while ( iterator.hasNext() )
- {
- prefix = (String)iterator.next();
-
- if ( schemaTypeName.getNamespaceURI().equals(
- xmlSchema.getQNamePrefixToNamespaceMap().get(prefix)) )
- {
- return prefix;
- }
- }
-
- //the following lines are executed only if a prefix was not found which implies that the
- //schemaTypeName was not imported earlier and also it does not belong to the targetnamespace
- XSDImport importElement = xsdFactory.createXSDImport();
- importElement.setNamespace(schemaTypeName.getNamespaceURI());
- xmlSchema.getContents().add(0, importElement);
- prefix = schemaTypeName.getPrefix();
- if ( prefix == null || prefix.length() <= 0 )
- {
- prefix = generatePrefix();
- }
- xmlSchema.getQNamePrefixToNamespaceMap().put(prefix, schemaTypeName.getNamespaceURI());
-
- return prefix;
- }
-
- private void handleSDOSequence(Type datatype, XSDComplexTypeDefinition complexType)
- {
- if ( datatype.isSequenced() )
- {
- complexType.setMixed(true);
- XSDModelGroup choice = xsdFactory.createXSDModelGroup();
- choice.setCompositor(XSDCompositor.CHOICE_LITERAL);
- XSDParticle aParticle = xsdFactory.createXSDParticle();
- aParticle.setContent(choice);
- aParticle.setMaxOccurs(-1);
- complexType.setContent(aParticle);
- }
- else
- {
- //hack to handle group property as choice
- /*if ( getPropertyStartsWithName(datatype.getDeclaredProperties(), GROUP).size() > 0 )
- {
- XmlSchemaChoice choice = new XmlSchemaChoice();
- choice.setMaxOccurs(Long.MAX_VALUE);
- complexType.setParticle(choice);
- }
- else*/
- {
- XSDModelGroup sequence = xsdFactory.createXSDModelGroup();
- sequence.setCompositor(XSDCompositor.SEQUENCE_LITERAL);
- XSDParticle aParticle = xsdFactory.createXSDParticle();
- aParticle.setContent(sequence);
- complexType.setContent(aParticle);
- }
- }
- }
-
- private void handleSDOOpenType(Type datatype, XSDComplexTypeDefinition complexType)
- {
- if ( datatype.isOpen() /*&&
- getPropertyStartsWithName(datatype.getDeclaredProperties(), GROUP).size() <= 0 */)
- {
- XSDWildcard elementWildcard = xsdFactory.createXSDWildcard();
- elementWildcard.getLexicalNamespaceConstraint().add("##other");
- elementWildcard.setProcessContents(XSDProcessContents.LAX_LITERAL);
- // Create a particle to hold the wildcard.
- XSDParticle wildcardParticle = xsdFactory.createXSDParticle();
- wildcardParticle.setContent(elementWildcard);
- wildcardParticle.setMaxOccurs(-1);
- ((XSDModelGroup)((XSDParticle)complexType.getContent()).getContent()).
- getContents().add(wildcardParticle);
-
- XSDWildcard attributeWildcard = xsdFactory.createXSDWildcard();
- attributeWildcard.getLexicalNamespaceConstraint().add("##other");
- attributeWildcard.setProcessContents(XSDProcessContents.LAX_LITERAL);
- complexType.setAttributeWildcard(attributeWildcard);
- }
- }
-
- private void handleBaseExtn(XSDSchema xmlSchema,
- Type datatype,
- XSDComplexTypeDefinition complexType)
- {
- if ( datatype.getBaseTypes().size() > 0 )
- {
- Type baseType = (Type)datatype.getBaseTypes().get(0);
- QName baseSchemaType = null;
-
- try
- {
- baseSchemaType = buildSchema(baseType);
- }
- catch ( IllegalArgumentException e )
- {
- //schema cannot be generated for this type as there exists an xsd already
- //so include that original XSD
- baseSchemaType = new QName(baseType.getURI(),
- baseType.getName(),
- generatePrefix());
-
- XSDSimpleTypeDefinition baseTypeDef = xsdFactory.createXSDSimpleTypeDefinition();
- baseTypeDef.setName(baseType.getName());
- baseTypeDef.setTargetNamespace(baseType.getURI());
- typeTable.addXSDTypeDef(baseType.getURI(), baseType.getName(), baseTypeDef);
-
- includeExtXSD(baseType);
- }
-
- complexType.setDerivationMethod(XSDDerivationMethod.EXTENSION_LITERAL);
-
- if ( baseType.isDataType() )
- {
- XSDSimpleTypeDefinition anonymousSimpleTypeDefinition
- = xsdFactory.createXSDSimpleTypeDefinition();
- anonymousSimpleTypeDefinition.setBaseTypeDefinition((XSDSimpleTypeDefinition)typeTable.
- getXSDTypeDef(baseSchemaType.getNamespaceURI(),baseSchemaType.getLocalPart()));
- complexType.setContent(anonymousSimpleTypeDefinition);
- }
- else
- {
- complexType.setBaseTypeDefinition((XSDSimpleTypeDefinition)typeTable.
- getXSDTypeDef(baseSchemaType.getNamespaceURI(),baseSchemaType.getLocalPart()));
-
- }
-
- addImports(xmlSchema, baseSchemaType);
- }
- }
-
- private String formGlobalElementName(String typeName)
- {
- String firstChar = typeName.substring(0,1);
- return typeName.replaceFirst(firstChar, firstChar.toLowerCase());
- }
-
- private void createGlobalElement(XSDSchema xmlSchema,
- XSDComplexTypeDefinition complexType,
- QName schemaElementName )
- {
- XSDElementDeclaration globalElement = xsdFactory.createXSDElementDeclaration();
- globalElement.setTargetNamespace(xmlSchema.getTargetNamespace());
- globalElement.setName(formGlobalElementName(complexType.getName()));
- globalElement.setTypeDefinition
- (typeTable.getXSDTypeDef(schemaElementName.getNamespaceURI(),
- schemaElementName.getLocalPart()));
- xmlSchema.getContents().add(globalElement);
- xmlSchema.getElementDeclarations().add(globalElement);
- }
-
- private void addAliasNamesAnnotation(XSDSchemaContent typeDef,
- List aliasNames)
- {
- if ( !aliasNames.isEmpty() )
- {
- StringBuffer sb = new StringBuffer();
- Iterator iterator = aliasNames.iterator();
- while ( iterator.hasNext() )
- {
- sb.append(iterator.next());
- }
- typeDef.getElement().setAttribute(ALIAS_NAMES, sb.toString());
- }
- }
-
- private void addPackageAnnotation(XSDSchema xmlSchema, Type dataType)
- {
- if ( dataType.getInstanceClass() != null )
- {
- xmlSchema.updateElement();
- xmlSchema.getElement().setAttribute(JAVA_PACKAGE,
- dataType.getInstanceClass().getPackage().getName());
- }
- }
-
- private String generatePrefix()
- {
- return NAME_SPACE_PREFIX + prefixCount++;
- }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java
deleted file mode 100644
index 1aa2ae466b..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeHelperImpl.java
+++ /dev/null
@@ -1,317 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.tuscany.sdo.api.SDOUtil;
-import org.apache.tuscany.sdo.model.ModelFactory;
-import org.apache.tuscany.sdo.model.internal.InternalFactory;
-import org.apache.tuscany.sdo.model.java.JavaFactory;
-import org.apache.tuscany.sdo.model.xml.XMLFactory;
-import org.apache.tuscany.sdo.model.xml.impl.XMLFactoryImpl;
-import org.apache.tuscany.sdo.util.DataObjectUtil;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.util.ExtendedMetaData;
-
-import commonj.sdo.DataObject;
-import commonj.sdo.Property;
-import commonj.sdo.Sequence;
-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.
- */
-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;
-
- // 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;
- }
-
- private Method getGetStaticTypeMethod(Class classObj) {
- try {
- Method method = classObj.getMethod("getStaticType", null);
- return method;
- }
- catch (Exception e) {
- return null;
- }
- }
-
- public Type getType(Class interfaceClass) {
- Type type = SDOUtil.getJavaSDOType(interfaceClass);
- if (type != null) {
- return type;
- }
-
- Class sdoTypeImplClass = interfaceClass;
- Method getStaticTypeMethod = getGetStaticTypeMethod(interfaceClass);
- if (getStaticTypeMethod == null) {
- String sdoTypeImplClassName = interfaceClass.getName();
- if (sdoTypeImplClassName.endsWith("Impl") == false) {
- sdoTypeImplClass = DataObjectUtil.getImplementationClass(interfaceClass, false);
- if (sdoTypeImplClass == null) {
- return null;
- }
-
- getStaticTypeMethod = getGetStaticTypeMethod(sdoTypeImplClass);
- if (getStaticTypeMethod == null) {
- return null;
- }
- }
- else {
- return null;
- }
- }
-
- try {
- Object implInstance = sdoTypeImplClass.newInstance();
- return (Type)getStaticTypeMethod.invoke(implInstance, null);
- }
- catch (Exception e) {
- 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(helperContext, 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(helperContext, 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()) {
- // Setting xmlElement to FALSE only makes sense here
- Boolean isXmlElement = Boolean.TRUE; // By default, a SDO property is an XSD element
- Sequence anyAttr = modeledProperty.getAnyAttribute();
- for (int i=0; i<anyAttr.size(); i++) {
- Property anyProp = anyAttr.getProperty(i);
- if (XMLFactoryImpl.NAMESPACE_URI.equals(anyProp.getContainingType().getURI())) {
- String propName = anyProp.getName();
- if ("xmlElement".equals(propName)) {
- isXmlElement = (Boolean)anyAttr.getValue(i);
- }
- }
- }
- if (!isXmlElement.booleanValue()) {
- SDOUtil.setPropertyXMLKind(newProperty, false);
- }
- }
- else
- {
- 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(helperContext, 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;
- }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java
deleted file mode 100644
index a28492e28e..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Vector;
-
-import javax.xml.namespace.QName;
-
-//import org.apache.axiom.om.OMElement;
-import org.eclipse.xsd.XSDFactory;
-import org.eclipse.xsd.XSDTypeDefinition;
-import org.w3c.dom.Element;
-
-
-
-public class TypeTable
-{
- public static final String XML_SCHEMA_URI = "http://www.w3.org/2001/XMLSchema";
- public static final String XS_URI_PREFIX = "xs";
- public static final QName XS_QNAME = new QName(XML_SCHEMA_URI, "schema", XS_URI_PREFIX);
- public static final String DELIMITER = "#";
-
- private Hashtable simpleXSDTypes;
- private Hashtable complexXSDTypes;
- private Hashtable xsdTypeDefs;
-
- public static String asQualifiedName(String uri, String typeName)
- {
- return (uri + DELIMITER + typeName);
- }
-
-
- public TypeTable()
- {
- simpleXSDTypes = new Hashtable();
- complexXSDTypes = new Hashtable();
- xsdTypeDefs = new Hashtable();
- populateSimpleXSDTypes();
- populateStdSDOTypes();
- }
-
- private void populateStdSDOTypes()
- {
- simpleXSDTypes.put("Boolean",
- new QName(XML_SCHEMA_URI, "boolean", XS_URI_PREFIX));
- simpleXSDTypes.put("Byte",
- new QName(XML_SCHEMA_URI, "byte", XS_URI_PREFIX));
- simpleXSDTypes.put("Bytes",
- new QName(XML_SCHEMA_URI, "hexBinary", XS_URI_PREFIX));
- simpleXSDTypes.put("Character",
- new QName(XML_SCHEMA_URI, "string", XS_URI_PREFIX));
- simpleXSDTypes.put("DataObject",
- new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX));
- simpleXSDTypes.put("Date",
- new QName(XML_SCHEMA_URI, "dateTime", XS_URI_PREFIX));
- simpleXSDTypes.put("Day",
- new QName(XML_SCHEMA_URI, "gDay", XS_URI_PREFIX));
- simpleXSDTypes.put("Decimal",
- new QName(XML_SCHEMA_URI, "decimal", XS_URI_PREFIX));
- simpleXSDTypes.put("Double",
- new QName(XML_SCHEMA_URI, "double", XS_URI_PREFIX));
- simpleXSDTypes.put("Duration",
- new QName(XML_SCHEMA_URI, "duration", XS_URI_PREFIX));
- simpleXSDTypes.put("Float",
- new QName(XML_SCHEMA_URI, "float", XS_URI_PREFIX));
- simpleXSDTypes.put("Int",
- new QName(XML_SCHEMA_URI, "int", XS_URI_PREFIX));
- simpleXSDTypes.put("Integer",
- new QName(XML_SCHEMA_URI, "integer", XS_URI_PREFIX));
- simpleXSDTypes.put("Long",
- new QName(XML_SCHEMA_URI, "long", XS_URI_PREFIX));
- simpleXSDTypes.put("Month",
- new QName(XML_SCHEMA_URI, "gMonth", XS_URI_PREFIX));
- simpleXSDTypes.put("monthDay",
- new QName(XML_SCHEMA_URI, "gMonthDay", XS_URI_PREFIX));
- simpleXSDTypes.put("Object",
- new QName(XML_SCHEMA_URI, "anySimpleType", XS_URI_PREFIX));
- simpleXSDTypes.put("Short",
- new QName(XML_SCHEMA_URI, "short", XS_URI_PREFIX));
- simpleXSDTypes.put("String",
- new QName(XML_SCHEMA_URI, "string", XS_URI_PREFIX));
- simpleXSDTypes.put("Strings",
- new QName(XML_SCHEMA_URI, "string", XS_URI_PREFIX));
- simpleXSDTypes.put("Time",
- new QName(XML_SCHEMA_URI, "time", XS_URI_PREFIX));
- simpleXSDTypes.put("Year",
- new QName(XML_SCHEMA_URI, "gYear", XS_URI_PREFIX));
- simpleXSDTypes.put("YearMonth",
- new QName(XML_SCHEMA_URI, "gYearMonth", XS_URI_PREFIX));
- simpleXSDTypes.put("YearMonthDay",
- new QName(XML_SCHEMA_URI, "date", XS_URI_PREFIX));
- simpleXSDTypes.put("URI",
- new QName(XML_SCHEMA_URI, "anyURI", XS_URI_PREFIX));
- }
-
- private void populateSimpleXSDTypes() {
- //todo pls use the types from org.apache.ws.commons.schema.constants.Constants
- simpleXSDTypes.put("int",
- new QName(XML_SCHEMA_URI, "int", XS_URI_PREFIX));
- simpleXSDTypes.put("java.lang.String",
- new QName(XML_SCHEMA_URI, "string", XS_URI_PREFIX));
- simpleXSDTypes.put("boolean",
- new QName(XML_SCHEMA_URI, "boolean", XS_URI_PREFIX));
- simpleXSDTypes.put("float",
- new QName(XML_SCHEMA_URI, "float", XS_URI_PREFIX));
- simpleXSDTypes.put("double",
- new QName(XML_SCHEMA_URI, "double", XS_URI_PREFIX));
- simpleXSDTypes.put("short",
- new QName(XML_SCHEMA_URI, "short", XS_URI_PREFIX));
- simpleXSDTypes.put("long",
- new QName(XML_SCHEMA_URI, "long", XS_URI_PREFIX));
- simpleXSDTypes.put("byte",
- new QName(XML_SCHEMA_URI, "byte", XS_URI_PREFIX));
- simpleXSDTypes.put("char",
- new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX));
- simpleXSDTypes.put("java.lang.Integer",
- new QName(XML_SCHEMA_URI, "int", XS_URI_PREFIX));
- simpleXSDTypes.put("java.lang.Double",
- new QName(XML_SCHEMA_URI, "double", XS_URI_PREFIX));
- simpleXSDTypes.put("java.lang.Float",
- new QName(XML_SCHEMA_URI, "float", XS_URI_PREFIX));
- simpleXSDTypes.put("java.lang.Long",
- new QName(XML_SCHEMA_URI, "long", XS_URI_PREFIX));
- simpleXSDTypes.put("java.lang.Character",
- new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX));
- simpleXSDTypes.put("java.lang.Boolean",
- new QName(XML_SCHEMA_URI, "boolean", XS_URI_PREFIX));
- simpleXSDTypes.put("java.lang.Byte",
- new QName(XML_SCHEMA_URI, "byte", XS_URI_PREFIX));
- simpleXSDTypes.put("java.lang.Short",
- new QName(XML_SCHEMA_URI, "short", XS_URI_PREFIX));
- simpleXSDTypes.put("java.util.Date",
- new QName(XML_SCHEMA_URI, "dateTime", XS_URI_PREFIX));
- simpleXSDTypes.put("java.util.Calendar",
- new QName(XML_SCHEMA_URI, "dateTime", XS_URI_PREFIX));
- simpleXSDTypes.put("java.lang.Object",
- new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX));
- simpleXSDTypes.put("java.math.BigDecimal",
- new QName(XML_SCHEMA_URI, "decimal", XS_URI_PREFIX));
-
- // Any types
- simpleXSDTypes.put(Element.class.getName(),
- new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX));
- simpleXSDTypes.put(ArrayList.class.getName(),
- new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX));
- simpleXSDTypes.put(Vector.class.getName(),
- new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX));
- simpleXSDTypes.put(List.class.getName(),
- new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX));
- }
-
- public QName getStdSdoType(String typename)
- {
- return (QName) simpleXSDTypes.get(typename);
- }
-
- public QName getComplexSchemaTypeName(String sdoURI, String sdoTypeName)
- {
- return (QName) complexXSDTypes.get(asQualifiedName(sdoURI, sdoTypeName));
- }
-
- public boolean isSimpleType(String typeName)
- {
- Iterator keys = simpleXSDTypes.keySet().iterator();
- while (keys.hasNext()) {
- String s = (String) keys.next();
- if (s.equals(typeName)) {
- return true;
- }
- }
- return false;
- }
-
- public QName getSimpleSchemaTypeName(String typename)
- {
- return (QName) simpleXSDTypes.get(typename);
- }
-
- public void addSimpleSchemaType(String typeName, QName schemaType)
- {
- simpleXSDTypes.put(typeName, schemaType);
- }
-
-
- public void addComplexSchemaType(String namespaceURI, String name, QName schemaType)
- {
- complexXSDTypes.put(asQualifiedName(namespaceURI, name), schemaType);
- }
-
-
- public QName getQNamefortheType(String namespaceURI, String typeName)
- {
- if ( XML_SCHEMA_URI.equals(namespaceURI))
- {
- return getSimpleSchemaTypeName(typeName);
- }
- else
- {
- return getComplexSchemaTypeName(namespaceURI, typeName);
- }
- }
-
- public void addXSDTypeDef(String namespaceURI, String typeName, XSDTypeDefinition aTypeDef)
- {
- if ( namespaceURI != null && typeName != null && aTypeDef != null )
- {
- xsdTypeDefs.put(asQualifiedName(namespaceURI, typeName), aTypeDef);
- }
- }
-
- public XSDTypeDefinition getXSDTypeDef(String namespaceURI, String typeName)
- {
- XSDTypeDefinition typeDef = null;
- if ( namespaceURI != null && typeName != null )
- {
- if ( XML_SCHEMA_URI.equals(namespaceURI) )
- {
- if ( ( typeDef = (XSDTypeDefinition)xsdTypeDefs.get(asQualifiedName(namespaceURI, typeName)) ) == null )
- {
- typeDef = XSDFactory.eINSTANCE.createXSDSimpleTypeDefinition();
- typeDef.setName(typeName);
- typeDef.setTargetNamespace(namespaceURI);
- addXSDTypeDef(namespaceURI, typeName, typeDef);
- }
- }
- else
- {
- typeDef = (XSDTypeDefinition)xsdTypeDefs.get(asQualifiedName(namespaceURI, typeName));
- }
- }
- return typeDef;
- }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLDocumentImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLDocumentImpl.java
deleted file mode 100644
index bff8375e44..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLDocumentImpl.java
+++ /dev/null
@@ -1,574 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.tuscany.sdo.SimpleAnyTypeDataObject;
-import org.apache.tuscany.sdo.util.DataObjectUtil;
-import org.apache.tuscany.sdo.util.SDOUtil;
-import org.apache.tuscany.sdo.util.resource.SDOXMLResourceImpl;
-import org.eclipse.emf.common.util.EMap;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.ecore.util.ExtendedMetaData;
-import org.eclipse.emf.ecore.util.FeatureMap;
-import org.eclipse.emf.ecore.util.FeatureMapUtil;
-import org.eclipse.emf.ecore.xmi.XMLResource;
-import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.xml.sax.InputSource;
-
-import commonj.sdo.DataObject;
-import commonj.sdo.Type;
-import commonj.sdo.helper.XMLDocument;
-
-
-/**
- * Represents an XML Document containing a tree of DataObjects.
- *
- * An example XMLDocument fragment is:
- * <?xml version="1.0"?>
- * <purchaseOrder orderDate="1999-10-20">
- *
- * created from this XML Schema fragment:
- * <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- * <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
- * <xsd:complexType name="PurchaseOrderType">
- *
- * Upon loading this XMLDocument:
- * DataObject is an instance of Type PurchaseOrderType.
- * RootElementURI is null because the XSD has no targetNamespace URI.
- * RootElementName is purchaseOrder.
- * Encoding is null because the document did not specify an encoding.
- * XMLDeclaration is true because the document contained an XML declaration.
- * XMLVersion is 1.0
- * SchemaLocation and noNamespaceSchemaLocation are null because they are
- * not specified in the document.
- *
- * When saving the root element, if the type of the root dataObject is not the
- * type of global element specified by rootElementURI and rootElementName,
- * or if a global element does not exist for rootElementURI and rootElementName,
- * then an xsi:type declaration is written to record the root DataObject's Type.
- *
- * When loading the root element and an xsi:type declaration is found
- * it is used as the type of the root DataObject. In this case,
- * if validation is not being performed, it is not an error if the
- * rootElementName is not a global element.
- */
-public class XMLDocumentImpl implements XMLDocument
-{
- protected ExtendedMetaData extendedMetaData;
-
- protected EObject rootObject;
-
- protected XMLResource resource;
-
- protected EStructuralFeature rootElement;
-
- protected EObject documentRoot;
-
- protected final static String WHITESPACE_REGEX = "\\s";
-
- //TODO clean up the options thing
- protected XMLDocumentImpl(ExtendedMetaData extendedMetaData, Object options)
- {
- this.extendedMetaData = extendedMetaData;
- ResourceSet resourceSet = DataObjectUtil.createResourceSet();
-
- if (options instanceof Map)
- {
- Class resourceFactoryClass = (Class)((Map)options).get("GENERATED_LOADER");
- if (resourceFactoryClass != null)
- {
- try
- {
- Object resourceFactory = resourceFactoryClass.newInstance();
- resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", resourceFactory);
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- }
-
- resource = (XMLResource)resourceSet.createResource(URI.createURI("http:///temp.xml"));
- DataObjectUtil.configureXMLResource(resource, extendedMetaData);
- }
-
- protected XMLDocumentImpl(ExtendedMetaData extendedMetaData)
- {
- this(extendedMetaData, null);
- }
-
- protected XMLDocumentImpl(ExtendedMetaData extendedMetaData, DataObject dataObject, String rootElementURI, String rootElementName)
- {
- this(extendedMetaData);
-
- rootObject = (EObject)dataObject;
-
- rootElement = extendedMetaData.getElement(rootElementURI, rootElementName);
- if (rootElement == null)
- {
- rootElement = ExtendedMetaData.INSTANCE.demandFeature(rootElementURI, rootElementName, true);
- }
-
- EClass documentRootClass = rootElement.getEContainingClass();
- documentRoot = EcoreUtil.create(documentRootClass);
- resource.getContents().add(documentRoot);
- }
-
- protected void save(OutputStream outputStream, Object options) throws IOException
- {
- save(outputStream, null, options);
- }
-
- protected void save(Writer outputWriter, Object options) throws IOException
- {
- // TODO temporary brute-force implementation ... to be replaced
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- save(outputStream, options);
- outputWriter.write(new String(outputStream.toByteArray()));
- }
-
- protected void save(Node node, Object options) throws IOException
- {
- save(null, (Document)node, options);
- }
-
- protected void save(OutputStream outputStream, Document document, Object options) throws IOException
- {
- EObject oldContainer = null;
- Resource oldResource = null;
- EReference oldContainmentReference = null;
- int oldContainmentIndex = -1;
-
- if (documentRoot != null)
- {
- oldContainer = rootObject.eContainer();
- if (oldContainer != null)
- oldContainmentReference = rootObject.eContainmentFeature();
- else
- oldResource = rootObject.eResource();
- if (oldContainer != documentRoot || oldContainmentReference != rootElement)
- {
- if (oldResource != null)
- {
- oldContainmentIndex = oldResource.getContents().indexOf(rootObject);
- oldResource.getContents().remove(oldContainmentIndex);
- }
- else if (oldContainmentReference != null && FeatureMapUtil.isMany(oldContainer, oldContainmentReference))
- oldContainmentIndex = ((List)oldContainer.eGet(oldContainmentReference)).indexOf(rootObject);
-
- Object rootValue =
- rootElement instanceof EAttribute && rootObject instanceof SimpleAnyTypeDataObject ?
- ((SimpleAnyTypeDataObject)rootObject).getValue() : rootObject;
-
- documentRoot.eSet(rootElement, rootValue);
- }
- }
-
- if (outputStream != null)
- resource.save(outputStream, (Map)options);
- else // if (document != null)
- resource.save(document, (Map)options, null);
-
- if (oldResource != null)
- {
- oldResource.getContents().add(oldContainmentIndex, rootObject);
- }
- if (rootElement instanceof EReference)
- {
- if (oldContainer != null)
- {
- if (oldContainer != documentRoot || oldContainmentReference != rootElement)
- {
- if (FeatureMapUtil.isMany(oldContainer, oldContainmentReference))
- ((List)oldContainer.eGet(oldContainmentReference)).add(oldContainmentIndex, rootObject);
- else
- oldContainer.eSet(oldContainmentReference, rootObject);
- }
- }
- else if (documentRoot != null)
- {
- documentRoot.eSet(rootElement, null);
- }
- }
- }
-
- protected void load(InputStream inputStream, String locationURI, Object options) throws IOException
- {
- InputSource inputSource = new InputSource(inputStream);
- load(inputSource, locationURI, options);
- }
-
- protected void load(Reader inputReader, String locationURI, Object options) throws IOException
- {
- InputSource inputSource = new InputSource(inputReader);
- load(inputSource, locationURI, options);
- }
-
- protected final void load(Node node, Object options) throws IOException {
- resource.load(node, (Map)options);
- initLoadedRoot();
- }
-
- protected final void load(XMLStreamReader reader, Map options) throws IOException
- {
- ((SDOXMLResourceImpl)resource).load(reader, options);
- initLoadedRoot();
- }
-
- protected void load(InputSource inputSource, String locationURI, Object options) throws IOException
- {
- if (locationURI != null)
- {
- inputSource.setSystemId(locationURI);
- resource.setURI(URI.createURI(locationURI));
- }
- resource.load(inputSource, (Map)options);
- initLoadedRoot();
- }
-
- /**
- * @return a Map object with key-value pair where key is the DataObject and value contains the info
- * about the unknown properties for the DataObject
- */
- public Map getUnknownProperties(){
- return resource.getEObjectToExtensionMap();
- }
-
- private void initLoadedRoot()
- {
- rootObject = null;
- rootElement = null;
- documentRoot = null;
-
- if (!resource.getContents().isEmpty())
- {
- documentRoot = (EObject)resource.getContents().get(0);
- EClass documentRootClass = documentRoot.eClass();
- if ("".equals(extendedMetaData.getName(documentRootClass))) //TODO efficient way to check this? Maybe DataObject.getContainer should also check this?
- {
- FeatureMap featureMap = (FeatureMap)documentRoot.eGet(documentRootClass.getEStructuralFeature(0)); // get mixed feature
- int size = featureMap.size();
- for (int index = 0; index < size; index++)
- {
- EStructuralFeature feature = featureMap.getEStructuralFeature(index);
- boolean isText =
- feature == XMLTypePackage.Literals.XML_TYPE_DOCUMENT_ROOT__TEXT ||
- feature == XMLTypePackage.Literals.XML_TYPE_DOCUMENT_ROOT__CDATA ||
- feature == XMLTypePackage.Literals.XML_TYPE_DOCUMENT_ROOT__COMMENT;
- if (!isText)
- {
- if (feature instanceof EReference)
- {
- rootObject = (EObject)featureMap.getValue(index);
- documentRoot.eUnset(feature);
- }
- else //EAttribute
- {
- rootObject = (EObject)SDOUtil.createDataTypeWrapper((Type)feature.getEType(), featureMap.getValue(index));
- }
- rootElement = feature;
- break;
- }
- } //for
- if (rootObject == null)
- rootObject = ((SDOXMLResourceImpl) resource).root;
- }
- else
- {
- rootObject = documentRoot;
- documentRoot = null;
- }
- }
- }
-
- public DataObject getRootObject()
- {
- return (DataObject)rootObject;
- }
-
- public String getRootElementURI()
- {
- if (rootElement != null)
- {
- return extendedMetaData.getNamespace(rootElement);
- }
- else if (rootObject != null)
- {
- return extendedMetaData.getNamespace(rootObject.eClass());
- }
- return null;
- }
-
- public String getRootElementName()
- {
- if (rootElement != null)
- {
- return extendedMetaData.getName(rootElement);
- }
- else if (rootObject != null)
- {
- return extendedMetaData.getName(rootObject.eClass());
- }
- return null;
- }
-
- public String getEncoding()
- {
- return resource.getEncoding();
- }
-
- public void setEncoding(String encoding)
- {
- resource.setEncoding(encoding);
- }
-
- public boolean isXMLDeclaration()
- {
- return Boolean.FALSE.equals(resource.getDefaultSaveOptions().get(XMLResource.OPTION_DECLARE_XML));
- }
-
- public void setXMLDeclaration(boolean xmlDeclaration)
- {
- resource.getDefaultSaveOptions().put(XMLResource.OPTION_DECLARE_XML, xmlDeclaration ? Boolean.TRUE : Boolean.FALSE);
- }
-
- public String getXMLVersion()
- {
- return resource.getXMLVersion();
- }
-
- public void setXMLVersion(String xmlVersion)
- {
- resource.setXMLVersion(xmlVersion);
- }
-
- /**
- * @return an EMap containing the schema locations or null when no map
- */
- protected EMap getSchemaLocationMap()
- {
- EMap result = null;
- if ((documentRoot != null) && (extendedMetaData != null))
- {
- EReference xsiSchemaLocationMapFeature = extendedMetaData
- .getXSISchemaLocationMapFeature(documentRoot.eClass());
- if (xsiSchemaLocationMapFeature != null)
- {
- result = (EMap) documentRoot.eGet(xsiSchemaLocationMapFeature);
- }
- }
- return result;
- }
-
- /**
- * @param value
- * from schema location map.
- * @return string form of URI from provided value, deresolved if appropriate.
- */
- protected String deresolve(String value)
- {
- URI location = URI.createURI(value);
- URI resourceURI = resource.getURI();
- boolean shouldDeresolve = resourceURI != null && !resourceURI.isRelative()
- && resourceURI.isHierarchical();
- if (shouldDeresolve && !location.isRelative())
- {
- URI deresolvedURI = location.deresolve(resourceURI, true, true, false);
- if (deresolvedURI.hasRelativePath())
- {
- location = deresolvedURI;
- }
- }
- return location.toString();
- }
-
- /**
- * @param value
- * for schema location from input parameter.
- * @return string form of URI from provided value, resolved if appropriate.
- */
- protected String resolve(String value)
- {
- URI location = URI.createURI(value);
- URI resourceURI = resource.getURI();
- boolean shouldResolve = resourceURI != null && resourceURI.isHierarchical()
- && !resourceURI.isRelative();
- if (shouldResolve && location.isRelative() && location.hasRelativePath())
- {
- location = location.resolve(resourceURI, false);
- }
- return location.toString();
- }
-
- public String getSchemaLocation()
- {
- EMap xsiSchemaLocationMap = getSchemaLocationMap();
- if (xsiSchemaLocationMap != null)
- {
- if (!xsiSchemaLocationMap.isEmpty())
- {
- StringBuffer xsiSchemaLocation = new StringBuffer();
- for (Iterator i = xsiSchemaLocationMap.entrySet().iterator(); i
- .hasNext();)
- {
- Map.Entry entry = (Map.Entry) i.next();
- String namespace = (String) entry.getKey();
- if (namespace != null)
- {
- if (xsiSchemaLocation.length() > 0)
- {
- xsiSchemaLocation.append(' ');
- }
- xsiSchemaLocation.append(namespace);
- xsiSchemaLocation.append(' ');
- String value = entry.getValue().toString();
- xsiSchemaLocation.append(deresolve(value));
- }
- }
- return xsiSchemaLocation.toString().equals("") ? null
- : xsiSchemaLocation.toString();
- }
- }
- return null;
- }
-
- public void setSchemaLocation(String schemaLocation)
- {
- EMap xsiSchemaLocationMap = getSchemaLocationMap();
- if (xsiSchemaLocationMap != null)
- {
- // only remove the entries from xsiSchemaLocationMap that contain a
- // non-null key
- for (Iterator i = xsiSchemaLocationMap.entrySet().iterator(); i.hasNext();)
- {
- Map.Entry entry = (Map.Entry) i.next();
- if (entry.getKey() != null)
- {
- i.remove();
- }
- }
- if (xsiSchemaLocationMap.size() == 0)
- {
- resource.getDefaultSaveOptions().put(
- XMLResource.OPTION_SCHEMA_LOCATION, Boolean.FALSE);
- }
- if (schemaLocation != null)
- {
- String[] values = schemaLocation.split(WHITESPACE_REGEX);
- for (int i = 0; i < values.length; i++) // note: also incremented in
- // loop
- {
- String key = values[i++];
- if (i < values.length)
- {
- xsiSchemaLocationMap.put(key, resolve(values[i]));
- }
- }
- if (xsiSchemaLocationMap.size() != 0)
- {
- resource.getDefaultSaveOptions().put(
- XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);
- }
- }
- }
- }
-
- public String getNoNamespaceSchemaLocation()
- {
- EMap xsiSchemaLocationMap = getSchemaLocationMap();
- if (xsiSchemaLocationMap != null)
- {
- StringBuffer xsiSchemaLocation = new StringBuffer();
- if (!xsiSchemaLocationMap.isEmpty())
- {
- Object valueObject = xsiSchemaLocationMap.get(null);
- if (valueObject != null)
- {
- String valueString = (String) valueObject;
- String[] values = valueString.split(WHITESPACE_REGEX);
- for (int i = 0; i < values.length; i++)
- {
- if (xsiSchemaLocation.length() > 0)
- {
- xsiSchemaLocation.append(' ');
- }
- xsiSchemaLocation.append(deresolve(values[i]));
- }
- }
- String result = xsiSchemaLocation.toString();
- return result.equals("") ? null : result;
- }
- }
- return null;
- }
-
- public void setNoNamespaceSchemaLocation(String schemaLocation)
- {
- EMap xsiSchemaLocationMap = getSchemaLocationMap();
- if (xsiSchemaLocationMap != null)
- {
- // only remove the entries from xsiSchemaLocationMap that contain a null
- // key
- xsiSchemaLocationMap.removeKey(null);
- if (xsiSchemaLocationMap.size() == 0)
- {
- resource.getDefaultSaveOptions().put(
- XMLResource.OPTION_SCHEMA_LOCATION, Boolean.FALSE);
- }
- if (schemaLocation != null)
- {
- String[] values = schemaLocation.split(WHITESPACE_REGEX);
- for (int i = 0; i < values.length; i++)
- {
- xsiSchemaLocationMap.put(null, resolve(values[i]));
- }
- if (xsiSchemaLocationMap.size() != 0)
- {
- resource.getDefaultSaveOptions().put(
- XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);
- }
- }
- }
- }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLHelperImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLHelperImpl.java
deleted file mode 100644
index 4d0f3d7de8..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLHelperImpl.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-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;
-import javax.xml.transform.dom.DOMResult;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.sax.SAXSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.eclipse.emf.ecore.util.ExtendedMetaData;
-import org.xml.sax.InputSource;
-
-import commonj.sdo.DataObject;
-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.
- */
-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) {
- XMLDocument xmlDocument = new XMLDocumentImpl(extendedMetaData, dataObject, rootElementURI, rootElementName);
- xmlDocument.setEncoding("UTF-8");
- return xmlDocument;
- }
-
- public HelperContext getHelperContext() {
- return helperContext;
- }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelper.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelper.java
deleted file mode 100644
index 851c7d93dd..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelper.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-/**
- * @deprecated
- */
-public interface XMLStreamHelper extends org.apache.tuscany.sdo.api.XMLStreamHelper {
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java
deleted file mode 100644
index 7b0c2fc597..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XMLStreamHelperImpl.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-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;
-import javax.xml.stream.XMLStreamWriter;
-
-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.HelperContext;
-import commonj.sdo.helper.XMLDocument;
-
-/**
- * @version $Rev$ $Date$
- */
-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();
- }
-
- 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;
- }
-}
diff --git a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java b/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java
deleted file mode 100644
index 829acd38f4..0000000000
--- a/branches/sdo-1.1-incubating/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tuscany.sdo.helper;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.apache.tuscany.sdo.impl.DynamicDataObjectImpl;
-import org.apache.tuscany.sdo.util.DataObjectUtil;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EModelElement;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.impl.EPackageRegistryImpl;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.ecore.util.ExtendedMetaData;
-import org.eclipse.xsd.XSDSchema;
-import org.eclipse.xsd.ecore.XSDEcoreBuilder;
-import org.eclipse.xsd.util.XSDResourceFactoryImpl;
-import org.eclipse.xsd.util.XSDResourceImpl;
-import org.xml.sax.InputSource;
-
-import commonj.sdo.Property;
-import commonj.sdo.Type;
-import commonj.sdo.helper.HelperContext;
-import commonj.sdo.helper.TypeHelper;
-import commonj.sdo.helper.XSDHelper;
-
-/**
- * Provides access to additional information when the Type or Property is
- * defined by an XML Schema (XSD). Methods return null/false otherwise or if the
- * information is unavailable. Defines Types from an XSD.
- */
-public class XSDHelperImpl implements XSDHelper {
- protected boolean extensibleNamespaces = false;
- protected HelperContext helperContext;
- protected SDOXSDEcoreBuilder nondelegatingEcoreBuilder = null;
- protected HashMap tcclToEcoreBuilderMap = null;
- private ExtendedMetaData extendedMetaData;
-
- public XSDHelperImpl(HelperContext hc, String redefineBuiltIn, boolean extensibleNamespaces) {
- this.helperContext = hc;
- this.extensibleNamespaces = extensibleNamespaces;
- extendedMetaData = ((HelperContextImpl)helperContext).extendedMetaData;
-
- SDOXSDEcoreBuilder ecoreBuilder = createEcoreBuilder();
-
- if (extendedMetaData instanceof SDOExtendedMetaDataImpl && ((SDOExtendedMetaDataImpl)extendedMetaData)
- .getRegistry() instanceof EPackageRegistryImpl.Delegator) {
- tcclToEcoreBuilderMap = new HashMap();
- putTCCLEcoreBuilder(ecoreBuilder);
- } else {
- nondelegatingEcoreBuilder = ecoreBuilder;
- }
-
- if (redefineBuiltIn != null) { // Redefining/regenerating this built-in
- // model
- ecoreBuilder.getTargetNamespaceToEPackageMap().remove(redefineBuiltIn);
- }
- }
-
- public XSDHelperImpl(HelperContext hc) {
- this(hc, null, false);
- }
-
- /**
- * Redefine/regenerating the built-in model
- * @param redefineBuiltIn
- */
- public void setRedefineBuiltIn(String redefineBuiltIn) {
- if (redefineBuiltIn != null) {
- getEcoreBuilder().getTargetNamespaceToEPackageMap().remove(redefineBuiltIn);
- }
- }
-
- public void setExtensibleNamespaces(boolean extensibleNamespaces) {
- this.extensibleNamespaces = extensibleNamespaces;
- }
-
- protected SDOXSDEcoreBuilder createEcoreBuilder() {
- SDOXSDEcoreBuilder ecoreBuilder = new SDOXSDEcoreBuilder(extendedMetaData, extensibleNamespaces);
-
- // Add the built-in models to the targetNamespaceToEPackageMap so they
- // can't be (re)defined/overridden
- for (Iterator iter = TypeHelperImpl.getBuiltInModels().iterator(); iter.hasNext();) {
- EPackage ePackage = (EPackage)iter.next();
- ecoreBuilder.getTargetNamespaceToEPackageMap().put(ePackage.getNsURI(), ePackage);
- }
-
- return ecoreBuilder;
- }
-
- protected void putTCCLEcoreBuilder(XSDEcoreBuilder ecoreBuilder) {
- ClassLoader tccl = Thread.currentThread().getContextClassLoader();
- if (tcclToEcoreBuilderMap.get(tccl) == null) {
- tcclToEcoreBuilderMap.put(tccl, ecoreBuilder);
- }
- }
-
- protected SDOXSDEcoreBuilder getEcoreBuilder() {
- if (nondelegatingEcoreBuilder != null)
- return nondelegatingEcoreBuilder;
-
- SDOXSDEcoreBuilder result = null;
- try {
- for (ClassLoader tccl = Thread.currentThread().getContextClassLoader(); tccl != null; tccl =
- tccl.getParent()) {
- result = (SDOXSDEcoreBuilder)tcclToEcoreBuilderMap.get(tccl);
- if (result != null)
- return result;
- } // for
- } catch (SecurityException exception) {
- // exception.printStackTrace();
- }
-
- result = createEcoreBuilder();
- putTCCLEcoreBuilder(result);
-
- return result;
- }
-
- public String getLocalName(Type type) {
- return extendedMetaData.getName((EClassifier)type);
- }
-
- public String getLocalName(Property property) {
- return extendedMetaData.getName((EStructuralFeature)property);
- }
-
- public String getNamespaceURI(Property property) {
- return extendedMetaData.getNamespace((EStructuralFeature)property);
- }
-
- public boolean isAttribute(Property property) {
- return extendedMetaData.getFeatureKind((EStructuralFeature)property) == ExtendedMetaData.ATTRIBUTE_FEATURE;
- }
-
- public boolean isElement(Property property) {
- return extendedMetaData.getFeatureKind((EStructuralFeature)property) == ExtendedMetaData.ELEMENT_FEATURE;
- }
-
- public boolean isMixed(Type type) {
- if (type instanceof EClass) {
- return extendedMetaData.getContentKind((EClass)type) == ExtendedMetaData.MIXED_CONTENT;
- } else {
- return false;
- }
- }
-
- public boolean isXSD(Type type) {
- return ((EModelElement)type).getEAnnotation(ExtendedMetaData.ANNOTATION_URI) != null;
- }
-
- public Property getGlobalProperty(String uri, String propertyName, boolean isElement) {
- if (isElement) {
- return (Property)extendedMetaData.getElement(uri, propertyName);
- } else {
- return (Property)extendedMetaData.getAttribute(uri, propertyName);
- }
- }
-
- public String getAppinfo(Type type, String source) {
- return getAppinfo((EModelElement)type, source);
- }
-
- public String getAppinfo(Property property, String source) {
- return getAppinfo((EModelElement)property, source);
- }
-
- protected String getAppinfo(EModelElement eModelElement, String source) {
- return (String)eModelElement.getEAnnotation(source).getDetails().get("appinfo");
- }
-
- public List /* Type */define(String xsd) {
- InputStream inputStream = new ByteArrayInputStream(xsd.getBytes());
- return define(inputStream, "*.xsd");
- }
-
- public List /* Type */define(Reader xsdReader, String schemaLocation) {
- InputSource inputSource = new InputSource(xsdReader);
- return define(inputSource, schemaLocation);
-
- }
-
- public List /* Type */define(InputStream xsdInputStream, String schemaLocation) {
- InputSource inputSource = new InputSource(xsdInputStream);
- return define(inputSource, schemaLocation);
- }
-
- protected List /* Type */define(InputSource inputSource, String schemaLocation) {
- try {
- SDOXSDEcoreBuilder ecoreBuilder = getEcoreBuilder();
- ResourceSet resourceSet = ecoreBuilder.createResourceSet();
- Resource model =
- resourceSet.createResource(URI.createURI(schemaLocation != null ? schemaLocation : "null.xsd"));
- ((XSDResourceImpl)model).load(inputSource, null);
-
- List newTypes = new ArrayList();
- for (Iterator schemaIter = model.getContents().iterator(); schemaIter.hasNext();) {
- XSDSchema schema = (XSDSchema)schemaIter.next();
-
- String targetNamespace = schema.getTargetNamespace();
- EPackage ePackage = extendedMetaData.getPackage(targetNamespace);
- if (extensibleNamespaces || ePackage == null || TypeHelperImpl.getBuiltInModels().contains(ePackage)) {
- Map targetNamespaceToEPackageMap = ecoreBuilder.getTargetNamespaceToEPackageMap();
- targetNamespaceToEPackageMap.remove(targetNamespace);
-
- Collection originalEPackages = new HashSet(targetNamespaceToEPackageMap.values());
- ecoreBuilder.generate(schema);
- Collection newEPackages = ecoreBuilder.getTargetNamespaceToEPackageMap().values();
-
- for (Iterator iter = newEPackages.iterator(); iter.hasNext();) {
- EPackage currentPackage = (EPackage)iter.next();
- if (!originalEPackages.contains(currentPackage)) {
- currentPackage.setEFactoryInstance(new DynamicDataObjectImpl.FactoryImpl());
- EcoreUtil.freeze(currentPackage);
- newTypes.addAll(currentPackage.getEClassifiers());
- }
- }
- }
- }
-
- return newTypes;
- } catch (Exception e) {
- e.printStackTrace();
- throw new IllegalArgumentException(e.getMessage());
- }
- }
-
- public String generate(List /* Type */types) throws IllegalArgumentException {
- return generate(types, new Hashtable());
- }
-
- public String generate(List /* Type */types, Map /* String, String */namespaceToSchemaLocation)
- throws IllegalArgumentException {
- if (types != null && !types.isEmpty()) {
- Hashtable schemaMap = new Hashtable();
- Hashtable nsPrefixMap = new Hashtable();
- TypeTable typeTable = new TypeTable();
-
- SchemaBuilder schemaBuilder =
- new SchemaBuilder(schemaMap, nsPrefixMap, typeTable, namespaceToSchemaLocation);
-
- Iterator iterator = types.iterator();
- Type dataType = null;
-
- try {
- while (iterator.hasNext()) {
- dataType = (Type)iterator.next();
- schemaBuilder.buildSchema(dataType);
- }
-
- XSDSchema xmlSchema = null;
- iterator = schemaMap.values().iterator();
- StringWriter writer = new StringWriter();
-
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- Transformer transformer = transformerFactory.newTransformer();
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");
- transformer.setOutputProperty(OutputKeys.METHOD, "xml");
- transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-
- while (iterator.hasNext()) {
- xmlSchema = (XSDSchema)iterator.next();
-
- if (xmlSchema.getElement() == null) {
- xmlSchema.updateElement();
- }
-
- transformer.transform(new DOMSource(xmlSchema.getElement().getOwnerDocument()),
- new StreamResult(writer));
- }
- writer.close();
- return writer.getBuffer().toString();
- } catch (Exception e) {
- // System.out.println("Unable to generate schema due to ..." +
- // e);
- // e.printStackTrace();
- throw new IllegalArgumentException(e.getMessage());
- }
- } else {
- // System.out.println("No SDO Types to generate schema ...");
- return "";
- }
- }
-
- public HelperContext getHelperContext() {
- return helperContext;
- }
-}