package org.solrmarc.index.mapping.impl; import java.util.*; import java.util.regex.Pattern; import org.solrmarc.index.mapping.AbstractMultiValueMapping; public class MultiValueTranslationMapping extends AbstractMultiValueMapping { private final static Pattern SEPARATOR_PATTERN = Pattern.compile("[|]"); private final Properties translationMapping; private final String defaultValue; private boolean displayRaw = false; public MultiValueTranslationMapping(Properties translationMapping) { this.translationMapping = translationMapping; String property = null; for (final String defaultKey : DEFAULT_KEYS) { property = translationMapping.getProperty(defaultKey); if (property != null) { break; } } String dRaw = translationMapping.getProperty(displayRawIfMissing); if (dRaw!= null && dRaw.equals("true")) displayRaw = true; this.defaultValue = property; } @Override public Collection<String> map(final Collection<String> values) { List<String> mappedValues = new ArrayList<>(values.size()); for (String value : values) { final String translation = (value == null) ? defaultValue : translationMapping.getProperty(value, defaultValue); if (translation != null && !translation.equals("null")) { if (translation.contains("|")) { // TODO: This splitting should be done in the factory somehow. String[] translationParts = SEPARATOR_PATTERN.split(translation); Collections.addAll(mappedValues, translationParts); } else { mappedValues.add(translation); } } else if (displayRaw) { mappedValues.add(value); } } return mappedValues; } }