diff --git a/appointment-import/src/main/java/smash/appointment/parse/LihControlMappingParser.java b/appointment-import/src/main/java/smash/appointment/parse/LihControlMappingParser.java new file mode 100644 index 0000000000000000000000000000000000000000..8f5b0e2d074163c29c24e142d8e68fd4fc174f4b --- /dev/null +++ b/appointment-import/src/main/java/smash/appointment/parse/LihControlMappingParser.java @@ -0,0 +1,136 @@ +package smash.appointment.parse; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.poi.ss.usermodel.Row; + +public class LihControlMappingParser extends SubjectParser { + + @Override + protected String parseScreeningNumber(Row row) { + String number = getString(row.getCell(0)); + if (number.trim().isEmpty()) { + return ""; + } else { + if (number.length() == 1) { + number = "00" + number; + } else if (number.length() == 2) { + number = "0" + number; + } + return "L-" + number; + } + } + + @Override + protected String parseName(Row row) { + return getString(row.getCell(8)); + } + + @Override + protected String parseSurname(Row row) { + return getString(row.getCell(9)); + } + + @Override + protected String parseNdNumber(Row row) { + return getString(row.getCell(7)); + } + + @Override + protected String getSheetName() { + return "Sheet1"; + } + + @Override + protected int getInitRow() { + return 1; + } + + @Override + protected String parseBirthDate(Row row) { + return ""; + } + + @Override + protected String parsemPowerId(Row row) { + return ""; + } + + @Override + protected String parseAddDate(Row row) { + return getDate(row.getCell(1)); + } + + @Override + protected String parseReferal(Row row) { + return ""; + } + + @Override + protected String parseDiagnosisYear(Row row) { + return ""; + } + + @Override + protected String parseMail(Row row) { + return ""; + } + + @Override + protected String parsePhone3(Row row) { + return ""; + } + + @Override + protected String parsePhone2(Row row) { + return ""; + } + + @Override + protected String parsePhone1(Row row) { + return getString(row.getCell(10)); + } + + @Override + protected String parseCity(Row row) { + return ""; + + } + + @Override + protected String parseCountry(Row row) { + return ""; + } + + @Override + protected String parseZipCode(Row row) { + return ""; + } + + @Override + protected String parseAddress(Row row) { + return ""; + } + + @Override + protected String parseRemarks(Row row) { + return ""; + } + + @Override + protected String parseDiagnosis(Row row) { + return ""; + } + + @Override + protected SubjectType parseType(Row row) { + return SubjectType.CONTROL; + } + + @Override + protected List<String> parseLanguages(Row row) { + return new ArrayList<>(); + } + +} diff --git a/appointment-import/src/main/java/smash/appointment/parse/LihControlParser.java b/appointment-import/src/main/java/smash/appointment/parse/LihControlParser.java new file mode 100644 index 0000000000000000000000000000000000000000..82955aa267155aa4531f55609ad3abc33f6130a5 --- /dev/null +++ b/appointment-import/src/main/java/smash/appointment/parse/LihControlParser.java @@ -0,0 +1,179 @@ +package smash.appointment.parse; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.poi.ss.usermodel.Row; + +public class LihControlParser extends SubjectParser { + + @Override + protected String parseScreeningNumber(Row row) { + String number = getString(row.getCell(0)); + if (number.trim().isEmpty()) { + return ""; + } else { + return "L-" + number; + } + } + + @Override + protected String parseName(Row row) { + return getString(row.getCell(2)); + } + + @Override + protected String parseSurname(Row row) { + return getString(row.getCell(1)); + } + + @Override + protected String parseNdNumber(Row row) { + return ""; + } + + @Override + protected String getSheetName() { + return "Screening log"; + } + + @Override + protected int getInitRow() { + return 1; + } + + @Override + protected String parseBirthDate(Row row) { + return getDate(row.getCell(5)); + } + + @Override + protected String parsemPowerId(Row row) { + return ""; + } + + @Override + protected String parseAddDate(Row row) { + return ""; + } + + @Override + protected String parseReferal(Row row) { + return ""; + } + + @Override + protected String parseDiagnosisYear(Row row) { + return ""; + } + + @Override + protected String parseMail(Row row) { + return getString(row.getCell(8)); + } + + @Override + protected String parsePhone3(Row row) { + return ""; + } + + @Override + protected String parsePhone2(Row row) { + return getString(row.getCell(7)); + } + + @Override + protected String parsePhone1(Row row) { + return getString(row.getCell(6)); + } + + @Override + protected String parseCity(Row row) { + return getString(row.getCell(12)); + + } + + @Override + protected String parseCountry(Row row) { + return ""; + } + + @Override + protected String parseZipCode(Row row) { + return getString(row.getCell(11)); + } + + @Override + protected String parseAddress(Row row) { + return getString(row.getCell(9)) + ", " + getString(row.getCell(10)); + } + + @Override + protected String parseRemarks(Row row) { + List<String> remarks = new ArrayList<>(); + String info = getString(row.getCell(4)); + if (!info.trim().isEmpty()) { + remarks.add("PD family relation=" + info); + } + remarks.add(getString(row.getCell(13))); + remarks.add(getComments(row.getCell(14))); + remarks.add(getComments(row.getCell(15))); + remarks.add(getComments(row.getCell(16))); + remarks.add(getString(row.getCell(18))); + remarks.add(getString(row.getCell(19))); + String result = ""; + for (String string : remarks) { + if (!string.trim().isEmpty()) { + result += string.trim() + "\n"; + } + } + return result; + } + + @Override + protected String parseDiagnosis(Row row) { + return ""; + } + + @Override + protected SubjectType parseType(Row row) { + return SubjectType.CONTROL; + } + + @Override + protected List<String> parseLanguages(Row row) { + List<String> result = new ArrayList<>(); + + String languages = getString(row.getCell(3)); + String langAbbreviations[] = new String[] {}; + if (languages.indexOf(",") >= 0) { + langAbbreviations = languages.split(","); + } else { + langAbbreviations = languages.split("/"); + } + for (String string : langAbbreviations) { + if (!string.trim().isEmpty()) { + result.add(getMappedLanguage(string.trim())); + } + } + return result; + } + + private String getMappedLanguage(String abbreviation) { + switch (abbreviation.toUpperCase()) { + case ("F"): + return "French"; + case ("D"): + return "German"; + case ("GB"): + return "English"; + case ("P"): + return "Portuguese"; + case ("ENG"): + return "English"; + } + logger.warn("Unknown language abbreviation: " + abbreviation); + return ""; + } + +} 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 9696575936a66b166e478c4f34dcf66f80e091b7..5c6f94cb29ca670739a31f431efb9e6e0cde03b5 100644 --- a/appointment-import/src/main/java/smash/appointment/parse/Main.java +++ b/appointment-import/src/main/java/smash/appointment/parse/Main.java @@ -27,10 +27,14 @@ public class Main { 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(); + Option lihControls = Option.builder().required().argName("file").hasArg().desc("LIH controls").longOpt("lih-controls").build(); + Option lihMappingControls = Option.builder().required().argName("file").hasArg().desc("LIH controls mapping").longOpt("lih-mapping").build(); options.addOption(agenda); options.addOption(subjects); options.addOption(controls); options.addOption(flyingTeam); + options.addOption(lihControls); + options.addOption(lihMappingControls); CommandLineParser parser = new DefaultParser(); try { @@ -51,6 +55,16 @@ public class Main { subjectDao.addSubject(subject, "[" + flyingTeamFile + ";" + subject.getScreeningNumber() + ";" + subject.getName() + " " + subject.getSurname() + "]"); } + String lihMappingControlsFile = line.getOptionValue("lih-mapping"); + for (Subject subject : processLihMappingControls(lihMappingControlsFile)) { + subjectDao.addSubject(subject, "[" + lihMappingControlsFile + ";" + subject.getScreeningNumber() + ";" + subject.getName() + " " + subject.getSurname() + "]"); + } + + String lihControlsFile = line.getOptionValue("lih-controls"); + for (Subject subject : processLihControls(lihControlsFile)) { + subjectDao.addSubject(subject, "[" + lihControlsFile + ";" + subject.getScreeningNumber() + ";" + subject.getName() + " " + subject.getSurname() + "]"); + } + logger.debug("SUBJECTS: "); for (Subject subject : subjectDao.getSubjects()) { logger.debug(subject); @@ -66,6 +80,16 @@ public class Main { } } + private List<Subject> processLihMappingControls(String lihMappingControlsFile) throws Exception{ + LihControlMappingParser parser = new LihControlMappingParser(); + return parser.processExcel(lihMappingControlsFile); + } + + private List<Subject> processLihControls(String lihControlsFile) throws Exception{ + LihControlParser parser = new LihControlParser(); + return parser.processExcel(lihControlsFile); + } + private List<Subject> processFlyingTeamControls(String flyingTeamFile) throws Exception { PrcFlyingParser parser = new PrcFlyingParser(); return parser.processExcel(flyingTeamFile); 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 44496a88855cb7a68b258a3abfa2828d1d95d01b..dbf0dc8c6a4e779c5e276577142d7efabed1e117 100644 --- a/appointment-import/src/main/java/smash/appointment/parse/PrcControlParser.java +++ b/appointment-import/src/main/java/smash/appointment/parse/PrcControlParser.java @@ -1,5 +1,8 @@ package smash.appointment.parse; +import java.util.ArrayList; +import java.util.List; + import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; @@ -8,7 +11,7 @@ public class PrcControlParser extends SubjectParser { @Override protected String parseScreeningNumber(Row row) { String number = getString(row.getCell(16)); - if (number.isEmpty()) { + if (number.trim().isEmpty()) { return ""; } else { return "P-" + number; @@ -153,4 +156,9 @@ public class PrcControlParser extends SubjectParser { return SubjectType.CONTROL; } + @Override + protected List<String> parseLanguages(Row row) { + return new ArrayList<>(); + } + } 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 5e27552df3a89f61c0e3ac116c28255b64b04a21..ff69003ab5130798a0e8db139fd95e292d800a1b 100644 --- a/appointment-import/src/main/java/smash/appointment/parse/PrcFlyingParser.java +++ b/appointment-import/src/main/java/smash/appointment/parse/PrcFlyingParser.java @@ -1,5 +1,8 @@ package smash.appointment.parse; +import java.util.ArrayList; +import java.util.List; + import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; @@ -8,7 +11,7 @@ public class PrcFlyingParser extends SubjectParser { @Override protected String parseScreeningNumber(Row row) { String number = getString(row.getCell(25)); - if (number.isEmpty()) { + if (number.trim().isEmpty()) { return ""; } else { return "P-" + number; @@ -142,5 +145,9 @@ public class PrcFlyingParser extends SubjectParser { protected SubjectType parseType(Row row) { return null; } + @Override + protected List<String> parseLanguages(Row row) { + return new ArrayList<>(); + } } 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 7b76573ff58ee9a9ee5237e9e06150ab5f319109..c2aea1029b8417688b77fee8b1b59c881c48253b 100644 --- a/appointment-import/src/main/java/smash/appointment/parse/PrcSubjectsParser.java +++ b/appointment-import/src/main/java/smash/appointment/parse/PrcSubjectsParser.java @@ -1,5 +1,8 @@ package smash.appointment.parse; +import java.util.ArrayList; +import java.util.List; + import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; @@ -7,7 +10,12 @@ public class PrcSubjectsParser extends SubjectParser { @Override protected String parseScreeningNumber(Row row) { - return "P-" + getString(row.getCell(25)); + String number = getString(row.getCell(25)); + if (number.trim().isEmpty()) { + return ""; + } else { + return "P-" + number; + } } @Override @@ -125,4 +133,9 @@ public class PrcSubjectsParser extends SubjectParser { return SubjectType.SUBJECT; } + @Override + protected List<String> parseLanguages(Row row) { + return new ArrayList<>(); + } + } 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 6b21835261f82175b1238dcf8c6f423c59858bf7..3d5652f69b68a5e3f17ec32d5d999de40ea6ae96 100644 --- a/appointment-import/src/main/java/smash/appointment/parse/SubjectParser.java +++ b/appointment-import/src/main/java/smash/appointment/parse/SubjectParser.java @@ -16,7 +16,9 @@ import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.Comment; import org.apache.poi.ss.usermodel.DataFormatter; +import org.apache.poi.ss.usermodel.RichTextString; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; @@ -84,10 +86,13 @@ public abstract class SubjectParser { result.setmPowerId(parsemPowerId(row)); result.setBirthDate(parseBirthDate(row)); result.setType(parseType(row)); + result.setLanguages(parseLanguages(row)); return result; } + protected abstract List<String> parseLanguages(Row row); + protected abstract SubjectType parseType(Row row); protected abstract String parseBirthDate(Row row); @@ -142,6 +147,18 @@ public abstract class SubjectParser { return df.formatCellValue(cell).trim(); } + protected String getComments(Cell cell) { + Comment comment = cell.getCellComment(); + if (comment != null) { + RichTextString richTextString = comment.getString(); + if (richTextString != null) { + return richTextString.getString(); + + } + } + return ""; + } + protected String getDate(Cell cell) { if (cell == null) { return ""; diff --git a/appointment-import/src/test/java/smash/appointment/parse/AllTests.java b/appointment-import/src/test/java/smash/appointment/parse/AllTests.java index 5aaea5c96f9646e676ea97f75dc921964bac8042..71c7e659a4d91942129cace99a9438c4c4e16d33 100644 --- a/appointment-import/src/test/java/smash/appointment/parse/AllTests.java +++ b/appointment-import/src/test/java/smash/appointment/parse/AllTests.java @@ -6,6 +6,8 @@ import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ CellParserTest.class, // + LihControlMappingParserTest.class, // + LihControlParserTest.class, // PrcFlyingParserTest.class, // PrcSubjectsParserTest.class, // RedcapParserTest.class, // @@ -14,6 +16,7 @@ import org.junit.runners.Suite.SuiteClasses; SubjectParserTest.class, // XlsxCalendarProcessorTest.class, // }) + public class AllTests { } diff --git a/appointment-import/src/test/java/smash/appointment/parse/LihControlMappingParserTest.java b/appointment-import/src/test/java/smash/appointment/parse/LihControlMappingParserTest.java new file mode 100644 index 0000000000000000000000000000000000000000..33d36da9df6bc99b91aab4f111c6b8934a57c340 --- /dev/null +++ b/appointment-import/src/test/java/smash/appointment/parse/LihControlMappingParserTest.java @@ -0,0 +1,58 @@ +package smash.appointment.parse; + +import static org.junit.Assert.*; + +import java.util.List; + +import org.apache.log4j.Logger; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.Test; + +public class LihControlMappingParserTest extends TestBase { + Logger logger = Logger.getLogger(LihControlMappingParserTest.class); + + LihControlMappingParser processor = new LihControlMappingParser(); + + + @AfterClass + public static void tearDownAfterClass() throws Exception { + } + + @Before + public void setUp() { + super.setUp(); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void test() throws Exception { + List<Subject> entries = processor.processExcel("testFiles/lihControlMappingExample.xlsx"); + assertTrue(entries.size() > 0); + + Subject subject = entries.get(0); + assertEquals("L-001", subject.getScreeningNumber()); + assertEquals("Piotrek", subject.getName()); + assertEquals("Gawron", subject.getSurname()); + assertEquals("", subject.getAddress()); + assertEquals("", subject.getZipCode()); + assertEquals("", subject.getCity()); + assertEquals("", subject.getCountry()); + assertEquals("343", subject.getPhone1()); + assertEquals("", subject.getPhone2()); + assertEquals("", subject.getPhone3()); + assertEquals("", subject.getMail()); + assertEquals("", subject.getDiagnosisYear()); + assertEquals("", subject.getDiagnosis()); + assertEquals("", subject.getReferal()); + assertEquals("2015-08-03", subject.getAddDate()); + assertEquals("ND3333", subject.getNdNumber()); + assertEquals("", subject.getBirthDate()); + } + + +} diff --git a/appointment-import/src/test/java/smash/appointment/parse/LihControlParserTest.java b/appointment-import/src/test/java/smash/appointment/parse/LihControlParserTest.java new file mode 100644 index 0000000000000000000000000000000000000000..b610128ed28a8c7850ecbaacf5a5c3af64a07def --- /dev/null +++ b/appointment-import/src/test/java/smash/appointment/parse/LihControlParserTest.java @@ -0,0 +1,64 @@ +package smash.appointment.parse; + +import static org.junit.Assert.*; + +import java.util.List; + +import org.apache.log4j.Logger; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.Test; + +public class LihControlParserTest extends TestBase { + Logger logger = Logger.getLogger(LihControlParserTest.class); + + LihControlParser processor = new LihControlParser(); + + + @AfterClass + public static void tearDownAfterClass() throws Exception { + } + + @Before + public void setUp() { + super.setUp(); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void test() throws Exception { + List<Subject> entries = processor.processExcel("testFiles/lihControlExample.xlsx"); + assertTrue(entries.size() > 0); + + Subject subject = entries.get(0); + assertEquals("L-001", subject.getScreeningNumber()); + assertEquals("Name", subject.getName()); + assertEquals("Surname", subject.getSurname()); + assertTrue(subject.getRemarks().contains("001 rdv 01/09/2015 9h jyf")); + assertTrue(subject.getRemarks().contains("PD family relation=pd info")); + assertEquals("11, Rue blabla", subject.getAddress()); + assertEquals("L-3322", subject.getZipCode()); + assertEquals("Luxembourg", subject.getCity()); + assertEquals("", subject.getCountry()); + assertEquals("123456789", subject.getPhone1()); + assertEquals("321654", subject.getPhone2()); + assertEquals("", subject.getPhone3()); + assertEquals("email@pt.lu", subject.getMail()); + assertEquals("", subject.getDiagnosisYear()); + assertEquals("", subject.getDiagnosis()); + assertEquals("", subject.getReferal()); + assertEquals("", subject.getAddDate()); + assertEquals("", subject.getNdNumber()); + assertEquals("1937-01-03", subject.getBirthDate()); + assertTrue(subject.getRemarks().contains("some other remark")); + assertTrue(subject.getRemarks().contains("at home: NMS + RFQ 1 + RFQ 2 + REM + PDSS: manque une page ds RFQ => Linda pr level b 09/09/15")); + assertTrue(subject.getLanguages().contains("French")); + assertTrue(subject.getLanguages().contains("German")); + } + + +} diff --git a/appointment-import/testFiles/lihControlExample.xlsx b/appointment-import/testFiles/lihControlExample.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..526e749bdf8cb818d13e98b763afb22b3ec3b071 Binary files /dev/null and b/appointment-import/testFiles/lihControlExample.xlsx differ