[
https://issues.apache.org/jira/browse/SANDBOX-501?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15006027#comment-15006027
]
Matthew P Mann edited comment on SANDBOX-501 at 11/15/15 9:04 PM:
------------------------------------------------------------------
... and more tinkering. See [attached
patch|https://issues.apache.org/jira/secure/attachment/12772417/commons-beanutils2.2015-11-15.patch].
{code}
public class StringToArrayTest {
private StringToArray converter;
private ConverterRegistry converterRegistry;
@Before
public void setUp() {
converter = new StringToArray();
converterRegistry = new ConverterRegistry()
.register(converter)
.register(new JsonNumberConverter())
.register(new JsonStringConverter())
.register(new JsonArrayToArray())
.register(BigDecimal::toBigIntegerExact)
.register(Address::parse)
.register(FunctionConverter.from(BigDecimal.class).to(double.class).using(BigDecimal::doubleValue))
.register(FunctionConverter.from(BigDecimal.class).to(int.class).using(BigDecimal::intValueExact))
.register(FunctionConverter.from(String.class).to(BigDecimal.class).using(BigDecimal::new))
.register(FunctionConverter.from(String.class).to(char.class).using(string -> {
if (length(string) != 1) {
throw new IllegalArgumentException(string);
}
return string.charAt(0);
}));
}
@Test
public void convert_StringToAddressArray() {
final String source = "[ \"1600 Pennsylvania Avenue Northwest,
Washington, DC 20500\", \"11 Wall Street, New York, NY 10005, US\", \"350
Fifth Avenue, New York, NY 10118\", \"4059 Mt Lee Drive, Hollywood, CA
90068\"]";
assertTrue(converter.canConvert(String.class, Address[].class));
final Address[] addresses = converter.convert(source, Address[].class,
converterRegistry);
assertEquals(4, addresses.length);
assertEquals("1600 Pennsylvania Avenue Northwest",
addresses[0].getStreetAddress());
assertEquals("Washington", addresses[0].getCity());
assertEquals(State.DC, addresses[0].getStateCode());
assertEquals("20500", addresses[0].getPostalCode());
assertNull(addresses[0].getCountryCode());
assertEquals("11 Wall Street", addresses[1].getStreetAddress());
assertEquals("New York", addresses[1].getCity());
assertEquals(State.NY, addresses[1].getStateCode());
assertEquals("10005", addresses[1].getPostalCode());
assertEquals("US", addresses[1].getCountryCode());
assertEquals("350 Fifth Avenue", addresses[2].getStreetAddress());
assertEquals("New York", addresses[2].getCity());
assertEquals(State.NY, addresses[2].getStateCode());
assertEquals("10118", addresses[2].getPostalCode());
assertNull(addresses[2].getCountryCode());
assertEquals("4059 Mt Lee Drive", addresses[3].getStreetAddress());
assertEquals("Hollywood", addresses[3].getCity());
assertEquals(State.CA, addresses[3].getStateCode());
assertEquals("90068", addresses[3].getPostalCode());
assertNull(addresses[3].getCountryCode());
}
...
}
{code}
was (Author: mattmann):
... and more tinkering. See [attached
patch|https://issues.apache.org/jira/secure/attachment/12772417/commons-beanutils2.2015-11-15.patch].
{code}
public class StringToArrayTest {
private StringToArray converter;
private ConverterRegistry converterRegistry;
@Before
public void setUp() {
converter = new StringToArray();
converterRegistry = new ConverterRegistry()
.register(converter)
.register(new JsonNumberConverter())
.register(new JsonStringConverter())
.register(new JsonArrayToArray())
.register(BigDecimal::toBigIntegerExact)
.register(Address::parse)
.register(FunctionConverter.from(BigDecimal.class).to(double.class).using(BigDecimal::doubleValue))
.register(FunctionConverter.from(BigDecimal.class).to(int.class).using(BigDecimal::intValueExact))
.register(FunctionConverter.from(String.class).to(BigDecimal.class).using(BigDecimal::new))
.register(FunctionConverter.from(String.class).to(char.class).using(string -> {
if (length(string) != 1) {
throw new
IllegalArgumentException(string);
}
return string.charAt(0);
}));
}
@Test
public void convert_StringToAddressArray() {
final String source = "[ \"1600 Pennsylvania Avenue Northwest,
Washington, DC 20500\", \"11 Wall Street, New York, NY 10005, US\", \"350
Fifth Avenue, New York, NY 10118\", \"4059 Mt Lee Drive, Hollywood, CA
90068\"]";
assertTrue(converter.canConvert(String.class, Address[].class));
final Address[] addresses = converter.convert(source,
Address[].class, converterRegistry);
assertEquals(4, addresses.length);
assertEquals("1600 Pennsylvania Avenue Northwest",
addresses[0].getStreetAddress());
assertEquals("Washington", addresses[0].getCity());
assertEquals(State.DC, addresses[0].getStateCode());
assertEquals("20500", addresses[0].getPostalCode());
assertNull(addresses[0].getCountryCode());
assertEquals("11 Wall Street", addresses[1].getStreetAddress());
assertEquals("New York", addresses[1].getCity());
assertEquals(State.NY, addresses[1].getStateCode());
assertEquals("10005", addresses[1].getPostalCode());
assertEquals("US", addresses[1].getCountryCode());
assertEquals("350 Fifth Avenue",
addresses[2].getStreetAddress());
assertEquals("New York", addresses[2].getCity());
assertEquals(State.NY, addresses[2].getStateCode());
assertEquals("10118", addresses[2].getPostalCode());
assertNull(addresses[2].getCountryCode());
assertEquals("4059 Mt Lee Drive",
addresses[3].getStreetAddress());
assertEquals("Hollywood", addresses[3].getCity());
assertEquals(State.CA, addresses[3].getStateCode());
assertEquals("90068", addresses[3].getPostalCode());
assertNull(addresses[3].getCountryCode());
}
...
}
{code}
> Add configurable type conversion support
> ----------------------------------------
>
> Key: SANDBOX-501
> URL: https://issues.apache.org/jira/browse/SANDBOX-501
> Project: Commons Sandbox
> Issue Type: New Feature
> Components: BeanUtils2
> Reporter: Benedikt Ritter
> Attachments: commons-beanutils2.2015-11-13.patch,
> commons-beanutils2.2015-11-14.patch, commons-beanutils2.2015-11-15.patch,
> commons-beanutils2.java8.patch
>
>
> BeanUtils1 supports automatic type conversion when setting properties. This
> should be added to BeanUtils2.
> A problem of the implementation of BeanUtils1 is, that the registry of
> converts is cached in the BeanUtils class. BeanUtils2 should provide an API
> for creating new instances of the o.a.c.beanutils2.BeanUtils with a
> customized typ conversion registry.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)