2020-02-13 16:49:45 +01:00
|
|
|
package eu.dnetlib.dhp.utils.saxon;
|
|
|
|
|
|
|
|
import net.sf.saxon.expr.XPathContext;
|
2020-02-14 12:28:52 +01:00
|
|
|
import net.sf.saxon.om.Item;
|
2020-02-13 16:49:45 +01:00
|
|
|
import net.sf.saxon.om.Sequence;
|
|
|
|
import net.sf.saxon.trans.XPathException;
|
|
|
|
import net.sf.saxon.value.SequenceType;
|
|
|
|
import net.sf.saxon.value.StringValue;
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
|
|
public class PickFirst extends AbstractExtensionFunction {
|
|
|
|
|
2020-04-27 14:45:40 +02:00
|
|
|
@Override
|
|
|
|
public String getName() {
|
|
|
|
return "pickFirst";
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Sequence doCall(XPathContext context, Sequence[] arguments) throws XPathException {
|
|
|
|
if (arguments == null | arguments.length == 0) {
|
|
|
|
return new StringValue("");
|
2020-02-13 16:49:45 +01:00
|
|
|
}
|
|
|
|
|
2020-04-27 14:45:40 +02:00
|
|
|
final String s1 = getValue(arguments[0]);
|
|
|
|
final String s2 = getValue(arguments[1]);
|
2020-02-13 16:49:45 +01:00
|
|
|
|
2020-04-27 14:45:40 +02:00
|
|
|
return new StringValue(StringUtils.isNotBlank(s1) ? s1 : StringUtils.isNotBlank(s2) ? s2 : "");
|
|
|
|
}
|
2020-02-13 16:49:45 +01:00
|
|
|
|
2020-04-27 14:45:40 +02:00
|
|
|
private String getValue(final Sequence arg) throws XPathException {
|
|
|
|
if (arg != null) {
|
|
|
|
final Item item = arg.head();
|
|
|
|
if (item != null) {
|
|
|
|
return item.getStringValue();
|
|
|
|
}
|
2020-02-13 16:49:45 +01:00
|
|
|
}
|
2020-04-27 14:45:40 +02:00
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getMinimumNumberOfArguments() {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getMaximumNumberOfArguments() {
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public SequenceType[] getArgumentTypes() {
|
|
|
|
return new SequenceType[] {SequenceType.OPTIONAL_ITEM};
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public SequenceType getResultType(SequenceType[] suppliedArgumentTypes) {
|
|
|
|
return SequenceType.SINGLE_STRING;
|
|
|
|
}
|
2020-02-13 16:49:45 +01:00
|
|
|
}
|