ch.elexis.core.ui.dialogs.KontaktErfassenDialog.java Source code

Java tutorial

Introduction

Here is the source code for ch.elexis.core.ui.dialogs.KontaktErfassenDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2007-2010, medshare 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:
 *    M. Imhof - initial implementation
 *    G. Weirich - added Anschrift
 * 
 *******************************************************************************/
package ch.elexis.core.ui.dialogs;

import java.util.List;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
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.Text;
import org.eclipse.ui.forms.events.HyperlinkAdapter;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.widgets.Hyperlink;

import ch.elexis.admin.AccessControlDefaults;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.ui.UiDesk;
import ch.elexis.core.ui.icons.ImageSize;
import ch.elexis.core.ui.icons.Images;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.data.Anwender;
import ch.elexis.data.Kontakt;
import ch.elexis.data.Labor;
import ch.elexis.data.Mandant;
import ch.elexis.data.Organisation;
import ch.elexis.data.Patient;
import ch.elexis.data.Person;
import ch.elexis.data.Query;
import ch.rgw.tools.ExHandler;
import ch.rgw.tools.StringTool;
import ch.rgw.tools.TimeTool;
import ch.rgw.tools.TimeTool.TimeFormatException;

public class KontaktErfassenDialog extends TitleAreaDialog {
    private static final int KED_NAME = 0;
    private static final int KED_FIRSTNAME = 1;
    private static final int KED_ADDITIONAL = 7;

    private Button bOrganisation, bLabor, bPerson, bPatient, bAnwender, bMandant;

    Kontakt newKontakt = null;

    String[] fld;
    Text tName, tVorname, tZusatz, tGebDat, tStrasse, tPlz, tOrt, tTel, tFax, tEmail;
    Combo cbSex;
    Label lName, lVorname, lZusatz;
    Hyperlink hlAnschrift;

    public KontaktErfassenDialog(final Shell parent, final String[] fields) {
        super(parent);
        fld = fields;
    }

