-
Notifications
You must be signed in to change notification settings - Fork 14
/
GivenCondition.java
84 lines (70 loc) · 2.81 KB
/
GivenCondition.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package org.smartregister.immunization.domain.conditions;
import org.smartregister.immunization.db.VaccineRepo;
import org.smartregister.immunization.domain.Vaccine;
import org.smartregister.immunization.domain.VaccineCondition;
import org.smartregister.immunization.domain.VaccineSchedule;
import org.smartregister.immunization.domain.jsonmapping.Condition;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class GivenCondition extends VaccineCondition {
private final Comparison comparison;
private final String value;
private final Condition conditionData;
public GivenCondition(VaccineRepo.Vaccine vaccine, String value, Comparison comparison, Condition conditionData) {
super(vaccine);
this.value = value;
this.comparison = comparison;
this.conditionData = conditionData;
}
public static Comparison getComparison(String name) {
for (Comparison curComparison : Comparison.values()) {
if (curComparison.name.equalsIgnoreCase(name)) {
return curComparison;
}
}
return null;
}
@Override
public boolean passes(Date anchorDate, List<Vaccine> issuedVaccines) {
boolean result = false;
// Check if vaccine was given at all
Vaccine comparisonVaccine = null;
for (Vaccine curVaccine : issuedVaccines) {
if (curVaccine.getName().equalsIgnoreCase(vaccine.display())) {
comparisonVaccine = curVaccine;
break;
}
}
if (comparisonVaccine == null) return false;
Calendar comparisonDate = Calendar.getInstance();
VaccineSchedule.standardiseCalendarDate(comparisonDate);
comparisonDate = VaccineSchedule.addOffsetToCalendar(comparisonDate, value);
Calendar vaccinationDate = Calendar.getInstance();
vaccinationDate.setTime(comparisonVaccine.getDate());
VaccineSchedule.standardiseCalendarDate(vaccinationDate);
switch (comparison) {
case EXACTLY:
result = comparisonDate.getTimeInMillis() == vaccinationDate.getTimeInMillis();
break;
case AT_LEAST:
result = comparisonDate.getTimeInMillis() >= vaccinationDate.getTimeInMillis();
break;
case AT_MOST:
result = comparisonDate.getTimeInMillis() <= vaccinationDate.getTimeInMillis();
break;
default:
break;
}
return result && isWithinAge(anchorDate, comparisonVaccine.getDate(), conditionData);
}
public enum Comparison {
EXACTLY("exactly"),
AT_LEAST("at_least"),
AT_MOST("at_most");
private final String name;
Comparison(String name) {
this.name = name;
}
}
}