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.Color; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFColor; 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), null); } @Override protected String parsemPowerId(Row row) { return ""; } private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat("yyyy-MM-dd"); @Override protected String parseAddDate(Row row) { return DATE_FORMATTER.format(Calendar.getInstance().getTime()); } @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) { String zipCode = parseZipCode(row); if (zipCode!=null) { if (zipCode.startsWith("L")) { return "Luxembourg"; } else if (zipCode.startsWith("D")){ return "Deutschland"; } else if (zipCode.startsWith("F")){ return "France"; } else if (zipCode.startsWith("B")){ return "Belgium"; } } 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("Inclusion="+getString(row.getCell(17))); 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 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; } protected String getMappedLanguage(String abbreviation) { switch (abbreviation.toUpperCase()) { case ("F"): return "French"; case ("D"): return "German"; case ("A"): return "German"; case ("E"): return "Spanish"; case ("ALL"): return "German"; case ("GB"): return "English"; case ("P"): return "Portuguese"; case ("PT"): return "Portuguese"; case ("ENG"): return "English"; case ("EN"): return "English"; case ("FR"): return "French"; case ("L"): return "Luxembourgish"; case ("LUX"): return "Luxembourgish"; } logger.warn("Unknown language abbreviation: " + abbreviation); return ""; } @Override protected String parseToBeSeenAt(Row row) { return "L"; } @Override protected boolean parseDead(Row row) { return false; } @Override protected boolean parsePostponed(Row row) { Color color = row.getCell(0).getCellStyle().getFillForegroundColorColor(); if (color == null) { return false; } XSSFColor c = (XSSFColor) color; String colorString = c.getARGBHex().substring(2); switch (colorString) { case ("FFC000"):// orange return false; case ("FFFF00"):// yellow return false; case ("FF0000"):// red return false; case ("FF3399"):// pink return true; case ("00B050"):// green return false; } throw new RuntimeException(parseName(row) + " " + parseSurname(row) + ": Unknown color: " + colorString); } @Override protected boolean parseResigned(Row row) { Color color = row.getCell(0).getCellStyle().getFillForegroundColorColor(); if (color == null) { return false; } XSSFColor c = (XSSFColor) color; String colorString = c.getARGBHex().substring(2); switch (colorString) { case ("FFC000"):// orange return false; case ("FFFF00"):// yellow return false; case ("FF0000"):// red return true; case ("FF3399"):// pink return false; case ("00B050"):// green return false; } throw new RuntimeException(parseName(row) + " " + parseSurname(row) + ": Unknown color: " + colorString); } }