package org.solrmarc.index.indexer; //import playground.solrmarc.index.collector.AbstractValueCollector; import java.util.Collection; import java.util.Collections; import java.util.concurrent.atomic.AtomicLong; import org.marc4j.marc.Record; import org.solrmarc.index.collector.MultiValueCollector; import org.solrmarc.index.extractor.AbstractMultiValueExtractor; import org.solrmarc.index.extractor.AbstractSingleValueExtractor; import org.solrmarc.index.extractor.MultiValueWrapperSingleValueExtractor; import org.solrmarc.index.mapping.AbstractMultiValueMapping; import org.solrmarc.index.mapping.AbstractValueMapping; public class MultiValueIndexer extends AbstractValueIndexer<Collection<String>> { public MultiValueIndexer(final String solrFieldNamesStr, final AbstractMultiValueExtractor extractor, final AbstractValueMapping<Collection<String>>[] mappings, final MultiValueCollector collector) { super(solrFieldNamesStr, extractor, mappings, collector); } public MultiValueIndexer(String solrFieldNamesStr, final AbstractMultiValueExtractor extractor, final Collection<AbstractMultiValueMapping> mappings, final MultiValueCollector collector) { super(solrFieldNamesStr, extractor, mappings.toArray(new AbstractMultiValueMapping[0]), collector); } // public MultiValueIndexer(final String solrFieldName, final AbstractSingleValueExtractor extractor, // final AbstractValueMapping<Collection<String>>[] mappings, // final MultiValueCollector collector) // { // super(solrFieldName, new MultiValueWrapperSingleValueExtractor(extractor), mappings, collector); // } // public MultiValueIndexer(Collection<String> solrFieldNames, final AbstractMultiValueExtractor extractor, // final AbstractValueMapping<Collection<String>>[] mappings, // final MultiValueCollector collector) // { // super(solrFieldNames, extractor, mappings, collector); // } public MultiValueIndexer(String solrFieldNamesStr, final AbstractSingleValueExtractor extractor, final AbstractValueMapping<Collection<String>>[] mappings, final MultiValueCollector collector) { super(solrFieldNamesStr, new MultiValueWrapperSingleValueExtractor(extractor), mappings, collector); } public MultiValueIndexer(String solrFieldNamesStr, AbstractSingleValueExtractor extractor, Collection<AbstractMultiValueMapping> mappings, MultiValueCollector collector) { super(solrFieldNamesStr, new MultiValueWrapperSingleValueExtractor(extractor), mappings.toArray(new AbstractMultiValueMapping[0]), collector); } // public MultiValueIndexer(Collection<String> solrFieldNames, final AbstractMultiValueExtractor extractor, // final Collection<AbstractMultiValueMapping> mappings, // final MultiValueCollector collector) // { // super(solrFieldNames, extractor, mappings, collector); // } // // public MultiValueIndexer(Collection<String> solrFieldNames, final AbstractSingleValueExtractor extractor, // final AbstractValueMapping<Collection<String>>[] mappings, // final MultiValueCollector collector) // { // super(solrFieldNames, new MultiValueWrapperSingleValueExtractor(extractor), mappings, collector); // } // // public MultiValueIndexer(Collection<String> fieldnames, AbstractSingleValueExtractor extractor, // Collection<AbstractMultiValueMapping> mappings, MultiValueCollector collector) // { // super(fieldnames, new MultiValueWrapperSingleValueExtractor(extractor), mappings, collector); // } // used for making a ThreadSafe copy of the indexer public MultiValueIndexer(String solrFieldNamesStr, AbstractMultiValueExtractor extractor, AbstractMultiValueMapping[] mappings, MultiValueCollector collector, String specLabel, AtomicLong totalElapsedTime) { super(solrFieldNamesStr, extractor, mappings, collector); this.totalElapsedTime = totalElapsedTime; this.setSpecLabel(specLabel); } @Override public Collection<String> getFieldData(Record record) throws Exception { long start = System.nanoTime(); Collection<String> values; if (extractor == null) { values = Collections.emptyList(); } else { values = extractor.extract(record); } if (values == null) { values = Collections.emptyList(); } for (final AbstractValueMapping<Collection<String>> mapping : mappings) { if (mapping != null) { values = mapping.map(values); } } Collection<String> result = collector.collect(values); long end = System.nanoTime(); totalElapsedTime.addAndGet(end - start); return (result); } }