package ch.weirich.templator.pages;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.MessageFormat;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.data.Patient;
import ch.medelexis.templator.model.IProcessor;
import ch.medelexis.templator.model.ProcessingSchema;
import ch.medelexis.templator.model.SchemaFilterOutputStream;
import ch.medelexis.templator.model.StorageController;
import ch.medelexis.templator.ui.OOOProcessorPrefs;
import ch.rgw.io.FileTool;
import ch.rgw.tools.ExHandler;
public class PagesProcessor implements IProcessor {
private ProcessingSchema proc;
public PagesProcessor(){
// TODO Auto-generated constructor stub
}
@Override
public String getName(){
return "Apple(tm) iWork(tm) Pages(tm)";
}
@Override
public boolean doOutput(ProcessingSchema schema){
proc = schema;
File tmpl = schema.getTemplateFile();
if (!tmpl.exists()) {
SWTHelper.alert("Template missing", MessageFormat.format(
"Konnte Vorlagedatei {0} nicht öffnen", tmpl.getAbsolutePath()));
return false;
}
try {
ZipInputStream zis = new ZipInputStream(new FileInputStream(tmpl));
Patient actPatient = ElexisEventDispatcher.getSelectedPatient();
StorageController sc = StorageController.getInstance();
File output = null;
output = sc.createFile(actPatient, tmpl.getName());
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(output));
ZipEntry ze;
while ((ze = zis.getNextEntry()) != null) {
ZipEntry zo = new ZipEntry(ze.getName());
zos.putNextEntry(zo);
zo.setMethod(ZipOutputStream.DEFLATED);
if (ze.getName().equals("index.xml")) {
SchemaFilterOutputStream sfo = new SchemaFilterOutputStream(proc, zos, this);
FileTool.copyStreams(zis, sfo);
} else {
FileTool.copyStreams(zis, zos);
}
}
zos.finish();
zis.close();
zos.close();
String cmd = CoreHub.localCfg.get(Preferences.PREFERENCE_BRANCH + "cmd", "open");
String param = CoreHub.localCfg.get(OOOProcessorPrefs.PREFERENCE_BRANCH + "param", "%");
int i = param.indexOf('%');
if (i != -1) {
param = param.substring(0, i) + output.getAbsolutePath() + param.substring(i + 1);
}
Process process = Runtime.getRuntime().exec(new String[] {
cmd, param
});
return process.waitFor() == 0;
} catch (Exception e) {
ExHandler.handle(e);
SWTHelper.alert("Pages Processor",
"Problem mit dem Erstellen des Dokuments " + e.getMessage());
}
return false;
}
@Override
public String convert(String input){
String replacement = input.replaceAll("\\t", "<sf:tab/>");
replacement = replacement.replaceAll("\\n", "<sf:br/>");
return replacement;
}
}