/******************************************************************************* * Copyright (c) 2014 MEDEVIT. * 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: * T. Huster - initial API and implementation *******************************************************************************/ package at.medevit.elexis.ehc.ui.views; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.URL; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.part.ViewPart; import org.eclipse.wb.swt.ResourceManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import at.medevit.elexis.ehc.ui.Messages; import at.medevit.elexis.ehc.ui.util.CDALoader; import ch.elexis.core.ui.UiDesk; public class EHealthConnectorView extends ViewPart { public final static String ID = "at.medevit.elexis.eHealthConnectorView"; private static Logger log = LoggerFactory.getLogger(EHealthConnectorView.class); private static Image circle = ResourceManager.getPluginImage("at.medevit.elexis.ehc.ui", "icons/arrow-circle.png"); private Text txtUrl; private Browser browser; private CDALoader cdaLoader; private File displayedReport; public EHealthConnectorView(){ cdaLoader = new CDALoader(); } @Override public void createPartControl(Composite parent){ parent.setLayout(new GridLayout()); Composite composite = new Composite(parent, SWT.NONE); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); composite.setLayout(new GridLayout(2, false)); txtUrl = new Text(composite, SWT.BORDER); txtUrl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); txtUrl.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e){ if (e.keyCode == SWT.CR) { displayReport(txtUrl.getText()); } } }); Button btnShow = new Button(composite, SWT.PUSH); btnShow.setImage(circle); btnShow.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ displayReport(txtUrl.getText()); } }); browser = new Browser(composite, SWT.NONE); browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); } /** * display the given CDA report * * @param path * of the CDA report file */ public void displayReport(String path){ InputStream inputStream; try { // try file first, next try resolving via url try { inputStream = new FileInputStream(path); displayReport(inputStream, path); } catch (FileNotFoundException fne) { inputStream = new URL(path).openStream(); displayReport(inputStream, ""); } } catch (IOException e) { log.warn("Could not resolve CDA report on path [" + path + "]", e); MessageDialog.openError(UiDesk.getTopShell(), Messages.Dlg_ResolveError, Messages.Dlg_ResolveErrorMsg + "[" + path + "]"); } } /** * loads cda file an displays in in the browser * * @param inputStream * stream * @param path * if available file path (can be Null or empty) */ public void displayReport(InputStream inputStream, String path){ if (path == null) { path = ""; } displayedReport = cdaLoader.buildXmlDocument(inputStream, path); browser.setUrl(displayedReport.getAbsolutePath()); } public InputStream getDisplayedReport(){ if (displayedReport != null && displayedReport.exists()) { try { return new FileInputStream(displayedReport); } catch (FileNotFoundException e) { log.error("Could not open displayed report.", e); } } return null; } @Override public void setFocus(){ txtUrl.setFocus(); } }