Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c9ba9c1234 | ||
|
|
f389cfcdfd |
@@ -9,6 +9,7 @@ import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class GardenSchedule {
|
||||
@@ -19,6 +20,7 @@ public class GardenSchedule {
|
||||
* Comparators to create sorted Task List
|
||||
*/
|
||||
static final Comparator<Task> sortByStartDate = Comparator.comparing(Task::getStartDate);
|
||||
static final Comparator<Task> sortByNextExecution = Comparator.comparing(Task::getNextExecution);
|
||||
|
||||
/**
|
||||
* Constructor to create Database Objects.
|
||||
@@ -136,10 +138,22 @@ public class GardenSchedule {
|
||||
* @throws IOException If the database cannot be accessed
|
||||
*/
|
||||
public List<List<Task>> getTasksUpcomingWeek() throws IOException {
|
||||
final int listLength = 7;
|
||||
List<Task> weekTasks = taskList.getTaskList(LocalDate.now(), LocalDate.now().plusDays(listLength - 1));
|
||||
List<List<Task>> dayTaskList = new ArrayList<>();
|
||||
for(int i = 0; i < 7; i++) {
|
||||
for(int i = 0; i < listLength; i++) {
|
||||
LocalDate date = LocalDate.now().plusDays(i);
|
||||
dayTaskList.add(taskList.getTaskList(date, date));
|
||||
dayTaskList.add(new ArrayList<>());
|
||||
final int finalI = i;
|
||||
weekTasks.forEach(task -> {
|
||||
LocalDate checkDate = task.getNextExecution();
|
||||
do {
|
||||
if (date.equals(checkDate) && !date.isAfter(task.getEndDate().orElse(LocalDate.MIN))) {
|
||||
dayTaskList.get(finalI).add(task);
|
||||
}
|
||||
checkDate = checkDate.plusDays(task.getInterval().orElse(0));
|
||||
} while (task.getInterval().isPresent() && checkDate.isBefore(LocalDate.now().plusDays(listLength)));
|
||||
});
|
||||
}
|
||||
return dayTaskList;
|
||||
}
|
||||
@@ -150,11 +164,8 @@ public class GardenSchedule {
|
||||
* @throws IOException If the database cannot be accessed
|
||||
*/
|
||||
public List<List<Task>> getTasksUpcomingWeekForCrop(Long cropId) throws IOException {
|
||||
List<List<Task>> dayTaskList = new ArrayList<>();
|
||||
for(int i = 0; i < 7; i++) {
|
||||
LocalDate date = LocalDate.now().plusDays(i);
|
||||
dayTaskList.add(filterListByCrop(taskList.getTaskList(date, date), cropId));
|
||||
}
|
||||
List<List<Task>> dayTaskList = getTasksUpcomingWeek();
|
||||
dayTaskList.forEach(taskList -> taskList.removeIf(task -> task.getCropId() != cropId));
|
||||
return dayTaskList;
|
||||
}
|
||||
|
||||
@@ -166,7 +177,7 @@ public class GardenSchedule {
|
||||
* @throws IOException If the database cannot be accessed
|
||||
*/
|
||||
public List<Task> getFilteredTaskList(LocalDate start, LocalDate end) throws IOException {
|
||||
return getSortedTaskList(taskList.getTaskList(start, end), sortByStartDate);
|
||||
return getSortedTaskList(taskList.getTaskList(start, end), sortByNextExecution);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
package ch.zhaw.gartenverwaltung.notifier;
|
||||
|
||||
import ch.zhaw.gartenverwaltung.models.GardenSchedule;
|
||||
import ch.zhaw.gartenverwaltung.types.Task;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class Notifier implements Runnable{
|
||||
private final GardenSchedule gardenSchedule;
|
||||
|
||||
public Notifier(GardenSchedule gardenSchedule) {
|
||||
this.gardenSchedule = gardenSchedule;
|
||||
}
|
||||
|
||||
private void sendNotification(Task task){
|
||||
// TODO implement
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
gardenSchedule.getTaskList().forEach(new Consumer<Task>() {
|
||||
@Override
|
||||
public void accept(Task task) {
|
||||
if(task.getNextNotification() != null && task.getNextNotification().isBefore(LocalDate.now().minusDays(1))){
|
||||
sendNotification(task);
|
||||
task.setNextNotification(task.getNextExecution());
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (IOException e) {
|
||||
// TODO Logger
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,7 @@ public class Task {
|
||||
name= "";
|
||||
description= "";
|
||||
startDate = LocalDate.now();
|
||||
endDate = startDate;
|
||||
nextExecution = startDate;
|
||||
}
|
||||
|
||||
@@ -34,6 +35,7 @@ public class Task {
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.startDate = startDate;
|
||||
this.endDate = startDate;
|
||||
nextExecution = startDate;
|
||||
this.cropId = cropId;
|
||||
}
|
||||
@@ -63,16 +65,14 @@ public class Task {
|
||||
}
|
||||
|
||||
public boolean isInTimePeriode(LocalDate searchStartDate, LocalDate searchEndDate){
|
||||
return startDate.isAfter(searchStartDate) && startDate.isBefore(searchEndDate);
|
||||
return endDate.isAfter(searchStartDate) && startDate.isBefore(searchEndDate);
|
||||
}
|
||||
|
||||
public void done(){
|
||||
if(interval != null && !nextExecution.plusDays(interval).isAfter(endDate)){
|
||||
nextExecution = nextExecution.plusDays(interval);
|
||||
nextNotification = nextExecution;
|
||||
} else {
|
||||
nextExecution = null;
|
||||
nextNotification = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,4 @@ module ch.zhaw.gartenverwaltung {
|
||||
exports ch.zhaw.gartenverwaltung.types;
|
||||
exports ch.zhaw.gartenverwaltung.models;
|
||||
exports ch.zhaw.gartenverwaltung.json;
|
||||
exports ch.zhaw.gartenverwaltung.notifier;
|
||||
opens ch.zhaw.gartenverwaltung.notifier to javafx.fxml;
|
||||
}
|
||||
@@ -15,7 +15,7 @@ import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
class GardenScheduleTest {
|
||||
LocalDate exampleStartDate = LocalDate.of(2020, 02, 02);
|
||||
LocalDate exampleStartDate = LocalDate.of(2020, 2, 2);
|
||||
TaskList taskList;
|
||||
PlantList plantList;
|
||||
List<Plant> examplePlantList;
|
||||
@@ -43,6 +43,7 @@ class GardenScheduleTest {
|
||||
private TaskList mockTaskDatabase(List<Task> exampleTaskList) throws IOException {
|
||||
TaskList taskList = mock(JsonTaskList.class);
|
||||
when(taskList.getTaskList(LocalDate.MIN, LocalDate.MAX)).thenReturn(exampleTaskList);
|
||||
when(taskList.getTaskList(LocalDate.now(), LocalDate.now().plusDays(7 - 1))).thenReturn(exampleTaskList);
|
||||
|
||||
when(taskList.getTaskList(LocalDate.now(), LocalDate.MAX)).thenReturn((exampleTaskList.subList(1, 4)));
|
||||
|
||||
@@ -105,7 +106,7 @@ class GardenScheduleTest {
|
||||
exampleTaskList.add(new Task("name", "description", LocalDate.now().plusDays(1), 2L));
|
||||
exampleTaskList.add(new Task("name", "description", LocalDate.now(), 1L));
|
||||
exampleTaskList.add(new Task("name", "description", LocalDate.of(9019, 5, 5), 1L));
|
||||
exampleTaskList.add(new Task("name", "description", LocalDate.of(2019, 5, 5), 2L));
|
||||
exampleTaskList.add(new Task("name", "description", LocalDate.now().minusDays(10), LocalDate.now().plusDays(4),2, 2L));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -157,19 +158,22 @@ class GardenScheduleTest {
|
||||
assertEquals(7, dayList.size());
|
||||
|
||||
//Check day 0
|
||||
assertEquals(1, dayList.get(0).size());
|
||||
assertEquals(exampleTaskList.get(2), dayList.get(0).get(0));
|
||||
assertEquals(2, dayList.get(0).size());
|
||||
assertTrue(dayList.get(0).contains(exampleTaskList.get(2)));
|
||||
assertTrue(dayList.get(0).contains(exampleTaskList.get(4)));
|
||||
|
||||
//Check day 1
|
||||
assertEquals(1, dayList.get(1).size());
|
||||
assertEquals(exampleTaskList.get(1), dayList.get(1).get(0));
|
||||
assertTrue(dayList.get(1).contains(exampleTaskList.get(1)));
|
||||
|
||||
//Check day 2
|
||||
assertEquals(0, dayList.get(2).size());
|
||||
assertEquals(1, dayList.get(2).size());
|
||||
assertTrue(dayList.get(2).contains(exampleTaskList.get(4)));
|
||||
//Check day 3
|
||||
assertEquals(0, dayList.get(3).size());
|
||||
//Check day 4
|
||||
assertEquals(0, dayList.get(4).size());
|
||||
assertEquals(1, dayList.get(4).size());
|
||||
assertTrue(dayList.get(4).contains(exampleTaskList.get(4)));
|
||||
//Check day 5
|
||||
assertEquals(0, dayList.get(5).size());
|
||||
//Check day 6
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
"name" : "sow plant",
|
||||
"description": "Plant the seeds, crops in de bed.",
|
||||
"startDate" : "2022-05-01",
|
||||
"nextExecution": "2022-05-01",
|
||||
"nextNotification": "2022-05-01",
|
||||
"endDate" : "2022-05-01",
|
||||
"interval" : 0,
|
||||
"cropId" : 0
|
||||
@@ -15,8 +13,6 @@
|
||||
"name" : "water plant",
|
||||
"description": "water the plant, so that the soil is wet around the plant.",
|
||||
"startDate" : "2022-05-01",
|
||||
"nextExecution": "2022-05-01",
|
||||
"nextNotification": "2022-05-01",
|
||||
"endDate" : "2022-09-01",
|
||||
"interval" : 2,
|
||||
"cropId" : 0
|
||||
@@ -26,8 +22,6 @@
|
||||
"name" : "fertilize plant",
|
||||
"description": "The fertilizer has to be mixed with water. Then fertilize the plants soil with the mixture",
|
||||
"startDate" : "2022-06-01",
|
||||
"nextExecution": "2022-05-01",
|
||||
"nextNotification": "2022-05-01",
|
||||
"endDate" : "2022-08-01",
|
||||
"interval" : 28,
|
||||
"cropId" : 0
|
||||
@@ -37,8 +31,6 @@
|
||||
"name" : "covering plant",
|
||||
"description": "Take a big enough coverage for the plants. Cover the whole plant with a bit space between the plant and the coverage",
|
||||
"startDate" : "2022-07-01",
|
||||
"nextExecution": "2022-05-01",
|
||||
"nextNotification": "2022-05-01",
|
||||
"endDate" : "2022-07-01",
|
||||
"interval" : 0,
|
||||
"cropId" : 0
|
||||
@@ -48,8 +40,6 @@
|
||||
"name" : "look after plant",
|
||||
"description": "Look for pest or illness at the leaves of the plant. Check the soil around the plant, if the roots are enough covered with soil",
|
||||
"startDate" : "2022-05-01",
|
||||
"nextExecution": "2022-05-01",
|
||||
"nextNotification": "2022-05-01",
|
||||
"endDate" : "2022-09-01",
|
||||
"interval" : 5,
|
||||
"cropId" : 0
|
||||
@@ -59,8 +49,6 @@
|
||||
"name" : "harvest plant",
|
||||
"description": "Pull the ripe vegetables out from the soil. Clean them with clear, fresh water. ",
|
||||
"startDate" : "2022-09-01",
|
||||
"nextExecution": "2022-05-01",
|
||||
"nextNotification": "2022-05-01",
|
||||
"endDate" : "2022-09-01",
|
||||
"interval" : 0,
|
||||
"cropId" : 0
|
||||
|
||||
Reference in New Issue
Block a user