/** * (c) 2007 by G. Weirich * All rights reserved * * From: Laborimport Viollier * * Adapted to Bioanalytica by Daniel Lutz <danlutz@watz.ch> * Adapted to Risch by Gerry Weirich * */ package ch.medshare.mediport; import java.io.File; import java.io.IOException; import java.text.MessageFormat; import java.util.List; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import ch.elexis.core.data.interfaces.IRnOutputter; import ch.elexis.core.ui.util.Log; import ch.elexis.core.ui.util.SWTHelper; import ch.medshare.mediport.config.ConfigKeys; import ch.medshare.mediport.config.MPCProperties; import ch.medshare.mediport.util.MediPortHelper; import ch.medshare.swt.widgets.DirectoryText; import ch.medshare.util.UtilFile; import ch.rgw.tools.ExHandler; public class MediportMainPrefPage extends MediPortAbstractPrefPage { private static Log log = Log.get("MediportMainPrefPage"); //$NON-NLS-1$ DirectoryText txtInstallDir; Combo cbServer; Combo cbServerIp; Combo cbAusgabe; Text txtIntermediaerEAN; Text txtSenderEAN; Text txtSenderDN; Button btnInit; private boolean overwriteRunning = false; private boolean installChanged = false; private void fillData(){ String installDir = getPrefString(MPC_INSTALL_DIR); txtInstallDir.setText(installDir); cbAusgabe.setText(getPrefString(MPC_AUSGABE)); cbServer.setText(getPrefString(MPC_SERVER)); String interEAN = getPrefString(MPC_INTERMEDIAER_EAN); if (interEAN == null || interEAN.length() == 0) { interEAN = MEDIDATA_EAN; } txtIntermediaerEAN.setText(interEAN); try { props = MPCProperties.reload(installDir); if (props != null) { txtSenderEAN.setText(props.getProperty(ConfigKeys.SENDER_EAN)); txtSenderDN.setText(props.getProperty(ConfigKeys.MEDIPORT_DN)); String serverIp = props.getProperty(ConfigKeys.MEDIPORT_IP); if (VALUE_SERVER_URL_PRODUKTIV.equals(serverIp)) { cbServerIp.setText(LBL_SERVER_URL_PRODUKTIV); } else if (VALUE_SERVER_URL_TEST.equals(serverIp)) { cbServerIp.setText(LBL_SERVER_URL_TEST); } else { cbServerIp.setText(serverIp); } } } catch (IOException e) { Log.get(getClass().getName()).log(e.getMessage(), Log.WARNINGS); } installChanged = false; } private void installDirChanged(){ if (installChanged && !overwriteRunning) { overwriteRunning = true; try { String installDir = txtInstallDir.getText(); File installFile = new File(installDir); if (installFile.exists() && installFile.isDirectory()) { props = MPCProperties.reload(installDir); if (props != null) { boolean overwrite = false; String ean = props.getProperty(ConfigKeys.SENDER_EAN, ""); //$NON-NLS-1$ String dn = props.getProperty(ConfigKeys.MEDIPORT_DN, ""); //$NON-NLS-1$ String ip = props.getProperty(ConfigKeys.MEDIPORT_IP, ""); //$NON-NLS-1$ if (!"".equals(txtSenderEAN.getText()) //$NON-NLS-1$ || !"".equals(txtSenderDN.getText()) //$NON-NLS-1$ || !"".equals(cbServerIp.getText())) { //$NON-NLS-1$ if (!ean.equals(txtSenderEAN.getText()) || !dn.equals(txtSenderDN.getText()) || !ip.equals(cbServerIp.getText())) { String msg = MessageFormat .format( Messages .getString("MediportMainPrefPage.question.msg.differentData"), //$NON-NLS-1$ new Object[] { props.getConfigFilenamePath() }); if (MessageDialog .openQuestion( getShell(), msg, Messages .getString("MediportMainPrefPage.question.msg.DatenUebernehmen"))) { //$NON-NLS-1$ overwrite = true; } } } else { overwrite = true; } if (overwrite) { if (txtIntermediaerEAN.getText() == null || txtIntermediaerEAN.getText().length() == 0) { txtIntermediaerEAN.setText(ean); } txtSenderEAN.setText(ean); txtSenderDN.setText(dn); cbServerIp.setText(ip); } } } } catch (IOException e1) { // Do nothing. Was just trying } finally { overwriteRunning = false; installChanged = false; } } } private void btnInitAbCDPressed(){ FileDialog fileDialog = new FileDialog(getShell()); fileDialog.setFilterExtensions(new String[] { "*.re", "*.*" }); String filenamePath = fileDialog.open(); if (filenamePath != null) { try { String content = UtilFile.readTextFile(filenamePath); int start = content.indexOf("uid="); //$NON-NLS-1$ if (start >= 0) { int end = content.indexOf(",", start); //$NON-NLS-1$ if (end < 0) { end = content.length() - 1; } String uid = content.substring(start + 4, end); if (uid.length() > 3 && uid.toUpperCase().startsWith("EAN")) { //$NON-NLS-1$ uid = uid.substring(3); } log.log("INIT: Content = " + uid, Log.DEBUGMSG); log.log("INIT: UID = " + uid, Log.DEBUGMSG); txtSenderEAN.setText(uid); txtSenderDN.setText(content); String keystoreFilename = "EAN" + uid //$NON-NLS-1$ + "_mpg.keystore"; //$NON-NLS-1$ File keystoreFile = new File(UtilFile.getFilepath(filenamePath) + File.separator + keystoreFilename); File toDir = new File(prefs.getString(MPC_INSTALL_DIR) + File.separator + "config"); log.log("INIT: Check Keystorefile = " + keystoreFile.getCanonicalPath(), Log.DEBUGMSG); log.log("INIT: Check config path = " + toDir.getCanonicalPath(), Log.DEBUGMSG); String msg = ""; if (!keystoreFile.exists()) { msg = Messages .getString("MediportMainPrefPage.error.msg.InitAbCD.SrcNotFound") + keystoreFile.getCanonicalPath(); //$NON-NLS-1$ } if (!toDir.exists()) { msg = Messages .getString("MediportMainPrefPage.error.msg.InitAbCD.DstNotFound") + toDir.getCanonicalPath(); //$NON-NLS-1$ } if (keystoreFile.exists() && toDir.exists()) { log.log("INIT: Keystorefile gefunden", Log.DEBUGMSG); String toPath = toDir.getCanonicalPath() + File.separator //$NON-NLS-1$ + keystoreFilename; log.log("INIT: Keystorefile wird kopiert. Ziel: " + toPath, Log.DEBUGMSG); UtilFile.deleteFile(toPath + ".old"); UtilFile.moveFile(toPath, toPath + ".old"); UtilFile.copyFile(keystoreFile.getCanonicalPath(), toPath); if (new File(toPath).exists()) { log.log("INIT: Keystorefile wurde erfolgreich kopiert", Log.DEBUGMSG); } else { log.log("INIT: " + toPath + " existiert nicht...", Log.DEBUGMSG); MessageDialog .openError( getShell(), Messages.getString("MediportMainPrefPage.error.title.InitAbCD"), Messages.getString("MediportMainPrefPage.error.msg.InitAbCD") + "\r" + msg); //$NON-NLS-1$ } } else { log.log("INIT: " + msg, Log.DEBUGMSG); MessageDialog .openError( getShell(), Messages.getString("MediportMainPrefPage.error.title.InitAbCD"), Messages.getString("MediportMainPrefPage.error.msg.InitAbCD") + "\r" + msg); //$NON-NLS-1$ } } else { throw new IOException(Messages .getString("MediportMainPrefPage.error.msg.Dateiformat")); //$NON-NLS-1$ } } catch (IOException ex) { ExHandler.handle(ex); MessageDialog.openError(getShell(), Messages .getString("MediportMainPrefPage.error.title.InitAbCD"), ex.getMessage()); //$NON-NLS-1$ } } } @Override protected Control createContents(final Composite parent){ Composite comp = new Composite(parent, SWT.NONE); comp.setLayout(new GridLayout(3, false)); comp.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); Label lblInstallDir = new Label(comp, SWT.NONE); lblInstallDir.setText(Messages .getString("MediportMainPrefPage.lbl.Installationsverzeichnis")); //$NON-NLS-1$ txtInstallDir = new DirectoryText(comp, SWT.BORDER); txtInstallDir.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); Label lblServer = new Label(comp, SWT.NONE); lblServer.setText(Messages.getString("MediportMainPrefPage.lbl.Uebermittlung")); //$NON-NLS-1$ cbServer = new Combo(comp, SWT.BORDER | SWT.READ_ONLY); cbServer.add(LBL_SERVER_PRODUCTION); cbServer.add(LBL_SERVER_TEST); cbServer.setLayoutData(SWTHelper.getFillGridData(2, false, 1, false)); Label lblServerIp = new Label(comp, SWT.NONE); lblServerIp.setText(Messages.getString("MediportMainPrefPage.lbl.MediportServerURL")); //$NON-NLS-1$ cbServerIp = new Combo(comp, SWT.BORDER); cbServerIp.add(LBL_SERVER_URL_PRODUKTIV); cbServerIp.add(LBL_SERVER_URL_TEST); cbServerIp.setLayoutData(SWTHelper.getFillGridData(2, false, 1, false)); Label lblAusgabe = new Label(comp, SWT.NONE); lblAusgabe.setText(Messages.getString("MediportMainPrefPage.lbl.Rechnungsausgabe")); //$NON-NLS-1$ cbAusgabe = new Combo(comp, SWT.BORDER | SWT.READ_ONLY); cbAusgabe.setLayoutData(SWTHelper.getFillGridData(2, false, 1, false)); Label lblIntermediaerEAN = new Label(comp, SWT.NONE); lblIntermediaerEAN.setText(Messages.getString("MediportMainPrefPage.lbl.IntermediaerEAN")); //$NON-NLS-1$ txtIntermediaerEAN = new Text(comp, SWT.BORDER); txtIntermediaerEAN.setLayoutData(SWTHelper.getFillGridData(2, true, 1, false)); Group senderComp = new Group(comp, SWT.NONE); senderComp.setText(Messages.getString("MediportMainPrefPage.mediport.Sender")); //$NON-NLS-1$ senderComp.setLayout(new GridLayout(2, false)); senderComp.setLayoutData(SWTHelper.getFillGridData(3, true, 1, false)); Label lblSenderEAN = new Label(senderComp, SWT.NONE); lblSenderEAN.setText(Messages.getString("MediportMainPrefPage.mediport.EAN")); //$NON-NLS-1$ txtSenderEAN = new Text(senderComp, SWT.BORDER); txtSenderEAN.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); Label lblSenderDN = new Label(senderComp, SWT.NONE); lblSenderDN.setText(Messages.getString("MediportMainPrefPage.mediport.DN")); //$NON-NLS-1$ txtSenderDN = new Text(senderComp, SWT.BORDER); txtSenderDN.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); btnInit = new Button(senderComp, SWT.PUSH); btnInit.setText(Messages.getString("MediportMainPrefPage.btn.InitAbCD")); //$NON-NLS-1$ btnInit.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); // Events btnInit.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ btnInitAbCDPressed(); } }); txtInstallDir.addFocusListener(new FocusAdapter() { public void focusLost(FocusEvent e){ installDirChanged(); } public void focusGained(FocusEvent e){ installDirChanged(); } }); txtInstallDir.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e){ installChanged = true; } }); // Data List<IRnOutputter> lo = MediPortHelper.getRnOutputter(); for (IRnOutputter ro : lo) { cbAusgabe.add(ro.getDescription()); } cbAusgabe.select(0); cbServer.select(0); cbServerIp.select(0); fillData(); return parent; } protected boolean storeAll(){ putPrefString(MPC_INSTALL_DIR, this.txtInstallDir.getText()); putPrefString(MPC_AUSGABE, this.cbAusgabe.getItem(this.cbAusgabe.getSelectionIndex())); putPrefString(MPC_SERVER, this.cbServer.getItem(this.cbServer.getSelectionIndex())); putPrefString(MPC_INTERMEDIAER_EAN, this.txtIntermediaerEAN.getText()); storePrefs(); String installDir = txtInstallDir.getText(); if (installDir != null && installDir.length() > 0) { String configFilename = ""; //$NON-NLS-1$ try { if (!"".equals(txtSenderEAN.getText()) //$NON-NLS-1$ || !"".equals(txtSenderDN.getText()) //$NON-NLS-1$ || !"".equals(cbServerIp.getText())) { //$NON-NLS-1$ props = MPCProperties.reload(installDir); configFilename = props.getConfigFilenamePath(); props.put(ConfigKeys.SENDER_EAN, this.txtSenderEAN.getText()); props.put(ConfigKeys.MEDIPORT_DN, this.txtSenderDN.getText()); String lblServerIp = this.cbServerIp.getText(); if (LBL_SERVER_URL_PRODUKTIV.equals(lblServerIp)) { props.put(ConfigKeys.MEDIPORT_IP, VALUE_SERVER_URL_PRODUKTIV); } else if (LBL_SERVER_URL_TEST.equals(lblServerIp)) { props.put(ConfigKeys.MEDIPORT_IP, VALUE_SERVER_URL_TEST); } else { props.put(ConfigKeys.MEDIPORT_IP, lblServerIp); } props.put(ConfigKeys.KEYSTORE_NAME, "config/EAN" //$NON-NLS-1$ + txtSenderEAN.getText() + "_mpg.keystore"); //$NON-NLS-1$ props.store(); } installChanged = false; } catch (Exception e) { ExHandler.handle(e); String msg = MessageFormat.format(Messages .getString("MediportMainPrefPage.error.title.SaveConfig"), //$NON-NLS-1$ new Object[] { configFilename }); MessageDialog.openError(getShell(), msg, e.getMessage()); return false; } } return true; } public void init(final IWorkbench workbench){ setMessage(Messages.getString("MediportMainPrefPage.message")); //$NON-NLS-1$ setDescription(Messages.getString("MediportMainPrefPage.description")); //$NON-NLS-1$ } }