From 1db23aa958ed94df743583335fdf84d1f9186f68 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Mon, 6 Mar 2017 15:55:45 +0100 Subject: [PATCH] finishing past visits added --- .../appointment/parse/AppointmentDao.java | 34 +++++++- .../java/smash/appointment/parse/Visit.java | 10 ++- .../appointment/parse/AppointmentDaoTest.java | 77 +++++++++++++++---- 3 files changed, 104 insertions(+), 17 deletions(-) diff --git a/appointment-import/src/main/java/smash/appointment/parse/AppointmentDao.java b/appointment-import/src/main/java/smash/appointment/parse/AppointmentDao.java index fa9a57f9..cb965abf 100644 --- a/appointment-import/src/main/java/smash/appointment/parse/AppointmentDao.java +++ b/appointment-import/src/main/java/smash/appointment/parse/AppointmentDao.java @@ -1,6 +1,9 @@ package smash.appointment.parse; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -36,7 +39,7 @@ public class AppointmentDao { this.appointments = appointments; } - public List<Visit> getVisits() { + public List<Visit> getVisits() throws ParseException { List<Visit> result = new ArrayList<>(); Map<Subject, List<AppointmentEntry>> subjectAppointments = new HashMap<>(); for (AppointmentEntry entry : appointments) { @@ -51,7 +54,7 @@ public class AppointmentDao { return result; } - private List<Visit> getVisitsForSubject(Subject subject, List<AppointmentEntry> list) { + private List<Visit> getVisitsForSubject(Subject subject, List<AppointmentEntry> list) throws ParseException { Comparator<AppointmentEntry> comparator = new Comparator<AppointmentEntry>() { @Override @@ -87,7 +90,7 @@ public class AppointmentDao { String date = currentVisit.getLastAppointmentDate(); if (date.equals(appointmentEntry.getDay().substring(0, 10))) { currentVisit.getLastAppointment().addTypes(appointmentEntry.getTypes()); - String source = appointmentEntry.getSource() + "\n"+currentVisit.getLastAppointment().getSource(); + String source = appointmentEntry.getSource() + "\n" + currentVisit.getLastAppointment().getSource(); currentVisit.getLastAppointment().setSource(source); } else { currentVisit.addAppointment(appointmentEntry); @@ -97,9 +100,34 @@ public class AppointmentDao { if (currentVisit.getAppointments().size() > 0) { result.add(currentVisit); } + if (shouldBeFinished(currentVisit.getEndDate())) { + result.add(createNextVisit(currentVisit)); + } return result; } + protected Visit createNextVisit(Visit currentVisit) throws ParseException { + Visit visit = new Visit(currentVisit.getSubject()); + Calendar date = Calendar.getInstance(); + String dateStr =currentVisit.getStartDate(); + date.setTime(DATE_FORMATTER.parse(dateStr)); + if (currentVisit.getSubject().getType().equals(SubjectType.CONTROL)) { + date.add(Calendar.YEAR, 4); + } else { + date.add(Calendar.YEAR, 1); + } + visit.setStartDate(DATE_FORMATTER.format(date.getTime())); + return visit; + } + + private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat("yyyy-MM-dd"); + + protected boolean shouldBeFinished(String endDate) { + Calendar today_minus_two_months = Calendar.getInstance(); + today_minus_two_months.add(Calendar.MONTH, -2); + return DATE_FORMATTER.format(today_minus_two_months.getTime()).compareTo(endDate) > 0; + } + public void addAppointment(AppointmentEntry appointment) { appointments.add(appointment); diff --git a/appointment-import/src/main/java/smash/appointment/parse/Visit.java b/appointment-import/src/main/java/smash/appointment/parse/Visit.java index 2762806a..b585c524 100644 --- a/appointment-import/src/main/java/smash/appointment/parse/Visit.java +++ b/appointment-import/src/main/java/smash/appointment/parse/Visit.java @@ -28,6 +28,8 @@ public class Visit { private Subject subject; private List<AppointmentEntry> appointments = new ArrayList<>(); + + private String startDate; public Visit(Subject subject) { if (subject==null) { @@ -75,8 +77,10 @@ public class Visit { public String getStartDate() { if (appointments.size() > 0) { return appointments.get(0).getDay().substring(0, 10); - } else { + } else if (startDate==null){ return "1900-01-01"; + } else { + return startDate; } } @@ -106,4 +110,8 @@ public class Visit { this.subject = subject; } + public void setStartDate(String newDate) { + this.startDate = newDate; + } + } diff --git a/appointment-import/src/test/java/smash/appointment/parse/AppointmentDaoTest.java b/appointment-import/src/test/java/smash/appointment/parse/AppointmentDaoTest.java index 82dba7fa..98c1a8ad 100644 --- a/appointment-import/src/test/java/smash/appointment/parse/AppointmentDaoTest.java +++ b/appointment-import/src/test/java/smash/appointment/parse/AppointmentDaoTest.java @@ -1,13 +1,20 @@ package smash.appointment.parse; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import java.text.ParseException; + +import org.apache.log4j.Logger; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; public class AppointmentDaoTest { + Logger logger = Logger.getLogger(AppointmentDaoTest.class); @AfterClass public static void tearDownAfterClass() throws Exception { @@ -22,23 +29,23 @@ public class AppointmentDaoTest { } @Test - public void getVisits() { + public void getVisits() throws ParseException { Subject subject1 = new Subject("a", "b", "c", "d"); AppointmentEntry appointment = new AppointmentEntry(); appointment.setSubject(subject1); - appointment.setDay("2016-02-02"); + appointment.setDay("2026-02-02"); appointment.addType(AppointmentType.LEVEL_A); - + AppointmentEntry appointment2 = new AppointmentEntry(); appointment2.setSubject(subject1); - appointment2.setDay("2016-02-02"); + appointment2.setDay("2026-02-02"); appointment2.addType(AppointmentType.LEVEL_B); - + AppointmentEntry appointment3 = new AppointmentEntry(); appointment3.setSubject(subject1); - appointment3.setDay("2011-02-02"); + appointment3.setDay("2021-02-02"); appointment3.addType(AppointmentType.LEVEL_A); - + AppointmentDao appointmentDao = new AppointmentDao(); appointmentDao.addAppointment(appointment); appointmentDao.addAppointment(appointment2); @@ -47,23 +54,67 @@ public class AppointmentDaoTest { } @Test - public void getVisits2() { + public void getVisits2() throws ParseException { Subject subject1 = new Subject("a", "b", "c", "d"); Subject subject2 = new Subject("a1", "b1", "c1", "d1"); AppointmentEntry appointment = new AppointmentEntry(); appointment.setSubject(subject1); - appointment.setDay("2016-02-02"); + appointment.setDay("2026-02-02"); appointment.addType(AppointmentType.LEVEL_A); - + AppointmentEntry appointment3 = new AppointmentEntry(); appointment3.setSubject(subject2); - appointment3.setDay("2016-02-02"); + appointment3.setDay("2026-02-02"); appointment3.addType(AppointmentType.LEVEL_B); - + AppointmentDao appointmentDao = new AppointmentDao(); appointmentDao.addAppointment(appointment); appointmentDao.addAppointment(appointment3); assertEquals(2, appointmentDao.getVisits().size()); } + @Test + public void getShouldBeFinished() { + AppointmentDao appointmentDao = new AppointmentDao(); + assertTrue(appointmentDao.shouldBeFinished("2014-01-01")); + assertTrue(appointmentDao.shouldBeFinished("2017-01-01")); + assertFalse(appointmentDao.shouldBeFinished("2018-01-01")); + } + + @Test + public void createNextVisitForControl() throws ParseException { + Subject subject = new Subject("a", "b", "c", "d"); + subject.setType(SubjectType.CONTROL); + AppointmentEntry appointment3 = new AppointmentEntry(); + appointment3.setSubject(subject); + appointment3.setDay("2016-02-02"); + appointment3.addType(AppointmentType.LEVEL_B); + + Visit visit = new Visit(subject); + visit.addAppointment(appointment3); + + AppointmentDao appointmentDao = new AppointmentDao(); + Visit nextVisit = appointmentDao.createNextVisit(visit); + assertNotNull(nextVisit); + assertTrue(nextVisit.getStartDate().startsWith("2020")); + } + + @Test + public void createNextVisitForPatient() throws ParseException { + Subject subject = new Subject("a", "b", "c", "d"); + subject.setType(SubjectType.PATIENT); + AppointmentEntry appointment3 = new AppointmentEntry(); + appointment3.setSubject(subject); + appointment3.setDay("2016-02-02"); + appointment3.addType(AppointmentType.LEVEL_B); + + Visit visit = new Visit(subject); + visit.addAppointment(appointment3); + + AppointmentDao appointmentDao = new AppointmentDao(); + Visit nextVisit = appointmentDao.createNextVisit(visit); + assertNotNull(nextVisit); + assertTrue(nextVisit.getStartDate().startsWith("2017")); + } + } -- GitLab