org.eclipse.gyrex.admin.ui.jobs.internal.generic.GenericJobParameterPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.gyrex.admin.ui.jobs.internal.generic.GenericJobParameterPage.java

Source

/*******************************************************************************
 * Copyright (c) 2013 AGETO Service GmbH and others.
 * 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:
 *     Gunnar Wagenknecht - initial API and implementation
 *******************************************************************************/
package org.eclipse.gyrex.admin.ui.jobs.internal.generic;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;

import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.DialogField;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.IListAdapter;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.LayoutUtil;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.ListDialogField;
import org.eclipse.gyrex.admin.ui.internal.wizards.dialogfields.ListDialogField.ColumnsDescription;
import org.eclipse.gyrex.admin.ui.jobs.configuration.wizard.JobConfigurationWizardSession;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.rap.rwt.widgets.DialogCallback;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;

import org.apache.commons.lang.StringUtils;

public class GenericJobParameterPage extends WizardPage {

    private static final long serialVersionUID = 1L;

    final ListDialogField parameterTable = new ListDialogField(new IListAdapter() {

        @Override
        public void customButtonPressed(final ListDialogField field, final int index) {
            switch (index) {
            case 0:
                openAddParameterDialog();
                break;
            case 1:
                openEditParameterDialog();
                break;
            default:
                // nothing
                break;
            }
        }

        @Override
        public void doubleClicked(final ListDialogField field) {
            openEditParameterDialog();
        }

        @Override
        public void selectionChanged(final ListDialogField field) {
            field.enableButton(2, field.getSelectedElements().size() == 1);
        }
    }, new String[] { "New...", "Edit...", "Remove" }, new ColumnLabelProvider() {
        private static final long serialVersionUID = 1L;

        @Override
        public String getText(final Object element) {
            if (element instanceof Parameter)
                return ((Parameter) element).getName();

            return element == null ? "" : element.toString();//$NON-NLS-1$
        }

        @Override
        public void update(final ViewerCell cell) {
            final Parameter element = (Parameter) cell.getElement();
            switch (cell.getColumnIndex()) {
            case 0:
                cell.setText(element.getName());
                break;

            case 1:
                cell.setText(element.getValue());
                break;

            default:
                break;
            }
        }
    });
    {
        parameterTable.setRemoveButtonIndex(2);
        parameterTable.setTableColumns(new ColumnsDescription(new String[] { "Parameter", "Value" }, true));
    }

    private final JobConfigurationWizardSession session;

    public GenericJobParameterPage(final JobConfigurationWizardSession session) {
        super(GenericJobParameterPage.class.getSimpleName());
        this.session = session;
        setTitle("Task Parameter");
        setDescription("Configure the task by modifying its launch parameter.");

        // this page does not have any required fields
        setPageComplete(true);
    }

    @Override
    public void createControl(final Composite parent) {
        final Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(GridLayoutFactory.fillDefaults().create());
        composite.setLayoutData(GridDataFactory.fillDefaults()
                .minSize(convertVerticalDLUsToPixels(200), convertHorizontalDLUsToPixels(400)).create());
        setControl(composite);

        parameterTable.setLabelText(String.format("Parameter for %s:", session.getJobTypeName()));
        parameterTable.setViewerComparator(new ViewerComparator());

        final IDialogFieldListener validateListener = new IDialogFieldListener() {
            @Override
            public void dialogFieldChanged(final DialogField field) {
                validate();
            }
        };

        parameterTable.setDialogFieldListener(validateListener);

        LayoutUtil.doDefaultLayout(composite, new DialogField[] { parameterTable }, true);
        LayoutUtil.setHorizontalGrabbing(parameterTable.getListControl(null));

        // initialize from existing parameter
        readParameterFromSession();
    }

    void openAddParameterDialog() {
        final AddEditParameterDialog dialog = new AddEditParameterDialog(getShell(), null,
                parameterTable.getElements());
        dialog.openNonBlocking(new DialogCallback() {
            private static final long serialVersionUID = 1L;

            @Override
            public void dialogClosed(final int returnCode) {
                if ((returnCode == Window.OK) && StringUtils.isNotBlank(dialog.getName())) {
                    parameterTable.addElement(new Parameter(dialog.getName(), dialog.getValue()));
                }
            }
        });
    }

    void openEditParameterDialog() {
        final Parameter v = (Parameter) parameterTable.getSelectedElements().iterator().next();
        final AddEditParameterDialog dialog = new AddEditParameterDialog(getShell(), v,
                parameterTable.getElements());
        dialog.openNonBlocking(new DialogCallback() {
            private static final long serialVersionUID = 1L;

            @Override
            public void dialogClosed(final int returnCode) {
                if ((returnCode == Window.OK) && StringUtils.isNotBlank(dialog.getName())) {
                    v.setName(dialog.getName());
                    v.setValue(dialog.getValue());
                    parameterTable.refresh();
                }
            }
        });
    }

    private void readParameterFromSession() {
        parameterTable.removeAllElements();
        for (final Entry<String, String> e : session.getParameter().entrySet()) {
            parameterTable.addElement(new Parameter(e.getKey(), e.getValue()));
        }
        parameterTable.selectElements(null);
    }

    private void saveParameterToSession() {
        final Map<String, String> result = new LinkedHashMap<>();
        for (final Object variable : parameterTable.getElements()) {
            final Parameter v = (Parameter) variable;
            result.put(v.getName(), v.getValue());
        }

        session.setParameter(result);
    }

    void validate() {
        saveParameterToSession();

        setMessage(null);
        setPageComplete(true);
    }
}