ch.elexis.views.PatientMenuPopulator.java Source code

Java tutorial

Introduction

Here is the source code for ch.elexis.views.PatientMenuPopulator.java

Source

/*******************************************************************************
 * Copyright (c) 2007-2009, 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.views;

import java.text.MessageFormat;
import java.util.LinkedList;
import java.util.List;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;

import ch.elexis.Hub;
import ch.elexis.actions.RestrictedAction;
import ch.elexis.admin.AccessControlDefaults;
import ch.elexis.data.Patient;
import ch.elexis.dialogs.AssignStickerDialog;
import ch.elexis.exchange.IDataSender;
import ch.elexis.exchange.XChangeException;
import ch.elexis.util.Extensions;
import ch.elexis.util.SWTHelper;
import ch.elexis.util.ViewMenus.IMenuPopulator;
import ch.rgw.tools.ExHandler;

public class PatientMenuPopulator implements IMenuPopulator {
    IAction exportKGAction, delPatAction, stickerAction;
    PatientenListeView mine;

    public IAction[] fillMenu() {
        LinkedList<IAction> ret = new LinkedList<IAction>();
        ret.add(stickerAction);
        if (Hub.acl.request(AccessControlDefaults.KONTAKT_DELETE)) {
            ret.add(delPatAction);
        }
        if (Hub.acl.request(AccessControlDefaults.KONTAKT_EXPORT)) {
            ret.add(exportKGAction);
        }
        delPatAction.setEnabled(Hub.acl.request(AccessControlDefaults.KONTAKT_DELETE));
        exportKGAction.setEnabled(Hub.acl.request(AccessControlDefaults.KONTAKT_EXPORT));
        return ret.toArray(new IAction[0]);
    }

    PatientMenuPopulator(PatientenListeView plv) {
        mine = plv;
        stickerAction = new RestrictedAction(AccessControlDefaults.KONTAKT_ETIKETTE,
                Messages.getString("PatientMenuPopulator.StickerAction")) { //$NON-NLS-1$
            {
                setToolTipText(Messages.getString("PatientMenuPopulator.StickerToolTip")); //$NON-NLS-1$
            }

            @Override
            public void doRun() {
                Patient p = mine.getSelectedPatient();
                AssignStickerDialog aed = new AssignStickerDialog(Hub.getActiveShell(), p);
                aed.open();
            }

        };
        delPatAction = new Action(Messages.getString("PatientMenuPopulator.DeletePatientAction")) { //$NON-NLS-1$
            @Override
            public void run() {
                // access rights guard
                if (!Hub.acl.request(AccessControlDefaults.KONTAKT_DELETE)) {
                    SWTHelper.alert(Messages.getString("PatientMenuPopulator.DeletePatientRefusalCaption"), //$NON-NLS-1$
                            Messages.getString("PatientMenuPopulator.DeletePatientRefusalBody")); //$NON-NLS-1$
                    return;
                }

                Patient p = mine.getSelectedPatient();
                if (p != null) {
                    if (MessageDialog.openConfirm(mine.getViewSite().getShell(),
                            Messages.getString("PatientMenuPopulator.DeletePatientConfirm"), //$NON-NLS-1$
                            p.getLabel()) == true) {
                        if (p.delete(false) == false) {
                            SWTHelper.alert(Messages.getString("PatientMenuPopulator.DeletePatientRejectCaption"), //$NON-NLS-1$
                                    Messages.getString("PatientMenuPopulator.DeletePatientRejectBody")); //$NON-NLS-1$
                        } else {
                            mine.reload();
                        }
                    }
                }
            }

        };
        exportKGAction = new Action(Messages.getString("PatientMenuPopulator.ExportEMRAction"), //$NON-NLS-1$
                Action.AS_DROP_DOWN_MENU) {
            Menu menu = null;
            {
                setToolTipText(Messages.getString("PatientMenuPopulator.ExportEMRToolTip")); //$NON-NLS-1$
                setMenuCreator(new IMenuCreator() {

                    public void dispose() {
                        if (menu != null) {
                            menu.dispose();
                            menu = null;
                        }

                    }

                    public Menu getMenu(Control parent) {
                        menu = new Menu(parent);
                        createMenu();
                        return menu;
                    }

                    public Menu getMenu(Menu parent) {
                        menu = new Menu(parent);
                        createMenu();
                        return menu;
                    }

                });
            }

            void createMenu() {
                Patient p = mine.getSelectedPatient();
                if (p != null) {
                    List<IConfigurationElement> list = Extensions.getExtensions("ch.elexis.Transporter"); //$NON-NLS-1$
                    for (final IConfigurationElement ic : list) {
                        String name = ic.getAttribute("name"); //$NON-NLS-1$
                        System.out.println(name);
                        String handler = ic.getAttribute("AcceptableTypes"); //$NON-NLS-1$
                        if (handler == null) {
                            continue;
                        }
                        if (handler.contains("ch.elexis.data.Patient") //$NON-NLS-1$
                                || (handler.contains("ch.elexis.data.*"))) { //$NON-NLS-1$
                            MenuItem it = new MenuItem(menu, SWT.NONE);
                            it.setText(ic.getAttribute("name")); //$NON-NLS-1$
                            it.addSelectionListener(new SelectionAdapter() {
                                @Override
                                public void widgetSelected(SelectionEvent e) {
                                    Patient pat = mine.getSelectedPatient();
                                    try {
                                        IDataSender sender = (IDataSender) ic
                                                .createExecutableExtension("ExporterClass"); //$NON-NLS-1$
                                        sender.store(pat);
                                        sender.finalizeExport();
                                        SWTHelper.showInfo(Messages.getString("PatientMenuPopulator.EMRExported"), //$NON-NLS-1$ 
                                                MessageFormat.format(
                                                        Messages.getString("PatientMenuPopulator.ExportEmrSuccess"), //$NON-NLS-1$
                                                        pat.getLabel()));
                                    } catch (CoreException e1) {
                                        ExHandler.handle(e1);
                                    } catch (XChangeException xx) {
                                        SWTHelper.showError(Messages.getString("PatientMenuPopulator.ErrorCaption"), //$NON-NLS-1$ 
                                                MessageFormat.format(
                                                        Messages.getString("PatientMenuPopulator.ExportEmrFailure"), //$NON-NLS-1$
                                                        pat.getLabel()));

                                    }
                                }
                            });

                        }
                    }
                }
            }
        };
    }
}