package eu.dnetlib.iis.wf.importer.infospace.approver;
import java.util.regex.Pattern;
import eu.dnetlib.data.proto.FieldTypeProtos.DataInfo;
import eu.dnetlib.data.proto.OafProtos.Oaf;
/**
* Inference data based result approver.
*
* @author mhorst
*
*/
public class DataInfoBasedApprover implements ResultApprover, FieldApprover {
/**
* List of blacklisted inference provenance values.
*
*/
private final String inferenceProvenanceBlacklistPattern;
/**
* Flag indicating deleted by inference objects should be skipped.
*
*/
private final boolean skipDeletedByInference;
/**
* Trust level threshold.
*
*/
private final Float trustLevelThreshold;
// ------------------------ CONSTRUCTORS --------------------------
/**
* @param inferenceProvenanceBlacklistPattern regex pattern matching inference provenance
* @param skipDeletedByInference flag indicating records deleted by inference should be skipped
* @param trustLevelThreshold trust level threshold, check is skipped when set to null
*/
public DataInfoBasedApprover(String inferenceProvenanceBlacklistPattern, boolean skipDeletedByInference,
Float trustLevelThreshold) {
this.inferenceProvenanceBlacklistPattern = inferenceProvenanceBlacklistPattern;
this.skipDeletedByInference = skipDeletedByInference;
this.trustLevelThreshold = trustLevelThreshold;
}
// ------------------------ LOGIC --------------------------
@Override
public boolean approve(Oaf oaf) {
if (oaf != null) {
return approve(oaf.getDataInfo());
} else {
return false;
}
}
/**
* Makes decision based on inference data.
*
*/
@Override
public boolean approve(DataInfo dataInfo) {
if (dataInfo != null) {
if (inferenceProvenanceBlacklistPattern != null && dataInfo.getInferred() &&
Pattern.matches(inferenceProvenanceBlacklistPattern, dataInfo.getInferenceprovenance())) {
return false;
}
if (skipDeletedByInference && dataInfo.getDeletedbyinference()) {
return false;
}
if (trustLevelThreshold != null && dataInfo.getTrust() != null && !dataInfo.getTrust().isEmpty()
&& Float.valueOf(dataInfo.getTrust()) < trustLevelThreshold) {
return false;
}
}
return true;
}
}