aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/src/com/vaadin/client/ui/VSlider.java4
-rw-r--r--client/src/com/vaadin/client/ui/slider/SliderConnector.java1
-rw-r--r--server/src/com/vaadin/data/util/filter/Compare.java29
-rw-r--r--server/tests/src/com/vaadin/data/util/filter/CompareFilterTest.java54
-rw-r--r--uitest/src/com/vaadin/tests/fields/TabIndexes.html218
-rw-r--r--uitest/src/com/vaadin/tests/fields/TabIndexes.java3
6 files changed, 296 insertions, 13 deletions
diff --git a/client/src/com/vaadin/client/ui/VSlider.java b/client/src/com/vaadin/client/ui/VSlider.java
index 3fdd8f0313..3951550dd2 100644
--- a/client/src/com/vaadin/client/ui/VSlider.java
+++ b/client/src/com/vaadin/client/ui/VSlider.java
@@ -195,6 +195,10 @@ public class VSlider extends SimpleFocusablePanel implements Field,
// clear unnecessary opposite style attribute
base.getStyle().clearProperty(oppositeStyleAttribute);
+ if (!getElement().hasParentElement()) {
+ return;
+ }
+
final Element p = getElement().getParentElement().cast();
if (p.getPropertyInt(domProperty) > 50) {
if (isVertical()) {
diff --git a/client/src/com/vaadin/client/ui/slider/SliderConnector.java b/client/src/com/vaadin/client/ui/slider/SliderConnector.java
index e155336d75..2b78921f93 100644
--- a/client/src/com/vaadin/client/ui/slider/SliderConnector.java
+++ b/client/src/com/vaadin/client/ui/slider/SliderConnector.java
@@ -71,6 +71,7 @@ public class SliderConnector extends AbstractFieldConnector implements
getWidget().setFeedbackValue(getState().value);
getWidget().buildBase();
+ getWidget().setTabIndex(getState().tabIndex);
}
}
diff --git a/server/src/com/vaadin/data/util/filter/Compare.java b/server/src/com/vaadin/data/util/filter/Compare.java
index 7730bace6b..a13a5bfaa7 100644
--- a/server/src/com/vaadin/data/util/filter/Compare.java
+++ b/server/src/com/vaadin/data/util/filter/Compare.java
@@ -47,7 +47,8 @@ public abstract class Compare implements Filter {
* A {@link Compare} filter that accepts items for which the identified
* property value is equal to <code>value</code>.
*
- * For in-memory filters, equals() is used for the comparison. For other
+ * For in-memory filters, {@link Comparable#compareTo(Object)} or, if not
+ * Comparable, {@link #equals(Object)} is used for the comparison. For other
* containers, the comparison implementation is container dependent and may
* use e.g. database comparison operations.
*
@@ -248,8 +249,7 @@ public abstract class Compare implements Filter {
Object value = p.getValue();
switch (getOperation()) {
case EQUAL:
- return (null == this.value) ? (null == value) : this.value
- .equals(value);
+ return compareEquals(value);
case GREATER:
return compareValue(value) > 0;
case LESS:
@@ -263,6 +263,29 @@ public abstract class Compare implements Filter {
return false;
}
+ /**
+ * Checks if the this value equals the given value. Favors Comparable over
+ * equals to better support e.g. BigDecimal where equals is stricter than
+ * compareTo.
+ *
+ * @param otherValue
+ * The value to compare to
+ * @return true if the values are equal, false otherwise
+ */
+ private boolean compareEquals(Object otherValue) {
+ if (value == null || otherValue == null) {
+ return (otherValue == value);
+ } else if (value == otherValue) {
+ return true;
+ } else if (value instanceof Comparable
+ && otherValue.getClass()
+ .isAssignableFrom(getValue().getClass())) {
+ return ((Comparable) value).compareTo(otherValue) == 0;
+ } else {
+ return value.equals(otherValue);
+ }
+ }
+
@SuppressWarnings({ "unchecked", "rawtypes" })
protected int compareValue(Object value1) {
if (null == value) {
diff --git a/server/tests/src/com/vaadin/data/util/filter/CompareFilterTest.java b/server/tests/src/com/vaadin/data/util/filter/CompareFilterTest.java
index 99e8429a51..b7ccd68429 100644
--- a/server/tests/src/com/vaadin/data/util/filter/CompareFilterTest.java
+++ b/server/tests/src/com/vaadin/data/util/filter/CompareFilterTest.java
@@ -1,5 +1,6 @@
package com.vaadin.data.util.filter;
+import java.math.BigDecimal;
import java.util.Date;
import junit.framework.Assert;
@@ -153,6 +154,59 @@ public class CompareFilterTest extends AbstractFilterTest<Compare> {
Assert.assertFalse(isNonPositive.passesFilter(null, itemPositive));
}
+ public void testCompareBigDecimal() {
+ BigDecimal negative = new BigDecimal(-1);
+ BigDecimal zero = new BigDecimal(0);
+ BigDecimal positive = new BigDecimal(1);
+ positive.setScale(1);
+ BigDecimal positiveScaleTwo = new BigDecimal(1).setScale(2);
+
+ Item itemNegative = new PropertysetItem();
+ itemNegative.addItemProperty(PROPERTY1, new ObjectProperty<BigDecimal>(
+ negative, BigDecimal.class));
+ Item itemZero = new PropertysetItem();
+ itemZero.addItemProperty(PROPERTY1, new ObjectProperty<BigDecimal>(
+ zero, BigDecimal.class));
+ Item itemPositive = new PropertysetItem();
+ itemPositive.addItemProperty(PROPERTY1, new ObjectProperty<BigDecimal>(
+ positive, BigDecimal.class));
+ Item itemPositiveScaleTwo = new PropertysetItem();
+ itemPositiveScaleTwo.addItemProperty(PROPERTY1,
+ new ObjectProperty<BigDecimal>(positiveScaleTwo,
+ BigDecimal.class));
+
+ Filter equalZero = new Equal(PROPERTY1, zero);
+ Assert.assertFalse(equalZero.passesFilter(null, itemNegative));
+ Assert.assertTrue(equalZero.passesFilter(null, itemZero));
+ Assert.assertFalse(equalZero.passesFilter(null, itemPositive));
+
+ Filter isPositive = new Greater(PROPERTY1, zero);
+ Assert.assertFalse(isPositive.passesFilter(null, itemNegative));
+ Assert.assertFalse(isPositive.passesFilter(null, itemZero));
+ Assert.assertTrue(isPositive.passesFilter(null, itemPositive));
+
+ Filter isNegative = new Less(PROPERTY1, zero);
+ Assert.assertTrue(isNegative.passesFilter(null, itemNegative));
+ Assert.assertFalse(isNegative.passesFilter(null, itemZero));
+ Assert.assertFalse(isNegative.passesFilter(null, itemPositive));
+
+ Filter isNonNegative = new GreaterOrEqual(PROPERTY1, zero);
+ Assert.assertFalse(isNonNegative.passesFilter(null, itemNegative));
+ Assert.assertTrue(isNonNegative.passesFilter(null, itemZero));
+ Assert.assertTrue(isNonNegative.passesFilter(null, itemPositive));
+
+ Filter isNonPositive = new LessOrEqual(PROPERTY1, zero);
+ Assert.assertTrue(isNonPositive.passesFilter(null, itemNegative));
+ Assert.assertTrue(isNonPositive.passesFilter(null, itemZero));
+ Assert.assertFalse(isNonPositive.passesFilter(null, itemPositive));
+
+ Filter isPositiveScaleTwo = new Equal(PROPERTY1, positiveScaleTwo);
+ Assert.assertTrue(isPositiveScaleTwo.passesFilter(null,
+ itemPositiveScaleTwo));
+ Assert.assertTrue(isPositiveScaleTwo.passesFilter(null, itemPositive));
+
+ }
+
public void testCompareDate() {
Date now = new Date();
// new Date() is only accurate to the millisecond, so repeating it gives
diff --git a/uitest/src/com/vaadin/tests/fields/TabIndexes.html b/uitest/src/com/vaadin/tests/fields/TabIndexes.html
index 1f865627ad..a78be3045c 100644
--- a/uitest/src/com/vaadin/tests/fields/TabIndexes.html
+++ b/uitest/src/com/vaadin/tests/fields/TabIndexes.html
@@ -52,8 +52,58 @@
<td>0</td>
</tr>
<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-8/domChild[0]/domChild[0]@tabIndex</td>
+ <td>0</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-9/domChild[1]/domChild[1]@tabIndex</td>
+ <td>0</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-10/domChild[1]@tabIndex</td>
+ <td>0</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-11/domChild[1]@tabIndex</td>
+ <td>0</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-12@tabIndex</td>
+ <td>0</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-13@tabIndex</td>
+ <td>0</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-14@tabIndex</td>
+ <td>0</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-15/domChild[1]@tabIndex</td>
+ <td>0</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-16/domChild[0]@tabIndex</td>
+ <td>0</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-17@tabIndex</td>
+ <td>0</td>
+</tr>
+<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestsfieldsTabIndexes::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[2]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VHorizontalLayout[0]/VOrderedLayout$Slot[1]/VButton[0]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
@@ -92,8 +142,58 @@
<td>1</td>
</tr>
<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-8/domChild[0]/domChild[0]@tabIndex</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-9/domChild[1]/domChild[1]@tabIndex</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-10/domChild[1]@tabIndex</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-11/domChild[1]@tabIndex</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-12@tabIndex</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-13@tabIndex</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-14@tabIndex</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-15/domChild[1]@tabIndex</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-16/domChild[0]@tabIndex</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-17@tabIndex</td>
+ <td>1</td>
+</tr>
+<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestsfieldsTabIndexes::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[3]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VHorizontalLayout[0]/VOrderedLayout$Slot[2]/VButton[0]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
@@ -132,43 +232,143 @@
<td>7</td>
</tr>
<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-8/domChild[0]/domChild[0]@tabIndex</td>
+ <td>8</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-9/domChild[1]/domChild[1]@tabIndex</td>
+ <td>9</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-10/domChild[1]@tabIndex</td>
+ <td>10</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-11/domChild[1]@tabIndex</td>
+ <td>11</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-12@tabIndex</td>
+ <td>12</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-13@tabIndex</td>
+ <td>13</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-14@tabIndex</td>
+ <td>14</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-15/domChild[1]@tabIndex</td>
+ <td>15</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-16/domChild[0]@tabIndex</td>
+ <td>16</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-17@tabIndex</td>
+ <td>17</td>
+</tr>
+<tr>
<td>click</td>
- <td>vaadin=runcomvaadintestsfieldsTabIndexes::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[4]/VButton[0]/domChild[0]/domChild[0]</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VVerticalLayout[0]/VOrderedLayout$Slot[1]/VHorizontalLayout[0]/VOrderedLayout$Slot[3]/VButton[0]/domChild[0]/domChild[0]</td>
<td></td>
</tr>
<tr>
<td>assertAttribute</td>
<td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-1/domChild[1]/domChild[1]@tabIndex</td>
- <td>7</td>
+ <td>17</td>
</tr>
<tr>
<td>assertAttribute</td>
<td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-2/domChild[0]@tabIndex</td>
- <td>6</td>
+ <td>16</td>
</tr>
<tr>
<td>assertAttribute</td>
<td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-3/domChild[0]@tabIndex</td>
- <td>5</td>
+ <td>15</td>
</tr>
<tr>
<td>assertAttribute</td>
<td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-4/domChild[0]@tabIndex</td>
- <td>4</td>
+ <td>14</td>
</tr>
<tr>
<td>assertAttribute</td>
<td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-5@tabIndex</td>
- <td>3</td>
+ <td>13</td>
</tr>
<tr>
<td>assertAttribute</td>
<td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-6/domChild[0]@tabIndex</td>
- <td>2</td>
+ <td>12</td>
</tr>
<tr>
<td>assertAttribute</td>
<td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-7/domChild[0]@tabIndex</td>
+ <td>11</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-8/domChild[0]/domChild[0]@tabIndex</td>
+ <td>10</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-9/domChild[1]/domChild[1]@tabIndex</td>
+ <td>9</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-10/domChild[1]@tabIndex</td>
+ <td>8</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-11/domChild[1]@tabIndex</td>
+ <td>7</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-12@tabIndex</td>
+ <td>6</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-13@tabIndex</td>
+ <td>5</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-14@tabIndex</td>
+ <td>4</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-15/domChild[1]@tabIndex</td>
+ <td>3</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-16/domChild[0]@tabIndex</td>
+ <td>2</td>
+</tr>
+<tr>
+ <td>assertAttribute</td>
+ <td>vaadin=runcomvaadintestsfieldsTabIndexes::PID_Sfield-17@tabIndex</td>
<td>1</td>
</tr>
</tbody></table>
diff --git a/uitest/src/com/vaadin/tests/fields/TabIndexes.java b/uitest/src/com/vaadin/tests/fields/TabIndexes.java
index c88bb97c73..cf2e253d08 100644
--- a/uitest/src/com/vaadin/tests/fields/TabIndexes.java
+++ b/uitest/src/com/vaadin/tests/fields/TabIndexes.java
@@ -22,6 +22,7 @@ import com.vaadin.ui.OptionGroup;
import com.vaadin.ui.PasswordField;
import com.vaadin.ui.PopupDateField;
import com.vaadin.ui.RichTextArea;
+import com.vaadin.ui.Slider;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
@@ -121,7 +122,7 @@ public class TabIndexes extends AbstractTestUI {
fields.add(new TextArea());
fields.add(new RichTextArea());
fields.add(new CheckBox());
- // fields.add(new Slider());
+ fields.add(new Slider());
clearTabIndexes.click();