diff options
-rw-r--r-- | server/src/com/vaadin/data/util/converter/StringToCollectionConverter.java | 236 | ||||
-rw-r--r-- | server/tests/src/com/vaadin/tests/data/converter/StringToCollectionConverterTest.java | 147 |
2 files changed, 0 insertions, 383 deletions
diff --git a/server/src/com/vaadin/data/util/converter/StringToCollectionConverter.java b/server/src/com/vaadin/data/util/converter/StringToCollectionConverter.java deleted file mode 100644 index a84a3575f7..0000000000 --- a/server/src/com/vaadin/data/util/converter/StringToCollectionConverter.java +++ /dev/null @@ -1,236 +0,0 @@ -/* - * 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.data.util.converter; - -import java.io.Serializable; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Locale; - -/** - * A converter that converts from {@link String} to {@link Collection} of tokens - * and back. - * <p> - * Allows to break a string into tokens using delimiter. Each token can be - * converted to its own model using provided converter. - * <p> - * Default constructor uses <code>", "</code> as delimiter string and - * {@link String} for token types. Other constructors allow to configure - * delimiter and token types. - * - * @author Vaadin Ltd - */ -public class StringToCollectionConverter implements - Converter<String, Collection> { - - private final String delimiter; - private final Converter<String, ?> tokenConverter; - private final Class<?> tokenType; - private final CollectionFactory factory; - - /** - * Creates converter with <code>", "</code> as delimiter and {@link String} - * as token model type in collection. - */ - public StringToCollectionConverter() { - this(", ", null, String.class); - } - - /** - * Creates converter with given {@code delimiter} and {@link String} as - * token model type in collection. - * - * @param delimiter - * custom delimiter - */ - public StringToCollectionConverter(String delimiter) { - this(delimiter, null, String.class); - } - - /** - * Creates converter with given {@code tokenConverter} for convert tokens - * and expected {@code tokenType}. - * <p> - * If {@code tokenConverter} is null then no conversation is done and - * {@link String} is used as token type in resulting model collection. - * - * @param tokenConverter - * converter for token - * @param tokenType - * expected token model type - */ - public StringToCollectionConverter(Converter<String, ?> tokenConverter, - Class<?> tokenType) { - this(", ", tokenConverter, tokenType); - } - - /** - * Creates converter with given {@code tokenConverter} for convert tokens - * and expected {@code tokenType}. - * <p> - * If {@code tokenConverter} is null then no conversation is done and - * {@link String} is used as token type in resulting model collection. - * - * @param tokenConverter - * converter for token - * @param tokenType - * expected token model type - * @param delimiter - * delimiter in presentation string - */ - public StringToCollectionConverter(String delimiter, - Converter<String, ?> tokenConverter, Class<?> tokenClass) { - this(delimiter, tokenConverter, tokenClass, - new DefaultCollectionFactory()); - } - - /** - * Creates converter with given {@code tokenConverter} for convert tokens - * and expected {@code tokenType}. - * <p> - * If {@code tokenConverter} is null then no conversation is done and - * {@link String} is used as token type in resulting model collection. - * - * @param tokenConverter - * converter for token - * @param tokenType - * expected token model type - * @param delimiter - * delimiter in presentation string - * @param factory - * factory to create resulting collection - */ - public StringToCollectionConverter(String delimiter, - Converter<String, ?> tokenConverter, Class<?> tokenClass, - CollectionFactory factory) { - if (delimiter == null || delimiter.isEmpty()) { - throw new IllegalArgumentException( - "Delimiter should be non-empty string"); - } - this.delimiter = delimiter; - this.tokenConverter = tokenConverter; - tokenType = tokenClass; - this.factory = factory; - } - - @Override - public Class<Collection> getModelType() { - return Collection.class; - } - - @Override - public Class<String> getPresentationType() { - return String.class; - } - - @Override - public Collection convertToModel(String value, - Class<? extends Collection> targetType, Locale locale) - throws Converter.ConversionException { - int index = value.indexOf(delimiter); - int previous = 0; - Collection result = factory.createCollection(targetType); - Converter converter = tokenConverter; - while (index != -1) { - collectToken(value.substring(previous, index), result, converter, - locale); - previous = index + delimiter.length(); - index = value.indexOf(delimiter, previous); - } - if (result.size() > 0) { - collectToken(value.substring(previous), result, converter, locale); - } - return result; - } - - @Override - public String convertToPresentation(Collection value, - Class<? extends String> targetType, Locale locale) - throws Converter.ConversionException { - StringBuilder builder = new StringBuilder(); - Converter converter = tokenConverter; - for (Iterator<?> iterator = value.iterator(); iterator.hasNext();) { - if (converter == null) { - builder.append(iterator.next()); - } else { - builder.append(converter.convertToPresentation(iterator.next(), - targetType, locale)); - } - builder.append(delimiter); - } - if (builder.length() > 0) { - return builder.substring(0, builder.length() - delimiter.length()); - } else { - return builder.toString(); - } - } - - private void collectToken(String token, Collection collection, - Converter converter, Locale locale) { - if (converter == null) { - collection.add(token); - } else { - collection.add(converter.convertToModel(token, tokenType, locale)); - } - } - - /** - * Default collection factory implementation. - * - * @author Vaadin Ltd - */ - public static class DefaultCollectionFactory implements CollectionFactory { - - @Override - public Collection<?> createCollection(Class<? extends Collection> type) { - if (type.isAssignableFrom(ArrayList.class)) { - return new ArrayList(); - } else if (type.isAssignableFrom(HashSet.class)) { - return new HashSet(); - } else if (!type.isInterface() - && !Modifier.isAbstract(type.getModifiers())) { - try { - return type.newInstance(); - } catch (InstantiationException ignore) { - } catch (IllegalAccessException ignore) { - } - } - return new ArrayList(); - } - - } - - /** - * Collection factory. Defines a strategy to create collection by collection - * class. - * - * @author Vaadin Ltd - */ - public interface CollectionFactory extends Serializable { - - /** - * Create collection by its {@code type}. - * - * @param type - * collection type - * @return instantiated collection with given {@code type} - */ - Collection<?> createCollection(Class<? extends Collection> type); - } -} diff --git a/server/tests/src/com/vaadin/tests/data/converter/StringToCollectionConverterTest.java b/server/tests/src/com/vaadin/tests/data/converter/StringToCollectionConverterTest.java deleted file mode 100644 index 977985c6cb..0000000000 --- a/server/tests/src/com/vaadin/tests/data/converter/StringToCollectionConverterTest.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * 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.data.converter; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.EnumSet; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.Vector; - -import org.junit.Assert; -import org.junit.Test; - -import com.vaadin.data.util.converter.StringToCollectionConverter; -import com.vaadin.data.util.converter.StringToCollectionConverter.CollectionFactory; -import com.vaadin.data.util.converter.StringToEnumConverter; -import com.vaadin.data.util.converter.StringToIntegerConverter; - -/** - * Tests for {@link StringToCollectionConverter}. - * - * @author Vaadin Ltd - */ -public class StringToCollectionConverterTest { - - @Test - public void convertToModel_defaultCtor() { - StringToCollectionConverter converter = new StringToCollectionConverter(); - Collection<?> model = converter.convertToModel("a, b, c", List.class, - null); - Assert.assertTrue("Unexpected model class", model instanceof ArrayList); - Iterator<?> iterator = model.iterator(); - Assert.assertEquals("Incorrect fist token", "a", iterator.next()); - Assert.assertEquals("Incorrect second token", "b", iterator.next()); - Assert.assertEquals("Incorrect third token", "c", iterator.next()); - } - - @Test - public void convertToModel_customDelimiter() { - StringToCollectionConverter converter = new StringToCollectionConverter( - "x"); - Collection<?> model = converter.convertToModel("axbxc", List.class, - null); - Assert.assertTrue("Unexpected model class", model instanceof ArrayList); - Iterator<?> iterator = model.iterator(); - Assert.assertEquals("Incorrect fist token", "a", iterator.next()); - Assert.assertEquals("Incorrect second token", "b", iterator.next()); - Assert.assertEquals("Incorrect third token", "c", iterator.next()); - } - - @Test - public void convertToModel_customConverter() { - StringToCollectionConverter converter = new StringToCollectionConverter( - ",", new StringToIntegerConverter(), Integer.class); - Collection<?> model = converter.convertToModel("6,2,5", List.class, - null); - Assert.assertTrue("Unexpected model class", model instanceof ArrayList); - Iterator<?> iterator = model.iterator(); - Assert.assertEquals("Incorrect fist token", 6, iterator.next()); - Assert.assertEquals("Incorrect second token", 2, iterator.next()); - Assert.assertEquals("Incorrect third token", 5, iterator.next()); - } - - @Test - public void convertToModel_setAsCollection() { - StringToCollectionConverter converter = new StringToCollectionConverter( - " ", new StringToEnumConverter(), TestEnum.class); - Collection<?> model = converter - .convertToModel("Z X Y", Set.class, null); - Assert.assertTrue("Unexpected model class", model instanceof HashSet); - EnumSet<TestEnum> set = EnumSet.allOf(TestEnum.class); - set.removeAll(model); - Assert.assertTrue("Some values are not in resutling collection", - set.isEmpty()); - } - - @Test - public void convertToModel_customFactory() { - CollectionFactory factory = new CollectionFactory() { - - @Override - public Collection<?> createCollection( - Class<? extends Collection> type) { - return new Vector(); - } - }; - StringToCollectionConverter converter = new StringToCollectionConverter( - ", ", null, String.class, factory); - Collection<?> model = converter.convertToModel("a, b, c", - Collection.class, null); - Assert.assertTrue("Unexpected model class", model instanceof Vector); - Iterator<?> iterator = model.iterator(); - Assert.assertEquals("Incorrect fist token", "a", iterator.next()); - Assert.assertEquals("Incorrect second token", "b", iterator.next()); - Assert.assertEquals("Incorrect third token", "c", iterator.next()); - } - - @Test - public void convertToPresentation_default() { - StringToCollectionConverter converter = new StringToCollectionConverter(); - String presentation = converter.convertToPresentation( - Arrays.asList("a", "b", "c"), String.class, null); - - Assert.assertEquals("a, b, c", presentation); - } - - @Test - public void convertToPresentation_customDelimiter() { - StringToCollectionConverter converter = new StringToCollectionConverter( - "x"); - String presentation = converter.convertToPresentation( - Arrays.asList("a", "b", "c"), String.class, null); - - Assert.assertEquals("axbxc", presentation); - } - - @Test - public void convertToPresentation_customConverter() { - StringToCollectionConverter converter = new StringToCollectionConverter( - ",", new StringToEnumConverter(), TestEnum.class); - String presentation = converter.convertToPresentation( - Arrays.asList(TestEnum.Z, TestEnum.Y), String.class, null); - - Assert.assertEquals("Z,Y", presentation); - } - - public enum TestEnum { - X, Y, Z; - } -} |