org.eclipse.jubula.client.ui.rcp.widgets.AutIdListComposite.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jubula.client.ui.rcp.widgets.AutIdListComposite.java

Source

/*******************************************************************************
 * Copyright (c) 2004, 2010 BREDEX GmbH.
 * 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:
 *     BREDEX GmbH - initial API and implementation and/or initial documentation
 *******************************************************************************/
package org.eclipse.jubula.client.ui.rcp.widgets;

import java.util.Collection;

import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.window.Window;
import org.eclipse.jubula.client.core.model.IAUTMainPO;
import org.eclipse.jubula.client.ui.rcp.dialogs.EnterAutIdDialog;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
import org.eclipse.jubula.client.ui.rcp.provider.ControlDecorator;
import org.eclipse.jubula.client.ui.utils.DialogUtils;
import org.eclipse.jubula.client.ui.utils.LayoutUtil;
import org.eclipse.jubula.tools.internal.i18n.I18n;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;

/**
 * @author BREDEX GmbH
 * @created Jan 21, 2010
 */
public class AutIdListComposite extends Composite {

    /** the AUT containing the AUT ID list to be viewed / modified */
    private IAUTMainPO m_aut;

    /**
     * Constructor
     * 
     * @param parent The parent composite for this component.
     * @param aut The AUT containing the AUT ID list to be viewed / modified
     * @param autIdValidator The validator for the AUT ID text field.
     */
    public AutIdListComposite(Composite parent, IAUTMainPO aut, IValidator autIdValidator) {
        super(parent, SWT.NONE);
        m_aut = aut;
        init(autIdValidator);
    }

    /**
     * Creates the necessary components and sets their initial values.
     * 
     * @param autIdValidator The validator for the AUT ID text field.
     */
    @SuppressWarnings("unchecked")
    private void init(final IValidator autIdValidator) {
        GridLayout compositeLayout = new GridLayout();
        compositeLayout.numColumns = 2;
        compositeLayout.marginHeight = 0;
        compositeLayout.marginWidth = 0;
        setLayout(compositeLayout);
        Label idLabel = new Label(this, SWT.NONE);
        idLabel.setText(Messages.AUTPropertiesDialogAutId);
        ControlDecorator.createInfo(idLabel, I18n.getString("AUTPropertiesDialog.AutId.helpText"), false); //$NON-NLS-1$
        GridData data = new GridData(SWT.BEGINNING, SWT.FILL, false, false);
        data.horizontalSpan = 1;
        idLabel.setLayoutData(data);

        // Created to keep layout consistent
        new Label(this, SWT.NONE).setVisible(false);

        final WritableList idListModel = new WritableList(m_aut.getAutIds(), String.class);
        final ListViewer idListViewer = new ListViewer(this, LayoutUtil.MULTI_TEXT_STYLE);
        idListViewer.setContentProvider(new ObservableListContentProvider());
        idListViewer.setComparator(new ViewerComparator());
        idListViewer.setInput(idListModel);
        final List idList = idListViewer.getList();
        data = new GridData(SWT.FILL, SWT.FILL, true, false);
        data.verticalSpan = 3;
        data.widthHint = Dialog.convertHeightInCharsToPixels(LayoutUtil.getFontMetrics(idList), 4);
        idList.setLayoutData(data);

        createButtons(this, autIdValidator, idList, idListModel);
    }

    /**
     * 
     * @param parent The parent composite for the buttons.
     * @param idList The list component containing the AUT IDs.
     * @param autIdValidator The validator for AUT IDs.
     * @param idListModel The model containing the AUT IDs.
     */
    private static void createButtons(Composite parent, final IValidator autIdValidator, final List idList,
            final Collection<String> idListModel) {
        GridData data;
        final Button addButton = new Button(parent, SWT.NONE);
        addButton.setText(Messages.AUTConfigComponentAdd);
        data = new GridData(SWT.FILL, SWT.BEGINNING, false, false);
        addButton.setLayoutData(data);
        addButton.addSelectionListener(new SelectionListener() {
            public void widgetDefaultSelected(SelectionEvent event) {
                widgetSelected(event);
            }

            public void widgetSelected(SelectionEvent event) {
                EnterAutIdDialog dialog = new EnterAutIdDialog(addButton.getShell(), null, autIdValidator);
                if (dialog.open() == Window.OK) {
                    idListModel.add(dialog.getAutId());
                }
            }
        });

        final Button editButton = new Button(parent, SWT.NONE);
        editButton.setEnabled(false);
        editButton.setText(Messages.AUTConfigComponentEdit);
        data = new GridData(SWT.FILL, SWT.BEGINNING, false, false);
        editButton.setLayoutData(data);
        editButton.addSelectionListener(new SelectionListener() {
            public void widgetDefaultSelected(SelectionEvent event) {
                widgetSelected(event);
            }

            @SuppressWarnings("synthetic-access")
            public void widgetSelected(SelectionEvent event) {
                handleEditAutIdDialog(idList, autIdValidator, idListModel);
            }
        });

        final Button removeButton = new Button(parent, SWT.NONE);
        removeButton.setEnabled(false);
        removeButton.setText(Messages.AUTConfigComponentRemove);
        data = new GridData(SWT.FILL, SWT.BEGINNING, false, false);
        removeButton.setLayoutData(data);
        removeButton.addSelectionListener(new SelectionListener() {
            public void widgetDefaultSelected(SelectionEvent event) {
                widgetSelected(event);
            }

            public void widgetSelected(SelectionEvent event) {
                if (idList.getSelectionCount() != 0) {
                    idListModel.remove(idList.getItem(idList.getSelectionIndex()));
                    if (idList.getItemCount() > 0) {
                        idList.setSelection(0);
                    } else {
                        idList.deselectAll();
                        removeButton.setEnabled(false);
                        editButton.setEnabled(false);
                    }
                }
            }
        });

        idList.addSelectionListener(new SelectionListener() {

            @SuppressWarnings("synthetic-access")
            public void widgetDefaultSelected(SelectionEvent event) {
                handleEditAutIdDialog(idList, autIdValidator, idListModel);
            }

            public void widgetSelected(SelectionEvent event) {
                boolean enableSelectionButtons = idList.getSelectionCount() == 1;
                editButton.setEnabled(enableSelectionButtons);
                removeButton.setEnabled(enableSelectionButtons);
            }

        });
    }

    /**
     * 
     * @param idList The list component containing the AUT ID being edited.
     * @param autIdValidator The validator for the AUT ID.
     * @param idListModel The model containing the AUT ID being edited.
     */
    private static void handleEditAutIdDialog(List idList, IValidator autIdValidator,
            Collection<String> idListModel) {
        if (idList.getSelectionCount() != 0) {
            String originalId = idList.getItem(idList.getSelectionIndex());
            EnterAutIdDialog dialog = new EnterAutIdDialog(idList.getShell(), originalId, autIdValidator);
            dialog.create();
            DialogUtils.setWidgetNameForModalDialog(dialog);
            if (dialog.open() == Window.OK) {
                idListModel.remove(originalId);
                idListModel.add(dialog.getAutId());
            }
        }
    }
}