com.hypersocket.client.gui.LogonDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.hypersocket.client.gui.LogonDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2013 Hypersocket Limited.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/gpl.html
 ******************************************************************************/
package com.hypersocket.client.gui;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Canvas;
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 com.hypersocket.client.Option;
import com.hypersocket.client.Prompt;
import com.hypersocket.client.PromptType;
import com.hypersocket.client.i18n.I18N;

public class LogonDialog extends Dialog {

    List<Prompt> prompts;
    Map<String, Control> fields = new HashMap<String, Control>();
    Map<String, String> hidden = new HashMap<String, String>();
    Map<String, String> results = null;

    /**
     * Create the dialog.
     * 
     * @param parentShell
     */
    public LogonDialog(Shell parentShell, List<Prompt> prompts) {
        super(parentShell);
        this.prompts = prompts;
    }

    /**
     * Create contents of the dialog.
     * 
     * @param parent
     */
    @Override
    protected Control createDialogArea(Composite parent) {
        Composite container = (Composite) super.createDialogArea(parent);
        GridLayout gl_container = new GridLayout(3, false);
        gl_container.marginLeft = 10;
        container.setLayout(gl_container);

        final Image image = new Image(parent.getDisplay(), LogonDialog.class.getResourceAsStream("/logo.png"));

        Canvas canvas = new Canvas(container, SWT.NONE);
        GridData gd_canvas = new GridData(SWT.LEFT, SWT.TOP, true, true, 2, 1);
        gd_canvas.heightHint = 220;
        gd_canvas.widthHint = 100;
        canvas.setLayoutData(gd_canvas);
        canvas.addPaintListener(new PaintListener() {
            public void paintControl(PaintEvent e) {
                e.gc.drawImage(image, 0, 0);
            }
        });

        Composite composite = new Composite(container, SWT.NONE);
        GridData gd_composite = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        gd_composite.heightHint = 185;
        gd_composite.widthHint = 334;
        composite.setLayoutData(gd_composite);
        composite.setLayout(new GridLayout(1, false));

        for (Prompt prompt : prompts) {

            switch (prompt.getType()) {
            case TEXT:
            case PASSWORD: {
                Label label = new Label(composite, SWT.NONE);
                label.setText(prompt.getLabel());
                label.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));

                Text text = new Text(composite, SWT.BORDER | SWT.FILL);
                text.setText(prompt.getDefaultValue());
                text.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));

                if (prompt.getType() == PromptType.PASSWORD) {
                    text.setEchoChar('*');
                }

                fields.put(prompt.getResourceKey(), text);
                break;
            }
            case SELECT: {
                Label label = new Label(composite, SWT.NONE);
                label.setText(prompt.getLabel());
                label.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));

                Combo combo = new Combo(composite, SWT.READ_ONLY);
                boolean selected = false;
                for (Option o : prompt.getOptions()) {
                    combo.add(o.getName());
                    if (o.isSelected()) {
                        selected = true;
                        combo.setText(o.getName());
                    }
                }
                if (!selected && combo.getItemCount() > 0) {
                    combo.setText(combo.getItem(0));
                }

                fields.put(prompt.getResourceKey(), combo);
                break;
            }
            case P: {
                Label label = new Label(composite, SWT.NONE);
                label.setText(prompt.getDefaultValue());
                label.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
                break;
            }
            case HIDDEN: {
                hidden.put(prompt.getResourceKey(), prompt.getDefaultValue());
                break;
            }
            default:
                break;
            }
        }

        getShell().forceActive();
        return container;
    }

    protected void okPressed() {

        results = new HashMap<String, String>();

        for (Prompt prompt : prompts) {
            if (prompt.getType() != PromptType.P) {

                Control c = fields.get(prompt.getResourceKey());
                if (c instanceof Text) {
                    results.put(prompt.getResourceKey(), ((Text) c).getText());
                } else if (c instanceof Combo) {
                    results.put(prompt.getResourceKey(), ((Combo) c).getText());
                } else {
                    throw new IllegalStateException("We don't support " + c.getClass().getCanonicalName());
                }
            }
        }

        results.putAll(hidden);

        super.okPressed();

    }

    public Map<String, String> getResults() {
        return results;
    }

    /**
     * Create contents of the button bar.
     * 
     * @param parent
     */
    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        createButton(parent, IDialogConstants.OK_ID, I18N.getResource("text.ok"), true);
        createButton(parent, IDialogConstants.CANCEL_ID, I18N.getResource("text.cancel"), false);
    }

    /**
     * Return the initial size of the dialog.
     */
    @Override
    protected Point getInitialSize() {
        return new Point(459, 275);
    }
}