diff options
author | Henri Sara <hesara@vaadin.com> | 2012-02-08 14:18:08 +0200 |
---|---|---|
committer | Henri Sara <hesara@vaadin.com> | 2012-02-08 14:18:08 +0200 |
commit | a062383b16cc1394baa604a0841416d646e91fba (patch) | |
tree | fa7d04736ebde85618c1dd62c91a9de271512aa3 /src | |
parent | 2bb7aae1c0cd44ad1ca260dec70b3225c8a226ac (diff) | |
download | vaadin-framework-a062383b16cc1394baa604a0841416d646e91fba.tar.gz vaadin-framework-a062383b16cc1394baa604a0841416d646e91fba.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/com/vaadin/terminal/gwt/client/ApplicationConnection.java | 3 | ||||
-rw-r--r-- | src/com/vaadin/terminal/gwt/client/WidgetSet.java | 56 | ||||
-rw-r--r-- | src/com/vaadin/ui/AbstractSelect.java | 5 | ||||
-rw-r--r-- | src/com/vaadin/ui/ComboBox.java | 12 | ||||
-rw-r--r-- | src/com/vaadin/ui/Form.java | 11 | ||||
-rw-r--r-- | src/com/vaadin/ui/Select.java | 6 |
6 files changed, 25 insertions, 68 deletions
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,43 +59,16 @@ 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 * qualified name. @@ -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<Object> implements } /** - * Sets the multiselect mode. Setting multiselect mode false may loose + * Sets the multiselect mode. Setting multiselect mode false may lose * selection information: if selected items set contains one or more * selected items, only one of the selected items is kept as selected. * + * Subclasses of AbstractSelect can choose not to support changing the + * multiselect mode, and may throw {@link UnsupportedOperationException}. + * * @param multiSelect * the New value of property multiSelect. */ diff --git a/src/com/vaadin/ui/ComboBox.java b/src/com/vaadin/ui/ComboBox.java index 013fe6ab85..12db8c18af 100644 --- a/src/com/vaadin/ui/ComboBox.java +++ b/src/com/vaadin/ui/ComboBox.java @@ -34,36 +34,24 @@ public class ComboBox extends Select { private boolean textInputAllowed = true; public ComboBox() { - setMultiSelect(false); setNewItemsAllowed(false); } public ComboBox(String caption, Collection<?> options) { super(caption, options); - setMultiSelect(false); setNewItemsAllowed(false); } public ComboBox(String caption, Container dataSource) { super(caption, dataSource); - setMultiSelect(false); setNewItemsAllowed(false); } public ComboBox(String caption) { super(caption); - setMultiSelect(false); setNewItemsAllowed(false); } - @Override - public void setMultiSelect(boolean multiSelect) { - if (multiSelect && !isMultiSelect()) { - throw new UnsupportedOperationException("Multiselect not supported"); - } - super.setMultiSelect(multiSelect); - } - /** * Gets the current input prompt. * diff --git a/src/com/vaadin/ui/Form.java b/src/com/vaadin/ui/Form.java index c79804c7e7..dd3710cd2c 100644 --- a/src/com/vaadin/ui/Form.java +++ b/src/com/vaadin/ui/Form.java @@ -861,13 +861,16 @@ public class Form extends AbstractField<Object> implements Item.Editor, * match. Null values are not supported. * </p> * + * 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<Object> 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"); + } } /** |