/******************************************************************************* * 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.interfaces.text.IOpaqueDocument; import ch.elexis.core.data.services.GlobalServiceDescriptors; import ch.elexis.core.data.services.IDocumentManager; import ch.elexis.core.data.status.ElexisStatus; import ch.elexis.core.data.util.Extensions; 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.Patient; import ch.elexis.data.Query; import ch.elexis.data.Sticker; import ch.rgw.io.FileTool; public class DocumentExport { Sticker sticker = null; PatFilterImpl pf = new PatFilterImpl(); public String doExport(String destination, 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."; } } IDocumentManager mgr = (IDocumentManager) Extensions.findBestService( GlobalServiceDescriptors.DOCUMENT_MANAGEMENT, null); if (mgr == null) { return "Keine Dokumente gefunden"; } try { if (destination == 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); destination = fd.open(); } if (destination != null) { File csv = new File(destination); File parent = csv.getParentFile(); File dir = new File(parent, FileTool.getNakedFilename(destination)); dir.mkdirs(); CSVWriter writer = new CSVWriter(new FileWriter(csv)); String[] header = new String[] { "Patient", "Name", "Kategorie", "Datum", "Stichwörter", "Pfad" }; List<IOpaqueDocument> dox = mgr.listDocuments(null, null, null, null, null, null); writer.writeNext(header); for (IOpaqueDocument doc : dox) { Patient pat = doc.getPatient(); if (pat != null) { if (sticker != null) { if (pf.accept(pat, sticker) != IPatFilter.ACCEPT) { continue; } } String subdirname = pat.get(Patient.FLD_PATID); if (subdirname != null) { File subdir = new File(dir, subdirname); subdir.mkdirs(); String[] line = new String[header.length]; line[0] = pat.getId(); line[1] = doc.getTitle(); line[2] = doc.getCategory(); line[3] = doc.getCreationDate(); line[4] = doc.getKeywords(); String docfilename = doc.getGUID() + "." + doc.getMimeType(); line[5] = dir.getName() + File.separator + subdir.getName() + File.separator + docfilename; byte[] bin = doc.getContentsAsBytes(); if (bin != null) { File f = new File(subdir, docfilename); FileOutputStream fos = new FileOutputStream(f); fos.write(bin); fos.close(); writer.writeNext(line); } } } } return "Export ok"; } else { return "Abgebrochen."; } } catch (Exception e) { ElexisStatus status = new ElexisStatus(ElexisStatus.ERROR, Hub.PLUGIN_ID, ElexisStatus.CODE_NONE, "Fehler beim Export: " + e.getMessage(), e); throw new ScriptingException(status); } } }