org.eclipse.epsilon.ewl.emf.WizardsExtensionPreferenceDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.epsilon.ewl.emf.WizardsExtensionPreferenceDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2008 The University of York.
 * 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:
 *     Dimitrios Kolovos - initial API and implementation
 ******************************************************************************/
package org.eclipse.epsilon.ewl.emf;

import org.eclipse.epsilon.common.dt.util.ResourceFieldEditor;
import org.eclipse.epsilon.common.util.StringUtil;
import org.eclipse.epsilon.emf.dt.BrowseEPackagesListener;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.preference.ListEditor;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.SWT;
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.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;

public class WizardsExtensionPreferenceDialog extends TitleAreaDialog {

    private final class SettableListEditor extends ListEditor {
        public SettableListEditor(String name, String label, Composite composite) {
            super(name, label, composite);
        }

        @Override
        public String createList(String[] items) {
            return StringUtil.concat(WizardsExtensionPreference.EXTRA_PKG_SEPARATOR, items);
        }

        @Override
        protected String getNewInputObject() {
            SyncBrowseEPackagesListener lst = new SyncBrowseEPackagesListener();
            lst.handleEvent(new Event());
            return lst.result;
        }

        @Override
        protected String[] parseString(String stringList) {
            return StringUtil.split(stringList, WizardsExtensionPreference.EXTRA_PKG_SEPARATOR)
                    .toArray(new String[0]);
        }

        public void setStringValues(String[] values) {
            for (String value : values) {
                getList().add(value);
            }
        }

        public String getStringValue() {
            return createList(getList().getItems());
        }
    }

    private final class SyncBrowseEPackagesListener extends BrowseEPackagesListener {
        private String result;

        @Override
        public void selectionChanged(String ePackageUri) {
            this.result = ePackageUri;
        }
    }

    protected StringFieldEditor extensionEditor;
    protected ResourceFieldEditor wizardsEditor;
    protected SettableListEditor extraPackagesEditor;
    protected WizardsExtensionPreference preference;

    public WizardsExtensionPreferenceDialog(Shell parentShell) {
        super(parentShell);
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        Composite zuper = (Composite) super.createDialogArea(parent);

        setTitle("Configure wizards");
        getShell().setText("GMF Wizards");
        setMessage("Configure wizards for an EMF namespace URI");

        GridLayout layout = new GridLayout(2, false);
        GridData fillData = new GridData(GridData.FILL_BOTH);
        fillData.horizontalIndent = 8;

        final Composite composite = new Composite(zuper, SWT.FILL);
        composite.setLayout(layout);
        composite.setLayoutData(fillData);

        // Main namespace URI (for activating the wizard)
        final Composite cNamespaceURIRow = new Composite(composite, SWT.FILL);
        cNamespaceURIRow.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        extensionEditor = new StringFieldEditor("", "Namespace URI", cNamespaceURIRow);
        extensionEditor.getTextControl(cNamespaceURIRow).setLayoutData(fillData);
        Button browseMetamodelUri = new Button(composite, SWT.NONE);
        browseMetamodelUri.setText("Browse EPackages...");
        browseMetamodelUri.addListener(SWT.Selection, new BrowseEPackagesListener() {
            @Override
            public void selectionChanged(String ePackageUri) {
                extensionEditor.getTextControl(cNamespaceURIRow).setText(ePackageUri);
            }
        });

        // EWL file picker
        Composite cEWLFileRow = new Composite(composite, SWT.FILL);
        wizardsEditor = new ResourceFieldEditor("", "Wizards", "EWL Files", "EWL files in the workspace", "ewl",
                cEWLFileRow);
        fillData = new GridData(GridData.FILL_BOTH);
        fillData.horizontalSpan = 2;
        cEWLFileRow.setLayoutData(fillData);

        // Extra packages picker
        extraPackagesEditor = new SettableListEditor("", "Extra packages:", composite);
        extraPackagesEditor.fillIntoGrid(composite, 2);

        // Read values back into the dialog
        extensionEditor.setStringValue(preference.getNamespaceURI());
        wizardsEditor.setStringValue(preference.getWizards());
        extraPackagesEditor.setStringValues(preference.getExtraPackages());

        return composite;
    }

    public WizardsExtensionPreference getPreference() {
        return preference;
    }

    public void setPreference(WizardsExtensionPreference preference) {
        this.preference = preference;
    }

    @Override
    protected void okPressed() {
        preference.setNamespaceURI(extensionEditor.getStringValue());
        preference.setWizards(wizardsEditor.getStringValue());
        preference.setExtraPackages(extraPackagesEditor.getStringValue());
        super.okPressed();
    }

}