You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by fr...@apache.org on 2007/03/02 22:52:08 UTC
svn commit: r513973 - in /incubator/tuscany/java/sdo/impl/src:
main/java/org/apache/tuscany/sdo/impl/ main/java/org/apache/tuscany/sdo/util/
test/java/org/apache/tuscany/sdo/test/
Author: frankb
Date: Fri Mar 2 13:52:07 2007
New Revision: 513973
URL: http://svn.apache.org/viewvc?view=rev&rev=513973
Log:
Fixed AnyType problem caused by TUSCANY-1065 fix
Modified:
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/ClassImpl.java
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/DataObjectImpl.java
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/SDOPackageImpl.java
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/BasicSequence.java
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/DataObjectUtil.java
incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XMLStreamHelperTestCase.java
Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/ClassImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/ClassImpl.java?view=diff&rev=513973&r1=513972&r2=513973
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/ClassImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/ClassImpl.java Fri Mar 2 13:52:07 2007
@@ -19,18 +19,21 @@
*/
package org.apache.tuscany.sdo.impl;
+import java.util.ArrayList;
import java.util.Collection;
+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.ArrayList;
-import java.util.Collections;
+import java.util.Set;
import org.apache.tuscany.sdo.SDOFactory;
import org.apache.tuscany.sdo.SDOPackage;
import org.apache.tuscany.sdo.model.ModelFactory;
import org.apache.tuscany.sdo.model.impl.ModelFactoryImpl;
+import org.apache.tuscany.sdo.util.BasicSequence;
import org.apache.tuscany.sdo.util.DataObjectUtil;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.UniqueEList;
@@ -42,7 +45,7 @@
import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
import org.eclipse.emf.ecore.util.ExtendedMetaData;
import org.eclipse.emf.ecore.util.FeatureMap;
-import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
+import org.eclipse.emf.ecore.util.FeatureMapUtil;
import commonj.sdo.Property;
import commonj.sdo.Sequence;
@@ -179,12 +182,17 @@
return extendedProperties;
}
+ protected List getTypeFeatures()
+ {
+ return getEStructuralFeatures();
+ }
+
protected void initPropertyLists()
{
declaredProperties = new ArrayList();
extendedProperties = Collections.EMPTY_LIST;
- for (Iterator i = getEStructuralFeatures().iterator(); i.hasNext(); ) {
+ for (Iterator i = getTypeFeatures().iterator(); i.hasNext(); ) {
EStructuralFeature eStructuralFeature = (EStructuralFeature)i.next();
boolean isExtendedProperty = DataObjectUtil.isInternalProperty(eStructuralFeature);
if (isExtendedProperty) {
@@ -277,12 +285,12 @@
return false;
}
- public void addInstanceProperties(EObject dataObject, Collection propertyList)
+ public void addOpenProperties(EObject dataObject, Collection propertyList)
{
for (final Iterator iterator = getBaseTypes().iterator(); iterator.hasNext(); )
{
ClassImpl baseType = (ClassImpl)iterator.next();
- baseType.addInstanceProperties(dataObject, propertyList);
+ baseType.addOpenProperties(dataObject, propertyList);
}
for (final Iterator iter = getExtendedProperties().iterator(); iter.hasNext(); )
@@ -295,15 +303,88 @@
{
FeatureMap.Entry entry = (FeatureMap.Entry)features.get(j);
EStructuralFeature entryFeature = entry.getEStructuralFeature();
- boolean isText =
- entryFeature == XMLTypePackage.Literals.XML_TYPE_DOCUMENT_ROOT__TEXT ||
- entryFeature == XMLTypePackage.Literals.XML_TYPE_DOCUMENT_ROOT__CDATA ||
- entryFeature == XMLTypePackage.Literals.XML_TYPE_DOCUMENT_ROOT__COMMENT;
- if (!isText) propertyList.add(entryFeature);
+ Property property = BasicSequence.getFeatureProperty(entryFeature);
+ if (property != null) propertyList.add(entryFeature);
+ }
+ }
+ }
+ }
+
+ public Property getOpenProperty(EObject dataObject, String featureName)
+ {
+ for (final Iterator iterator = getBaseTypes().iterator(); iterator.hasNext(); )
+ {
+ ClassImpl baseType = (ClassImpl)iterator.next();
+ Property result = baseType.getOpenProperty(dataObject, featureName);
+ if (result != null) return result;
+ }
+
+ Set openFeatureSet = new HashSet();
+ for (final Iterator iter = getExtendedProperties().iterator(); iter.hasNext(); )
+ {
+ EStructuralFeature eStructuralFeature = (EStructuralFeature)iter.next();
+ //if (isOpenFeatureMap(eStructuralFeature))
+ //FB The above check excludes subsitition groups - i.e., doesn't support dObj.get("element.substitution")
+ if (FeatureMapUtil.isFeatureMap(eStructuralFeature))
+ {
+ List features = (List)dataObject.eGet(eStructuralFeature);
+ for (int j = 0, size = features.size(); j < size; ++j)
+ {
+ FeatureMap.Entry entry = (FeatureMap.Entry)features.get(j);
+ EStructuralFeature entryFeature = entry.getEStructuralFeature();
+ if (openFeatureSet.add(entryFeature))
+ {
+ Property property = BasicSequence.getFeatureProperty(entryFeature);
+ if (property != null)
+ {
+ if (property.getName().equals(featureName)) return (Property)entryFeature;
+ List aliasNames = property.getAliasNames();
+ for (int aliasCount = aliasNames.size(); aliasCount > 0; )
+ {
+ if (aliasNames.get(--aliasCount).equals(featureName)) return (Property)entryFeature;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /*
+ public Property getOpenProperty(DataObject dataObject, String featureName)
+ {
+ EObject eObject = (EObject)dataObject;
+ EClass eClass = eObject.eClass();
+ Set openFeatureSet = new HashSet();
+ for (int i = 0, count = eClass.getEAllStructuralFeatures().size(); i < count; ++i)
+ {
+ EStructuralFeature eStructuralFeature = eClass.getEStructuralFeature(i);
+ if (FeatureMapUtil.isFeatureMap(eStructuralFeature))
+ {
+ List features = (List)eObject.eGet(eStructuralFeature);
+ for (int j = 0, size = features.size(); j < size; ++j)
+ {
+ FeatureMap.Entry entry = (FeatureMap.Entry)features.get(j);
+ EStructuralFeature entryFeature = entry.getEStructuralFeature();
+ if (openFeatureSet.add(entryFeature))
+ {
+ Property property = (Property)entryFeature;
+ if (property.getName().equals(featureName)) return (Property)entryFeature;
+
+ List aliasNames = property.getAliasNames();
+ for (int aliasCount = aliasNames.size(); aliasCount > 0; )
+ {
+ if (aliasNames.get(--aliasCount).equals(featureName)) return (Property)entryFeature;
+ }
+ }
}
}
}
+ return null;
}
+ */
/**
* <!-- begin-user-doc -->
Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/DataObjectImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/DataObjectImpl.java?view=diff&rev=513973&r1=513972&r2=513973
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/DataObjectImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/DataObjectImpl.java Fri Mar 2 13:52:07 2007
@@ -1284,7 +1284,7 @@
*/
public Property getInstanceProperty(String propertyName)
{
- return DataObjectUtil.getProperty(this, propertyName);
+ return DataObjectUtil.getInstanceProperty(this, propertyName);
}
/**
@@ -1292,7 +1292,7 @@
*/
public Property getProperty(String propertyName)
{
- return DataObjectUtil.getProperty(this, propertyName);
+ return DataObjectUtil.getInstanceProperty(this, propertyName);
}
/**
Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/SDOPackageImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/SDOPackageImpl.java?view=diff&rev=513973&r1=513972&r2=513973
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/SDOPackageImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/impl/SDOPackageImpl.java Fri Mar 2 13:52:07 2007
@@ -20,12 +20,14 @@
package org.apache.tuscany.sdo.impl;
import java.io.ObjectStreamException;
+import java.util.Collections;
import java.util.List;
import org.apache.tuscany.sdo.AnyTypeDataObject;
import org.apache.tuscany.sdo.SDOFactory;
import org.apache.tuscany.sdo.SDOPackage;
import org.apache.tuscany.sdo.SimpleAnyTypeDataObject;
+import org.apache.tuscany.sdo.impl.SDOFactoryImpl.SDOEcoreFactory;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EDataType;
@@ -35,6 +37,7 @@
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.change.ChangePackage;
import org.eclipse.emf.ecore.change.impl.ChangePackageImpl;
+import org.eclipse.emf.ecore.impl.EClassImpl;
import org.eclipse.emf.ecore.impl.EPackageImpl;
import org.eclipse.emf.ecore.impl.EcorePackageImpl;
import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
@@ -201,11 +204,12 @@
* @see org.eclipse.emf.ecore.EPackage.Registry
* @see org.apache.tuscany.sdo.SDOPackage#eNS_URI
* @see #init()
- * @generated
+ * @generated NOT
*/
private SDOPackageImpl()
{
super(eNS_URI, SDOFactory.eINSTANCE);
+ ecoreFactory = new SDOEcoreFactory();
}
/**
@@ -585,6 +589,41 @@
// Create data types
eJavaListEDataType = createEDataType(EJAVA_LIST);
eObjectStreamExceptionEDataType = createEDataType(EOBJECT_STREAM_EXCEPTION);
+ }
+
+ protected EClass createEClass(int id)
+ {
+ EClassImpl c;
+ switch(id) {
+ case ANY_TYPE_DATA_OBJECT:
+ c = new ClassImpl() {
+ List baseTypes = null;
+ public List getBaseTypes() {
+ if (baseTypes == null)
+ baseTypes = Collections.singletonList(getDataObject());
+ return baseTypes;
+ }
+ public List getTypeFeatures() {
+ return getEAllStructuralFeatures();
+ }
+ };
+ break;
+ case SIMPLE_ANY_TYPE_DATA_OBJECT:
+ c = new ClassImpl() {
+ List baseTypes = null;
+ public List getBaseTypes() {
+ if (baseTypes == null)
+ baseTypes = Collections.singletonList(getAnyTypeDataObject());
+ return baseTypes;
+ }
+ };
+ break;
+ default:
+ c = (EClassImpl)ecoreFactory.createEClass();
+ }
+ c.setClassifierID(id);
+ getEClassifiers().add(c);
+ return c;
}
/**
Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/BasicSequence.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/BasicSequence.java?view=diff&rev=513973&r1=513972&r2=513973
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/BasicSequence.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/BasicSequence.java Fri Mar 2 13:52:07 2007
@@ -53,6 +53,11 @@
public Property getProperty(int index)
{
EStructuralFeature feature = featureMap.getEStructuralFeature(index);
+ return getFeatureProperty(feature);
+ }
+
+ public static Property getFeatureProperty(EStructuralFeature feature)
+ {
boolean isText =
feature == XMLTypePackage.Literals.XML_TYPE_DOCUMENT_ROOT__TEXT ||
feature == XMLTypePackage.Literals.XML_TYPE_DOCUMENT_ROOT__CDATA ||
Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/DataObjectUtil.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/DataObjectUtil.java?view=diff&rev=513973&r1=513972&r2=513973
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/DataObjectUtil.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/DataObjectUtil.java Fri Mar 2 13:52:07 2007
@@ -375,27 +375,15 @@
public static boolean isInternalProperty(EStructuralFeature eStructuralFeature)
{
+ //return FeatureMapUtil.isFeatureMap(eStructuralFeature);
return !(eStructuralFeature.getEType() instanceof Type);
- /*
- if (FeatureMapUtil.isFeatureMap(eStructuralFeature)) return true;
- EClassifier eType = eStructuralFeature.getEType();
- if (!(eType instanceof Type))
- {
- System.out.println("Non Type property: " + eStructuralFeature.getName());
- if (eType != null)
- {
- System.out.println(" type: " + eType.getName());
- }
- }
- return false;
- */
}
public static List getInstanceProperties(DataObject dataObject)
{
Type type = dataObject.getType();
List result = new UniqueEList(type.getProperties());
- ((ClassImpl)type).addInstanceProperties((EObject)dataObject, result);
+ ((ClassImpl)type).addOpenProperties((EObject)dataObject, result);
return result;
}
@@ -447,7 +435,7 @@
public static DataObject createDataObject(DataObject dataObject, String propertyName, String namespaceURI, String typeName)
{
- Property property = getProperty(dataObject, propertyName);
+ Property property = getInstanceProperty(dataObject, propertyName);
Type type = DataObjectUtil.getType(dataObject, namespaceURI, typeName);
return createDataObject(dataObject, property, type);
}
@@ -467,7 +455,7 @@
public static DataObject createDataObject(DataObject dataObject, String propertyName)
{
- Property property = (Property)getProperty(dataObject, propertyName);
+ Property property = (Property)getInstanceProperty(dataObject, propertyName);
Type type = property.getType();
return createDataObject(dataObject,property, type);
}
@@ -1671,7 +1659,7 @@
}
if (value instanceof byte[]) {
- return XMLTypeFactory.eINSTANCE.convertHexBinary((byte[])value);
+ return XMLTypeFactory.eINSTANCE.convertHexBinary((byte[])value);
}
if (value == null)
@@ -1781,37 +1769,6 @@
throw new IndexOutOfBoundsException();
}
- public static EStructuralFeature getOpenFeature(EObject eObject, String featureName)
- {
- EClass eClass = eObject.eClass();
- Set openFeatureSet = new HashSet();
- for (int i = 0, count = eClass.getEAllStructuralFeatures().size(); i < count; ++i)
- {
- EStructuralFeature eStructuralFeature = eClass.getEStructuralFeature(i);
- if (/*!eStructuralFeature.isDerived() && */FeatureMapUtil.isFeatureMap(eStructuralFeature))
- {
- List features = (List)eObject.eGet(eStructuralFeature);
- for (int j = 0, size = features.size(); j < size; ++j)
- {
- FeatureMap.Entry entry = (FeatureMap.Entry)features.get(j);
- EStructuralFeature entryFeature = entry.getEStructuralFeature();
- if (openFeatureSet.add(entryFeature))
- {
- Property property = (Property)entryFeature;
- if (property.getName().equals(featureName)) return entryFeature;
-
- List aliasNames = property.getAliasNames();
- for (int aliasCount = aliasNames.size(); aliasCount > 0; )
- {
- if (aliasNames.get(--aliasCount).equals(featureName)) return entryFeature;
- }
- }
- }
- }
- }
- return null;
- }
-
public static List getAliasNames(EStructuralFeature eStructuralFeature)
{
List list = SDOExtendedMetaData.INSTANCE.getAliasNames(eStructuralFeature);
@@ -2071,7 +2028,7 @@
{
if (name != null)
{
- feature = (EStructuralFeature)((DataObject)eObject).getProperty(name);
+ feature = (EStructuralFeature)((DataObject)eObject).getInstanceProperty(name);
if (feature == null)
{
int index = name.lastIndexOf('.');
@@ -2085,7 +2042,7 @@
index = Integer.parseInt(name.substring(++index));
// NumberFormatException may be thrown
String propertyName = name.substring(0, propertyNameEnd);
- feature = (EStructuralFeature)((DataObject)eObject).getProperty(propertyName);
+ feature = (EStructuralFeature)((DataObject)eObject).getInstanceProperty(propertyName);
if (feature != null)
{
setIndex(index);
@@ -2224,23 +2181,18 @@
}
}
- protected static int matchingIndex(List eObjects, String attributeName, String attributeValue)
+ protected static int matchingIndex(List dataObjects, String attributeName, String attributeValue)
{
- for (int i = 0, size = eObjects.size(); i < size; i++)
+ for (int i = 0, size = dataObjects.size(); i < size; i++)
{
- EObject eObject = (EObject)eObjects.get(i);
- EStructuralFeature feature = (EStructuralFeature)((Type)eObject.eClass()).getProperty(attributeName);
- // If feature is null, that means it could be an open feature.
- if (feature == null)
- {
- feature = (EStructuralFeature)DataObjectUtil.getOpenFeature(eObject, attributeName);
- }
- if (feature != null)
+ DataObject dataObject = (DataObject)dataObjects.get(i);
+ Property property = getInstanceProperty(dataObject, attributeName);
+ if (property != null)
{
- Object test = eObject.eGet(feature, true);
+ Object test = dataObject.get(property);
if (test != null)
{
- String testString = EcoreUtil.convertToString((EDataType)feature.getEType(), test);
+ String testString = EcoreUtil.convertToString((EDataType)property.getType(), test);
if (attributeValue.equals(testString))
{
return i;
@@ -2428,12 +2380,13 @@
}
}
- public static Property getProperty(DataObject dataObject, String propertyName)
+ public static Property getInstanceProperty(DataObject dataObject, String propertyName)
{
- Property property = dataObject.getType().getProperty(propertyName);
+ ClassImpl type = (ClassImpl)dataObject.getType();
+ Property property = type.getProperty(propertyName);
if (property == null)
{
- property = (Property)DataObjectUtil.getOpenFeature((EObject)dataObject, propertyName);
+ property = type.getOpenProperty((EObject)dataObject, propertyName);
//throw new IllegalArgumentException("Type '" + dataObject.getType().getName() + "' does not have a property named '" + propertyName + "'");
}
Modified: incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XMLStreamHelperTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XMLStreamHelperTestCase.java?view=diff&rev=513973&r1=513972&r2=513973
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XMLStreamHelperTestCase.java (original)
+++ incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XMLStreamHelperTestCase.java Fri Mar 2 13:52:07 2007
@@ -121,9 +121,7 @@
DataObject moduleObject = document.getRootObject();
List components = moduleObject.getList("component");
DataObject componentObject = (DataObject) components.get(0);
- // componentObject.getDataObject("implementation.mock");
- //DataObject implObject = (DataObject) componentObject.getSequence(0).getValue(0);
- DataObject implObject = componentObject.getDataObject(componentObject.getProperty("implementation.mock")); //FB
+ DataObject implObject = componentObject.getDataObject("implementation.mock");
Assert.assertTrue(implObject.getString("myAttr").equals("helloworld.HelloWorldImpl"));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org