Bug 485878 - DateTime widget databinding 
diff --git a/org.eclipse.xwt.tests/META-INF/MANIFEST.MF b/org.eclipse.xwt.tests/META-INF/MANIFEST.MF
index 74a1d80..9b36504 100644
--- a/org.eclipse.xwt.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.xwt.tests/META-INF/MANIFEST.MF
@@ -130,4 +130,6 @@
  org.eclipse.xwt.tests.usercontrol,

  org.eclipse.xwt.tests.usercontrol.event,

  org.eclipse.xwt.tests.view,

- org.eclipse.xwt.tests.xaml

+ org.eclipse.xwt.tests.wizard,

+ org.eclipse.xwt.tests.xaml,

+ org.eclipse.xwt.testsDataBinding.DateTime

diff --git a/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/DataBindingDateTimeTest.java b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/DataBindingDateTimeTest.java
new file mode 100644
index 0000000..2e5d0ee
--- /dev/null
+++ b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/DataBindingDateTimeTest.java
@@ -0,0 +1,46 @@
+/*******************************************************************************

+ * Copyright (c) 2010 IBM Corporation and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *     IBM Corporation - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.xwt.testsDataBinding.DateTime;

+

+import java.net.URL;

+

+import org.eclipse.swt.widgets.DateTime;

+import org.eclipse.swt.widgets.Label;

+import org.eclipse.swt.widgets.Text;

+import org.eclipse.xwt.IConstants;

+import org.eclipse.xwt.XWT;

+import org.eclipse.xwt.tests.XWTTestCase;

+

+public class DataBindingDateTimeTest extends XWTTestCase {

+

+	public void testDataBinding() throws Exception {

+

+		URL url = DataBindingDateTimeTest.class.getResource(TestClassView.class

+				.getSimpleName() + IConstants.XWT_EXTENSION_SUFFIX);

+		runTest(url, new Runnable() {

+			public void run() {

+

+				DateTime datetime = (DateTime) XWT.findElementByName(root,

+						"birthday");

+				DateTime copyDateTime = (DateTime) XWT.findElementByName(root,

+						"CopyDateTime");

+				checkBinding(datetime, copyDateTime);

+

+			}

+

+			private void checkBinding(DateTime datetime1, DateTime datetime2) {

+				assertEquals(datetime2.getYear(), datetime1.getYear());

+				assertEquals(datetime2.getMonth(), datetime1.getMonth());

+				assertEquals(datetime2.getDay(), datetime1.getDay());

+			}

+		});

+	}

+}

diff --git a/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/ModelObject.java b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/ModelObject.java
new file mode 100644
index 0000000..88b118f
--- /dev/null
+++ b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/ModelObject.java
@@ -0,0 +1,24 @@
+package org.eclipse.xwt.testsDataBinding.DateTime;

+

+import java.beans.PropertyChangeListener;

+import java.beans.PropertyChangeSupport;

+

+public class ModelObject {

+  private final PropertyChangeSupport changeSupport = 

+      new PropertyChangeSupport(this);

+

+  public void addPropertyChangeListener(PropertyChangeListener 

+      listener) {

+    changeSupport.addPropertyChangeListener(listener);

+  }

+

+  public void removePropertyChangeListener(PropertyChangeListener 

+      listener) {

+    changeSupport.removePropertyChangeListener(listener);

+  }

+

+  protected void firePropertyChange(String propertyName, Object oldValue,

+      Object newValue) {

+    changeSupport.firePropertyChange(propertyName, oldValue, newValue);

+  }

+} 

diff --git a/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/Person.java b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/Person.java
new file mode 100644
index 0000000..62b28cb
--- /dev/null
+++ b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/Person.java
@@ -0,0 +1,36 @@
+package org.eclipse.xwt.testsDataBinding.DateTime;

+

+import java.util.Date;

+

+public class Person extends ModelObject {

+	  private String name;

+

+	  public String getName() {

+	    return name;

+	  }

+

+	  public void setName(String name) {

+	    firePropertyChange("name", this.name, this.name = name);

+	  }

+	  

+	  private Boolean married = false; ;

+

+	  public Boolean getMarried() {

+	    return married;

+	  }

+

+	  public void setMarried(Boolean married) {

+	    firePropertyChange("married", this.married, this.married = married);

+	  }

+	  

+	  private Date birthday;

+

+	  public Date getBirthday() {

+	    return birthday;

+	  }

+

+	  public void setBirthday(Date birthday) {

+	    firePropertyChange("birthday", this.birthday, this.birthday = birthday);

+	  }

+	} 

+

diff --git a/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/TestClassView.java b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/TestClassView.java
new file mode 100644
index 0000000..6e215ba
--- /dev/null
+++ b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/TestClassView.java
@@ -0,0 +1,43 @@
+/******************************************************************************* 

+ * Copyright (c) 2006, 2015 Soyatec (http://www.soyatec.com) and others. 

+ * All rights reserved. This program and the accompanying materials 

+ * are made available under the terms of the Eclipse Public License v1.0 

+ * which accompanies this distribution, and is available at 

+ * http://www.eclipse.org/legal/epl-v10.html 

+ * 

+ * Contributors: 

+ * Soyatec - initial API and implementation 

+ *******************************************************************************/

