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:28:32 UTC
svn commit: r555327 - in
/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource:
DataObjectXMLStreamReader.java SDOXMLResourceImpl.java
Author: kelvingoodson
Date: Wed Jul 11 09:28:31 2007
New Revision: 555327
URL: http://svn.apache.org/viewvc?view=rev&rev=555327
Log:
fix for TUSCANY-1385
Modified:
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java
Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java?view=diff&rev=555327&r1=555326&r2=555327
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java Wed Jul 11 09:28:31 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/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java?view=diff&rev=555327&r1=555326&r2=555327
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java Wed Jul 11 09:28:31 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