aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebContent/VAADIN/themes/reindeer/select/select.scss3
-rw-r--r--WebContent/VAADIN/themes/runo/select/select.scss3
-rw-r--r--server/src/com/vaadin/data/util/converter/DefaultConverterFactory.java2
-rw-r--r--server/src/com/vaadin/data/util/converter/StringToFloatConverter.java122
-rw-r--r--server/src/com/vaadin/server/VaadinServletService.java2
-rw-r--r--server/src/com/vaadin/ui/AbstractField.java7
-rw-r--r--server/tests/src/com/vaadin/tests/server/TestStreamVariableMapping.java2
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/abstractfield/DefaultConverterFactory.java42
-rw-r--r--uitest/test.xml2
9 files changed, 175 insertions, 10 deletions
diff --git a/WebContent/VAADIN/themes/reindeer/select/select.scss b/WebContent/VAADIN/themes/reindeer/select/select.scss
index e902458ad1..1cfd944967 100644
--- a/WebContent/VAADIN/themes/reindeer/select/select.scss
+++ b/WebContent/VAADIN/themes/reindeer/select/select.scss
@@ -84,9 +84,6 @@
-webkit-user-select: none;
cursor: default;
}
-.v-ff & .#{$primaryStyleName}-suggestmenu .gwt-MenuItem {
- height: 18px;
-}
.#{$primaryStyleName}-suggestmenu .gwt-MenuItem .v-icon {
margin-right: 3px;
}
diff --git a/WebContent/VAADIN/themes/runo/select/select.scss b/WebContent/VAADIN/themes/runo/select/select.scss
index cc9846f145..fc203a35fa 100644
--- a/WebContent/VAADIN/themes/runo/select/select.scss
+++ b/WebContent/VAADIN/themes/runo/select/select.scss
@@ -74,9 +74,6 @@
cursor: pointer;
height: 18px;
}
-.v-ff & .#{$primaryStyleName}-suggestmenu .gwt-MenuItem {
- height: 20px;
-}
.#{$primaryStyleName}-suggestmenu .gwt-MenuItem .v-icon {
margin-right: 3px;
}
diff --git a/server/src/com/vaadin/data/util/converter/DefaultConverterFactory.java b/server/src/com/vaadin/data/util/converter/DefaultConverterFactory.java
index 17b89ccb20..16bab64790 100644
--- a/server/src/com/vaadin/data/util/converter/DefaultConverterFactory.java
+++ b/server/src/com/vaadin/data/util/converter/DefaultConverterFactory.java
@@ -95,6 +95,8 @@ public class DefaultConverterFactory implements ConverterFactory {
protected Converter<String, ?> createStringConverter(Class<?> sourceType) {
if (Double.class.isAssignableFrom(sourceType)) {
return new StringToDoubleConverter();
+ } else if (Float.class.isAssignableFrom(sourceType)) {
+ return new StringToFloatConverter();
} else if (Integer.class.isAssignableFrom(sourceType)) {
return new StringToIntegerConverter();
} else if (Boolean.class.isAssignableFrom(sourceType)) {
diff --git a/server/src/com/vaadin/data/util/converter/StringToFloatConverter.java b/server/src/com/vaadin/data/util/converter/StringToFloatConverter.java
new file mode 100644
index 0000000000..76d53a7294
--- /dev/null
+++ b/server/src/com/vaadin/data/util/converter/StringToFloatConverter.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2011 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.data.util.converter;
+
+import java.text.NumberFormat;
+import java.text.ParsePosition;
+import java.util.Locale;
+
+/**
+ * A converter that converts from {@link String} to {@link Float} and back. Uses
+ * the given locale and a {@link NumberFormat} instance for formatting and
+ * parsing.
+ * <p>
+ * Leading and trailing white spaces are ignored when converting from a String.
+ * </p>
+ * <p>
+ * Override and overwrite {@link #getFormat(Locale)} to use a different format.
+ * </p>
+ *
+ * @author Vaadin Ltd
+ * @since 7.0
+ */
+public class StringToFloatConverter implements Converter<String, Float> {
+
+ /**
+ * Returns the format used by {@link #convertToPresentation(Float, Locale)}
+ * and {@link #convertToModel(String, Locale)}.
+ *
+ * @param locale
+ * The locale to use
+ * @return A NumberFormat instance
+ */
+ protected NumberFormat getFormat(Locale locale) {
+ if (locale == null) {
+ locale = Locale.getDefault();
+ }
+
+ return NumberFormat.getNumberInstance(locale);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.util.converter.Converter#convertToModel(java.lang.Object,
+ * java.util.Locale)
+ */
+ @Override
+ public Float convertToModel(String value, Locale locale)
+ throws ConversionException {
+ if (value == null) {
+ return null;
+ }
+
+ // Remove leading and trailing white space
+ value = value.trim();
+
+ ParsePosition parsePosition = new ParsePosition(0);
+ Number parsedValue = getFormat(locale).parse(value, parsePosition);
+ if (parsePosition.getIndex() != value.length()) {
+ throw new ConversionException("Could not convert '" + value
+ + "' to " + getModelType().getName());
+ }
+ if (parsedValue == null) {
+ // Convert "" to null
+ return null;
+ }
+
+ return parsedValue.floatValue();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang
+ * .Object, java.util.Locale)
+ */
+ @Override
+ public String convertToPresentation(Float value, Locale locale)
+ throws ConversionException {
+ if (value == null) {
+ return null;
+ }
+
+ return getFormat(locale).format(value);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.data.util.converter.Converter#getModelType()
+ */
+ @Override
+ public Class<Float> getModelType() {
+ return Float.class;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.vaadin.data.util.converter.Converter#getPresentationType()
+ */
+ @Override
+ public Class<String> getPresentationType() {
+ return String.class;
+ }
+}
diff --git a/server/src/com/vaadin/server/VaadinServletService.java b/server/src/com/vaadin/server/VaadinServletService.java
index 7a15c0cc19..55c95f628a 100644
--- a/server/src/com/vaadin/server/VaadinServletService.java
+++ b/server/src/com/vaadin/server/VaadinServletService.java
@@ -205,7 +205,7 @@ public class VaadinServletService extends VaadinService {
// Just ignore problem here
}
- if (appId == null || "".equals(appId)) {
+ if (appId == null || "".equals(appId) || "/".equals(appId)) {
appId = "ROOT";
}
appId = appId.replaceAll("[^a-zA-Z0-9]", "");
diff --git a/server/src/com/vaadin/ui/AbstractField.java b/server/src/com/vaadin/ui/AbstractField.java
index 59e986cd23..9cf72a36b3 100644
--- a/server/src/com/vaadin/ui/AbstractField.java
+++ b/server/src/com/vaadin/ui/AbstractField.java
@@ -1344,8 +1344,11 @@ public abstract class AbstractField<T> extends AbstractComponent implements
}
private void localeMightHaveChanged() {
- if (!equals(valueLocale, getLocale())) {
- Object modelValue = convertToModel(getValue(), valueLocale);
+ if (!equals(valueLocale, getLocale()) && dataSource != null
+ && !isBuffered() && !isModified()) {
+ // When we have a data source and the internal value is directly
+ // read from that we want to update the value
+ Object modelValue = convertToModel(getInternalValue(), valueLocale);
setValue(convertFromModel(modelValue));
}
}
diff --git a/server/tests/src/com/vaadin/tests/server/TestStreamVariableMapping.java b/server/tests/src/com/vaadin/tests/server/TestStreamVariableMapping.java
index 250fa3f771..467a76dfa6 100644
--- a/server/tests/src/com/vaadin/tests/server/TestStreamVariableMapping.java
+++ b/server/tests/src/com/vaadin/tests/server/TestStreamVariableMapping.java
@@ -48,6 +48,7 @@ public class TestStreamVariableMapping extends TestCase {
}
public void testAddStreamVariable() {
+ owner.getUI().getConnectorTracker().registerConnector(owner);
String targetUrl = cm.getStreamVariableTargetUrl(owner, variableName,
streamVariable);
assertTrue(targetUrl.startsWith("app://APP/UPLOAD/-1/"
@@ -61,6 +62,7 @@ public class TestStreamVariableMapping extends TestCase {
public void testRemoveVariable() {
ConnectorTracker tracker = owner.getUI().getConnectorTracker();
+ tracker.registerConnector(owner);
cm.getStreamVariableTargetUrl(owner, variableName, streamVariable);
assertNotNull(tracker.getStreamVariable(owner.getConnectorId(),
variableName));
diff --git a/server/tests/src/com/vaadin/tests/server/component/abstractfield/DefaultConverterFactory.java b/server/tests/src/com/vaadin/tests/server/component/abstractfield/DefaultConverterFactory.java
index 9338d74f05..698e9bcee4 100644
--- a/server/tests/src/com/vaadin/tests/server/component/abstractfield/DefaultConverterFactory.java
+++ b/server/tests/src/com/vaadin/tests/server/component/abstractfield/DefaultConverterFactory.java
@@ -15,6 +15,33 @@ import com.vaadin.ui.TextField;
public class DefaultConverterFactory extends TestCase {
+ public static class FloatBean {
+ float f1;
+ Float f2;
+
+ public FloatBean(float f1, Float f2) {
+ this.f1 = f1;
+ this.f2 = f2;
+ }
+
+ public float getF1() {
+ return f1;
+ }
+
+ public void setF1(float f1) {
+ this.f1 = f1;
+ }
+
+ public Float getF2() {
+ return f2;
+ }
+
+ public void setF2(Float f2) {
+ this.f2 = f2;
+ }
+
+ }
+
Person paulaBean = new Person("Paula", "Brilliant", "paula@brilliant.com",
34, Sex.FEMALE, new Address("Paula street 1", 12345, "P-town",
Country.FINLAND));
@@ -25,6 +52,21 @@ public class DefaultConverterFactory extends TestCase {
paulaBean.setRent(rent);
}
+ public void testFloatConversion() {
+ VaadinSession sess = new VaadinSession(null);
+ VaadinSession.setCurrent(sess);
+
+ TextField tf = new TextField();
+ tf.setLocale(new Locale("en", "US"));
+ tf.setPropertyDataSource(new MethodProperty<Integer>(new FloatBean(12f,
+ 23f), "f2"));
+ assertEquals("23", tf.getValue());
+ tf.setValue("24");
+ assertEquals("24", tf.getValue());
+ assertEquals(24f, tf.getConvertedValue());
+ assertEquals(24f, tf.getPropertyDataSource().getValue());
+ }
+
public void testDefaultNumberConversion() {
VaadinSession app = new VaadinSession(null);
VaadinSession.setCurrent(app);
diff --git a/uitest/test.xml b/uitest/test.xml
index 294d0130e4..8f65841744 100644
--- a/uitest/test.xml
+++ b/uitest/test.xml
@@ -8,7 +8,7 @@
<!-- Configuration -->
<!-- ================================================================== -->
<!-- Browsers to use for testing -->
- <property name="browsers-windows" value="winxp-ie8,win7-ie9,winxp-firefox12,winxp-safari5,winxp-googlechrome21,winxp-opera11" />
+ <property name="browsers-windows" value="winxp-ie8,win7-ie9,winxp-firefox17-esr,winxp-safari5,winxp-googlechrome21,winxp-opera11" />
<property name="browsers-linux" value="linux-firefox3,linux-opera10,linux-googlechrome8" />
<property name="browsers-mac" value="osx-firefox3,osx-opera10,osx-googlechrome8,osx-safari4,osx-safari5" />