package at.medevit.elexis.ehc.ui.docbox.wizard;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.ehealth_connector.cda.ch.AbstractCdaCh;
import at.medevit.elexis.ehc.docbox.service.DocboxService;
import at.medevit.elexis.ehc.ui.preference.PreferencePage;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.data.Patient;
import ch.elexis.data.PersistentObject;
import ch.elexis.data.Query;
import ch.elexis.data.Rezept;
public class ExportPrescriptionWizardPage1 extends WizardPage {
private TableViewer contentViewer;
protected ExportPrescriptionWizardPage1(String pageName){
super(pageName);
setTitle(pageName);
}
@Override
public void createControl(Composite parent){
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
contentViewer = new TableViewer(composite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
Control control = contentViewer.getControl();
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
gd.heightHint = 300;
control.setLayoutData(gd);
contentViewer.setContentProvider(new ArrayContentProvider());
contentViewer.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element){
if (element instanceof Rezept) {
return ((Rezept) element).getLabel();
}
return super.getText(element);
}
@Override
public Image getImage(Object element){
return super.getImage(element);
}
});
contentViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event){
getWizard().getContainer().updateButtons();
}
});
setControl(composite);
}
@Override
public void setVisible(boolean visible){
super.setVisible(visible);
if (visible) {
Query<Rezept> qbe = new Query<Rezept>(Rezept.class);
Patient selectedPatient = ElexisEventDispatcher.getSelectedPatient();
if (selectedPatient != null) {
qbe.add(Rezept.PATIENT_ID, Query.EQUALS, selectedPatient.getId());
qbe.orderBy(true, new String[] {
Rezept.DATE, PersistentObject.FLD_LASTUPDATE
});
}
contentViewer.setInput(qbe.execute());
}
}
@Override
public boolean isPageComplete(){
IStructuredSelection contentSelection = (IStructuredSelection) contentViewer.getSelection();
if (!contentSelection.isEmpty()) {
Rezept selectedRezept = (Rezept) contentSelection.getFirstElement();
AbstractCdaCh<?> document = DocboxService.getPrescriptionDocument(selectedRezept);
if (document != null) {
ExportPrescriptionWizard.setRezept(selectedRezept);
ExportPrescriptionWizard.setDocument(document);
return true;
}
}
return false;
}
private void writePdf(ByteArrayOutputStream pdf) throws FileNotFoundException, IOException{
String outputDir =
CoreHub.userCfg.get(PreferencePage.EHC_OUTPUTDIR, PreferencePage.getDefaultOutputDir());
File pdfFile = new File(outputDir + File.separator + getRezeptFileName() + ".pdf");
try (FileOutputStream fos = new FileOutputStream(pdfFile)) {
fos.write(pdf.toByteArray());
fos.flush();
}
}
public boolean finish(){
try {
String outputDir =
CoreHub.userCfg.get(PreferencePage.EHC_OUTPUTDIR,
PreferencePage.getDefaultOutputDir());
ExportPrescriptionWizard.getDocument().saveToFile(
outputDir + File.separator + getRezeptFileName() + ".xml");
ByteArrayOutputStream pdf =
DocboxService.getPrescriptionPdf(ExportPrescriptionWizard.getDocument());
writePdf(pdf);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public String getRezeptFileName(){
String ret = ExportPrescriptionWizard.getRezept().getLabel();
return ret.replaceAll(" ", "_");
}
}