You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ke...@apache.org on 2007/07/11 18:32:45 UTC

svn commit: r555330 - in /incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource: DataObjectXMLStreamReader.java SDOXMLResourceImpl.java

Author: kelvingoodson
Date: Wed Jul 11 09:32:38 2007
New Revision: 555330

URL: http://svn.apache.org/viewvc?view=rev&rev=555330
Log:
TUSCANY-1385 port to branch

Modified:
    incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java
    incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java

Modified: incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java?view=diff&rev=555330&r1=555329&r2=555330
==============================================================================
--- incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java (original)
+++ incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java Wed Jul 11 09:32:38 2007
@@ -33,6 +33,8 @@
 
 import org.apache.tuscany.sdo.impl.AttributeImpl;
 import org.apache.tuscany.sdo.impl.ReferenceImpl;
+import org.apache.tuscany.sdo.model.internal.InternalFactory;
+import org.apache.tuscany.sdo.model.internal.impl.InternalFactoryImpl;
 import org.apache.tuscany.sdo.util.SDOUtil;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EDataType;
@@ -585,14 +587,42 @@
                     // get the attribute pointer
                     Object attribPointer = attributes[i].getKey();
                     Object omAttribObj = attributes[i].getValue();
-                    // case one - attrib name is null
-                    // this should be the pointer to the OMAttribute then
-                    if (attribPointer instanceof String) {
-                        return (String) omAttribObj;
-                    } else if (attribPointer instanceof QName) {
-                        return (String) omAttribObj;
-                    } else {
+                    
+                    // Handle xsd:QName/SDO URI type property
+                    // Before save, convert <uri>#<local part> to <prefix>:<local part>
+                    String propertyName = null;
+                    if (attribPointer instanceof String)
+                        propertyName = (String)attribPointer;
+                    else if (attribPointer instanceof QName)
+                        propertyName = ((QName)attribPointer).getLocalPart();
+                    else
                         return null;
+                    
+                    String attrValue = (String)omAttribObj;
+
+                    Property property = dataObject.getType().getProperty(propertyName);
+                    Type propertyType = property.getType();
+                    if ("URI".equals(propertyType.getName())) {
+                        String namespace = null;
+                        String localPart = attrValue;
+                        
+                        int index = attrValue.indexOf('#');
+                        if (index == -1) {
+                            return localPart;
+                        }
+                        else {
+                            namespace = localPart.substring(0, index);
+                            localPart = localPart.substring(index+1);
+                            
+                            String prefix = namespaceContext.getPrefix(namespace);
+                            if (prefix == null || prefix.length() == 0)
+                                return localPart;
+                            
+                            return prefix + ":" + localPart;
+                        }
+                    }
+                    else {
+                        return attrValue;
                     }
                 }
             }

Modified: incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java?view=diff&rev=555330&r1=555329&r2=555330
==============================================================================
--- incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java (original)
+++ incubator/tuscany/branches/sdo-1.0-incubating/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java Wed Jul 11 09:32:38 2007
@@ -51,6 +51,9 @@
 import org.apache.tuscany.sdo.api.SDOHelper;
 import org.apache.tuscany.sdo.api.SDOUtil;
 import org.apache.tuscany.sdo.util.StAX2SAXAdapter;
+import org.apache.tuscany.sdo.model.internal.InternalFactory;
+import org.apache.tuscany.sdo.model.internal.impl.InternalFactoryImpl;
+import org.eclipse.emf.common.util.EMap;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.emf.ecore.EDataType;
@@ -175,10 +178,50 @@
         
         private String xsdQName2SDOURI(String xsdQName) {
             org.eclipse.emf.ecore.xml.type.internal.QName qname = new org.eclipse.emf.ecore.xml.type.internal.QName(xsdQName);
+            try {
             updateQNameURI(qname);
+            }
+            catch (IllegalArgumentException e) {
+                return xsdQName;
+            }
             return qname.getNamespaceURI() + "#" + qname.getLocalPart();
         }
         
+        private String getPrefixFromNamespaceURI(String nsURI) {
+            String nsPrefix = null;
+
+            List prefixes = (List)urisToPrefixes.get(nsURI);
+            if (prefixes != null)
+            {
+              for (Iterator i = prefixes.iterator(); i.hasNext(); )
+              {
+                nsPrefix = (String)i.next();
+                if (nsPrefix.length() >= 0) {
+                    // When the length is 0, it's the default namespace
+                    return nsPrefix;
+                }
+              }
+            }
+            
+            nsPrefix = namespaceSupport.getPrefix(nsURI);
+            if (nsPrefix != null)
+            {
+              return nsPrefix;
+            }
+            
+            // Demand create a new package
+            EPackage ePackage = extendedMetaData.demandPackage(nsURI);
+
+            if (ExtendedMetaData.XSI_URI.equals(nsURI)) {
+                ePackage.setNsPrefix(ExtendedMetaData.XSI_PREFIX);
+            }
+            
+            // getPrefix() will make sure all mapping tables are configured correctly
+            nsPrefix = getPrefix(ePackage, true);
+            
+            return nsPrefix;
+        }
+        
         private String SDOURI2XsdQName(String sdoURI) {
             String namespace = null;
             String localPart = sdoURI;
@@ -191,17 +234,10 @@
                 namespace = sdoURI.substring(0, index);
                 localPart = sdoURI.substring(index+1);
                 
-                EPackage ePackage = extendedMetaData.getPackage(namespace);
-                if (ePackage == null)
-                {
-                  ePackage = extendedMetaData.demandPackage(namespace);
-                }
+                String prefix = getPrefixFromNamespaceURI(namespace);
 
-                String prefix = getPrefix(ePackage, true);
-                if (!packages.containsKey(ePackage))
-                {
-                  packages.put(ePackage, prefix);
-                }
+                if (prefix.length() == 0)
+                    return localPart;
                 
                 return prefix + ":" + localPart;
             }
@@ -209,7 +245,7 @@
         
         protected Object createFromString(EFactory eFactory, EDataType eDataType, String value) {
             Object obj = super.createFromString(eFactory, eDataType, value);
-            if (eDataType.getName().equals("QName")) {
+            if (eDataType == ((InternalFactoryImpl)InternalFactory.INSTANCE).getQName()) {
                 if (extendedMetaData != null) {
                     if (obj instanceof List) {
                         List list = (List)obj;
@@ -226,8 +262,8 @@
             return obj;
         }
         
-        public String convertToString(EFactory factory, EDataType dataType, Object value) {
-            if (dataType.getName().equals("QName")) {
+        public String convertToString(EFactory factory, EDataType eDataType, Object value) {
+            if (eDataType == ((InternalFactoryImpl)InternalFactory.INSTANCE).getQName()) {
                 if (extendedMetaData != null) {
                     if (value instanceof List) {
                         List list = (List)value;
@@ -242,7 +278,7 @@
                 }
             }
             
-            return super.convertToString(factory, dataType, value);
+            return super.convertToString(factory, eDataType, value);
         }
     }
 



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