package smash.appointment.parse; import java.io.IOException; import java.util.Calendar; import java.util.List; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.log4j.Logger; public class Main { private static Logger logger = Logger.getLogger(Main.class); SubjectDao subjectDao = new SubjectDao(); AppointmentDao appointmentDao = new AppointmentDao(); public void run(String[] args) throws Exception { 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(); 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(); Option redCap = Option.builder().required().argName("file").hasArg().desc("RedCap appointments").longOpt("red-cap").build(); Option duplicates = Option.builder().required().argName("file").hasArg().desc("duplicates").longOpt("duplicates").build(); options.addOption(agenda); options.addOption(subjects); options.addOption(controls); options.addOption(flyingTeam); options.addOption(lihControls); options.addOption(lihMappingControls); options.addOption(redCap); options.addOption(duplicates); CommandLineParser parser = new DefaultParser(); try { CommandLine line = parser.parse(options, args); String subjectsFile = line.getOptionValue("subjects"); 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() + "]"); } 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() + "]"); } String duplicatesFile = line.getOptionValue("duplicates"); removeDuplicates(duplicatesFile); subjectDao.addSubject(Visit.UNKNOWN, ""); String agendaFile = line.getOptionValue("agenda"); Calendar today = Calendar.getInstance(); today.set(Calendar.HOUR, 5); appointmentDao.addAppointments(processPrcAppointments(agendaFile, today)); String redCapFile = line.getOptionValue("red-cap"); appointmentDao.addAppointments(processRedCapAppointments(redCapFile)); System.out.println("delete from web_visit_appointment_types;"); System.out.println("delete from web_appointment_appointment_types;"); System.out.println("delete from web_subject_languages;"); System.out.println("delete from web_appointment;"); System.out.println("delete from web_visit;"); System.out.println("delete from web_subject;"); SubjectSqlExporter subjectSqlExporter = new SubjectSqlExporter(); // logger.debug("SUBJECTS: "); for (Subject subject : subjectDao.getSubjects()) { System.out.println(subjectSqlExporter.toSql(subject)); } VisitSqlExporter visitSqlExporter = new VisitSqlExporter(); List<Visit> visits = appointmentDao.getVisits(); for (int i = 0; i < visits.size(); i++) { Visit visit = visits.get(i); System.out.println(visitSqlExporter.toSql(visit)); } } catch (ParseException exp) { System.out.println(exp.getMessage()); HelpFormatter formatter = new HelpFormatter(); formatter.printHelp("java -jar file.jar", options); } } private void removeDuplicates(String duplicatesFile) throws IOException { DuplicateRemoveParser parser = new DuplicateRemoveParser(); parser.setSubjectDao(subjectDao); parser.removeDuplicates(duplicatesFile); } private List<AppointmentEntry> processRedCapAppointments(String agendaFile) throws Exception { RedcapParser parser = new RedcapParser(); parser.setSubjectDao(subjectDao); return parser.parse(agendaFile); } 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); } private List<Subject> processPrcControls(String controlsFile) throws Exception { PrcControlParser parser = new PrcControlParser(); return parser.processExcel(controlsFile); } private List<AppointmentEntry> processPrcAppointments(String agendaFile, Calendar minDate) throws Exception { XlsxCalendarProcessor processor = new XlsxCalendarProcessor(); processor.setSubjectDao(subjectDao); List<AppointmentEntry> entries = processor.processExcel(agendaFile, minDate); return entries; } public static void main(String[] args) throws Exception { new Main().run(args); } private List<Subject> processPrcSubjects(String subjectsFile) throws Exception { PrcSubjectsParser parser = new PrcSubjectsParser(); return parser.processExcel(subjectsFile); } }