    @Override
    protected Control createDialogArea(final Composite parent) {
        Composite typeComp = new Composite(parent, SWT.NONE);
        typeComp.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true));
        typeComp.setLayout(new GridLayout(1, false));

        Composite cTypes = UiDesk.getToolkit().createComposite(typeComp, SWT.BORDER);
        bOrganisation = UiDesk.getToolkit().createButton(cTypes, Messages.KontaktErfassenDialog_organization, //$NON-NLS-1$
                SWT.CHECK);
        bOrganisation.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                bOrganisationChanged(bOrganisation.getSelection());
            }
        });
        bLabor = UiDesk.getToolkit().createButton(cTypes, Messages.KontaktErfassenDialog_labor, SWT.CHECK); //$NON-NLS-1$
        bLabor.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                bLaborChanged(bLabor.getSelection());
            }
        });
        bPerson = UiDesk.getToolkit().createButton(cTypes, Messages.KontaktErfassenDialog_person, SWT.CHECK); //$NON-NLS-1$
        bPerson.setSelection(true);
        bPerson.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                bPersonChanged(bPerson.getSelection());
            }
        });
        bPatient = UiDesk.getToolkit().createButton(cTypes, Messages.KontaktErfassenDialog_patient, SWT.CHECK); //$NON-NLS-1$
        bPatient.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                bPatientChanged(bPatient.getSelection());
            }
        });
        if (fld.length > KontaktSelektor.HINT_PATIENT) {
            if (!StringTool.isNothing(fld[KontaktSelektor.HINT_PATIENT])) {
                bPatient.setSelection(true);
            }
        }
        bAnwender = UiDesk.getToolkit().createButton(cTypes, Messages.KontaktErfassenDialog_user, SWT.CHECK); //$NON-NLS-1$
        bAnwender.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                bAnwenderChanged(bAnwender.getSelection());
            }
        });
        bMandant = UiDesk.getToolkit().createButton(cTypes, Messages.KontaktErfassenDialog_mandant, SWT.CHECK); //$NON-NLS-1$
        bMandant.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                bMandantChanged(bMandant.getSelection());
            }
        });
        // Not everybody may create users and mandators
        if (!CoreHub.acl.request(AccessControlDefaults.ACL_USERS)) {
            bMandant.setEnabled(false);
            bAnwender.setEnabled(false);
        }
        cTypes.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));

        cTypes.setLayout(new FillLayout());

        Composite ret = new Composite(parent, SWT.NONE);
        ret.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true));
        ret.setLayout(new GridLayout(2, false));

        lName = new Label(ret, SWT.NONE);
        lName.setText(Messages.KontaktErfassenDialog_name); //$NON-NLS-1$
        tName = new Text(ret, SWT.BORDER);
        tName.setText(fld[KontaktSelektor.HINT_NAME]);
        tName.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        tName.setTextLimit(80);

        lVorname = new Label(ret, SWT.NONE);
        lVorname.setText(Messages.KontaktErfassenDialog_firstName); //$NON-NLS-1$
        tVorname = new Text(ret, SWT.BORDER);
        tVorname.setText(fld[KontaktSelektor.HINT_FIRSTNAME] == null ? "" : fld[KontaktSelektor.HINT_FIRSTNAME]); //$NON-NLS-1$
        tVorname.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        tVorname.setTextLimit(80);

        lZusatz = new Label(ret, SWT.NONE);
        lZusatz.setText(Messages.KontaktErfassenDialog_zusatz); //$NON-NLS-1$
        tZusatz = new Text(ret, SWT.BORDER);
        tZusatz.setText(fld.length > KontaktSelektor.HINT_ADD ? fld[KontaktSelektor.HINT_ADD] : ""); //$NON-NLS-1$
        tZusatz.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));

        new Label(ret, SWT.NONE).setText(Messages.PatientErfassenDialog_sex);//$NON-NLS-1$
        cbSex = new Combo(ret, SWT.SINGLE);
        cbSex.setItems(new String[] { Messages.KontaktErfassenDialog_male, Messages.KontaktErfassenDialog_female }); //$NON-NLS-1$ //$NON-NLS-2$

        if (fld.length <= KontaktSelektor.HINT_SEX || fld[KontaktSelektor.HINT_SEX].length() == 0) {
            if (StringTool.isNothing(fld[KontaktSelektor.HINT_FIRSTNAME])) {
                cbSex.select(0);
            } else {
                cbSex.select(StringTool.isFemale(fld[KontaktSelektor.HINT_FIRSTNAME]) ? 1 : 0);
            }
        } else {
            cbSex.select(fld[KontaktSelektor.HINT_SEX].equals(Person.MALE) ? 0 : 1);
        }

        new Label(ret, SWT.NONE).setText(Messages.KontaktErfassenDialog_birthDate); //$NON-NLS-1$
        tGebDat = new Text(ret, SWT.BORDER);
        tGebDat.setText(fld[KontaktSelektor.HINT_BIRTHDATE] == null ? "" : fld[KontaktSelektor.HINT_BIRTHDATE]); //$NON-NLS-1$
        tGebDat.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        tGebDat.setTextLimit(8);

        new Label(ret, SWT.NONE).setText(Messages.PatientErfassenDialog_street); //$NON-NLS-1$
        tStrasse = new Text(ret, SWT.BORDER);
        tStrasse.setText(fld.length > KontaktSelektor.HINT_STREET ? fld[KontaktSelektor.HINT_STREET] : ""); //$NON-NLS-1$
        tStrasse.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        tStrasse.setTextLimit(80);

        new Label(ret, SWT.NONE).setText(Messages.PatientErfassenDialog_zip); //$NON-NLS-1$
        tPlz = new Text(ret, SWT.BORDER);
        tPlz.setText(fld.length > KontaktSelektor.HINT_ZIP ? fld[KontaktSelektor.HINT_ZIP] : ""); //$NON-NLS-1$
        tPlz.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        tPlz.setTextLimit(6);

        new Label(ret, SWT.NONE).setText(Messages.PatientErfassenDialog_city); //$NON-NLS-1$
        tOrt = new Text(ret, SWT.BORDER);
        tOrt.setText(fld.length > KontaktSelektor.HINT_PLACE ? fld[KontaktSelektor.HINT_PLACE] : ""); //$NON-NLS-1$
        tOrt.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        tOrt.setTextLimit(50);

        new Label(ret, SWT.NONE).setText(Messages.PatientErfassenDialog_phone); //$NON-NLS-1$
        tTel = new Text(ret, SWT.BORDER);
        tTel.setText(fld.length > 6 ? fld[6] : ""); //$NON-NLS-1$
        tTel.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        tTel.setTextLimit(30);

        new Label(ret, SWT.NONE).setText(Messages.KontaktErfassenDialog_fax); //$NON-NLS-1$
        tFax = new Text(ret, SWT.BORDER);
        tFax.setText(fld.length > 8 ? fld[8] : ""); //$NON-NLS-1$
        tFax.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        tFax.setTextLimit(30);

        new Label(ret, SWT.NONE).setText(Messages.KontaktErfassenDialog_email); //$NON-NLS-1$
        tEmail = new Text(ret, SWT.BORDER);
        tEmail.setText(fld.length > 9 ? fld[9] : ""); //$NON-NLS-1$
        tEmail.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        tEmail.setTextLimit(80);
        new Label(ret, SWT.NONE).setText(Messages.KontaktErfassenDialog_postanschrift); //$NON-NLS-1$
        hlAnschrift = UiDesk.getToolkit().createHyperlink(ret, Messages.KontaktErfassenDialog_postalempty,
                SWT.NONE); //$NON-NLS-1$
        hlAnschrift.addHyperlinkListener(new HyperlinkAdapter() {

            @Override
            public void linkActivated(HyperlinkEvent e) {
                createKontakt();
                AnschriftEingabeDialog aed = new AnschriftEingabeDialog(getShell(), newKontakt);
                aed.create();
                SWTHelper.center(getShell(), aed.getShell());
                aed.open();
                hlAnschrift.setText(newKontakt.getPostAnschrift(false));
            }

        });
        hlAnschrift.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false));
        return ret;
    }

    @Override
    public void create() {
        super.create();
        setMessage(Messages.KontaktErfassenDialog_message); //$NON-NLS-1$
        setTitle(Messages.KontaktErfassenDialog_subTitle); //$NON-NLS-1$
        getShell().setText(Messages.KontaktErfassenDialog_title); //$NON-NLS-1$
        setTitleImage(Images.IMG_LOGO.getImage(ImageSize._75x66_TitleDialogIconSize));
    }

    protected void bOrganisationChanged(boolean isSelected) {
        bOrganisation.setSelection(isSelected);
        if (isSelected) {
            bPersonChanged(false);
            lName.setText(Messages.KontaktErfassenDialog_bezeichnung);//$NON-NLS-1$
            lVorname.setText(Messages.KontaktErfassenDialog_zusatz); //$NON-NLS-1$
            lZusatz.setText(Messages.KontaktErfassenDialog_ansprechperson); //$NON-NLS-1$
            cbSex.setEnabled(false);
            lName.getParent().layout();
        } else {
            bLaborChanged(false);
        }
    }

    protected void bLaborChanged(boolean isSelected) {
        bLabor.setSelection(isSelected);
        if (isSelected) {
            bOrganisationChanged(true);
            lZusatz.setText(Messages.KontaktErfassenDialog_laborleiter); //$NON-NLS-1$
            lName.getParent().layout();
        }
    }

    protected void bPersonChanged(boolean isSelected) {
        bPerson.setSelection(isSelected);
        if (isSelected) {
            bOrganisationChanged(false);
            lName.setText(Messages.KontaktErfassenDialog_name);//$NON-NLS-1$
            lVorname.setText(Messages.KontaktErfassenDialog_firstName); //$NON-NLS-1$
            lZusatz.setText(Messages.KontaktErfassenDialog_zusatz); //$NON-NLS-1$
            cbSex.setEnabled(true);
            lName.getParent().layout();
        } else {
            bAnwenderChanged(false);
            bMandantChanged(false);
            bPatientChanged(false);
        }
    }

    protected void bAnwenderChanged(boolean isSelected) {
        bAnwender.setSelection(isSelected);
        if (isSelected) {
            bPatientChanged(false);
            bPersonChanged(true);
        } else {
            bMandantChanged(false);
        }
    }

    protected void bMandantChanged(boolean isSelected) {
        bMandant.setSelection(isSelected);
        if (isSelected) {
            bAnwenderChanged(true);
        }
    }

    protected void bPatientChanged(boolean isSelected) {
        bPatient.setSelection(isSelected);
        if (isSelected) {
            bAnwenderChanged(false);
            bPersonChanged(true);
        }
    }

    private void createKontakt() {
        String[] ret = new String[8];
        ret[0] = tName.getText();
        ret[1] = tVorname.getText();
        int idx = cbSex.getSelectionIndex();
        if (idx == -1) {
            SWTHelper.showError(Messages.KontaktErfassenDialog_geschlechtFehlt_title, //$NON-NLS-1$
                    Messages.KontaktErfassenDialog_geschlechtFehlt_msg); //$NON-NLS-1$
            return;
        }
        ret[2] = cbSex.getItem(idx);
        ret[3] = tGebDat.getText();
        try {
            if (!StringTool.isNothing(ret[3])) {
                new TimeTool(ret[3], true);
            }
            ret[4] = tStrasse.getText();
            ret[5] = tPlz.getText();
            ret[6] = tOrt.getText();
            ret[7] = tTel.getText();
            if (newKontakt == null) {
                Query<Kontakt> qbe = new Query<Kontakt>(Kontakt.class);
                qbe.add("Bezeichnung1", "=", ret[0]); //$NON-NLS-1$ //$NON-NLS-2$
                qbe.add("Bezeichnung2", "=", ret[1]); //$NON-NLS-1$ //$NON-NLS-2$
                List<Kontakt> list = qbe.execute();
                if ((list != null) && (!list.isEmpty())) {
                    Kontakt k = list.get(0);
                    if (bOrganisation.getSelection() && k.istOrganisation()) {
                        if (bLabor.getSelection()) {
                            k.set("istOrganisation", "1"); //$NON-NLS-1$ //$NON-NLS-2$
                        }
                        if (MessageDialog.openConfirm(getShell(),
                                Messages.KontaktErfassenDialog_organisationExistiert_title, //$NON-NLS-1$
                                Messages.KontaktErfassenDialog_organisationExistiert_msg) == false) { //$NON-NLS-1$
                            super.okPressed();
                            return;
                        }
                    }
                    if (k.istPerson()) {
                        if (bAnwender.getSelection()) {
                            k.set("istAnwender", "1"); //$NON-NLS-1$ //$NON-NLS-2$
                        }
                        if (bMandant.getSelection()) {
                            k.set("istMandant", "1"); //$NON-NLS-1$ //$NON-NLS-2$
                        }
                        if (bPatient.getSelection()) {
                            k.set("istPatient", "1"); //$NON-NLS-1$ //$NON-NLS-2$
                        }
                        if (MessageDialog.openConfirm(getShell(),
                                Messages.KontaktErfassenDialog_personExisitiert_title, //$NON-NLS-1$
                                Messages.KontaktErfassenDialog_personExisitiert_msg) == false) { //$NON-NLS-1$
                            super.okPressed();
                            return;
                        }
                    }
                }

                /**
                 * Neuer Kontakt erstellen. Reihenfolge der Abfrage ist Wichtig, da ein Anwender
                 * auch ein Mandant sein kann. "Organisation", - "Labor", "Person" - "Patient" -
                 * "Anwender" - "Mandant"
                 */
                if (bMandant.getSelection()) {
                    newKontakt = new Mandant(ret[0], ret[1], ret[3], ret[2]);
                    newKontakt.set("Zusatz", tZusatz.getText()); //$NON-NLS-1$
                } else if (bAnwender.getSelection()) {
                    newKontakt = new Anwender(ret[0], ret[1], ret[3], ret[2]);
                    newKontakt.set("Zusatz", tZusatz.getText()); //$NON-NLS-1$
                } else if (bPatient.getSelection()) {
                    newKontakt = new Patient(ret[0], ret[1], ret[3], ret[2]);
                    newKontakt.set("Zusatz", tZusatz.getText()); //$NON-NLS-1$
                } else if (bPerson.getSelection()) {
                    newKontakt = new Person(ret[0], ret[1], ret[3], ret[2]);
                    newKontakt.set("Zusatz", tZusatz.getText()); //$NON-NLS-1$
                } else if (bLabor.getSelection()) {
                    newKontakt = new Labor(ret[0], ret[0]);
                    newKontakt.set("Zusatz1", ret[1]); //$NON-NLS-1$
                    newKontakt.set("Ansprechperson", tZusatz.getText()); //$NON-NLS-1$
                } else if (bOrganisation.getSelection()) {
                    newKontakt = new Organisation(ret[0], ret[1]);
                    newKontakt.set("Ansprechperson", tZusatz.getText()); //$NON-NLS-1$
                } else {
                    MessageDialog.openInformation(getShell(), Messages.KontaktErfassenDialog_unbekannterTyp_title, //$NON-NLS-1$
                            Messages.KontaktErfassenDialog_unbekannterTyp_msg); //$NON-NLS-1$
                    return;
                }
            }
            if (CoreHub.getLocalLockService().acquireLock(newKontakt).isOk()) {
                newKontakt.set(new String[] { "Strasse", "Plz", "Ort", "Telefon1", "Fax", "E-Mail" //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
                }, new String[] { ret[4], ret[5], ret[6], ret[7], tFax.getText(), tEmail.getText() });

                ElexisEventDispatcher.fireSelectionEvent(newKontakt);
                CoreHub.getLocalLockService().releaseLock(newKontakt);
            }
        } catch (TimeFormatException e) {
            ExHandler.handle(e);
            SWTHelper.showError(Messages.KontaktErfassenDialog_falschesDatum_title, //$NON-NLS-1$
                    Messages.KontaktErfassenDialog_falschesDatum_msg); //$NON-NLS-1$
            return;
        }
    }

    @Override
    protected void okPressed() {
        createKontakt();
        super.okPressed();
    }

    public Kontakt getResult() {
        return newKontakt;
    }
}