From bc5329f6c15e282b4bb706de74d674e338c8cfa6 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Tue, 28 Feb 2017 17:49:15 +0100
Subject: [PATCH] working export to sql

---
 .../appointment/parse/AppointmentEntry.java   |  8 +++++
 .../appointment/parse/AppointmentType.java    | 27 ++++++++++-----
 .../parse/LihControlMappingParser.java        |  3 +-
 .../appointment/parse/LihControlParser.java   |  8 +++--
 .../java/smash/appointment/parse/Main.java    |  3 +-
 .../appointment/parse/PrcControlParser.java   |  3 +-
 .../appointment/parse/PrcFlyingParser.java    |  3 +-
 .../appointment/parse/PrcSubjectsParser.java  |  3 +-
 .../appointment/parse/SubjectParser.java      | 15 +++++++--
 .../appointment/parse/SubjectSqlExporter.java | 33 ++++++++++++++++---
 .../java/smash/appointment/parse/Visit.java   | 10 ++++++
 .../appointment/parse/VisitSqlExporter.java   | 27 ++++++++++++---
 .../src/main/resources/log4j.properties       |  2 +-
 .../parse/LihControlParserTest.java           |  2 +-
 .../appointment/parse/SubjectParserTest.java  |  4 ++-
 15 files changed, 120 insertions(+), 31 deletions(-)

diff --git a/appointment-import/src/main/java/smash/appointment/parse/AppointmentEntry.java b/appointment-import/src/main/java/smash/appointment/parse/AppointmentEntry.java
index d001600f..9216820c 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/AppointmentEntry.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/AppointmentEntry.java
@@ -107,6 +107,13 @@ public class AppointmentEntry {
 	 * @see #duration
 	 */
 	public String getDuration() {
+		if (duration == null || duration.trim().isEmpty()) {
+			int count = 0;
+			for (AppointmentType type : types) {
+				count += type.getTime();
+			}
+			return count+"";
+		}
 		return duration;
 	}
 
@@ -125,6 +132,7 @@ public class AppointmentEntry {
 		}
 
 	}
