package org.solrmarc.index.mapping.impl; import java.util.Collection; import org.solrmarc.index.extractor.ExternalMethod; import org.solrmarc.index.extractor.methodcall.MultiValueMappingMethodCall; import org.solrmarc.index.mapping.AbstractMultiValueMapping; public class MethodCallMultiValueMapping extends AbstractMultiValueMapping implements ExternalMethod { private final Object[] parameters; private final MultiValueMappingMethodCall methodCall; public MethodCallMultiValueMapping(MultiValueMappingMethodCall methodCall, String[] parameters) { this.methodCall = methodCall; this.parameters = new Object[parameters.length + 1]; System.arraycopy(parameters, 0, this.parameters, 1, parameters.length); } private MethodCallMultiValueMapping(MethodCallMultiValueMapping toClone) { this.methodCall = (MultiValueMappingMethodCall) toClone.methodCall.makeThreadSafeCopy(); this.parameters = new Object[toClone.parameters.length]; System.arraycopy(toClone.parameters, 0, this.parameters, 0, toClone.parameters.length); } @Override public Collection<String> map(Collection<String> value) throws Exception { return (Collection<String>) (methodCall.invoke(value, parameters)); } @Override public boolean isThreadSafe() { // TODO Auto-generated method stub return false; } @Override public Object makeThreadSafeCopy() { return(new MethodCallMultiValueMapping(this)); } }