Fix the bugs of IDataProvider
diff --git a/org.eclipse.xwt.tests/src/org/eclipse/xwt/tests/databinding/dataprovider/custom/CustomDataProvider.java b/org.eclipse.xwt.tests/src/org/eclipse/xwt/tests/databinding/dataprovider/custom/CustomDataProvider.java
index fac19af..812b75e 100644
--- a/org.eclipse.xwt.tests/src/org/eclipse/xwt/tests/databinding/dataprovider/custom/CustomDataProvider.java
+++ b/org.eclipse.xwt.tests/src/org/eclipse/xwt/tests/databinding/dataprovider/custom/CustomDataProvider.java
@@ -25,15 +25,15 @@
 public class CustomDataProvider extends AbstractDataProvider {

 	static DataModelService dataModelService = new DataModelService() {

 		public Object toModelType(Object data) {

-			throw new UnsupportedOperationException();

+			return null;

 		}

 

 		public Object loadModelType(String className) {

-			throw new UnsupportedOperationException();

+			return null;

 		}

 

 		public Object toModelPropertyType(Object object, String propertyName) {

-			throw new UnsupportedOperationException();

+			return null;

 		}

 	};

 

@@ -41,6 +41,9 @@
 	protected DynamicObject object;

 

 	public Object getData(String path) {

+		if (path == null) {

+			return this;

+		}

 		return getData(getObjectInstance(), path);

 	}

 

@@ -108,7 +111,7 @@
 	}

 

 	public DynamicObject getObjectInstance() {

-		if (object == null) {

+		if (object == null && objectType != null) {

 			try {

 				object = (DynamicObject) objectType.newInstance();

 			} catch (Exception e) {

diff --git a/org.eclipse.xwt/src/org/eclipse/xwt/databinding/JFaceXWTDataBinding.java b/org.eclipse.xwt/src/org/eclipse/xwt/databinding/JFaceXWTDataBinding.java
index f19cbb4..a70e09b 100644
--- a/org.eclipse.xwt/src/org/eclipse/xwt/databinding/JFaceXWTDataBinding.java
+++ b/org.eclipse.xwt/src/org/eclipse/xwt/databinding/JFaceXWTDataBinding.java
@@ -31,6 +31,7 @@
 import org.eclipse.swt.widgets.Control;

 import org.eclipse.swt.widgets.MenuItem;

 import org.eclipse.swt.widgets.Text;

+import org.eclipse.xwt.IDataProvider;

 import org.eclipse.xwt.XWT;

 import org.eclipse.xwt.XWTException;

 import org.eclipse.xwt.internal.core.ScopeManager;

@@ -225,11 +226,12 @@
 			if (valueType instanceof Class<?>) {

 				type = (Class<?>) valueType;

 			}

-		}

-		else if (target instanceof Class<?>) {

+		} else if (target instanceof Class<?>) {

 			type = (Class<?>)target;			

-		}

-		else {

+		} else if (target instanceof IDataProvider) {

+			IDataProvider dataProvider = (IDataProvider) target;

+			type = (Class<?>) toType(dataProvider.getData(null));			

+		} else {

 			type = target.getClass();

 		}

 		if (type == null) {

diff --git a/org.eclipse.xwt/src/org/eclipse/xwt/internal/core/ScopeManager.java b/org.eclipse.xwt/src/org/eclipse/xwt/internal/core/ScopeManager.java
index 4e0b0bc..10313e5 100644
--- a/org.eclipse.xwt/src/org/eclipse/xwt/internal/core/ScopeManager.java
+++ b/org.eclipse.xwt/src/org/eclipse/xwt/internal/core/ScopeManager.java
@@ -174,6 +174,10 @@
 			}

 			dataProvider = XWT.findDataProvider(value);

 			Object dataValue = value;

+			if (value instanceof IDataProvider) {

+				IDataProvider dataProvider = (IDataProvider) value;

+				dataValue = dataProvider.getData(null);

+			}

 			currentPath = null;

 			Object type = elementType;

 			String[] segments = expressionPath.getSegments();