package org.solrmarc.index.mapping.impl; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.solrmarc.index.extractor.impl.patternMapping.PatternMapping; import org.solrmarc.index.mapping.AbstractMultiValueMapping; public class MultiValuePatternMapping extends AbstractMultiValueMapping { private final List<PatternMapping> patternMappings; private final boolean filter; private final boolean applyAll; private final boolean keepRaw; public MultiValuePatternMapping(List<PatternMapping> patternMappings, boolean filter, boolean applyAll, boolean keepRaw) { this.patternMappings = patternMappings; this.filter = filter; this.applyAll = applyAll; this.keepRaw = keepRaw; } public MultiValuePatternMapping(List<PatternMapping> patternMappings) { this.patternMappings = patternMappings; this.filter = false; this.applyAll = false; this.keepRaw = false; } @Override public Collection<String> map(final Collection<String> values) { List<String> mappedValues = new ArrayList<>(values.size()); if (filter) { if (applyAll) { for (String value : values) { value = PatternMapping.filterSingleValue(patternMappings, value); if (value != null && value.length() > 0) mappedValues.add(value); } } else { for (String value : values) { PatternMapping.filterValues(patternMappings, value, mappedValues); } } } else if (applyAll) { for (String value : values) { value = PatternMapping.mapSingleValue(patternMappings, value); if (value != null && value.length() > 0) mappedValues.add(value); } } else { for (String value : values) { PatternMapping.mapValues(patternMappings, value, mappedValues); } } if (mappedValues.size()== 0 && keepRaw == true) { mappedValues.addAll(values); } return mappedValues; } }