package org.solrmarc.index.extractor.methodcall;
import org.marc4j.marc.Record;
import org.solrmarc.index.extractor.AbstractMultiValueExtractor;
import org.solrmarc.index.extractor.ExternalMethod;
import java.util.Collection;
public class MethodCallMultiValueExtractor extends AbstractMultiValueExtractor implements ExternalMethod
{
private final AbstractExtractorMethodCall<Collection<String>> methodCall;
private final Object[] parameters;
public MethodCallMultiValueExtractor(final AbstractExtractorMethodCall<Collection<String>> methodCall,
final Object[] staticParameters)
{
if (methodCall == null)
{
throw new NullPointerException("CustomObject is null");
}
else if (staticParameters == null)
{
throw new NullPointerException("Custom parameters is null");
}
this.methodCall = methodCall;
this.parameters = new Object[staticParameters.length + 1];
System.arraycopy(staticParameters, 0, this.parameters, 1, staticParameters.length);
}
@SuppressWarnings("unchecked")
private MethodCallMultiValueExtractor(MethodCallMultiValueExtractor toClone)
{
this.methodCall = (AbstractExtractorMethodCall<Collection<String>>) 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> extract(final Record record) throws Exception
{
return methodCall.invoke(record, parameters);
}
@Override
public boolean isThreadSafe()
{
return methodCall.isThreadSafe();
}
@Override
public Object makeThreadSafeCopy()
{
return new MethodCallMultiValueExtractor(this);
}
}