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) {