/******************************************************************************* * Copyright (c) 2007-2011, G. Weirich and Elexis * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * G. Weirich - initial API and implementation ******************************************************************************/ package ch.elexis.scripting; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.FileDialog; import ch.elexis.core.data.status.ElexisStatus; import ch.elexis.core.ui.Hub; import ch.elexis.core.ui.UiDesk; import ch.elexis.core.ui.views.IPatFilter; import ch.elexis.core.ui.views.PatFilterImpl; import ch.elexis.data.Brief; import ch.elexis.data.Patient; import ch.elexis.data.Person; import ch.elexis.data.Query; import ch.elexis.data.Sticker; import ch.rgw.io.FileTool; public class BriefExport { Sticker sticker = null; PatFilterImpl pf = new PatFilterImpl(); public String doExport(String filename, String stickerName){ if (stickerName != null) { List<Sticker> ls = new Query<Sticker>(Sticker.class, Sticker.NAME, stickerName).execute(); if (ls != null && ls.size() > 0) { sticker = ls.get(0); } else { return "Sticker " + stickerName + " nicht gefunden."; } } if (filename == null) { FileDialog fd = new FileDialog(UiDesk.getTopShell(), SWT.SAVE); fd.setFilterExtensions(new String[] { "*.csv" }); fd.setFilterNames(new String[] { "Comma Separated Values (CVS)" }); fd.setOverwrite(true); filename = fd.open(); } if (filename != null) { List<Brief> briefe = new Query<Brief>(Brief.class).execute(); File csv = new File(filename); File parent = csv.getParentFile(); File dir = new File(parent, FileTool.getNakedFilename(filename)); dir.mkdirs(); try { CSVWriter writer = new CSVWriter(new FileWriter(csv)); String[] header = new String[] { "Betreff", "Datum", "Adressat", "Mimetype", "Typ", "Patient", "Pfad" }; String[] fields = new String[] { Brief.FLD_SUBJECT, Brief.FLD_DATE, Brief.FLD_DESTINATION_ID, Brief.FLD_MIME_TYPE, Brief.FLD_TYPE, Brief.FLD_PATIENT_ID, Brief.FLD_PATIENT_ID }; writer.writeNext(header); for (Brief brief : briefe) { Person pers = brief.getPatient(); if (pers != null) { if (sticker != null) { if (!pers.istPatient()) { continue; } if (pf.accept(Patient.load(pers.getId()), sticker) != IPatFilter.ACCEPT) { continue; } } String subdirname = pers.get(Patient.FLD_PATID); if (subdirname != null) { File subdir = new File(dir, subdirname); subdir.mkdirs(); String[] line = new String[fields.length]; brief.get(fields, line); byte[] bin = brief.loadBinary(); if (bin != null) { File f = new File(subdir, brief.getId() + ".odt"); FileOutputStream fos = new FileOutputStream(f); fos.write(bin); fos.close(); line[line.length - 1] = dir.getName() + File.separator + subdir.getName() + File.separator + f.getName(); writer.writeNext(line); } } } } writer.close(); return "Export ok"; } catch (Exception ex) { ElexisStatus status = new ElexisStatus(ElexisStatus.ERROR, Hub.PLUGIN_ID, ElexisStatus.CODE_NONE, "Fehler beim Export: " + ex.getMessage(), ex); throw new ScriptingException(status); } } return "Abgebrochen"; } }