org.deved.antlride.internal.ui.preferences.AntlrPackageDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.deved.antlride.internal.ui.preferences.AntlrPackageDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2007, 2008 Edgar Espina.
 * 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
 *
     
 *******************************************************************************/

package org.deved.antlride.internal.ui.preferences;

import org.deved.antlride.core.AntlrCore;
import org.deved.antlride.core.resources.AntlrPackage;
import org.deved.antlride.core.resources.AntlrPackages;
import org.deved.antlride.core.resources.InvalidPackageException;
import org.deved.antlride.ui.dialogs.AntlrBaseDialog;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ListViewer;
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.Control;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class AntlrPackageDialog extends AntlrBaseDialog {

    private AntlrPackages packages;

    private AntlrPackage apackage;

    private Button addExtJARsButton;

    private Text homeText;

    private ListViewer viewer;

    private Text descriptionText;

    private Text versionText;

    private String title;

    private class CreatePackageTask implements SelectionListener {
        public void widgetDefaultSelected(SelectionEvent e) {
        }

        public void widgetSelected(SelectionEvent e) {
            DirectoryDialog dialog = new DirectoryDialog(getShell());
            String directory = dialog.open();
            if (directory != null) {
                createPackage(directory);
            }
        }
    }

    private class AddExternalJARsTask implements SelectionListener {
        public void widgetDefaultSelected(SelectionEvent e) {
        }

        public void widgetSelected(SelectionEvent e) {
            FileDialog dialog = new FileDialog(getShell());
            dialog.setFilterExtensions(new String[] { "*.jar" });
            String file = dialog.open();
            if (file != null) {
                apackage.addExternalJARs(file);
                updateUI(apackage);
            }
        }
    }

    public AntlrPackageDialog(Shell parentShell, AntlrPackages packages, String title) {
        super(parentShell);
        this.title = title;
        this.packages = packages;
    }

    @Override
    protected String getDialogName() {
        return "package";
    }

    public AntlrPackage getSelectedPackage() {
        return apackage;
    }

    private void createPackage(String directory) {
        apackage = null;
        try {
            apackage = AntlrPackages.createPackage(Path.fromOSString(directory));
            if (packages.exist(apackage)) {
                MessageDialog.openError(getShell(), AntlrPreferenceMessages.Builder_Package_Title,
                        AntlrPreferenceMessages.Builder_Package_Duplicated_Package);
                apackage = null;
            } else {
                updateUI(apackage);
            }
        } catch (InvalidPackageException ex) {
            AntlrCore.error(ex);
            String message = ex.getMessage();
            Status status = new Status(IStatus.ERROR, AntlrCore.PLUGIN_ID, "Couldn't create a package",
                    message != null && message.length() > 0 ? ex : null);

            ErrorDialog.openError(getShell(), AntlrPreferenceMessages.Builder_Package_Title,
                    AntlrPreferenceMessages.Builder_Package_Invalid_Antlr_Home, status);
        } finally {
            addExtJARsButton.setEnabled(apackage != null);
        }
    }

    @Override
    protected void cancelPressed() {
        apackage = null;
        super.cancelPressed();
    }

    @Override
    protected void setTitle() {
        setTitle("ANTLR Definition");
        setMessage("Specify attributes for an ANTLR", IMessageProvider.INFORMATION);
    }

    public void setInput(AntlrPackage antlrPackage) {
        this.apackage = antlrPackage;
    }

    private void updateUI(AntlrPackage antlrPackage) {
        if (antlrPackage != null) {
            homeText.setText(antlrPackage.getHome());
            descriptionText.setText(antlrPackage.getDescription());
            versionText.setText(antlrPackage.getVersion());
            viewer.setInput(antlrPackage.getClasspath());
        } else {
            homeText.setText("");
            descriptionText.setText("");
            versionText.setText("");
            viewer.setInput(null);
        }
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        GridData gd = null;
        Composite area = (Composite) super.createDialogArea(parent);
        getShell().setText(title);
        Composite composite = new Composite(area, SWT.NONE);
        composite.setLayoutData(new GridData(GridData.FILL_BOTH));

        GridLayout layout = new GridLayout(3, false);
        layout.marginLeft = 10;
        layout.marginRight = 10;
        layout.verticalSpacing = 10;
        composite.setLayout(layout);

        Label label = new Label(composite, SWT.NONE);
        label.setText(AntlrPreferenceMessages.Builder_Package_Home);
        homeText = new Text(composite, SWT.BORDER);
        homeText.setEditable(false);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        homeText.setLayoutData(gd);
        Button directoryButton = new Button(composite, SWT.PUSH);
        directoryButton.setText(AntlrPreferenceMessages.Builder_Package_Directory);
        directoryButton.addSelectionListener(new CreatePackageTask());
        gd = new GridData();
        directoryButton.setLayoutData(gd);

        label = new Label(composite, SWT.NONE);
        label.setText(AntlrPreferenceMessages.Builder_Package_Version);
        gd = new GridData();
        label.setLayoutData(gd);
        versionText = new Text(composite, SWT.BORDER);
        versionText.setEditable(false);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = 2;
        versionText.setLayoutData(gd);

        label = new Label(composite, SWT.NONE);
        label.setText(AntlrPreferenceMessages.Builder_Package_Desc);
        gd = new GridData();
        label.setLayoutData(gd);
        descriptionText = new Text(composite, SWT.BORDER);
        descriptionText.setEditable(false);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = 2;
        descriptionText.setLayoutData(gd);

        label = new Label(composite, SWT.NONE);
        label.setText(AntlrPreferenceMessages.Builder_Package_Libs);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.horizontalSpan = 3;
        label.setLayoutData(gd);

        viewer = new ListViewer(composite);
        viewer.setContentProvider(new ArrayContentProvider());
        viewer.setLabelProvider(new LabelProvider());
        gd = new GridData(GridData.FILL_BOTH);
        gd.horizontalSpan = 2;
        gd.verticalSpan = 10;
        viewer.getList().setLayoutData(gd);
        addExtJARsButton = new Button(composite, SWT.PUSH);
        addExtJARsButton.setText(AntlrPreferenceMessages.Builder_Package_Add_Ext_JARS);
        addExtJARsButton.setEnabled(false);
        addExtJARsButton.addSelectionListener(new AddExternalJARsTask());
        addExtJARsButton.setToolTipText("Useful for add additional targets");
        gd = new GridData(GridData.FILL_BOTH);
        gd.verticalAlignment = SWT.BEGINNING;

        updateUI(apackage);
        return composite;
    }
}