+

+package org.eclipse.xwt.testsDataBinding.DateTime;

+

+import java.net.URL;

+

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.xwt.XWT;

+

+

+/**

+ * @author El-Amine Ouraiba( amine.ouraiba@soyatec.com)

+ * 

+ */

+public class TestClassView extends Composite {

+	static Person person = new Person();

+	

+	public TestClassView(Composite parent, int style) {

+		super(parent, style);

+	}

+

+	

+	public static void main(String[] args) {

+		URL url = TestClassView.class

+				.getResource("TestClassView.xwt");

+		try {

+		

+			XWT.open(url, person);

+		} catch (Exception e) {

+			e.printStackTrace();

+		}

+	}

+

+}
\ No newline at end of file
diff --git a/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/TestClassView.xwt b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/TestClassView.xwt
new file mode 100644
index 0000000..da3f201
--- /dev/null
+++ b/org.eclipse.xwt.tests/src/org/eclipse/xwt/testsDataBinding/DateTime/TestClassView.xwt
@@ -0,0 +1,79 @@
+<Composite xmlns="http://www.eclipse.org/xwt/presentation"
+	xmlns:x="http://www.eclipse.org/xwt" 
+	xmlns:y="clr-namespace:org.eclipse.xwt.testsDataBinding.DateTime" 
+	x:Class="org.eclipse.xwt.testsDataBinding.DateTime.TestClassView" 
+	x:name="TestClass"
+	size="400,300">
+	<Composite.layout>
+		<GridLayout numColumns="2" />
+	</Composite.layout>
+	<Label text="Name" x:name="name_label">
+		<Label.layoutData>
+			<GridData horizontalIndent="10" widthHint="100" />
+		</Label.layoutData>
+	</Label>
+	<Text x:style="BORDER" x:name="name">
+		<Text.text>
+			<Binding path="name"
+				updateSourceTrigger="PropertyChanged">
+			</Binding>
+		</Text.text>
+		<Text.layoutData>
+			<GridData grabExcessHorizontalSpace="true"
+				horizontalAlignment="GridData.FILL" />
+		</Text.layoutData>
+	</Text>
+	<Label text="Married" x:name="married_label">
+		<Label.layoutData>
+			<GridData horizontalIndent="10" widthHint="100" />
+		</Label.layoutData>
+	</Label>
+	<Button x:Style="CHECK" x:name="married">
+		<Button.selection>
+			<Binding path="married" updateSourceTrigger="PropertyChanged">
+			</Binding>
+		</Button.selection>
+		<Button.layoutData>
+			<GridData grabExcessHorizontalSpace="true"
+				horizontalAlignment="GridData.FILL" />
+		</Button.layoutData>
+	</Button>
+
+	<Label text="Birthday" x:name="birthday_label">
+		<Label.layoutData>
+			<GridData horizontalIndent="10" widthHint="100" />
+		</Label.layoutData>
+	</Label>
+	
+	<DateTime x:name="birthday" x:style="BORDER">
+<DateTime.selection>
+			<Binding path="birthday" updateSourceTrigger="PropertyChanged">
+			</Binding>
+</DateTime.selection>
+
+     <DateTime.layoutData>
+           <GridData horizontalAlignment="FILL" grabExcessHorizontalSpace="true" />
+     </DateTime.layoutData>
+
+</DateTime>
+
+	<Label text="Copy of Birthday DateTime " x:name="CopyDateTime_label">
+		<Label.layoutData>
+			<GridData horizontalIndent="10" widthHint="100" />
+		</Label.layoutData>
+	</Label>
+	
+	<DateTime x:name="CopyDateTime" x:style="BORDER">
+<DateTime.selection>
+			<Binding path="birthday" updateSourceTrigger="PropertyChanged">
+			</Binding>
+</DateTime.selection>
+
+     <DateTime.layoutData>
+           <GridData horizontalAlignment="FILL" grabExcessHorizontalSpace="true" />
+     </DateTime.layoutData>
+
+</DateTime>
+
+	
+</Composite>
\ No newline at end of file
diff --git a/org.eclipse.xwt/src/org/eclipse/xwt/XWTLoader.java b/org.eclipse.xwt/src/org/eclipse/xwt/XWTLoader.java
index 0ad4606..a795a36 100644
--- a/org.eclipse.xwt/src/org/eclipse/xwt/XWTLoader.java
+++ b/org.eclipse.xwt/src/org/eclipse/xwt/XWTLoader.java
@@ -17,6 +17,7 @@
 import java.util.ArrayList;

 import java.util.Collection;

 import java.util.Collections;

+import java.util.Date;

 import java.util.HashMap;

 import java.util.Map;

 import java.util.Set;

@@ -35,6 +36,7 @@
 import org.eclipse.jface.databinding.swt.SWTObservables;

 import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;

 import org.eclipse.jface.databinding.viewers.ObservableSetContentProvider;

+import org.eclipse.jface.internal.databinding.swt.DateTimeSelectionProperty;

 import org.eclipse.swt.SWT;

 import org.eclipse.swt.custom.ControlEditor;

 import org.eclipse.swt.custom.TableEditor;

