aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJouni Koivuviita <jouni@jounikoivuviita.com>2012-05-18 20:59:25 +0300
committerJouni Koivuviita <jouni@jounikoivuviita.com>2012-05-18 20:59:25 +0300
commit1b5dae24a39944b657ad1fa82a8952adc1c4abd3 (patch)
treee63f568836f9171a7861843445cc14fde6fa92ca
parent612443937cdd054b53287c1c2760a48bb2624eec (diff)
parent2ad73a7b9aedd38b14b0e40195e557dc4b097edd (diff)
downloadvaadin-framework-1b5dae24a39944b657ad1fa82a8952adc1c4abd3.tar.gz
vaadin-framework-1b5dae24a39944b657ad1fa82a8952adc1c4abd3.zip
Merge branch 'master' into layoutgraph
-rw-r--r--src/com/vaadin/Version.java74
-rw-r--r--src/com/vaadin/terminal/PaintException.java13
-rw-r--r--src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml14
-rw-r--r--src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java20
-rw-r--r--src/com/vaadin/terminal/gwt/client/ApplicationConnection.java42
-rw-r--r--src/com/vaadin/terminal/gwt/client/BrowserInfo.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ServerConnector.java16
-rw-r--r--src/com/vaadin/terminal/gwt/client/communication/JSONSerializer.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/communication/JsonDecoder.java70
-rw-r--r--src/com/vaadin/terminal/gwt/client/communication/JsonEncoder.java85
-rw-r--r--src/com/vaadin/terminal/gwt/client/communication/URLReference_Serializer.java18
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java41
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/AbstractConnector.java31
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/AbstractMediaState.java82
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/ConnectorClassBasedFactory.java40
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/ConnectorStateFactory.java31
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/ConnectorWidgetFactory.java42
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/MediaBaseConnector.java102
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VMediaBase.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/accordion/AccordionConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/audio/AudioConnector.java17
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/audio/VAudio.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/button/ButtonConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/combobox/ComboBoxConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/customcomponent/CustomComponentConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/customfield/CustomFieldConnector.java15
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/customlayout/CustomLayoutConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/datefield/AbstractDateFieldConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/datefield/InlineDateFieldConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/datefield/PopupDateFieldConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/datefield/TextualDateConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/DragAndDropWrapperConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/form/FormConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/formlayout/FormLayoutConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/label/ContentMode.java48
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java70
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/label/LabelState.java28
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/link/LinkConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/listselect/ListSelectConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBarConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/nativebutton/NativeButtonConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/nativeselect/NativeSelectConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java35
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutState.java37
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/orderedlayout/HorizontalLayoutConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VerticalLayoutConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/panel/PanelConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/passwordfield/PasswordFieldConnector.java14
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/popupview/PopupViewConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/progressindicator/ProgressIndicatorConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/root/RootConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/slider/SliderConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelConnector.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/splitpanel/HorizontalSplitPanelConnector.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/splitpanel/VerticalSplitPanelConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/table/TableConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetConnector.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaConnector.java26
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaState.java36
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/textarea/VTextArea.java58
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/textfield/AbstractTextFieldState.java61
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/textfield/TextFieldConnector.java41
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/textfield/VTextField.java79
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/tree/TreeConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/treetable/TreeTableConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/treetable/VTreeTable.java8
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/twincolselect/TwinColSelectConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/upload/UploadConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/video/VVideo.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/video/VideoConnector.java33
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/video/VideoState.java20
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/window/WindowConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java19
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java63
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java67
-rw-r--r--src/com/vaadin/terminal/gwt/server/BootstrapHandler.java7
-rw-r--r--src/com/vaadin/terminal/gwt/server/ClientConnector.java9
-rw-r--r--src/com/vaadin/terminal/gwt/server/DragAndDropService.java4
-rw-r--r--src/com/vaadin/terminal/gwt/server/JsonCodec.java196
-rw-r--r--src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java4
-rw-r--r--src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java48
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/AbstractConnectorClassBasedFactoryGenerator.java145
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/ConnectorStateFactoryGenerator.java29
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/ConnectorWidgetFactoryGenerator.java29
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/SerializerGenerator.java188
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/SerializerMapGenerator.java3
-rw-r--r--src/com/vaadin/ui/AbstractComponent.java25
-rw-r--r--src/com/vaadin/ui/AbstractMedia.java96
-rw-r--r--src/com/vaadin/ui/AbstractOrderedLayout.java109
-rw-r--r--src/com/vaadin/ui/AbstractTextField.java128
-rw-r--r--src/com/vaadin/ui/Label.java175
-rw-r--r--src/com/vaadin/ui/Root.java9
-rw-r--r--src/com/vaadin/ui/TextArea.java48
-rw-r--r--src/com/vaadin/ui/Video.java22
-rw-r--r--tests/client-side/com/vaadin/terminal/gwt/server/JSONSerializerTest.java146
-rw-r--r--tests/testbench/com/vaadin/tests/Components.java2
-rw-r--r--tests/testbench/com/vaadin/tests/CustomLayoutDemo.java2
-rw-r--r--tests/testbench/com/vaadin/tests/LayoutDemo.java2
-rw-r--r--tests/testbench/com/vaadin/tests/NativeWindowing.java2
-rw-r--r--tests/testbench/com/vaadin/tests/PerformanceTestBasicComponentRendering.java2
-rw-r--r--tests/testbench/com/vaadin/tests/PerformanceTestLabelsAndOrderedLayouts.java2
-rw-r--r--tests/testbench/com/vaadin/tests/PerformanceTestSubTreeCaching.java2
-rw-r--r--tests/testbench/com/vaadin/tests/TestCaptionWrapper.java2
-rw-r--r--tests/testbench/com/vaadin/tests/TestForNativeWindowing.java2
-rw-r--r--tests/testbench/com/vaadin/tests/TestForRichTextEditor.java2
-rw-r--r--tests/testbench/com/vaadin/tests/TestForStyledUpload.java2
-rw-r--r--tests/testbench/com/vaadin/tests/TestForUpload.java2
-rw-r--r--tests/testbench/com/vaadin/tests/TestIFrames.java2
-rw-r--r--tests/testbench/com/vaadin/tests/TreeFilesystem.java2
-rw-r--r--tests/testbench/com/vaadin/tests/UsingObjectsInSelect.java2
-rw-r--r--tests/testbench/com/vaadin/tests/application/ApplicationCloseTest.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/AbstractTestRoot.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/TestBase.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/button/ButtonMouseDetails.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/caption/IconsInCaption.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/customcomponent/ClipContent.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/datefield/DateFieldEmptyValid.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/datefield/ValueThroughProperty.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/label/LabelModes.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/label/LabelTest.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/label/Labels.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/label/MarginsInLabels.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroupMultipleValueChange.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/panel/PanelShouldNotScroll.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/popupview/PopupViewOffScreen.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/popupview/ReopenPopupView.html73
-rw-r--r--tests/testbench/com/vaadin/tests/components/popupview/ReopenPopupView.java37
-rw-r--r--tests/testbench/com/vaadin/tests/components/root/LazyInitRoots.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/table/EditableTableLeak.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/table/LongMultiselect.java3
-rw-r--r--tests/testbench/com/vaadin/tests/components/table/Tables.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/window/LazyWindowResize.java2
-rw-r--r--tests/testbench/com/vaadin/tests/components/window/SubWindowWithUndefinedHeight.java4
-rw-r--r--tests/testbench/com/vaadin/tests/dd/MyDragSourceConnector.java6
-rw-r--r--tests/testbench/com/vaadin/tests/dd/MyDropTargetConnector.java7
-rw-r--r--tests/testbench/com/vaadin/tests/integration/JSR286PortletApplication.java14
-rw-r--r--tests/testbench/com/vaadin/tests/integration/LiferayThemeDemo.java2
-rw-r--r--tests/testbench/com/vaadin/tests/layouts/HiddenHorizontalLayout.java2
-rw-r--r--tests/testbench/com/vaadin/tests/layouts/TestLayoutPerformance.java2
-rw-r--r--tests/testbench/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java2
-rw-r--r--tests/testbench/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket1225.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket124.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket1444.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket1804.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket1811.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket1819.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket1970.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket2104.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket2117.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket2119.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket2240.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket2287.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket2304.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket2426.java4
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket5952.java2
-rw-r--r--tests/testbench/com/vaadin/tests/tickets/Ticket677.java2
-rw-r--r--tests/testbench/com/vaadin/tests/util/Log.java2
-rw-r--r--tests/testbench/com/vaadin/tests/util/SampleDirectory.java2
170 files changed, 2003 insertions, 1475 deletions
diff --git a/src/com/vaadin/Version.java b/src/com/vaadin/Version.java
new file mode 100644
index 0000000000..eb6d73e7e0
--- /dev/null
+++ b/src/com/vaadin/Version.java
@@ -0,0 +1,74 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin;
+
+import java.io.Serializable;
+
+public class Version implements Serializable {
+ /**
+ * The version number of this release. For example "6.2.0". Always in the
+ * format "major.minor.revision[.build]". The build part is optional. All of
+ * major, minor, revision must be integers.
+ */
+ private static final String VERSION;
+ /**
+ * Major version number. For example 6 in 6.2.0.
+ */
+ private static final int VERSION_MAJOR;
+
+ /**
+ * Minor version number. For example 2 in 6.2.0.
+ */
+ private static final int VERSION_MINOR;
+
+ /**
+ * Version revision number. For example 0 in 6.2.0.
+ */
+ private static final int VERSION_REVISION;
+
+ /**
+ * Build identifier. For example "nightly-20091123-c9963" in
+ * 6.2.0.nightly-20091123-c9963.
+ */
+ private static final String VERSION_BUILD;
+
+ /* Initialize version numbers from string replaced by build-script. */
+ static {
+ if ("@VERSION@".equals("@" + "VERSION" + "@")) {
+ VERSION = "9.9.9.INTERNAL-DEBUG-BUILD";
+ } else {
+ VERSION = "@VERSION@";
+ }
+ final String[] digits = VERSION.split("\\.", 4);
+ VERSION_MAJOR = Integer.parseInt(digits[0]);
+ VERSION_MINOR = Integer.parseInt(digits[1]);
+ VERSION_REVISION = Integer.parseInt(digits[2]);
+ if (digits.length == 4) {
+ VERSION_BUILD = digits[3];
+ } else {
+ VERSION_BUILD = "";
+ }
+ }
+
+ public static String getFullVersion() {
+ return VERSION;
+ }
+
+ public static int getMajorVersion() {
+ return VERSION_MAJOR;
+ }
+
+ public static int getMinorVersion() {
+ return VERSION_MINOR;
+ }
+
+ public static int getRevision() {
+ return VERSION_REVISION;
+ }
+
+ public static String getBuildIdentifier() {
+ return VERSION_BUILD;
+ }
+
+}
diff --git a/src/com/vaadin/terminal/PaintException.java b/src/com/vaadin/terminal/PaintException.java
index 02b138035c..68f689b7f1 100644
--- a/src/com/vaadin/terminal/PaintException.java
+++ b/src/com/vaadin/terminal/PaintException.java
@@ -30,6 +30,19 @@ public class PaintException extends IOException implements Serializable {
}
/**
+ * Constructs an instance of <code>PaintExeception</code> with the specified
+ * detail message and cause.
+ *
+ * @param msg
+ * the detail message.
+ * @param cause
+ * the cause
+ */
+ public PaintException(String msg, Throwable cause) {
+ super(msg, cause);
+ }
+
+ /**
* Constructs an instance of <code>PaintExeception</code> from IOException.
*
* @param exception
diff --git a/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml b/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml
index abea4a43e4..3487a655e5 100644
--- a/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml
+++ b/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml
@@ -45,7 +45,7 @@
</replace-with>
<generate-with
- class="com.vaadin.terminal.gwt.widgetsetutils.EagerWidgetMapGenerator">
+ class="com.vaadin.terminal.gwt.widgetsetutils.EagerWidgetMapGenerator">
<when-type-is class="com.vaadin.terminal.gwt.client.WidgetMap" />
</generate-with>
@@ -76,6 +76,18 @@
class="com.vaadin.terminal.gwt.client.communication.RpcManager" />
</generate-with>
+ <generate-with
+ class="com.vaadin.terminal.gwt.widgetsetutils.ConnectorWidgetFactoryGenerator">
+ <when-type-assignable
+ class="com.vaadin.terminal.gwt.client.ui.ConnectorWidgetFactory" />
+ </generate-with>
+
+ <generate-with
+ class="com.vaadin.terminal.gwt.widgetsetutils.ConnectorStateFactoryGenerator">
+ <when-type-assignable
+ class="com.vaadin.terminal.gwt.client.ui.ConnectorStateFactory" />
+ </generate-with>
+
<entry-point class="com.vaadin.terminal.gwt.client.ApplicationConfiguration" />
<!-- Use the new cross site linker to get a nocache.js without document.write -->
diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java b/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java
index ff77c5904a..8eeccb828d 100644
--- a/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java
+++ b/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java
@@ -212,6 +212,7 @@ public class ApplicationConfiguration implements EntryPoint {
private Class<? extends ComponentConnector>[] classes = new Class[1024];
private boolean browserDetailsSent = false;
+ private boolean widgetsetVersionSent = false;
static// TODO consider to make this hashmap per application
LinkedList<Command> callbacks = new LinkedList<Command>();
@@ -645,4 +646,23 @@ public class ApplicationConfiguration implements EntryPoint {
browserDetailsSent = true;
}
+ /**
+ * Checks whether the widget set version has been sent to the server. It is
+ * sent in the first UIDL request.
+ *
+ * @return <code>true</code> if browser information has already been sent
+ *
+ * @see ApplicationConnection#getNativeBrowserDetailsParameters(String)
+ */
+ public boolean isWidgetsetVersionSent() {
+ return widgetsetVersionSent;
+ }
+
+ /**
+ * Registers that the widget set version has been sent to the server.
+ */
+ public void setWidgetsetVersionSent() {
+ widgetsetVersionSent = true;
+ }
+
}
diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java
index 739c232a72..51a0ec3f02 100644
--- a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java
+++ b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java
@@ -43,7 +43,7 @@ import com.vaadin.terminal.gwt.client.communication.JsonDecoder;
import com.vaadin.terminal.gwt.client.communication.JsonEncoder;
import com.vaadin.terminal.gwt.client.communication.MethodInvocation;
import com.vaadin.terminal.gwt.client.communication.RpcManager;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
+import com.vaadin.terminal.gwt.client.communication.SerializerMap;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
import com.vaadin.terminal.gwt.client.ui.VContextMenu;
@@ -102,6 +102,8 @@ public class ApplicationConnection {
public static final String PARAM_UNLOADBURST = "onunloadburst";
+ private static SerializerMap serializerMap;
+
/**
* A string that, if found in a non-JSON response to a UIDL request, will
* cause the browser to refresh the page. If followed by a colon, optional
@@ -197,6 +199,7 @@ public class ApplicationConnection {
rpcManager = GWT.create(RpcManager.class);
layoutManager = GWT.create(LayoutManager.class);
layoutManager.setConnection(this);
+ serializerMap = GWT.create(SerializerMap.class);
}
public void init(WidgetSet widgetSet, ApplicationConfiguration cnf) {
@@ -412,13 +415,10 @@ public class ApplicationConnection {
// initial uidl request
String nativeBootstrapParameters = getNativeBrowserDetailsParameters(getConfiguration()
.getRootPanelId());
- String widgetsetVersion = ApplicationConfiguration.VERSION;
-
// TODO figure out how client and view size could be used better on
// server. screen size can be accessed via Browser object, but other
// values currently only via transaction listener.
- String parameters = "repaintAll=1&" + nativeBootstrapParameters
- + "&wsver=" + widgetsetVersion;
+ String parameters = "repaintAll=1&" + nativeBootstrapParameters;
return parameters;
}
@@ -1413,11 +1413,10 @@ public class ApplicationConnection {
JSONArray stateDataAndType = new JSONArray(
states.getJavaScriptObject(connectorId));
- Object state = JsonDecoder.decodeValue(
- stateDataAndType, connectorMap,
+ JsonDecoder.decodeValue(stateDataAndType,
+ connector.getState(), connectorMap,
ApplicationConnection.this);
- connector.setState((SharedState) state);
StateChangeEvent event = GWT
.create(StateChangeEvent.class);
event.setConnector(connector);
@@ -1569,7 +1568,8 @@ public class ApplicationConnection {
Object[] parameters = new Object[parametersJson.size()];
for (int j = 0; j < parametersJson.size(); ++j) {
parameters[j] = JsonDecoder.decodeValue(
- (JSONArray) parametersJson.get(j), getConnectorMap(), this);
+ (JSONArray) parametersJson.get(j), null, getConnectorMap(),
+ this);
}
return new MethodInvocation(connectorId, interfaceName, methodName,
parameters);
@@ -1687,11 +1687,12 @@ public class ApplicationConnection {
invocationJson.set(2,
new JSONString(invocation.getMethodName()));
JSONArray paramJson = new JSONArray();
+ boolean restrictToInternalTypes = isLegacyVariableChange(invocation);
for (int i = 0; i < invocation.getParameters().length; ++i) {
// TODO non-static encoder? type registration?
paramJson.set(i, JsonEncoder.encode(
- invocation.getParameters()[i], getConnectorMap(),
- this));
+ invocation.getParameters()[i],
+ restrictToInternalTypes, getConnectorMap(), this));
}
invocationJson.set(3, paramJson);
reqJson.set(reqJson.size(), invocationJson);
@@ -1718,10 +1719,25 @@ public class ApplicationConnection {
} else {
extraParams = "";
}
+ if (!getConfiguration().isWidgetsetVersionSent()) {
+ if (!extraParams.isEmpty()) {
+ extraParams += "&";
+ }
+ String widgetsetVersion = ApplicationConfiguration.VERSION;
+ extraParams += "wsver=" + widgetsetVersion;
+ getConfiguration().setWidgetsetVersionSent();
+ }
makeUidlRequest(req.toString(), extraParams, forceSync);
}
+ private boolean isLegacyVariableChange(MethodInvocation invocation) {
+ return ApplicationConnection.UPDATE_VARIABLE_METHOD.equals(invocation
+ .getInterfaceName())
+ && ApplicationConnection.UPDATE_VARIABLE_METHOD
+ .equals(invocation.getMethodName());
+ }
+
/**
* Sends a new value for the given paintables given variable to the server.
* <p>
@@ -2439,4 +2455,8 @@ public class ApplicationConnection {
LayoutManager getLayoutManager() {
return layoutManager;
}
+
+ public SerializerMap getSerializerMap() {
+ return serializerMap;
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/client/BrowserInfo.java b/src/com/vaadin/terminal/gwt/client/BrowserInfo.java
index 064f175301..e12c002930 100644
--- a/src/com/vaadin/terminal/gwt/client/BrowserInfo.java
+++ b/src/com/vaadin/terminal/gwt/client/BrowserInfo.java
@@ -203,10 +203,6 @@ public class BrowserInfo {
return browserDetails.isSafari();
}
- public boolean isSafari4() {
- return isSafari() && browserDetails.getBrowserMajorVersion() == 4;
- }
-
public boolean isIE8() {
return isIE() && browserDetails.getBrowserMajorVersion() == 8;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ServerConnector.java b/src/com/vaadin/terminal/gwt/client/ServerConnector.java
index c10f4bb411..02b894e831 100644
--- a/src/com/vaadin/terminal/gwt/client/ServerConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ServerConnector.java
@@ -8,7 +8,6 @@ import java.util.Collection;
import com.google.gwt.event.shared.GwtEvent;
import com.google.web.bindery.event.shared.HandlerRegistration;
import com.vaadin.terminal.gwt.client.communication.ClientRpc;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent.StateChangeHandler;
/**
@@ -23,21 +22,6 @@ import com.vaadin.terminal.gwt.client.communication.StateChangeEvent.StateChange
public interface ServerConnector extends Connector {
/**
- * Sets a new state for the connector.
- *
- * @param state
- * The new state
- * @deprecated This should be removed. Framework should update what is
- * returned by getState() instead of setting a new state object.
- * Note that this must be done either so that setState accepts a
- * state object once (first time received from the server) or
- * getState() in AbstractConnector uses a generated class to
- * create the state object (like RpcProy.craete())
- */
- @Deprecated
- public void setState(SharedState state);
-
- /**
* Gets ApplicationConnection instance that created this connector.
*
* @return The ApplicationConnection as set by
diff --git a/src/com/vaadin/terminal/gwt/client/communication/JSONSerializer.java b/src/com/vaadin/terminal/gwt/client/communication/JSONSerializer.java
index c626d31d0a..f7b3df6b05 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/JSONSerializer.java
+++ b/src/com/vaadin/terminal/gwt/client/communication/JSONSerializer.java
@@ -5,6 +5,7 @@
package com.vaadin.terminal.gwt.client.communication;
import com.google.gwt.json.client.JSONObject;
+import com.google.gwt.json.client.JSONValue;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ConnectorMap;
import com.vaadin.terminal.gwt.server.JsonCodec;
@@ -33,12 +34,14 @@ public interface JSONSerializer<T> {
*
* @param jsonValue
* JSON map from property name to property value
+ * @param target
+ * The object to write the deserialized values to
* @param idMapper
* mapper from paintable id to paintable, used to decode
* references to paintables
* @return A deserialized object
*/
- T deserialize(JSONObject jsonValue, ConnectorMap idMapper,
+ T deserialize(JSONValue jsonValue, T target, ConnectorMap idMapper,
ApplicationConnection connection);
/**
@@ -54,7 +57,7 @@ public interface JSONSerializer<T> {
* references to paintables
* @return A JSON serialized version of the object
*/
- JSONObject serialize(T value, ConnectorMap idMapper,
+ JSONValue serialize(T value, ConnectorMap idMapper,
ApplicationConnection connection);
}
diff --git a/src/com/vaadin/terminal/gwt/client/communication/JsonDecoder.java b/src/com/vaadin/terminal/gwt/client/communication/JsonDecoder.java
index 2b58c13f3e..9ed20b6c79 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/JsonDecoder.java
+++ b/src/com/vaadin/terminal/gwt/client/communication/JsonDecoder.java
@@ -12,12 +12,12 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
+import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONString;
+import com.google.gwt.json.client.JSONValue;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.Connector;
import com.vaadin.terminal.gwt.client.ConnectorMap;
import com.vaadin.terminal.gwt.client.ServerConnector;
@@ -33,7 +33,6 @@ import com.vaadin.terminal.gwt.client.ServerConnector;
* @since 7.0
*/
public class JsonDecoder {
- static SerializerMap serializerMap = GWT.create(SerializerMap.class);
/**
* Decode a JSON array with two elements (type and value) into a client-side
@@ -48,14 +47,15 @@ public class JsonDecoder {
* reference to the current ApplicationConnection
* @return decoded value (does not contain JSON types)
*/
- public static Object decodeValue(JSONArray jsonArray,
+ public static Object decodeValue(JSONArray jsonArray, Object target,
ConnectorMap idMapper, ApplicationConnection connection) {
String type = ((JSONString) jsonArray.get(0)).stringValue();
- return decodeValue(type, jsonArray.get(1), idMapper, connection);
+ return decodeValue(type, jsonArray.get(1), target, idMapper, connection);
}
- private static Object decodeValue(String variableType, Object value,
- ConnectorMap idMapper, ApplicationConnection connection) {
+ private static Object decodeValue(String variableType, JSONValue value,
+ Object target, ConnectorMap idMapper,
+ ApplicationConnection connection) {
Object val = null;
// TODO type checks etc.
if (JsonEncoder.VTYPE_NULL.equals(variableType)) {
@@ -64,8 +64,6 @@ public class JsonDecoder {
val = decodeArray((JSONArray) value, idMapper, connection);
} else if (JsonEncoder.VTYPE_MAP.equals(variableType)) {
val = decodeMap((JSONObject) value, idMapper, connection);
- } else if (JsonEncoder.VTYPE_MAP_CONNECTOR.equals(variableType)) {
- val = decodeConnectorMap((JSONObject) value, idMapper, connection);
} else if (JsonEncoder.VTYPE_LIST.equals(variableType)) {
val = decodeList((JSONArray) value, idMapper, connection);
} else if (JsonEncoder.VTYPE_SET.equals(variableType)) {
@@ -92,42 +90,38 @@ public class JsonDecoder {
} else if (JsonEncoder.VTYPE_CONNECTOR.equals(variableType)) {
val = idMapper.getConnector(((JSONString) value).stringValue());
} else {
- // object, class name as type
- JSONSerializer serializer = serializerMap
- .getSerializer(variableType);
- // TODO handle case with no serializer found
- Object object = serializer.deserialize((JSONObject) value,
- idMapper, connection);
- return object;
+ return decodeObject(variableType, value, target, idMapper,
+ connection);
}
return val;
}
- private static Map<String, Object> decodeMap(JSONObject jsonMap,
- ConnectorMap idMapper, ApplicationConnection connection) {
- HashMap<String, Object> map = new HashMap<String, Object>();
- Iterator<String> it = jsonMap.keySet().iterator();
- while (it.hasNext()) {
- String key = it.next();
- map.put(key,
- decodeValue((JSONArray) jsonMap.get(key), idMapper,
- connection));
- }
- return map;
+ private static Object decodeObject(String variableType,
+ JSONValue encodedValue, Object target, ConnectorMap idMapper,
+ ApplicationConnection connection) {
+ // object, class name as type
+ JSONSerializer<Object> serializer = connection.getSerializerMap()
+ .getSerializer(variableType);
+ // TODO handle case with no serializer found
+ Object object = serializer.deserialize(encodedValue, target, idMapper,
+ connection);
+ return object;
}
- private static Map<Connector, Object> decodeConnectorMap(
- JSONObject jsonMap, ConnectorMap idMapper,
- ApplicationConnection connection) {
- HashMap<Connector, Object> map = new HashMap<Connector, Object>();
+ private static Map<Object, Object> decodeMap(JSONObject jsonMap,
+ ConnectorMap idMapper, ApplicationConnection connection) {
+ HashMap<Object, Object> map = new HashMap<Object, Object>();
Iterator<String> it = jsonMap.keySet().iterator();
while (it.hasNext()) {
- String connectorId = it.next();
- Connector connector = idMapper.getConnector(connectorId);
- map.put(connector,
- decodeValue((JSONArray) jsonMap.get(connectorId), idMapper,
- connection));
+ String key = it.next();
+ JSONArray encodedKey = (JSONArray) JSONParser.parseStrict(key);
+ JSONArray encodedValue = (JSONArray) jsonMap.get(key);
+ Object decodedKey = decodeValue(encodedKey, null, idMapper,
+ connection);
+ Object decodedValue = decodeValue(encodedValue, null, idMapper,
+ connection);
+ map.put(decodedKey, decodedValue);
}
return map;
}
@@ -153,7 +147,7 @@ public class JsonDecoder {
for (int i = 0; i < jsonArray.size(); ++i) {
// each entry always has two elements: type and value
JSONArray entryArray = (JSONArray) jsonArray.get(i);
- tokens.add(decodeValue(entryArray, idMapper, connection));
+ tokens.add(decodeValue(entryArray, null, idMapper, connection));
}
return tokens;
}
@@ -164,7 +158,7 @@ public class JsonDecoder {
for (int i = 0; i < jsonArray.size(); ++i) {
// each entry always has two elements: type and value
JSONArray entryArray = (JSONArray) jsonArray.get(i);
- tokens.add(decodeValue(entryArray, idMapper, connection));
+ tokens.add(decodeValue(entryArray, null, idMapper, connection));
}
return tokens;
}
diff --git a/src/com/vaadin/terminal/gwt/client/communication/JsonEncoder.java b/src/com/vaadin/terminal/gwt/client/communication/JsonEncoder.java
index fdc06b0e21..f09536a9f7 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/JsonEncoder.java
+++ b/src/com/vaadin/terminal/gwt/client/communication/JsonEncoder.java
@@ -42,10 +42,6 @@ public class JsonEncoder {
public static final String VTYPE_ARRAY = "a";
public static final String VTYPE_STRINGARRAY = "S";
public static final String VTYPE_MAP = "m";
- // Hack to support Map<Connector,?>. Should be replaced by generic support
- // for any object as key (#8602)
- @Deprecated
- public static final String VTYPE_MAP_CONNECTOR = "M";
public static final String VTYPE_LIST = "L";
public static final String VTYPE_SET = "q";
public static final String VTYPE_NULL = "n";
@@ -61,7 +57,8 @@ public class JsonEncoder {
* @param connection
* @return JSON representation of the value
*/
- public static JSONValue encode(Object value, ConnectorMap connectorMap,
+ public static JSONValue encode(Object value,
+ boolean restrictToInternalTypes, ConnectorMap connectorMap,
ApplicationConnection connection) {
if (null == value) {
return combineTypeAndValue(VTYPE_NULL, JSONNull.getInstance());
@@ -79,35 +76,28 @@ public class JsonEncoder {
return combineTypeAndValue(VTYPE_BOOLEAN,
JSONBoolean.getInstance((Boolean) value));
} else if (value instanceof Object[]) {
- return encodeObjectArray((Object[]) value, connectorMap, connection);
- } else if (value instanceof Map) {
- Map<Object, Object> map = (Map<Object, Object>) value;
- JSONObject jsonMap = new JSONObject();
- String type = VTYPE_MAP;
- for (Object mapKey : map.keySet()) {
- Object mapValue = map.get(mapKey);
- if (mapKey instanceof Connector) {
- mapKey = ((Connector) mapKey).getConnectorId();
- type = VTYPE_MAP_CONNECTOR;
- }
-
- if (!(mapKey instanceof String)) {
- throw new RuntimeException(
- "Only Map<String,?> and Map<Connector,?> is currently supported."
- + " Failed map used "
- + mapKey.getClass().getName() + " as keys");
- }
- jsonMap.put((String) mapKey,
- encode(mapValue, connectorMap, connection));
+ return encodeObjectArray((Object[]) value, restrictToInternalTypes,
+ connectorMap, connection);
+ } else if (value instanceof Enum) {
+ if (restrictToInternalTypes) {
+ // Enums are encoded as strings in Vaadin 6 so we still do that
+ // for backwards copmatibility.
+ return encode(value.toString(), restrictToInternalTypes,
+ connectorMap, connection);
+ } else {
+ Enum e = (Enum) value;
+ return encodeEnum(e, connectorMap, connection);
}
- return combineTypeAndValue(type, jsonMap);
+ } else if (value instanceof Map) {
+ return encodeMap((Map) value, restrictToInternalTypes,
+ connectorMap, connection);
} else if (value instanceof Connector) {
Connector connector = (Connector) value;
return combineTypeAndValue(VTYPE_CONNECTOR, new JSONString(
connector.getConnectorId()));
} else if (value instanceof Collection) {
- return encodeCollection((Collection) value, connectorMap,
- connection);
+ return encodeCollection((Collection) value,
+ restrictToInternalTypes, connectorMap, connection);
} else {
String transportType = getTransportType(value);
if (transportType != null) {
@@ -117,7 +107,7 @@ public class JsonEncoder {
// Try to find a generated serializer object, class name is the
// type
transportType = value.getClass().getName();
- JSONSerializer serializer = JsonDecoder.serializerMap
+ JSONSerializer serializer = connection.getSerializerMap()
.getSerializer(transportType);
// TODO handle case with no serializer found
@@ -127,22 +117,49 @@ public class JsonEncoder {
}
}
+ private static JSONValue encodeMap(Map<Object, Object> map,
+ boolean restrictToInternalTypes, ConnectorMap connectorMap,
+ ApplicationConnection connection) {
+ JSONObject jsonMap = new JSONObject();
+ for (Object mapKey : map.keySet()) {
+ Object mapValue = map.get(mapKey);
+ JSONValue encodedKey = encode(mapKey, restrictToInternalTypes,
+ connectorMap, connection);
+ JSONValue encodedValue = encode(mapValue, restrictToInternalTypes,
+ connectorMap, connection);
+ jsonMap.put(encodedKey.toString(), encodedValue);
+ }
+ return combineTypeAndValue(VTYPE_MAP, jsonMap);
+ }
+
+ private static JSONValue encodeEnum(Enum e, ConnectorMap connectorMap,
+ ApplicationConnection connection) {
+ return combineTypeAndValue(e.getClass().getName(),
+ new JSONString(e.toString()));
+ }
+
private static JSONValue encodeObjectArray(Object[] array,
- ConnectorMap connectorMap, ApplicationConnection connection) {
+ boolean restrictToInternalTypes, ConnectorMap connectorMap,
+ ApplicationConnection connection) {
JSONArray jsonArray = new JSONArray();
for (int i = 0; i < array.length; ++i) {
// TODO handle object graph loops?
- jsonArray.set(i, encode(array[i], connectorMap, connection));
+ jsonArray.set(
+ i,
+ encode(array[i], restrictToInternalTypes, connectorMap,
+ connection));
}
return combineTypeAndValue(VTYPE_ARRAY, jsonArray);
}
private static JSONValue encodeCollection(Collection collection,
- ConnectorMap connectorMap, ApplicationConnection connection) {
+ boolean restrictToInternalTypes, ConnectorMap connectorMap,
+ ApplicationConnection connection) {
JSONArray jsonArray = new JSONArray();
int idx = 0;
for (Object o : collection) {
- JSONValue encodedObject = encode(o, connectorMap, connection);
+ JSONValue encodedObject = encode(o, restrictToInternalTypes,
+ connectorMap, connection);
jsonArray.set(idx++, encodedObject);
}
if (collection instanceof Set) {
@@ -193,8 +210,6 @@ public class JsonEncoder {
return VTYPE_LIST;
} else if (value instanceof Set) {
return VTYPE_SET;
- } else if (value instanceof Enum) {
- return VTYPE_STRING; // transported as string representation
} else if (value instanceof String[]) {
return VTYPE_STRINGARRAY;
} else if (value instanceof Object[]) {
diff --git a/src/com/vaadin/terminal/gwt/client/communication/URLReference_Serializer.java b/src/com/vaadin/terminal/gwt/client/communication/URLReference_Serializer.java
index 4fefc7f845..2ee7df7f6d 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/URLReference_Serializer.java
+++ b/src/com/vaadin/terminal/gwt/client/communication/URLReference_Serializer.java
@@ -6,26 +6,30 @@ package com.vaadin.terminal.gwt.client.communication;
import com.google.gwt.core.client.GWT;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
+import com.google.gwt.json.client.JSONValue;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ConnectorMap;
public class URLReference_Serializer implements JSONSerializer<URLReference> {
- public URLReference deserialize(JSONObject jsonValue,
+ public URLReference deserialize(JSONValue jsonValue, URLReference target,
ConnectorMap idMapper, ApplicationConnection connection) {
URLReference reference = GWT.create(URLReference.class);
- JSONArray jsonURL = (JSONArray) jsonValue.get("URL");
- String URL = (String) JsonDecoder.decodeValue(jsonURL, idMapper,
- connection);
- reference.setURL(connection.translateVaadinUri(URL));
+ JSONObject json = (JSONObject) jsonValue;
+ if (json.containsKey("URL")) {
+ JSONArray jsonURL = (JSONArray) json.get("URL");
+ String URL = (String) JsonDecoder.decodeValue(jsonURL, null,
+ idMapper, connection);
+ reference.setURL(connection.translateVaadinUri(URL));
+ }
return reference;
}
- public JSONObject serialize(URLReference value, ConnectorMap idMapper,
+ public JSONValue serialize(URLReference value, ConnectorMap idMapper,
ApplicationConnection connection) {
JSONObject json = new JSONObject();
json.put("URL",
- JsonEncoder.encode(value.getURL(), idMapper, connection));
+ JsonEncoder.encode(value.getURL(), true, idMapper, connection));
return json;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java
index fdb04f0ddf..d690bdded1 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java
@@ -18,7 +18,6 @@ import com.vaadin.terminal.gwt.client.TooltipInfo;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VConsole;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.root.RootConnector;
@@ -29,9 +28,6 @@ public abstract class AbstractComponentConnector extends AbstractConnector
private Widget widget;
- // shared state from the server to the client
- private ComponentState state;
-
private String lastKnownWidth = "";
private String lastKnownHeight = "";
@@ -47,7 +43,9 @@ public abstract class AbstractComponentConnector extends AbstractConnector
*
* @return
*/
- protected abstract Widget createWidget();
+ protected Widget createWidget() {
+ return ConnectorWidgetFactory.createWidget(getClass());
+ }
/**
* Returns the widget associated with this paintable. The widget returned by
@@ -63,24 +61,17 @@ public abstract class AbstractComponentConnector extends AbstractConnector
return widget;
}
- /**
- * Returns the shared state object for this connector.
- *
- * If overriding this method to return a more specific type, also
- * {@link #createState()} must be overridden.
- *
- * @return current shared state (not null)
- */
- public ComponentState getState() {
- return state;
- }
-
@Deprecated
public static boolean isRealUpdate(UIDL uidl) {
return !uidl.hasAttribute("cached");
}
@Override
+ public ComponentState getState() {
+ return (ComponentState) super.getState();
+ }
+
+ @Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
super.onStateChanged(stateChangeEvent);
@@ -97,8 +88,9 @@ public abstract class AbstractComponentConnector extends AbstractConnector
* Disabled state may affect (override) tabindex so the order must be
* first setting tabindex, then enabled state.
*/
- if (state instanceof TabIndexState && getWidget() instanceof Focusable) {
- ((Focusable) getWidget()).setTabIndex(((TabIndexState) state)
+ if (getState() instanceof TabIndexState
+ && getWidget() instanceof Focusable) {
+ ((Focusable) getWidget()).setTabIndex(((TabIndexState) getState())
.getTabIndex());
}
@@ -288,17 +280,6 @@ public abstract class AbstractComponentConnector extends AbstractConnector
return getState().isReadOnly();
}
- /**
- * Sets the shared state for the paintable widget.
- *
- * @param new shared state (must be compatible with the return value of
- * {@link #getState()} - {@link ComponentState} if
- * {@link #getState()} is not overridden
- */
- public final void setState(SharedState state) {
- this.state = (ComponentState) state;
- }
-
public LayoutManager getLayoutManager() {
return LayoutManager.get(getConnection());
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractConnector.java
index e205723e64..54812a7a42 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/AbstractConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractConnector.java
@@ -17,6 +17,7 @@ import com.vaadin.terminal.gwt.client.ServerConnector;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VConsole;
import com.vaadin.terminal.gwt.client.communication.ClientRpc;
+import com.vaadin.terminal.gwt.client.communication.SharedState;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent.StateChangeHandler;
@@ -38,6 +39,8 @@ public abstract class AbstractConnector implements ServerConnector,
private Map<String, Collection<ClientRpc>> rpcImplementations;
private final boolean debugLogging = false;
+ private SharedState state;
+
/*
* (non-Javadoc)
*
@@ -187,4 +190,32 @@ public abstract class AbstractConnector implements ServerConnector,
}
}
+
+ /**
+ * Returns the shared state object for this connector.
+ *
+ * Override this method to define the shared state type for your connector.
+ *
+ * @return the current shared state (never null)
+ */
+ public SharedState getState() {
+ if (state == null) {
+ state = createState();
+ }
+
+ return state;
+ }
+
+ /**
+ * Creates a state object with default values for this connector. The
+ * created state object must be compatible with the return type of
+ * {@link #getState()}. The default implementation creates a state object
+ * using GWT.create() using the defined return type of {@link #getState()}.
+ *
+ * @return A new state object
+ */
+ protected SharedState createState() {
+ return ConnectorStateFactory.createState(getClass());
+ }
+
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractMediaState.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractMediaState.java
new file mode 100644
index 0000000000..0ab3851671
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractMediaState.java
@@ -0,0 +1,82 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.terminal.gwt.client.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.vaadin.terminal.gwt.client.ComponentState;
+import com.vaadin.terminal.gwt.client.communication.URLReference;
+
+public class AbstractMediaState extends ComponentState {
+ private boolean showControls;
+
+ private String altText;
+
+ private boolean htmlContentAllowed;
+
+ private boolean autoplay;
+
+ private boolean muted;
+
+ private List<URLReference> sources = new ArrayList<URLReference>();
+ private List<String> sourceTypes = new ArrayList<String>();
+
+ public boolean isShowControls() {
+ return showControls;
+ }
+
+ public void setShowControls(boolean showControls) {
+ this.showControls = showControls;
+ }
+
+ public String getAltText() {
+ return altText;
+ }
+
+ public void setAltText(String altText) {
+ this.altText = altText;
+ }
+
+ public boolean isHtmlContentAllowed() {
+ return htmlContentAllowed;
+ }
+
+ public void setHtmlContentAllowed(boolean htmlContentAllowed) {
+ this.htmlContentAllowed = htmlContentAllowed;
+ }
+
+ public boolean isAutoplay() {
+ return autoplay;
+ }
+
+ public void setAutoplay(boolean autoplay) {
+ this.autoplay = autoplay;
+ }
+
+ public boolean isMuted() {
+ return muted;
+ }
+
+ public void setMuted(boolean muted) {
+ this.muted = muted;
+ }
+
+ public List<URLReference> getSources() {
+ return sources;
+ }
+
+ public void setSources(List<URLReference> sources) {
+ this.sources = sources;
+ }
+
+ public List<String> getSourceTypes() {
+ return sourceTypes;
+ }
+
+ public void setSourceTypes(List<String> sourceTypes) {
+ this.sourceTypes = sourceTypes;
+ }
+
+}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/ConnectorClassBasedFactory.java b/src/com/vaadin/terminal/gwt/client/ui/ConnectorClassBasedFactory.java
new file mode 100644
index 0000000000..051ebdc6df
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/client/ui/ConnectorClassBasedFactory.java
@@ -0,0 +1,40 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.terminal.gwt.client.ui;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.vaadin.terminal.gwt.client.Connector;
+
+public abstract class ConnectorClassBasedFactory<T> {
+ public interface Creator<T> {
+ public T create();
+ }
+
+ private Map<Class<? extends Connector>, Creator<? extends T>> creators = new HashMap<Class<? extends Connector>, Creator<? extends T>>();
+
+ protected void addCreator(Class<? extends Connector> cls,
+ Creator<? extends T> creator) {
+ creators.put(cls, creator);
+ }
+
+ /**
+ * Creates a widget using GWT.create for the given connector, based on its
+ * {@link AbstractComponentConnector#getWidget()} return type.
+ *
+ * @param connector
+ * @return
+ */
+ public T create(Class<? extends Connector> connector) {
+ Creator<? extends T> foo = creators.get(connector);
+ if (foo == null) {
+ throw new RuntimeException(getClass().getName()
+ + " could not find a creator for connector of type "
+ + connector.getName());
+ }
+ return foo.create();
+ }
+
+}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/ConnectorStateFactory.java b/src/com/vaadin/terminal/gwt/client/ui/ConnectorStateFactory.java
new file mode 100644
index 0000000000..86e651a0a5
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/client/ui/ConnectorStateFactory.java
@@ -0,0 +1,31 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.terminal.gwt.client.ui;
+
+import com.google.gwt.core.client.GWT;
+import com.vaadin.terminal.gwt.client.Connector;
+import com.vaadin.terminal.gwt.client.communication.SharedState;
+
+public abstract class ConnectorStateFactory extends
+ ConnectorClassBasedFactory<SharedState> {
+ private static ConnectorStateFactory impl = null;
+
+ /**
+ * Creates a SharedState using GWT.create for the given connector, based on
+ * its {@link AbstractComponentConnector#getSharedState ()} return type.
+ *
+ * @param connector
+ * @return
+ */
+ public static SharedState createState(Class<? extends Connector> connector) {
+ return getImpl().create(connector);
+ }
+
+ private static ConnectorStateFactory getImpl() {
+ if (impl == null) {
+ impl = GWT.create(ConnectorStateFactory.class);
+ }
+ return impl;
+ }
+}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/ConnectorWidgetFactory.java b/src/com/vaadin/terminal/gwt/client/ui/ConnectorWidgetFactory.java
new file mode 100644
index 0000000000..063d9f03a1
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/client/ui/ConnectorWidgetFactory.java
@@ -0,0 +1,42 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.terminal.gwt.client.ui;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.terminal.gwt.client.ui.textfield.TextFieldConnector;
+import com.vaadin.terminal.gwt.client.ui.textfield.VTextField;
+
+public abstract class ConnectorWidgetFactory extends
+ ConnectorClassBasedFactory<Widget> {
+ private static ConnectorWidgetFactory impl = null;
+
+ // TODO Move to generator
+ {
+ addCreator(TextFieldConnector.class, new Creator<Widget>() {
+ public Widget create() {
+ return GWT.create(VTextField.class);
+ }
+ });
+ }
+
+ /**
+ * Creates a widget using GWT.create for the given connector, based on its
+ * {@link AbstractComponentConnector#getWidget()} return type.
+ *
+ * @param connector
+ * @return
+ */
+ public static Widget createWidget(
+ Class<? extends AbstractComponentConnector> connector) {
+ return getImpl().create(connector);
+ }
+
+ private static ConnectorWidgetFactory getImpl() {
+ if (impl == null) {
+ impl = GWT.create(ConnectorWidgetFactory.class);
+ }
+ return impl;
+ }
+}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/MediaBaseConnector.java b/src/com/vaadin/terminal/gwt/client/ui/MediaBaseConnector.java
index 1e067bf6fb..42027f911b 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/MediaBaseConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/MediaBaseConnector.java
@@ -3,24 +3,12 @@
*/
package com.vaadin.terminal.gwt.client.ui;
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.Paintable;
-import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.communication.ClientRpc;
+import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
+import com.vaadin.terminal.gwt.client.communication.URLReference;
-public abstract class MediaBaseConnector extends AbstractComponentConnector
- implements Paintable {
-
- public static final String TAG_SOURCE = "src";
-
- public static final String ATTR_MUTED = "muted";
- public static final String ATTR_CONTROLS = "ctrl";
- public static final String ATTR_AUTOPLAY = "auto";
- public static final String ATTR_RESOURCE = "res";
- public static final String ATTR_RESOURCE_TYPE = "type";
- public static final String ATTR_HTML = "html";
- public static final String ATTR_ALT_TEXT = "alt";
+public abstract class MediaBaseConnector extends AbstractComponentConnector {
/**
* Server to client RPC interface for controlling playback of the media.
@@ -54,40 +42,24 @@ public abstract class MediaBaseConnector extends AbstractComponentConnector
});
}
- public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
- if (!isRealUpdate(uidl)) {
- return;
- }
-
- getWidget().setControls(shouldShowControls(uidl));
- getWidget().setAutoplay(shouldAutoplay(uidl));
- getWidget().setMuted(isMediaMuted(uidl));
-
- // Add all sources
- for (int ix = 0; ix < uidl.getChildCount(); ix++) {
- UIDL child = uidl.getChildUIDL(ix);
- if (TAG_SOURCE.equals(child.getTag())) {
- getWidget()
- .addSource(getSourceUrl(child), getSourceType(child));
- }
- }
- setAltText(uidl);
- }
-
- protected boolean shouldShowControls(UIDL uidl) {
- return uidl.getBooleanAttribute(ATTR_CONTROLS);
- }
-
- private boolean shouldAutoplay(UIDL uidl) {
- return uidl.getBooleanAttribute(ATTR_AUTOPLAY);
- }
-
- private boolean isMediaMuted(UIDL uidl) {
- return uidl.getBooleanAttribute(ATTR_MUTED);
+ @Override
+ public AbstractMediaState getState() {
+ return (AbstractMediaState) super.getState();
}
- private boolean allowHtmlContent(UIDL uidl) {
- return uidl.getBooleanAttribute(ATTR_HTML);
+ @Override
+ public void onStateChanged(StateChangeEvent stateChangeEvent) {
+ super.onStateChanged(stateChangeEvent);
+
+ getWidget().setControls(getState().isShowControls());
+ getWidget().setAutoplay(getState().isAutoplay());
+ getWidget().setMuted(getState().isMuted());
+ for (int i = 0; i < getState().getSources().size(); i++) {
+ URLReference source = getState().getSources().get(i);
+ String sourceType = getState().getSourceTypes().get(i);
+ getWidget().addSource(source.getURL(), sourceType);
+ }
+ setAltText(getState().getAltText());
}
@Override
@@ -95,36 +67,20 @@ public abstract class MediaBaseConnector extends AbstractComponentConnector
return (VMediaBase) super.getWidget();
}
- /**
- * @param uidl
- * @return the URL of a resource to be used as a source for the media
- */
- private String getSourceUrl(UIDL uidl) {
- String url = getConnection().translateVaadinUri(
- uidl.getStringAttribute(MediaBaseConnector.ATTR_RESOURCE));
- if (url == null) {
- return "";
+ private void setAltText(String altText) {
+
+ if (altText == null || "".equals(altText)) {
+ altText = getDefaultAltHtml();
+ } else if (!getState().isHtmlContentAllowed()) {
+ altText = Util.escapeHTML(altText);
}
- return url;
+ getWidget().setAltText(altText);
}
/**
- * @param uidl
- * @return the mime type of the media
+ * @return the default HTML to show users with browsers that do not support
+ * HTML5 media markup.
*/
- private String getSourceType(UIDL uidl) {
- return uidl.getStringAttribute(MediaBaseConnector.ATTR_RESOURCE_TYPE);
- }
-
- private void setAltText(UIDL uidl) {
- String alt = uidl.getStringAttribute(MediaBaseConnector.ATTR_ALT_TEXT);
-
- if (alt == null || "".equals(alt)) {
- alt = getWidget().getDefaultAltHtml();
- } else if (!allowHtmlContent(uidl)) {
- alt = Util.escapeHTML(alt);
- }
- getWidget().setAltText(alt);
- }
+ protected abstract String getDefaultAltHtml();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java
index 94eff44eee..0cccec6481 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java
@@ -4,8 +4,6 @@
package com.vaadin.terminal.gwt.client.ui;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
public class UnknownComponentConnector extends AbstractComponentConnector {
@@ -15,11 +13,6 @@ public class UnknownComponentConnector extends AbstractComponentConnector {
}
@Override
- protected Widget createWidget() {
- return GWT.create(VUnknownComponent.class);
- }
-
- @Override
public VUnknownComponent getWidget() {
return (VUnknownComponent) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VMediaBase.java b/src/com/vaadin/terminal/gwt/client/ui/VMediaBase.java
index 6c5fbc2ef0..40696ccec5 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VMediaBase.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VMediaBase.java
@@ -23,12 +23,6 @@ public abstract class VMediaBase extends Widget {
media = element;
}
- /**
- * @return the default HTML to show users with browsers that do not support
- * HTML5 media markup.
- */
- protected abstract String getDefaultAltHtml();
-
public void play() {
media.play();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutConnector.java
index 80b6254e02..b42c0acea7 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutConnector.java
@@ -6,7 +6,6 @@ package com.vaadin.terminal.gwt.client.ui.absolutelayout;
import java.util.HashMap;
import java.util.Map;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.Element;
@@ -94,11 +93,6 @@ public class AbsoluteLayoutConnector extends
}
@Override
- protected Widget createWidget() {
- return GWT.create(VAbsoluteLayout.class);
- }
-
- @Override
public VAbsoluteLayout getWidget() {
return (VAbsoluteLayout) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/accordion/AccordionConnector.java b/src/com/vaadin/terminal/gwt/client/ui/accordion/AccordionConnector.java
index a03fa37214..f022e97973 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/accordion/AccordionConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/accordion/AccordionConnector.java
@@ -5,8 +5,6 @@ package com.vaadin.terminal.gwt.client.ui.accordion;
import java.util.Iterator;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -59,11 +57,6 @@ public class AccordionConnector extends TabsheetBaseConnector implements
return (VAccordion) super.getWidget();
}
- @Override
- protected Widget createWidget() {
- return GWT.create(VAccordion.class);
- }
-
public void updateCaption(ComponentConnector component) {
/* Accordion does not render its children's captions */
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/audio/AudioConnector.java b/src/com/vaadin/terminal/gwt/client/ui/audio/AudioConnector.java
index d55e66dbd5..1c7feb132a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/audio/AudioConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/audio/AudioConnector.java
@@ -7,9 +7,8 @@ import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.Widget;
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
-import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.MediaBaseConnector;
import com.vaadin.ui.Audio;
@@ -18,15 +17,13 @@ import com.vaadin.ui.Audio;
public class AudioConnector extends MediaBaseConnector {
@Override
- public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
- super.updateFromUIDL(uidl, client);
- if (!isRealUpdate(uidl)) {
- return;
- }
+ public void onStateChanged(StateChangeEvent stateChangeEvent) {
+ super.onStateChanged(stateChangeEvent);
+
Style style = getWidget().getElement().getStyle();
// Make sure that the controls are not clipped if visible.
- if (shouldShowControls(uidl)
+ if (getState().isShowControls()
&& (style.getHeight() == null || "".equals(style.getHeight()))) {
if (BrowserInfo.get().isChrome()) {
style.setHeight(32, Unit.PX);
@@ -41,4 +38,8 @@ public class AudioConnector extends MediaBaseConnector {
return GWT.create(VAudio.class);
}
+ @Override
+ protected String getDefaultAltHtml() {
+ return "Your browser does not support the <code>audio</code> element.";
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/audio/VAudio.java b/src/com/vaadin/terminal/gwt/client/ui/audio/VAudio.java
index 7d5d1fe034..08bc95ba16 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/audio/VAudio.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/audio/VAudio.java
@@ -19,9 +19,4 @@ public class VAudio extends VMediaBase {
setStyleName(CLASSNAME);
}
- @Override
- protected String getDefaultAltHtml() {
- return "Your browser does not support the <code>audio</code> element.";
- }
-
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/button/ButtonConnector.java b/src/com/vaadin/terminal/gwt/client/ui/button/ButtonConnector.java
index a555ecd392..d79aa96ac6 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/button/ButtonConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/button/ButtonConnector.java
@@ -4,7 +4,6 @@
package com.vaadin.terminal.gwt.client.ui.button;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
@@ -13,7 +12,6 @@ import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.EventHelper;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder;
@@ -96,11 +94,6 @@ public class ButtonConnector extends AbstractComponentConnector implements
}
@Override
- protected Widget createWidget() {
- return GWT.create(VButton.class);
- }
-
- @Override
public VButton getWidget() {
return (VButton) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxConnector.java b/src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxConnector.java
index 731838371f..bc405b793b 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxConnector.java
@@ -3,7 +3,6 @@
*/
package com.vaadin.terminal.gwt.client.ui.checkbox;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
@@ -13,7 +12,6 @@ import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.EventHelper;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder;
@@ -116,11 +114,6 @@ public class CheckBoxConnector extends AbstractFieldConnector implements
return (VCheckBox) super.getWidget();
}
- @Override
- protected Widget createWidget() {
- return GWT.create(VCheckBox.class);
- }
-
public void onFocus(FocusEvent event) {
// EventHelper.updateFocusHandler ensures that this is called only when
// there is a listener on server side
diff --git a/src/com/vaadin/terminal/gwt/client/ui/combobox/ComboBoxConnector.java b/src/com/vaadin/terminal/gwt/client/ui/combobox/ComboBoxConnector.java
index ee16d90b12..ff153d30c9 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/combobox/ComboBoxConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/combobox/ComboBoxConnector.java
@@ -5,8 +5,6 @@ package com.vaadin.terminal.gwt.client.ui.combobox;
import java.util.Iterator;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -228,11 +226,6 @@ public class ComboBoxConnector extends AbstractFieldConnector implements
}
@Override
- protected Widget createWidget() {
- return GWT.create(VFilterSelect.class);
- }
-
- @Override
public VFilterSelect getWidget() {
return (VFilterSelect) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutConnector.java
index 7df31a8593..71d670fe9d 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutConnector.java
@@ -6,7 +6,6 @@ package com.vaadin.terminal.gwt.client.ui.csslayout;
import java.util.HashMap;
import java.util.Map;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Widget;
@@ -138,11 +137,6 @@ public class CssLayoutConnector extends AbstractLayoutConnector {
return (VCssLayout) super.getWidget();
}
- @Override
- protected Widget createWidget() {
- return GWT.create(VCssLayout.class);
- }
-
public void updateCaption(ComponentConnector child) {
Widget childWidget = child.getWidget();
FlowPane cssLayoutWidgetContainer = getWidget().panel;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/customcomponent/CustomComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ui/customcomponent/CustomComponentConnector.java
index a65187a461..981818fc69 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/customcomponent/CustomComponentConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/customcomponent/CustomComponentConnector.java
@@ -3,8 +3,6 @@
*/
package com.vaadin.terminal.gwt.client.ui.customcomponent;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentContainerConnector;
@@ -17,11 +15,6 @@ public class CustomComponentConnector extends
AbstractComponentContainerConnector {
@Override
- protected Widget createWidget() {
- return GWT.create(VCustomComponent.class);
- }
-
- @Override
public VCustomComponent getWidget() {
return (VCustomComponent) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/customfield/CustomFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/customfield/CustomFieldConnector.java
index a2ba09da43..09045df6eb 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/customfield/CustomFieldConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/customfield/CustomFieldConnector.java
@@ -4,22 +4,19 @@
package com.vaadin.terminal.gwt.client.ui.customfield;
import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.terminal.gwt.client.AbstractFieldState;
+import com.vaadin.terminal.gwt.client.communication.SharedState;
import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.customcomponent.CustomComponentConnector;
-import com.vaadin.terminal.gwt.client.ui.customcomponent.VCustomComponent;
import com.vaadin.ui.CustomField;
@Connect(value = CustomField.class)
public class CustomFieldConnector extends CustomComponentConnector {
-
@Override
- protected Widget createWidget() {
- return GWT.create(VCustomComponent.class);
+ protected SharedState createState() {
+ // Workaround as CustomFieldConnector does not extend
+ // AbstractFieldConnector.
+ return GWT.create(AbstractFieldState.class);
}
- @Override
- public VCustomComponent getWidget() {
- return super.getWidget();
- }
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/customlayout/CustomLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/customlayout/CustomLayoutConnector.java
index 5e8f01258f..ca24cfc91a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/customlayout/CustomLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/customlayout/CustomLayoutConnector.java
@@ -3,7 +3,6 @@
*/
package com.vaadin.terminal.gwt.client.ui.customlayout;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ComponentConnector;
@@ -103,11 +102,6 @@ public class CustomLayoutConnector extends AbstractLayoutConnector implements
return (VCustomLayout) super.getWidget();
}
- @Override
- protected Widget createWidget() {
- return GWT.create(VCustomLayout.class);
- }
-
public void updateCaption(ComponentConnector paintable) {
getWidget().updateCaption(paintable);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/datefield/AbstractDateFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/datefield/AbstractDateFieldConnector.java
index e19d9b996f..b55f480bac 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/datefield/AbstractDateFieldConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/datefield/AbstractDateFieldConnector.java
@@ -5,8 +5,6 @@ package com.vaadin.terminal.gwt.client.ui.datefield;
import java.util.Date;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.LocaleNotLoadedException;
import com.vaadin.terminal.gwt.client.Paintable;
@@ -98,11 +96,6 @@ public class AbstractDateFieldConnector extends AbstractFieldConnector
}
@Override
- protected Widget createWidget() {
- return GWT.create(VDateField.class);
- }
-
- @Override
public VDateField getWidget() {
return (VDateField) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/datefield/InlineDateFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/datefield/InlineDateFieldConnector.java
index 8a4840a088..7cd9c110ba 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/datefield/InlineDateFieldConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/datefield/InlineDateFieldConnector.java
@@ -5,8 +5,6 @@ package com.vaadin.terminal.gwt.client.ui.datefield;
import java.util.Date;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.DateTimeService;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -93,11 +91,6 @@ public class InlineDateFieldConnector extends AbstractDateFieldConnector {
}
@Override
- protected Widget createWidget() {
- return GWT.create(VDateFieldCalendar.class);
- }
-
- @Override
public VDateFieldCalendar getWidget() {
return (VDateFieldCalendar) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/datefield/PopupDateFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/datefield/PopupDateFieldConnector.java
index 1bcb40d549..e169d83b48 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/datefield/PopupDateFieldConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/datefield/PopupDateFieldConnector.java
@@ -6,8 +6,6 @@ package com.vaadin.terminal.gwt.client.ui.datefield;
import java.util.Date;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.DateTimeService;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -113,11 +111,6 @@ public class PopupDateFieldConnector extends TextualDateConnector {
}
@Override
- protected Widget createWidget() {
- return GWT.create(VPopupCalendar.class);
- }
-
- @Override
public VPopupCalendar getWidget() {
return (VPopupCalendar) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/datefield/TextualDateConnector.java b/src/com/vaadin/terminal/gwt/client/ui/datefield/TextualDateConnector.java
index 90679f5705..32af4024cb 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/datefield/TextualDateConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/datefield/TextualDateConnector.java
@@ -4,8 +4,6 @@
package com.vaadin.terminal.gwt.client.ui.datefield;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -45,11 +43,6 @@ public class TextualDateConnector extends AbstractDateFieldConnector {
}
@Override
- protected Widget createWidget() {
- return GWT.create(VTextualDate.class);
- }
-
- @Override
public VTextualDate getWidget() {
return (VTextualDate) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/DragAndDropWrapperConnector.java b/src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/DragAndDropWrapperConnector.java
index db531ac70f..57f6835bcc 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/DragAndDropWrapperConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/DragAndDropWrapperConnector.java
@@ -6,8 +6,6 @@ package com.vaadin.terminal.gwt.client.ui.draganddropwrapper;
import java.util.HashMap;
import java.util.Set;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -63,11 +61,6 @@ public class DragAndDropWrapperConnector extends CustomComponentConnector
}
@Override
- protected Widget createWidget() {
- return GWT.create(VDragAndDropWrapper.class);
- }
-
- @Override
public VDragAndDropWrapper getWidget() {
return (VDragAndDropWrapper) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedConnector.java b/src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedConnector.java
index 81ac195c8e..af3ad67db4 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedConnector.java
@@ -6,7 +6,6 @@ package com.vaadin.terminal.gwt.client.ui.embedded;
import java.util.Map;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.Node;
@@ -16,7 +15,6 @@ import com.google.gwt.dom.client.Style;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.Paintable;
@@ -182,11 +180,6 @@ public class EmbeddedConnector extends AbstractComponentConnector implements
}
@Override
- protected Widget createWidget() {
- return GWT.create(VEmbedded.class);
- }
-
- @Override
public VEmbedded getWidget() {
return (VEmbedded) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/form/FormConnector.java b/src/com/vaadin/terminal/gwt/client/ui/form/FormConnector.java
index 82cbc95b2d..981c753dd1 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/form/FormConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/form/FormConnector.java
@@ -3,7 +3,6 @@
*/
package com.vaadin.terminal.gwt.client.ui.form;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.user.client.ui.Widget;
@@ -192,11 +191,6 @@ public class FormConnector extends AbstractComponentContainerConnector
}
@Override
- protected Widget createWidget() {
- return GWT.create(VForm.class);
- }
-
- @Override
public boolean isReadOnly() {
return super.isReadOnly() || getState().isPropertyReadOnly();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/formlayout/FormLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/formlayout/FormLayoutConnector.java
index d7774b66ef..cdac73a771 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/formlayout/FormLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/formlayout/FormLayoutConnector.java
@@ -3,7 +3,6 @@
*/
package com.vaadin.terminal.gwt.client.ui.formlayout;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
@@ -97,9 +96,4 @@ public class FormLayoutConnector extends AbstractLayoutConnector {
return (VFormLayout) super.getWidget();
}
- @Override
- protected Widget createWidget() {
- return GWT.create(VFormLayout.class);
- }
-
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutConnector.java
index e4a31b96ef..50afbc5913 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutConnector.java
@@ -5,7 +5,6 @@ package com.vaadin.terminal.gwt.client.ui.gridlayout;
import java.util.Iterator;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
@@ -224,11 +223,6 @@ public class GridLayoutConnector extends AbstractComponentContainerConnector
return (VGridLayout) super.getWidget();
}
- @Override
- protected Widget createWidget() {
- return GWT.create(VGridLayout.class);
- }
-
public void layoutVertically() {
getWidget().updateHeight();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/label/ContentMode.java b/src/com/vaadin/terminal/gwt/client/ui/label/ContentMode.java
new file mode 100644
index 0000000000..2c232c9c38
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/client/ui/label/ContentMode.java
@@ -0,0 +1,48 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.terminal.gwt.client.ui.label;
+
+/**
+ * Content modes defining how the client should interpret a Label's value.
+ *
+ * @sine 7.0
+ */
+public enum ContentMode {
+ /**
+ * Content mode, where the label contains only plain text. The getValue()
+ * result is coded to XML when painting.
+ */
+ TEXT,
+
+ /**
+ * Content mode, where the label contains preformatted text.
+ */
+ PREFORMATTED,
+
+ /**
+ * Content mode, where the label contains XHTML.
+ */
+ XHTML,
+
+ /**
+ * Content mode, where the label contains well-formed or well-balanced XML.
+ * Each of the root elements must have their default namespace specified.
+ *
+ * @deprecated Use {@link #XHTML}
+ */
+ @Deprecated
+ XML,
+
+ /**
+ * Content mode, where the label contains RAW output. Output is not required
+ * to comply to with XML. In Web Adapter output is inserted inside the
+ * resulting HTML document as-is. This is useful for some specific purposes
+ * where possibly broken HTML content needs to be shown, but in most cases
+ * XHTML mode should be preferred.
+ *
+ * @deprecated Use {@link #XHTML}, {@link #TEXT} or {@link #PREFORMATTED}.
+ */
+ @Deprecated
+ RAW;
+}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java
index 308a4860b5..e64f9fffea 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java
@@ -3,58 +3,57 @@
*/
package com.vaadin.terminal.gwt.client.ui.label;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.PreElement;
-import com.google.gwt.user.client.ui.Widget;
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.Paintable;
-import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
+import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
import com.vaadin.ui.Label;
@Connect(value = Label.class, loadStyle = LoadStyle.EAGER)
-public class LabelConnector extends AbstractComponentConnector implements
- Paintable {
+public class LabelConnector extends AbstractComponentConnector {
- public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
- getWidget().setConnection(client);
- if (!isRealUpdate(uidl)) {
- return;
- }
+ @Override
+ public LabelState getState() {
+ return (LabelState) super.getState();
+ }
- boolean sinkOnloads = false;
+ @Override
+ protected void init() {
+ super.init();
+ getWidget().setConnection(getConnection());
+ }
- final String mode = uidl.getStringAttribute("mode");
- if (mode == null || "text".equals(mode)) {
- getWidget().setText(uidl.getChildString(0));
- } else if ("pre".equals(mode)) {
+ @Override
+ public void onStateChanged(StateChangeEvent stateChangeEvent) {
+ super.onStateChanged(stateChangeEvent);
+ boolean sinkOnloads = false;
+ switch (getState().getContentMode()) {
+ case PREFORMATTED:
PreElement preElement = Document.get().createPreElement();
- preElement.setInnerText(uidl.getChildUIDL(0).getChildString(0));
+ preElement.setInnerText(getState().getText());
// clear existing content
getWidget().setHTML("");
// add preformatted text to dom
getWidget().getElement().appendChild(preElement);
- } else if ("uidl".equals(mode)) {
- getWidget().setHTML(uidl.getChildrenAsXML());
- } else if ("xhtml".equals(mode)) {
- UIDL content = uidl.getChildUIDL(0).getChildUIDL(0);
- if (content.getChildCount() > 0) {
- getWidget().setHTML(content.getChildString(0));
- } else {
- getWidget().setHTML("");
- }
- sinkOnloads = true;
- } else if ("xml".equals(mode)) {
- getWidget().setHTML(uidl.getChildUIDL(0).getChildString(0));
- } else if ("raw".equals(mode)) {
- getWidget().setHTML(uidl.getChildUIDL(0).getChildString(0));
+ break;
+
+ case TEXT:
+ getWidget().setText(getState().getText());
+ break;
+
+ case XHTML:
+ case RAW:
sinkOnloads = true;
- } else {
+ case XML:
+ getWidget().setHTML(getState().getText());
+ break;
+ default:
getWidget().setText("");
+ break;
+
}
if (sinkOnloads) {
Util.sinkOnloadForImages(getWidget().getElement());
@@ -62,11 +61,6 @@ public class LabelConnector extends AbstractComponentConnector implements
}
@Override
- protected Widget createWidget() {
- return GWT.create(VLabel.class);
- }
-
- @Override
public VLabel getWidget() {
return (VLabel) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/label/LabelState.java b/src/com/vaadin/terminal/gwt/client/ui/label/LabelState.java
new file mode 100644
index 0000000000..25bbca3c3d
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/client/ui/label/LabelState.java
@@ -0,0 +1,28 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.terminal.gwt.client.ui.label;
+
+import com.vaadin.terminal.gwt.client.ComponentState;
+
+public class LabelState extends ComponentState {
+ private ContentMode contentMode = ContentMode.TEXT;
+ private String text = "";
+
+ public ContentMode getContentMode() {
+ return contentMode;
+ }
+
+ public void setContentMode(ContentMode contentMode) {
+ this.contentMode = contentMode;
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ public void setText(String text) {
+ this.text = text;
+ }
+
+}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/link/LinkConnector.java b/src/com/vaadin/terminal/gwt/client/ui/link/LinkConnector.java
index f74a851d03..c002d2dd50 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/link/LinkConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/link/LinkConnector.java
@@ -4,9 +4,7 @@
package com.vaadin.terminal.gwt.client.ui.link;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -88,11 +86,6 @@ public class LinkConnector extends AbstractComponentConnector implements
}
@Override
- protected Widget createWidget() {
- return GWT.create(VLink.class);
- }
-
- @Override
public VLink getWidget() {
return (VLink) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/listselect/ListSelectConnector.java b/src/com/vaadin/terminal/gwt/client/ui/listselect/ListSelectConnector.java
index ddaa959560..8a4553d983 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/listselect/ListSelectConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/listselect/ListSelectConnector.java
@@ -4,8 +4,6 @@
package com.vaadin.terminal.gwt.client.ui.listselect;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.optiongroup.OptionGroupBaseConnector;
import com.vaadin.ui.ListSelect;
@@ -14,11 +12,6 @@ import com.vaadin.ui.ListSelect;
public class ListSelectConnector extends OptionGroupBaseConnector {
@Override
- protected Widget createWidget() {
- return GWT.create(VListSelect.class);
- }
-
- @Override
public VListSelect getWidget() {
return (VListSelect) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBarConnector.java b/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBarConnector.java
index d063c89ca9..d1f77aa0ff 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBarConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBarConnector.java
@@ -8,7 +8,6 @@ import java.util.Stack;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -154,11 +153,6 @@ public class MenuBarConnector extends AbstractComponentConnector implements
}// updateFromUIDL
@Override
- protected Widget createWidget() {
- return GWT.create(VMenuBar.class);
- }
-
- @Override
public VMenuBar getWidget() {
return (VMenuBar) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/nativebutton/NativeButtonConnector.java b/src/com/vaadin/terminal/gwt/client/ui/nativebutton/NativeButtonConnector.java
index 84d3b73285..c010fba711 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/nativebutton/NativeButtonConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/nativebutton/NativeButtonConnector.java
@@ -3,14 +3,12 @@
*/
package com.vaadin.terminal.gwt.client.ui.nativebutton;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.EventHelper;
import com.vaadin.terminal.gwt.client.communication.FieldRpc.FocusAndBlurServerRpc;
import com.vaadin.terminal.gwt.client.communication.RpcProxy;
@@ -100,11 +98,6 @@ public class NativeButtonConnector extends AbstractComponentConnector implements
}
@Override
- protected Widget createWidget() {
- return GWT.create(VNativeButton.class);
- }
-
- @Override
public VNativeButton getWidget() {
return (VNativeButton) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/nativeselect/NativeSelectConnector.java b/src/com/vaadin/terminal/gwt/client/ui/nativeselect/NativeSelectConnector.java
index e6264e492f..8f57e0c37f 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/nativeselect/NativeSelectConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/nativeselect/NativeSelectConnector.java
@@ -4,8 +4,6 @@
package com.vaadin.terminal.gwt.client.ui.nativeselect;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.optiongroup.OptionGroupBaseConnector;
import com.vaadin.ui.NativeSelect;
@@ -14,11 +12,6 @@ import com.vaadin.ui.NativeSelect;
public class NativeSelectConnector extends OptionGroupBaseConnector {
@Override
- protected Widget createWidget() {
- return GWT.create(VNativeSelect.class);
- }
-
- @Override
public VNativeSelect getWidget() {
return (VNativeSelect) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupConnector.java b/src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupConnector.java
index 06552a2812..e6064bd03f 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupConnector.java
@@ -6,7 +6,6 @@ package com.vaadin.terminal.gwt.client.ui.optiongroup;
import java.util.ArrayList;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Widget;
@@ -62,11 +61,6 @@ public class OptionGroupConnector extends OptionGroupBaseConnector {
}
@Override
- protected Widget createWidget() {
- return GWT.create(VOptionGroup.class);
- }
-
- @Override
public VOptionGroup getWidget() {
return (VOptionGroup) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
index 174da61bd3..d15766db21 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
@@ -9,17 +9,14 @@ import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Widget;
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
import com.vaadin.terminal.gwt.client.DirectionalManagedLayout;
import com.vaadin.terminal.gwt.client.LayoutManager;
-import com.vaadin.terminal.gwt.client.Paintable;
-import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VCaption;
-import com.vaadin.terminal.gwt.client.ValueMap;
import com.vaadin.terminal.gwt.client.communication.RpcProxy;
+import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractLayoutConnector;
import com.vaadin.terminal.gwt.client.ui.AlignmentInfo;
import com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler;
@@ -29,7 +26,7 @@ import com.vaadin.terminal.gwt.client.ui.layout.ComponentConnectorLayoutSlot;
import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot;
public abstract class AbstractOrderedLayoutConnector extends
- AbstractLayoutConnector implements Paintable, DirectionalManagedLayout {
+ AbstractLayoutConnector implements DirectionalManagedLayout {
AbstractOrderedLayoutServerRpc rpc;
@@ -100,35 +97,23 @@ public abstract class AbstractOrderedLayoutConnector extends
return (VMeasuringOrderedLayout) super.getWidget();
}
- public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
- if (!isRealUpdate(uidl)) {
- return;
- }
+ @Override
+ public void onStateChanged(StateChangeEvent stateChangeEvent) {
+ super.onStateChanged(stateChangeEvent);
+
clickEventHandler.handleEventHandlerRegistration();
VMeasuringOrderedLayout layout = getWidget();
- ValueMap expandRatios = uidl.getMapAttribute("expandRatios");
- ValueMap alignments = uidl.getMapAttribute("alignments");
-
for (ComponentConnector child : getChildren()) {
VLayoutSlot slot = layout.getSlotForChild(child.getWidget());
- String pid = child.getConnectorId();
- AlignmentInfo alignment;
- if (alignments.containsKey(pid)) {
- alignment = new AlignmentInfo(alignments.getInt(pid));
- } else {
- alignment = AlignmentInfo.TOP_LEFT;
- }
+ AlignmentInfo alignment = new AlignmentInfo(getState()
+ .getChildData().get(child).getAlignmentBitmask());
slot.setAlignment(alignment);
- double expandRatio;
- if (expandRatios.containsKey(pid)) {
- expandRatio = expandRatios.getRawNumber(pid);
- } else {
- expandRatio = 0;
- }
+ double expandRatio = getState().getChildData().get(child)
+ .getExpandRatio();
slot.setExpandRatio(expandRatio);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutState.java b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutState.java
index bf542d3951..1d57358490 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutState.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutState.java
@@ -3,11 +3,48 @@
*/
package com.vaadin.terminal.gwt.client.ui.orderedlayout;
+import java.io.Serializable;
+import java.util.HashMap;
+
+import com.vaadin.terminal.gwt.client.Connector;
import com.vaadin.terminal.gwt.client.ui.AbstractLayoutState;
+import com.vaadin.terminal.gwt.client.ui.AlignmentInfo;
public class AbstractOrderedLayoutState extends AbstractLayoutState {
private boolean spacing = false;
+ public HashMap<Connector, ChildComponentData> childData = new HashMap<Connector, ChildComponentData>();
+
+ public static class ChildComponentData implements Serializable {
+ private int alignmentBitmask = AlignmentInfo.TOP_LEFT.getBitMask();
+ private float expandRatio = 0.0f;
+
+ public int getAlignmentBitmask() {
+ return alignmentBitmask;
+ }
+
+ public void setAlignmentBitmask(int alignmentBitmask) {
+ this.alignmentBitmask = alignmentBitmask;
+ }
+
+ public float getExpandRatio() {
+ return expandRatio;
+ }
+
+ public void setExpandRatio(float expandRatio) {
+ this.expandRatio = expandRatio;
+ }
+
+ }
+
+ public HashMap<Connector, ChildComponentData> getChildData() {
+ return childData;
+ }
+
+ public void setChildData(HashMap<Connector, ChildComponentData> childData) {
+ this.childData = childData;
+ }
+
public boolean isSpacing() {
return spacing;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/HorizontalLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/HorizontalLayoutConnector.java
index a12b41ade7..3b0014c0f0 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/HorizontalLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/HorizontalLayoutConnector.java
@@ -3,7 +3,6 @@
*/
package com.vaadin.terminal.gwt.client.ui.orderedlayout;
-import com.google.gwt.core.client.GWT;
import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
import com.vaadin.ui.HorizontalLayout;
@@ -16,9 +15,4 @@ public class HorizontalLayoutConnector extends AbstractOrderedLayoutConnector {
return (VHorizontalLayout) super.getWidget();
}
- @Override
- protected VHorizontalLayout createWidget() {
- return GWT.create(VHorizontalLayout.class);
- }
-
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VerticalLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VerticalLayoutConnector.java
index 1e5651ce38..42a762864e 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VerticalLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VerticalLayoutConnector.java
@@ -3,7 +3,6 @@
*/
package com.vaadin.terminal.gwt.client.ui.orderedlayout;
-import com.google.gwt.core.client.GWT;
import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
import com.vaadin.ui.VerticalLayout;
@@ -16,9 +15,4 @@ public class VerticalLayoutConnector extends AbstractOrderedLayoutConnector {
return (VVerticalLayout) super.getWidget();
}
- @Override
- protected VVerticalLayout createWidget() {
- return GWT.create(VVerticalLayout.class);
- }
-
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/panel/PanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/panel/PanelConnector.java
index 9555c38a36..35a0ede390 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/panel/PanelConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/panel/PanelConnector.java
@@ -3,7 +3,6 @@
*/
package com.vaadin.terminal.gwt.client.ui.panel;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Unit;
@@ -172,11 +171,6 @@ public class PanelConnector extends AbstractComponentContainerConnector
return (VPanel) super.getWidget();
}
- @Override
- protected Widget createWidget() {
- return GWT.create(VPanel.class);
- }
-
public void layout() {
updateSizes();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/passwordfield/PasswordFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/passwordfield/PasswordFieldConnector.java
index 1d1ec58fbb..c4c5954c33 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/passwordfield/PasswordFieldConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/passwordfield/PasswordFieldConnector.java
@@ -4,10 +4,6 @@
package com.vaadin.terminal.gwt.client.ui.passwordfield;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.textfield.TextFieldConnector;
import com.vaadin.ui.PasswordField;
@@ -16,16 +12,6 @@ import com.vaadin.ui.PasswordField;
public class PasswordFieldConnector extends TextFieldConnector {
@Override
- public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
- super.updateFromUIDL(uidl, client);
- }
-
- @Override
- protected Widget createWidget() {
- return GWT.create(VPasswordField.class);
- }
-
- @Override
public VPasswordField getWidget() {
return (VPasswordField) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/popupview/PopupViewConnector.java b/src/com/vaadin/terminal/gwt/client/ui/popupview/PopupViewConnector.java
index 4faa6cec86..c5117fdddb 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/popupview/PopupViewConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/popupview/PopupViewConnector.java
@@ -3,8 +3,6 @@
*/
package com.vaadin.terminal.gwt.client.ui.popupview;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.Paintable;
@@ -106,11 +104,6 @@ public class PopupViewConnector extends AbstractComponentContainerConnector
return (VPopupView) super.getWidget();
}
- @Override
- protected Widget createWidget() {
- return GWT.create(VPopupView.class);
- }
-
public void postLayout() {
if (centerAfterLayout) {
centerAfterLayout = false;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/progressindicator/ProgressIndicatorConnector.java b/src/com/vaadin/terminal/gwt/client/ui/progressindicator/ProgressIndicatorConnector.java
index 09fa5fb44e..9d0532fae3 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/progressindicator/ProgressIndicatorConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/progressindicator/ProgressIndicatorConnector.java
@@ -4,9 +4,7 @@
package com.vaadin.terminal.gwt.client.ui.progressindicator;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -55,11 +53,6 @@ public class ProgressIndicatorConnector extends AbstractFieldConnector
}
@Override
- protected Widget createWidget() {
- return GWT.create(VProgressIndicator.class);
- }
-
- @Override
public VProgressIndicator getWidget() {
return (VProgressIndicator) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java b/src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java
index 01e79bc1c3..db52640088 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java
@@ -3,9 +3,7 @@
*/
package com.vaadin.terminal.gwt.client.ui.richtextarea;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -70,9 +68,4 @@ public class RichTextAreaConnector extends AbstractFieldConnector implements
return (VRichTextArea) super.getWidget();
};
- @Override
- protected Widget createWidget() {
- return GWT.create(VRichTextArea.class);
- }
-
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/root/RootConnector.java b/src/com/vaadin/terminal/gwt/client/ui/root/RootConnector.java
index 46f82d60b7..e02bcc9330 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/root/RootConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/root/RootConnector.java
@@ -7,7 +7,6 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.Style;
@@ -299,11 +298,6 @@ public class RootConnector extends AbstractComponentContainerConnector
return (VRoot) super.getWidget();
}
- @Override
- protected Widget createWidget() {
- return GWT.create(VRoot.class);
- }
-
protected ComponentConnector getContent() {
return (ComponentConnector) getState().getContent();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/slider/SliderConnector.java b/src/com/vaadin/terminal/gwt/client/ui/slider/SliderConnector.java
index 9cd3c35fee..6fd7f8b6aa 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/slider/SliderConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/slider/SliderConnector.java
@@ -3,10 +3,8 @@
*/
package com.vaadin.terminal.gwt.client.ui.slider;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -69,9 +67,4 @@ public class SliderConnector extends AbstractFieldConnector implements
return (VSlider) super.getWidget();
}
- @Override
- protected Widget createWidget() {
- return GWT.create(VSlider.class);
- }
-
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelConnector.java
index b3921204dc..a2f1f26c15 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelConnector.java
@@ -172,9 +172,6 @@ public abstract class AbstractSplitPanelConnector extends
}
@Override
- protected abstract VAbstractSplitPanel createWidget();
-
- @Override
public AbstractSplitPanelState getState() {
return (AbstractSplitPanelState) super.getState();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/HorizontalSplitPanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/HorizontalSplitPanelConnector.java
index 7814ab8e13..92c942e04b 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/HorizontalSplitPanelConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/HorizontalSplitPanelConnector.java
@@ -3,7 +3,6 @@
*/
package com.vaadin.terminal.gwt.client.ui.splitpanel;
-import com.google.gwt.core.client.GWT;
import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
import com.vaadin.ui.HorizontalSplitPanel;
@@ -12,8 +11,8 @@ import com.vaadin.ui.HorizontalSplitPanel;
public class HorizontalSplitPanelConnector extends AbstractSplitPanelConnector {
@Override
- protected VAbstractSplitPanel createWidget() {
- return GWT.create(VSplitPanelHorizontal.class);
+ public VSplitPanelHorizontal getWidget() {
+ return (VSplitPanelHorizontal) super.getWidget();
}
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/VerticalSplitPanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/VerticalSplitPanelConnector.java
index 83404177c0..5015fcc60c 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/VerticalSplitPanelConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/VerticalSplitPanelConnector.java
@@ -12,8 +12,8 @@ import com.vaadin.ui.VerticalSplitPanel;
public class VerticalSplitPanelConnector extends AbstractSplitPanelConnector {
@Override
- protected VAbstractSplitPanel createWidget() {
- return GWT.create(VSplitPanelVertical.class);
+ public VSplitPanelVertical getWidget() {
+ return (VSplitPanelVertical) super.getWidget();
}
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/table/TableConnector.java b/src/com/vaadin/terminal/gwt/client/ui/table/TableConnector.java
index f16ee3463f..73bc5da83f 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/table/TableConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/table/TableConnector.java
@@ -5,7 +5,6 @@ package com.vaadin.terminal.gwt.client.ui.table;
import java.util.Iterator;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Style.Position;
@@ -261,11 +260,6 @@ public class TableConnector extends AbstractComponentContainerConnector
}
@Override
- protected Widget createWidget() {
- return GWT.create(VScrollTable.class);
- }
-
- @Override
public VScrollTable getWidget() {
return (VScrollTable) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetConnector.java b/src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetConnector.java
index 7829934f70..08d4679dc5 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetConnector.java
@@ -63,11 +63,6 @@ public class TabsheetConnector extends TabsheetBaseConnector implements
}
@Override
- protected Widget createWidget() {
- return GWT.create(VTabsheet.class);
- }
-
- @Override
public VTabsheet getWidget() {
return (VTabsheet) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaConnector.java b/src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaConnector.java
index 0f3ae0ad4f..a235ca5389 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaConnector.java
@@ -4,11 +4,7 @@
package com.vaadin.terminal.gwt.client.ui.textarea;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.ui.Widget;
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.textfield.TextFieldConnector;
import com.vaadin.ui.TextArea;
@@ -17,22 +13,16 @@ import com.vaadin.ui.TextArea;
public class TextAreaConnector extends TextFieldConnector {
@Override
- public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
- // Call parent renderer explicitly
- super.updateFromUIDL(uidl, client);
-
- if (uidl.hasAttribute("rows")) {
- getWidget().setRows(uidl.getIntAttribute("rows"));
- }
-
- if (getWidget().getMaxLength() >= 0) {
- getWidget().sinkEvents(Event.ONKEYUP);
- }
+ public TextAreaState getState() {
+ return (TextAreaState) super.getState();
}
@Override
- protected Widget createWidget() {
- return GWT.create(VTextArea.class);
+ public void onStateChanged(StateChangeEvent stateChangeEvent) {
+ super.onStateChanged(stateChangeEvent);
+
+ getWidget().setRows(getState().getRows());
+ getWidget().setWordwrap(getState().isWordwrap());
}
@Override
diff --git a/src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaState.java b/src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaState.java
new file mode 100644
index 0000000000..71bdd230b7
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaState.java
@@ -0,0 +1,36 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.terminal.gwt.client.ui.textarea;
+
+import com.vaadin.terminal.gwt.client.ui.textfield.AbstractTextFieldState;
+
+public class TextAreaState extends AbstractTextFieldState {
+
+ /**
+ * Number of visible rows in the text area. The default is 5.
+ */
+ private int rows = 5;
+
+ /**
+ * Tells if word-wrapping should be used in the text area.
+ */
+ private boolean wordwrap = true;
+
+ public int getRows() {
+ return rows;
+ }
+
+ public void setRows(int rows) {
+ this.rows = rows;
+ }
+
+ public boolean isWordwrap() {
+ return wordwrap;
+ }
+
+ public void setWordwrap(boolean wordwrap) {
+ this.wordwrap = wordwrap;
+ }
+
+}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/textarea/VTextArea.java b/src/com/vaadin/terminal/gwt/client/ui/textarea/VTextArea.java
index c600b2fd1e..aede1ef002 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/textarea/VTextArea.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/textarea/VTextArea.java
@@ -5,10 +5,13 @@
package com.vaadin.terminal.gwt.client.ui.textarea;
import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.dom.client.Style.Overflow;
+import com.google.gwt.dom.client.TextAreaElement;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
+import com.vaadin.terminal.gwt.client.BrowserInfo;
+import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.ui.textfield.VTextField;
/**
@@ -22,23 +25,33 @@ import com.vaadin.terminal.gwt.client.ui.textfield.VTextField;
*/
public class VTextArea extends VTextField {
public static final String CLASSNAME = "v-textarea";
+ private boolean wordwrap = true;
public VTextArea() {
super(DOM.createTextArea());
setStyleName(CLASSNAME);
}
+ public TextAreaElement getTextAreaElement() {
+ return super.getElement().cast();
+ }
+
public void setRows(int rows) {
- setRows(getElement(), rows);
+ getTextAreaElement().setRows(rows);
}
- private native void setRows(Element e, int r)
- /*-{
- try {
- if(e.tagName.toLowerCase() == "textarea")
- e.rows = r;
- } catch (e) {}
- }-*/;
+ @Override
+ protected void setMaxLength(int newMaxLength) {
+ super.setMaxLength(newMaxLength);
+
+ boolean hasMaxLength = (newMaxLength >= 0);
+
+ if (hasMaxLength) {
+ sinkEvents(Event.ONKEYUP);
+ } else {
+ unsinkEvents(Event.ONKEYUP);
+ }
+ }
@Override
public void onBrowserEvent(Event event) {
@@ -61,4 +74,31 @@ public class VTextArea extends VTextField {
// detected in a different way.
return getImpl().getTextAreaCursorPos(getElement());
}
+
+ @Override
+ protected void setMaxLengthToElement(int newMaxLength) {
+ // There is no maxlength property for textarea. The maximum length is
+ // enforced by the KEYUP handler
+
+ }
+
+ public void setWordwrap(boolean wordwrap) {
+ if (wordwrap == this.wordwrap) {
+ return; // No change
+ }
+
+ if (wordwrap) {
+ getElement().removeAttribute("wrap");
+ getElement().getStyle().clearOverflow();
+ } else {
+ getElement().setAttribute("wrap", "off");
+ getElement().getStyle().setOverflow(Overflow.AUTO);
+ }
+ if (BrowserInfo.get().isOpera()) {
+ // Opera fails to dynamically update the wrap attribute so we detach
+ // and reattach the whole TextArea.
+ Util.detachAttach(getElement());
+ }
+ this.wordwrap = wordwrap;
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/textfield/AbstractTextFieldState.java b/src/com/vaadin/terminal/gwt/client/ui/textfield/AbstractTextFieldState.java
new file mode 100644
index 0000000000..d11b049f56
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/client/ui/textfield/AbstractTextFieldState.java
@@ -0,0 +1,61 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.terminal.gwt.client.ui.textfield;
+
+import com.vaadin.terminal.gwt.client.AbstractFieldState;
+
+public class AbstractTextFieldState extends AbstractFieldState {
+ /**
+ * Maximum character count in text field.
+ */
+ private int maxLength = -1;
+
+ /**
+ * Number of visible columns in the TextField.
+ */
+ private int columns = 0;
+
+ /**
+ * The prompt to display in an empty field. Null when disabled.
+ */
+ private String inputPrompt = null;
+
+ /**
+ * The text in the field
+ */
+ private String text = null;
+
+ public int getMaxLength() {
+ return maxLength;
+ }
+
+ public void setMaxLength(int maxLength) {
+ this.maxLength = maxLength;
+ }
+
+ public int getColumns() {
+ return columns;
+ }
+
+ public void setColumns(int columns) {
+ this.columns = columns;
+ }
+
+ public String getInputPrompt() {
+ return inputPrompt;
+ }
+
+ public void setInputPrompt(String inputPrompt) {
+ this.inputPrompt = inputPrompt;
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ public void setText(String text) {
+ this.text = text;
+ }
+
+}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/textfield/TextFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/textfield/TextFieldConnector.java
index 7e9e786676..04bf029b05 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/textfield/TextFieldConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/textfield/TextFieldConnector.java
@@ -4,11 +4,9 @@
package com.vaadin.terminal.gwt.client.ui.textfield;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -22,6 +20,11 @@ import com.vaadin.ui.TextField;
public class TextFieldConnector extends AbstractFieldConnector implements
Paintable, BeforeShortcutActionListener {
+ @Override
+ public AbstractTextFieldState getState() {
+ return (AbstractTextFieldState) super.getState();
+ }
+
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
// Save details
getWidget().client = client;
@@ -33,14 +36,9 @@ public class TextFieldConnector extends AbstractFieldConnector implements
getWidget().setReadOnly(isReadOnly());
- getWidget().inputPrompt = uidl
- .getStringAttribute(VTextField.ATTR_INPUTPROMPT);
-
- getWidget().setMaxLength(
- uidl.hasAttribute("maxLength") ? uidl
- .getIntAttribute("maxLength") : -1);
-
- getWidget().immediate = getState().isImmediate();
+ getWidget().setInputPrompt(getState().getInputPrompt());
+ getWidget().setMaxLength(getState().getMaxLength());
+ getWidget().setImmediate(getState().isImmediate());
getWidget().listenTextChangeEvents = hasEventListener("ie");
if (getWidget().listenTextChangeEvents) {
@@ -61,13 +59,9 @@ public class TextFieldConnector extends AbstractFieldConnector implements
getWidget().sinkEvents(VTextField.TEXTCHANGE_EVENTS);
getWidget().attachCutEventListener(getWidget().getElement());
}
+ getWidget().setColumns(getState().getColumns());
- if (uidl.hasAttribute("cols")) {
- getWidget().setColumns(
- new Integer(uidl.getStringAttribute("cols")).intValue());
- }
-
- final String text = uidl.getStringVariable("text");
+ final String text = getState().getText();
/*
* We skip the text content update if field has been repainted, but text
@@ -94,21 +88,6 @@ public class TextFieldConnector extends AbstractFieldConnector implements
}
});
}
-
- // Here for backward compatibility; to be moved to TextArea.
- // Optimization: server does not send attribute for the default 'true'
- // state.
- if (uidl.hasAttribute("wordwrap")
- && uidl.getBooleanAttribute("wordwrap") == false) {
- getWidget().setWordwrap(false);
- } else {
- getWidget().setWordwrap(true);
- }
- }
-
- @Override
- protected Widget createWidget() {
- return GWT.create(VTextField.class);
}
@Override
diff --git a/src/com/vaadin/terminal/gwt/client/ui/textfield/VTextField.java b/src/com/vaadin/terminal/gwt/client/ui/textfield/VTextField.java
index 7bd392b503..aeae165f60 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/textfield/VTextField.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/textfield/VTextField.java
@@ -4,7 +4,6 @@
package com.vaadin.terminal.gwt.client.ui.textfield;
-import com.google.gwt.dom.client.Style.Overflow;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ChangeEvent;
@@ -60,21 +59,19 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler,
*/
private boolean valueBeforeEditIsSynced = true;
- protected boolean immediate = false;
+ private boolean immediate = false;
private int maxLength = -1;
private static final String CLASSNAME_PROMPT = "prompt";
- protected static final String ATTR_INPUTPROMPT = "prompt";
public static final String ATTR_TEXTCHANGE_TIMEOUT = "iet";
public static final String VAR_CURSOR = "c";
public static final String ATTR_TEXTCHANGE_EVENTMODE = "iem";
protected static final String TEXTCHANGE_MODE_EAGER = "EAGER";
private static final String TEXTCHANGE_MODE_TIMEOUT = "TIMEOUT";
- protected String inputPrompt = null;
+ private String inputPrompt = null;
private boolean prompting = false;
private int lastCursorPos = -1;
- private boolean wordwrap = true;
public VTextField() {
this(DOM.createInputText());
@@ -264,20 +261,18 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler,
protected void setMaxLength(int newMaxLength) {
if (newMaxLength >= 0) {
maxLength = newMaxLength;
- if (getElement().getTagName().toLowerCase().equals("textarea")) {
- // NOP no maxlength property for textarea
- } else {
- getElement().setPropertyInt("maxLength", maxLength);
- }
- } else if (maxLength != -1) {
- if (getElement().getTagName().toLowerCase().equals("textarea")) {
- // NOP no maxlength property for textarea
- } else {
- getElement().removeAttribute("maxLength");
- }
+ } else {
maxLength = -1;
}
+ setMaxLengthToElement(newMaxLength);
+ }
+ protected void setMaxLengthToElement(int newMaxLength) {
+ if (newMaxLength >= 0) {
+ getElement().setPropertyInt("maxLength", newMaxLength);
+ } else {
+ getElement().removeAttribute("maxLength");
+ }
}
public int getMaxLength() {
@@ -390,48 +385,11 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler,
}
public void setColumns(int columns) {
- setColumns(getElement(), columns);
- }
-
- private native void setColumns(Element e, int c)
- /*-{
- try {
- switch(e.tagName.toLowerCase()) {
- case "input":
- //e.size = c;
- e.style.width = c+"em";
- break;
- case "textarea":
- //e.cols = c;
- e.style.width = c+"em";
- break;
- default:;
- }
- } catch (e) {}
- }-*/;
-
- // Here for backward compatibility; to be moved to TextArea
- public void setWordwrap(boolean enabled) {
- if (enabled == wordwrap) {
- return; // No change
+ if (columns <= 0) {
+ return;
}
- if (enabled) {
- getElement().removeAttribute("wrap");
- getElement().getStyle().clearOverflow();
- } else {
- getElement().setAttribute("wrap", "off");
- getElement().getStyle().setOverflow(Overflow.AUTO);
- }
- if (BrowserInfo.get().isSafari4()) {
- // Force redraw as Safari 4 does not properly update the screen
- Util.forceWebkitRedraw(getElement());
- } else if (BrowserInfo.get().isOpera()) {
- // Opera fails to dynamically update the wrap attribute so we detach
- // and reattach the whole TextArea.
- Util.detachAttach(getElement());
- }
- wordwrap = enabled;
+ setWidth(columns + "em");
}
public void onKeyDown(KeyDownEvent event) {
@@ -439,4 +397,13 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler,
valueChange(false);
}
}
+
+ public void setImmediate(boolean immediate) {
+ this.immediate = immediate;
+ }
+
+ public void setInputPrompt(String inputPrompt) {
+ this.inputPrompt = inputPrompt;
+ }
+
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/tree/TreeConnector.java b/src/com/vaadin/terminal/gwt/client/ui/tree/TreeConnector.java
index ebe5d22e99..e4afa32143 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/tree/TreeConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/tree/TreeConnector.java
@@ -5,8 +5,6 @@ package com.vaadin.terminal.gwt.client.ui.tree;
import java.util.Iterator;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.AbstractFieldState;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
@@ -130,11 +128,6 @@ public class TreeConnector extends AbstractComponentConnector implements
}
@Override
- protected Widget createWidget() {
- return GWT.create(VTree.class);
- }
-
- @Override
public VTree getWidget() {
return (VTree) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/treetable/TreeTableConnector.java b/src/com/vaadin/terminal/gwt/client/ui/treetable/TreeTableConnector.java
index f81771781b..59910c1b3e 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/treetable/TreeTableConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/treetable/TreeTableConnector.java
@@ -3,8 +3,6 @@
*/
package com.vaadin.terminal.gwt.client.ui.treetable;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.Connect;
@@ -91,11 +89,6 @@ public class TreeTableConnector extends TableConnector {
}
@Override
- protected Widget createWidget() {
- return GWT.create(VTreeTable.class);
- }
-
- @Override
public VTreeTable getWidget() {
return (VTreeTable) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/treetable/VTreeTable.java b/src/com/vaadin/terminal/gwt/client/ui/treetable/VTreeTable.java
index 2e15e7c445..f7cd9d133e 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/treetable/VTreeTable.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/treetable/VTreeTable.java
@@ -24,7 +24,6 @@ import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Widget;
-import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.ComputedStyle;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
@@ -81,7 +80,7 @@ public class VTreeTable extends VScrollTable {
return;
}
- if (animationsEnabled && browserSupportsAnimation()) {
+ if (animationsEnabled) {
if (partialRowAdditions.hasAttribute("hide")) {
scrollBody.unlinkRowsAnimatedAndUpdateCacheWhenFinished(
partialRowAdditions.getIntAttribute("firstprowix"),
@@ -97,11 +96,6 @@ public class VTreeTable extends VScrollTable {
}
}
- private boolean browserSupportsAnimation() {
- BrowserInfo bi = BrowserInfo.get();
- return !(bi.isSafari4());
- }
-
class VTreeTableScrollBody extends VScrollTable.VScrollTableBody {
private int identWidth = -1;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/twincolselect/TwinColSelectConnector.java b/src/com/vaadin/terminal/gwt/client/ui/twincolselect/TwinColSelectConnector.java
index 328d0fc18b..a77319920c 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/twincolselect/TwinColSelectConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/twincolselect/TwinColSelectConnector.java
@@ -4,8 +4,6 @@
package com.vaadin.terminal.gwt.client.ui.twincolselect;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.DirectionalManagedLayout;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -42,11 +40,6 @@ public class TwinColSelectConnector extends OptionGroupBaseConnector implements
}
@Override
- protected Widget createWidget() {
- return GWT.create(VTwinColSelect.class);
- }
-
- @Override
public VTwinColSelect getWidget() {
return (VTwinColSelect) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/upload/UploadConnector.java b/src/com/vaadin/terminal/gwt/client/ui/upload/UploadConnector.java
index 0a2c0b241e..153d99229b 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/upload/UploadConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/upload/UploadConnector.java
@@ -4,8 +4,6 @@
package com.vaadin.terminal.gwt.client.ui.upload;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -56,11 +54,6 @@ public class UploadConnector extends AbstractComponentConnector implements
}
@Override
- protected Widget createWidget() {
- return GWT.create(VUpload.class);
- }
-
- @Override
public VUpload getWidget() {
return (VUpload) super.getWidget();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/video/VVideo.java b/src/com/vaadin/terminal/gwt/client/ui/video/VVideo.java
index 484000b8d1..a2a4cd0ce3 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/video/VVideo.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/video/VVideo.java
@@ -52,11 +52,6 @@ public class VVideo extends VMediaBase {
Util.notifyParentOfSizeChange(this, true);
}
- @Override
- protected String getDefaultAltHtml() {
- return "Your browser does not support the <code>video</code> element.";
- }
-
public void setPoster(String poster) {
video.setPoster(poster);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/video/VideoConnector.java b/src/com/vaadin/terminal/gwt/client/ui/video/VideoConnector.java
index ec763fff07..ddf8df66ff 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/video/VideoConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/video/VideoConnector.java
@@ -3,33 +3,28 @@
*/
package com.vaadin.terminal.gwt.client.ui.video;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
+import com.vaadin.terminal.gwt.client.communication.URLReference;
import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.MediaBaseConnector;
import com.vaadin.ui.Video;
@Connect(Video.class)
public class VideoConnector extends MediaBaseConnector {
- public static final String ATTR_POSTER = "poster";
@Override
- public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
- super.updateFromUIDL(uidl, client);
- if (!isRealUpdate(uidl)) {
- return;
- }
- super.updateFromUIDL(uidl, client);
- setPosterFromUIDL(uidl);
+ public VideoState getState() {
+ return (VideoState) super.getState();
}
- private void setPosterFromUIDL(UIDL uidl) {
- if (uidl.hasAttribute(ATTR_POSTER)) {
- getWidget().setPoster(
- getConnection().translateVaadinUri(
- uidl.getStringAttribute(ATTR_POSTER)));
+ @Override
+ public void onStateChanged(StateChangeEvent stateChangeEvent) {
+ super.onStateChanged(stateChangeEvent);
+ URLReference poster = getState().getPoster();
+ if (poster != null) {
+ getWidget().setPoster(poster.getURL());
+ } else {
+ getWidget().setPoster(null);
}
}
@@ -39,8 +34,8 @@ public class VideoConnector extends MediaBaseConnector {
}
@Override
- protected Widget createWidget() {
- return GWT.create(VVideo.class);
+ protected String getDefaultAltHtml() {
+ return "Your browser does not support the <code>video</code> element.";
}
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/video/VideoState.java b/src/com/vaadin/terminal/gwt/client/ui/video/VideoState.java
new file mode 100644
index 0000000000..f59d9ccac1
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/client/ui/video/VideoState.java
@@ -0,0 +1,20 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.terminal.gwt.client.ui.video;
+
+import com.vaadin.terminal.gwt.client.communication.URLReference;
+import com.vaadin.terminal.gwt.client.ui.AbstractMediaState;
+
+public class VideoState extends AbstractMediaState {
+ private URLReference poster;
+
+ public URLReference getPoster() {
+ return poster;
+ }
+
+ public void setPoster(URLReference poster) {
+ this.poster = poster;
+ }
+
+}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/window/WindowConnector.java b/src/com/vaadin/terminal/gwt/client/ui/window/WindowConnector.java
index 6979982a9c..3a37baafbb 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/window/WindowConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/window/WindowConnector.java
@@ -3,7 +3,6 @@
*/
package com.vaadin.terminal.gwt.client.ui.window;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.Style;
@@ -196,11 +195,6 @@ public class WindowConnector extends AbstractComponentContainerConnector
}
@Override
- protected Widget createWidget() {
- return GWT.create(VWindow.class);
- }
-
- @Override
public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
super.onConnectorHierarchyChange(event);
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
index 77698805de..1acc9d128a 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
@@ -333,21 +333,6 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
}
}
- /**
- * Checks that the version reported by the client (widgetset) matches that
- * of the server.
- *
- * @param request
- */
- private void checkWidgetsetVersion(WrappedRequest request) {
- if (!AbstractApplicationServlet.VERSION.equals(request
- .getParameter("wsver"))) {
- logger.warning(String.format(WIDGETSET_MISMATCH_INFO,
- AbstractApplicationServlet.VERSION,
- request.getParameter("wsver")));
- }
- }
-
private void checkProductionMode() {
// TODO Identical code in AbstractApplicationServlet -> refactor
// Check if the application is in production mode.
@@ -674,10 +659,6 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
return;
} else if (requestType == RequestType.UIDL) {
// Handles AJAX UIDL requests
- if (isRepaintAll(request)) {
- // warn if versions do not match
- checkWidgetsetVersion(wrappedRequest);
- }
applicationManager.handleUidlRequest(wrappedRequest,
wrappedResponse, portletWrapper, root);
return;
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java
index 6ab2748332..905cfe7e3c 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java
@@ -90,51 +90,6 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
private static final Logger logger = Logger
.getLogger(AbstractApplicationServlet.class.getName());
- /**
- * The version number of this release. For example "6.2.0". Always in the
- * format "major.minor.revision[.build]". The build part is optional. All of
- * major, minor, revision must be integers.
- */
- public static final String VERSION;
- /**
- * Major version number. For example 6 in 6.2.0.
- */
- public static final int VERSION_MAJOR;
-
- /**
- * Minor version number. For example 2 in 6.2.0.
- */
- public static final int VERSION_MINOR;
-
- /**
- * Version revision number. For example 0 in 6.2.0.
- */
- public static final int VERSION_REVISION;
-
- /**
- * Build identifier. For example "nightly-20091123-c9963" in
- * 6.2.0.nightly-20091123-c9963.
- */
- public static final String VERSION_BUILD;
-
- /* Initialize version numbers from string replaced by build-script. */
- static {
- if ("@VERSION@".equals("@" + "VERSION" + "@")) {
- VERSION = "9.9.9.INTERNAL-DEBUG-BUILD";
- } else {
- VERSION = "@VERSION@";
- }
- final String[] digits = VERSION.split("\\.", 4);
- VERSION_MAJOR = Integer.parseInt(digits[0]);
- VERSION_MINOR = Integer.parseInt(digits[1]);
- VERSION_REVISION = Integer.parseInt(digits[2]);
- if (digits.length == 4) {
- VERSION_BUILD = digits[3];
- } else {
- VERSION_BUILD = "";
- }
- }
-
private Properties applicationProperties;
private boolean productionMode = false;
@@ -235,19 +190,6 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
}
}
- /**
- * Checks that the version reported by the client (widgetset) matches that
- * of the server.
- *
- * @param request
- */
- private void checkWidgetsetVersion(HttpServletRequest request) {
- if (!VERSION.equals(request.getParameter("wsver"))) {
- logger.warning(String.format(WIDGETSET_MISMATCH_INFO, VERSION,
- request.getParameter("wsver")));
- }
- }
-
private void checkProductionMode() {
// Check if the application is in production mode.
// We are in production mode if productionMode=true
@@ -416,11 +358,6 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
return;
}
- if (isRepaintAll(request)) {
- // warn if versions do not match
- checkWidgetsetVersion(request);
- }
-
Application application = null;
boolean transactionStarted = false;
boolean requestStarted = false;
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java
index c57e7d8bc1..c08d70aa37 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java
@@ -45,6 +45,7 @@ import java.util.logging.Logger;
import com.vaadin.Application;
import com.vaadin.Application.SystemMessages;
import com.vaadin.RootRequiresMoreInformationException;
+import com.vaadin.Version;
import com.vaadin.external.json.JSONArray;
import com.vaadin.external.json.JSONException;
import com.vaadin.external.json.JSONObject;
@@ -499,6 +500,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
WrappedResponse response, Callback callback, Root root)
throws IOException, InvalidUIDLSecurityKeyException {
+ checkWidgetsetVersion(request);
requestThemeName = request.getParameter("theme");
maxInactiveInterval = request.getSessionMaxInactiveInterval();
// repaint requested or session has timed out and new one is created
@@ -586,6 +588,27 @@ public abstract class AbstractCommunicationManager implements Serializable {
}
/**
+ * Checks that the version reported by the client (widgetset) matches that
+ * of the server.
+ *
+ * @param request
+ */
+ private void checkWidgetsetVersion(WrappedRequest request) {
+ String widgetsetVersion = request.getParameter("wsver");
+ if (widgetsetVersion == null) {
+ // Only check when the widgetset version is reported. It is reported
+ // in the first UIDL request (not the initial request as it is a
+ // plain GET /)
+ return;
+ }
+
+ if (!Version.getFullVersion().equals(widgetsetVersion)) {
+ logger.warning(String.format(Constants.WIDGETSET_MISMATCH_INFO,
+ Version.getFullVersion(), widgetsetVersion));
+ }
+ }
+
+ /**
* Method called after the paint phase while still being synchronized on the
* application
*
@@ -803,14 +826,28 @@ public abstract class AbstractCommunicationManager implements Serializable {
// client after component creation but before legacy UIDL
// processing.
JSONObject sharedStates = new JSONObject();
- for (Connector connector : dirtyVisibleConnectors) {
+ for (ClientConnector connector : dirtyVisibleConnectors) {
SharedState state = connector.getState();
if (null != state) {
// encode and send shared state
try {
- // FIXME Use declared type
+ Class<? extends SharedState> stateType = connector
+ .getStateType();
+ SharedState referenceState = null;
+ if (repaintAll) {
+ // Use an empty state object as reference for full
+ // repaints
+ try {
+ referenceState = stateType.newInstance();
+ } catch (Exception e) {
+ logger.log(Level.WARNING,
+ "Error creating reference object for state of type "
+ + stateType.getName());
+ }
+ }
JSONArray stateJsonArray = JsonCodec.encode(state,
- state.getClass(), application);
+ referenceState, stateType, application);
+
sharedStates
.put(connector.getConnectorId(), stateJsonArray);
} catch (JSONException e) {
@@ -818,7 +855,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
"Failed to serialize shared state for connector "
+ connector.getClass().getName() + " ("
+ connector.getConnectorId() + "): "
- + e.getMessage());
+ + e.getMessage(), e);
}
}
}
@@ -839,7 +876,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
throw new PaintException(
"Failed to send connector type for connector "
+ connector.getConnectorId() + ": "
- + e.getMessage());
+ + e.getMessage(), e);
}
}
outWriter.print("\"types\":");
@@ -873,7 +910,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
throw new PaintException(
"Failed to send hierarchy information about "
+ parentConnectorId + " to the client: "
- + e.getMessage());
+ + e.getMessage(), e);
}
}
}
@@ -900,9 +937,21 @@ public abstract class AbstractCommunicationManager implements Serializable {
invocationJson.put(invocation.getMethodName());
JSONArray paramJson = new JSONArray();
for (int i = 0; i < invocation.getParameterTypes().length; ++i) {
+ Class<?> parameterType = invocation.getParameterTypes()[i];
+ Object referenceParameter = null;
+ // TODO Use default values for RPC parameter types
+ // if (!JsonCodec.isInternalType(parameterType)) {
+ // try {
+ // referenceParameter = parameterType.newInstance();
+ // } catch (Exception e) {
+ // logger.log(Level.WARNING,
+ // "Error creating reference object for parameter of type "
+ // + parameterType.getName());
+ // }
+ // }
paramJson.put(JsonCodec.encode(
- invocation.getParameters()[i],
- invocation.getParameterTypes()[i], application));
+ invocation.getParameters()[i], referenceParameter,
+ parameterType, application));
}
invocationJson.put(paramJson);
rpcCalls.put(invocationJson);
@@ -912,7 +961,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
+ invocation.getConnector().getConnectorId()
+ " method " + invocation.getInterfaceName()
+ "." + invocation.getMethodName() + ": "
- + e.getMessage());
+ + e.getMessage(), e);
}
}
diff --git a/src/com/vaadin/terminal/gwt/server/BootstrapHandler.java b/src/com/vaadin/terminal/gwt/server/BootstrapHandler.java
index 84f87124d3..8a0c700121 100644
--- a/src/com/vaadin/terminal/gwt/server/BootstrapHandler.java
+++ b/src/com/vaadin/terminal/gwt/server/BootstrapHandler.java
@@ -15,6 +15,7 @@ import javax.servlet.http.HttpServletResponse;
import com.vaadin.Application;
import com.vaadin.RootRequiresMoreInformationException;
+import com.vaadin.Version;
import com.vaadin.external.json.JSONException;
import com.vaadin.external.json.JSONObject;
import com.vaadin.terminal.DeploymentConfiguration;
@@ -370,7 +371,7 @@ public abstract class BootstrapHandler implements RequestHandler {
}
JSONObject versionInfo = new JSONObject();
- versionInfo.put("vaadinVersion", AbstractApplicationServlet.VERSION);
+ versionInfo.put("vaadinVersion", Version.getFullVersion());
versionInfo.put("applicationVersion", application.getVersion());
appConfig.put("versionInfo", versionInfo);
@@ -478,8 +479,8 @@ public abstract class BootstrapHandler implements RequestHandler {
}
Root root = context.getRoot();
- String title = ((root == null || root.getCaption() == null) ? "Vaadin "
- + AbstractApplicationServlet.VERSION_MAJOR : root.getCaption());
+ String title = ((root == null || root.getCaption() == null) ? "" : root
+ .getCaption());
page.write("<title>"
+ AbstractApplicationServlet.safeEscapeForHtml(title)
diff --git a/src/com/vaadin/terminal/gwt/server/ClientConnector.java b/src/com/vaadin/terminal/gwt/server/ClientConnector.java
index 7a1f0fad68..7e74c26fb1 100644
--- a/src/com/vaadin/terminal/gwt/server/ClientConnector.java
+++ b/src/com/vaadin/terminal/gwt/server/ClientConnector.java
@@ -6,6 +6,7 @@ package com.vaadin.terminal.gwt.server;
import java.util.List;
import com.vaadin.terminal.gwt.client.Connector;
+import com.vaadin.terminal.gwt.client.communication.SharedState;
/**
* Interface implemented by all connectors that are capable of communicating
@@ -35,4 +36,12 @@ public interface ClientConnector extends Connector, RpcTarget {
* @return true if the connector can receive messages, false otherwise
*/
public boolean isConnectorEnabled();
+
+ /**
+ * Returns the type of the shared state for this connector
+ *
+ * @return The type of the state. Must never return null.
+ */
+ public Class<? extends SharedState> getStateType();
+
}
diff --git a/src/com/vaadin/terminal/gwt/server/DragAndDropService.java b/src/com/vaadin/terminal/gwt/server/DragAndDropService.java
index d3fe5a890b..f6c96557ea 100644
--- a/src/com/vaadin/terminal/gwt/server/DragAndDropService.java
+++ b/src/com/vaadin/terminal/gwt/server/DragAndDropService.java
@@ -238,4 +238,8 @@ public class DragAndDropService implements VariableOwner, ClientConnector {
// TODO Use rpc for drag'n'drop
return null;
}
+
+ public Class<? extends SharedState> getStateType() {
+ return SharedState.class;
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/server/JsonCodec.java b/src/com/vaadin/terminal/gwt/server/JsonCodec.java
index 375cce4161..e082eca47e 100644
--- a/src/com/vaadin/terminal/gwt/server/JsonCodec.java
+++ b/src/com/vaadin/terminal/gwt/server/JsonCodec.java
@@ -61,6 +61,7 @@ public class JsonCodec implements Serializable {
registerType(String[].class, JsonEncoder.VTYPE_STRINGARRAY);
registerType(Object[].class, JsonEncoder.VTYPE_ARRAY);
registerType(Map.class, JsonEncoder.VTYPE_MAP);
+ registerType(HashMap.class, JsonEncoder.VTYPE_MAP);
registerType(List.class, JsonEncoder.VTYPE_LIST);
registerType(Set.class, JsonEncoder.VTYPE_SET);
}
@@ -143,8 +144,12 @@ public class JsonCodec implements Serializable {
}
// Try to decode object using fields
- return decodeObject(targetType, (JSONObject) valueAndType.get(1),
- application);
+ Object value = valueAndType.get(1);
+ if (value == JSONObject.NULL) {
+ return null;
+ } else {
+ return decodeObject(targetType, (JSONObject) value, application);
+ }
}
/**
@@ -197,12 +202,8 @@ public class JsonCodec implements Serializable {
} else if (JsonEncoder.VTYPE_SET.equals(transportType)) {
return decodeSet(targetType, restrictToInternalTypes,
(JSONArray) encodedJsonValue, application);
- } else if (JsonEncoder.VTYPE_MAP_CONNECTOR.equals(transportType)) {
- return decodeConnectorToObjectMap(targetType,
- restrictToInternalTypes, (JSONObject) encodedJsonValue,
- application);
} else if (JsonEncoder.VTYPE_MAP.equals(transportType)) {
- return decodeStringToObjectMap(targetType, restrictToInternalTypes,
+ return decodeMap(targetType, restrictToInternalTypes,
(JSONObject) encodedJsonValue, application);
}
@@ -258,37 +259,22 @@ public class JsonCodec implements Serializable {
return false;
}
- @Deprecated
- private static Map<String, Object> decodeStringToObjectMap(Type targetType,
+ private static Map<Object, Object> decodeMap(Type targetType,
boolean restrictToInternalTypes, JSONObject jsonMap,
Application application) throws JSONException {
- HashMap<String, Object> map = new HashMap<String, Object>();
- Iterator<String> it = jsonMap.keys();
- while (it.hasNext()) {
- String key = it.next();
- JSONArray encodedValueAndType = jsonMap.getJSONArray(key);
- Object decodedChild = decodeChild(targetType,
- restrictToInternalTypes, 1, encodedValueAndType,
- application);
- map.put(key, decodedChild);
- }
- return map;
- }
+ HashMap<Object, Object> map = new HashMap<Object, Object>();
- @Deprecated
- private static Map<Connector, Object> decodeConnectorToObjectMap(
- Type targetType, boolean restrictToInternalTypes,
- JSONObject jsonMap, Application application) throws JSONException {
- HashMap<Connector, Object> map = new HashMap<Connector, Object>();
Iterator<String> it = jsonMap.keys();
while (it.hasNext()) {
- String connectorId = it.next();
- Connector connector = application.getConnector(connectorId);
- JSONArray encodedValueAndType = jsonMap.getJSONArray(connectorId);
- Object decodedChild = decodeChild(targetType,
- restrictToInternalTypes, 1, encodedValueAndType,
- application);
- map.put(connector, decodedChild);
+ String key = it.next();
+ JSONArray encodedKey = new JSONArray(key);
+ JSONArray encodedValue = jsonMap.getJSONArray(key);
+
+ Object decodedKey = decodeParametrizedType(targetType,
+ restrictToInternalTypes, 0, encodedKey, application);
+ Object decodedValue = decodeParametrizedType(targetType,
+ restrictToInternalTypes, 1, encodedValue, application);
+ map.put(decodedKey, decodedValue);
}
return map;
}
@@ -304,7 +290,7 @@ public class JsonCodec implements Serializable {
* @return
* @throws JSONException
*/
- private static Object decodeChild(Type targetType,
+ private static Object decodeParametrizedType(Type targetType,
boolean restrictToInternalTypes, int typeIndex,
JSONArray encodedValueAndType, Application application)
throws JSONException {
@@ -321,6 +307,11 @@ public class JsonCodec implements Serializable {
}
}
+ private static Object decodeEnum(Class<? extends Enum> cls, JSONObject value) {
+ String enumIdentifier = String.valueOf(value);
+ return Enum.valueOf(cls, enumIdentifier);
+ }
+
private static String[] decodeStringArray(JSONArray jsonArray)
throws JSONException {
int length = jsonArray.length();
@@ -344,7 +335,7 @@ public class JsonCodec implements Serializable {
for (int i = 0; i < jsonArray.length(); ++i) {
// each entry always has two elements: type and value
JSONArray encodedValueAndType = jsonArray.getJSONArray(i);
- Object decodedChild = decodeChild(targetType,
+ Object decodedChild = decodeParametrizedType(targetType,
restrictToInternalTypes, 0, encodedValueAndType,
application);
list.add(decodedChild);
@@ -372,7 +363,7 @@ public class JsonCodec implements Serializable {
* @return the name to be used or null if both getter and setter are not
* found.
*/
- private static String getTransportFieldName(PropertyDescriptor pd) {
+ static String getTransportFieldName(PropertyDescriptor pd) {
if (pd.getReadMethod() == null || pd.getWriteMethod() == null) {
return null;
}
@@ -384,6 +375,11 @@ public class JsonCodec implements Serializable {
throws JSONException {
Class<?> targetClass = getClassForType(targetType);
+ if (Enum.class.isAssignableFrom(targetClass)) {
+ return decodeEnum(targetClass.asSubclass(Enum.class),
+ serializedObject);
+ }
+
try {
Object decodedObject = targetClass.newInstance();
for (PropertyDescriptor pd : Introspector.getBeanInfo(targetClass)
@@ -419,11 +415,11 @@ public class JsonCodec implements Serializable {
@Deprecated
private static JSONArray encode(Object value, Application application)
throws JSONException {
- return encode(value, null, application);
+ return encode(value, null, null, application);
}
- public static JSONArray encode(Object value, Class<?> valueType,
- Application application) throws JSONException {
+ public static JSONArray encode(Object value, Object referenceValue,
+ Type valueType, Application application) throws JSONException {
if (null == value) {
return encodeNull();
@@ -453,7 +449,8 @@ public class JsonCodec implements Serializable {
"Unable to serialize unsupported type: " + valueType);
}
Collection<?> collection = (Collection<?>) value;
- JSONArray jsonArray = encodeCollection(collection, application);
+ JSONArray jsonArray = encodeCollection(valueType, collection,
+ application);
return combineTypeAndValue(internalTransportType, jsonArray);
} else if (value instanceof Object[]) {
@@ -461,16 +458,9 @@ public class JsonCodec implements Serializable {
JSONArray jsonArray = encodeArrayContents(array, application);
return combineTypeAndValue(JsonEncoder.VTYPE_ARRAY, jsonArray);
} else if (value instanceof Map) {
- Map<Object, Object> map = (Map<Object, Object>) value;
- JSONObject jsonMap = encodeMapContents(map, application);
- // Hack to support Connector as map key. Should be fixed by #
- if (!map.isEmpty()
- && map.keySet().iterator().next() instanceof Connector) {
- return combineTypeAndValue(JsonEncoder.VTYPE_MAP_CONNECTOR,
- jsonMap);
- } else {
- return combineTypeAndValue(JsonEncoder.VTYPE_MAP, jsonMap);
- }
+ JSONObject jsonMap = encodeMap(valueType, (Map<?, ?>) value,
+ application);
+ return combineTypeAndValue(JsonEncoder.VTYPE_MAP, jsonMap);
} else if (value instanceof Connector) {
Connector connector = (Connector) value;
if (value instanceof Component
@@ -483,11 +473,14 @@ public class JsonCodec implements Serializable {
} else if (internalTransportType != null) {
return combineTypeAndValue(internalTransportType,
String.valueOf(value));
+ } else if (value instanceof Enum) {
+ return encodeEnum((Enum) value, application);
} else {
// Any object that we do not know how to encode we encode by looping
// through fields
- return combineTypeAndValue(getCustomTransportType(valueType),
- encodeObject(value, application));
+ return combineTypeAndValue(
+ getCustomTransportType((Class<?>) valueType),
+ encodeObject(value, referenceValue, application));
}
}
@@ -495,22 +488,40 @@ public class JsonCodec implements Serializable {
return combineTypeAndValue(JsonEncoder.VTYPE_NULL, JSONObject.NULL);
}
- private static Object encodeObject(Object value, Application application)
- throws JSONException {
+ private static Object encodeObject(Object value, Object referenceValue,
+ Application application) throws JSONException {
JSONObject jsonMap = new JSONObject();
try {
for (PropertyDescriptor pd : Introspector.getBeanInfo(
value.getClass()).getPropertyDescriptors()) {
- Class<?> fieldType = pd.getPropertyType();
String fieldName = getTransportFieldName(pd);
if (fieldName == null) {
continue;
}
Method getterMethod = pd.getReadMethod();
+ // We can't use PropertyDescriptor.getPropertyType() as it does
+ // not support generics
+ Type fieldType = getterMethod.getGenericReturnType();
Object fieldValue = getterMethod.invoke(value, (Object[]) null);
- jsonMap.put(fieldName,
- encode(fieldValue, fieldType, application));
+ boolean equals = false;
+ Object referenceFieldValue = null;
+ if (referenceValue != null) {
+ referenceFieldValue = getterMethod.invoke(referenceValue,
+ (Object[]) null);
+ equals = equals(fieldValue, referenceFieldValue);
+ }
+ if (!equals) {
+ jsonMap.put(
+ fieldName,
+ encode(fieldValue, referenceFieldValue, fieldType,
+ application));
+ // } else {
+ // System.out.println("Skipping field " + fieldName
+ // + " of type " + fieldType.getName()
+ // + " for object " + value.getClass().getName()
+ // + " as " + fieldValue + "==" + referenceFieldValue);
+ }
}
} catch (Exception e) {
// TODO: Should exceptions be handled in a different way?
@@ -519,39 +530,80 @@ public class JsonCodec implements Serializable {
return jsonMap;
}
+ /**
+ * Compares the value with the reference. If they match, returns true.
+ *
+ * @param fieldValue
+ * @param referenceValue
+ * @return
+ */
+ private static boolean equals(Object fieldValue, Object referenceValue) {
+ if (fieldValue == null) {
+ return referenceValue == null;
+ }
+
+ if (fieldValue.equals(referenceValue)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ private static JSONArray encodeEnum(Enum e, Application application)
+ throws JSONException {
+ String enumIdentifier = e.name();
+ return combineTypeAndValue(e.getClass().getName(), enumIdentifier);
+ }
+
private static JSONArray encodeArrayContents(Object[] array,
Application application) throws JSONException {
JSONArray jsonArray = new JSONArray();
for (Object o : array) {
- jsonArray.put(encode(o, null, application));
+ jsonArray.put(encode(o, null, null, application));
}
return jsonArray;
}
- private static JSONArray encodeCollection(Collection collection,
- Application application) throws JSONException {
+ private static JSONArray encodeCollection(Type targetType,
+ Collection collection, Application application)
+ throws JSONException {
JSONArray jsonArray = new JSONArray();
for (Object o : collection) {
- jsonArray.put(encode(o, application));
+ jsonArray.put(encodeChild(targetType, 0, o, application));
}
return jsonArray;
}
- private static JSONObject encodeMapContents(Map<Object, Object> map,
+ private static JSONArray encodeChild(Type targetType, int typeIndex,
+ Object o, Application application) throws JSONException {
+ if (targetType instanceof ParameterizedType) {
+ Type childType = ((ParameterizedType) targetType)
+ .getActualTypeArguments()[typeIndex];
+ // Encode using the given type
+ return encode(o, null, childType, application);
+ } else {
+ return encode(o, application);
+ }
+ }
+
+ private static JSONObject encodeMap(Type mapType, Map<?, ?> map,
Application application) throws JSONException {
+ Type keyType, valueType;
+
+ if (mapType instanceof ParameterizedType) {
+ keyType = ((ParameterizedType) mapType).getActualTypeArguments()[0];
+ valueType = ((ParameterizedType) mapType).getActualTypeArguments()[1];
+ } else {
+ throw new JSONException("Map is missing generics");
+ }
+
JSONObject jsonMap = new JSONObject();
for (Object mapKey : map.keySet()) {
Object mapValue = map.get(mapKey);
-
- if (mapKey instanceof ClientConnector) {
- mapKey = ((ClientConnector) mapKey).getConnectorId();
- }
- if (!(mapKey instanceof String)) {
- throw new JSONException(
- "Only maps with String/Connector keys are currently supported (#8602)");
- }
-
- jsonMap.put((String) mapKey, encode(mapValue, null, application));
+ JSONArray encodedKey = encode(mapKey, null, keyType, application);
+ JSONArray encodedValue = encode(mapValue, null, valueType,
+ application);
+ jsonMap.put(encodedKey.toString(), encodedValue);
}
return jsonMap;
}
diff --git a/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java b/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java
index 0140c0f799..def334290e 100644
--- a/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java
+++ b/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java
@@ -387,7 +387,7 @@ public class JsonPaintTarget implements PaintTarget {
"Parameters must be non-null strings");
}
- tag.addAttribute("\"" + name + "\": \"" + escapeJSON(value) + "\"");
+ tag.addAttribute("\"" + name + "\":\"" + escapeJSON(value) + "\"");
if (customLayoutArgumentsOpen && "template".equals(name)) {
getUsedResources().add("layouts/" + value + ".html");
@@ -411,7 +411,7 @@ public class JsonPaintTarget implements PaintTarget {
StringBuilder sb = new StringBuilder();
sb.append("\"");
sb.append(name);
- sb.append("\": ");
+ sb.append("\":");
sb.append("{");
for (Iterator<?> it = value.keySet().iterator(); it.hasNext();) {
Object key = it.next();
diff --git a/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java b/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java
index b3ec33a9e0..55f15da3d9 100644
--- a/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java
+++ b/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java
@@ -15,7 +15,6 @@ import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
-import javax.portlet.ResourceResponse;
import javax.portlet.ResourceURL;
import com.vaadin.Application;
@@ -38,7 +37,7 @@ import com.vaadin.ui.Root;
@SuppressWarnings("serial")
public class PortletCommunicationManager extends AbstractCommunicationManager {
- private transient ResourceResponse currentUidlResponse;
+ private transient MimeResponse currentMimeResponse;
public PortletCommunicationManager(Application application) {
super(application);
@@ -83,13 +82,42 @@ public class PortletCommunicationManager extends AbstractCommunicationManager {
}
@Override
+ protected boolean handleApplicationRequest(WrappedRequest request,
+ WrappedResponse response) throws IOException {
+ setCurrentMimeReponse(response);
+ try {
+ return super.handleApplicationRequest(request, response);
+ } finally {
+ currentMimeResponse = null;
+ }
+ }
+
+ private void setCurrentMimeReponse(WrappedResponse response) {
+ PortletResponse portletResponse = ((WrappedPortletResponse) response)
+ .getPortletResponse();
+ if (portletResponse instanceof MimeResponse) {
+ currentMimeResponse = (MimeResponse) portletResponse;
+ }
+
+ }
+
+ @Override
public void handleUidlRequest(WrappedRequest request,
WrappedResponse response, Callback callback, Root root)
throws IOException, InvalidUIDLSecurityKeyException {
- currentUidlResponse = (ResourceResponse) ((WrappedPortletResponse) response)
- .getPortletResponse();
+ setCurrentMimeReponse(response);
super.handleUidlRequest(request, response, callback, root);
- currentUidlResponse = null;
+ currentMimeResponse = null;
+ }
+
+ @Override
+ public void handleBrowserDetailsRequest(WrappedRequest request,
+ WrappedResponse response, Application application)
+ throws IOException {
+ setCurrentMimeReponse(response);
+ super.handleBrowserDetailsRequest(request, response, application);
+ currentMimeResponse = null;
+
}
private Map<Connector, Map<String, StreamVariable>> ownerToNameToStreamVariable;
@@ -107,7 +135,7 @@ public class PortletCommunicationManager extends AbstractCommunicationManager {
ownerToNameToStreamVariable.put(owner, nameToReceiver);
}
nameToReceiver.put(name, value);
- ResourceURL resurl = currentUidlResponse.createResourceURL();
+ ResourceURL resurl = createResourceURL();
resurl.setResourceID("UPLOAD");
resurl.setParameter("name", name);
resurl.setParameter("rec-owner", owner.getConnectorId());
@@ -116,6 +144,14 @@ public class PortletCommunicationManager extends AbstractCommunicationManager {
return resurl.toString();
}
+ private ResourceURL createResourceURL() {
+ if (currentMimeResponse == null) {
+ throw new RuntimeException(
+ "No reponse object available. Cannot create a resource URL");
+ }
+ return currentMimeResponse.createResourceURL();
+ }
+
@Override
protected void cleanStreamVariable(Connector owner, String name) {
Map<String, StreamVariable> map = ownerToNameToStreamVariable
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/AbstractConnectorClassBasedFactoryGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/AbstractConnectorClassBasedFactoryGenerator.java
new file mode 100644
index 0000000000..3a13fceece
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/AbstractConnectorClassBasedFactoryGenerator.java
@@ -0,0 +1,145 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.terminal.gwt.widgetsetutils;
+
+import java.io.PrintWriter;
+import java.util.Date;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.ext.Generator;
+import com.google.gwt.core.ext.GeneratorContext;
+import com.google.gwt.core.ext.TreeLogger;
+import com.google.gwt.core.ext.TreeLogger.Type;
+import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.core.ext.typeinfo.JClassType;
+import com.google.gwt.core.ext.typeinfo.JMethod;
+import com.google.gwt.core.ext.typeinfo.JType;
+import com.google.gwt.core.ext.typeinfo.NotFoundException;
+import com.google.gwt.core.ext.typeinfo.TypeOracle;
+import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
+import com.google.gwt.user.rebind.SourceWriter;
+import com.vaadin.terminal.gwt.client.ServerConnector;
+import com.vaadin.terminal.gwt.client.ui.ConnectorClassBasedFactory;
+import com.vaadin.terminal.gwt.client.ui.ConnectorClassBasedFactory.Creator;
+
+/**
+ * GWT generator that creates a lookup method for
+ * {@link ConnectorClassBasedFactory} instances.
+ *
+ * @since 7.0
+ */
+public abstract class AbstractConnectorClassBasedFactoryGenerator extends
+ Generator {
+
+ @Override
+ public String generate(TreeLogger logger, GeneratorContext context,
+ String typeName) throws UnableToCompleteException {
+
+ try {
+ // get classType and save instance variables
+ return generateConnectorClassBasedFactory(typeName, logger, context);
+ } catch (Exception e) {
+ logger.log(TreeLogger.ERROR, typeName + " creation failed", e);
+ throw new UnableToCompleteException();
+ }
+ }
+
+ private String generateConnectorClassBasedFactory(String typeName,
+ TreeLogger logger, GeneratorContext context)
+ throws NotFoundException {
+ TypeOracle typeOracle = context.getTypeOracle();
+
+ JClassType classType = typeOracle.getType(typeName);
+ String superName = classType.getSimpleSourceName();
+ String packageName = classType.getPackage().getName();
+ String className = superName + "Impl";
+
+ // get print writer that receives the source code
+ PrintWriter printWriter = null;
+ printWriter = context.tryCreate(logger, packageName, className);
+ // print writer if null, source code has ALREADY been generated
+ if (printWriter == null) {
+ return packageName + "." + className;
+ }
+
+ Date date = new Date();
+
+ // init composer, set class properties, create source writer
+ ClassSourceFileComposerFactory composer = null;
+ composer = new ClassSourceFileComposerFactory(packageName, className);
+ composer.addImport(GWT.class.getName());
+ composer.addImport(Creator.class.getCanonicalName());
+ composer.setSuperclass(superName);
+
+ SourceWriter sourceWriter = composer.createSourceWriter(context,
+ printWriter);
+ sourceWriter.indent();
+
+ // public ConnectorStateFactoryImpl() {
+ sourceWriter.println("public " + className + "() {");
+ sourceWriter.indent();
+
+ JClassType serverConnectorType = typeOracle.getType(getConnectorType()
+ .getCanonicalName());
+ for (JClassType connector : serverConnectorType.getSubtypes()) {
+ // addCreator(TextAreaConnector.class, new Creator<SharedState>() {
+ if (connector.isInterface() != null || connector.isAbstract()) {
+ continue;
+ }
+
+ JClassType targetType = getTargetType(connector);
+ if (targetType.isAbstract()) {
+ continue;
+ }
+
+ sourceWriter.println("addCreator("
+ + connector.getQualifiedSourceName()
+ + ".class, new Creator<"
+ + targetType.getQualifiedSourceName() + ">() {");
+ // public SharedState create() {
+ sourceWriter.println("public "
+ + targetType.getQualifiedSourceName() + " create() {");
+ // return GWT.create(TextAreaState.class);
+ sourceWriter.println("return GWT.create("
+ + targetType.getQualifiedSourceName() + ".class);");
+ // }
+ sourceWriter.println("}");
+ // });
+ sourceWriter.println("});");
+ }
+
+ // End of constructor
+ sourceWriter.outdent();
+ sourceWriter.println("}");
+
+ // close generated class
+ sourceWriter.outdent();
+ sourceWriter.println("}");
+
+ // commit generated class
+ context.commit(logger, printWriter);
+ logger.log(Type.INFO,
+ "Done. (" + (new Date().getTime() - date.getTime()) / 1000
+ + "seconds)");
+ return packageName + "." + className;
+
+ }
+
+ protected abstract Class<? extends ServerConnector> getConnectorType();
+
+ protected abstract JClassType getTargetType(JClassType connectorType);
+
+ protected JClassType getGetterReturnType(JClassType connector,
+ String getterName) {
+ try {
+ JMethod getMethod = connector.getMethod(getterName, new JType[] {});
+ return (JClassType) getMethod.getReturnType();
+ } catch (NotFoundException e) {
+ return getGetterReturnType(connector.getSuperclass(), getterName);
+ }
+
+ }
+
+}
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/ConnectorStateFactoryGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/ConnectorStateFactoryGenerator.java
new file mode 100644
index 0000000000..33406ef85f
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/ConnectorStateFactoryGenerator.java
@@ -0,0 +1,29 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.terminal.gwt.widgetsetutils;
+
+import com.google.gwt.core.ext.typeinfo.JClassType;
+import com.vaadin.terminal.gwt.client.ServerConnector;
+
+/**
+ * GWT generator that creates a SharedState class for a given Connector class,
+ * based on the return type of getState()
+ *
+ * @since 7.0
+ */
+public class ConnectorStateFactoryGenerator extends
+ AbstractConnectorClassBasedFactoryGenerator {
+
+ @Override
+ protected JClassType getTargetType(JClassType connectorType) {
+ return getGetterReturnType(connectorType, "getState");
+ }
+
+ @Override
+ protected Class<? extends ServerConnector> getConnectorType() {
+ return ServerConnector.class;
+ }
+
+}
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/ConnectorWidgetFactoryGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/ConnectorWidgetFactoryGenerator.java
new file mode 100644
index 0000000000..55a2857ce0
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/ConnectorWidgetFactoryGenerator.java
@@ -0,0 +1,29 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.terminal.gwt.widgetsetutils;
+
+import com.google.gwt.core.ext.typeinfo.JClassType;
+import com.vaadin.terminal.gwt.client.ComponentConnector;
+import com.vaadin.terminal.gwt.client.ServerConnector;
+
+/**
+ * GWT generator that creates a Widget class for a given Connector class, based
+ * on the return type of getWidget()
+ *
+ * @since 7.0
+ */
+public class ConnectorWidgetFactoryGenerator extends
+ AbstractConnectorClassBasedFactoryGenerator {
+ @Override
+ protected JClassType getTargetType(JClassType connectorType) {
+ return getGetterReturnType(connectorType, "getWidget");
+ }
+
+ @Override
+ protected Class<? extends ServerConnector> getConnectorType() {
+ return ComponentConnector.class;
+ }
+
+} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/SerializerGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/SerializerGenerator.java
index d3ed9fe484..bc031f4bdb 100644
--- a/src/com/vaadin/terminal/gwt/widgetsetutils/SerializerGenerator.java
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/SerializerGenerator.java
@@ -16,12 +16,16 @@ import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.TreeLogger.Type;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JClassType;
+import com.google.gwt.core.ext.typeinfo.JEnumConstant;
+import com.google.gwt.core.ext.typeinfo.JEnumType;
import com.google.gwt.core.ext.typeinfo.JMethod;
import com.google.gwt.core.ext.typeinfo.JPrimitiveType;
import com.google.gwt.core.ext.typeinfo.JType;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
+import com.google.gwt.json.client.JSONString;
+import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
import com.google.gwt.user.rebind.SourceWriter;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
@@ -89,6 +93,8 @@ public class SerializerGenerator extends Generator {
if (printWriter == null) {
return;
}
+ boolean isEnum = (beanType.isEnum() != null);
+
Date date = new Date();
TypeOracle typeOracle = context.getTypeOracle();
String beanQualifiedSourceName = beanType.getQualifiedSourceName();
@@ -106,7 +112,8 @@ public class SerializerGenerator extends Generator {
composer.addImport(JsonDecoder.class.getName());
// composer.addImport(VaadinSerializer.class.getName());
- composer.addImplementedInterface(JSONSerializer.class.getName());
+ composer.addImplementedInterface(JSONSerializer.class.getName() + "<"
+ + beanQualifiedSourceName + ">");
SourceWriter sourceWriter = composer.createSourceWriter(context,
printWriter);
@@ -116,49 +123,83 @@ public class SerializerGenerator extends Generator {
// public JSONValue serialize(Object value, ConnectorMap idMapper,
// ApplicationConnection connection) {
- sourceWriter.println("public " + JSONObject.class.getName()
- + " serialize(" + Object.class.getName() + " value, "
+ sourceWriter.println("public " + JSONValue.class.getName()
+ + " serialize(" + beanQualifiedSourceName + " value, "
+ ConnectorMap.class.getName() + " idMapper, "
+ ApplicationConnection.class.getName() + " connection) {");
sourceWriter.indent();
// MouseEventDetails castedValue = (MouseEventDetails) value;
sourceWriter.println(beanQualifiedSourceName + " castedValue = ("
+ beanQualifiedSourceName + ") value;");
- // JSONObject json = new JSONObject();
- sourceWriter.println(JSONObject.class.getName() + " json = new "
- + JSONObject.class.getName() + "();");
- for (JMethod setterMethod : getSetters(beanType)) {
- String setterName = setterMethod.getName();
- String fieldName = setterName.substring(3); // setZindex() -> ZIndex
- String getterName = findGetter(beanType, setterMethod);
-
- if (getterName == null) {
- logger.log(TreeLogger.ERROR, "No getter found for " + fieldName
- + ". Serialization will likely fail");
- }
- // json.put("button",
- // JsonEncoder.encode(castedValue.getButton(), idMapper,
- // connection));
- sourceWriter.println("json.put(\"" + fieldName + "\", "
- + JsonEncoder.class.getName() + ".encode(castedValue."
- + getterName + "(), idMapper, connection));");
+ if (isEnum) {
+ writeEnumSerializer(logger, sourceWriter, beanType);
+ } else {
+ writeBeanSerializer(logger, sourceWriter, beanType);
}
- // return json;
- sourceWriter.println("return json;");
// }
sourceWriter.println("}");
// Deserializer
sourceWriter.println("public " + beanQualifiedSourceName
- + " deserialize(" + JSONObject.class.getName() + " jsonValue, "
+ + " deserialize(" + JSONValue.class.getName() + " jsonValue, "
+ + beanQualifiedSourceName + " target, "
+ ConnectorMap.class.getName() + " idMapper, "
+ ApplicationConnection.class.getName() + " connection) {");
sourceWriter.indent();
- // VButtonState state = GWT.create(VButtonState.class);
- sourceWriter.println(beanQualifiedSourceName + " state = GWT.create("
- + beanQualifiedSourceName + ".class);");
+ if (isEnum) {
+ writeEnumDeserializer(logger, sourceWriter, beanType.isEnum());
+ } else {
+ writeBeanDeserializer(logger, sourceWriter, beanType);
+ }
+ sourceWriter.println("}");
+ sourceWriter.outdent();
+
+ // End of class
+ sourceWriter.println("}");
+ sourceWriter.outdent();
+
+ // commit generated class
+ context.commit(logger, printWriter);
+ logger.log(TreeLogger.INFO, "Generated Serializer class "
+ + getFullyQualifiedSerializerClassName(beanType));
+ }
+
+ private void writeEnumDeserializer(TreeLogger logger,
+ SourceWriter sourceWriter, JEnumType enumType) {
+ sourceWriter.println("String enumIdentifier = (("
+ + JSONString.class.getName() + ")jsonValue).stringValue();");
+ for (JEnumConstant e : enumType.getEnumConstants()) {
+ sourceWriter.println("if (\"" + e.getName()
+ + "\".equals(enumIdentifier)) {");
+ sourceWriter.indent();
+ sourceWriter.println("return " + enumType.getQualifiedSourceName()
+ + "." + e.getName() + ";");
+ sourceWriter.outdent();
+ sourceWriter.println("}");
+ }
+ sourceWriter.println("return null;");
+ }
+
+ private void writeBeanDeserializer(TreeLogger logger,
+ SourceWriter sourceWriter, JClassType beanType) {
+ String beanQualifiedSourceName = beanType.getQualifiedSourceName();
+
+ // if (target == null) {
+ sourceWriter.println("if (target == null) {");
+ sourceWriter.indent();
+
+ // target = GWT.create(VButtonState.class);
+ sourceWriter.println("target = GWT.create(" + beanQualifiedSourceName
+ + ".class);");
+ sourceWriter.outdent();
+ sourceWriter.println("}");
+
+ // JSONOBject json = (JSONObject)jsonValue;
+ sourceWriter.println(JSONObject.class.getName() + " json = ("
+ + JSONObject.class.getName() + ")jsonValue;");
+
for (JMethod method : getSetters(beanType)) {
String setterName = method.getName();
String fieldName = setterName.substring(3); // setZIndex() -> ZIndex
@@ -167,41 +208,94 @@ public class SerializerGenerator extends Generator {
logger.log(Type.DEBUG, "* Processing field " + fieldName + " in "
+ beanQualifiedSourceName + " (" + beanType.getName() + ")");
+ // if (json.containsKey("height")) {
+ sourceWriter.println("if (json.containsKey(\"" + fieldName
+ + "\")) {");
+ sourceWriter.indent();
String jsonFieldName = "json_" + fieldName;
- // JSONArray json_Height = (JSONArray) jsonValue.get("height");
+ // JSONArray json_Height = (JSONArray) json.get("height");
sourceWriter.println("JSONArray " + jsonFieldName
- + " = (JSONArray) jsonValue.get(\"" + fieldName + "\");");
-
- // state.setHeight((String)
- // JsonDecoder.decodeValue(jsonFieldValue,idMapper, connection));
+ + " = (JSONArray) json.get(\"" + fieldName + "\");");
String fieldType;
+ String getterName = "get" + fieldName;
JPrimitiveType primitiveType = setterParameterType.isPrimitive();
if (primitiveType != null) {
// This is a primitive type -> must used the boxed type
fieldType = primitiveType.getQualifiedBoxedSourceName();
+ if (primitiveType == JPrimitiveType.BOOLEAN) {
+ getterName = "is" + fieldName;
+ }
} else {
fieldType = setterParameterType.getQualifiedSourceName();
}
- sourceWriter.println("state." + setterName + "((" + fieldType
+ // String referenceValue;
+ sourceWriter.println(fieldType + " referenceValue;");
+ // if (target == null) {
+ sourceWriter.println("if (target == null) {");
+ sourceWriter.indent();
+ // referenceValue = null;
+ sourceWriter.println("referenceValue = null;");
+ // } else {
+ sourceWriter.println("} else {");
+ // referenceValue = target.getHeight();
+ sourceWriter.println("referenceValue = target." + getterName
+ + "();");
+ // }
+ sourceWriter.outdent();
+ sourceWriter.println("}");
+
+ // target.setHeight((String)
+ // JsonDecoder.decodeValue(jsonFieldValue,referenceValue, idMapper,
+ // connection));
+ sourceWriter.println("target." + setterName + "((" + fieldType
+ ") " + JsonDecoder.class.getName() + ".decodeValue("
- + jsonFieldName + ", idMapper, connection));");
+ + jsonFieldName
+ + ", referenceValue, idMapper, connection));");
+
+ // } ... end of if contains
+ sourceWriter.println("}");
+ sourceWriter.outdent();
}
- // return state;
- sourceWriter.println("return state;");
- sourceWriter.println("}");
- sourceWriter.outdent();
+ // return target;
+ sourceWriter.println("return target;");
- // End of class
- sourceWriter.println("}");
- sourceWriter.outdent();
+ }
- // commit generated class
- context.commit(logger, printWriter);
- logger.log(TreeLogger.INFO, "Generated Serializer class "
- + getFullyQualifiedSerializerClassName(beanType));
+ private void writeEnumSerializer(TreeLogger logger,
+ SourceWriter sourceWriter, JClassType beanType) {
+ // return new JSONString(castedValue.name());
+ sourceWriter.println("return new " + JSONString.class.getName()
+ + "(castedValue.name());");
+ }
+
+ private void writeBeanSerializer(TreeLogger logger,
+ SourceWriter sourceWriter, JClassType beanType) {
+
+ // JSONObject json = new JSONObject();
+ sourceWriter.println(JSONObject.class.getName() + " json = new "
+ + JSONObject.class.getName() + "();");
+
+ for (JMethod setterMethod : getSetters(beanType)) {
+ String setterName = setterMethod.getName();
+ String fieldName = setterName.substring(3); // setZIndex() -> ZIndex
+ String getterName = findGetter(beanType, setterMethod);
+
+ if (getterName == null) {
+ logger.log(TreeLogger.ERROR, "No getter found for " + fieldName
+ + ". Serialization will likely fail");
+ }
+ // json.put("button",
+ // JsonEncoder.encode(castedValue.getButton(), false, idMapper,
+ // connection));
+ sourceWriter.println("json.put(\"" + fieldName + "\", "
+ + JsonEncoder.class.getName() + ".encode(castedValue."
+ + getterName + "(), false, idMapper, connection));");
+ }
+ // return json;
+ sourceWriter.println("return json;");
}
@@ -246,10 +340,6 @@ public class SerializerGenerator extends Generator {
return setterMethods;
}
- private String decapitalize(String name) {
- return name.substring(0, 1).toLowerCase() + name.substring(1);
- }
-
private static String getSerializerSimpleClassName(JClassType beanType) {
return getSimpleClassName(beanType) + "_Serializer";
}
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/SerializerMapGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/SerializerMapGenerator.java
index 013df4710c..07efcda91b 100644
--- a/src/com/vaadin/terminal/gwt/widgetsetutils/SerializerMapGenerator.java
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/SerializerMapGenerator.java
@@ -301,9 +301,6 @@ public class SerializerMapGenerator extends Generator {
if (setterType.isArray() != null) {
return true;
}
- if (setterType.isEnum() != null) {
- return true;
- }
if (setterType.isPrimitive() != null) {
return true;
}
diff --git a/src/com/vaadin/ui/AbstractComponent.java b/src/com/vaadin/ui/AbstractComponent.java
index 79a07ae00e..554d7806f9 100644
--- a/src/com/vaadin/ui/AbstractComponent.java
+++ b/src/com/vaadin/ui/AbstractComponent.java
@@ -18,7 +18,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -821,19 +820,27 @@ public abstract class AbstractComponent implements Component, MethodEventSource
*/
protected ComponentState createState() {
try {
+ return getStateType().newInstance();
+ } catch (Exception e) {
+ throw new RuntimeException(
+ "Error creating state of type " + getStateType().getName()
+ + " for " + getClass().getName(), e);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.vaadin.terminal.gwt.server.ClientConnector#getStateType()
+ */
+ public Class<? extends ComponentState> getStateType() {
+ try {
Method m = getClass().getMethod("getState", (Class[]) null);
Class<? extends ComponentState> type = (Class<? extends ComponentState>) m
.getReturnType();
- return type.newInstance();
+ return type;
} catch (Exception e) {
- getLogger().log(
- Level.INFO,
- "Error determining state object class for "
- + getClass().getName());
+ throw new RuntimeException("Error finding state type for "
+ + getClass().getName(), e);
}
-
- // Fall back to ComponentState if detection fails for some reason.
- return new ComponentState();
}
/* Documentation copied from interface */
diff --git a/src/com/vaadin/ui/AbstractMedia.java b/src/com/vaadin/ui/AbstractMedia.java
index 09cfd5ff12..760d9878ca 100644
--- a/src/com/vaadin/ui/AbstractMedia.java
+++ b/src/com/vaadin/ui/AbstractMedia.java
@@ -5,37 +5,25 @@
package com.vaadin.ui;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
-import java.util.Map;
-import com.vaadin.terminal.PaintException;
-import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.Vaadin6Component;
-import com.vaadin.terminal.gwt.client.ui.MediaBaseConnector;
+import com.vaadin.terminal.gwt.client.communication.URLReference;
+import com.vaadin.terminal.gwt.client.ui.AbstractMediaState;
import com.vaadin.terminal.gwt.client.ui.MediaBaseConnector.MediaControl;
+import com.vaadin.terminal.gwt.server.ResourceReference;
/**
* Abstract base class for the HTML5 media components.
*
* @author Vaadin Ltd
*/
-public class AbstractMedia extends AbstractComponent implements
- Vaadin6Component {
+public class AbstractMedia extends AbstractComponent {
- private List<Resource> sources = new ArrayList<Resource>();
-
- private boolean showControls;
-
- private String altText;
-
- private boolean htmlContentAllowed;
-
- private boolean autoplay;
-
- private boolean muted;
+ @Override
+ public AbstractMediaState getState() {
+ return (AbstractMediaState) super.getState();
+ }
/**
* Sets a single media file as the source of the media component.
@@ -43,10 +31,16 @@ public class AbstractMedia extends AbstractComponent implements
* @param source
*/
public void setSource(Resource source) {
- sources.clear();
+ clearSources();
+
addSource(source);
}
+ private void clearSources() {
+ getState().getSources().clear();
+ getState().getSourceTypes().clear();
+ }
+
/**
* Adds an alternative media file to the sources list. Which of the sources
* is used is selected by the browser depending on which file formats it
@@ -58,7 +52,8 @@ public class AbstractMedia extends AbstractComponent implements
*/
public void addSource(Resource source) {
if (source != null) {
- sources.add(source);
+ getState().getSources().add(new ResourceReference(source));
+ getState().getSourceTypes().add(source.getMIMEType());
requestRepaint();
}
}
@@ -72,15 +67,21 @@ public class AbstractMedia extends AbstractComponent implements
* @param sources
*/
public void setSources(Resource... sources) {
- this.sources.addAll(Arrays.asList(sources));
- requestRepaint();
+ clearSources();
+ for (Resource source : sources) {
+ addSource(source);
+ }
}
/**
* @return The sources pointed to in this media.
*/
public List<Resource> getSources() {
- return Collections.unmodifiableList(sources);
+ ArrayList<Resource> sources = new ArrayList<Resource>();
+ for (URLReference ref : getState().getSources()) {
+ sources.add(((ResourceReference) ref).getResource());
+ }
+ return sources;
}
/**
@@ -89,7 +90,7 @@ public class AbstractMedia extends AbstractComponent implements
* @param showControls
*/
public void setShowControls(boolean showControls) {
- this.showControls = showControls;
+ getState().setShowControls(showControls);
requestRepaint();
}
@@ -97,7 +98,7 @@ public class AbstractMedia extends AbstractComponent implements
* @return true if the browser is to show native media controls.
*/
public boolean isShowControls() {
- return showControls;
+ return getState().isShowControls();
}
/**
@@ -109,10 +110,10 @@ public class AbstractMedia extends AbstractComponent implements
* "https://developer.mozilla.org/En/Using_audio_and_video_in_Firefox#Using_Flash"
* >Mozilla Developer Network</a> for details.
*
- * @param text
+ * @param altText
*/
- public void setAltText(String text) {
- altText = text;
+ public void setAltText(String altText) {
+ getState().setAltText(altText);
requestRepaint();
}
@@ -121,7 +122,7 @@ public class AbstractMedia extends AbstractComponent implements
* HTML5.
*/
public String getAltText() {
- return altText;
+ return getState().getAltText();
}
/**
@@ -131,7 +132,7 @@ public class AbstractMedia extends AbstractComponent implements
* @param htmlContentAllowed
*/
public void setHtmlContentAllowed(boolean htmlContentAllowed) {
- this.htmlContentAllowed = htmlContentAllowed;
+ getState().setHtmlContentAllowed(htmlContentAllowed);
requestRepaint();
}
@@ -140,7 +141,7 @@ public class AbstractMedia extends AbstractComponent implements
* be rendered as HTML.
*/
public boolean isHtmlContentAllowed() {
- return htmlContentAllowed;
+ return getState().isHtmlContentAllowed();
}
/**
@@ -150,7 +151,7 @@ public class AbstractMedia extends AbstractComponent implements
* @param autoplay
*/
public void setAutoplay(boolean autoplay) {
- this.autoplay = autoplay;
+ getState().setAutoplay(autoplay);
requestRepaint();
}
@@ -158,7 +159,7 @@ public class AbstractMedia extends AbstractComponent implements
* @return true if the media is set to automatically start playback.
*/
public boolean isAutoplay() {
- return autoplay;
+ return getState().isAutoplay();
}
/**
@@ -167,7 +168,7 @@ public class AbstractMedia extends AbstractComponent implements
* @param muted
*/
public void setMuted(boolean muted) {
- this.muted = muted;
+ getState().setMuted(muted);
requestRepaint();
}
@@ -175,7 +176,7 @@ public class AbstractMedia extends AbstractComponent implements
* @return true if the audio is muted.
*/
public boolean isMuted() {
- return muted;
+ return getState().isMuted();
}
/**
@@ -192,25 +193,4 @@ public class AbstractMedia extends AbstractComponent implements
getRpcProxy(MediaControl.class).play();
}
- public void paintContent(PaintTarget target) throws PaintException {
- target.addAttribute(MediaBaseConnector.ATTR_CONTROLS, isShowControls());
- if (getAltText() != null) {
- target.addAttribute(MediaBaseConnector.ATTR_ALT_TEXT, getAltText());
- }
- target.addAttribute(MediaBaseConnector.ATTR_HTML,
- isHtmlContentAllowed());
- target.addAttribute(MediaBaseConnector.ATTR_AUTOPLAY, isAutoplay());
- for (Resource r : getSources()) {
- target.startTag(MediaBaseConnector.TAG_SOURCE);
- target.addAttribute(MediaBaseConnector.ATTR_RESOURCE, r);
- target.addAttribute(MediaBaseConnector.ATTR_RESOURCE_TYPE,
- r.getMIMEType());
- target.endTag(MediaBaseConnector.TAG_SOURCE);
- }
- target.addAttribute(MediaBaseConnector.ATTR_MUTED, isMuted());
- }
-
- public void changeVariables(Object source, Map<String, Object> variables) {
- // TODO Remove once Vaadin6Component is no longer implemented
- }
}
diff --git a/src/com/vaadin/ui/AbstractOrderedLayout.java b/src/com/vaadin/ui/AbstractOrderedLayout.java
index 3606fa6572..2cd6fc2a9a 100644
--- a/src/com/vaadin/ui/AbstractOrderedLayout.java
+++ b/src/com/vaadin/ui/AbstractOrderedLayout.java
@@ -4,28 +4,23 @@
package com.vaadin.ui;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
-import java.util.Map;
import com.vaadin.event.LayoutEvents.LayoutClickEvent;
import com.vaadin.event.LayoutEvents.LayoutClickListener;
import com.vaadin.event.LayoutEvents.LayoutClickNotifier;
-import com.vaadin.terminal.PaintException;
-import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Sizeable;
-import com.vaadin.terminal.Vaadin6Component;
import com.vaadin.terminal.gwt.client.Connector;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler;
import com.vaadin.terminal.gwt.client.ui.orderedlayout.AbstractOrderedLayoutServerRpc;
import com.vaadin.terminal.gwt.client.ui.orderedlayout.AbstractOrderedLayoutState;
+import com.vaadin.terminal.gwt.client.ui.orderedlayout.AbstractOrderedLayoutState.ChildComponentData;
@SuppressWarnings("serial")
public abstract class AbstractOrderedLayout extends AbstractLayout implements
- Layout.AlignmentHandler, Layout.SpacingHandler, LayoutClickNotifier,
- Vaadin6Component {
+ Layout.AlignmentHandler, Layout.SpacingHandler, LayoutClickNotifier {
private AbstractOrderedLayoutServerRpc rpc = new AbstractOrderedLayoutServerRpc() {
@@ -48,10 +43,6 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
/**
* Mapping from components to alignments (horizontal + vertical).
*/
- private final Map<Component, Alignment> componentToAlignment = new HashMap<Component, Alignment>();
-
- private final Map<Component, Float> componentToExpandRatio = new HashMap<Component, Float>();
-
public AbstractOrderedLayout() {
registerRpc(rpc);
}
@@ -75,11 +66,11 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
components.add(c);
try {
super.addComponent(c);
- requestRepaint();
} catch (IllegalArgumentException e) {
components.remove(c);
throw e;
}
+ componentAdded(c);
}
/**
@@ -98,11 +89,12 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
components.addFirst(c);
try {
super.addComponent(c);
- requestRepaint();
} catch (IllegalArgumentException e) {
components.remove(c);
throw e;
}
+ componentAdded(c);
+
}
/**
@@ -127,11 +119,23 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
components.add(index, c);
try {
super.addComponent(c);
- requestRepaint();
} catch (IllegalArgumentException e) {
components.remove(c);
throw e;
}
+
+ componentAdded(c);
+ }
+
+ private void componentRemoved(Component c) {
+ getState().getChildData().remove(c);
+ requestRepaint();
+ }
+
+ private void componentAdded(Component c) {
+ getState().getChildData().put(c, new ChildComponentData());
+ requestRepaint();
+
}
/**
@@ -143,10 +147,8 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
@Override
public void removeComponent(Component c) {
components.remove(c);
- componentToAlignment.remove(c);
- componentToExpandRatio.remove(c);
super.removeComponent(c);
- requestRepaint();
+ componentRemoved(c);
}
/**
@@ -169,24 +171,6 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
return components.size();
}
- /**
- * Paints the content of this component.
- *
- * @param target
- * the Paint Event.
- * @throws PaintException
- * if the paint operation failed.
- */
- public void paintContent(PaintTarget target) throws PaintException {
- // Add child component alignment info to layout tag
- target.addAttribute("alignments", componentToAlignment);
- target.addAttribute("expandRatios", componentToExpandRatio);
- }
-
- public void changeVariables(Object source, Map<String, Object> variables) {
- // TODO Remove once Vaadin6Component is no longer implemented
- }
-
/* Documented in superclass */
public void replaceComponent(Component oldComponent, Component newComponent) {
@@ -213,17 +197,16 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
removeComponent(oldComponent);
addComponent(newComponent, oldLocation);
} else {
+ // Both old and new are in the layout
if (oldLocation > newLocation) {
components.remove(oldComponent);
components.add(newLocation, oldComponent);
components.remove(newComponent);
- componentToAlignment.remove(newComponent);
components.add(oldLocation, newComponent);
} else {
components.remove(newComponent);
components.add(oldLocation, newComponent);
components.remove(oldComponent);
- componentToAlignment.remove(oldComponent);
components.add(newLocation, oldComponent);
}
@@ -239,21 +222,17 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
*/
public void setComponentAlignment(Component childComponent,
int horizontalAlignment, int verticalAlignment) {
- if (components.contains(childComponent)) {
- // Alignments are bit masks
- componentToAlignment.put(childComponent, new Alignment(
- horizontalAlignment + verticalAlignment));
- requestRepaint();
- } else {
- throw new IllegalArgumentException(
- "Component must be added to layout before using setComponentAlignment()");
- }
+ Alignment a = new Alignment(horizontalAlignment + verticalAlignment);
+ setComponentAlignment(childComponent, a);
}
public void setComponentAlignment(Component childComponent,
Alignment alignment) {
- if (components.contains(childComponent)) {
- componentToAlignment.put(childComponent, alignment);
+ ChildComponentData childData = getState().getChildData().get(
+ childComponent);
+ if (childData != null) {
+ // Alignments are bit masks
+ childData.setAlignmentBitmask(alignment.getBitMask());
requestRepaint();
} else {
throw new IllegalArgumentException(
@@ -269,12 +248,14 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
* .vaadin.ui.Component)
*/
public Alignment getComponentAlignment(Component childComponent) {
- Alignment alignment = componentToAlignment.get(childComponent);
- if (alignment == null) {
- return ALIGNMENT_DEFAULT;
- } else {
- return alignment;
+ ChildComponentData childData = getState().getChildData().get(
+ childComponent);
+ if (childData == null) {
+ throw new IllegalArgumentException(
+ "The given component is not a child of this layout");
}
+
+ return new Alignment(childData.getAlignmentBitmask());
}
/*
@@ -326,13 +307,14 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
* @param ratio
*/
public void setExpandRatio(Component component, float ratio) {
- if (components.contains(component)) {
- componentToExpandRatio.put(component, ratio);
- requestRepaint();
- } else {
+ ChildComponentData childData = getState().getChildData().get(component);
+ if (childData == null) {
throw new IllegalArgumentException(
- "Component must be added to layout before using setExpandRatio()");
+ "The given component is not a child of this layout");
}
+
+ childData.setExpandRatio(ratio);
+ requestRepaint();
};
/**
@@ -340,11 +322,16 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
*
* @param component
* which expand ratios is requested
- * @return expand ratio of given component, 0.0f by default
+ * @return expand ratio of given component, 0.0f by default.
*/
public float getExpandRatio(Component component) {
- Float ratio = componentToExpandRatio.get(component);
- return (ratio == null) ? 0 : ratio.floatValue();
+ ChildComponentData childData = getState().getChildData().get(component);
+ if (childData == null) {
+ throw new IllegalArgumentException(
+ "The given component is not a child of this layout");
+ }
+
+ return childData.getExpandRatio();
}
public void addListener(LayoutClickListener listener) {
diff --git a/src/com/vaadin/ui/AbstractTextField.java b/src/com/vaadin/ui/AbstractTextField.java
index acb1d71ed8..d584374bda 100644
--- a/src/com/vaadin/ui/AbstractTextField.java
+++ b/src/com/vaadin/ui/AbstractTextField.java
@@ -4,7 +4,6 @@
package com.vaadin.ui;
-import java.text.Format;
import java.util.Map;
import com.vaadin.event.FieldEvents.BlurEvent;
@@ -19,18 +18,13 @@ import com.vaadin.event.FieldEvents.TextChangeNotifier;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Vaadin6Component;
+import com.vaadin.terminal.gwt.client.ui.textfield.AbstractTextFieldState;
import com.vaadin.terminal.gwt.client.ui.textfield.VTextField;
public abstract class AbstractTextField extends AbstractField<String> implements
BlurNotifier, FocusNotifier, TextChangeNotifier, Vaadin6Component {
/**
- * Value formatter used to format the string contents.
- */
- @Deprecated
- private Format format;
-
- /**
* Null representation.
*/
private String nullRepresentation = "null";
@@ -40,21 +34,6 @@ public abstract class AbstractTextField extends AbstractField<String> implements
*/
private boolean nullSettingAllowed = false;
/**
- * Maximum character count in text field.
- */
- private int maxLength = -1;
-
- /**
- * Number of visible columns in the TextField.
- */
- private int columns = 0;
-
- /**
- * The prompt to display in an empty field. Null when disabled.
- */
- private String inputPrompt = null;
-
- /**
* The text content when the last messages to the server was sent. Cleared
* when value is changed.
*/
@@ -100,32 +79,23 @@ public abstract class AbstractTextField extends AbstractField<String> implements
super();
}
- public void paintContent(PaintTarget target) throws PaintException {
-
- if (getMaxLength() >= 0) {
- target.addAttribute("maxLength", getMaxLength());
- }
-
- // Adds the number of column and rows
- final int columns = getColumns();
- if (columns != 0) {
- target.addAttribute("cols", String.valueOf(columns));
- }
+ @Override
+ public AbstractTextFieldState getState() {
+ return (AbstractTextFieldState) super.getState();
+ }
- if (getInputPrompt() != null) {
- target.addAttribute("prompt", getInputPrompt());
- }
+ @Override
+ public void updateState() {
+ super.updateState();
- // Adds the content as variable
- String value = getFormattedValue();
+ String value = getValue();
if (value == null) {
value = getNullRepresentation();
}
- if (value == null) {
- throw new IllegalStateException(
- "Null values are not allowed if the null-representation is null");
- }
- target.addVariable(this, "text", value);
+ getState().setText(value);
+ }
+
+ public void paintContent(PaintTarget target) throws PaintException {
if (selectionPosition != -1) {
target.addAttribute("selpos", selectionPosition);
@@ -153,37 +123,6 @@ public abstract class AbstractTextField extends AbstractField<String> implements
}
- /**
- * Gets the formatted string value. Sets the field value by using the
- * assigned Format.
- *
- * @return the Formatted value.
- * @see #setFormat(Format)
- * @see Format
- * @deprecated
- */
- @Deprecated
- protected String getFormattedValue() {
- Object v = getValue();
- if (v == null) {
- return null;
- }
- return v.toString();
- }
-
- @Override
- public String getValue() {
- String v = super.getValue();
- if (format == null || v == null) {
- return v;
- }
- try {
- return format.format(v);
- } catch (final IllegalArgumentException e) {
- return v;
- }
- }
-
public void changeVariables(Object source, Map<String, Object> variables) {
changingVariables = true;
@@ -215,7 +154,7 @@ public abstract class AbstractTextField extends AbstractField<String> implements
if (getMaxLength() != -1 && newValue.length() > getMaxLength()) {
newValue = newValue.substring(0, getMaxLength());
}
- final String oldValue = getFormattedValue();
+ final String oldValue = getValue();
if (newValue != null
&& (oldValue == null || isNullSettingAllowed())
&& newValue.equals(getNullRepresentation())) {
@@ -228,7 +167,7 @@ public abstract class AbstractTextField extends AbstractField<String> implements
// If the modified status changes, or if we have a
// formatter, repaint is needed after all.
- if (format != null || wasModified != isModified()) {
+ if (wasModified != isModified()) {
requestRepaint();
}
}
@@ -345,31 +284,6 @@ public abstract class AbstractTextField extends AbstractField<String> implements
requestRepaint();
}
- /**
- * Gets the value formatter of TextField.
- *
- * @return the Format used to format the value.
- * @deprecated replaced by {@link com.vaadin.data.util.PropertyFormatter}
- */
- @Deprecated
- public Format getFormat() {
- return format;
- }
-
- /**
- * Gets the value formatter of TextField.
- *
- * @param format
- * the Format used to format the value. Null disables the
- * formatting.
- * @deprecated replaced by {@link com.vaadin.data.util.PropertyFormatter}
- */
- @Deprecated
- public void setFormat(Format format) {
- this.format = format;
- requestRepaint();
- }
-
@Override
protected boolean isEmpty() {
return super.isEmpty() || getValue().length() == 0;
@@ -382,7 +296,7 @@ public abstract class AbstractTextField extends AbstractField<String> implements
* @return the maxLength
*/
public int getMaxLength() {
- return maxLength;
+ return getState().getMaxLength();
}
/**
@@ -393,7 +307,7 @@ public abstract class AbstractTextField extends AbstractField<String> implements
* the maxLength to set
*/
public void setMaxLength(int maxLength) {
- this.maxLength = maxLength;
+ getState().setMaxLength(maxLength);
requestRepaint();
}
@@ -405,7 +319,7 @@ public abstract class AbstractTextField extends AbstractField<String> implements
* @return the number of columns in the editor.
*/
public int getColumns() {
- return columns;
+ return getState().getColumns();
}
/**
@@ -420,7 +334,7 @@ public abstract class AbstractTextField extends AbstractField<String> implements
if (columns < 0) {
columns = 0;
}
- this.columns = columns;
+ getState().setColumns(columns);
requestRepaint();
}
@@ -431,7 +345,7 @@ public abstract class AbstractTextField extends AbstractField<String> implements
* @return the current input prompt, or null if not enabled
*/
public String getInputPrompt() {
- return inputPrompt;
+ return getState().getInputPrompt();
}
/**
@@ -441,7 +355,7 @@ public abstract class AbstractTextField extends AbstractField<String> implements
* @param inputPrompt
*/
public void setInputPrompt(String inputPrompt) {
- this.inputPrompt = inputPrompt;
+ getState().setInputPrompt(inputPrompt);
requestRepaint();
}
diff --git a/src/com/vaadin/ui/Label.java b/src/com/vaadin/ui/Label.java
index e52090aa5f..99a0f89e5c 100644
--- a/src/com/vaadin/ui/Label.java
+++ b/src/com/vaadin/ui/Label.java
@@ -5,13 +5,11 @@
package com.vaadin.ui;
import java.lang.reflect.Method;
-import java.util.Map;
import com.vaadin.data.Property;
import com.vaadin.data.util.ObjectProperty;
-import com.vaadin.terminal.PaintException;
-import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.Vaadin6Component;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
+import com.vaadin.terminal.gwt.client.ui.label.LabelState;
/**
* Label component for showing non-editable short texts.
@@ -41,120 +39,7 @@ import com.vaadin.terminal.Vaadin6Component;
// TODO generics for interface Property
public class Label extends AbstractComponent implements Property,
Property.Viewer, Property.ValueChangeListener,
- Property.ValueChangeNotifier, Comparable<Object>, Vaadin6Component {
-
- /**
- * Content modes defining how the client should interpret a Label's value.
- *
- * @sine 7.0
- */
- public enum ContentMode {
- /**
- * Content mode, where the label contains only plain text. The
- * getValue() result is coded to XML when painting.
- */
- TEXT(null) {
- @Override
- public void paintText(String text, PaintTarget target)
- throws PaintException {
- target.addText(text);
- }
- },
-
- /**
- * Content mode, where the label contains preformatted text.
- */
- PREFORMATTED("pre") {
- @Override
- public void paintText(String text, PaintTarget target)
- throws PaintException {
- target.startTag("pre");
- target.addText(text);
- target.endTag("pre");
- }
- },
-
- /**
- * Content mode, where the label contains XHTML. Contents is then
- * enclosed in DIV elements having namespace of
- * "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd".
- */
- XHTML("xhtml") {
- @Override
- public void paintText(String text, PaintTarget target)
- throws PaintException {
- target.startTag("data");
- target.addXMLSection("div", text,
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd");
- target.endTag("data");
- }
- },
-
- /**
- * Content mode, where the label contains well-formed or well-balanced
- * XML. Each of the root elements must have their default namespace
- * specified.
- */
- XML("xml") {
- @Override
- public void paintText(String text, PaintTarget target)
- throws PaintException {
- target.addXMLSection("data", text, null);
- }
- },
-
- /**
- * Content mode, where the label contains RAW output. Output is not
- * required to comply to with XML. In Web Adapter output is inserted
- * inside the resulting HTML document as-is. This is useful for some
- * specific purposes where possibly broken HTML content needs to be
- * shown, but in most cases XHTML mode should be preferred.
- */
- RAW("raw") {
- @Override
- public void paintText(String text, PaintTarget target)
- throws PaintException {
- target.startTag("data");
- target.addAttribute("escape", false);
- target.addText(text);
- target.endTag("data");
- }
- };
-
- private final String uidlName;
-
- /**
- * The default content mode is text
- */
- public static ContentMode DEFAULT = TEXT;
-
- private ContentMode(String uidlName) {
- this.uidlName = uidlName;
- }
-
- /**
- * Gets the name representing this content mode in UIDL messages
- *
- * @return the UIDL name of this content mode
- */
- public String getUidlName() {
- return uidlName;
- }
-
- /**
- * Adds the text value to a {@link PaintTarget} according to this
- * content mode
- *
- * @param text
- * the text to add
- * @param target
- * the paint target to add the value to
- * @throws PaintException
- * if the paint operation failed
- */
- public abstract void paintText(String text, PaintTarget target)
- throws PaintException;
- }
+ Property.ValueChangeNotifier, Comparable<Object> {
/**
* @deprecated From 7.0, use {@link ContentMode#TEXT} instead
@@ -187,17 +72,15 @@ public class Label extends AbstractComponent implements Property,
public static final ContentMode CONTENT_RAW = ContentMode.RAW;
/**
- * @deprecated From 7.0, use {@link ContentMode#DEFAULT} instead
+ * @deprecated From 7.0, use {@link ContentMode#TEXT} instead
*/
@Deprecated
- public static final ContentMode CONTENT_DEFAULT = ContentMode.DEFAULT;
+ public static final ContentMode CONTENT_DEFAULT = ContentMode.TEXT;
private static final String DATASOURCE_MUST_BE_SET = "Datasource must be set";
private Property dataSource;
- private ContentMode contentMode = ContentMode.DEFAULT;
-
/**
* Creates an empty Label.
*/
@@ -211,7 +94,7 @@ public class Label extends AbstractComponent implements Property,
* @param content
*/
public Label(String content) {
- this(content, ContentMode.DEFAULT);
+ this(content, ContentMode.TEXT);
}
/**
@@ -221,7 +104,7 @@ public class Label extends AbstractComponent implements Property,
* @param contentSource
*/
public Label(Property contentSource) {
- this(contentSource, ContentMode.DEFAULT);
+ this(contentSource, ContentMode.TEXT);
}
/**
@@ -243,27 +126,21 @@ public class Label extends AbstractComponent implements Property,
*/
public Label(Property contentSource, ContentMode contentMode) {
setPropertyDataSource(contentSource);
- if (contentMode != ContentMode.DEFAULT) {
- setContentMode(contentMode);
- }
+ setContentMode(contentMode);
setWidth(100, UNITS_PERCENTAGE);
}
- /**
- * Paints the content of this component.
- *
- * @param target
- * the Paint Event.
- * @throws PaintException
- * if the Paint Operation fails.
- */
- public void paintContent(PaintTarget target) throws PaintException {
- String uidlName = contentMode.getUidlName();
- if (uidlName != null) {
- target.addAttribute("mode", uidlName);
- }
- contentMode.paintText(getStringValue(), target);
+ @Override
+ public void updateState() {
+ super.updateState();
+ // We don't know when the text is updated so update it here before
+ // sending the state to the client
+ getState().setText(getStringValue());
+ }
+ @Override
+ public LabelState getState() {
+ return (LabelState) super.getState();
}
/**
@@ -381,7 +258,7 @@ public class Label extends AbstractComponent implements Property,
* @see ContentMode
*/
public ContentMode getContentMode() {
- return contentMode;
+ return getState().getContentMode();
}
/**
@@ -396,10 +273,9 @@ public class Label extends AbstractComponent implements Property,
if (contentMode == null) {
throw new IllegalArgumentException("Content mode can not be null");
}
- if (contentMode != this.contentMode) {
- this.contentMode = contentMode;
- requestRepaint();
- }
+
+ getState().setContentMode(contentMode);
+ requestRepaint();
}
/* Value change events */
@@ -516,7 +392,8 @@ public class Label extends AbstractComponent implements Property,
String thisValue;
String otherValue;
- if (contentMode == ContentMode.XML || contentMode == ContentMode.XHTML) {
+ if (getContentMode() == ContentMode.XML
+ || getContentMode() == ContentMode.XHTML) {
thisValue = stripTags(getStringValue());
} else {
thisValue = getStringValue();
@@ -566,8 +443,4 @@ public class Label extends AbstractComponent implements Property,
return res.toString();
}
- public void changeVariables(Object source, Map<String, Object> variables) {
- // TODO Remove once Vaadin6Component is no longer implemented
- }
-
}
diff --git a/src/com/vaadin/ui/Root.java b/src/com/vaadin/ui/Root.java
index 405ae8da93..93b98693c2 100644
--- a/src/com/vaadin/ui/Root.java
+++ b/src/com/vaadin/ui/Root.java
@@ -30,7 +30,6 @@ import com.vaadin.terminal.Resource;
import com.vaadin.terminal.Vaadin6Component;
import com.vaadin.terminal.WrappedRequest;
import com.vaadin.terminal.WrappedRequest.BrowserDetails;
-import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.notification.VNotification;
import com.vaadin.terminal.gwt.client.ui.root.RootServerRpc;
@@ -475,10 +474,10 @@ public abstract class Root extends AbstractComponentContainer implements
}
@Override
- protected ComponentState createState() {
+ public Class<? extends RootState> getStateType() {
// This is a workaround for a problem with creating the correct state
// object during build
- return new RootState();
+ return RootState.class;
}
/**
@@ -644,6 +643,10 @@ public abstract class Root extends AbstractComponentContainer implements
* @see com.vaadin.ui.ComponentContainer#getComponentIterator()
*/
public Iterator<Component> getComponentIterator() {
+ if (getContent() == null) {
+ return Collections.EMPTY_LIST.iterator();
+ }
+
return Collections.singleton((Component) getContent()).iterator();
}
diff --git a/src/com/vaadin/ui/TextArea.java b/src/com/vaadin/ui/TextArea.java
index adb980818e..4c0b563b00 100644
--- a/src/com/vaadin/ui/TextArea.java
+++ b/src/com/vaadin/ui/TextArea.java
@@ -5,26 +5,13 @@
package com.vaadin.ui;
import com.vaadin.data.Property;
-import com.vaadin.terminal.PaintException;
-import com.vaadin.terminal.PaintTarget;
+import com.vaadin.terminal.gwt.client.ui.textarea.TextAreaState;
/**
* A text field that supports multi line editing.
*/
public class TextArea extends AbstractTextField {
- private static final int DEFAULT_ROWS = 5;
-
- /**
- * Number of visible rows in the text area.
- */
- private int rows = DEFAULT_ROWS;
-
- /**
- * Tells if word-wrapping should be used in the text area.
- */
- private boolean wordwrap = true;
-
/**
* Constructs an empty TextArea.
*/
@@ -81,6 +68,11 @@ public class TextArea extends AbstractTextField {
}
+ @Override
+ public TextAreaState getState() {
+ return (TextAreaState) super.getState();
+ }
+
/**
* Sets the number of rows in the text area.
*
@@ -91,10 +83,8 @@ public class TextArea extends AbstractTextField {
if (rows < 0) {
rows = 0;
}
- if (this.rows != rows) {
- this.rows = rows;
- requestRepaint();
- }
+ getState().setRows(rows);
+ requestRepaint();
}
/**
@@ -103,7 +93,7 @@ public class TextArea extends AbstractTextField {
* @return number of explicitly set rows.
*/
public int getRows() {
- return rows;
+ return getState().getRows();
}
/**
@@ -114,10 +104,8 @@ public class TextArea extends AbstractTextField {
* word-wrap mode.
*/
public void setWordwrap(boolean wordwrap) {
- if (this.wordwrap != wordwrap) {
- this.wordwrap = wordwrap;
- requestRepaint();
- }
+ getState().setWordwrap(wordwrap);
+ requestRepaint();
}
/**
@@ -127,19 +115,7 @@ public class TextArea extends AbstractTextField {
* <code>false</code> if not.
*/
public boolean isWordwrap() {
- return wordwrap;
+ return getState().isWordwrap();
}
- @Override
- public void paintContent(PaintTarget target) throws PaintException {
- super.paintContent(target);
-
- target.addAttribute("rows", getRows());
-
- if (!isWordwrap()) {
- // Wordwrap is only painted if turned off to minimize communications
- target.addAttribute("wordwrap", false);
- }
-
- }
}
diff --git a/src/com/vaadin/ui/Video.java b/src/com/vaadin/ui/Video.java
index 28fbfb0547..0a2eccca0f 100644
--- a/src/com/vaadin/ui/Video.java
+++ b/src/com/vaadin/ui/Video.java
@@ -4,10 +4,9 @@
package com.vaadin.ui;
-import com.vaadin.terminal.PaintException;
-import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.gwt.client.ui.video.VideoConnector;
+import com.vaadin.terminal.gwt.client.ui.video.VideoState;
+import com.vaadin.terminal.gwt.server.ResourceReference;
/**
* The Video component translates into an HTML5 &lt;video&gt; element and as
@@ -32,7 +31,10 @@ import com.vaadin.terminal.gwt.client.ui.video.VideoConnector;
*/
public class Video extends AbstractMedia {
- private Resource poster;
+ @Override
+ public VideoState getState() {
+ return (VideoState) super.getState();
+ }
public Video() {
this("", null);
@@ -65,21 +67,15 @@ public class Video extends AbstractMedia {
* @param poster
*/
public void setPoster(Resource poster) {
- this.poster = poster;
+ getState().setPoster(new ResourceReference(poster));
+ requestRepaint();
}
/**
* @return The poster image.
*/
public Resource getPoster() {
- return poster;
+ return ((ResourceReference) getState().getPoster()).getResource();
}
- @Override
- public void paintContent(PaintTarget target) throws PaintException {
- super.paintContent(target);
- if (getPoster() != null) {
- target.addAttribute(VideoConnector.ATTR_POSTER, getPoster());
- }
- }
}
diff --git a/tests/client-side/com/vaadin/terminal/gwt/server/JSONSerializerTest.java b/tests/client-side/com/vaadin/terminal/gwt/server/JSONSerializerTest.java
new file mode 100644
index 0000000000..926f026b40
--- /dev/null
+++ b/tests/client-side/com/vaadin/terminal/gwt/server/JSONSerializerTest.java
@@ -0,0 +1,146 @@
+package com.vaadin.terminal.gwt.server;
+
+/*
+ @VaadinApache2LicenseForJavaFiles@
+ */
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Type;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import com.vaadin.external.json.JSONArray;
+import com.vaadin.terminal.gwt.client.communication.JsonDecoder;
+import com.vaadin.terminal.gwt.client.communication.JsonEncoder;
+import com.vaadin.terminal.gwt.client.ui.splitpanel.AbstractSplitPanelState;
+
+/**
+ * Tests for {@link JsonCodec}, {@link JsonEncoder}, {@link JsonDecoder}
+ *
+ * @author Vaadin Ltd
+ * @version @VERSION@
+ * @since 7.0
+ *
+ */
+public class JSONSerializerTest extends TestCase {
+ HashMap<String, AbstractSplitPanelState> stringToStateMap;
+ HashMap<AbstractSplitPanelState, String> stateToStringMap;
+
+ public void testStringToBeanMapSerialization() throws Exception {
+ Type mapType = getClass().getDeclaredField("stringToStateMap")
+ .getGenericType();
+ stringToStateMap = new HashMap<String, AbstractSplitPanelState>();
+ AbstractSplitPanelState s = new AbstractSplitPanelState();
+ AbstractSplitPanelState s2 = new AbstractSplitPanelState();
+ s.setCaption("State 1");
+ s.setDebugId("foo");
+ s2.setCaption("State 2");
+ s2.setDebugId("bar");
+ stringToStateMap.put("string - state 1", s);
+ stringToStateMap.put("String - state 2", s2);
+
+ JSONArray encodedMap = JsonCodec.encode(stringToStateMap, null,
+ mapType, null);
+
+ ensureDecodedCorrectly(stringToStateMap, encodedMap, mapType);
+ }
+
+ public void testBeanToStringMapSerialization() throws Exception {
+ Type mapType = getClass().getDeclaredField("stateToStringMap")
+ .getGenericType();
+ stateToStringMap = new HashMap<AbstractSplitPanelState, String>();
+ AbstractSplitPanelState s = new AbstractSplitPanelState();
+ AbstractSplitPanelState s2 = new AbstractSplitPanelState();
+ s.setCaption("State 1");
+ s2.setCaption("State 2");
+ stateToStringMap.put(s, "string - state 1");
+ stateToStringMap.put(s2, "String - state 2");
+
+ JSONArray encodedMap = JsonCodec.encode(stateToStringMap, null,
+ mapType, null);
+
+ ensureDecodedCorrectly(stateToStringMap, encodedMap, mapType);
+ }
+
+ private void ensureDecodedCorrectly(Object original, JSONArray encoded,
+ Type type) throws Exception {
+ Object serverSideDecoded = JsonCodec.decodeInternalOrCustomType(type,
+ encoded, null);
+ assertTrue("Server decoded", equals(original, serverSideDecoded));
+
+ // Object clientSideDecoded = JsonDecoder.decodeValue(
+ // (com.google.gwt.json.client.JSONArray) JSONParser
+ // .parseStrict(encoded.toString()), null, null, null);
+ // assertTrue("Client decoded",
+ // equals(original, clientSideDecoded));
+
+ }
+
+ private boolean equals(Object o1, Object o2) throws Exception {
+ if (o1 == null) {
+ return (o2 == null);
+ }
+ if (o2 == null) {
+ return false;
+ }
+
+ if (o1 instanceof Map) {
+ if (!(o2 instanceof Map)) {
+ return false;
+ }
+ return equalsMap((Map) o1, (Map) o2);
+ }
+
+ if (o1.getClass() != o2.getClass()) {
+ return false;
+ }
+
+ if (o1 instanceof Collection || o1 instanceof Number
+ || o1 instanceof String) {
+ return o1.equals(o2);
+ }
+
+ return equalsBean(o1, o2);
+ }
+
+ private boolean equalsBean(Object o1, Object o2) throws Exception {
+ BeanInfo beanInfo = Introspector.getBeanInfo(o1.getClass());
+ for (PropertyDescriptor pd : beanInfo.getPropertyDescriptors()) {
+ String fieldName = JsonCodec.getTransportFieldName(pd);
+ if (fieldName == null) {
+ continue;
+ }
+
+ Object c1 = pd.getReadMethod().invoke(o1);
+ Object c2 = pd.getReadMethod().invoke(o2);
+ if (!equals(c1, c2)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private boolean equalsMap(Map o1, Map o2) throws Exception {
+ for (Object key1 : o1.keySet()) {
+ Object key2 = key1;
+ if (!(o2.containsKey(key2))) {
+ // Try to fins a key that is equal
+ for (Object k2 : o2.keySet()) {
+ if (equals(key1, k2)) {
+ key2 = k2;
+ break;
+ }
+ }
+ }
+ if (!equals(o1.get(key1), o2.get(key2))) {
+ return false;
+ }
+
+ }
+ return true;
+ }
+}
diff --git a/tests/testbench/com/vaadin/tests/Components.java b/tests/testbench/com/vaadin/tests/Components.java
index fa82948e2b..4352072ccf 100644
--- a/tests/testbench/com/vaadin/tests/Components.java
+++ b/tests/testbench/com/vaadin/tests/Components.java
@@ -17,6 +17,7 @@ import com.vaadin.event.ItemClickEvent;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
import com.vaadin.terminal.ExternalResource;
import com.vaadin.terminal.Sizeable;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.AbstractComponentTest;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.Component;
@@ -24,7 +25,6 @@ import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.HorizontalSplitPanel;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.Tree;
import com.vaadin.ui.Tree.ItemStyleGenerator;
diff --git a/tests/testbench/com/vaadin/tests/CustomLayoutDemo.java b/tests/testbench/com/vaadin/tests/CustomLayoutDemo.java
index 62340b7c9e..73282cc1fb 100644
--- a/tests/testbench/com/vaadin/tests/CustomLayoutDemo.java
+++ b/tests/testbench/com/vaadin/tests/CustomLayoutDemo.java
@@ -4,6 +4,7 @@
package com.vaadin.tests;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Component.Event;
@@ -11,7 +12,6 @@ import com.vaadin.ui.Component.Listener;
import com.vaadin.ui.CustomLayout;
import com.vaadin.ui.Field;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Panel;
import com.vaadin.ui.PasswordField;
import com.vaadin.ui.Root.LegacyWindow;
diff --git a/tests/testbench/com/vaadin/tests/LayoutDemo.java b/tests/testbench/com/vaadin/tests/LayoutDemo.java
index d88285468e..d838283cf1 100644
--- a/tests/testbench/com/vaadin/tests/LayoutDemo.java
+++ b/tests/testbench/com/vaadin/tests/LayoutDemo.java
@@ -5,12 +5,12 @@
package com.vaadin.tests;
import com.vaadin.terminal.ClassResource;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Component;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Layout;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Root.LegacyWindow;
diff --git a/tests/testbench/com/vaadin/tests/NativeWindowing.java b/tests/testbench/com/vaadin/tests/NativeWindowing.java
index 1a22b5a4d2..6a561dd861 100644
--- a/tests/testbench/com/vaadin/tests/NativeWindowing.java
+++ b/tests/testbench/com/vaadin/tests/NativeWindowing.java
@@ -8,10 +8,10 @@ import java.net.MalformedURLException;
import java.net.URL;
import com.vaadin.Application;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.Window;
diff --git a/tests/testbench/com/vaadin/tests/PerformanceTestBasicComponentRendering.java b/tests/testbench/com/vaadin/tests/PerformanceTestBasicComponentRendering.java
index a0bd894ebe..0d588a3306 100644
--- a/tests/testbench/com/vaadin/tests/PerformanceTestBasicComponentRendering.java
+++ b/tests/testbench/com/vaadin/tests/PerformanceTestBasicComponentRendering.java
@@ -8,12 +8,12 @@ import java.util.Date;
import java.util.Map;
import com.vaadin.terminal.UserError;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.DateField;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextField;
diff --git a/tests/testbench/com/vaadin/tests/PerformanceTestLabelsAndOrderedLayouts.java b/tests/testbench/com/vaadin/tests/PerformanceTestLabelsAndOrderedLayouts.java
index 93df046fa0..b3f232f24d 100644
--- a/tests/testbench/com/vaadin/tests/PerformanceTestLabelsAndOrderedLayouts.java
+++ b/tests/testbench/com/vaadin/tests/PerformanceTestLabelsAndOrderedLayouts.java
@@ -6,13 +6,13 @@ package com.vaadin.tests;
import java.util.Date;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.VerticalLayout;
public class PerformanceTestLabelsAndOrderedLayouts extends CustomComponent {
diff --git a/tests/testbench/com/vaadin/tests/PerformanceTestSubTreeCaching.java b/tests/testbench/com/vaadin/tests/PerformanceTestSubTreeCaching.java
index 40433fae84..882b776d5d 100644
--- a/tests/testbench/com/vaadin/tests/PerformanceTestSubTreeCaching.java
+++ b/tests/testbench/com/vaadin/tests/PerformanceTestSubTreeCaching.java
@@ -6,11 +6,11 @@ package com.vaadin.tests;
import java.util.Date;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Table;
import com.vaadin.ui.VerticalLayout;
diff --git a/tests/testbench/com/vaadin/tests/TestCaptionWrapper.java b/tests/testbench/com/vaadin/tests/TestCaptionWrapper.java
index 89822a9574..0e49fdd8ae 100644
--- a/tests/testbench/com/vaadin/tests/TestCaptionWrapper.java
+++ b/tests/testbench/com/vaadin/tests/TestCaptionWrapper.java
@@ -8,6 +8,7 @@ import com.vaadin.terminal.ClassResource;
import com.vaadin.terminal.ErrorMessage;
import com.vaadin.terminal.ExternalResource;
import com.vaadin.terminal.UserError;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
@@ -17,7 +18,6 @@ import com.vaadin.ui.DateField;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Layout;
import com.vaadin.ui.Link;
import com.vaadin.ui.NativeSelect;
diff --git a/tests/testbench/com/vaadin/tests/TestForNativeWindowing.java b/tests/testbench/com/vaadin/tests/TestForNativeWindowing.java
index 91ade9b403..8e4ec17738 100644
--- a/tests/testbench/com/vaadin/tests/TestForNativeWindowing.java
+++ b/tests/testbench/com/vaadin/tests/TestForNativeWindowing.java
@@ -8,10 +8,10 @@ import java.net.MalformedURLException;
import java.net.URL;
import com.vaadin.Application;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.Window;
diff --git a/tests/testbench/com/vaadin/tests/TestForRichTextEditor.java b/tests/testbench/com/vaadin/tests/TestForRichTextEditor.java
index 302d28af35..992222cb9a 100644
--- a/tests/testbench/com/vaadin/tests/TestForRichTextEditor.java
+++ b/tests/testbench/com/vaadin/tests/TestForRichTextEditor.java
@@ -7,11 +7,11 @@ package com.vaadin.tests;
import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.RichTextArea;
import com.vaadin.ui.VerticalLayout;
diff --git a/tests/testbench/com/vaadin/tests/TestForStyledUpload.java b/tests/testbench/com/vaadin/tests/TestForStyledUpload.java
index 3b1100bb66..1fc20fe3e2 100644
--- a/tests/testbench/com/vaadin/tests/TestForStyledUpload.java
+++ b/tests/testbench/com/vaadin/tests/TestForStyledUpload.java
@@ -16,10 +16,10 @@ import java.lang.management.MemoryMXBean;
import com.vaadin.Application;
import com.vaadin.terminal.StreamResource;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Layout;
import com.vaadin.ui.Link;
import com.vaadin.ui.Panel;
diff --git a/tests/testbench/com/vaadin/tests/TestForUpload.java b/tests/testbench/com/vaadin/tests/TestForUpload.java
index fdda4dfd2a..c254198add 100644
--- a/tests/testbench/com/vaadin/tests/TestForUpload.java
+++ b/tests/testbench/com/vaadin/tests/TestForUpload.java
@@ -18,13 +18,13 @@ import java.lang.management.MemoryMXBean;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.terminal.StreamResource;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Layout;
import com.vaadin.ui.Link;
import com.vaadin.ui.Panel;
diff --git a/tests/testbench/com/vaadin/tests/TestIFrames.java b/tests/testbench/com/vaadin/tests/TestIFrames.java
index a8a9d1c2ca..ccddc7f557 100644
--- a/tests/testbench/com/vaadin/tests/TestIFrames.java
+++ b/tests/testbench/com/vaadin/tests/TestIFrames.java
@@ -4,9 +4,9 @@
package com.vaadin.tests;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.VerticalLayout;
public class TestIFrames extends CustomComponent {
diff --git a/tests/testbench/com/vaadin/tests/TreeFilesystem.java b/tests/testbench/com/vaadin/tests/TreeFilesystem.java
index 28fb289af4..e451d2ced7 100644
--- a/tests/testbench/com/vaadin/tests/TreeFilesystem.java
+++ b/tests/testbench/com/vaadin/tests/TreeFilesystem.java
@@ -7,9 +7,9 @@ package com.vaadin.tests;
import java.io.File;
import com.vaadin.data.Item;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.util.SampleDirectory;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.Tree;
diff --git a/tests/testbench/com/vaadin/tests/UsingObjectsInSelect.java b/tests/testbench/com/vaadin/tests/UsingObjectsInSelect.java
index 780b7d94e1..13918ace90 100644
--- a/tests/testbench/com/vaadin/tests/UsingObjectsInSelect.java
+++ b/tests/testbench/com/vaadin/tests/UsingObjectsInSelect.java
@@ -9,8 +9,8 @@ import java.util.Random;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.Select;
diff --git a/tests/testbench/com/vaadin/tests/application/ApplicationCloseTest.java b/tests/testbench/com/vaadin/tests/application/ApplicationCloseTest.java
index 2706134c27..ce41a895c4 100644
--- a/tests/testbench/com/vaadin/tests/application/ApplicationCloseTest.java
+++ b/tests/testbench/com/vaadin/tests/application/ApplicationCloseTest.java
@@ -1,12 +1,12 @@
package com.vaadin.tests.application;
import com.vaadin.Application;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.terminal.gwt.server.WebApplicationContext;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
public class ApplicationCloseTest extends TestBase {
diff --git a/tests/testbench/com/vaadin/tests/components/AbstractTestRoot.java b/tests/testbench/com/vaadin/tests/components/AbstractTestRoot.java
index eb27d18ca0..fd90cf2d6e 100644
--- a/tests/testbench/com/vaadin/tests/components/AbstractTestRoot.java
+++ b/tests/testbench/com/vaadin/tests/components/AbstractTestRoot.java
@@ -3,11 +3,11 @@ package com.vaadin.tests.components;
import com.vaadin.Application;
import com.vaadin.service.ApplicationContext;
import com.vaadin.terminal.WrappedRequest;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.terminal.gwt.server.AbstractWebApplicationContext;
import com.vaadin.terminal.gwt.server.WebBrowser;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root;
import com.vaadin.ui.VerticalLayout;
diff --git a/tests/testbench/com/vaadin/tests/components/TestBase.java b/tests/testbench/com/vaadin/tests/components/TestBase.java
index 4825e09404..6524a30fb7 100644
--- a/tests/testbench/com/vaadin/tests/components/TestBase.java
+++ b/tests/testbench/com/vaadin/tests/components/TestBase.java
@@ -1,8 +1,8 @@
package com.vaadin.tests.components;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.VerticalLayout;
diff --git a/tests/testbench/com/vaadin/tests/components/button/ButtonMouseDetails.java b/tests/testbench/com/vaadin/tests/components/button/ButtonMouseDetails.java
index deab87f8a2..8fe56b7619 100644
--- a/tests/testbench/com/vaadin/tests/components/button/ButtonMouseDetails.java
+++ b/tests/testbench/com/vaadin/tests/components/button/ButtonMouseDetails.java
@@ -1,10 +1,10 @@
package com.vaadin.tests.components.button;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
public class ButtonMouseDetails extends TestBase {
diff --git a/tests/testbench/com/vaadin/tests/components/caption/IconsInCaption.java b/tests/testbench/com/vaadin/tests/components/caption/IconsInCaption.java
index 428ebdb66b..3211a9c142 100644
--- a/tests/testbench/com/vaadin/tests/components/caption/IconsInCaption.java
+++ b/tests/testbench/com/vaadin/tests/components/caption/IconsInCaption.java
@@ -3,6 +3,7 @@ package com.vaadin.tests.components.caption;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.VaadinClasses;
import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.util.Log;
@@ -10,7 +11,6 @@ import com.vaadin.ui.ComboBox;
import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.VerticalLayout;
public class IconsInCaption extends TestBase {
diff --git a/tests/testbench/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.java b/tests/testbench/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.java
index 027cf5fd24..44285f97c2 100644
--- a/tests/testbench/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.java
+++ b/tests/testbench/com/vaadin/tests/components/combobox/ComboFocusBlurEvents.java
@@ -7,10 +7,10 @@ import com.vaadin.data.util.ObjectProperty;
import com.vaadin.event.FieldEvents;
import com.vaadin.event.FieldEvents.BlurEvent;
import com.vaadin.event.FieldEvents.FocusEvent;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.TextField;
public class ComboFocusBlurEvents extends TestBase {
diff --git a/tests/testbench/com/vaadin/tests/components/customcomponent/ClipContent.java b/tests/testbench/com/vaadin/tests/components/customcomponent/ClipContent.java
index 7ba26e54a9..22fc381c72 100644
--- a/tests/testbench/com/vaadin/tests/components/customcomponent/ClipContent.java
+++ b/tests/testbench/com/vaadin/tests/components/customcomponent/ClipContent.java
@@ -1,11 +1,11 @@
package com.vaadin.tests.components.customcomponent;
import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Button;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.TextField;
public class ClipContent extends TestBase {
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldEmptyValid.java b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldEmptyValid.java
index 37fb09ab29..dac3169b18 100644
--- a/tests/testbench/com/vaadin/tests/components/datefield/DateFieldEmptyValid.java
+++ b/tests/testbench/com/vaadin/tests/components/datefield/DateFieldEmptyValid.java
@@ -7,6 +7,7 @@ import java.util.Locale;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.util.Log;
import com.vaadin.ui.Button;
@@ -14,7 +15,6 @@ import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.DateField;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.PopupDateField;
@SuppressWarnings("serial")
diff --git a/tests/testbench/com/vaadin/tests/components/datefield/ValueThroughProperty.java b/tests/testbench/com/vaadin/tests/components/datefield/ValueThroughProperty.java
index 12c9608d28..578c4df903 100644
--- a/tests/testbench/com/vaadin/tests/components/datefield/ValueThroughProperty.java
+++ b/tests/testbench/com/vaadin/tests/components/datefield/ValueThroughProperty.java
@@ -6,13 +6,13 @@ import java.util.Locale;
import com.vaadin.data.Property;
import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.DateField;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.PopupDateField;
public class ValueThroughProperty extends TestBase {
diff --git a/tests/testbench/com/vaadin/tests/components/label/LabelModes.java b/tests/testbench/com/vaadin/tests/components/label/LabelModes.java
index 00553ddf96..c220076b58 100644
--- a/tests/testbench/com/vaadin/tests/components/label/LabelModes.java
+++ b/tests/testbench/com/vaadin/tests/components/label/LabelModes.java
@@ -1,8 +1,8 @@
package com.vaadin.tests.components.label;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.ComponentTestCase;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
public class LabelModes extends ComponentTestCase<Label> {
diff --git a/tests/testbench/com/vaadin/tests/components/label/LabelTest.java b/tests/testbench/com/vaadin/tests/components/label/LabelTest.java
index 130aaeca78..6547e7a20f 100644
--- a/tests/testbench/com/vaadin/tests/components/label/LabelTest.java
+++ b/tests/testbench/com/vaadin/tests/components/label/LabelTest.java
@@ -5,9 +5,9 @@ import java.util.LinkedHashMap;
import java.util.List;
import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.AbstractComponentTest;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
public class LabelTest extends AbstractComponentTest<Label> implements
ValueChangeListener {
diff --git a/tests/testbench/com/vaadin/tests/components/label/Labels.java b/tests/testbench/com/vaadin/tests/components/label/Labels.java
index bbd64375ef..1536f4555e 100644
--- a/tests/testbench/com/vaadin/tests/components/label/Labels.java
+++ b/tests/testbench/com/vaadin/tests/components/label/Labels.java
@@ -1,9 +1,9 @@
package com.vaadin.tests.components.label;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.ComponentTestCase;
import com.vaadin.tests.util.LoremIpsum;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
public class Labels extends ComponentTestCase<Label> {
diff --git a/tests/testbench/com/vaadin/tests/components/label/MarginsInLabels.java b/tests/testbench/com/vaadin/tests/components/label/MarginsInLabels.java
index 699f94bb7e..55f5d431d3 100644
--- a/tests/testbench/com/vaadin/tests/components/label/MarginsInLabels.java
+++ b/tests/testbench/com/vaadin/tests/components/label/MarginsInLabels.java
@@ -1,12 +1,12 @@
package com.vaadin.tests.components.label;
import com.vaadin.terminal.WrappedRequest;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.AbstractTestRoot;
import com.vaadin.ui.AbstractLayout;
import com.vaadin.ui.Accordion;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.VerticalLayout;
diff --git a/tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroupMultipleValueChange.java b/tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroupMultipleValueChange.java
index 9a4bb15272..ff860f3293 100644
--- a/tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroupMultipleValueChange.java
+++ b/tests/testbench/com/vaadin/tests/components/optiongroup/OptionGroupMultipleValueChange.java
@@ -2,9 +2,9 @@ package com.vaadin.tests.components.optiongroup;
import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.OptionGroup;
public class OptionGroupMultipleValueChange extends TestBase {
diff --git a/tests/testbench/com/vaadin/tests/components/panel/PanelShouldNotScroll.java b/tests/testbench/com/vaadin/tests/components/panel/PanelShouldNotScroll.java
index 62b3007aba..65754de0f3 100644
--- a/tests/testbench/com/vaadin/tests/components/panel/PanelShouldNotScroll.java
+++ b/tests/testbench/com/vaadin/tests/components/panel/PanelShouldNotScroll.java
@@ -1,5 +1,6 @@
package com.vaadin.tests.components.panel;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
@@ -7,7 +8,6 @@ import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
diff --git a/tests/testbench/com/vaadin/tests/components/popupview/PopupViewOffScreen.java b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewOffScreen.java
index cd2b77806c..72183e3570 100644
--- a/tests/testbench/com/vaadin/tests/components/popupview/PopupViewOffScreen.java
+++ b/tests/testbench/com/vaadin/tests/components/popupview/PopupViewOffScreen.java
@@ -3,6 +3,7 @@ package com.vaadin.tests.components.popupview;
import java.util.ArrayList;
import java.util.List;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.util.LoremIpsum;
import com.vaadin.ui.Button;
@@ -11,7 +12,6 @@ import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Panel;
import com.vaadin.ui.PopupView;
import com.vaadin.ui.VerticalLayout;
diff --git a/tests/testbench/com/vaadin/tests/components/popupview/ReopenPopupView.html b/tests/testbench/com/vaadin/tests/components/popupview/ReopenPopupView.html
new file mode 100644
index 0000000000..a8d1407005
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/popupview/ReopenPopupView.html
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>New Test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">New Test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.popupview.ReopenPopupView?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentspopupviewReopenPopupView::/VVerticalLayout[0]/VVerticalLayout[0]/VPopupView[0]</td>
+ <td>42,5</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentspopupviewReopenPopupView::/VVerticalLayout[0]/VVerticalLayout[0]/VVerticalLayout[0]/VLabel[0]</td>
+ <td>1. Button clicked</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentspopupviewReopenPopupView::/VVerticalLayout[0]/VVerticalLayout[0]/VVerticalLayout[0]/VLabel[0]</td>
+ <td>2. Button clicked</td>
+</tr>
+<!--Click outside to close PopupView-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentspopupviewReopenPopupView::</td>
+ <td>304,229</td>
+</tr>
+<tr>
+ <td>pause</td>
+ <td></td>
+ <td>1000</td>
+</tr>
+<!--Open PopupView again and click button-->
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentspopupviewReopenPopupView::/VVerticalLayout[0]/VVerticalLayout[0]/VPopupView[0]</td>
+ <td>33,6</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>assertText</td>
+ <td>vaadin=runcomvaadintestscomponentspopupviewReopenPopupView::/VVerticalLayout[0]/VVerticalLayout[0]/VVerticalLayout[0]/VLabel[0]</td>
+ <td>3. Button clicked</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/tests/testbench/com/vaadin/tests/components/popupview/ReopenPopupView.java b/tests/testbench/com/vaadin/tests/components/popupview/ReopenPopupView.java
new file mode 100644
index 0000000000..89f6d155f2
--- /dev/null
+++ b/tests/testbench/com/vaadin/tests/components/popupview/ReopenPopupView.java
@@ -0,0 +1,37 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.tests.components.popupview;
+
+import com.vaadin.terminal.WrappedRequest;
+import com.vaadin.tests.components.AbstractTestRoot;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.PopupView;
+
+public class ReopenPopupView extends AbstractTestRoot {
+ private final Log log = new Log(5);
+
+ @Override
+ protected void setup(WrappedRequest request) {
+ addComponent(log);
+ addComponent(new PopupView("PopupView", new Button("Button",
+ new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ log.log("Button clicked");
+ }
+ })));
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Clicking a button in a PopupView should work every time";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return Integer.valueOf(8804);
+ }
+
+}
diff --git a/tests/testbench/com/vaadin/tests/components/root/LazyInitRoots.java b/tests/testbench/com/vaadin/tests/components/root/LazyInitRoots.java
index 97f6701fdb..c4547e56ff 100644
--- a/tests/testbench/com/vaadin/tests/components/root/LazyInitRoots.java
+++ b/tests/testbench/com/vaadin/tests/components/root/LazyInitRoots.java
@@ -5,9 +5,9 @@ import com.vaadin.annotations.EagerInit;
import com.vaadin.terminal.ExternalResource;
import com.vaadin.terminal.WrappedRequest;
import com.vaadin.terminal.WrappedRequest.BrowserDetails;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.AbstractTestApplication;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Link;
import com.vaadin.ui.Root;
diff --git a/tests/testbench/com/vaadin/tests/components/table/EditableTableLeak.java b/tests/testbench/com/vaadin/tests/components/table/EditableTableLeak.java
index 08938c079a..8aa6d1277f 100644
--- a/tests/testbench/com/vaadin/tests/components/table/EditableTableLeak.java
+++ b/tests/testbench/com/vaadin/tests/components/table/EditableTableLeak.java
@@ -9,6 +9,7 @@ import java.util.HashMap;
import com.vaadin.data.Container;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.util.TestUtils;
import com.vaadin.ui.Button;
@@ -19,7 +20,6 @@ import com.vaadin.ui.Component;
import com.vaadin.ui.DefaultFieldFactory;
import com.vaadin.ui.Field;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Table;
public class EditableTableLeak extends TestBase {
diff --git a/tests/testbench/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.java b/tests/testbench/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.java
index 1cfb1ee5e5..de0d2b8d56 100644
--- a/tests/testbench/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.java
+++ b/tests/testbench/com/vaadin/tests/components/table/LabelEmbeddedClickThroughForTable.java
@@ -4,11 +4,11 @@ import com.vaadin.data.Item;
import com.vaadin.event.ItemClickEvent;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Component;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Table;
public class LabelEmbeddedClickThroughForTable extends TestBase {
diff --git a/tests/testbench/com/vaadin/tests/components/table/LongMultiselect.java b/tests/testbench/com/vaadin/tests/components/table/LongMultiselect.java
index 07925db05c..0196395bf4 100644
--- a/tests/testbench/com/vaadin/tests/components/table/LongMultiselect.java
+++ b/tests/testbench/com/vaadin/tests/components/table/LongMultiselect.java
@@ -2,14 +2,11 @@ package com.vaadin.tests.components.table;
import java.util.Collection;
-import com.vaadin.Application;
import com.vaadin.data.Property;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Button;
-import com.vaadin.ui.Label;
import com.vaadin.ui.Table;
import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
public class LongMultiselect extends TestBase {
diff --git a/tests/testbench/com/vaadin/tests/components/table/Tables.java b/tests/testbench/com/vaadin/tests/components/table/Tables.java
index 4c773c9678..47c858f441 100644
--- a/tests/testbench/com/vaadin/tests/components/table/Tables.java
+++ b/tests/testbench/com/vaadin/tests/components/table/Tables.java
@@ -9,11 +9,11 @@ import com.vaadin.event.Action;
import com.vaadin.event.Action.Handler;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
import com.vaadin.terminal.Resource;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.select.AbstractSelectTestCase;
import com.vaadin.ui.AbstractSelect.MultiSelectMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Table;
import com.vaadin.ui.Table.Align;
import com.vaadin.ui.Table.CellStyleGenerator;
diff --git a/tests/testbench/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.java b/tests/testbench/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.java
index 869b981ac1..3872f7a8dd 100644
--- a/tests/testbench/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.java
+++ b/tests/testbench/com/vaadin/tests/components/tabsheet/WrapTabSheetInTabSheet.java
@@ -1,6 +1,5 @@
package com.vaadin.tests.components.tabsheet;
-import com.vaadin.Application;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
@@ -8,7 +7,6 @@ import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.Label;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.VerticalLayout;
-import com.vaadin.ui.Window;
public class WrapTabSheetInTabSheet extends TestBase {
@Override
diff --git a/tests/testbench/com/vaadin/tests/components/window/LazyWindowResize.java b/tests/testbench/com/vaadin/tests/components/window/LazyWindowResize.java
index 2e6a386667..49da6758ea 100644
--- a/tests/testbench/com/vaadin/tests/components/window/LazyWindowResize.java
+++ b/tests/testbench/com/vaadin/tests/components/window/LazyWindowResize.java
@@ -2,12 +2,12 @@ package com.vaadin.tests.components.window;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.AbstractTestCase;
import com.vaadin.tests.util.Log;
import com.vaadin.tests.util.LoremIpsum;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.BrowserWindowResizeEvent;
import com.vaadin.ui.Root.BrowserWindowResizeListener;
import com.vaadin.ui.Root.LegacyWindow;
diff --git a/tests/testbench/com/vaadin/tests/components/window/SubWindowWithUndefinedHeight.java b/tests/testbench/com/vaadin/tests/components/window/SubWindowWithUndefinedHeight.java
index 60f0c598ae..fc99309b50 100644
--- a/tests/testbench/com/vaadin/tests/components/window/SubWindowWithUndefinedHeight.java
+++ b/tests/testbench/com/vaadin/tests/components/window/SubWindowWithUndefinedHeight.java
@@ -1,10 +1,10 @@
package com.vaadin.tests.components.window;
import com.vaadin.tests.components.TestBase;
-import com.vaadin.ui.Window;
import com.vaadin.ui.Button;
-import com.vaadin.ui.Table;
import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.Window;
public class SubWindowWithUndefinedHeight extends TestBase {
diff --git a/tests/testbench/com/vaadin/tests/dd/MyDragSourceConnector.java b/tests/testbench/com/vaadin/tests/dd/MyDragSourceConnector.java
index c94ac05ea2..2b01bad2cf 100644
--- a/tests/testbench/com/vaadin/tests/dd/MyDragSourceConnector.java
+++ b/tests/testbench/com/vaadin/tests/dd/MyDragSourceConnector.java
@@ -3,8 +3,6 @@
*/
package com.vaadin.tests.dd;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -23,8 +21,8 @@ public class MyDragSourceConnector extends AbstractComponentConnector implements
}
@Override
- protected Widget createWidget() {
- return GWT.create(VMyDragSource.class);
+ public VMyDragSource getWidget() {
+ return (VMyDragSource) super.getWidget();
}
}
diff --git a/tests/testbench/com/vaadin/tests/dd/MyDropTargetConnector.java b/tests/testbench/com/vaadin/tests/dd/MyDropTargetConnector.java
index 0021cbf7ea..5671efa236 100644
--- a/tests/testbench/com/vaadin/tests/dd/MyDropTargetConnector.java
+++ b/tests/testbench/com/vaadin/tests/dd/MyDropTargetConnector.java
@@ -3,8 +3,6 @@
*/
package com.vaadin.tests.dd;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -28,9 +26,4 @@ public class MyDropTargetConnector extends AbstractComponentConnector implements
return (VMyDropTarget) super.getWidget();
}
- @Override
- protected Widget createWidget() {
- return GWT.create(VMyDropTarget.class);
- }
-
}
diff --git a/tests/testbench/com/vaadin/tests/integration/JSR286PortletApplication.java b/tests/testbench/com/vaadin/tests/integration/JSR286PortletApplication.java
index ecc7ea9647..7ba6f2c0c0 100644
--- a/tests/testbench/com/vaadin/tests/integration/JSR286PortletApplication.java
+++ b/tests/testbench/com/vaadin/tests/integration/JSR286PortletApplication.java
@@ -1,5 +1,7 @@
package com.vaadin.tests.integration;
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
import java.util.Iterator;
import java.util.Map;
@@ -18,16 +20,18 @@ import javax.portlet.WindowState;
import com.vaadin.Application;
import com.vaadin.terminal.ExternalResource;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.terminal.gwt.server.PortletApplicationContext2;
import com.vaadin.terminal.gwt.server.PortletApplicationContext2.PortletListener;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Link;
import com.vaadin.ui.Notification;
import com.vaadin.ui.Root;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.TextField;
+import com.vaadin.ui.Upload;
+import com.vaadin.ui.Upload.Receiver;
/**
* Adapted from old PortletDemo to support integration testing.
@@ -67,6 +71,14 @@ public class JSR286PortletApplication extends Application.LegacyApplication {
portletMax.setEnabled(false);
main.addComponent(portletMax);
+ Upload upload = new Upload("Upload a file", new Receiver() {
+
+ public OutputStream receiveUpload(String filename, String mimeType) {
+ return new ByteArrayOutputStream();
+ }
+ });
+ main.addComponent(upload);
+
if (getContext() instanceof PortletApplicationContext2) {
PortletApplicationContext2 ctx = (PortletApplicationContext2) getContext();
ctx.addPortletListener(this, new DemoPortletListener());
diff --git a/tests/testbench/com/vaadin/tests/integration/LiferayThemeDemo.java b/tests/testbench/com/vaadin/tests/integration/LiferayThemeDemo.java
index 91e9a4620c..0250658bc9 100644
--- a/tests/testbench/com/vaadin/tests/integration/LiferayThemeDemo.java
+++ b/tests/testbench/com/vaadin/tests/integration/LiferayThemeDemo.java
@@ -11,6 +11,7 @@ import com.vaadin.event.Action;
import com.vaadin.terminal.ExternalResource;
import com.vaadin.terminal.Resource;
import com.vaadin.terminal.ThemeResource;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.AbstractSelect;
import com.vaadin.ui.Accordion;
@@ -26,7 +27,6 @@ import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.HorizontalSplitPanel;
import com.vaadin.ui.InlineDateField;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Layout;
import com.vaadin.ui.ListSelect;
import com.vaadin.ui.MenuBar;
diff --git a/tests/testbench/com/vaadin/tests/layouts/HiddenHorizontalLayout.java b/tests/testbench/com/vaadin/tests/layouts/HiddenHorizontalLayout.java
index a8f44a5771..8c05df6ca9 100644
--- a/tests/testbench/com/vaadin/tests/layouts/HiddenHorizontalLayout.java
+++ b/tests/testbench/com/vaadin/tests/layouts/HiddenHorizontalLayout.java
@@ -1,11 +1,11 @@
package com.vaadin.tests.layouts;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.VerticalLayout;
public class HiddenHorizontalLayout extends TestBase {
diff --git a/tests/testbench/com/vaadin/tests/layouts/TestLayoutPerformance.java b/tests/testbench/com/vaadin/tests/layouts/TestLayoutPerformance.java
index a5e2048066..3d496fa446 100644
--- a/tests/testbench/com/vaadin/tests/layouts/TestLayoutPerformance.java
+++ b/tests/testbench/com/vaadin/tests/layouts/TestLayoutPerformance.java
@@ -1,5 +1,6 @@
package com.vaadin.tests.layouts;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.Button;
@@ -9,7 +10,6 @@ import com.vaadin.ui.Component;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Layout;
import com.vaadin.ui.NativeSelect;
import com.vaadin.ui.TextField;
diff --git a/tests/testbench/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java b/tests/testbench/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java
index 920c9ec819..bd60e9ff21 100644
--- a/tests/testbench/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java
+++ b/tests/testbench/com/vaadin/tests/layouts/layouttester/HorizontalLayoutTests.java
@@ -5,6 +5,7 @@ import com.vaadin.terminal.Resource;
import com.vaadin.terminal.SystemError;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.terminal.UserError;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.Alignment;
@@ -14,7 +15,6 @@ import com.vaadin.ui.CheckBox;
import com.vaadin.ui.DateField;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Layout;
import com.vaadin.ui.Link;
import com.vaadin.ui.Select;
diff --git a/tests/testbench/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java b/tests/testbench/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java
index a542a8f10c..2861acabdd 100644
--- a/tests/testbench/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java
+++ b/tests/testbench/com/vaadin/tests/layouts/layouttester/VerticalLayoutTests.java
@@ -5,6 +5,7 @@ import com.vaadin.terminal.Resource;
import com.vaadin.terminal.SystemError;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.terminal.UserError;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.Alignment;
@@ -14,7 +15,6 @@ import com.vaadin.ui.CheckBox;
import com.vaadin.ui.DateField;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Layout;
import com.vaadin.ui.Link;
import com.vaadin.ui.NativeSelect;
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1225.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1225.java
index 92a5e526d1..fe9cb6e415 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket1225.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1225.java
@@ -1,10 +1,10 @@
package com.vaadin.tests.tickets;
import com.vaadin.Application;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.tests.TestForTablesInitialColumnWidthLogicRendering;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.Table;
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket124.java b/tests/testbench/com/vaadin/tests/tickets/Ticket124.java
index f1d33dca0b..81a164d22e 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket124.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket124.java
@@ -1,12 +1,12 @@
package com.vaadin.tests.tickets;
import com.vaadin.Application;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.TextField;
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1444.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1444.java
index 5076e79996..1af3b405e2 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket1444.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1444.java
@@ -1,8 +1,8 @@
package com.vaadin.tests.tickets;
import com.vaadin.Application;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.VerticalLayout;
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1804.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1804.java
index b659eff01e..d627d11e18 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket1804.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1804.java
@@ -6,11 +6,11 @@ import java.util.LinkedList;
import com.vaadin.data.Validator;
import com.vaadin.data.util.MethodProperty;
import com.vaadin.terminal.SystemError;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.Select;
import com.vaadin.ui.Window;
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1811.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1811.java
index 7df9610e99..d530c949e8 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket1811.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1811.java
@@ -5,10 +5,10 @@ import java.util.LinkedList;
import com.vaadin.data.Validator;
import com.vaadin.data.validator.StringLengthValidator;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.TextField;
import com.vaadin.ui.Window;
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1819.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1819.java
index 86325f35a9..8e5f107b17 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket1819.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1819.java
@@ -3,11 +3,11 @@ package com.vaadin.tests.tickets;
import java.util.Iterator;
import java.util.LinkedList;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.Select;
import com.vaadin.ui.Window;
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket1970.java b/tests/testbench/com/vaadin/tests/tickets/Ticket1970.java
index beeda85c9f..3c5822fbda 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket1970.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket1970.java
@@ -3,10 +3,10 @@ package com.vaadin.tests.tickets;
import java.util.Iterator;
import com.vaadin.Application;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
public class Ticket1970 extends Application.LegacyApplication {
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2104.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2104.java
index 4637b71fb4..b40035a189 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket2104.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2104.java
@@ -7,10 +7,10 @@ import com.vaadin.data.util.MethodProperty;
import com.vaadin.event.ItemClickEvent;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
import com.vaadin.terminal.ExternalResource;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.Table;
import com.vaadin.ui.Tree;
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2117.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2117.java
index 82241843df..933494f78a 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket2117.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2117.java
@@ -2,11 +2,11 @@ package com.vaadin.tests.tickets;
import com.vaadin.Application;
import com.vaadin.terminal.ExternalResource;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
public class Ticket2117 extends Application.LegacyApplication {
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2119.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2119.java
index b7dc84b8ab..34054e09d1 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket2119.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2119.java
@@ -4,9 +4,9 @@ import com.vaadin.Application;
import com.vaadin.data.Property;
import com.vaadin.data.util.ObjectProperty;
import com.vaadin.terminal.ExternalResource;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Layout;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.Select;
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2240.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2240.java
index bf01475809..f33d2f7ea8 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket2240.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2240.java
@@ -1,9 +1,9 @@
package com.vaadin.tests.tickets;
import com.vaadin.Application;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.TextField;
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2287.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2287.java
index 66328fa4b9..a4664989ec 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket2287.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2287.java
@@ -2,8 +2,8 @@ package com.vaadin.tests.tickets;
import java.net.URL;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
public class Ticket2287 extends Ticket2292 {
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2304.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2304.java
index 9484b4865f..264ce9b5fc 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket2304.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2304.java
@@ -1,8 +1,8 @@
package com.vaadin.tests.tickets;
import com.vaadin.Application;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.themes.Reindeer;
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket2426.java b/tests/testbench/com/vaadin/tests/tickets/Ticket2426.java
index a979b6711f..7866d031ed 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket2426.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket2426.java
@@ -1,8 +1,8 @@
package com.vaadin.tests.tickets;
import com.vaadin.Application;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
public class Ticket2426 extends Application.LegacyApplication {
@@ -15,7 +15,7 @@ public class Ticket2426 extends Application.LegacyApplication {
final String content = "<select/>";
w.addComponent(new Label("CONTENT_DEFAULT: " + content,
- ContentMode.DEFAULT));
+ ContentMode.TEXT));
w.addComponent(new Label("CONTENT_PREFORMATTED: " + content,
ContentMode.PREFORMATTED));
w.addComponent(new Label("CONTENT_RAW: " + content, ContentMode.RAW));
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket5952.java b/tests/testbench/com/vaadin/tests/tickets/Ticket5952.java
index 3c0c549f1f..a608f736ca 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket5952.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket5952.java
@@ -1,8 +1,8 @@
package com.vaadin.tests.tickets;
import com.vaadin.Application;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Root.LegacyWindow;
public class Ticket5952 extends Application.LegacyApplication {
diff --git a/tests/testbench/com/vaadin/tests/tickets/Ticket677.java b/tests/testbench/com/vaadin/tests/tickets/Ticket677.java
index bf7aa7bc36..473ec79342 100644
--- a/tests/testbench/com/vaadin/tests/tickets/Ticket677.java
+++ b/tests/testbench/com/vaadin/tests/tickets/Ticket677.java
@@ -5,6 +5,7 @@ import com.vaadin.data.Container;
import com.vaadin.data.Item;
import com.vaadin.data.Property;
import com.vaadin.data.util.BeanItem;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Component;
@@ -15,7 +16,6 @@ import com.vaadin.ui.Form;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Root.LegacyWindow;
import com.vaadin.ui.Table;
diff --git a/tests/testbench/com/vaadin/tests/util/Log.java b/tests/testbench/com/vaadin/tests/util/Log.java
index fca858cb15..1404db0dee 100644
--- a/tests/testbench/com/vaadin/tests/util/Log.java
+++ b/tests/testbench/com/vaadin/tests/util/Log.java
@@ -3,8 +3,8 @@ package com.vaadin.tests.util;
import java.util.ArrayList;
import java.util.List;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.VerticalLayout;
public class Log extends VerticalLayout {
diff --git a/tests/testbench/com/vaadin/tests/util/SampleDirectory.java b/tests/testbench/com/vaadin/tests/util/SampleDirectory.java
index a1f3202cea..2c8ac675f8 100644
--- a/tests/testbench/com/vaadin/tests/util/SampleDirectory.java
+++ b/tests/testbench/com/vaadin/tests/util/SampleDirectory.java
@@ -8,8 +8,8 @@ import java.io.File;
import com.vaadin.Application;
import com.vaadin.terminal.SystemError;
+import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
import com.vaadin.ui.Label;
-import com.vaadin.ui.Label.ContentMode;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Root;