summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Anisimov <denis@vaadin.com>2014-04-07 22:04:33 +0300
committerVaadin Code Review <review@vaadin.com>2014-05-21 12:36:29 +0000
commitb0e35fc1ddd999f07e9f0acbd8bf18b8a05813d7 (patch)
treedbb983ffdcc23c0c042f0827caa37625ecccd8ca
parent314cc68e5d5024b8cabd3dd9efb20ff4847bdebf (diff)
downloadvaadin-framework-b0e35fc1ddd999f07e9f0acbd8bf18b8a05813d7.tar.gz
vaadin-framework-b0e35fc1ddd999f07e9f0acbd8bf18b8a05813d7.zip
Keep all checkbox related data in Map don't address it via the index #11772
Change-Id: I2c9c68134d9fe958e2881975d1d845dea819a761
-rw-r--r--client/src/com/vaadin/client/ui/VOptionGroup.java27
-rw-r--r--uitest/src/com/vaadin/tests/components/optiongroup/ReadOnlyOptionGroup.java64
-rw-r--r--uitest/src/com/vaadin/tests/components/optiongroup/ReadOnlyOptionGroupTest.java50
3 files changed, 131 insertions, 10 deletions
diff --git a/client/src/com/vaadin/client/ui/VOptionGroup.java b/client/src/com/vaadin/client/ui/VOptionGroup.java
index 52da725a00..34227831b9 100644
--- a/client/src/com/vaadin/client/ui/VOptionGroup.java
+++ b/client/src/com/vaadin/client/ui/VOptionGroup.java
@@ -57,7 +57,7 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler,
private final Map<CheckBox, String> optionsToKeys;
- private final List<Boolean> optionsEnabled;
+ private final Map<CheckBox, Boolean> optionsEnabled;
/** For internal use only. May be removed or replaced in the future. */
public boolean sendFocusEvents = false;
@@ -94,7 +94,7 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler,
super(CLASSNAME);
panel = (Panel) optionsContainer;
optionsToKeys = new HashMap<CheckBox, String>();
- optionsEnabled = new ArrayList<Boolean>();
+ optionsEnabled = new HashMap<CheckBox, Boolean>();
wasMultiselect = isMultiselect();
}
@@ -176,7 +176,7 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler,
.getBooleanAttribute(OptionGroupConstants.ATTRIBUTE_OPTION_DISABLED);
boolean enabled = optionEnabled && !isReadonly() && isEnabled();
op.setEnabled(enabled);
- optionsEnabled.add(optionEnabled);
+ optionsEnabled.put(op, optionEnabled);
setStyleName(op.getElement(),
ApplicationConnection.DISABLED_CLASSNAME,
@@ -239,19 +239,26 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler,
@Override
protected void updateEnabledState() {
- int i = 0;
boolean optionGroupEnabled = isEnabled() && !isReadonly();
// sets options enabled according to the widget's enabled,
// readonly and each options own enabled
for (Widget w : panel) {
if (w instanceof HasEnabled) {
- ((HasEnabled) w).setEnabled(optionsEnabled.get(i)
- && optionGroupEnabled);
- setStyleName(w.getElement(),
- ApplicationConnection.DISABLED_CLASSNAME,
- !(optionsEnabled.get(i) && isEnabled()));
+ HasEnabled hasEnabled = (HasEnabled) w;
+ Boolean isOptionEnabled = optionsEnabled.get(w);
+ if (isOptionEnabled == null) {
+ hasEnabled.setEnabled(optionGroupEnabled);
+ setStyleName(w.getElement(),
+ ApplicationConnection.DISABLED_CLASSNAME,
+ !isEnabled());
+ } else {
+ hasEnabled
+ .setEnabled(isOptionEnabled && optionGroupEnabled);
+ setStyleName(w.getElement(),
+ ApplicationConnection.DISABLED_CLASSNAME,
+ !(isOptionEnabled && isEnabled()));
+ }
}
- i++;
}
}
diff --git a/uitest/src/com/vaadin/tests/components/optiongroup/ReadOnlyOptionGroup.java b/uitest/src/com/vaadin/tests/components/optiongroup/ReadOnlyOptionGroup.java
new file mode 100644
index 0000000000..76258e574e
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/optiongroup/ReadOnlyOptionGroup.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.optiongroup;
+
+import java.util.Collections;
+
+import com.vaadin.data.Property;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.OptionGroup;
+
+/**
+ * Test UI for unset read-only flag of Option group with new items allowed.
+ *
+ * @author Vaadin Ltd
+ */
+public class ReadOnlyOptionGroup extends AbstractTestUI {
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ final OptionGroup optionGroup = new OptionGroup("test field",
+ Collections.singletonList("Option"));
+ optionGroup.setNewItemsAllowed(true);
+
+ final CheckBox readOnlyCheckbox = new CheckBox("read-only");
+ readOnlyCheckbox.setImmediate(true);
+ readOnlyCheckbox
+ .addValueChangeListener(new Property.ValueChangeListener() {
+ @Override
+ public void valueChange(Property.ValueChangeEvent event) {
+ optionGroup.setReadOnly(readOnlyCheckbox.getValue());
+ }
+ });
+ readOnlyCheckbox.setValue(Boolean.TRUE);
+
+ addComponent(optionGroup);
+ addComponent(readOnlyCheckbox);
+ }
+
+ @Override
+ protected String getTestDescription() {
+ return "Unset read-only state for Option group should not throw an exception";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 11772;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/optiongroup/ReadOnlyOptionGroupTest.java b/uitest/src/com/vaadin/tests/components/optiongroup/ReadOnlyOptionGroupTest.java
new file mode 100644
index 0000000000..dfafe8fb40
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/optiongroup/ReadOnlyOptionGroupTest.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.optiongroup;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ * Test for Option group (with new items allowed): unset read only state.
+ *
+ * @author Vaadin Ltd
+ */
+public class ReadOnlyOptionGroupTest extends MultiBrowserTest {
+
+ @Test
+ public void testOptionGroup() {
+ setDebug(true);
+ openTestURL();
+
+ WebElement checkbox = driver.findElement(By.className("v-checkbox"));
+ WebElement checkboxInput = checkbox.findElement(By.tagName("input"));
+ checkboxInput.click();
+
+ Assert.assertFalse("There is a client side exception after unset "
+ + "readonly mode for option group",
+ isElementPresent(By.className("v-Notification-error")));
+
+ Assert.assertFalse("Radio button in option group is still disabled "
+ + "after unset reaonly",
+ isElementPresent(By.className("v-radiobutton-disabled")));
+ }
+
+}