at.rc.tacos.client.ui.dialog.PatientSelectionDialog.java Source code

Java tutorial

Introduction

Here is the source code for at.rc.tacos.client.ui.dialog.PatientSelectionDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2004 - 2006 Mylar committers and others. 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
 *******************************************************************************/
package at.rc.tacos.client.ui.dialog;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.SelectionStatusDialog;

import at.rc.tacos.client.net.NetWrapper;
import at.rc.tacos.client.net.handler.SickPersonHandler;
import at.rc.tacos.client.ui.UiWrapper;
import at.rc.tacos.client.ui.jobs.FilterAddressJob;
import at.rc.tacos.client.ui.jobs.FilterPatientJob;
import at.rc.tacos.client.ui.providers.HandlerContentProvider;
import at.rc.tacos.client.ui.providers.SickPersonLabelProvider;
import at.rc.tacos.platform.model.SickPerson;
import at.rc.tacos.platform.net.Message;
import at.rc.tacos.platform.net.listeners.DataChangeListener;
import at.rc.tacos.platform.net.mina.MessageIoSession;

/**
 * Provides a selection dialog to choose a patient
 */
public class PatientSelectionDialog extends SelectionStatusDialog implements DataChangeListener<SickPerson> {

    private TableViewer viewer;
    private Text filterText;
    private String initValue;

    /**
     * The scheduler job to start the filter
     */
    private FilterPatientJob filterJob;

    private SickPersonHandler sickPersonHandler = (SickPersonHandler) NetWrapper.getHandler(SickPerson.class);

    /**
     * Defaul class constructor to set up a new patient select dialog
     * 
     * @param parent
     */
    public PatientSelectionDialog(String initValue, final Shell parent) {
        super(parent);
        setShellStyle(getShellStyle() | SWT.RESIZE);
        this.initValue = initValue;
        // listen to sick person updates
        NetWrapper.registerListener(this, SickPerson.class);
    }

    @Override
    public boolean close() {
        NetWrapper.removeListener(this, SickPerson.class);
        return super.close();
    }

    @Override
    protected void configureShell(final Shell shell) {
        shell.setText("Patienten Suche");
        super.configureShell(shell);
    }

    @Override
    protected Control createDialogArea(final Composite parent) {
        final Composite area = (Composite) super.createDialogArea(parent);

        final Label message = new Label(area, SWT.NONE);
        message.setText("&Bitte whlen Sie einen Patienten aus:\n");
        filterText = new Text(area, SWT.SINGLE | SWT.BORDER);
        filterText.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
        filterText.addModifyListener(new ModifyListener() {

            public void modifyText(final ModifyEvent e) {
                inputChanged();
            }
        });

        final Label matches = new Label(area, SWT.NONE);
        matches.setText("&Gefundene Patienten:");

        Table table = new Table(area, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION);
        viewer = new TableViewer(table);
        final Control control = this.viewer.getControl();
        final GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
        control.setLayoutData(gd);
        gd.widthHint = 400;
        gd.heightHint = 200;

        viewer.getTable().setLinesVisible(true);
        viewer.getTable().setHeaderVisible(true);
        viewer.setLabelProvider(new SickPersonLabelProvider());
        viewer.setContentProvider(new HandlerContentProvider());
        viewer.setInput(sickPersonHandler);
        viewer.addSelectionChangedListener(new ISelectionChangedListener() {

            public void selectionChanged(final SelectionChangedEvent event) {
                if (!event.getSelection().isEmpty()) {
                    IStructuredSelection selection = (IStructuredSelection) event.getSelection();
                    SickPerson person = (SickPerson) selection.getFirstElement();
                    String text = person.getLastName() + " ausgewhlt";
                    // update the status
                    Status status = new Status(IStatus.INFO, UiWrapper.PLUGIN_ID, text);
                    updateStatus(status);
                    return;
                }
                // nothing selected
                updateStatus(
                        new Status(IStatus.ERROR, UiWrapper.PLUGIN_ID, "Bitte whlen Sie einen Patienten aus"));
            }
        });

        // create the columns
        final TableColumn nameColumn = new TableColumn(table, SWT.NONE);
        nameColumn.setToolTipText("Nachname");
        nameColumn.setWidth(80);
        nameColumn.setText("Nachname");

        final TableColumn firstNameColumn = new TableColumn(table, SWT.NONE);
        firstNameColumn.setToolTipText("Vorname");
        firstNameColumn.setWidth(80);
        firstNameColumn.setText("Vorname");

        final TableColumn streetColumn = new TableColumn(table, SWT.NONE);
        streetColumn.setToolTipText("Strae");
        streetColumn.setWidth(100);
        streetColumn.setText("Strae");

        final TableColumn cityColumn = new TableColumn(table, SWT.NONE);
        cityColumn.setToolTipText("Stadt");
        cityColumn.setWidth(70);
        cityColumn.setText("Stadt");

        final TableColumn svnrColumn = new TableColumn(table, SWT.NONE);
        svnrColumn.setToolTipText("Sozialversicherungsnummer");
        svnrColumn.setWidth(60);
        svnrColumn.setText("SVNR");

        final TableColumn notesColumn = new TableColumn(table, SWT.NONE);
        notesColumn.setToolTipText("Notizen");
        notesColumn.setWidth(80);
        notesColumn.setText("Notizen");

        setStatusLineAboveButtons(true);

        // setup the initial value
        filterText.setText(initValue);

        return area;
    }

    @Override
    protected void computeResult() {
        setResult(((IStructuredSelection) viewer.getSelection()).toList());
    }

    @Override
    public void dataChanged(Message<SickPerson> message, MessageIoSession messageIoSession) {
        // update the viewer
        viewer.refresh();
        final Object first = viewer.getElementAt(0);
        if (first != null) {
            PatientSelectionDialog.this.viewer.setSelection(new StructuredSelection(first));
            updateStatus(new Status(IStatus.INFO, UiWrapper.PLUGIN_ID,
                    ((SickPerson) first).getLastName() + " ausgewhlt"));
        } else
            updateStatus(new Status(IStatus.ERROR, UiWrapper.PLUGIN_ID, "Bitte whlen Sie einen Patienten aus"));
    }

    // PRIVATE METHODS
    /**
     * Called when the input text of a filter is changes
     */
    private void inputChanged() {
        // get the entered text
        String filterValue = filterText.getText().toLowerCase();
        if (filterValue.trim().length() < 1) {
            updateStatus(new Status(Status.WARNING, UiWrapper.PLUGIN_ID,
                    "Bitte geben sie mindestens ein Zeichen des Nachnamens ein"));
            return;
        }
        updateStatus(new Status(IStatus.INFO, UiWrapper.PLUGIN_ID, "Bitte whlen Sie einen Patienten aus"));

        if (filterJob == null)
            filterJob = new FilterPatientJob(viewer);

        // check the state
        if (filterJob.getState() == Job.RUNNING) {
            System.out.println("Job is currently running");
            return;
        }

        // pass the entered text
        filterJob.setSearchString(filterValue);
        filterJob.schedule(FilterAddressJob.INTERVAL_KEY_PRESSED);
    }
}