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();