2018-10-02 10:37:54 +02:00
|
|
|
package eu.dnetlib.pace.condition;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
import eu.dnetlib.pace.common.AbstractPaceFunctions;
|
|
|
|
import eu.dnetlib.pace.distance.eval.ConditionEval;
|
|
|
|
import eu.dnetlib.pace.distance.eval.ConditionEvalMap;
|
|
|
|
import eu.dnetlib.pace.model.Document;
|
|
|
|
import eu.dnetlib.pace.model.Field;
|
|
|
|
import eu.dnetlib.pace.model.FieldDef;
|
|
|
|
|
|
|
|
/**
|
2019-08-09 10:08:34 +02:00
|
|
|
* Abstract necessaryConditions needs a list of field names.
|
2018-10-02 10:37:54 +02:00
|
|
|
*
|
|
|
|
* @author claudio
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public abstract class AbstractCondition extends AbstractPaceFunctions implements ConditionAlgo {
|
|
|
|
|
2018-10-24 12:09:41 +02:00
|
|
|
protected String cond;
|
2018-10-02 10:37:54 +02:00
|
|
|
|
|
|
|
protected List<FieldDef> fields;
|
|
|
|
|
2018-10-24 12:09:41 +02:00
|
|
|
public AbstractCondition(final String cond, final List<FieldDef> fields) {
|
2018-10-02 10:37:54 +02:00
|
|
|
this.cond = cond;
|
|
|
|
this.fields = fields;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected abstract ConditionEval verify(FieldDef fd, Field a, Field b);
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ConditionEvalMap verify(final Document a, final Document b) {
|
|
|
|
final ConditionEvalMap res = new ConditionEvalMap();
|
|
|
|
for (final FieldDef fd : getFields()) {
|
|
|
|
|
|
|
|
final Field va = a.values(fd.getName());
|
|
|
|
final Field vb = b.values(fd.getName());
|
|
|
|
|
2019-06-18 14:05:31 +02:00
|
|
|
if (fd.isIgnoreMissing()) {
|
2018-10-02 10:37:54 +02:00
|
|
|
res.put(fd.getName(), verify(fd, va, vb));
|
2019-06-18 14:44:42 +02:00
|
|
|
} else {
|
2019-06-18 14:05:31 +02:00
|
|
|
if (va.isEmpty() || vb.isEmpty()) {
|
|
|
|
res.put(fd.getName(), new ConditionEval(cond, va, vb, -1));
|
2019-06-18 14:44:42 +02:00
|
|
|
} else {
|
2019-06-18 14:05:31 +02:00
|
|
|
res.put(fd.getName(), verify(fd, va, vb));
|
|
|
|
}
|
|
|
|
}
|
2018-10-02 10:37:54 +02:00
|
|
|
}
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
|
|
|
public List<FieldDef> getFields() {
|
|
|
|
return fields;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|