Skip to content

Commit

Permalink
Merge 688733f into 5da1b87
Browse files Browse the repository at this point in the history
  • Loading branch information
rehammuzzamil committed Jul 13, 2020
2 parents 5da1b87 + 688733f commit 7b42b4c
Show file tree
Hide file tree
Showing 7 changed files with 113 additions and 5 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<artifactId>opensrp-plan-evaluator</artifactId>
<packaging>jar</packaging>
<version>0.0.16-SNAPSHOT</version>
<version>0.0.17-SNAPSHOT</version>
<name>OpenSRP Plan Evaluator</name>
<description>OpenSRP Plan Evaluator Library</description>
<url>https://github.com/OpenSRP/opensrp-plan-evaluator</url>
Expand Down
20 changes: 19 additions & 1 deletion src/main/java/org/smartregister/domain/Task.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
import org.joda.time.DateTime;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@ToString
public class Task implements Serializable{
Expand All @@ -22,7 +24,23 @@ public enum TaskStatus {
IN_PROGRESS, @SerializedName("Completed")
COMPLETED, @SerializedName("Failed")
FAILED, @SerializedName("Archived")
ARCHIVED
ARCHIVED;

private static final Map<String, TaskStatus> lookup = new HashMap<String, TaskStatus>();

static {
lookup.put("Draft", TaskStatus.DRAFT);
lookup.put("Ready", TaskStatus.READY);
lookup.put("Cancelled", TaskStatus.CANCELLED);
lookup.put("In Progress", TaskStatus.IN_PROGRESS);
lookup.put("Completed", TaskStatus.COMPLETED);
lookup.put("Failed", TaskStatus.FAILED);
lookup.put("Archived", TaskStatus.ARCHIVED);
}

public static TaskStatus get(String algorithm) {
return lookup.get(algorithm);
}
}

public static final String[] INACTIVE_TASK_STATUS = new String[]{TaskStatus.CANCELLED.name(), TaskStatus.ARCHIVED.name()};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,9 @@ public interface TaskDao {
boolean checkIfTaskExists(String baseEntityId, String planIdentifier, String code);

List<Task> findAllTasksForEntity(String id);


org.smartregister.domain.Task getTaskByEntityId(String id);

void updateTask(org.smartregister.domain.Task task);

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.Collections;
import java.util.List;

import org.smartregister.domain.Action;
import org.smartregister.domain.Jurisdiction;
import org.smartregister.domain.PlanDefinition;
import org.smartregister.pathevaluator.PathEvaluatorLibrary;
Expand Down Expand Up @@ -117,8 +118,13 @@ private void evaluatePlan(PlanDefinition planDefinition, TriggerType triggerEven
questionnaireResponse == null ? resource
: questionnaireResponse.toBuilder().contained(Collections.singleton(resource)).build(),
action, planDefinition.getIdentifier(), triggerEvent)) {
taskHelper.generateTask(resource, action, planDefinition.getIdentifier(), jurisdiction.getCode(),
username,questionnaireResponse);
if (action.getType().equals(Action.ActionType.UPDATE)) {
taskHelper.updateTask(resource, action);
} else {
taskHelper.generateTask(resource, action, planDefinition.getIdentifier(), jurisdiction.getCode(),
username, questionnaireResponse);
}

}
});
}
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/org/smartregister/pathevaluator/task/TaskHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
*/
package org.smartregister.pathevaluator.task;

import java.lang.reflect.Field;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.joda.time.DateTime;
Expand Down Expand Up @@ -70,6 +72,29 @@ 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.getTaskByEntityId(resource.getId());
try {
for (DynamicValue dynamicValue : action.getDynamicValue()) {
Field aField = task.getClass().getDeclaredField(dynamicValue.getPath());
aField.setAccessible(true);
if (aField.getType().isAssignableFrom(Task.TaskStatus.class)) {
aField.set(task, Task.TaskStatus.get(dynamicValue.getExpression().getExpression()));
} else if (aField.getType().isAssignableFrom(String.class)) {
aField.set(task, dynamicValue.getExpression().getExpression());
} else {
throw new IllegalArgumentException();
}
}
}
catch (Exception e) {
logger.log(Level.SEVERE, "Exception occurred while updating properties using Reflection" + e);
}

taskDao.updateTask(task);
}

private DateTime getDateTime(ExecutionPeriod executionPeriod, boolean start) {
if (executionPeriod != null) {
Expand Down
40 changes: 40 additions & 0 deletions src/test/java/org/smartregister/pathevaluator/TestData.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,16 @@

import java.util.ArrayList;
import java.util.List;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;

import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.smartregister.domain.Jurisdiction;
import org.smartregister.domain.Action;
import org.smartregister.domain.DynamicValue;
import org.smartregister.domain.Expression;
import org.smartregister.domain.PlanDefinition;
import org.smartregister.utils.DateTypeConverter;
import org.smartregister.utils.TaskDateTimeTypeConverter;
Expand Down Expand Up @@ -102,6 +107,8 @@ public class TestData {
+ "}]\n"
+ "}";

public static String TASK_JSON = "{\"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}";

public static PlanDefinition createPlan() {
return gson.fromJson(plan, PlanDefinition.class);
}
Expand Down Expand Up @@ -141,4 +148,37 @@ public static PlanDefinition createPlanV1() {
return gson.fromJson(plan_1, PlanDefinition.class);
}

public static org.smartregister.domain.Task createDomainTask() {
return gson.fromJson(TASK_JSON, org.smartregister.domain.Task.class);
}

public static Action createAction(){
Action action = new Action();
Set<DynamicValue> dynamicValues = new HashSet<>();
DynamicValue dynamicValue = new DynamicValue();
Expression expression = new Expression();
expression.setExpression("Cancelled");
dynamicValue.setPath("status");
dynamicValue.setExpression(expression);
dynamicValues.add(dynamicValue);

dynamicValue = new DynamicValue();
expression = new Expression();
expression.setExpression("Family Already Registered");
dynamicValue.setPath("businessStatus");
dynamicValue.setExpression(expression);
dynamicValues.add(dynamicValue);

dynamicValue = new DynamicValue();
expression = new Expression();
expression.setExpression("Family Already Registered");
dynamicValue.setPath("businessStatus");
dynamicValue.setExpression(expression);
dynamicValues.add(dynamicValue);

action.setType(Action.ActionType.UPDATE);
action.setDynamicValue(dynamicValues);
return action;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -108,4 +108,19 @@ public void testShouldNotGenerateTask() {
taskHelper.generateTask(patient, planDefinition.getActions().get(0), planIdentifier, jurisdiction, "testUser", null);
verify(taskDao, never()).saveTask(any(Task.class), any(QuestionnaireResponse.class));
}

@Test
public void testUpdateTask() {
Task task = TestData.createDomainTask();
Action action = TestData.createAction();

when(taskDao.getTaskByEntityId(anyString())).thenReturn(task);
Mockito.doNothing().when(taskDao).updateTask(any(Task.class));
taskHelper.updateTask(patient, action);
verify(taskDao, times(1)).updateTask(taskCaptor.capture());
Task updatedTask = taskCaptor.getValue();
assertEquals("location.properties.uid:41587456-b7c8-4c4e-b433-23a786f742fc", updatedTask.getForEntity());
assertEquals("Family Already Registered", updatedTask.getBusinessStatus());
assertEquals("CANCELLED", updatedTask.getStatus().name());
}
}

0 comments on commit 7b42b4c

Please sign in to comment.