+
 	public void addTypes(Collection<AppointmentType> typesToAdd) {
 		for (AppointmentType appointmentType : typesToAdd) {
 			addType(appointmentType);
diff --git a/appointment-import/src/main/java/smash/appointment/parse/AppointmentType.java b/appointment-import/src/main/java/smash/appointment/parse/AppointmentType.java
index 5f232b0a..d3727f17 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/AppointmentType.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/AppointmentType.java
@@ -1,15 +1,24 @@
 package smash.appointment.parse;
 
 public enum AppointmentType {
-	LEVEL_BV(), //
-	LEVEL_BG(), //
-	LEVEL_SB(), //
-
-	LEVEL_A_TQ(), //
-	LEVEL_A(), //
-	LEVEL_B(), //
-	LEVEL_B_M_POWER(), //
-	OTHER(), //
+	LEVEL_BV(90), //
+	LEVEL_BG(30), //
+	LEVEL_SB(30), //
+
+	LEVEL_A_TQ(120), //
+	LEVEL_A(120), //
+	LEVEL_B(90), //
+	LEVEL_B_M_POWER(70), //
+	OTHER(60), //
 	;
 
+	private int time;
+	
+	private AppointmentType(int defaultTime) {
+		this.time=defaultTime;
+	}
+	public int getTime() {
+		return time;
+	}
+
 }
diff --git a/appointment-import/src/main/java/smash/appointment/parse/LihControlMappingParser.java b/appointment-import/src/main/java/smash/appointment/parse/LihControlMappingParser.java
index 3b7aec06..10144357 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/LihControlMappingParser.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/LihControlMappingParser.java
@@ -1,6 +1,7 @@
 package smash.appointment.parse;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.List;
 
 import org.apache.poi.ss.usermodel.Row;
@@ -64,7 +65,7 @@ public class LihControlMappingParser extends SubjectParser {
 
 	@Override
 	protected String parseAddDate(Row row) {
-		return getDate(row.getCell(1));
+		return getDate(row.getCell(1), Calendar.getInstance());
 	}
 
 	@Override
diff --git a/appointment-import/src/main/java/smash/appointment/parse/LihControlParser.java b/appointment-import/src/main/java/smash/appointment/parse/LihControlParser.java
index b1420a9a..eb16daa5 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/LihControlParser.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/LihControlParser.java
@@ -1,6 +1,8 @@
 package smash.appointment.parse;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.List;
 
 import org.apache.poi.ss.usermodel.Row;
@@ -44,7 +46,7 @@ public class LihControlParser extends SubjectParser {
 
 	@Override
 	protected String parseBirthDate(Row row) {
-		return getDate(row.getCell(5));
+		return getDate(row.getCell(5), null);
 	}
 
 	@Override
@@ -52,9 +54,11 @@ public class LihControlParser extends SubjectParser {
 		return "";
 	}
 
+	private static final SimpleDateFormat	DATE_FORMATTER = new SimpleDateFormat("yyyy-MM-dd");
+
 	@Override
 	protected String parseAddDate(Row row) {
-		return "";
+		return DATE_FORMATTER.format(Calendar.getInstance().getTime());
 	}
 
 	@Override
diff --git a/appointment-import/src/main/java/smash/appointment/parse/Main.java b/appointment-import/src/main/java/smash/appointment/parse/Main.java
index 060d2997..bfd13282 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/Main.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/Main.java
@@ -69,7 +69,7 @@ public class Main {
 				subjectDao
 						.addSubject(subject, "[" + lihControlsFile + ";" + subject.getScreeningNumber() + ";" + subject.getName() + " " + subject.getSurname() + "]");
 			}
-			
+
 			subjectDao.addSubject(Visit.UNKNOWN, "");
 
 			String agendaFile = line.getOptionValue("agenda");
@@ -77,6 +77,7 @@ public class Main {
 			today.set(Calendar.HOUR, 5);
 			appointmentDao.addAppointments(processPrcAppointments(agendaFile, today));
 
+			System.out.println("delete from web_appointment ;\ndelete from web_visit;\ndelete from web_subject;\n");
 			SubjectSqlExporter subjectSqlExporter = new SubjectSqlExporter();
 			// logger.debug("SUBJECTS: ");
 			for (Subject subject : subjectDao.getSubjects()) {
diff --git a/appointment-import/src/main/java/smash/appointment/parse/PrcControlParser.java b/appointment-import/src/main/java/smash/appointment/parse/PrcControlParser.java
index 1b13834d..a74ed7b3 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/PrcControlParser.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/PrcControlParser.java
@@ -1,6 +1,7 @@
 package smash.appointment.parse;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.List;
 
 import org.apache.poi.ss.usermodel.Cell;
@@ -55,7 +56,7 @@ public class PrcControlParser extends SubjectParser {
 
 	@Override
 	protected String parseAddDate(Row row) {
-		return getDate(row.getCell(8));
+		return getDate(row.getCell(8), Calendar.getInstance());
 	}
 
 	@Override
diff --git a/appointment-import/src/main/java/smash/appointment/parse/PrcFlyingParser.java b/appointment-import/src/main/java/smash/appointment/parse/PrcFlyingParser.java
index 348e23bf..53821a72 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/PrcFlyingParser.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/PrcFlyingParser.java
@@ -1,6 +1,7 @@
 package smash.appointment.parse;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.List;
 
 import org.apache.poi.ss.usermodel.Cell;
@@ -55,7 +56,7 @@ public class PrcFlyingParser extends SubjectParser {
 
 	@Override
 	protected String parseAddDate(Row row) {
-		return getDate(row.getCell(11));
+		return getDate(row.getCell(11),Calendar.getInstance());
 	}
 
 	@Override
diff --git a/appointment-import/src/main/java/smash/appointment/parse/PrcSubjectsParser.java b/appointment-import/src/main/java/smash/appointment/parse/PrcSubjectsParser.java
index 89434c47..5f869b4e 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/PrcSubjectsParser.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/PrcSubjectsParser.java
@@ -1,6 +1,7 @@
 package smash.appointment.parse;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.List;
 
 import org.apache.poi.ss.usermodel.IndexedColors;
@@ -55,7 +56,7 @@ public class PrcSubjectsParser extends SubjectParser {
 
 	@Override
 	protected String parseAddDate(Row row) {
-		return getDate(row.getCell(14));
+		return getDate(row.getCell(14),Calendar.getInstance());
 	}
 
 	@Override
diff --git a/appointment-import/src/main/java/smash/appointment/parse/SubjectParser.java b/appointment-import/src/main/java/smash/appointment/parse/SubjectParser.java
index c61a7785..82e6808d 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/SubjectParser.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/SubjectParser.java
@@ -6,6 +6,7 @@ import java.io.InputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
@@ -95,6 +96,7 @@ public abstract class SubjectParser {
 	}
 
 	protected abstract boolean parseDead(Row row);
+
 	protected abstract boolean parseResigned(Row row);
 
 	protected abstract String parseToBeSeenAt(Row row);
@@ -167,9 +169,13 @@ public abstract class SubjectParser {
 		return "";
 	}
 
-	protected String getDate(Cell cell) {
+	protected String getDate(Cell cell, Calendar defaultDate) {
+		String defaultDateString = "";
+		if (defaultDate != null) {
+			defaultDateString = DATE_FORMATTER.format(defaultDate.getTime());
+		}
 		if (cell == null) {
-			return "";
+			return defaultDateString;
 		}
 		String result = null;
 		if (cell.getCellTypeEnum().equals(CellType.STRING)) {
@@ -179,11 +185,14 @@ public abstract class SubjectParser {
 			if (date != null) {
 				result = DATE_FORMATTER.format(date);
 			} else {
-				result = "";
+				result = defaultDateString;
 			}
 		} else {
 			result = getString(cell);
 		}
+		if (result == null || result.trim().isEmpty()) {
+			result = defaultDateString;
+		}
 		return result;
 	}
 
diff --git a/appointment-import/src/main/java/smash/appointment/parse/SubjectSqlExporter.java b/appointment-import/src/main/java/smash/appointment/parse/SubjectSqlExporter.java
index d753eb60..4d7750cf 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/SubjectSqlExporter.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/SubjectSqlExporter.java
@@ -25,7 +25,10 @@ public class SubjectSqlExporter {
 		result.append("nd_number,");
 		result.append("mpower_id,");
 		result.append("screening_number,");
-		result.append("status,");
+		result.append("default_appointment_location,");
+		result.append("type,");
+		result.append("dead,");
+		result.append("resigned,");
 		result.append("date_born) ");
 
 		result.append("values (");
@@ -41,20 +44,31 @@ public class SubjectSqlExporter {
 		result.append(getStringVal(subject.getPhone2()) + ",");
 		result.append(getStringVal(subject.getPhone3()) + ",");
 		result.append(getStringVal(subject.getMail()) + ",");
-		result.append(getStringVal(subject.getDiagnosisYear()) + ",");
+		result.append(getIntVal(subject.getDiagnosisYear()) + ",");
 		result.append(getStringVal(subject.getDiagnosis()) + ",");
 		result.append(getStringVal(subject.getReferal()) + ",");
-		result.append(getStringVal(subject.getAddDate()) + ",");
+		result.append(getDateVal(subject.getAddDate()) + ",");
 		result.append(getStringVal(subject.getNdNumber()) + ",");
 		result.append(getStringVal(subject.getmPowerId()) + ",");
 		result.append(getStringVal(subject.getScreeningNumber()) + ",");
-		result.append("'',");
-		result.append(getStringVal(subject.getBirthDate()));
+		result.append(getStringVal(subject.getToBeSeenAt()) + ",");
+		result.append(getStringVal(subject.getType().toString().substring(0, 1)) + ",");
+		result.append(subject.isDead() + ",");
+		result.append(subject.isResigned() + ",");
+		result.append(getDateVal(subject.getBirthDate()));
 		result.append(");");
 
 		return result.toString();
 	}
 
+	private String getIntVal(String diagnosisYear) {
+		if (diagnosisYear == null || diagnosisYear.trim().isEmpty()) {
+			return "0";
+		} else {
+			return diagnosisYear;
+		}
+	}
+
 	private String getStringVal(String arg) {
 		if (arg == null) {
 			return "null";
@@ -64,4 +78,13 @@ public class SubjectSqlExporter {
 			return "'" + arg + "'";
 		}
 	}
+	private String getDateVal(String arg) {
+		if (arg == null) {
+			return "null";
+		} else if (arg.isEmpty()) {
+			return "null";
+		} else {
+			return "'" + arg + "'";
+		}
+	}
 }
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 28dbaf24..2762806a 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/Visit.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/Visit.java
@@ -13,6 +13,16 @@ public class Visit {
 	static {
 		UNKNOWN = new Subject("NOBODY","","","---");
 		UNKNOWN.setType(SubjectType.CONTROL);
+		UNKNOWN.setAddDate("1900-01-01");
+		UNKNOWN.setAddress("");
+		UNKNOWN.setZipCode("");
+		UNKNOWN.setCity("");
+		UNKNOWN.setCountry("");
+		UNKNOWN.setmPowerId("");
+		UNKNOWN.setReferal("");
+		UNKNOWN.setRemarks("");
+		UNKNOWN.setDiagnosis("");
+		UNKNOWN.setToBeSeenAt("P");
 	}
 	Logger												 logger				= Logger.getLogger(Visit.class);
 
diff --git a/appointment-import/src/main/java/smash/appointment/parse/VisitSqlExporter.java b/appointment-import/src/main/java/smash/appointment/parse/VisitSqlExporter.java
index 65d38b02..6bd9dbe3 100644
--- a/appointment-import/src/main/java/smash/appointment/parse/VisitSqlExporter.java
+++ b/appointment-import/src/main/java/smash/appointment/parse/VisitSqlExporter.java
@@ -1,8 +1,12 @@
 package smash.appointment.parse;
 
 import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
 
 public class VisitSqlExporter {
+	AppointmentSqlExporter appointmentSqlExporter = new AppointmentSqlExporter(); 
+	private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat("yyyy-MM-dd");
 
 	public String toSql(Visit visit, boolean isFinished) throws ParseException {
 		StringBuilder result = new StringBuilder("");
@@ -11,18 +15,33 @@ public class VisitSqlExporter {
 		result.append("subject_id,	 ");
 		result.append("datetime_begin, ");
 		result.append("datetime_end, ");
-		result.append("is_finsished)");
-		result.append("date_born) ");
+		result.append("is_finished)");
 
 		result.append("values (");
-		result.append("SELECT id from web_subject where screening_number = "+getStringVal(visit.getSubject().getScreeningNumber()) + ",");
+		result.append("(SELECT id from web_subject where screening_number = "+getStringVal(visit.getSubject().getScreeningNumber()) + "),");
 		result.append(getStringVal(visit.getStartDate()) + ",");
 		result.append(getStringVal(visit.getEndDate()) + ",");
 		result.append(isFinished);
-		result.append(");");
+		result.append(");\n");
+		for (AppointmentEntry entry: visit.getAppointments()) {
+			boolean entryFinished= isFinished;
+			if (isBefore(entry, Calendar.getInstance()))
+				entryFinished=true;
+			result.append(appointmentSqlExporter.toSql(entry, entryFinished)+"\n");
+		}
 
 		return result.toString();
 	}
+	
+	private boolean isBefore(AppointmentEntry entry, Calendar minDate) {
+		String entryDate = entry.getDay();
+		String beforeDate = DATE_FORMATTER.format(minDate.getTime());
+		if (entryDate.compareTo(beforeDate) < 0) {
+			return true;
+		} else {
+			return false;
+		}
+	}
 
 	private String getStringVal(String arg) {
 		if (arg == null) {
diff --git a/appointment-import/src/main/resources/log4j.properties b/appointment-import/src/main/resources/log4j.properties
index e108a78c..c3a78a92 100644
--- a/appointment-import/src/main/resources/log4j.properties
+++ b/appointment-import/src/main/resources/log4j.properties
@@ -1,5 +1,5 @@
 #Set root logger 's level and its appender to an appender called CONSOLE which is defined below.
-log4j.rootLogger=debug, CONSOLE
+log4j.rootLogger=fatal, CONSOLE
 
 #Set the behavior of the CONSOLE appender 
 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
diff --git a/appointment-import/src/test/java/smash/appointment/parse/LihControlParserTest.java b/appointment-import/src/test/java/smash/appointment/parse/LihControlParserTest.java
index b610128e..589da171 100644
--- a/appointment-import/src/test/java/smash/appointment/parse/LihControlParserTest.java
+++ b/appointment-import/src/test/java/smash/appointment/parse/LihControlParserTest.java
@@ -51,7 +51,7 @@ public class LihControlParserTest extends TestBase {
 		assertEquals("", subject.getDiagnosisYear());
 		assertEquals("", subject.getDiagnosis());
 		assertEquals("", subject.getReferal());
-		assertEquals("", subject.getAddDate());
+		assertNotNull(subject.getAddDate());
 		assertEquals("", subject.getNdNumber());
 		assertEquals("1937-01-03", subject.getBirthDate());
 		assertTrue(subject.getRemarks().contains("some other remark"));		
diff --git a/appointment-import/src/test/java/smash/appointment/parse/SubjectParserTest.java b/appointment-import/src/test/java/smash/appointment/parse/SubjectParserTest.java
index fffb1641..a9efafaf 100644
--- a/appointment-import/src/test/java/smash/appointment/parse/SubjectParserTest.java
+++ b/appointment-import/src/test/java/smash/appointment/parse/SubjectParserTest.java
@@ -2,6 +2,8 @@ package smash.appointment.parse;
 
 import static org.junit.Assert.*;
 
+import java.util.Calendar;
+
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -24,7 +26,7 @@ public class SubjectParserTest {
 	@Test
 	public void testParseDate() {
 		SubjectParser parser = new PrcControlParser();
-		assertEquals("", parser.getDate(null));
+		assertEquals("", parser.getDate(null, null));
 	}
 
 }
-- 
GitLab