ch.elexis.base.messages.MsgDetailDialog.java Source code

Java tutorial

Introduction

Here is the source code for ch.elexis.base.messages.MsgDetailDialog.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.base.messages;

import java.util.List;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
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 ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.events.ElexisEvent;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.model.issue.Visibility;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.data.Anwender;
import ch.elexis.data.Reminder;
import ch.elexis.messages.Message;
import ch.rgw.tools.TimeTool;

public class MsgDetailDialog extends Dialog {

    private Label lblFrom;
    private ComboViewer cbTo;
    private Text txtMessage;
    private Message incomingMsg;
    private List<Anwender> users = CoreHub.getUserList();
    private Button bOK, bAnswer;

    MsgDetailDialog(final Shell shell, final Message msg) {
        super(shell);
        this.incomingMsg = msg;
    }

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

        Label lblMessageInfo = new Label(ret, SWT.NONE);
        lblMessageInfo.setLayoutData(SWTHelper.getFillGridData(4, true, 1, false));
        String msgLabel = (incomingMsg == null) ? new TimeTool().toString(TimeTool.FULL_GER)
                : new TimeTool(incomingMsg.get(Message.FLD_TIME)).toString(TimeTool.FULL_GER);
        lblMessageInfo.setText(Messages.MsgDetailDialog_messageDated + msgLabel);

        new Label(ret, SWT.NONE).setText(Messages.MsgDetailDialog_from);
        lblFrom = new Label(ret, SWT.NONE);

        new Label(ret, SWT.NONE).setText(Messages.MsgDetailDialog_to);
        cbTo = new ComboViewer(ret, SWT.SINGLE | SWT.READ_ONLY);
        cbTo.setContentProvider(ArrayContentProvider.getInstance());
        cbTo.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(Object element) {
                Anwender anw = (Anwender) element;
                return anw.getLabel();
            }
        });
        cbTo.setInput(users);
        cbTo.setSelection(new StructuredSelection(users.get(0)));

        new Label(ret, SWT.SEPARATOR | SWT.HORIZONTAL).setLayoutData(SWTHelper.getFillGridData(4, true, 1, false));

        if (incomingMsg != null) {
            lblFrom.setText(incomingMsg.getSender().getLabel());
            Anwender sender = null;
            for (Anwender anwender : users) {
                if (incomingMsg.getDest().getId().equals(anwender.getId())) {
                    sender = anwender;
                    break;
                }
            }
            if (sender != null) {
                cbTo.setSelection(new StructuredSelection(sender));
            }

            cbTo.getCombo().setEnabled(false);

            new Label(ret, SWT.NONE).setText(Messages.MsgDetailDialog_message);
            Label lblIncomingMsg = new Label(ret, SWT.None);
            lblIncomingMsg.setLayoutData(SWTHelper.getFillGridData(3, true, 1, true));
            lblIncomingMsg.setText(incomingMsg.get(Message.FLD_TEXT));

            new Label(ret, SWT.NONE).setText(Messages.MsgDetailDialog_answer);
        } else {
            lblFrom.setText(CoreHub.actUser.getLabel());
            new Label(ret, SWT.NONE).setText(Messages.MsgDetailDialog_message);
        }

        txtMessage = SWTHelper.createText(ret, 1, SWT.BORDER);
        txtMessage.setLayoutData(SWTHelper.getFillGridData(3, true, 1, true));
        txtMessage.addModifyListener(new ModifyListener() {

            @Override
            public void modifyText(ModifyEvent e) {
                if (txtMessage.getText() != null && txtMessage.getText().length() > 0) {
                    getShell().setDefaultButton(bAnswer);
                } else {
                    getShell().setDefaultButton(bOK);
                }
            }
        });

        return ret;
    }

    @Override
    public void create() {
        super.create();
        if (incomingMsg == null) {
            getShell().setText(Messages.MsgDetailDialog_createMessage);
        } else {
            getShell().setText(Messages.MsgDetailDialog_readMessage);
        }
    }

    @Override
    protected void createButtonsForButtonBar(final Composite parent) {
        String sOK;
        if (incomingMsg == null) {
            sOK = Messages.MsgDetailDialog_send;
        } else {
            sOK = Messages.MsgDetailDialog_delete;
        }
        bOK = createButton(parent, IDialogConstants.OK_ID, sOK, false);
        parent.getShell().setDefaultButton(bOK);
        bAnswer = createButton(parent, IDialogConstants.CLIENT_ID + 1, Messages.MsgDetailDialog_reply, false);
        if (incomingMsg == null) {
            bAnswer.setEnabled(false);
        }
        createButton(parent, IDialogConstants.CLIENT_ID + 2, Messages.MsgDetailDialog_asReminder, false);
        createButton(parent, IDialogConstants.CANCEL_ID, Messages.MsgDetailDialog_cancel, false);
    }

    @Override
    protected void buttonPressed(int buttonId) {
        switch (buttonId) {
        case IDialogConstants.OK_ID:
            okPressed();
            return;
        case IDialogConstants.CLIENT_ID + 1:
            if (incomingMsg != null) {
                Anwender an = incomingMsg.getSender();
                new Message(an, txtMessage.getText());
            }
            okPressed();
        case IDialogConstants.CLIENT_ID + 2:
            StructuredSelection ss = ((StructuredSelection) cbTo.getSelection());
            if (!ss.isEmpty()) {
                Anwender anw = (Anwender) ss.getFirstElement();
                Reminder rem = new Reminder(null, new TimeTool().toString(TimeTool.DATE_GER), Visibility.ALWAYS, "",
                        incomingMsg.get(Message.FLD_TEXT));
                ElexisEventDispatcher.getInstance()
                        .fire(new ElexisEvent(rem, Reminder.class, ElexisEvent.EVENT_CREATE));
                rem.addResponsible(anw);
            }
            okPressed();
        default:
            break;
        }
        super.buttonPressed(buttonId);
    }

    @Override
    protected void okPressed() {
        if (incomingMsg == null) {
            StructuredSelection ss = ((StructuredSelection) cbTo.getSelection());
            if (!ss.isEmpty()) {
                incomingMsg = new Message((Anwender) ss.getFirstElement(), txtMessage.getText());
            }
        } else {
            incomingMsg.delete();
        }
        super.okPressed();
    }
}