package net.medshare.connector.viollier.handlers;
import java.awt.Desktop;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import net.medshare.connector.viollier.Messages;
import net.medshare.connector.viollier.data.ViollierConnectorSettings;
import net.medshare.connector.viollier.ses.PortalCookieService;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.exceptions.ElexisException;
import ch.elexis.data.LabResult;
import ch.elexis.data.Mandant;
import ch.elexis.data.Patient;
import ch.elexis.data.PersistentObject;
import ch.elexis.laborimport.viollier.v2.data.KontaktOrderManagement;
import ch.elexis.laborimport.viollier.v2.data.LaborwerteOrderManagement;
public class RepeatOrderHandler extends AbstractHandler {
private static Logger log = LoggerFactory.getLogger(RepeatOrderHandler.class);
private ViollierConnectorSettings mySettings;
private String httpsUrl;
/**
* Starte Labor Befundabfrage : <br>
* <ul>
* <li>HL7 Datei mit Patientendaten erstellen</li>
* <li>i/med Seite starten</li>
* </ul>
*/
@Override
public Object execute(ExecutionEvent event) throws ExecutionException{
String cookie = "";
mySettings =
new ViollierConnectorSettings(
(Mandant) ElexisEventDispatcher.getSelected(Mandant.class));
httpsUrl = mySettings.getGlobalLoginUrl();
// Cookie holen
try {
cookie = new PortalCookieService().getCookie();
} catch (IOException e) {
log.error("Error getting cookie", e);
MessageDialog.openError(new Shell(), Messages.Handler_errorTitleGetCookie,
Messages.Handler_errorMessageGetCookie + e.getMessage());
} catch (ElexisException e) {
log.error("No password/user defined", e);
MessageDialog.openError(new Shell(), Messages.Handler_errorTitleGetCookie,
e.getMessage());
}
httpsUrl += "&RCSession=" + cookie;
try {
httpsUrl +=
"&appPath="
+ URLEncoder.encode("/orderit/createOrderFromConsultIT?app=LAB400CI&", "UTF-8");
} catch (UnsupportedEncodingException e1) {
log.error("Enoding not supported", e1);
}
Patient patient = ElexisEventDispatcher.getSelectedPatient();
if (patient == null) {
log.warn("No patient selected - exit execution of RepeatOrderHandler");
MessageDialog.openError(new Shell(), Messages.Handler_errorTitleNoPatientSelected,
Messages.Handler_errorMessageNoPatientSelected);
return null;
}
// Holen der OrderId anhand des selektierten resultats
PersistentObject obj =
(PersistentObject) ElexisEventDispatcher.getSelected(LabResult.class);
String labResultId = null;
if (obj != null) {
labResultId = ((LabResult) obj).getId();
}
if (labResultId == null || labResultId.isEmpty()) {
log.warn("No LabResult-ID - exit execution of RepeatOrderHandler");
MessageDialog.openError(new Shell(), Messages.Handler_errorTitleNoLabResultSelected,
Messages.Handler_errorMessageNoLabResultSelected);
return null;
}
String orderId = LaborwerteOrderManagement.findOrderId(labResultId);
String orderNr = KontaktOrderManagement.load(orderId).get("ORDER_NR");
if (orderNr == null || orderNr.isEmpty()) {
log.warn("No order for the given LabResult [" + labResultId + "] found");
MessageDialog.openError(new Shell(), Messages.Handler_errorTitleNoOrderFound,
Messages.Handler_errorMessageNoOrderFound);
return null;
}
try {
httpsUrl += URLEncoder.encode("req=" + orderNr, "UTF-8");
} catch (UnsupportedEncodingException e1) {
log.error("Enoding not supported", e1);
}
// Browser OrderIT öffnen
try {
Desktop.getDesktop().browse(new URI(httpsUrl));
} catch (URISyntaxException e) {
log.error("Could not resolve URI: " + httpsUrl, e);
} catch (IOException e) {
log.error("IO exception while trying to create order", e);
}
return null;
}
}