@@ -1630,7 +1632,10 @@
 		registerMetaclass(org.eclipse.swt.widgets.Composite.class);

 		registerMetaclass(org.eclipse.swt.widgets.CoolBar.class);

 		registerMetaclass(org.eclipse.swt.widgets.CoolItem.class);

-		registerMetaclass(org.eclipse.swt.widgets.DateTime.class);

+		

+		IMetaclass dateTimeMetaclass =  registerMetaclass(org.eclipse.swt.widgets.DateTime.class);

+	    dateTimeMetaclass.addProperty(new DataProperty("selection", "selection", Date.class));

+	    

 		registerMetaclass(org.eclipse.swt.widgets.Decorations.class);

 		registerMetaclass(org.eclipse.swt.widgets.ExpandBar.class);

 		IMetaclass expandItemMetaclass = registerMetaclass(ExpandItem.class);

diff --git a/org.eclipse.xwt/src/org/eclipse/xwt/databinding/DataBinding.java b/org.eclipse.xwt/src/org/eclipse/xwt/databinding/DataBinding.java
index b14bd75..a087962 100644
--- a/org.eclipse.xwt/src/org/eclipse/xwt/databinding/DataBinding.java
+++ b/org.eclipse.xwt/src/org/eclipse/xwt/databinding/DataBinding.java
@@ -19,6 +19,7 @@
 import org.eclipse.swt.widgets.Button;

 import org.eclipse.swt.widgets.Combo;

 import org.eclipse.swt.widgets.Control;

+import org.eclipse.swt.widgets.DateTime;

 import org.eclipse.swt.widgets.MenuItem;

 import org.eclipse.swt.widgets.Text;

 import org.eclipse.xwt.IDataProvider;

@@ -105,6 +106,12 @@
 					MenuItem menuItem = (MenuItem) target;

 					menuItem.setEnabled(false);

 				}

+			} else if (target instanceof DateTime

+					&& getTargetProperty().equalsIgnoreCase("selection")) {

+				if (isSourcePropertyReadOnly()) {

+					DateTime dateTime = (DateTime) target;

+					dateTime.setEnabled(false);

+				}

 			}

 			bindingContext.bind(observableSource, observableWidget, this);

 		}

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 a70e09b..72a7e6c 100644
--- a/org.eclipse.xwt/src/org/eclipse/xwt/databinding/JFaceXWTDataBinding.java
+++ b/org.eclipse.xwt/src/org/eclipse/xwt/databinding/JFaceXWTDataBinding.java
@@ -24,11 +24,13 @@
 import org.eclipse.jface.databinding.swt.SWTObservables;

 import org.eclipse.jface.databinding.viewers.ViewerProperties;

 import org.eclipse.jface.databinding.viewers.ViewersObservables;

+import org.eclipse.jface.internal.databinding.swt.DateTimeSelectionProperty;

 import org.eclipse.jface.viewers.Viewer;

 import org.eclipse.swt.SWT;

 import org.eclipse.swt.custom.StyledText;

 import org.eclipse.swt.widgets.Button;

 import org.eclipse.swt.widgets.Control;

+import org.eclipse.swt.widgets.DateTime;

 import org.eclipse.swt.widgets.MenuItem;

 import org.eclipse.swt.widgets.Text;

 import org.eclipse.xwt.IDataProvider;

@@ -391,6 +393,13 @@
 			if (SWT.getVersion() == 3449 && control instanceof Button) {

 				return null;

 			}

+			if (control instanceof DateTime) {

+				IObservableValue observableValue = SWTObservables.observeSelection(control);

+				if (observableValue != null) {

+					return observableValue;

+				}

+			}

+			

 			try {

 				IObservableValue observableValue = SWTObservables

 						.observeText(control);

diff --git a/org.eclipse.xwt/src/org/eclipse/xwt/internal/core/MultiBinding.java b/org.eclipse.xwt/src/org/eclipse/xwt/internal/core/MultiBinding.java
index b7cc696..04db0e1 100644
--- a/org.eclipse.xwt/src/org/eclipse/xwt/internal/core/MultiBinding.java
+++ b/org.eclipse.xwt/src/org/eclipse/xwt/internal/core/MultiBinding.java
@@ -16,6 +16,7 @@
 import org.eclipse.swt.widgets.Button;

 import org.eclipse.swt.widgets.Combo;

 import org.eclipse.swt.widgets.Control;

+import org.eclipse.swt.widgets.DateTime;

 import org.eclipse.swt.widgets.MenuItem;

 import org.eclipse.swt.widgets.Text;

 import org.eclipse.xwt.IDataBindingInfo;

@@ -145,6 +146,13 @@
 						menuItem.setEnabled(false);

 					}

 				}

+				else if (target instanceof DateTime

+						&& getType().equalsIgnoreCase("selection")) {

+					if (isSourcePropertyReadOnly()) {

+						DateTime dateTime = (DateTime) target;

+						dateTime.setEnabled(false);

+					}

+				}

 			}

 			bindingGate.bind(observableValue, observableWidget, this);

 		}