package pl.edu.icm.saos.webapp.format; import java.text.ParseException; import java.util.Collections; import java.util.List; import java.util.Locale; import java.util.Set; import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import org.springframework.format.AnnotationFormatterFactory; import org.springframework.format.Formatter; import org.springframework.format.Parser; import org.springframework.format.Printer; import com.google.common.collect.Lists; import com.google.common.collect.Sets; /** * @author Łukasz Pawełczak * */ public final class MultiWordFormatterFactory implements AnnotationFormatterFactory<MultiWordFormat>, Formatter<List<String>> { //------------------------ CONSTRUCTORS -------------------------- public MultiWordFormatterFactory() { } //------------------------ LOGIC -------------------------- @Override public Set<Class<?>> getFieldTypes() { return Sets.newHashSet(List.class); } @Override public Printer<?> getPrinter(MultiWordFormat annotation, Class<?> fieldType) { return new MultiWordFormatterFactory(); } @Override public Parser<?> getParser(MultiWordFormat annotation, Class<?> fieldType) { return new MultiWordFormatterFactory(); } @Override public String print(List<String> value, Locale locale) { if (value == null || value.isEmpty()) { return StringUtils.EMPTY; } return StringUtils.join(value, " | "); } @Override public List<String> parse(String source, Locale locale) throws ParseException { if (StringUtils.isBlank(source)) { return Collections.emptyList(); } return Lists.newArrayList(source.trim().split("\\s*\\|\\s*")).stream() .filter(x -> StringUtils.isNotBlank(x)) .collect(Collectors.toList()); } }