ch.elexis.dialogs.KontaktErfassenDialog.java Source code

Java tutorial

Introduction

Here is the source code for ch.elexis.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.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.Desk;
import ch.elexis.Hub;
import ch.elexis.actions.ElexisEventDispatcher;
import ch.elexis.admin.AccessControlDefaults;
import ch.elexis.core.icons.Images;
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.elexis.util.SWTHelper;
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 = Desk.getToolkit().createComposite(typeComp, SWT.BORDER);
        bOrganisation = Desk.getToolkit().createButton(cTypes,
                Messages.getString("KontaktErfassenDialog.organization"), //$NON-NLS-1$
                SWT.CHECK);
        bOrganisation.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                bOrganisationChanged(bOrganisation.getSelection());
            }
        });
        bLabor = Desk.getToolkit().createButton(cTypes, Messages.getString("KontaktErfassenDialog.labor"), //$NON-NLS-1$
                SWT.CHECK);
        bLabor.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                bLaborChanged(bLabor.getSelection());
            }
        });
        bPerson = Desk.getToolkit().createButton(cTypes, Messages.getString("KontaktErfassenDialog.person"), //$NON-NLS-1$
                SWT.CHECK);
        bPerson.setSelection(true);
        bPerson.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                bPersonChanged(bPerson.getSelection());
            }
        });
        bPatient = Desk.getToolkit().createButton(cTypes, Messages.getString("KontaktErfassenDialog.patient"), //$NON-NLS-1$
                SWT.CHECK);
        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 = Desk.getToolkit().createButton(cTypes, Messages.getString("KontaktErfassenDialog.user"), //$NON-NLS-1$
                SWT.CHECK);
        bAnwender.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                bAnwenderChanged(bAnwender.getSelection());
            }
        });
        bMandant = Desk.getToolkit().createButton(cTypes, Messages.getString("KontaktErfassenDialog.mandant"), //$NON-NLS-1$
                SWT.CHECK);
        bMandant.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                bMandantChanged(bMandant.getSelection());
            }
        });
        // Not everybody may create users and mandators
        if (!Hub.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.getString("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.getString("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.getString("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.getString("PatientErfassenDialog.sex"));//$NON-NLS-1$
        cbSex = new Combo(ret, SWT.SINGLE);
        cbSex.setItems(new String[] { Messages.getString("KontaktErfassenDialog.male"), //$NON-NLS-1$
                Messages.getString("KontaktErfassenDialog.female") }); //$NON-NLS-1$

        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.getString("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.getString("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.getString("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.getString("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.getString("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.getString("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.getString("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.getString("KontaktErfassenDialog.postanschrift")); //$NON-NLS-1$
        hlAnschrift = Desk.getToolkit().createHyperlink(ret,
                Messages.getString("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.getString("KontaktErfassenDialog.message")); //$NON-NLS-1$
        setTitle(Messages.getString("KontaktErfassenDialog.subTitle")); //$NON-NLS-1$
        getShell().setText(Messages.getString("KontaktErfassenDialog.title")); //$NON-NLS-1$
        setTitleImage(Images.IMG_LOGO48.getImage());
    }

    protected void bOrganisationChanged(boolean isSelected) {
        bOrganisation.setSelection(isSelected);
        if (isSelected) {
            bPersonChanged(false);
            lName.setText(Messages.getString("KontaktErfassenDialog.bezeichnung"));//$NON-NLS-1$
            lVorname.setText(Messages.getString("KontaktErfassenDialog.zusatz")); //$NON-NLS-1$
            lZusatz.setText(Messages.getString("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.getString("KontaktErfassenDialog.laborleiter")); //$NON-NLS-1$
            lName.getParent().layout();
        }
    }

    protected void bPersonChanged(boolean isSelected) {
        bPerson.setSelection(isSelected);
        if (isSelected) {
            bOrganisationChanged(false);
            lName.setText(Messages.getString("KontaktErfassenDialog.name"));//$NON-NLS-1$
            lVorname.setText(Messages.getString("KontaktErfassenDialog.firstName")); //$NON-NLS-1$
            lZusatz.setText(Messages.getString("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.getString("KontaktErfassenDialog.geschlechtFehlt.title"), //$NON-NLS-1$
                    Messages.getString("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.getString("KontaktErfassenDialog.organisationExistiert.title"), //$NON-NLS-1$
                                Messages.getString("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.getString("KontaktErfassenDialog.personExisitiert.title"), //$NON-NLS-1$
                                Messages.getString("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.getString("KontaktErfassenDialog.unbekannterTyp.title"), //$NON-NLS-1$
                            Messages.getString("KontaktErfassenDialog.unbekannterTyp.msg")); //$NON-NLS-1$
                    return;
                }
            }
            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);

        } catch (TimeFormatException e) {
            ExHandler.handle(e);
            SWTHelper.showError(Messages.getString("KontaktErfassenDialog.falschesDatum.title"), //$NON-NLS-1$
                    Messages.getString("KontaktErfassenDialog.falschesDatum.msg")); //$NON-NLS-1$
            return;
        }

    }

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

    public Kontakt getResult() {
        return newKontakt;
    }
}