public void generateDataExchangeFiles() { long startTime = System.currentTimeMillis(); if (CmlOptions.SHOW_LOGS) System.out.print("- Generating SQLite DB from EPha drug interactions csv... "); extractInteractionMap(); // Save interactions to DB try { // Create Sqlite database createDB(); // CSV file String csv_file = ""; // int intercnt = 0; for (Map.Entry<String, ArrayList<String>> entry : m_drug_interactions_map.entrySet()) { String key = entry.getKey().toUpperCase(); ArrayList<String> value = entry.getValue(); System.out.println(++intercnt + ": " + key + " interacts with " + value.size() + " meds"); /* key: ATC1 inter0: Name1 inter1: ATC2 inter2: Name2 inter3: Info inter4: Mechanismus inter5: Effekt inter6: Massnahmen inter7: Grad */ /* Risikoklassen ------------- A: Keine Massnahmen notwendig (grün) B: Vorsichtsmassnahmen empfohlen (gelb) C: Regelmässige Überwachung (orange) D: Kombination vermeiden (pinky) X: Kontraindiziert (hellrot) 0: Keine Angaben (grau) */ for (String s : value) { String[] inter = s.split("\\|\\|"); String risk_class = ""; if (inter[7].equals("A")) risk_class = "Keine Massnahmen notwendig"; else if (inter[7].equals("B")) risk_class = "Vorsichtsmassnahmen empfohlen"; else if (inter[7].equals("C")) risk_class = "Regelmässige Überwachung"; else if (inter[7].equals("D")) risk_class = "Kombination vermeiden"; else if (inter[7].equals("X")) risk_class = "Kontraindiziert"; else if (inter[7].equals("0")) risk_class = "Keine Angaben"; String para_class = "paragraph" + inter[7]; String html_content = "<div>" + "<div class=\"" + para_class + "\" id=\"" + key + "-" + inter[1] + "\">" + "<div class=\"absTitle\">" + key + " [" + inter[0] + "] → " + inter[1] + " [" + inter[2] + "]</div></div>" + "<p class=\"spacing2\">" + "<i>Risikoklasse:</i> " + risk_class + " (" + inter[7] + ")</p>" + "<p class=\"spacing2\">" + "<i>Möglicher Effekt:</i> " + inter[3] + "</p>" + "<p class=\"spacing2\">" + "<i>Mechanismus:</i> " + inter[4] + "</p>" + "<p class=\"spacing2\">" + "<i>Empfohlene Massnahmen:</i> " + inter[6] + "</p></div>"; // Add to sqlite database addDB(key, inter[0], inter[1], inter[2], html_content); // Add to csv file csv_file += key + "||" + inter[1] + "||" + html_content + "\n"; // Add to atc code - html map String atc1_atc2_key = key + "-" + inter[1]; if (atc1_atc2_key != null) { ArrayList<String> interaction_html = m_atc1_atc2_html_map.get(atc1_atc2_key); if (interaction_html == null) interaction_html = new ArrayList<String>(); interaction_html.add(html_content); m_atc1_atc2_html_map.put(atc1_atc2_key, interaction_html); } } // Assume batch size of 20 if (batch_cnt > 20) { conn.setAutoCommit(false); prep.executeBatch(); conn.setAutoCommit(true); batch_cnt = 0; } batch_cnt++; } // Add the rest conn.setAutoCommit(false); prep.executeBatch(); conn.setAutoCommit(true); // Compress stat.executeUpdate("VACUUM;"); // Write CSV to file FileOps.writeToFile( csv_file, Constants.DIR_OUTPUT, "drug_interactions_csv_" + CmlOptions.DB_LANGUAGE + ".csv"); // Zip file FileOps.zipToFile( Constants.DIR_OUTPUT, "drug_interactions_csv_" + CmlOptions.DB_LANGUAGE + ".csv"); // Generate report if (CmlOptions.GENERATE_REPORTS == true) { // Create interactions error report file InteractionsReport interactions_errors = new InteractionsReport( Constants.FILE_INTERACTIONS_REPORT, CmlOptions.DB_LANGUAGE, "html"); String report_style_str = FileOps.readCSSfromFile(Constants.FILE_REPORT_CSS_BASE + ".css"); interactions_errors.addStyleSheet(report_style_str); if (CmlOptions.DB_LANGUAGE.equals("de")) interactions_errors.addHtmlHeader( "Schweizer Arzneimittel-Kompendium", Constants.FI_DB_VERSION); else if (CmlOptions.DB_LANGUAGE.equals("fr")) interactions_errors.addHtmlHeader( "Compendium des Médicaments Suisse", Constants.FI_DB_VERSION); interactions_errors.append(interactions_errors.treemapToHtmlTable(m_atc1_atc2_html_map)); interactions_errors.writeHtmlToFile(); interactions_errors.getBWriter().close(); } } catch (IOException e) { e.printStackTrace(); } catch (SQLException e) { System.out.println("SQLException!"); } catch (ClassNotFoundException e) { System.out.println("ClassNotFoundException!"); } long stopTime = System.currentTimeMillis(); if (CmlOptions.SHOW_LOGS) { System.out.println( "processed " + m_drug_interactions_map.size() + " drug interactions in " + (stopTime - startTime) / 1000.0f + " sec"); } }