Compare commits
3 Commits
a437236788
...
2d88c9ea91
Author | SHA1 | Date |
---|---|---|
|
2d88c9ea91 | |
|
e48be29d59 | |
|
f389cfcdfd |
|
@ -1,16 +1,23 @@
|
||||||
package ch.zhaw.gartenverwaltung;
|
package ch.zhaw.gartenverwaltung;
|
||||||
|
|
||||||
import ch.zhaw.gartenverwaltung.bootstrap.AppLoader;
|
import ch.zhaw.gartenverwaltung.bootstrap.AppLoader;
|
||||||
|
import ch.zhaw.gartenverwaltung.notifier.Notifier;
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class HelloApplication extends Application {
|
public class HelloApplication extends Application {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage stage) throws IOException {
|
public void start(Stage stage) throws IOException {
|
||||||
AppLoader appLoader = new AppLoader();
|
AppLoader appLoader = new AppLoader();
|
||||||
|
|
||||||
|
Notifier notifier = new Notifier(appLoader.getGardenSchedule());
|
||||||
|
Thread notificationThread = new Thread(notifier);
|
||||||
|
notificationThread.start();
|
||||||
|
notificationThread.interrupt();
|
||||||
|
|
||||||
appLoader.loadSceneToStage("MainFXML.fxml", stage);
|
appLoader.loadSceneToStage("MainFXML.fxml", stage);
|
||||||
|
|
||||||
stage.setTitle("Gartenverwaltung");
|
stage.setTitle("Gartenverwaltung");
|
||||||
|
|
|
@ -10,6 +10,7 @@ import ch.zhaw.gartenverwaltung.io.TaskList;
|
||||||
import ch.zhaw.gartenverwaltung.models.Garden;
|
import ch.zhaw.gartenverwaltung.models.Garden;
|
||||||
import ch.zhaw.gartenverwaltung.models.GardenSchedule;
|
import ch.zhaw.gartenverwaltung.models.GardenSchedule;
|
||||||
import ch.zhaw.gartenverwaltung.models.PlantListModel;
|
import ch.zhaw.gartenverwaltung.models.PlantListModel;
|
||||||
|
import ch.zhaw.gartenverwaltung.notifier.Notifier;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.control.DialogPane;
|
import javafx.scene.control.DialogPane;
|
||||||
|
@ -41,6 +42,7 @@ public class AppLoader {
|
||||||
|
|
||||||
|
|
||||||
public AppLoader() throws IOException {
|
public AppLoader() throws IOException {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -154,4 +156,8 @@ public class AppLoader {
|
||||||
default -> null;
|
default -> null;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GardenSchedule getGardenSchedule() {
|
||||||
|
return gardenSchedule;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,10 +136,22 @@ public class GardenSchedule {
|
||||||
* @throws IOException If the database cannot be accessed
|
* @throws IOException If the database cannot be accessed
|
||||||
*/
|
*/
|
||||||
public List<List<Task>> getTasksUpcomingWeek() throws IOException {
|
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<>();
|
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);
|
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;
|
return dayTaskList;
|
||||||
}
|
}
|
||||||
|
@ -150,11 +162,8 @@ public class GardenSchedule {
|
||||||
* @throws IOException If the database cannot be accessed
|
* @throws IOException If the database cannot be accessed
|
||||||
*/
|
*/
|
||||||
public List<List<Task>> getTasksUpcomingWeekForCrop(Long cropId) throws IOException {
|
public List<List<Task>> getTasksUpcomingWeekForCrop(Long cropId) throws IOException {
|
||||||
List<List<Task>> dayTaskList = new ArrayList<>();
|
List<List<Task>> dayTaskList = getTasksUpcomingWeek();
|
||||||
for(int i = 0; i < 7; i++) {
|
dayTaskList.forEach(taskList -> taskList.removeIf(task -> task.getCropId() != cropId));
|
||||||
LocalDate date = LocalDate.now().plusDays(i);
|
|
||||||
dayTaskList.add(filterListByCrop(taskList.getTaskList(date, date), cropId));
|
|
||||||
}
|
|
||||||
return dayTaskList;
|
return dayTaskList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import java.util.function.Consumer;
|
||||||
|
|
||||||
public class Notifier implements Runnable{
|
public class Notifier implements Runnable{
|
||||||
private final GardenSchedule gardenSchedule;
|
private final GardenSchedule gardenSchedule;
|
||||||
|
private boolean interrupted = false;
|
||||||
|
|
||||||
public Notifier(GardenSchedule gardenSchedule) {
|
public Notifier(GardenSchedule gardenSchedule) {
|
||||||
this.gardenSchedule = gardenSchedule;
|
this.gardenSchedule = gardenSchedule;
|
||||||
|
@ -18,16 +19,13 @@ public class Notifier implements Runnable{
|
||||||
// TODO implement
|
// TODO implement
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void sendNotifications(){
|
||||||
public void run() {
|
System.out.println("sending Notifications");
|
||||||
try {
|
try {
|
||||||
gardenSchedule.getTaskList().forEach(new Consumer<Task>() {
|
gardenSchedule.getTaskList().forEach(task -> {
|
||||||
@Override
|
if(task.getNextNotification() != null && task.getNextNotification().isBefore(LocalDate.now().minusDays(1))){
|
||||||
public void accept(Task task) {
|
sendNotification(task);
|
||||||
if(task.getNextNotification() != null && task.getNextNotification().isBefore(LocalDate.now().minusDays(1))){
|
task.setNextNotification(task.getNextExecution());
|
||||||
sendNotification(task);
|
|
||||||
task.setNextNotification(task.getNextExecution());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -35,4 +33,16 @@ public class Notifier implements Runnable{
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
while(!interrupted){
|
||||||
|
try {
|
||||||
|
sendNotifications();
|
||||||
|
Thread.sleep(3000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
interrupted = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ public class Task {
|
||||||
name= "";
|
name= "";
|
||||||
description= "";
|
description= "";
|
||||||
startDate = LocalDate.now();
|
startDate = LocalDate.now();
|
||||||
|
endDate = startDate;
|
||||||
nextExecution = startDate;
|
nextExecution = startDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,6 +35,7 @@ public class Task {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
this.startDate = startDate;
|
this.startDate = startDate;
|
||||||
|
this.endDate = startDate;
|
||||||
nextExecution = startDate;
|
nextExecution = startDate;
|
||||||
this.cropId = cropId;
|
this.cropId = cropId;
|
||||||
}
|
}
|
||||||
|
@ -63,7 +65,7 @@ public class Task {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isInTimePeriode(LocalDate searchStartDate, LocalDate searchEndDate){
|
public boolean isInTimePeriode(LocalDate searchStartDate, LocalDate searchEndDate){
|
||||||
return startDate.isAfter(searchStartDate) && startDate.isBefore(searchEndDate);
|
return endDate.isAfter(searchStartDate) && startDate.isBefore(searchEndDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void done(){
|
public void done(){
|
||||||
|
|
|
@ -15,7 +15,7 @@ import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.mockito.Mockito.*;
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
class GardenScheduleTest {
|
class GardenScheduleTest {
|
||||||
LocalDate exampleStartDate = LocalDate.of(2020, 02, 02);
|
LocalDate exampleStartDate = LocalDate.of(2020, 2, 2);
|
||||||
TaskList taskList;
|
TaskList taskList;
|
||||||
PlantList plantList;
|
PlantList plantList;
|
||||||
List<Plant> examplePlantList;
|
List<Plant> examplePlantList;
|
||||||
|
@ -43,6 +43,7 @@ class GardenScheduleTest {
|
||||||
private TaskList mockTaskDatabase(List<Task> exampleTaskList) throws IOException {
|
private TaskList mockTaskDatabase(List<Task> exampleTaskList) throws IOException {
|
||||||
TaskList taskList = mock(JsonTaskList.class);
|
TaskList taskList = mock(JsonTaskList.class);
|
||||||
when(taskList.getTaskList(LocalDate.MIN, LocalDate.MAX)).thenReturn(exampleTaskList);
|
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)));
|
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().plusDays(1), 2L));
|
||||||
exampleTaskList.add(new Task("name", "description", LocalDate.now(), 1L));
|
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(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
|
@Test
|
||||||
|
@ -157,19 +158,22 @@ class GardenScheduleTest {
|
||||||
assertEquals(7, dayList.size());
|
assertEquals(7, dayList.size());
|
||||||
|
|
||||||
//Check day 0
|
//Check day 0
|
||||||
assertEquals(1, dayList.get(0).size());
|
assertEquals(2, dayList.get(0).size());
|
||||||
assertEquals(exampleTaskList.get(2), dayList.get(0).get(0));
|
assertTrue(dayList.get(0).contains(exampleTaskList.get(2)));
|
||||||
|
assertTrue(dayList.get(0).contains(exampleTaskList.get(4)));
|
||||||
|
|
||||||
//Check day 1
|
//Check day 1
|
||||||
assertEquals(1, dayList.get(1).size());
|
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
|
//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
|
//Check day 3
|
||||||
assertEquals(0, dayList.get(3).size());
|
assertEquals(0, dayList.get(3).size());
|
||||||
//Check day 4
|
//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
|
//Check day 5
|
||||||
assertEquals(0, dayList.get(5).size());
|
assertEquals(0, dayList.get(5).size());
|
||||||
//Check day 6
|
//Check day 6
|
||||||
|
|
Loading…
Reference in New Issue