Re: [SDO] questions about support for Enumeration facet
Amita, thanks for the patches. I've had a good look, but still haven't made up my mind which way to go. First off is I think that you should not have different test cases in your patches. I believe the test case should always test for 3 enumerations, and the patch using the commons.sdo#Strings type approach should be shown to fail. This is my preferred approach if it can be made to work. I was digging down to see if this is an EMF bug, but have not proved it yet. I was hoping to show that EcoreUtil's encoding for Strings to String is not always the inverse of it's own String to Strings mapping, but we don't seem to use EcoreUtil for both directions of the mapping. I may adopt the alternative patsh as a tactical approach, and mark the code to keep a handle on the issue, but I'd like to investigate a bit further before I make that choice. Kelvin. On 10/01/2008, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > Please see the 2 patches attached to JIRA-1360 and give comments. > > Regards, > Amita > > On Jan 1, 2008 4:11 PM, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > > Hi Kelvin, > > Yes , below is the change I tried to see to make a Property of type > > Strings, in DataObjectUtil - > > > > protected static Property getGlobalProperty(HelperContext hc, String > > uri, String name) > > { > > Property property; > > if (ExtendedMetaData.ANNOTATION_URI.equals(uri)) { > > if ("minExclusive".equals(name) ||... > > "enumeration".equals(name) || > > "pattern".equals(name)) > > { > > if("enumeration".equals(name) || "pattern".equals(name)) { > > property = SDOUtil.createOpenContentProperty(hc, uri, > name, > > ((ModelFactoryImpl)ModelFactory.INSTANCE).getStrings()); > > } else { > > property = SDOUtil.createOpenContentProperty(hc, uri, > name, > > ((ModelFactoryImpl)ModelFactory.INSTANCE).getString()); > > } > > } > > else > > { > > property = null; > > } > > } > > else > > { > > property = hc.getTypeHelper().getOpenContentProperty(uri, name); > > if (property == null) > > { > > property = SDOUtil.createOpenContentProperty(hc, uri, name, > > ((ModelFactoryImpl)ModelFactory.INSTANCE).getString()); > > } > > } > > return property; > > } > > > > Regards, > > Amita > > > > > > On Dec 21, 2007 4:31 PM, kelvin goodson <[EMAIL PROTECTED] > > > wrote: > > > > > Amita, > > > I'm a little unclear what you have changed. Have you altered the > > > enumeration facet Property type to commonj.sdo.{Strings}? > > > Regards, Kelvin. > > > > > > On 21/12/2007, Amita Vadhavkar <[EMAIL PROTECTED] > wrote: > > > > > > > > This looks quite easy with one small difference in the behavior - > > > > > > > > For enum like below - > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 1) below returns size as 3 i.e. conuts for the null value > > > > if(metaObject instanceof EDataTypeImpl){ > > > > System.out.println("metaObject instance of EDataTypeImpl"); > > > > if( property.getName().equals("enumeration")) { > > > > System.out.println > > > > > > > > (((EDataTypeImpl)metaObject).getExtendedMetaData().getEnumerationFacet()); > > > > List enumVals = > > > > > > > > ((EDataTypeImpl)metaObject).getExtendedMetaData().getEnumerationFacet(); > > > > System.out.println("enum size from > > > **EMF**"+enumVals.size()); > > > > } > > > > } > > > > > > > > 2) whereas below returns size as 2, i.e. does not count for null > > > > result = SDOUtil.createFromString (getInstanceProperty(type, > > > > "enumeration").getType(), type.get(getInstanceProperty(type, > > > > "enumeration")).toString()); > > > > System.out.println("Frank:enumeration"+result+", result > > > > type:"+result.getClass().getName()+", size-"+ ((java.util.ArrayList > > > > )result).size()); > > > > > > > > in 2) the EMF call is made to EcoreUtil.createFromString > > > > ((EDataType)dataType, > > > > literal); > > > > and assumed that DataObjectUtil.getGlobalProperty() checks for enum > > > and > > > > does > > > > SDOUtil.createOpenContentProperty() for Strings. > > > > > > > > Suggestions? > > > > > > > > Regards, > > > > Amita > > > > > > > > On Dec 17, 2007 4:10 PM, kelvin goodson <[EMAIL PROTECTED]> > > > wrote: > > > > > > > > > Amita, > > > > > > > > > > I think Frank's note in this thread is key to the solution, in > > > that > > > > the > > > > > line ... > > > > > return SDOUtil.createFromString(property.getType(), value); > > > > > will create a List if the type of the Property is set to " > > > > > commonj.sdo{Strings}" > > > > > > > > > > > > > > > Regards, Kelvin. > > > > > > > > > > > > > > > On 14/12/2007, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > > Tried to do little more analysis to see what is the way to reach > > > > > > ExtendedMetadata
Re: [SDO] questions about support for Enumeration facet
Please see the 2 patches attached to JIRA-1360 and give comments. Regards, Amita On Jan 1, 2008 4:11 PM, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > Hi Kelvin, > Yes , below is the change I tried to see to make a Property of type > Strings, in DataObjectUtil - > > protected static Property getGlobalProperty(HelperContext hc, String > uri, String name) > { > Property property; > if (ExtendedMetaData.ANNOTATION_URI.equals(uri)) { > if ("minExclusive".equals(name) ||... > "enumeration".equals(name) || > "pattern".equals(name)) > { > if("enumeration".equals(name) || "pattern".equals(name)) { > property = SDOUtil.createOpenContentProperty(hc, uri, name, > ((ModelFactoryImpl)ModelFactory.INSTANCE).getStrings()); > } else { > property = SDOUtil.createOpenContentProperty(hc, uri, name, > ((ModelFactoryImpl)ModelFactory.INSTANCE).getString()); > } > } > else > { > property = null; > } > } > else > { > property = hc.getTypeHelper().getOpenContentProperty(uri, name); > if (property == null) > { > property = SDOUtil.createOpenContentProperty(hc, uri, name, > ((ModelFactoryImpl)ModelFactory.INSTANCE).getString()); > } > } > return property; > } > > Regards, > Amita > > > On Dec 21, 2007 4:31 PM, kelvin goodson <[EMAIL PROTECTED] > > wrote: > > > Amita, > > I'm a little unclear what you have changed. Have you altered the > > enumeration facet Property type to commonj.sdo.{Strings}? > > Regards, Kelvin. > > > > On 21/12/2007, Amita Vadhavkar <[EMAIL PROTECTED] > wrote: > > > > > > This looks quite easy with one small difference in the behavior - > > > > > > For enum like below - > > > > > > > > > > > > > > > > > > > > > > > > > > > 1) below returns size as 3 i.e. conuts for the null value > > > if(metaObject instanceof EDataTypeImpl){ > > > System.out.println("metaObject instance of EDataTypeImpl"); > > > if( property.getName().equals("enumeration")) { > > > System.out.println > > > > > (((EDataTypeImpl)metaObject).getExtendedMetaData().getEnumerationFacet()); > > > List enumVals = > > > > > ((EDataTypeImpl)metaObject).getExtendedMetaData().getEnumerationFacet(); > > > System.out.println("enum size from > > **EMF**"+enumVals.size()); > > > } > > > } > > > > > > 2) whereas below returns size as 2, i.e. does not count for null > > > result = SDOUtil.createFromString (getInstanceProperty(type, > > > "enumeration").getType(), type.get(getInstanceProperty(type, > > > "enumeration")).toString()); > > > System.out.println("Frank:enumeration"+result+", result > > > type:"+result.getClass().getName()+", size-"+ ((java.util.ArrayList > > > )result).size()); > > > > > > in 2) the EMF call is made to EcoreUtil.createFromString > > > ((EDataType)dataType, > > > literal); > > > and assumed that DataObjectUtil.getGlobalProperty() checks for enum > > and > > > does > > > SDOUtil.createOpenContentProperty() for Strings. > > > > > > Suggestions? > > > > > > Regards, > > > Amita > > > > > > On Dec 17, 2007 4:10 PM, kelvin goodson <[EMAIL PROTECTED]> > > wrote: > > > > > > > Amita, > > > > > > > > I think Frank's note in this thread is key to the solution, in > > that > > > the > > > > line ... > > > > return SDOUtil.createFromString(property.getType(), value); > > > > will create a List if the type of the Property is set to " > > > > commonj.sdo{Strings}" > > > > > > > > > > > > Regards, Kelvin. > > > > > > > > > > > > On 14/12/2007, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > > > > > > > > > Tried to do little more analysis to see what is the way to reach > > > > > ExtendedMetadata from DataObjectUtil. Please see the findings > > below. > > > > > > > > > > DataObjectUtil.getMetaObjectInstanceProperty (EModelElement, > > Property) > > > > can > > > > > be > > > > > reached from > > > > > AttributeImpl(EAttributeImpl), ClassImpl(EClassImpl), > > > > > DataTypeImpl(EDataTypeImpl), ReferenceImpl(EReferenceImpl). > > > > > > > > > > Below is the inheritance for EAttributeImpl - > > > > > java.lang.Object > > > > > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > > > > > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > > > > > extended by org.eclipse.emf.ecore.impl.EObjectImpl > > > > > extended by > > org.eclipse.emf.ecore.impl.FlatEObjectImpl > > > > > extended by > > > > > org.eclipse.emf.ecore.impl.EModelElementImpl** > > > > > extended by > > > > > org.eclipse.emf.ecore.impl.ENamedElementImpl > > > > > extended by > > > > > org.eclipse.emf.ecore.impl.ETypedElementImpl > > > > > extended by > > > > > org.eclipse.emf.ecore.impl.EStructuralFeatureImpl > > > > > extended b
Re: [SDO] questions about support for Enumeration facet
Hi Kelvin, Yes , below is the change I tried to see to make a Property of type Strings, in DataObjectUtil - protected static Property getGlobalProperty(HelperContext hc, String uri, String name) { Property property; if (ExtendedMetaData.ANNOTATION_URI.equals(uri)) { if ("minExclusive".equals(name) ||... "enumeration".equals(name) || "pattern".equals(name)) { if("enumeration".equals(name) || "pattern".equals(name)) { property = SDOUtil.createOpenContentProperty(hc, uri, name, ((ModelFactoryImpl)ModelFactory.INSTANCE).getStrings()); } else { property = SDOUtil.createOpenContentProperty(hc, uri, name, ((ModelFactoryImpl)ModelFactory.INSTANCE).getString()); } } else { property = null; } } else { property = hc.getTypeHelper().getOpenContentProperty(uri, name); if (property == null) { property = SDOUtil.createOpenContentProperty(hc, uri, name, ((ModelFactoryImpl)ModelFactory.INSTANCE).getString()); } } return property; } Regards, Amita On Dec 21, 2007 4:31 PM, kelvin goodson <[EMAIL PROTECTED]> wrote: > Amita, > I'm a little unclear what you have changed. Have you altered the > enumeration facet Property type to commonj.sdo.{Strings}? > Regards, Kelvin. > > On 21/12/2007, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > > > This looks quite easy with one small difference in the behavior - > > > > For enum like below - > > > > > > > > > > > > > > > > > > 1) below returns size as 3 i.e. conuts for the null value > > if(metaObject instanceof EDataTypeImpl){ > > System.out.println("metaObject instance of EDataTypeImpl"); > > if(property.getName().equals("enumeration")) { > > System.out.println > > > (((EDataTypeImpl)metaObject).getExtendedMetaData().getEnumerationFacet()); > > List enumVals = > > ((EDataTypeImpl)metaObject).getExtendedMetaData().getEnumerationFacet(); > > System.out.println("enum size from **EMF**"+enumVals.size()); > > } > > } > > > > 2) whereas below returns size as 2, i.e. does not count for null > > result = SDOUtil.createFromString(getInstanceProperty(type, > > "enumeration").getType(), type.get(getInstanceProperty(type, > > "enumeration")).toString()); > > System.out.println("Frank:enumeration"+result+", result > > type:"+result.getClass().getName()+", size-"+ ((java.util.ArrayList > > )result).size()); > > > > in 2) the EMF call is made to EcoreUtil.createFromString > > ((EDataType)dataType, > > literal); > > and assumed that DataObjectUtil.getGlobalProperty() checks for enum and > > does > > SDOUtil.createOpenContentProperty() for Strings. > > > > Suggestions? > > > > Regards, > > Amita > > > > On Dec 17, 2007 4:10 PM, kelvin goodson <[EMAIL PROTECTED]> > wrote: > > > > > Amita, > > > > > > I think Frank's note in this thread is key to the solution, in that > > the > > > line ... > > > return SDOUtil.createFromString(property.getType(), value); > > > will create a List if the type of the Property is set to " > > > commonj.sdo{Strings}" > > > > > > > > > Regards, Kelvin. > > > > > > > > > On 14/12/2007, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > > > > > > > Tried to do little more analysis to see what is the way to reach > > > > ExtendedMetadata from DataObjectUtil. Please see the findings below. > > > > > > > > DataObjectUtil.getMetaObjectInstanceProperty(EModelElement, > Property) > > > can > > > > be > > > > reached from > > > > AttributeImpl(EAttributeImpl), ClassImpl(EClassImpl), > > > > DataTypeImpl(EDataTypeImpl), ReferenceImpl(EReferenceImpl). > > > > > > > > Below is the inheritance for EAttributeImpl - > > > > java.lang.Object > > > > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > > > > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > > > > extended by org.eclipse.emf.ecore.impl.EObjectImpl > > > > extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl > > > > extended by > > > > org.eclipse.emf.ecore.impl.EModelElementImpl** > > > > extended by > > > > org.eclipse.emf.ecore.impl.ENamedElementImpl > > > > extended by > > > > org.eclipse.emf.ecore.impl.ETypedElementImpl > > > > extended by > > > > org.eclipse.emf.ecore.impl.EStructuralFeatureImpl > > > > extended by > > > > org.eclipse.emf.ecore.impl.EAttributeImpl > > > > > > > > Below is the inheritance for EClassImpl - > > > > java.lang.Object > > > > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > > > > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > > > > extended by org.eclipse.emf.ecore.impl.EObjectImpl > > > > extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl > > > > exte
Re: [SDO] questions about support for Enumeration facet
Amita, I'm a little unclear what you have changed. Have you altered the enumeration facet Property type to commonj.sdo.{Strings}? Regards, Kelvin. On 21/12/2007, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > This looks quite easy with one small difference in the behavior - > > For enum like below - > > > > > > > > > 1) below returns size as 3 i.e. conuts for the null value > if(metaObject instanceof EDataTypeImpl){ > System.out.println("metaObject instance of EDataTypeImpl"); > if(property.getName().equals("enumeration")) { > System.out.println > (((EDataTypeImpl)metaObject).getExtendedMetaData().getEnumerationFacet()); > List enumVals = > ((EDataTypeImpl)metaObject).getExtendedMetaData().getEnumerationFacet(); > System.out.println("enum size from **EMF**"+enumVals.size()); > } > } > > 2) whereas below returns size as 2, i.e. does not count for null > result = SDOUtil.createFromString(getInstanceProperty(type, > "enumeration").getType(), type.get(getInstanceProperty(type, > "enumeration")).toString()); > System.out.println("Frank:enumeration"+result+", result > type:"+result.getClass().getName()+", size-"+ ((java.util.ArrayList > )result).size()); > > in 2) the EMF call is made to EcoreUtil.createFromString > ((EDataType)dataType, > literal); > and assumed that DataObjectUtil.getGlobalProperty() checks for enum and > does > SDOUtil.createOpenContentProperty() for Strings. > > Suggestions? > > Regards, > Amita > > On Dec 17, 2007 4:10 PM, kelvin goodson <[EMAIL PROTECTED]> wrote: > > > Amita, > > > > I think Frank's note in this thread is key to the solution, in that > the > > line ... > > return SDOUtil.createFromString(property.getType(), value); > > will create a List if the type of the Property is set to " > > commonj.sdo{Strings}" > > > > > > Regards, Kelvin. > > > > > > On 14/12/2007, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > > > > > Tried to do little more analysis to see what is the way to reach > > > ExtendedMetadata from DataObjectUtil. Please see the findings below. > > > > > > DataObjectUtil.getMetaObjectInstanceProperty(EModelElement, Property) > > can > > > be > > > reached from > > > AttributeImpl(EAttributeImpl), ClassImpl(EClassImpl), > > > DataTypeImpl(EDataTypeImpl), ReferenceImpl(EReferenceImpl). > > > > > > Below is the inheritance for EAttributeImpl - > > > java.lang.Object > > > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > > > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > > > extended by org.eclipse.emf.ecore.impl.EObjectImpl > > > extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl > > > extended by > > > org.eclipse.emf.ecore.impl.EModelElementImpl** > > > extended by > > > org.eclipse.emf.ecore.impl.ENamedElementImpl > > > extended by > > > org.eclipse.emf.ecore.impl.ETypedElementImpl > > > extended by > > > org.eclipse.emf.ecore.impl.EStructuralFeatureImpl > > > extended by > > > org.eclipse.emf.ecore.impl.EAttributeImpl > > > > > > Below is the inheritance for EClassImpl - > > > java.lang.Object > > > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > > > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > > > extended by org.eclipse.emf.ecore.impl.EObjectImpl > > > extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl > > > extended by > > > org.eclipse.emf.ecore.impl.EModelElementImpl** > > > extended by > > > org.eclipse.emf.ecore.impl.ENamedElementImpl > > > extended by > > > org.eclipse.emf.ecore.impl.EClassifierImpl > > > extended by > > > org.eclipse.emf.ecore.impl.EClassImpl > > > > > > Below is the inheritance for EDataTypeImpl - > > > java.lang.Object > > > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > > > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > > > extended by org.eclipse.emf.ecore.impl.EObjectImpl > > > extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl > > > extended by > > > org.eclipse.emf.ecore.impl.EModelElementImpl** > > > extended by > > > org.eclipse.emf.ecore.impl.ENamedElementImpl > > > extended by > > > org.eclipse.emf.ecore.impl.EClassifierImpl > > > extended by > > > org.eclipse.emf.ecore.impl.EDataTypeImpl > > > > > > Below is the inheritance for EReferenceImpl - > > > java.lang.Object > > > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > > > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > > > extended by org.eclipse.emf.ecore.impl.EObjectImpl > > > extended by org.eclipse.
Re: [SDO] questions about support for Enumeration facet
This looks quite easy with one small difference in the behavior - For enum like below - 1) below returns size as 3 i.e. conuts for the null value if(metaObject instanceof EDataTypeImpl){ System.out.println("metaObject instance of EDataTypeImpl"); if(property.getName().equals("enumeration")) { System.out.println (((EDataTypeImpl)metaObject).getExtendedMetaData().getEnumerationFacet()); List enumVals = ((EDataTypeImpl)metaObject).getExtendedMetaData().getEnumerationFacet(); System.out.println("enum size from **EMF**"+enumVals.size()); } } 2) whereas below returns size as 2, i.e. does not count for null result = SDOUtil.createFromString(getInstanceProperty(type, "enumeration").getType(), type.get(getInstanceProperty(type, "enumeration")).toString()); System.out.println("Frank:enumeration"+result+", result type:"+result.getClass().getName()+", size-"+ ((java.util.ArrayList )result).size()); in 2) the EMF call is made to EcoreUtil.createFromString((EDataType)dataType, literal); and assumed that DataObjectUtil.getGlobalProperty() checks for enum and does SDOUtil.createOpenContentProperty() for Strings. Suggestions? Regards, Amita On Dec 17, 2007 4:10 PM, kelvin goodson <[EMAIL PROTECTED]> wrote: > Amita, > > I think Frank's note in this thread is key to the solution, in that the > line ... > return SDOUtil.createFromString(property.getType(), value); > will create a List if the type of the Property is set to " > commonj.sdo{Strings}" > > > Regards, Kelvin. > > > On 14/12/2007, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > > > Tried to do little more analysis to see what is the way to reach > > ExtendedMetadata from DataObjectUtil. Please see the findings below. > > > > DataObjectUtil.getMetaObjectInstanceProperty(EModelElement, Property) > can > > be > > reached from > > AttributeImpl(EAttributeImpl), ClassImpl(EClassImpl), > > DataTypeImpl(EDataTypeImpl), ReferenceImpl(EReferenceImpl). > > > > Below is the inheritance for EAttributeImpl - > > java.lang.Object > > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > > extended by org.eclipse.emf.ecore.impl.EObjectImpl > > extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl > > extended by > > org.eclipse.emf.ecore.impl.EModelElementImpl** > > extended by > > org.eclipse.emf.ecore.impl.ENamedElementImpl > > extended by > > org.eclipse.emf.ecore.impl.ETypedElementImpl > > extended by > > org.eclipse.emf.ecore.impl.EStructuralFeatureImpl > > extended by > > org.eclipse.emf.ecore.impl.EAttributeImpl > > > > Below is the inheritance for EClassImpl - > > java.lang.Object > > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > > extended by org.eclipse.emf.ecore.impl.EObjectImpl > > extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl > > extended by > > org.eclipse.emf.ecore.impl.EModelElementImpl** > > extended by > > org.eclipse.emf.ecore.impl.ENamedElementImpl > > extended by > > org.eclipse.emf.ecore.impl.EClassifierImpl > > extended by > > org.eclipse.emf.ecore.impl.EClassImpl > > > > Below is the inheritance for EDataTypeImpl - > > java.lang.Object > > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > > extended by org.eclipse.emf.ecore.impl.EObjectImpl > > extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl > > extended by > > org.eclipse.emf.ecore.impl.EModelElementImpl** > > extended by > > org.eclipse.emf.ecore.impl.ENamedElementImpl > > extended by > > org.eclipse.emf.ecore.impl.EClassifierImpl > > extended by > > org.eclipse.emf.ecore.impl.EDataTypeImpl > > > > Below is the inheritance for EReferenceImpl - > > java.lang.Object > > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > > extended by org.eclipse.emf.ecore.impl.EObjectImpl > > extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl > > extended by > > org.eclipse.emf.ecore.impl.EModelElementImpl** > > extended by > > org.eclipse.emf.ecore.impl.ENamedElementImpl > > extended by > > org.eclipse.emf.ecore.impl.ETypedElementImpl > > extended by > > org.eclipse.emf.ecore.impl.EStructuralFeatureImpl > > extended by > > or
Re: [SDO] questions about support for Enumeration facet
Amita, I think Frank's note in this thread is key to the solution, in that the line ... return SDOUtil.createFromString(property.getType(), value); will create a List if the type of the Property is set to " commonj.sdo{Strings}" Regards, Kelvin. On 14/12/2007, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > Tried to do little more analysis to see what is the way to reach > ExtendedMetadata from DataObjectUtil. Please see the findings below. > > DataObjectUtil.getMetaObjectInstanceProperty(EModelElement, Property) can > be > reached from > AttributeImpl(EAttributeImpl), ClassImpl(EClassImpl), > DataTypeImpl(EDataTypeImpl), ReferenceImpl(EReferenceImpl). > > Below is the inheritance for EAttributeImpl - > java.lang.Object > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > extended by org.eclipse.emf.ecore.impl.EObjectImpl > extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl > extended by > org.eclipse.emf.ecore.impl.EModelElementImpl** > extended by > org.eclipse.emf.ecore.impl.ENamedElementImpl > extended by > org.eclipse.emf.ecore.impl.ETypedElementImpl > extended by > org.eclipse.emf.ecore.impl.EStructuralFeatureImpl > extended by > org.eclipse.emf.ecore.impl.EAttributeImpl > > Below is the inheritance for EClassImpl - > java.lang.Object > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > extended by org.eclipse.emf.ecore.impl.EObjectImpl > extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl > extended by > org.eclipse.emf.ecore.impl.EModelElementImpl** > extended by > org.eclipse.emf.ecore.impl.ENamedElementImpl > extended by > org.eclipse.emf.ecore.impl.EClassifierImpl > extended by > org.eclipse.emf.ecore.impl.EClassImpl > > Below is the inheritance for EDataTypeImpl - > java.lang.Object > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > extended by org.eclipse.emf.ecore.impl.EObjectImpl > extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl > extended by > org.eclipse.emf.ecore.impl.EModelElementImpl** > extended by > org.eclipse.emf.ecore.impl.ENamedElementImpl > extended by > org.eclipse.emf.ecore.impl.EClassifierImpl > extended by > org.eclipse.emf.ecore.impl.EDataTypeImpl > > Below is the inheritance for EReferenceImpl - > java.lang.Object > extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl > extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl > extended by org.eclipse.emf.ecore.impl.EObjectImpl > extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl > extended by > org.eclipse.emf.ecore.impl.EModelElementImpl** > extended by > org.eclipse.emf.ecore.impl.ENamedElementImpl > extended by > org.eclipse.emf.ecore.impl.ETypedElementImpl > extended by > org.eclipse.emf.ecore.impl.EStructuralFeatureImpl > extended by > org.eclipse.emf.ecore.impl.EReferenceImpl > > In this heirarchy, DataObjectUtil.getMetaObjectInstanceProperty() sticks > to > EModelElementImpl as is it common in all these 4 cases. > But in case of EDataTypeImpl there is further hierarchy which is useful > when > it comes to facets - which is EClassifierImpl. > EClassifierImpl has getExtendedMetaData() returning > BasicExtendedMetaData.EClassifierExtendedMetaData. This one has all the > methods > for getting different facet informations like - java.util.List< > java.lang.String> getEnumerationFacet() , int getMinLengthFacet() > and so on. > > So a way out to get the enum facet value as a list can be - in > DataObjectUtil.getMetaObjectInstanceProperty() - do as below - > > if(metaObject instanceof EDataTypeImpl/EClassifierImpl){ > if(property.getName().equals("enumeration")) { > List enumVals = > ((EDataTypeImpl)metaObject).getExtendedMetaData().getEnumerationFacet(); > return enumVals; > } > } > > Same can be the way to get value of "getPatternFacet() as this is the only > other facet which returns a list" (ref > emfBasicExtendedMetaData.EClassifierExtendedMetaData). > > For all other facets as they return a single value, the current SDO code > may > be enough {OR for all facets on EDataTypeImpl, we can > reach ((EDataTypeImpl)metaObject).getExtendedMetaData() and call > patricular > getFacet methods, not sure if this is required - suggestions?} > > DataObjectUti
Re: [SDO] questions about support for Enumeration facet
Tried to do little more analysis to see what is the way to reach ExtendedMetadata from DataObjectUtil. Please see the findings below. DataObjectUtil.getMetaObjectInstanceProperty(EModelElement, Property) can be reached from AttributeImpl(EAttributeImpl), ClassImpl(EClassImpl), DataTypeImpl(EDataTypeImpl), ReferenceImpl(EReferenceImpl). Below is the inheritance for EAttributeImpl - java.lang.Object extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl extended by org.eclipse.emf.ecore.impl.EObjectImpl extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl extended by org.eclipse.emf.ecore.impl.EModelElementImpl** extended by org.eclipse.emf.ecore.impl.ENamedElementImpl extended by org.eclipse.emf.ecore.impl.ETypedElementImpl extended by org.eclipse.emf.ecore.impl.EStructuralFeatureImpl extended by org.eclipse.emf.ecore.impl.EAttributeImpl Below is the inheritance for EClassImpl - java.lang.Object extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl extended by org.eclipse.emf.ecore.impl.EObjectImpl extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl extended by org.eclipse.emf.ecore.impl.EModelElementImpl** extended by org.eclipse.emf.ecore.impl.ENamedElementImpl extended by org.eclipse.emf.ecore.impl.EClassifierImpl extended by org.eclipse.emf.ecore.impl.EClassImpl Below is the inheritance for EDataTypeImpl - java.lang.Object extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl extended by org.eclipse.emf.ecore.impl.EObjectImpl extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl extended by org.eclipse.emf.ecore.impl.EModelElementImpl** extended by org.eclipse.emf.ecore.impl.ENamedElementImpl extended by org.eclipse.emf.ecore.impl.EClassifierImpl extended by org.eclipse.emf.ecore.impl.EDataTypeImpl Below is the inheritance for EReferenceImpl - java.lang.Object extended by org.eclipse.emf.common.notify.impl.BasicNotifierImpl extended by org.eclipse.emf.ecore.impl.BasicEObjectImpl extended by org.eclipse.emf.ecore.impl.EObjectImpl extended by org.eclipse.emf.ecore.impl.FlatEObjectImpl extended by org.eclipse.emf.ecore.impl.EModelElementImpl** extended by org.eclipse.emf.ecore.impl.ENamedElementImpl extended by org.eclipse.emf.ecore.impl.ETypedElementImpl extended by org.eclipse.emf.ecore.impl.EStructuralFeatureImpl extended by org.eclipse.emf.ecore.impl.EReferenceImpl In this heirarchy, DataObjectUtil.getMetaObjectInstanceProperty() sticks to EModelElementImpl as is it common in all these 4 cases. But in case of EDataTypeImpl there is further hierarchy which is useful when it comes to facets - which is EClassifierImpl. EClassifierImpl has getExtendedMetaData() returning BasicExtendedMetaData.EClassifierExtendedMetaData. This one has all the methods for getting different facet informations like - java.util.List< java.lang.String> getEnumerationFacet() , int getMinLengthFacet() and so on. So a way out to get the enum facet value as a list can be - in DataObjectUtil.getMetaObjectInstanceProperty() - do as below - if(metaObject instanceof EDataTypeImpl/EClassifierImpl){ if(property.getName().equals("enumeration")) { List enumVals = ((EDataTypeImpl)metaObject).getExtendedMetaData().getEnumerationFacet(); return enumVals; } } Same can be the way to get value of "getPatternFacet() as this is the only other facet which returns a list" (ref emfBasicExtendedMetaData.EClassifierExtendedMetaData). For all other facets as they return a single value, the current SDO code may be enough {OR for all facets on EDataTypeImpl, we can reach ((EDataTypeImpl)metaObject).getExtendedMetaData() and call patricular getFacet methods, not sure if this is required - suggestions?} DataObjectUtil.getMetaObjectInstanceProperties() can remain unchanged. With the above change in DataObjectUtil.getMetaObjectInstanceProperty(), we can add a new method in SDOUtil - public static List getEnumerationFacet(Type type) { Property enumProperty = getInstanceProperty(type, "enumeration"); return DataObjectUtil.getMetaObjectInstanceProperty(type, enumProperty); } This way for a DataTypeImpl enum facet values will come out as a List. Please give suggestions. I can open another JIRA and fix patternFacet too in same
Re: [SDO] questions about support for Enumeration facet
By the way, until the wiki has been used to update the websitre then the FAQ can be seen at http://cwiki.apache.org/confluence/display/TUSCANY/Tuscany+SDO+Java+-+FAQ Kelvin. On 12/12/2007, kelvin goodson <[EMAIL PROTECTED]> wrote: > > It occurred to me that there's a bit of a knack to debugging into EMF > code, so I just wrote an FAQ to describe how to do this. Comments are > welcome on its clarity or accuracy. > > Regards, Kelvin. > > On 11/12/2007, kelvin goodson <[EMAIL PROTECTED]> wrote: > > > > Amita, > > > > It feels like option 1 is the easy way to do things, and option 2 is the > > right way given the introduction of instance properties on metadata provided > > for this purpose (but doesn't currently work). > > > > Here's the results of my digging around. Let's start with what I found > > last since it might prove to be the answer. It seems highly likely to be > > so, but there is more thinking to be done. So after quite a bit of digging > > to see how things are handled in EMF I saw the TODO in DataObjectUtil > > > > public static Object getMetaObjectInstanceProperty(EModelElement > > metaObject, Property property) > > { > > String value = EcoreUtil.getAnnotation(metaObject, > > property.getContainingType().getURI(), property.getName ()); > > //TODO if (property.isMany()) ... // create list of values from from > > string > > return SDOUtil.createFromString(property.getType(), value); > > } > > > > So there's a couple of things I haven't got my head round yet that > > perhaps you could take a look at since I must divert my attention for a > > while. The first is that the instance Property for the Type's enumeration > > is isMany = false. So even if we handled the TODO we wouldn't get the > > desired result. The second is that we must ensure a generic string > > tokenizer here, but I'm not yet confident that the tokenizing that we want > > to satisfy the current issue would be the same for all Properties. What I > > mean by this is that for the example you give, it starts with the separator > > "space" indicating that the first literal that should be returned from > > tokenizing is the empty string. Would this be true for all Property values, > > or is it the case that sometimes we would consider trimming leading white > > space? > > > > I had been going down a track of investigating storage and retrieval of > > the enumeration facets inside EMF, which may yet prove to be the way to fix > > this issue. The facets seem to be stored in two ways. Once as an > > annotation on the metadata artifact directly, in concatenated string form, > > and once as a vector on the extended metadata associated with the eDataType > > (See setEnumerationFacet(EDataType,List) of BasicExtendedMetaData. The bulk > > of code in setEnumerationFacet is devoted to concatenating the string > > literals and hanging the annotation on the eDataType (Type), but the last > > line then squirrels the original input vector of enumerations away on the > > extended metadata. > > > > Now there is a basicGetEnumerationFacet method on the nested class > > EDataTypeExtendedMetaDataImpl, which is contained in BasicExtendedMetaData > > which has all the reverse logic for unpacking the vector of enumerations > > from the concatenated string, but it never gets called in the scenario you > > described. Given the piece of code I included above, that wouldn't work > > anyway, given the EcoreUtil .getAnnotation returns a single String. > > > > I don't have a solution yet, but I'll think on it. Any suggestions you > > may have are welcome. > > > > Regards, Kelvin. > > > > > > > > > > > > On 11/12/2007, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > > > > > Hi, > > > I tried TUSCANY-1360 related to enumeration facet. Below is the > > > summary of > > > what was > > > discussed so far and a few questions. > > > - > > > > > > 1) One way to do this is - > > > public static List getEnumerationFacet(Type type) { > > > return ExtendedMetaData.INSTANCE.getEnumerationFacet > > > ((EDataType)type); > > > } > > > > > > which works very straight forward and gives a list of enums. > > > > > > - > > > 2) Another way is - > > > Do type.getInstanceProperties() and find the Property called > > > "enumeration". > > > > > > Where, getInstanceProperties() calls > > > DataObjectUtil.getMetaObjectInstanceProperties(EModelElement > > > metaObject) > > > in which for the given metaObject its annotations and details of each > > > annotations are traversed. Each > > > Annotation Detail is mapped to EStringToStringMapEntryImpl entry like > > > below > > > - > > > > > > EStringToStringMapEntryImpl entry = > > > (EStringToStringMapEntryImpl)iter.next(); //iter is It
Re: [SDO] questions about support for Enumeration facet
It occurred to me that there's a bit of a knack to debugging into EMF code, so I just wrote an FAQ to describe how to do this. Comments are welcome on its clarity or accuracy. Regards, Kelvin. On 11/12/2007, kelvin goodson <[EMAIL PROTECTED]> wrote: > > Amita, > > It feels like option 1 is the easy way to do things, and option 2 is the > right way given the introduction of instance properties on metadata provided > for this purpose (but doesn't currently work). > > Here's the results of my digging around. Let's start with what I found > last since it might prove to be the answer. It seems highly likely to be > so, but there is more thinking to be done. So after quite a bit of digging > to see how things are handled in EMF I saw the TODO in DataObjectUtil > > public static Object getMetaObjectInstanceProperty(EModelElement > metaObject, Property property) > { > String value = EcoreUtil.getAnnotation(metaObject, > property.getContainingType().getURI(), property.getName ()); > //TODO if (property.isMany()) ... // create list of values from from > string > return SDOUtil.createFromString(property.getType(), value); > } > > So there's a couple of things I haven't got my head round yet that perhaps > you could take a look at since I must divert my attention for a while. The > first is that the instance Property for the Type's enumeration is isMany = > false. So even if we handled the TODO we wouldn't get the desired result. > The second is that we must ensure a generic string tokenizer here, but I'm > not yet confident that the tokenizing that we want to satisfy the current > issue would be the same for all Properties. What I mean by this is that for > the example you give, it starts with the separator "space" indicating that > the first literal that should be returned from tokenizing is the empty > string. Would this be true for all Property values, or is it the case that > sometimes we would consider trimming leading white space? > > I had been going down a track of investigating storage and retrieval of > the enumeration facets inside EMF, which may yet prove to be the way to fix > this issue. The facets seem to be stored in two ways. Once as an > annotation on the metadata artifact directly, in concatenated string form, > and once as a vector on the extended metadata associated with the eDataType > (See setEnumerationFacet(EDataType,List) of BasicExtendedMetaData. The bulk > of code in setEnumerationFacet is devoted to concatenating the string > literals and hanging the annotation on the eDataType (Type), but the last > line then squirrels the original input vector of enumerations away on the > extended metadata. > > Now there is a basicGetEnumerationFacet method on the nested class > EDataTypeExtendedMetaDataImpl, which is contained in BasicExtendedMetaData > which has all the reverse logic for unpacking the vector of enumerations > from the concatenated string, but it never gets called in the scenario you > described. Given the piece of code I included above, that wouldn't work > anyway, given the EcoreUtil .getAnnotation returns a single String. > > I don't have a solution yet, but I'll think on it. Any suggestions you > may have are welcome. > > Regards, Kelvin. > > > > > > On 11/12/2007, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > > > Hi, > > I tried TUSCANY-1360 related to enumeration facet. Below is the summary > > of > > what was > > discussed so far and a few questions. > > - > > > > 1) One way to do this is - > > public static List getEnumerationFacet(Type type) { > > return ExtendedMetaData.INSTANCE.getEnumerationFacet > > ((EDataType)type); > > } > > > > which works very straight forward and gives a list of enums. > > > > - > > 2) Another way is - > > Do type.getInstanceProperties() and find the Property called > > "enumeration". > > > > Where, getInstanceProperties() calls > > DataObjectUtil.getMetaObjectInstanceProperties(EModelElement metaObject) > > in which for the given metaObject its annotations and details of each > > annotations are traversed. Each > > Annotation Detail is mapped to EStringToStringMapEntryImpl entry like > > below > > - > > > > EStringToStringMapEntryImpl entry = > > (EStringToStringMapEntryImpl)iter.next(); //iter is Iterator over > > current > > Annotation's Details > > String propertyName = entry.getTypedKey(); > > > > Property globalProperty = getGlobalProperty(hc, propertyURI, > > propertyName); > > if (globalProperty != null) > > { > >result.add(globalProperty); > > } > > > > Result is a UniqueEList which is returned at the end. > > > > Here, when entry.getTypedKey() is "enumeration", entry.getTypedValue() > > gives > > a String having space separa
Re: [SDO] questions about support for Enumeration facet
Amita, It feels like option 1 is the easy way to do things, and option 2 is the right way given the introduction of instance properties on metadata provided for this purpose (but doesn't currently work). Here's the results of my digging around. Let's start with what I found last since it might prove to be the answer. It seems highly likely to be so, but there is more thinking to be done. So after quite a bit of digging to see how things are handled in EMF I saw the TODO in DataObjectUtil public static Object getMetaObjectInstanceProperty(EModelElement metaObject, Property property) { String value = EcoreUtil.getAnnotation(metaObject, property.getContainingType().getURI(), property.getName()); //TODO if (property.isMany()) ... // create list of values from from string return SDOUtil.createFromString(property.getType(), value); } So there's a couple of things I haven't got my head round yet that perhaps you could take a look at since I must divert my attention for a while. The first is that the instance Property for the Type's enumeration is isMany = false. So even if we handled the TODO we wouldn't get the desired result. The second is that we must ensure a generic string tokenizer here, but I'm not yet confident that the tokenizing that we want to satisfy the current issue would be the same for all Properties. What I mean by this is that for the example you give, it starts with the separator "space" indicating that the first literal that should be returned from tokenizing is the empty string. Would this be true for all Property values, or is it the case that sometimes we would consider trimming leading white space? I had been going down a track of investigating storage and retrieval of the enumeration facets inside EMF, which may yet prove to be the way to fix this issue. The facets seem to be stored in two ways. Once as an annotation on the metadata artifact directly, in concatenated string form, and once as a vector on the extended metadata associated with the eDataType (See setEnumerationFacet(EDataType,List) of BasicExtendedMetaData. The bulk of code in setEnumerationFacet is devoted to concatenating the string literals and hanging the annotation on the eDataType (Type), but the last line then squirrels the original input vector of enumerations away on the extended metadata. Now there is a basicGetEnumerationFacet method on the nested class EDataTypeExtendedMetaDataImpl, which is contained in BasicExtendedMetaData which has all the reverse logic for unpacking the vector of enumerations from the concatenated string, but it never gets called in the scenario you described. Given the piece of code I included above, that wouldn't work anyway, given the EcoreUtil .getAnnotation returns a single String. I don't have a solution yet, but I'll think on it. Any suggestions you may have are welcome. Regards, Kelvin. On 11/12/2007, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > Hi, > I tried TUSCANY-1360 related to enumeration facet. Below is the summary of > what was > discussed so far and a few questions. > > - > 1) One way to do this is - > public static List getEnumerationFacet(Type type) { > return ExtendedMetaData.INSTANCE.getEnumerationFacet((EDataType)type); > } > > which works very straight forward and gives a list of enums. > > - > 2) Another way is - > Do type.getInstanceProperties() and find the Property called > "enumeration". > > Where, getInstanceProperties() calls > DataObjectUtil.getMetaObjectInstanceProperties(EModelElement metaObject) > in which for the given metaObject its annotations and details of each > annotations are traversed. Each > Annotation Detail is mapped to EStringToStringMapEntryImpl entry like > below > - > > EStringToStringMapEntryImpl entry = > (EStringToStringMapEntryImpl)iter.next(); //iter is Iterator over > current > Annotation's Details > String propertyName = entry.getTypedKey(); > > Property globalProperty = getGlobalProperty(hc, propertyURI, > propertyName); > if (globalProperty != null) > { >result.add(globalProperty); > } > > Result is a UniqueEList which is returned at the end. > > Here, when entry.getTypedKey() is "enumeration", entry.getTypedValue() > gives > a String having space separated enums > > e.g. for > > > > > > > > > it gives," Good Bad" > > As we see in Property globalProperty = getGlobalProperty(hc, propertyURI, > propertyName); the TypedKey information is > used when forming Property with name "enumeration", but the TypedValue > information is not stored in the Property. > Same thing will be applicable for other facets like MinLenght, > MaxExclusive > > -
Re: [SDO] questions about support for Enumeration facet
I think it should be isMany=false but of type "commonj.sdo{Strings}". Then get() or getList() would return List. Only getString() would convert to the space-separated value we're returning today. Frank. [EMAIL PROTECTED] wrote on 12/11/2007 06:44:22 AM: > Hi Amita, > > thanks for looking at this. I'm a bit surprised, on digging a little way > in, that the enumeration Property is isMany==false. I'll dig a bit > further, but I had expected to be able to find the Property named > enumeration and get a list of entries. > > Kelvin. > > On 11/12/2007, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > > > Hi, > > I tried TUSCANY-1360 related to enumeration facet. Below is the summary of > > what was > > discussed so far and a few questions. > > > > > - > > 1) One way to do this is - > > public static List getEnumerationFacet(Type type) { > > return ExtendedMetaData.INSTANCE.getEnumerationFacet((EDataType)type); > > } > > > > which works very straight forward and gives a list of enums. > > > > > - > > 2) Another way is - > > Do type.getInstanceProperties() and find the Property called > > "enumeration". > > > > Where, getInstanceProperties() calls > > DataObjectUtil.getMetaObjectInstanceProperties(EModelElement metaObject) > > in which for the given metaObject its annotations and details of each > > annotations are traversed. Each > > Annotation Detail is mapped to EStringToStringMapEntryImpl entry like > > below > > - > > > > EStringToStringMapEntryImpl entry = > > (EStringToStringMapEntryImpl)iter.next(); //iter is Iterator over > > current > > Annotation's Details > > String propertyName = entry.getTypedKey(); > > > > Property globalProperty = getGlobalProperty(hc, propertyURI, > > propertyName); > > if (globalProperty != null) > > { > >result.add(globalProperty); > > } > > > > Result is a UniqueEList which is returned at the end. > > > > Here, when entry.getTypedKey() is "enumeration", entry.getTypedValue() > > gives > > a String having space separated enums > > > > e.g. for > > > > > > > > > > > > > > > > > > it gives," Good Bad" > > > > As we see in Property globalProperty = getGlobalProperty(hc, propertyURI, > > propertyName); the TypedKey information is > > used when forming Property with name "enumeration", but the TypedValue > > information is not stored in the Property. > > Same thing will be applicable for other facets like MinLenght, > > MaxExclusive > > > > > -- > > Questions: > > > > Thus, the question I have is, in case of following 2), what will be the > > way > > to preserve the mapping (key-value) > > information available about facets from EMF in the formed Property? And > > what > > will be better approach for TUSCANY-1360 > > and as such for any other facets? > > > > Regards, > > Amita > > - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [SDO] questions about support for Enumeration facet
Hi Amita, thanks for looking at this. I'm a bit surprised, on digging a little way in, that the enumeration Property is isMany==false. I'll dig a bit further, but I had expected to be able to find the Property named enumeration and get a list of entries. Kelvin. On 11/12/2007, Amita Vadhavkar <[EMAIL PROTECTED]> wrote: > > Hi, > I tried TUSCANY-1360 related to enumeration facet. Below is the summary of > what was > discussed so far and a few questions. > > - > 1) One way to do this is - > public static List getEnumerationFacet(Type type) { > return ExtendedMetaData.INSTANCE.getEnumerationFacet((EDataType)type); > } > > which works very straight forward and gives a list of enums. > > - > 2) Another way is - > Do type.getInstanceProperties() and find the Property called > "enumeration". > > Where, getInstanceProperties() calls > DataObjectUtil.getMetaObjectInstanceProperties(EModelElement metaObject) > in which for the given metaObject its annotations and details of each > annotations are traversed. Each > Annotation Detail is mapped to EStringToStringMapEntryImpl entry like > below > - > > EStringToStringMapEntryImpl entry = > (EStringToStringMapEntryImpl)iter.next(); //iter is Iterator over > current > Annotation's Details > String propertyName = entry.getTypedKey(); > > Property globalProperty = getGlobalProperty(hc, propertyURI, > propertyName); > if (globalProperty != null) > { >result.add(globalProperty); > } > > Result is a UniqueEList which is returned at the end. > > Here, when entry.getTypedKey() is "enumeration", entry.getTypedValue() > gives > a String having space separated enums > > e.g. for > > > > > > > > > it gives," Good Bad" > > As we see in Property globalProperty = getGlobalProperty(hc, propertyURI, > propertyName); the TypedKey information is > used when forming Property with name "enumeration", but the TypedValue > information is not stored in the Property. > Same thing will be applicable for other facets like MinLenght, > MaxExclusive > > -- > Questions: > > Thus, the question I have is, in case of following 2), what will be the > way > to preserve the mapping (key-value) > information available about facets from EMF in the formed Property? And > what > will be better approach for TUSCANY-1360 > and as such for any other facets? > > Regards, > Amita >