package org.solrmarc.index.mapping.impl;
import java.util.ArrayList;
import java.util.Collection;
import org.solrmarc.index.extractor.ExternalMethod;
import org.solrmarc.index.extractor.methodcall.SingleValueMappingMethodCall;
import org.solrmarc.index.mapping.AbstractMultiValueMapping;
public class MethodCallSingleValueMapping extends AbstractMultiValueMapping implements ExternalMethod
{
private final Object[] parameters;
private final SingleValueMappingMethodCall methodCall;
public MethodCallSingleValueMapping(SingleValueMappingMethodCall methodCall, String[] parameters)
{
this.methodCall = methodCall;
this.parameters = new Object[parameters.length + 1];
System.arraycopy(parameters, 0, this.parameters, 1, parameters.length);
}
private MethodCallSingleValueMapping(MethodCallSingleValueMapping toClone)
{
this.methodCall = (SingleValueMappingMethodCall) 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> values) throws Exception
{
Collection<String> result = new ArrayList<String>(values.size());
for (String value : values)
{
String oneResult = (String) (methodCall.invoke(value, parameters));
if (oneResult != null) result.add(oneResult);
}
return(result);
}
@Override
public boolean isThreadSafe()
{
// TODO Auto-generated method stub
return false;
}
@Override
public Object makeThreadSafeCopy()
{
return(new MethodCallSingleValueMapping(this));
}
}