From c5f45384b7b0de88c886d138a1504c3e44612a8c Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Mon, 27 Feb 2017 14:11:06 +0100 Subject: [PATCH] main parser process all the input prc files --- .../java/smash/appointment/parse/Main.java | 40 +++++++++++++- .../java/smash/appointment/parse/Subject.java | 53 ++++++++++++++++++- .../smash/appointment/parse/SubjectDao.java | 40 +++++++++++--- .../smash/appointment/parse/TestBase.java | 14 ++--- 4 files changed, 131 insertions(+), 16 deletions(-) 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 18cbe74c..96965759 100644 --- a/appointment-import/src/main/java/smash/appointment/parse/Main.java +++ b/appointment-import/src/main/java/smash/appointment/parse/Main.java @@ -1,5 +1,6 @@ package smash.appointment.parse; +import java.io.IOException; import java.util.List; import org.apache.commons.cli.CommandLine; @@ -10,6 +11,8 @@ import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.log4j.Logger; +import org.apache.poi.EncryptedDocumentException; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; public class Main { private static Logger logger = Logger.getLogger(Main.class); @@ -22,30 +25,63 @@ public class Main { Options options = new Options(); Option agenda = Option.builder().required().argName("file").hasArg().desc("PRC agenda").longOpt("agenda").build(); Option subjects = Option.builder().required().argName("file").hasArg().desc("PRC subjects").longOpt("subjects").build(); + Option controls = Option.builder().required().argName("file").hasArg().desc("PRC controls").longOpt("controls").build(); + Option flyingTeam = Option.builder().required().argName("file").hasArg().desc("PRC flying-team").longOpt("flying-team").build(); options.addOption(agenda); options.addOption(subjects); + options.addOption(controls); + options.addOption(flyingTeam); CommandLineParser parser = new DefaultParser(); try { CommandLine line = parser.parse(options, args); String subjectsFile = line.getOptionValue("subjects"); - subjectDao.addSubjects(processPrcSubjects(subjectsFile)); + for (Subject subject : processPrcSubjects(subjectsFile)) { + subjectDao.addSubject(subject, "[" + subjectsFile + ";" + subject.getScreeningNumber() + ";" + subject.getName() + " " + subject.getSurname() + "]"); + } + + String controlsFile = line.getOptionValue("controls"); + for (Subject subject : processPrcControls(controlsFile)) { + subjectDao.addSubject(subject, "[" + controlsFile + ";" + subject.getScreeningNumber() + ";" + subject.getName() + " " + subject.getSurname() + "]"); + } + + String flyingTeamFile = line.getOptionValue("flying-team"); + for (Subject subject : processFlyingTeamControls(flyingTeamFile)) { + subjectDao.addSubject(subject, "[" + flyingTeamFile + ";" + subject.getScreeningNumber() + ";" + subject.getName() + " " + subject.getSurname() + "]"); + } + + logger.debug("SUBJECTS: "); + for (Subject subject : subjectDao.getSubjects()) { + logger.debug(subject); + } String agendaFile = line.getOptionValue("agenda"); appointmentDao.addAppointments(processPrcAppointments(agendaFile)); } catch (ParseException exp) { + System.out.println(exp.getMessage()); HelpFormatter formatter = new HelpFormatter(); - formatter.printHelp( "java -jar file.jar", options ); + formatter.printHelp("java -jar file.jar", options); } } + private List<Subject> processFlyingTeamControls(String flyingTeamFile) throws Exception { + PrcFlyingParser parser = new PrcFlyingParser(); + return parser.processExcel(flyingTeamFile); + } + + private List<Subject> processPrcControls(String controlsFile) throws Exception { + PrcControlParser parser = new PrcControlParser(); + return parser.processExcel(controlsFile); + } + private List<AppointmentEntry> processPrcAppointments(String agendaFile) throws Exception { XlsxCalendarProcessor processor = new XlsxCalendarProcessor(); processor.setSubjectDao(subjectDao); List<AppointmentEntry> entries = processor.processExcel(agendaFile); + logger.debug("APPOINTMENTS: "); for (AppointmentEntry appointmentEntry : entries) { logger.debug(appointmentEntry); } diff --git a/appointment-import/src/main/java/smash/appointment/parse/Subject.java b/appointment-import/src/main/java/smash/appointment/parse/Subject.java index d678b8d7..1cfb624d 100644 --- a/appointment-import/src/main/java/smash/appointment/parse/Subject.java +++ b/appointment-import/src/main/java/smash/appointment/parse/Subject.java @@ -416,11 +416,62 @@ public class Subject { } /** - * @param type the type to set + * @param type + * the type to set * @see #type */ public void setType(SubjectType type) { this.type = type; } + public void update(Subject subject, String errorPrefix) { + setName(getMergedValue("name", this.getName(), subject.getName(), errorPrefix)); + setSurname(getMergedValue("surname", this.getSurname(), subject.getSurname(), errorPrefix)); + setNdNumber(getMergedValue("ndNumber", this.getNdNumber(), subject.getNdNumber(), errorPrefix)); + setScreeningNumber(getMergedValue("screeningNumber", this.getScreeningNumber(), subject.getScreeningNumber(), errorPrefix)); + setSex(getMergedValue("sex", this.getSex(), subject.getSex(), errorPrefix)); + setRemarks(getMergedValue("remarks", this.getRemarks(), subject.getRemarks(), errorPrefix)); + setBirthDate(getMergedValue("birthDate", this.getBirthDate(), subject.getBirthDate(), errorPrefix)); + setAddress(getMergedValue("address", this.getAddress(), subject.getAddress(), errorPrefix)); + setZipCode(getMergedValue("zipCode", this.getZipCode(), subject.getZipCode(), errorPrefix)); + setCountry(getMergedValue("country", this.getCountry(), subject.getCountry(), errorPrefix)); + setCity(getMergedValue("city", this.getCity(), subject.getCity(), errorPrefix)); + setPhone1(getMergedValue("phone1", this.getPhone1(), subject.getPhone1(), errorPrefix)); + setPhone2(getMergedValue("phone2", this.getPhone2(), subject.getPhone2(), errorPrefix)); + setPhone3(getMergedValue("phone3", this.getPhone3(), subject.getPhone3(), errorPrefix)); + setMail(getMergedValue("mail", this.getMail(), subject.getMail(), errorPrefix)); + setDiagnosisYear(getMergedValue("diagnosisYear", this.getDiagnosisYear(), subject.getDiagnosisYear(), errorPrefix)); + setDiagnosis(getMergedValue("diagnosis", this.getDiagnosis(), subject.getDiagnosis(), errorPrefix)); + setReferal(getMergedValue("referal", this.getReferal(), subject.getReferal(), errorPrefix)); + setAddDate(getMergedValue("addDate", this.getAddDate(), subject.getAddDate(), errorPrefix)); + setmPowerId(getMergedValue("mPowerId", this.getmPowerId(), subject.getmPowerId(), errorPrefix)); + setType(getMergedValue("type", this.getType(), subject.getType(), errorPrefix)); + } + + private SubjectType getMergedValue(String string, SubjectType existingValue, SubjectType newValue, String errorPrefix) { + if (existingValue == null) { + return newValue; + } else if (newValue == null) { + return existingValue; + } else if (existingValue.equals(newValue)) { + return existingValue; + } else { + logger.warn(errorPrefix + "New " + string + " differs from old one. (new: " + newValue + ", " + existingValue + "). Skipping"); + return existingValue; + } + } + + private String getMergedValue(String string, String existingValue, String newValue, String errorPrefix) { + if (existingValue == null || existingValue.trim().isEmpty()) { + return newValue; + } else if (newValue == null || newValue.trim().isEmpty()) { + return existingValue; + } else if (existingValue.trim().equalsIgnoreCase(newValue.trim())) { + return existingValue; + } else { + logger.warn(errorPrefix + "New " + string + " differs from old one. (new: " + newValue + ", " + existingValue + "). Skipping"); + return existingValue; + } + } + } diff --git a/appointment-import/src/main/java/smash/appointment/parse/SubjectDao.java b/appointment-import/src/main/java/smash/appointment/parse/SubjectDao.java index 4aa696d6..26eca223 100644 --- a/appointment-import/src/main/java/smash/appointment/parse/SubjectDao.java +++ b/appointment-import/src/main/java/smash/appointment/parse/SubjectDao.java @@ -6,19 +6,47 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import org.apache.log4j.Logger; + public class SubjectDao { - private List<Subject> subjects = new ArrayList<Subject>(); + Logger logger = Logger.getLogger(SubjectDao.class); + private List<Subject> subjects = new ArrayList<>(); + + public void addSubject(Subject subject, String errorPrefix) { + if (subject.getNdNumber() != null && !subject.getNdNumber().trim().isEmpty()) { + Subject existing = getByNdNumber(subject.getNdNumber()); + if (existing != null) { + if (!existing.getScreeningNumber().equals(subject.getScreeningNumber())) { + logger.error(errorPrefix + " Nd number taken by subject: " + existing.getScreeningNumber()); + return; + } + } + } + Subject existing = getByScreeningNumber(subject.getScreeningNumber()); + if (existing != null) { + existing.update(subject, errorPrefix); + } else { + subjects.add(subject); + } + } - public void addSubject(Subject subject) { - subjects.add(subject); + private Subject getByScreeningNumber(String screeningNumber) { + for (Subject s : subjects) { + if (screeningNumber.equals(s.getScreeningNumber())) { + return s; + } + } + return null; } public void readFile(String filename) throws IOException { try (BufferedReader br = new BufferedReader(new FileReader(filename))) { String line; + int lineCount = 1; while ((line = br.readLine()) != null) { String tmp[] = line.split("\t"); - addSubject(new Subject(tmp[0], tmp[1], tmp[2], tmp[3])); + addSubject(new Subject(tmp[0], tmp[1], tmp[2], tmp[3]), "[" + filename + ":" + lineCount + "]"); + lineCount++; } } } @@ -49,9 +77,9 @@ public class SubjectDao { return null; } - public void addSubjects(List<Subject> processPrcSubjects) { + public void addSubjects(List<Subject> processPrcSubjects, String errorPrefix) { for (Subject subject : processPrcSubjects) { - addSubject(subject); + addSubject(subject, errorPrefix); } } diff --git a/appointment-import/src/test/java/smash/appointment/parse/TestBase.java b/appointment-import/src/test/java/smash/appointment/parse/TestBase.java index 72704a8a..b9663f46 100644 --- a/appointment-import/src/test/java/smash/appointment/parse/TestBase.java +++ b/appointment-import/src/test/java/smash/appointment/parse/TestBase.java @@ -13,13 +13,13 @@ public class TestBase { public void setUp() { subjectDao = new SubjectDao(); - subjectDao.addSubject(new Subject("Piotr Marcin", "Gawron", "ND1005", "1005")); - subjectDao.addSubject(piotrGawron); - subjectDao.addSubject(janKowalskiNowak); - subjectDao.addSubject(johnDoe); - subjectDao.addSubject(cateKowalsky); - subjectDao.addSubject(andrewDude); - subjectDao.addSubject(unknownDude); + subjectDao.addSubject(new Subject("Piotr Marcin", "Gawron", "ND1005", "1005"), null); + subjectDao.addSubject(piotrGawron, null); + subjectDao.addSubject(janKowalskiNowak, null); + subjectDao.addSubject(johnDoe, null); + subjectDao.addSubject(cateKowalsky, null); + subjectDao.addSubject(andrewDude, null); + subjectDao.addSubject(unknownDude, null); } } -- GitLab