From a062383b16cc1394baa604a0841416d646e91fba Mon Sep 17 00:00:00 2001
From: Henri Sara
Date: Wed, 8 Feb 2012 14:18:08 +0200
Subject: Remove support for Select in multi-select mode (#8169, #8326).
Also includes some related cleanup as this was the last special case
where the widget was selected on the client side based on UIDL fields
other than tag.
---
.../terminal/gwt/client/ApplicationConnection.java | 3 +-
src/com/vaadin/terminal/gwt/client/WidgetSet.java | 56 ++++------------------
src/com/vaadin/ui/AbstractSelect.java | 5 +-
src/com/vaadin/ui/ComboBox.java | 12 -----
src/com/vaadin/ui/Form.java | 11 +++--
src/com/vaadin/ui/Select.java | 6 ++-
6 files changed, 25 insertions(+), 68 deletions(-)
(limited to 'src')
diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java
index 65827fac0c..201c3a1cd6 100644
--- a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java
+++ b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java
@@ -1886,7 +1886,8 @@ public class ApplicationConnection {
final String pid = uidl.getId();
if (!paintableMap.hasPaintable(pid)) {
// Create and register a new paintable if no old was found
- VPaintableWidget p = widgetSet.createWidget(uidl, configuration);
+ VPaintableWidget p = widgetSet.createWidget(uidl.getTag(),
+ configuration);
p.setConnection(this);
p.setId(pid);
p.init();
diff --git a/src/com/vaadin/terminal/gwt/client/WidgetSet.java b/src/com/vaadin/terminal/gwt/client/WidgetSet.java
index 390d79ce17..7874c9d068 100644
--- a/src/com/vaadin/terminal/gwt/client/WidgetSet.java
+++ b/src/com/vaadin/terminal/gwt/client/WidgetSet.java
@@ -6,8 +6,6 @@ package com.vaadin.terminal.gwt.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Widget;
-import com.vaadin.terminal.gwt.client.ui.VFilterSelectPaintable;
-import com.vaadin.terminal.gwt.client.ui.VListSelectPaintable;
import com.vaadin.terminal.gwt.client.ui.VUnknownComponentPaintable;
public class WidgetSet {
@@ -24,15 +22,15 @@ public class WidgetSet {
* component must be a {@link Widget} that implements
* {@link VPaintableWidget}.
*
- * @param uidl
- * UIDL to be painted with returned component.
+ * @param tag
+ * component type tag for the component to create
* @param client
* the application connection that whishes to instantiate widget
*
* @return New uninitialized and unregistered component that can paint given
* UIDL.
*/
- public VPaintableWidget createWidget(UIDL uidl,
+ public VPaintableWidget createWidget(String tag,
ApplicationConfiguration conf) {
/*
* Yes, this (including the generated code in WidgetMap) may look very
@@ -40,15 +38,14 @@ public class WidgetSet {
* Luckily this is mostly written by WidgetSetGenerator, here are just
* some hacks. Extra instantiation code is needed if client side widget
* has no "native" counterpart on client side.
- *
- * TODO should try to get rid of these exceptions here
*/
- final Class extends VPaintableWidget> classType = resolveWidgetType(
- uidl, conf);
+ Class extends VPaintableWidget> classType = resolveWidgetType(tag,
+ conf);
+
if (classType == null || classType == VUnknownComponentPaintable.class) {
String serverSideName = conf
- .getUnknownServerClassNameByEncodedTagName(uidl.getTag());
+ .getUnknownServerClassNameByEncodedTagName(tag);
VUnknownComponentPaintable c = GWT
.create(VUnknownComponentPaintable.class);
c.setServerSideClassName(serverSideName);
@@ -62,42 +59,15 @@ public class WidgetSet {
}
- protected Class extends VPaintableWidget> resolveWidgetType(UIDL uidl,
+ protected Class extends VPaintableWidget> resolveWidgetType(String tag,
ApplicationConfiguration conf) {
- final String tag = uidl.getTag();
-
Class extends VPaintableWidget> widgetClass = conf
.getWidgetClassByEncodedTag(tag);
- // add our historical quirks
-
- if (widgetClass == VFilterSelectPaintable.class) {
- if (uidl.hasAttribute("type")) {
- final String type = uidl.getStringAttribute("type").intern();
- if ("legacy-multi" == type) {
- return VListSelectPaintable.class;
- }
- }
- }
return widgetClass;
}
- /**
- * Test if the given component implementation conforms to UIDL.
- *
- * @param currentWidget
- * Current implementation of the component
- * @param uidl
- * UIDL to test against
- * @return true iff createWidget would return a new component of the same
- * class than currentWidget
- */
- public boolean isCorrectImplementation(Widget currentWidget, UIDL uidl,
- ApplicationConfiguration conf) {
- return currentWidget.getClass() == resolveWidgetType(uidl, conf);
- }
-
/**
* Due its nature, GWT does not support dynamic classloading. To bypass this
* limitation, widgetset must have function that returns Class by its fully
@@ -115,16 +85,6 @@ public class WidgetSet {
Class extends VPaintableWidget> implementationByServerSideClassName = widgetMap
.getImplementationByServerSideClassName(fullyqualifiedName);
- /*
- * Also ensure that our historical quirks have their instantiators
- * loaded. Without these, legacy code will throw NPEs when e.g. a Select
- * is in multiselect mode, causing the clientside implementation to
- * *actually* be VListSelect, when the annotation says VFilterSelect
- */
- if (fullyqualifiedName.equals("com.vaadin.ui.Select")) {
- loadImplementation(VListSelectPaintable.class);
- }
-
return implementationByServerSideClassName;
}
diff --git a/src/com/vaadin/ui/AbstractSelect.java b/src/com/vaadin/ui/AbstractSelect.java
index 5e086f0b8d..47f132aa77 100644
--- a/src/com/vaadin/ui/AbstractSelect.java
+++ b/src/com/vaadin/ui/AbstractSelect.java
@@ -976,10 +976,13 @@ public abstract class AbstractSelect extends AbstractField
*
+ * Note: since Vaadin 7.0, returns an {@link AbstractSelect} instead of a
+ * {@link Select}.
+ *
* @param propertyId
* the id of the property.
* @param values
* @param descriptions
* @return the select property generated
*/
- public Select replaceWithSelect(Object propertyId, Object[] values,
+ public AbstractSelect replaceWithSelect(Object propertyId, Object[] values,
Object[] descriptions) {
// Checks the parameters
@@ -927,10 +930,8 @@ public class Form extends AbstractField implements Item.Editor,
}
// Creates the new field matching to old field parameters
- final Select newField = new Select();
- if (isMultiselect) {
- newField.setMultiSelect(true);
- }
+ final AbstractSelect newField = isMultiselect ? new ListSelect()
+ : new Select();
newField.setCaption(oldField.getCaption());
newField.setReadOnly(oldField.isReadOnly());
newField.setReadThrough(oldField.isReadThrough());
diff --git a/src/com/vaadin/ui/Select.java b/src/com/vaadin/ui/Select.java
index 38785f3ab9..c1da88acea 100644
--- a/src/com/vaadin/ui/Select.java
+++ b/src/com/vaadin/ui/Select.java
@@ -754,11 +754,15 @@ public class Select extends AbstractSelect implements AbstractSelect.Filtering,
* @deprecated use {@link ListSelect}, {@link OptionGroup} or
* {@link TwinColSelect} instead
* @see com.vaadin.ui.AbstractSelect#setMultiSelect(boolean)
+ * @throws UnsupportedOperationException
+ * if trying to activate multiselect mode
*/
@Deprecated
@Override
public void setMultiSelect(boolean multiSelect) {
- super.setMultiSelect(multiSelect);
+ if (multiSelect) {
+ throw new UnsupportedOperationException("Multiselect not supported");
+ }
}
/**
--
cgit v1.2.3