Skip to content

Commit

Permalink
Merge 55801b2 into bfe6822
Browse files Browse the repository at this point in the history
  • Loading branch information
rkodev committed Sep 10, 2020
2 parents bfe6822 + 55801b2 commit 0d0f4f7
Show file tree
Hide file tree
Showing 7 changed files with 180 additions and 110 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package org.smartregister.immunization.domain;

import org.smartregister.immunization.db.VaccineRepo;
import org.smartregister.immunization.domain.conditions.GivenCondition;
import org.smartregister.immunization.domain.conditions.JoinCondition;
import org.smartregister.immunization.domain.conditions.NotGivenCondition;
import org.smartregister.immunization.domain.jsonmapping.Condition;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
Expand All @@ -13,6 +16,7 @@
public abstract class VaccineCondition {
public static final String TYPE_NOT_GIVEN = "not_given";
private static final String TYPE_GIVEN = "given";
private static final String JOIN = "join";
protected final VaccineRepo.Vaccine vaccine;

public VaccineCondition(VaccineRepo.Vaccine vaccine) {
Expand All @@ -35,105 +39,16 @@ public static VaccineCondition init(String vaccineCategory, Condition conditionD
if (vaccine != null) {
return new NotGivenCondition(vaccine);
}
}

return null;
}

public abstract boolean passes(List<Vaccine> issuedVaccines);

public static class NotGivenCondition extends VaccineCondition {
} else if (conditionData.type.equals(JOIN)) {
VaccineRepo.Vaccine vaccine = VaccineRepo.getVaccine(conditionData.vaccine,
vaccineCategory);

public NotGivenCondition(VaccineRepo.Vaccine vaccine) {
super(vaccine);
return new JoinCondition(vaccine, conditionData);
}

@Override
public boolean passes(List<Vaccine> issuedVaccines) {
// Check if vaccine was not given
boolean given = false;

// TODO: Check if name used in VaccineRepo.Vaccine is the same as the one in Vaccine
for (Vaccine curVaccine : issuedVaccines) {
if (curVaccine.getName().equalsIgnoreCase(vaccine.display())) {
given = true;
break;
}
}

return !given;
}
return null;
}

public static class GivenCondition extends VaccineCondition {
private final Comparison comparison;
private final String value;

public GivenCondition(VaccineRepo.Vaccine vaccine, String value, Comparison comparison) {
super(vaccine);
this.value = value;
this.comparison = comparison;
}

public static Comparison getComparison(String name) {
for (Comparison curComparison : Comparison.values()) {
if (curComparison.name.equalsIgnoreCase(name)) {
return curComparison;
}
}
return null;
}

@Override
public boolean passes(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) {
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;
}

public enum Comparison {
EXACTLY("exactly"),
AT_LEAST("at_least"),
AT_MOST("at_most");
public abstract boolean passes(Date anchorDate, List<Vaccine> issuedVaccines);

private final String name;

Comparison(String name) {
this.name = name;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ public Alert getOfflineAlert(String baseEntityId, Date dateOfBirth,

// Check if all conditions pass
for (VaccineCondition curCondition : conditions) {
if (!curCondition.passes(issuedVaccines)) {
if (!curCondition.passes(dateOfBirth, issuedVaccines)) {
return defaultAlert;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
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 java.util.Calendar;
import java.util.Date;
import java.util.List;

public class GivenCondition extends VaccineCondition {
private final Comparison comparison;
private final String value;

public GivenCondition(VaccineRepo.Vaccine vaccine, String value, Comparison comparison) {
super(vaccine);
this.value = value;
this.comparison = comparison;
}

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) {
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;
}

public enum Comparison {
EXACTLY("exactly"),
AT_LEAST("at_least"),
AT_MOST("at_most");

private final String name;

Comparison(String name) {
this.name = name;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
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.jsonmapping.Condition;

import java.util.Date;
import java.util.List;

// TODO
public class JoinCondition extends VaccineCondition {
private Condition conditionData;

public JoinCondition(VaccineRepo.Vaccine vaccine, Condition conditionData) {
super(vaccine);
this.conditionData = conditionData;
}

public JoinCondition() {
super(null);
}

@Override
public boolean passes(Date anchorDate, List<Vaccine> issuedVaccines) {
if(conditionData.conditions != null && conditionData.conditions.size() > 0){

}

return false;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
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 java.util.Date;
import java.util.List;

public class NotGivenCondition extends VaccineCondition {

public NotGivenCondition(VaccineRepo.Vaccine vaccine) {
super(vaccine);
}

@Override
public boolean passes(Date anchorDate, List<Vaccine> issuedVaccines) {
// Check if vaccine was not given
boolean given = false;

// TODO: Check if name used in VaccineRepo.Vaccine is the same as the one in Vaccine
for (Vaccine curVaccine : issuedVaccines) {
if (curVaccine.getName().equalsIgnoreCase(vaccine.display())) {
given = true;
break;
}
}

return !given;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package org.smartregister.immunization.domain.jsonmapping;


import java.util.List;
import java.util.Map;

/**
* Created by samuelgithengi on 2/27/18.
*/
Expand All @@ -10,8 +14,12 @@ public class Condition {

public String vaccine;

public Map<String, String> age;

public String comparison;

public String value;

public List<Condition> conditions;

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
import org.smartregister.immunization.BaseUnitTest;
import org.smartregister.immunization.ImmunizationLibrary;
import org.smartregister.immunization.db.VaccineRepo;
import org.smartregister.immunization.domain.conditions.GivenCondition;
import org.smartregister.immunization.domain.conditions.NotGivenCondition;
import org.smartregister.immunization.domain.jsonmapping.Condition;
import org.smartregister.immunization.domain.jsonmapping.VaccineGroup;
import org.smartregister.immunization.repository.VaccineRepository;
Expand Down Expand Up @@ -111,23 +113,23 @@ public void assertInitAndInitVaccineWithTestData() {
object.type = "";
Assert.assertNull(VaccineCondition.init("", object));

VaccineCondition.NotGivenCondition notgiven = new VaccineCondition.NotGivenCondition(VaccineRepo.Vaccine.opv0);
NotGivenCondition notgiven = new NotGivenCondition(VaccineRepo.Vaccine.opv0);
List<Vaccine> list = new ArrayList<Vaccine>();
list.add(newVaccine);
Assert.assertNotNull(notgiven.passes(list));
Assert.assertNotNull(notgiven.passes(null, list));

String magic10d = "+10d";
VaccineCondition.GivenCondition given = new VaccineCondition.GivenCondition(VaccineRepo.Vaccine.opv0, magic10d,
VaccineCondition.GivenCondition.Comparison.AT_LEAST);
Assert.assertNull(VaccineCondition.GivenCondition.getComparison(""));
Assert.assertNotNull(given.passes(list));

given = new VaccineCondition.GivenCondition(VaccineRepo.Vaccine.opv0, magic10d,
VaccineCondition.GivenCondition.Comparison.AT_MOST);
Assert.assertNotNull(given.passes(list));
given = new VaccineCondition.GivenCondition(VaccineRepo.Vaccine.opv0, magic10d,
VaccineCondition.GivenCondition.Comparison.EXACTLY);
Assert.assertNotNull(given.passes(list));
GivenCondition given = new GivenCondition(VaccineRepo.Vaccine.opv0, magic10d,
GivenCondition.Comparison.AT_LEAST);
Assert.assertNull(GivenCondition.getComparison(""));
Assert.assertNotNull(given.passes(null, list));

given = new GivenCondition(VaccineRepo.Vaccine.opv0, magic10d,
GivenCondition.Comparison.AT_MOST);
Assert.assertNotNull(given.passes(null, list));
given = new GivenCondition(VaccineRepo.Vaccine.opv0, magic10d,
GivenCondition.Comparison.EXACTLY);
Assert.assertNotNull(given.passes(null, list));

}

Expand Down

0 comments on commit 0d0f4f7

Please sign in to comment.