You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ke...@apache.org on 2007/02/19 15:15:20 UTC
svn commit: r509210 -
/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java
Author: kelvingoodson
Date: Mon Feb 19 06:15:19 2007
New Revision: 509210
URL: http://svn.apache.org/viewvc?view=rev&rev=509210
Log:
TUSCANY-1099 -- applying patch, compiles and runs all tests fine under IBM JDK 1.4.2 except for TypeConversionTestCase. I am sure this is unrelated to this patch, so I will open a JIRA for this.
Modified:
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java
Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java?view=diff&rev=509210&r1=509209&r2=509210
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOXSDEcoreBuilder.java Mon Feb 19 06:15:19 2007
@@ -24,15 +24,35 @@
import java.util.Iterator;
import java.util.List;
+import javax.xml.XMLConstants;
+
import org.apache.tuscany.sdo.SDOExtendedMetaData;
import org.apache.tuscany.sdo.model.ModelFactory;
import org.apache.tuscany.sdo.util.SDOUtil;
import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.*;
+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.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.ExtendedMetaData;
-import org.eclipse.xsd.*;
+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.XSDEcoreBuilder;
import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
/**
* TODO:
@@ -59,6 +79,31 @@
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 ?
@@ -68,8 +113,7 @@
if (ePackage != null)
return ePackage;
ePackage = super.getEPackage(xsdNamedComponent);
- String nsPrefix = xsdNamedComponent.getElement().lookupPrefix(
- targetNamespace);
+ String nsPrefix = lookupPrefix(xsdNamedComponent.getElement(), targetNamespace);
if (nsPrefix != null)
ePackage.setNsPrefix(nsPrefix);
return ePackage;
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org