Bug 484826 - Property Name is not found if it starts with an upper case
in EMF model
diff --git a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFBinding.java b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFBinding.java
index fc990e0..846ee1f 100644
--- a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFBinding.java
+++ b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFBinding.java
@@ -43,8 +43,7 @@
}
index = featureName.indexOf(".");
if (eObj != null && index == -1) {
- EStructuralFeature sf = eObj.eClass().getEStructuralFeature(
- featureName);
+ EStructuralFeature sf = EMFHelper.findFeature(eObj.eClass(), featureName);
if (sf != null) {
Object newValue = eObj.eGet(sf);
if (newValue == null && sf instanceof EReference) {
diff --git a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFDataModelService.java b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFDataModelService.java
index e49ea6c..6db4e3c 100644
--- a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFDataModelService.java
+++ b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFDataModelService.java
@@ -104,8 +104,7 @@
throw new XWTException(" Type for\"" + propertyName
+ "\" is not found ");
}
- EStructuralFeature structuralFeature = type
- .getEStructuralFeature(propertyName);
+ EStructuralFeature structuralFeature = EMFHelper.findFeature(type, propertyName);
if (structuralFeature == null) {
throw new XWTException(" Property \"" + propertyName
diff --git a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFDataProvider.java b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFDataProvider.java
index 4c85d26..856a14c 100644
--- a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFDataProvider.java
+++ b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFDataProvider.java
@@ -68,7 +68,7 @@
if (type == null) {
type = (EClass) getModelService().toModelType(bean);
}
- EStructuralFeature feature = type.getEStructuralFeature(propertyName);
+ EStructuralFeature feature = EMFHelper.findFeature(type, propertyName);
if (feature == null) {
throw new XWTException(propertyName + " feature is not found in "
+ EMFHelper.getQualifiedName(type));
@@ -80,7 +80,7 @@
@Override
protected IObservableValue observeValue(Object bean, String propertyName) {
EClass type = (EClass) getModelService().toModelType(bean);
- EStructuralFeature feature = type.getEStructuralFeature(propertyName);
+ EStructuralFeature feature = EMFHelper.findFeature(type, propertyName);
if (feature == null) {
throw new XWTException(propertyName + " feature is not found in "
+ EMFHelper.getQualifiedName(type));
@@ -93,7 +93,7 @@
protected IObservableList observeDetailList(IObservableValue bean,
Object elementType, String propertyName, Object propertyType) {
EClass type = (EClass) elementType;
- EStructuralFeature feature = type.getEStructuralFeature(propertyName);
+ EStructuralFeature feature = EMFHelper.findFeature(type, propertyName);
IObservableList observeDetailList = EMFObservables.observeDetailList(
XWT.getRealm(), bean, feature);
return observeDetailList;
@@ -110,8 +110,7 @@
protected IObservableList observeList(Object bean, String propertyName) {
if (bean instanceof EObject) {
EObject owner = (EObject) bean;
- EStructuralFeature feature = owner.eClass().getEStructuralFeature(
- propertyName);
+ EStructuralFeature feature = EMFHelper.findFeature(owner.eClass(), propertyName);
if (feature != null) {
return EMFObservables.observeList(XWT.getRealm(), owner,
feature);
@@ -137,7 +136,7 @@
} else {
throw new IllegalStateException();
}
- EStructuralFeature feature = type.getEStructuralFeature(path);
+ EStructuralFeature feature = EMFHelper.findFeature(type, path);
if (feature == null) {
throw new XWTException(path + " feature is not found in "
+ EMFHelper.getQualifiedName(type));
@@ -227,8 +226,7 @@
eObj = (EObject) getData(eObj, parent);
featureName = path.substring(index + 1);
}
- EStructuralFeature feature = eObj.eClass().getEStructuralFeature(
- featureName);
+ EStructuralFeature feature = EMFHelper.findFeature(eObj.eClass(), featureName);
if (feature != null) {
return eObj.eGet(feature);
}
@@ -239,7 +237,7 @@
public boolean isPropertyReadOnly(String path) {
EClassifier classifier = getCurrentType();
if (classifier instanceof EClass && path != null) {
- EStructuralFeature feature = ((EClass)classifier).getEStructuralFeature(path);
+ EStructuralFeature feature = EMFHelper.findFeature((EClass)classifier, path);
if (feature != null) {
return !feature.isChangeable();
}
@@ -299,8 +297,7 @@
}
if (classifier instanceof EClass) {
String featureName = path;
- EStructuralFeature feature = ((EClass)classifier)
- .getEStructuralFeature(featureName);
+ EStructuralFeature feature = EMFHelper.findFeature((EClass)classifier, featureName);
if (feature != null) {
return feature.getEType();
}
@@ -359,8 +356,7 @@
eObj = EMFBinding.getEObject(eObj, parent);
featureName = path.substring(index + 1);
}
- EStructuralFeature feature = eObj.eClass().getEStructuralFeature(
- featureName);
+ EStructuralFeature feature = EMFHelper.findFeature(eObj.eClass(), featureName);
if (feature != null) {
eObj.eSet(feature, value);
}
@@ -395,7 +391,7 @@
if (eClass == null) {
return null;
}
- EStructuralFeature feature = eClass.getEStructuralFeature(fullPath);
+ EStructuralFeature feature = EMFHelper.findFeature(eClass, fullPath);
if (feature != null) {
return EMFProperties.value(feature);
}
diff --git a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFHelper.java b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFHelper.java
index 2f53c51..287c704 100644
--- a/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFHelper.java
+++ b/org.eclipse.xwt.emf/src/org/eclipse/xwt/emf/EMFHelper.java
@@ -32,6 +32,22 @@
}
return namedElement.getName();
}
+
+ public static EStructuralFeature findFeature(EClass type, String propertyName) {
+ EStructuralFeature structuralFeature = type
+ .getEStructuralFeature(propertyName);
+ if (structuralFeature == null) {
+ // to workaround a problem of case sensitive of property name comes from XML
+ // To fix this problem, the parser of XML should be rewritten. It is a heavy task.
+ for (EStructuralFeature item : type.getEAllStructuralFeatures()) {
+ if (propertyName.equalsIgnoreCase(item.getName())) {
+ structuralFeature = item;
+ break;
+ }
+ }
+ }
+ return structuralFeature;
+ }
public static Object toType(Object data) {
if (data instanceof EClassifier) {