ch.elexis.core.ui.views.BriefAuswahl.java Source code

Java tutorial

Introduction

Here is the source code for ch.elexis.core.ui.views.BriefAuswahl.java

Source

/*******************************************************************************
 * Copyright (c) 2006-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.core.ui.views;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.eclipse.core.commands.Command;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.NotEnabledException;
import org.eclipse.core.commands.NotHandledException;
import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.program.Program;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.ISaveablePart2;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.commands.ICommandService;
import org.eclipse.ui.forms.widgets.Form;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.part.ViewPart;

import ch.elexis.core.constants.Preferences;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.events.ElexisEvent;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.data.events.ElexisEventListener;
import ch.elexis.core.ui.UiDesk;
import ch.elexis.core.ui.actions.GlobalActions;
import ch.elexis.core.ui.actions.GlobalEventDispatcher;
import ch.elexis.core.ui.actions.IActivationListener;
import ch.elexis.core.ui.dialogs.DocumentSelectDialog;
import ch.elexis.core.ui.dialogs.SelectFallDialog;
import ch.elexis.core.ui.events.ElexisUiEventListenerImpl;
import ch.elexis.core.ui.icons.Images;
import ch.elexis.core.ui.locks.LockRequestingAction;
import ch.elexis.core.ui.services.LocalDocumentServiceHolder;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.core.ui.util.ViewMenus;
import ch.elexis.core.ui.util.viewers.CommonViewer;
import ch.elexis.core.ui.util.viewers.CommonViewer.DoubleClickListener;
import ch.elexis.core.ui.util.viewers.DefaultContentProvider;
import ch.elexis.core.ui.util.viewers.DefaultControlFieldProvider;
import ch.elexis.core.ui.util.viewers.DefaultLabelProvider;
import ch.elexis.core.ui.util.viewers.SimpleWidgetProvider;
import ch.elexis.core.ui.util.viewers.ViewerConfigurer;
import ch.elexis.data.Brief;
import ch.elexis.data.Fall;
import ch.elexis.data.Konsultation;
import ch.elexis.data.Kontakt;
import ch.elexis.data.Patient;
import ch.elexis.data.PersistentObject;
import ch.elexis.data.Query;
import ch.rgw.tools.ExHandler;
import ch.rgw.tools.TimeTool;

public class BriefAuswahl extends ViewPart
        implements ch.elexis.core.data.events.ElexisEventListener, IActivationListener, ISaveablePart2 {

    public final static String ID = "ch.elexis.BriefAuswahlView"; //$NON-NLS-1$
    private final FormToolkit tk;
    private Form form;
    private Action briefNeuAction, briefLadenAction, editNameAction, startLocalEditAction, endLocalEditAction,
            cancelLocalEditAction;
    private Action deleteAction;
    private ViewMenus menus;
    private ArrayList<sPage> pages = new ArrayList<sPage>();
    CTabFolder ctab;
    private ElexisEventListener updateListener = new ElexisUiEventListenerImpl(Brief.class,
            ElexisEvent.EVENT_RELOAD) {
        @Override
        public void runInUi(ElexisEvent ev) {
            relabel();
        }
    };

    // private ViewMenus menu;
    // private IAction delBriefAction;
    public BriefAuswahl() {
        tk = UiDesk.getToolkit();
    }

    @Override
    public void createPartControl(final Composite parent) {
        StringBuilder sb = new StringBuilder();
        sb.append(Messages.BriefAuswahlAllLetters).append(Brief.UNKNOWN).append(",") //$NON-NLS-1$
                .append(Brief.AUZ).append(",").append(Brief.RP).append(",").append(Brief.LABOR); //$NON-NLS-1$ //$NON-NLS-2$
        String cats = CoreHub.globalCfg.get(Preferences.DOC_CATEGORY, sb.toString());
        parent.setLayout(new GridLayout());

        form = tk.createForm(parent);
        form.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true));
        form.setBackground(parent.getBackground());

        // Grid layout with zero margins
        GridLayout slimLayout = new GridLayout();
        slimLayout.marginHeight = 0;
        slimLayout.marginWidth = 0;

        Composite body = form.getBody();
        body.setLayout(slimLayout);
        body.setBackground(parent.getBackground());

        ctab = new CTabFolder(body, SWT.BOTTOM);
        ctab.setLayout(slimLayout);
        ctab.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true));
        ctab.setBackground(parent.getBackground());
        makeActions();
        menus = new ViewMenus(getViewSite());

        for (String cat : cats.split(",")) { //$NON-NLS-1$
            CTabItem ct = new CTabItem(ctab, SWT.NONE);
            ct.setText(cat);
            sPage page = new sPage(ctab, cat);
            pages.add(page);
            if (CoreHub.localCfg.get(Preferences.P_TEXT_EDIT_LOCAL, false)) {
                menus.createViewerContextMenu(page.cv.getViewerWidget(), editNameAction, deleteAction,
                        startLocalEditAction, endLocalEditAction, cancelLocalEditAction);
            } else {
                menus.createViewerContextMenu(page.cv.getViewerWidget(), editNameAction, deleteAction);
            }
            ct.setData(page.cv);
            ct.setControl(page);
            page.cv.addDoubleClickListener(new DoubleClickListener() {
                @Override
                public void doubleClicked(PersistentObject obj, CommonViewer cv) {
                    briefLadenAction.run();
                }
            });
        }

        ctab.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(final SelectionEvent e) {
                relabel();
            }

        });

        GlobalEventDispatcher.addActivationListener(this, this);
        menus.createMenu(briefNeuAction, briefLadenAction, editNameAction, deleteAction);
        menus.createToolbar(briefNeuAction, briefLadenAction, deleteAction);
        ctab.setSelection(0);
        relabel();
    }

    @Override
    public void dispose() {
        ElexisEventDispatcher.getInstance().removeListeners(this);
        GlobalEventDispatcher.removeActivationListener(this, this);

        for (sPage page : pages) {
            page.getCommonViewer().getConfigurer().getContentProvider().stopListening();
        }
    }

    @Override
    public void setFocus() {

    }

    public void relabel() {
        UiDesk.asyncExec(new Runnable() {
            public void run() {
                Patient pat = (Patient) ElexisEventDispatcher.getSelected(Patient.class);
                if (pat == null) {
                    form.setText(Messages.BriefAuswahlNoPatientSelected); //$NON-NLS-1$
                } else {
                    form.setText(pat.getLabel());
                    CTabItem sel = ctab.getSelection();
                    if (sel != null) {
                        CommonViewer cv = (CommonViewer) sel.getData();
                        cv.notify(CommonViewer.Message.update);
                    }
                }
            }
        });

    }

    class sPage extends Composite {
        private TableViewer tableViewer;
        private LetterViewerComparator comparator;
        private final CommonViewer cv;
        private final ViewerConfigurer vc;

        public CommonViewer getCommonViewer() {
            return cv;
        }

        sPage(final Composite parent, final String cat) {
            super(parent, SWT.NONE);
            setLayout(new GridLayout());
            cv = new CommonViewer();
            vc = new ViewerConfigurer(
                    new DefaultContentProvider(cv, Brief.class, new String[] { Brief.FLD_DATE }, true) {

                        @Override
                        public Object[] getElements(final Object inputElement) {
                            Patient actPat = (Patient) ElexisEventDispatcher.getSelected(Patient.class);
                            if (actPat != null) {
                                Query<Brief> qbe = new Query<Brief>(Brief.class);
                                qbe.add(Brief.FLD_PATIENT_ID, Query.EQUALS, actPat.getId());
                                if (cat.equals(Messages.BriefAuswahlAllLetters2)) { //$NON-NLS-1$
                                    qbe.add(Brief.FLD_TYPE, Query.NOT_EQUAL, Brief.TEMPLATE);
                                } else {
                                    qbe.add(Brief.FLD_TYPE, Query.EQUALS, cat);
                                }
                                cv.getConfigurer().getControlFieldProvider().setQuery(qbe);

                                List<Brief> list = qbe.execute();
                                return list.toArray();
                            } else {
                                return new Brief[0];
                            }
                        }

                    }, new DefaultLabelProvider(),
                    new DefaultControlFieldProvider(cv, new String[] { "Betreff=Titel" //$NON-NLS-1$
                    }), new ViewerConfigurer.DefaultButtonProvider(), new SimpleWidgetProvider(
                            SimpleWidgetProvider.TYPE_TABLE, SWT.V_SCROLL | SWT.FULL_SELECTION, cv));
            cv.create(vc, this, SWT.NONE, getViewSite());

            tableViewer = (TableViewer) cv.getViewerWidget();
            tableViewer.getTable().setHeaderVisible(true);
            createColumns();
            comparator = new LetterViewerComparator();
            tableViewer.setComparator(comparator);
            if (CoreHub.localCfg.get(Preferences.P_TEXT_RENAME_WITH_F2, false)) {
                tableViewer.getTable().addKeyListener(new KeyListener() {
                    @Override
                    public void keyPressed(KeyEvent e) {
                    }

                    @Override
                    public void keyReleased(KeyEvent e) {
                        if (e.keyCode == SWT.F2) {
                            editNameAction.run();
                        }
                    }
                });
            }

            vc.getContentProvider().startListening();
            Button bLoad = tk.createButton(this, Messages.BriefAuswahlLoadButtonText, SWT.PUSH); //$NON-NLS-1$
            bLoad.addSelectionListener(new SelectionAdapter() {
                @Override
                public void widgetSelected(final SelectionEvent e) {
                    briefLadenAction.run();
                }

            });
            bLoad.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        }

        // create the columns for the table
        private void createColumns() {
            // first column - date
            TableViewerColumn col = new TableViewerColumn(tableViewer, SWT.NONE);
            col.getColumn().setText(Messages.BriefAuswahlColumnDate);
            col.getColumn().setWidth(100);
            col.getColumn().addSelectionListener(getSelectionAdapter(col.getColumn(), 0));
            col.setLabelProvider(new ColumnLabelProvider() {
                @Override
                public String getText(Object element) {
                    Brief b = (Brief) element;
                    return b.getDatum();
                }
            });

            // second column - title
            col = new TableViewerColumn(tableViewer, SWT.NONE);
            col.getColumn().setText(Messages.BriefAuswahlColumnTitle);
            col.getColumn().setWidth(300);
            col.getColumn().addSelectionListener(getSelectionAdapter(col.getColumn(), 1));
            col.setLabelProvider(new ColumnLabelProvider() {
                @Override
                public String getText(Object element) {
                    Brief b = (Brief) element;
                    return b.getBetreff();
                }

                @Override
                public Image getImage(Object element) {
                    if (LocalDocumentServiceHolder.getService().isPresent()) {
                        if (LocalDocumentServiceHolder.getService().get().contains(element)) {
                            return Images.IMG_EDIT.getImage();
                        }
                    }
                    return super.getImage(element);
                }
            });
        }

        private SelectionAdapter getSelectionAdapter(final TableColumn column, final int index) {
            SelectionAdapter selectionAdapter = new SelectionAdapter() {
                @Override
                public void widgetSelected(SelectionEvent e) {
                    comparator.setColumn(index);
                    tableViewer.getTable().setSortDirection(comparator.getDirection());
                    tableViewer.getTable().setSortColumn(column);
                    tableViewer.refresh();
                }
            };
            return selectionAdapter;
        }

        class LetterViewerComparator extends ViewerComparator {
            private int propertyIndex;
            private boolean direction = true;
            private TimeTool time1;
            private TimeTool time2;

            public LetterViewerComparator() {
                this.propertyIndex = 0;
                time1 = new TimeTool();
                time2 = new TimeTool();
            }

            /**
             * for sort direction
             * 
             * @return SWT.DOWN or SWT.UP
             */
            public int getDirection() {
                return direction ? SWT.DOWN : SWT.UP;
            }

            public void setColumn(int column) {
                if (column == this.propertyIndex) {
                    // Same column as last sort; toggle the direction
                    direction = !direction;
                } else {
                    // New column; do an ascending sort
                    this.propertyIndex = column;
                    direction = true;
                }
            }

            @Override
            public int compare(Viewer viewer, Object e1, Object e2) {
                if (e1 instanceof Brief && e2 instanceof Brief) {
                    Brief b1 = (Brief) e1;
                    Brief b2 = (Brief) e2;
                    int rc = 0;
                    switch (propertyIndex) {
                    case 0:
                        time1.set((b1).getDatum());
                        time2.set((b2).getDatum());
                        rc = time1.compareTo(time2);
                        break;
                    case 1:
                        rc = b1.getBetreff().compareTo(b2.getBetreff());
                        break;
                    default:
                        rc = 0;
                    }
                    // If descending order, flip the direction
                    if (direction) {
                        rc = -rc;
                    }
                    return rc;
                }
                return 0;
            }
        }
    }

    private void makeActions() {
        briefNeuAction = new Action(Messages.BriefAuswahlNewButtonText) { //$NON-NLS-1$
            @Override
            public void run() {
                Patient pat = ElexisEventDispatcher.getSelectedPatient();
                if (pat == null) {
                    MessageDialog.openInformation(UiDesk.getTopShell(), Messages.BriefAuswahlNoPatientSelected,
                            Messages.BriefAuswahlNoPatientSelected);
                    return;
                }

                Fall selectedFall = (Fall) ElexisEventDispatcher.getSelected(Fall.class);
                if (selectedFall == null) {
                    SelectFallDialog sfd = new SelectFallDialog(UiDesk.getTopShell());
                    sfd.open();
                    if (sfd.result != null) {
                        ElexisEventDispatcher.fireSelectionEvent(sfd.result);
                    } else {
                        MessageDialog.openInformation(UiDesk.getTopShell(), Messages.TextView_NoCaseSelected, //$NON-NLS-1$
                                Messages.TextView_SaveNotPossibleNoCaseAndKonsSelected); //$NON-NLS-1$
                        return;
                    }
                }

                Konsultation selectedKonsultation = (Konsultation) ElexisEventDispatcher
                        .getSelected(Konsultation.class);
                if (selectedKonsultation == null) {
                    Konsultation k = pat.getLetzteKons(false);
                    if (k == null) {
                        k = ((Fall) ElexisEventDispatcher.getSelected(Fall.class)).neueKonsultation();
                        k.setMandant(CoreHub.actMandant);
                    }
                    ElexisEventDispatcher.fireSelectionEvent(k);
                }

                TextView tv = null;
                try {
                    DocumentSelectDialog bs = new DocumentSelectDialog(getViewSite().getShell(), CoreHub.actMandant,
                            DocumentSelectDialog.TYPE_CREATE_DOC_WITH_TEMPLATE);
                    if (bs.open() == Dialog.OK) {
                        tv = (TextView) getSite().getPage().showView(TextView.ID);
                        // trick: just supply a dummy address for creating the doc
                        Kontakt address = null;
                        if (DocumentSelectDialog.getDontAskForAddresseeForThisTemplate(bs.getSelectedDocument()))
                            address = Kontakt.load("-1"); //$NON-NLS-1$
                        tv.createDocument(bs.getSelectedDocument(), bs.getBetreff(), address);
                        tv.setName();
                        CTabItem sel = ctab.getSelection();
                        if (sel != null) {
                            CommonViewer cv = (CommonViewer) sel.getData();
                            cv.notify(CommonViewer.Message.update_keeplabels);
                        }

                    }
                } catch (Exception ex) {
                    ExHandler.handle(ex);
                }
            }
        };

        briefLadenAction = new Action(Messages.BriefAuswahlOpenButtonText) { //$NON-NLS-1$
            @Override
            public void run() {
                try {
                    CTabItem sel = ctab.getSelection();
                    if (sel != null) {
                        CommonViewer cv = (CommonViewer) sel.getData();
                        Object[] o = cv.getSelection();
                        if ((o != null) && (o.length > 0)) {
                            Brief brief = (Brief) o[0];
                            if (CoreHub.localCfg.get(Preferences.P_TEXT_EDIT_LOCAL, false)) {
                                startLocalEditAction.run();
                            } else {
                                TextView tv = (TextView) getViewSite().getPage().showView(TextView.ID);
                                if (brief.getMimeType().equalsIgnoreCase("pdf")) { //$NON-NLS-1$
                                    try {
                                        File temp = File.createTempFile("letter_", ".pdf"); //$NON-NLS-1$ //$NON-NLS-2$
                                        temp.deleteOnExit();
                                        FileOutputStream fos = new FileOutputStream(temp);

                                        fos.write(brief.loadBinary());
                                        fos.close();
                                        Program.launch(temp.getAbsolutePath());
                                    } catch (IOException e) {
                                        SWTHelper.alert(Messages.BriefAuswahlErrorHeading, //$NON-NLS-1$
                                                Messages.BriefAuswahlCouldNotLoadText); //$NON-NLS-1$
                                    }
                                } else if (tv.openDocument(brief) == false) {
                                    SWTHelper.alert(Messages.BriefAuswahlErrorHeading, //$NON-NLS-1$
                                            Messages.BriefAuswahlCouldNotLoadText); //$NON-NLS-1$
                                }
                            }
                        } else {
                            TextView tv = (TextView) getViewSite().getPage().showView(TextView.ID);
                            tv.createDocument(null, null);
                        }
                        cv.notify(CommonViewer.Message.update);
                    }
                } catch (PartInitException e) {
                    ExHandler.handle(e);
                }

            }
        };
        deleteAction = new LockRequestingAction<Brief>(Messages.BriefAuswahlDeleteButtonText) { //$NON-NLS-1$
            @Override
            public void doRun(Brief brief) {
                if (brief != null && SWTHelper.askYesNo(Messages.BriefAuswahlDeleteConfirmHeading, //$NON-NLS-1$
                        Messages.BriefAuswahlDeleteConfirmText)) {
                    brief.delete();
                    CTabItem sel = ctab.getSelection();
                    CommonViewer cv = (CommonViewer) sel.getData();
                    cv.notify(CommonViewer.Message.update);
                }
            }

            @Override
            public Brief getTargetedObject() {
                CTabItem sel = ctab.getSelection();
                if ((sel != null)) { //$NON-NLS-1$
                    CommonViewer cv = (CommonViewer) sel.getData();
                    Object[] o = cv.getSelection();
                    if ((o != null) && (o.length > 0)) {
                        if (o[0] instanceof Brief) {
                            return (Brief) o[0];
                        }
                    }
                }
                return null;
            }
        };
        editNameAction = new LockRequestingAction<Brief>(Messages.BriefAuswahlRenameButtonText) { //$NON-NLS-1$
            @Override
            public void doRun(Brief brief) {
                if (brief != null) {
                    InputDialog id = new InputDialog(getViewSite().getShell(),
                            Messages.BriefAuswahlNewSubjectHeading, //$NON-NLS-1$
                            Messages.BriefAuswahlNewSubjectText, //$NON-NLS-1$
                            brief.getBetreff(), null);
                    if (id.open() == Dialog.OK) {
                        brief.setBetreff(id.getValue());
                    }
                    CTabItem sel = ctab.getSelection();
                    CommonViewer cv = (CommonViewer) sel.getData();
                    cv.notify(CommonViewer.Message.update);
                }
            }

            @Override
            public Brief getTargetedObject() {
                CTabItem sel = ctab.getSelection();
                if (sel != null) { //$NON-NLS-1$
                    CommonViewer cv = (CommonViewer) sel.getData();
                    Object[] o = cv.getSelection();
                    if ((o != null) && (o.length > 0)) {
                        if (o[0] instanceof Brief) {
                            return (Brief) o[0];
                        }
                    }
                }
                return null;
            }
        };
        startLocalEditAction = new Action() {
            @Override
            public ImageDescriptor getImageDescriptor() {
                return Images.IMG_EDIT.getImageDescriptor();
            }

            @Override
            public String getText() {
                return Messages.BriefAuswahl_actionlocaledittext;
            }

            @Override
            public void run() {
                Brief brief = getSelectedBrief();
                if (brief != null) {
                    ICommandService commandService = (ICommandService) PlatformUI.getWorkbench()
                            .getService(ICommandService.class);
                    Command command = commandService.getCommand("ch.elexis.core.ui.command.startEditLocalDocument"); //$NON-NLS-1$
                    PlatformUI.getWorkbench().getService(IEclipseContext.class)
                            .set(command.getId().concat(".selection"), new StructuredSelection(brief));
                    try {
                        command.executeWithChecks(new ExecutionEvent(command, Collections.EMPTY_MAP, this, null));
                    } catch (ExecutionException | NotDefinedException | NotEnabledException
                            | NotHandledException e) {
                        MessageDialog.openError(getSite().getShell(), Messages.BriefAuswahl_errorttile,
                                Messages.BriefAuswahl_erroreditmessage);
                    }
                    refreshSelectedViewer();
                }
            }
        };
        endLocalEditAction = new Action() {
            @Override
            public ImageDescriptor getImageDescriptor() {
                return Images.IMG_EDIT_DONE.getImageDescriptor();
            }

            @Override
            public String getText() {
                return Messages.BriefAuswahl_actionlocaleditstopmessage;
            }

            @Override
            public void run() {
                Brief brief = getSelectedBrief();
                if (brief != null) {
                    ICommandService commandService = (ICommandService) PlatformUI.getWorkbench()
                            .getService(ICommandService.class);
                    Command command = commandService.getCommand("ch.elexis.core.ui.command.endLocalDocument"); //$NON-NLS-1$

                    PlatformUI.getWorkbench().getService(IEclipseContext.class)
                            .set(command.getId().concat(".selection"), new StructuredSelection(brief));
                    try {
                        command.executeWithChecks(new ExecutionEvent(command, Collections.EMPTY_MAP, this, null));
                    } catch (ExecutionException | NotDefinedException | NotEnabledException
                            | NotHandledException e) {
                        MessageDialog.openError(getSite().getShell(), Messages.BriefAuswahl_errortitle,
                                Messages.BriefAuswahl_errorlocaleditendmessage);
                    }
                }
                refreshSelectedViewer();
            }
        };
        cancelLocalEditAction = new Action() {
            @Override
            public ImageDescriptor getImageDescriptor() {
                return Images.IMG_EDIT_ABORT.getImageDescriptor();
            }

            @Override
            public String getText() {
                return Messages.BriefAuswahl_actionlocaleditabortmessage;
            }

            @Override
            public void run() {
                Brief brief = getSelectedBrief();
                if (brief != null) {
                    ICommandService commandService = (ICommandService) PlatformUI.getWorkbench()
                            .getService(ICommandService.class);
                    Command command = commandService.getCommand("ch.elexis.core.ui.command.abortLocalDocument"); //$NON-NLS-1$

                    PlatformUI.getWorkbench().getService(IEclipseContext.class)
                            .set(command.getId().concat(".selection"), new StructuredSelection(brief));
                    try {
                        command.executeWithChecks(new ExecutionEvent(command, Collections.EMPTY_MAP, this, null));
                    } catch (ExecutionException | NotDefinedException | NotEnabledException
                            | NotHandledException e) {
                        MessageDialog.openError(getSite().getShell(), Messages.BriefAuswahl_errortitle,
                                Messages.BriefAuswahl_errorlocaleditabortmessage);
                    }
                }
                refreshSelectedViewer();
            }
        };
        /*
         * importAction=new Action("Importieren..."){ public void run(){
         * 
         * } };
         */
        briefLadenAction.setImageDescriptor(Images.IMG_DOCUMENT_TEXT.getImageDescriptor());
        briefLadenAction.setToolTipText(Messages.BriefAuswahlOpenLetterForEdit); //$NON-NLS-1$
        briefNeuAction.setImageDescriptor(Images.IMG_DOCUMENT_ADD.getImageDescriptor());
        briefNeuAction.setToolTipText(Messages.BriefAuswahlCreateNewDocument); //$NON-NLS-1$
        editNameAction.setImageDescriptor(Images.IMG_DOCUMENT_WRITE.getImageDescriptor());
        editNameAction.setToolTipText(Messages.BriefAuswahlRenameDocument); //$NON-NLS-1$
        deleteAction.setImageDescriptor(Images.IMG_DOCUMENT_REMOVE.getImageDescriptor());
        deleteAction.setToolTipText(Messages.BriefAuswahlDeleteDocument); //$NON-NLS-1$
    }

    public Brief getSelectedBrief() {
        CTabItem sel = ctab.getSelection();
        if ((sel != null)) {
            CommonViewer cv = (CommonViewer) sel.getData();
            Object[] o = cv.getSelection();
            if ((o != null) && (o.length > 0)) {
                if (o[0] instanceof Brief) {
                    return (Brief) o[0];
                }
            }
        }
        return null;
    }

    public void refreshSelectedViewer() {
        CTabItem sel = ctab.getSelection();
        if ((sel != null)) {
            CommonViewer cv = (CommonViewer) sel.getData();
            cv.notify(CommonViewer.Message.update);
        }
    }

    public void activation(final boolean mode) {
        // TODO Auto-generated method stub

    }

    public void visible(final boolean mode) {
        if (mode == true) {
            ElexisEventDispatcher.getInstance().addListeners(this);
            ElexisEventDispatcher.getInstance().addListeners(updateListener);
            relabel();
        } else {
            ElexisEventDispatcher.getInstance().removeListeners(this);
            ElexisEventDispatcher.getInstance().removeListeners(updateListener);
        }
    }

    /*
     * Die folgenden 6 Methoden implementieren das Interface ISaveablePart2 Wir bentigen das
     * Interface nur, um das Schliessen einer View zu verhindern, wenn die Perspektive fixiert ist.
     * Gibt es da keine einfachere Methode?
     */
    public int promptToSaveOnClose() {
        return GlobalActions.fixLayoutAction.isChecked() ? ISaveablePart2.CANCEL : ISaveablePart2.NO;
    }

    public void doSave(final IProgressMonitor monitor) { /* leer */
    }

    public void doSaveAs() { /* leer */
    }

    public boolean isDirty() {
        return true;
    }

    public boolean isSaveAsAllowed() {
        return false;
    }

    public boolean isSaveOnCloseNeeded() {
        return true;
    }

    public void catchElexisEvent(ElexisEvent ev) {
        relabel();
    }

    private static ElexisEvent template = new ElexisEvent(null, Patient.class,
            ElexisEvent.EVENT_SELECTED | ElexisEvent.EVENT_DESELECTED);

    public ElexisEvent getElexisEventFilter() {
        return template;
    }
}