You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2014/08/14 10:40:35 UTC
[1/3] git commit: Defines new interface to implement specialized
internal converters
Repository: struts
Updated Branches:
refs/heads/feature/locale-aware-converters [created] fe329f502
Defines new interface to implement specialized internal converters
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/dfb5203e
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/dfb5203e
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/dfb5203e
Branch: refs/heads/feature/locale-aware-converters
Commit: dfb5203ea7010516ae7aa02889936392a982ab3a
Parents: d749bb8
Author: Lukasz Lenart <lu...@apache.org>
Authored: Thu Aug 14 10:39:13 2014 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Thu Aug 14 10:39:13 2014 +0200
----------------------------------------------------------------------
.../xwork2/conversion/InternalConverter.java | 12 +++++++
.../xwork2/conversion/InternalConverters.java | 37 ++++++++++++++++++++
2 files changed, 49 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/dfb5203e/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/InternalConverter.java
----------------------------------------------------------------------
diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/InternalConverter.java b/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/InternalConverter.java
new file mode 100644
index 0000000..50cf52b
--- /dev/null
+++ b/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/InternalConverter.java
@@ -0,0 +1,12 @@
+package com.opensymphony.xwork2.conversion;
+
+/**
+ * Represents specialized converters which can convert value to given type T
+ */
+public interface InternalConverter<T> {
+
+ boolean canConvert(Object value);
+
+ T convert(Object value);
+
+}
http://git-wip-us.apache.org/repos/asf/struts/blob/dfb5203e/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/InternalConverters.java
----------------------------------------------------------------------
diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/InternalConverters.java b/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/InternalConverters.java
new file mode 100644
index 0000000..849e8af
--- /dev/null
+++ b/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/InternalConverters.java
@@ -0,0 +1,37 @@
+package com.opensymphony.xwork2.conversion;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Holds reference to all internal converters to simplify lookup and registration
+ */
+public class InternalConverters<T> {
+
+ private final InternalConverter<T> NO_OP_CONVERTER = new InternalConverter<T>() {
+
+ public boolean canConvert(Object value) {
+ return false;
+ }
+
+ public T convert(Object value) {
+ return null;
+ }
+ };
+
+ private List<InternalConverter<T>> converters = new ArrayList<InternalConverter<T>>();
+
+ public boolean register(InternalConverter<T> converter) {
+ return converters.add(converter);
+ }
+
+ public InternalConverter<T> lookup(Object value) {
+ for (InternalConverter<T> converter : converters) {
+ if (converter.canConvert(value)) {
+ return converter;
+ }
+ }
+ return NO_OP_CONVERTER;
+ }
+
+}
[3/3] git commit: Uses the new internal converters and adds new test
case
Posted by lu...@apache.org.
Uses the new internal converters and adds new test case
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/fe329f50
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/fe329f50
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/fe329f50
Branch: refs/heads/feature/locale-aware-converters
Commit: fe329f50242b17f109d3e80c4213f012ce2d950a
Parents: b195fb3
Author: Lukasz Lenart <lu...@apache.org>
Authored: Thu Aug 14 10:39:52 2014 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Thu Aug 14 10:39:52 2014 +0200
----------------------------------------------------------------------
.../xwork2/conversion/impl/StringConverter.java | 25 +++++++++++++-
.../conversion/impl/StringConverterTest.java | 36 ++++++++++++++++++++
2 files changed, 60 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/fe329f50/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/StringConverter.java
----------------------------------------------------------------------
diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/StringConverter.java b/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/StringConverter.java
index e9c1417..bed8169 100644
--- a/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/StringConverter.java
+++ b/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/StringConverter.java
@@ -1,5 +1,10 @@
package com.opensymphony.xwork2.conversion.impl;
+import com.opensymphony.xwork2.LocaleProvider;
+import com.opensymphony.xwork2.conversion.InternalConverter;
+import com.opensymphony.xwork2.conversion.InternalConverters;
+import com.opensymphony.xwork2.conversion.string.StringDoubleConverter;
+import com.opensymphony.xwork2.inject.Inject;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Member;
@@ -12,9 +17,18 @@ import java.util.Map;
public class StringConverter extends DefaultTypeConverter {
+
+ private InternalConverters<String> converters = new InternalConverters<String>();
+
@Override
public Object convertValue(Map<String, Object> context, Object target, Member member, String propertyName, Object value, Class toType) {
- String result = null;
+ String result;
+
+ InternalConverter<String> converter = converters.lookup(value);
+ result = converter.convert(value);
+ if (result != null) {
+ return result;
+ }
if (value instanceof int[]) {
int[] x = (int[]) value;
@@ -70,4 +84,13 @@ public class StringConverter extends DefaultTypeConverter {
}
return result;
}
+
+ @Inject
+ public void setLocaleProvider(LocaleProvider provider) {
+ super.setLocaleProvider(provider);
+
+ converters = new InternalConverters<String>();
+ converters.register(new StringDoubleConverter(provider));
+ }
+
}
http://git-wip-us.apache.org/repos/asf/struts/blob/fe329f50/xwork-core/src/test/java/com/opensymphony/xwork2/conversion/impl/StringConverterTest.java
----------------------------------------------------------------------
diff --git a/xwork-core/src/test/java/com/opensymphony/xwork2/conversion/impl/StringConverterTest.java b/xwork-core/src/test/java/com/opensymphony/xwork2/conversion/impl/StringConverterTest.java
new file mode 100644
index 0000000..9060dbc
--- /dev/null
+++ b/xwork-core/src/test/java/com/opensymphony/xwork2/conversion/impl/StringConverterTest.java
@@ -0,0 +1,36 @@
+package com.opensymphony.xwork2.conversion.impl;
+
+import com.opensymphony.xwork2.LocaleProvider;
+import com.opensymphony.xwork2.XWorkTestCase;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+public class StringConverterTest extends XWorkTestCase {
+
+ private Map<String, Object> context = new HashMap<String, Object>();
+
+ public void testDoubleToString() throws Exception {
+ // given
+ Double d = 10.01;
+
+ StringConverter converter = new StringConverter();
+ converter.setLocaleProvider(buildProvider("DE"));
+
+ // when
+ Object actual = converter.convertValue(context, null, null, null, d, String.class);
+
+ // then
+ assertEquals("10,01", actual);
+ }
+
+ private LocaleProvider buildProvider(final String locale) {
+ return new LocaleProvider() {
+ public Locale getLocale() {
+ return new Locale(locale);
+ }
+ };
+ }
+
+}
[2/3] git commit: Adds new internal converter of Double to String
Posted by lu...@apache.org.
Adds new internal converter of Double to String
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/b195fb3a
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/b195fb3a
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/b195fb3a
Branch: refs/heads/feature/locale-aware-converters
Commit: b195fb3af7d44409dccdb94e675c1a7ace99daab
Parents: dfb5203
Author: Lukasz Lenart <lu...@apache.org>
Authored: Thu Aug 14 10:39:35 2014 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Thu Aug 14 10:39:35 2014 +0200
----------------------------------------------------------------------
.../string/StringDoubleConverter.java | 26 ++++++++++++++++++++
1 file changed, 26 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/b195fb3a/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/string/StringDoubleConverter.java
----------------------------------------------------------------------
diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/string/StringDoubleConverter.java b/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/string/StringDoubleConverter.java
new file mode 100644
index 0000000..f32f518
--- /dev/null
+++ b/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/string/StringDoubleConverter.java
@@ -0,0 +1,26 @@
+package com.opensymphony.xwork2.conversion.string;
+
+import com.opensymphony.xwork2.LocaleProvider;
+import com.opensymphony.xwork2.conversion.InternalConverter;
+
+import java.text.NumberFormat;
+
+public class StringDoubleConverter implements InternalConverter<String> {
+
+ private LocaleProvider provider;
+
+ public StringDoubleConverter(LocaleProvider provider) {
+ this.provider = provider;
+ }
+
+ public boolean canConvert(Object value) {
+ return value.getClass() == Double.class || value.getClass() == double.class;
+ }
+
+ public String convert(Object value) {
+ Double doubleValue = (Double) value;
+ NumberFormat format = NumberFormat.getInstance(provider.getLocale());
+ return format.format(doubleValue);
+ }
+
+}