Project

General

Profile

1
package eu.dnetlib.pace.condition;
2

    
3
import java.util.List;
4
import eu.dnetlib.pace.common.AbstractPaceFunctions;
5
import eu.dnetlib.pace.config.Cond;
6
import eu.dnetlib.pace.distance.eval.ConditionEval;
7
import eu.dnetlib.pace.distance.eval.ConditionEvalMap;
8
import eu.dnetlib.pace.model.Document;
9
import eu.dnetlib.pace.model.Field;
10
import eu.dnetlib.pace.model.FieldDef;
11

    
12
/**
13
 * Abstract conditions needs a list of field names.
14
 *
15
 * @author claudio
16
 *
17
 */
18
public abstract class AbstractCondition extends AbstractPaceFunctions implements ConditionAlgo {
19

    
20
	protected Cond cond;
21

    
22
	protected List<FieldDef> fields;
23

    
24
	public AbstractCondition(final Cond cond, final List<FieldDef> fields) {
25
		this.cond = cond;
26
		this.fields = fields;
27
	}
28

    
29
	protected abstract ConditionEval verify(FieldDef fd, Field a, Field b);
30

    
31
	@Override
32
	public ConditionEvalMap verify(final Document a, final Document b) {
33
		final ConditionEvalMap res = new ConditionEvalMap();
34
		for (final FieldDef fd : getFields()) {
35

    
36
			final Field va = a.values(fd.getName());
37
			final Field vb = b.values(fd.getName());
38

    
39
			//commented out shortcuts
40
			/*
41
			if ((va.isEmpty() || vb.isEmpty()) && fd.isIgnoreMissing()) {
42
				continue;
43
			}
44
			*/
45
			res.put(fd.getName(), verify(fd, va, vb));
46
		}
47
		return res;
48
	}
49

    
50
	public List<FieldDef> getFields() {
51
		return fields;
52
	}
53

    
54
}
(1-1/11)