From c788e35fb671f108a30f170eeace553c4388ad23 Mon Sep 17 00:00:00 2001 From: Samuel Githengi Date: Tue, 3 Nov 2020 09:05:37 +0300 Subject: [PATCH 1/9] change priority to enum --- .../java/org/smartregister/domain/Task.java | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/smartregister/domain/Task.java b/src/main/java/org/smartregister/domain/Task.java index dfe2e43b..8c7dfd1d 100644 --- a/src/main/java/org/smartregister/domain/Task.java +++ b/src/main/java/org/smartregister/domain/Task.java @@ -42,6 +42,35 @@ public static TaskStatus get(String algorithm) { return lookup.get(algorithm); } } + + + public enum TaskPriority { + + @SerializedName("routine") + ROUTINE, + @SerializedName("urgent") + URGENT, + @SerializedName("asap") + ASAP, + @SerializedName("stat") + STAT; + + public static TaskPriority get(String algorithm) { + switch (algorithm) { + case "routine": + return ROUTINE; + case "urgent": + return URGENT; + case "asap": + return ASAP; + case "stat": + return STAT; + default: + throw new IllegalArgumentException("Not a valid Task priority"); + } + + } + } public static final String[] INACTIVE_TASK_STATUS = new String[]{TaskStatus.CANCELLED.name(), TaskStatus.ARCHIVED.name()}; @@ -55,7 +84,7 @@ public static TaskStatus get(String algorithm) { private String businessStatus; - private int priority; + private TaskPriority priority; private String code; @@ -133,11 +162,11 @@ public void setBusinessStatus(String businessStatus) { this.businessStatus = businessStatus; } - public int getPriority() { + public TaskPriority getPriority() { return priority; } - public void setPriority(int priority) { + public void setPriority(TaskPriority priority) { this.priority = priority; } From e87293f51bb6cfd1c94aca30d7fe7ea16958af2c Mon Sep 17 00:00:00 2001 From: Samuel Githengi Date: Tue, 3 Nov 2020 09:55:54 +0300 Subject: [PATCH 2/9] Update task priority to enum and default to routine --- .../java/org/smartregister/converters/TaskConverter.java | 7 +++++-- .../org/smartregister/pathevaluator/task/TaskHelper.java | 2 +- .../org/smartregister/converters/TaskConverterTest.java | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/smartregister/converters/TaskConverter.java b/src/main/java/org/smartregister/converters/TaskConverter.java index 185b61f6..6ff155cd 100644 --- a/src/main/java/org/smartregister/converters/TaskConverter.java +++ b/src/main/java/org/smartregister/converters/TaskConverter.java @@ -21,6 +21,7 @@ import com.ibm.fhir.model.type.String; import com.ibm.fhir.model.type.Uri; import com.ibm.fhir.model.type.code.TaskIntent; +import com.ibm.fhir.model.type.code.TaskPriority; import com.ibm.fhir.model.type.code.TaskStatus; public class TaskConverter { @@ -39,8 +40,10 @@ public static Task convertTasktoFihrResource(org.smartregister.domain.Task domai if (StringUtils.isNotBlank(domainTask.getLocation())) { builder.location(Reference.builder().reference(String.of(domainTask.getLocation())).build()); } - // TaskPriority priority = TaskPriority.builder().id("priority").value(java.lang.String.valueOf(domainTask.getPriority())).build(); - //TODO : Need to set priority as its an enum in FIHR + + if (domainTask.getPriority() != null) { + builder.priority(TaskPriority.builder().value(domainTask.getPriority().name()).build()); + } Reference focus = Reference.builder().reference(String.builder().value(domainTask.getFocus()).build()).build(); diff --git a/src/main/java/org/smartregister/pathevaluator/task/TaskHelper.java b/src/main/java/org/smartregister/pathevaluator/task/TaskHelper.java index 209f2471..59e5d511 100644 --- a/src/main/java/org/smartregister/pathevaluator/task/TaskHelper.java +++ b/src/main/java/org/smartregister/pathevaluator/task/TaskHelper.java @@ -48,7 +48,7 @@ public void generateTask(DomainResource resource, Action action, String planIden task.setPlanIdentifier(planIdentifier); task.setGroupIdentifier(jurisdiction); task.setStatus(Task.TaskStatus.READY); - task.setPriority(3); + task.setPriority(Task.TaskPriority.ROUTINE); task.setCode(action.getCode()); task.setDescription(action.getDescription()); task.setFocus(action.getIdentifier()); diff --git a/src/test/java/org/smartregister/converters/TaskConverterTest.java b/src/test/java/org/smartregister/converters/TaskConverterTest.java index da9ccf79..504c90c2 100644 --- a/src/test/java/org/smartregister/converters/TaskConverterTest.java +++ b/src/test/java/org/smartregister/converters/TaskConverterTest.java @@ -13,7 +13,7 @@ public class TaskConverterTest { - private String taskJson = "{\"identifier\":\"tsk11231jh22\",\"planIdentifier\":\"IRS_2018_S1\",\"groupIdentifier\":\"2018_IRS-3734{\",\"status\":\"Ready\",\"businessStatus\":\"Not Visited\",\"priority\":3,\"code\":\"IRS\",\"description\":\"Spray House\",\"focus\":\"IRS Visit\",\"for\":\"location.properties.uid:41587456-b7c8-4c4e-b433-23a786f742fc\",\"executionStartDate\":\"2018-11-10T2200\",\"executionEndDate\":\"2019-11-10T2100\",\"authoredOn\":\"2018-10-31T0700\",\"lastModified\":\"2018-10-31T0700\",\"owner\":\"demouser\",\"note\":[{\"authorString\":\"demouser\",\"time\":\"2018-01-01T0800\",\"text\":\"This should be assigned to patrick.\"}],\"serverVersion\":0,\"reasonReference\":\"reasonrefuuid\",\"location\":\"catchment1\",\"requester\":\"chw1\"}"; + private String taskJson = "{\"identifier\":\"tsk11231jh22\",\"planIdentifier\":\"IRS_2018_S1\",\"groupIdentifier\":\"2018_IRS-3734{\",\"status\":\"Ready\",\"businessStatus\":\"Not Visited\",\"priority\":\"routine\",\"code\":\"IRS\",\"description\":\"Spray House\",\"focus\":\"IRS Visit\",\"for\":\"location.properties.uid:41587456-b7c8-4c4e-b433-23a786f742fc\",\"executionStartDate\":\"2018-11-10T2200\",\"executionEndDate\":\"2019-11-10T2100\",\"authoredOn\":\"2018-10-31T0700\",\"lastModified\":\"2018-10-31T0700\",\"owner\":\"demouser\",\"note\":[{\"authorString\":\"demouser\",\"time\":\"2018-01-01T0800\",\"text\":\"This should be assigned to patrick.\"}],\"serverVersion\":0,\"reasonReference\":\"reasonrefuuid\",\"location\":\"catchment1\",\"requester\":\"chw1\"}"; private static Gson gson = new GsonBuilder().registerTypeAdapter(DateTime.class, new TaskDateTimeTypeConverter()) .serializeNulls().create(); From 271e7bad369f15631c94d594ea8b8a41a563ac4c Mon Sep 17 00:00:00 2001 From: Samuel Githengi Date: Tue, 3 Nov 2020 10:16:20 +0300 Subject: [PATCH 3/9] set task priority during task update and task conversion --- .../converters/TaskConverter.java | 2 +- .../pathevaluator/task/TaskHelper.java | 21 ++++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/smartregister/converters/TaskConverter.java b/src/main/java/org/smartregister/converters/TaskConverter.java index 6ff155cd..889968c8 100644 --- a/src/main/java/org/smartregister/converters/TaskConverter.java +++ b/src/main/java/org/smartregister/converters/TaskConverter.java @@ -42,7 +42,7 @@ public static Task convertTasktoFihrResource(org.smartregister.domain.Task domai } if (domainTask.getPriority() != null) { - builder.priority(TaskPriority.builder().value(domainTask.getPriority().name()).build()); + builder.priority(TaskPriority.builder().value(StringUtils.toRootLowerCase(domainTask.getPriority().name())).build()); } Reference focus = Reference.builder().reference(String.builder().value(domainTask.getFocus()).build()).build(); diff --git a/src/main/java/org/smartregister/pathevaluator/task/TaskHelper.java b/src/main/java/org/smartregister/pathevaluator/task/TaskHelper.java index 59e5d511..abd86215 100644 --- a/src/main/java/org/smartregister/pathevaluator/task/TaskHelper.java +++ b/src/main/java/org/smartregister/pathevaluator/task/TaskHelper.java @@ -24,9 +24,9 @@ * @author Samuel Githengi created on 06/15/20 */ public class TaskHelper { - + private PathEvaluatorLibrary pathEvaluatorLibrary = PathEvaluatorLibrary.getInstance(); - + private static Logger logger = Logger.getLogger(TaskHelper.class.getSimpleName()); /** @@ -40,7 +40,7 @@ public class TaskHelper { public void generateTask(DomainResource resource, Action action, String planIdentifier, String jurisdiction, String username, QuestionnaireResponse questionnaireResponse) { TaskDao taskDao = PathEvaluatorLibrary.getInstance().getTaskProvider().getTaskDao(); - if (taskDao.checkIfTaskExists(resource.getId(),jurisdiction, planIdentifier,action.getCode())) { + if (taskDao.checkIfTaskExists(resource.getId(), jurisdiction, planIdentifier, action.getCode())) { logger.info("Task already exists"); } else { Task task = new Task(); @@ -60,7 +60,7 @@ public void generateTask(DomainResource resource, Action action, String planIden if (action.getDynamicValue() != null) { for (DynamicValue dynamicValue : action.getDynamicValue()) { if (dynamicValue != null && dynamicValue.getExpression() != null - && dynamicValue.getExpression().getName().equals("defaultBusinessStatus")) { + && dynamicValue.getExpression().getName().equals("defaultBusinessStatus")) { task.setBusinessStatus(dynamicValue.getExpression().getExpression()); } } @@ -74,7 +74,7 @@ public void generateTask(DomainResource resource, Action action, String planIden logger.info("Created task " + task.toString()); } } - + public void updateTask(DomainResource resource, Action action) { TaskDao taskDao = PathEvaluatorLibrary.getInstance().getTaskProvider().getTaskDao(); Task task = taskDao.getTaskByIdentifier(resource.getId()); @@ -83,9 +83,14 @@ public void updateTask(DomainResource resource, Action action) { Field aField = task.getClass().getDeclaredField(dynamicValue.getPath()); aField.setAccessible(true); if (aField.getType().isAssignableFrom(Task.TaskStatus.class)) { - aField.set(task, Task.TaskStatus.get(pathEvaluatorLibrary.evaluateStringExpression(resource,dynamicValue.getExpression().getExpression()).string())); + aField.set(task, Task.TaskStatus.get(pathEvaluatorLibrary + .evaluateStringExpression(resource, dynamicValue.getExpression().getExpression()).string())); + } else if (aField.getType().isAssignableFrom(Task.TaskPriority.class)) { + aField.set(task, Task.TaskPriority.get(pathEvaluatorLibrary + .evaluateStringExpression(resource, dynamicValue.getExpression().getExpression()).string())); } else if (aField.getType().isAssignableFrom(String.class)) { - aField.set(task, pathEvaluatorLibrary.evaluateStringExpression(resource,dynamicValue.getExpression().getExpression()).string()); + aField.set(task, pathEvaluatorLibrary + .evaluateStringExpression(resource, dynamicValue.getExpression().getExpression()).string()); } else { throw new IllegalArgumentException(); } @@ -94,7 +99,7 @@ public void updateTask(DomainResource resource, Action action) { catch (Exception e) { logger.log(Level.SEVERE, "Exception occurred while updating properties using Reflection" + e); } - + taskDao.updateTask(task); } From 153d5b20ce6f9f51990c1bef168d9827be0429dc Mon Sep 17 00:00:00 2001 From: Samuel Githengi Date: Tue, 3 Nov 2020 12:53:10 +0300 Subject: [PATCH 4/9] Update unit test --- src/test/java/org/smartregister/domain/TaskTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/smartregister/domain/TaskTest.java b/src/test/java/org/smartregister/domain/TaskTest.java index d2478b85..eb50fe4f 100644 --- a/src/test/java/org/smartregister/domain/TaskTest.java +++ b/src/test/java/org/smartregister/domain/TaskTest.java @@ -7,6 +7,7 @@ import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.junit.Test; +import org.smartregister.domain.Task.TaskPriority; import org.smartregister.domain.Task.TaskStatus; import org.smartregister.utils.TaskDateTimeTypeConverter; @@ -20,9 +21,9 @@ public class TaskTest { protected static DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HHmm"); - private String taskJson = "{\"identifier\":\"tsk11231jh22\",\"planIdentifier\":\"IRS_2018_S1\",\"groupIdentifier\":\"2018_IRS-3734{\",\"status\":\"Ready\",\"businessStatus\":\"Not Visited\",\"priority\":3,\"code\":\"IRS\",\"description\":\"Spray House\",\"focus\":\"IRS Visit\",\"for\":\"location.properties.uid:41587456-b7c8-4c4e-b433-23a786f742fc\",\"executionStartDate\":\"2018-11-10T2200\",\"executionEndDate\":null,\"authoredOn\":\"2018-10-31T0700\",\"lastModified\":\"2018-10-31T0700\",\"owner\":\"demouser\",\"note\":[{\"authorString\":\"demouser\",\"time\":\"2018-01-01T0800\",\"text\":\"This should be assigned to patrick.\"}],\"serverVersion\":0,\"reasonReference\":\"reasonrefuuid\",\"location\":\"catchment1\",\"requester\":\"chw1\",\"syncStatus\":null,\"structureId\":null,\"rowid\":null}"; + private String taskJson = "{\"identifier\":\"tsk11231jh22\",\"planIdentifier\":\"IRS_2018_S1\",\"groupIdentifier\":\"2018_IRS-3734{\",\"status\":\"Ready\",\"businessStatus\":\"Not Visited\",\"priority\":\"asap\",\"code\":\"IRS\",\"description\":\"Spray House\",\"focus\":\"IRS Visit\",\"for\":\"location.properties.uid:41587456-b7c8-4c4e-b433-23a786f742fc\",\"executionStartDate\":\"2018-11-10T2200\",\"executionEndDate\":null,\"authoredOn\":\"2018-10-31T0700\",\"lastModified\":\"2018-10-31T0700\",\"owner\":\"demouser\",\"note\":[{\"authorString\":\"demouser\",\"time\":\"2018-01-01T0800\",\"text\":\"This should be assigned to patrick.\"}],\"serverVersion\":0,\"reasonReference\":\"reasonrefuuid\",\"location\":\"catchment1\",\"requester\":\"chw1\",\"syncStatus\":null,\"structureId\":null,\"rowid\":null}"; - private String task2Json = "{\"identifier\":\"tsk11231jh22\",\"planIdentifier\":\"IRS_2018_S1\",\"groupIdentifier\":\"2018_IRS-3734{\",\"status\":\"Ready\",\"businessStatus\":\"Not Visited\",\"priority\":3,\"code\":\"IRS\",\"description\":\"Spray House\",\"focus\":\"IRS Visit\",\"for\":\"location.properties.uid:41587456-b7c8-4c4e-b433-23a786f742fc\",\"executionStartDate\":\"2018-11-10T2200\",\"executionEndDate\":null,\"authoredOn\":\"2018-10-31T0700\",\"lastModified\":\"2018-10-31T07:00:00\",\"owner\":\"demouser\",\"note\":[{\"authorString\":\"demouser\",\"time\":\"2018-01-01T0800\",\"text\":\"This should be assigned to patrick.\"}],\"serverVersion\":0}"; + private String task2Json = "{\"identifier\":\"tsk11231jh22\",\"planIdentifier\":\"IRS_2018_S1\",\"groupIdentifier\":\"2018_IRS-3734{\",\"status\":\"Ready\",\"businessStatus\":\"Not Visited\",\"priority\":\"routine\",\"code\":\"IRS\",\"description\":\"Spray House\",\"focus\":\"IRS Visit\",\"for\":\"location.properties.uid:41587456-b7c8-4c4e-b433-23a786f742fc\",\"executionStartDate\":\"2018-11-10T2200\",\"executionEndDate\":null,\"authoredOn\":\"2018-10-31T0700\",\"lastModified\":\"2018-10-31T07:00:00\",\"owner\":\"demouser\",\"note\":[{\"authorString\":\"demouser\",\"time\":\"2018-01-01T0800\",\"text\":\"This should be assigned to patrick.\"}],\"serverVersion\":0}"; @Test public void testDeserialize() { @@ -31,7 +32,7 @@ public void testDeserialize() { assertEquals("2018_IRS-3734{", task.getGroupIdentifier()); assertEquals(TaskStatus.READY, task.getStatus()); assertEquals("Not Visited", task.getBusinessStatus()); - assertEquals(3, task.getPriority()); + assertEquals(TaskPriority.ASAP, task.getPriority()); assertEquals("IRS", task.getCode()); assertEquals("Spray House", task.getDescription()); assertEquals("IRS Visit", task.getFocus()); From ee814ca7de0d9e1b67de7c5c6050633530e51e70 Mon Sep 17 00:00:00 2001 From: Samuel Githengi Date: Tue, 3 Nov 2020 12:59:03 +0300 Subject: [PATCH 5/9] Add github actions --- .github/workflows/ci.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..ba93a92f --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,26 @@ +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Java CI with Maven + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + run-unit-tests: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Run Unit tests with Maven + run: mvn -B clean test jacoco:report --file pom.xml + - name: Upload coveralls report + run: mvn coveralls:report --file pom.xml From b2cfc94ab91941cec72da0a3c8dd876e2ecbf25b Mon Sep 17 00:00:00 2001 From: Samuel Githengi Date: Tue, 3 Nov 2020 13:03:26 +0300 Subject: [PATCH 6/9] Add coveralls plugin --- .github/workflows/ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ba93a92f..289aac1f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,4 +23,6 @@ jobs: - name: Run Unit tests with Maven run: mvn -B clean test jacoco:report --file pom.xml - name: Upload coveralls report - run: mvn coveralls:report --file pom.xml + run: mvn -B coveralls:report --file pom.xml + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} From d9f350b08fe19450ca3ce492ad67c4cbc5ff24b8 Mon Sep 17 00:00:00 2001 From: Samuel Githengi Date: Tue, 3 Nov 2020 13:23:13 +0300 Subject: [PATCH 7/9] Pass in repo token --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 289aac1f..1ba36b40 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,5 +24,5 @@ jobs: run: mvn -B clean test jacoco:report --file pom.xml - name: Upload coveralls report run: mvn -B coveralls:report --file pom.xml - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} + env: + repo-token: ${{ secrets.COVERALLS_TOKEN }} From c34cfc3bc99aa0c61b103b5daa86a06156612471 Mon Sep 17 00:00:00 2001 From: Samuel Githengi Date: Tue, 3 Nov 2020 13:29:38 +0300 Subject: [PATCH 8/9] pass repo token as maven argument --- .github/workflows/ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1ba36b40..4764c25a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,4 @@ jobs: - name: Run Unit tests with Maven run: mvn -B clean test jacoco:report --file pom.xml - name: Upload coveralls report - run: mvn -B coveralls:report --file pom.xml - env: - repo-token: ${{ secrets.COVERALLS_TOKEN }} + run: mvn -B coveralls:report --file pom.xml -DrepoToken=${{ secrets.COVERALLS_TOKEN }} From 8d2d715ca34160644c822e68ed86c809b4a60261 Mon Sep 17 00:00:00 2001 From: Samuel Githengi Date: Tue, 3 Nov 2020 13:38:55 +0300 Subject: [PATCH 9/9] Pass token from environment --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4764c25a..f06b1c79 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,4 +23,7 @@ jobs: - name: Run Unit tests with Maven run: mvn -B clean test jacoco:report --file pom.xml - name: Upload coveralls report - run: mvn -B coveralls:report --file pom.xml -DrepoToken=${{ secrets.COVERALLS_TOKEN }} + env: + COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_TOKEN }} + run: | + mvn -B coveralls:report --file pom.xml -DrepoToken="$COVERALLS_REPO_TOKEN"