ch.elexis.impfplan.view.ImpfplanView.java Source code

Java tutorial

Introduction

Here is the source code for ch.elexis.impfplan.view.ImpfplanView.java

Source

/*******************************************************************************
 * Copyright (c) 2010, G. Weirich and Elexis
 * 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:
 *    G. Weirich - initial implementation
 *    
 *******************************************************************************/

package ch.elexis.impfplan.view;

import java.util.Collection;
import java.util.List;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.part.ViewPart;

import ch.elexis.core.data.events.ElexisEvent;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.exceptions.ElexisException;
import ch.elexis.core.ui.UiDesk;
import ch.elexis.core.ui.events.ElexisUiEventListenerImpl;
import ch.elexis.core.ui.icons.Images;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.core.ui.util.ViewMenus;
import ch.elexis.data.Patient;
import ch.elexis.impfplan.controller.ImpfplanController;
import ch.elexis.impfplan.controller.VaccinationSorter;
import ch.elexis.impfplan.model.Vaccination;
import ch.elexis.impfplan.model.VaccinationType;
import ch.rgw.tools.TimeTool;

public class ImpfplanView extends ViewPart {
    private IAction addVacination, printVaccinations, removeVaccination;
    TableViewer tvVaccsDone;
    TableViewer tvVaccsRecommended;
    int[] columnWidths = new int[] { 300, 100 };
    String[] columnTitles = new String[] { Messages.ImpfplanView_vaccinationColumn,
            Messages.ImpfplanView_dateColumn };
    ScrolledForm form;
    VaccinationSorter sorter = new VaccinationSorter();

    ElexisUiEventListenerImpl eeli_pat = new ElexisUiEventListenerImpl(Patient.class) {

        @Override
        public void runInUi(ElexisEvent ev) {
            tvVaccsDone.refresh();
            tvVaccsRecommended.refresh();
            if (ElexisEventDispatcher.getSelectedPatient() != null) {
                addVacination.setEnabled(true);
                printVaccinations.setEnabled(true);
            }
        }

    };

    @Override
    public void createPartControl(Composite parent) {
        form = UiDesk.getToolkit().createScrolledForm(parent);
        form.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true));
        Composite body = form.getBody();
        body.setLayout(new GridLayout());
        makeActions();
        ViewMenus menu = new ViewMenus(getViewSite());
        menu.createToolbar(addVacination, printVaccinations);
        Label lblVaccsDone = new Label(body, SWT.NONE);
        lblVaccsDone.setText(Messages.ImpfplanView_vaccinationsDOne);
        Table tVaccsDone = new Table(body, SWT.FULL_SELECTION);
        tVaccsDone.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true));
        for (int i = 0; i < columnTitles.length; i++) {
            TableColumn tc = new TableColumn(tVaccsDone, SWT.NONE);
            tc.setWidth(columnWidths[i]);
            tc.setText(columnTitles[i]);
        }
        tVaccsDone.setHeaderVisible(true);
        tVaccsDone.setLinesVisible(true);
        tvVaccsDone = new TableViewer(tVaccsDone);
        tvVaccsDone.setContentProvider(new ContentProviderAdapter() {

            @Override
            public Object[] getElements(Object inputElement) {
                Patient actPatient = ElexisEventDispatcher.getSelectedPatient();
                if (actPatient != null) {
                    Collection<Vaccination> r = ImpfplanController.getVaccinations(actPatient);
                    return r.toArray();

                }
                return new Object[0];
            }
        });
        MenuManager contextMenu = new MenuManager();
        contextMenu.add(removeVaccination);
        tvVaccsDone.getControl().setMenu(contextMenu.createContextMenu(tvVaccsDone.getControl()));
        tvVaccsDone.setSorter(sorter);
        tvVaccsDone.setLabelProvider(new VaccinationLabelProvider());

        Label lblVaccsReccomended = new Label(body, SWT.NONE);
        lblVaccsReccomended.setText(Messages.ImpfplanView_vaccinationsRecommended);
        Table tVaccsRecommended = new Table(body, SWT.FULL_SELECTION);
        tVaccsRecommended.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true));
        for (int i = 0; i < columnTitles.length; i++) {
            TableColumn tc = new TableColumn(tVaccsRecommended, SWT.NONE);
            tc.setWidth(columnWidths[i]);
            tc.setText(columnTitles[i]);
        }
        tVaccsRecommended.setHeaderVisible(true);
        tVaccsRecommended.setLinesVisible(true);
        tvVaccsRecommended = new TableViewer(tVaccsRecommended);

        tvVaccsRecommended.setContentProvider(new ContentProviderAdapter() {

            @Override
            public Object[] getElements(Object inputElement) {
                Patient actPatient = ElexisEventDispatcher.getSelectedPatient();
                if (actPatient != null) {
                    try {
                        List<VaccinationType> r = VaccinationType.findDueFor(actPatient);
                        return r.toArray();

                    } catch (ElexisException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                }
                return new Object[0];
            }
        });
        tvVaccsRecommended.setSorter(sorter);
        tvVaccsRecommended.setLabelProvider(new VaccinationLabelProvider());
        tvVaccsRecommended.setInput(this);

        tvVaccsDone.setInput(this);

        boolean enable = ElexisEventDispatcher.getSelectedPatient() != null;
        addVacination.setEnabled(enable);
        printVaccinations.setEnabled(enable);
        ElexisEventDispatcher.getInstance().addListeners(eeli_pat);
    }

    @Override
    public void dispose() {
        ElexisEventDispatcher.getInstance().removeListeners(eeli_pat);
    }

    @Override
    public void setFocus() {
        // TODO Auto-generated method stub

    }

    private void makeActions() {
        addVacination = new Action(Messages.ImpfplanView_vaccinateActionTitle) {
            {
                setToolTipText(Messages.ImpfplanView_vaccinateActionTooltip);
                setImageDescriptor(Images.IMG_ADDITEM.getImageDescriptor());
            }

            @Override
            public void run() {
                AddVaccinationDialog dlg = new AddVaccinationDialog(getViewSite().getShell());
                if (dlg.open() == Dialog.OK) {
                    new Vaccination(dlg.result, ElexisEventDispatcher.getSelectedPatient(), new TimeTool(dlg.date),
                            dlg.bUnexact);
                    tvVaccsDone.refresh();
                    tvVaccsRecommended.refresh();
                }
            }

        };

        printVaccinations = new Action(Messages.ImpfplanView_printActionTitle) {
            {
                setToolTipText(Messages.ImpfplanView_printActionTooltip);
                setImageDescriptor(Images.IMG_PRINTER.getImageDescriptor());

            }

            @Override
            public void run() {
                ImpfplanPrinter ipr = new ImpfplanPrinter(getSite().getShell());
                ipr.open();
            }
        };

        removeVaccination = new Action(Messages.ImpfplanView_removeActionTitle) {
            {
                setToolTipText(Messages.ImpfplanView_removeActionTooltip);
                setImageDescriptor(Images.IMG_DELETE.getImageDescriptor());
            }

            @Override
            public void run() {
                IStructuredSelection sel = (IStructuredSelection) tvVaccsDone.getSelection();
                if (!sel.isEmpty()) {
                    Vaccination v = (Vaccination) sel.getFirstElement();
                    if (v.delete()) {
                        tvVaccsDone.remove(v);
                    }
                }

            }
        };
    }
}