at.medevit.elexis.ehc.ui.views.EHealthConnectorView.java Source code

Java tutorial

Introduction

Here is the source code for at.medevit.elexis.ehc.ui.views.EHealthConnectorView.java

Source

/*******************************************************************************
 * 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();
    }
}