com.google.dart.tools.ui.web.pubspec.PackageSelectionDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.google.dart.tools.ui.web.pubspec.PackageSelectionDialog.java

Source

/*
 * Copyright (c) 2013, the Dart project authors.
 * 
 * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 * 
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package com.google.dart.tools.ui.web.pubspec;

import com.google.dart.tools.core.generator.DartIdentifierUtil;
import com.google.dart.tools.core.pub.PubPackageManager;

import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;

import java.util.Arrays;

/**
 * Selection dialog to add a pub package as a dependency to the pubspec.
 */
public class PackageSelectionDialog extends ElementListSelectionDialog {

    private Object[] elements;

    private static int RELOAD_BUTTON_ID = IDialogConstants.CLIENT_ID + 1;

    public PackageSelectionDialog(Shell shell, Object[] elements) {
        super(shell, new LabelProvider());
        setElements(elements);
        this.elements = elements;
    }

    @Override
    protected void buttonPressed(int buttonId) {
        if (RELOAD_BUTTON_ID == buttonId) {
            reloadPressed();
        }
        super.buttonPressed(buttonId);
    }

    @Override
    protected void computeResult() {
        if (getSelectedElements().length > 0) {
            setResult(Arrays.asList(getSelectedElements()));
        } else {
            setResult(Arrays.asList(new String[] { getFilter() }));
        }
    }

    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        createButton(parent, RELOAD_BUTTON_ID, "Reload", false);
        super.createButtonsForButtonBar(parent);
    }

    @Override
    protected Control createDialogArea(Composite parent) {

        // create a composite with standard margins and spacing
        Composite composite = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
        layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
        layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
        layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
        composite.setLayout(layout);
        composite.setLayoutData(new GridData(GridData.FILL_BOTH));
        applyDialogFont(composite);

        createMessageArea(composite);
        Text filterText = createFilterText(composite);
        filterText.addModifyListener(new ModifyListener() {

            @Override
            public void modifyText(ModifyEvent e) {
                Status status = new Status(IStatus.OK, PlatformUI.PLUGIN_ID, IStatus.OK, "", //$NON-NLS-1$
                        null);
                if (!getFilter().isEmpty() && !isValidDartIdentifier(getFilter())) {
                    status = new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, IStatus.ERROR,
                            "Not a valid identifier", null);
                }
                updateStatus(status);
            }
        });

        createFilteredList(composite);

        setListElements(elements);

        setSelection(getInitialElementSelections().toArray());

        return composite;
    }

    /**
     * Validates the current selection and updates the status line accordingly.
     * 
     * @return boolean <code>true</code> if the current selection is valid.
     */
    @Override
    protected boolean validateCurrentSelection() {
        Assert.isNotNull(fFilteredList);

        IStatus status;
        Object[] elements = getSelectedElements();

        if (elements.length > 0) {
            status = new Status(IStatus.OK, PlatformUI.PLUGIN_ID, IStatus.OK, "", //$NON-NLS-1$
                    null);
        } else {
            if (fFilteredList.isEmpty()) {
                status = new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, IStatus.ERROR, "", null);
            } else {
                String string = getFilter();
                if (!string.isEmpty()) {
                    if (isValidDartIdentifier(string)) {
                        status = new Status(IStatus.WARNING, PlatformUI.PLUGIN_ID, IStatus.ERROR,
                                "Selection not in the list", null);
                    } else {
                        status = new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, IStatus.ERROR,
                                "Not a valid identifier", null);
                    }
                } else {
                    status = new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, IStatus.OK, "", //$NON-NLS-1$
                            null);
                }
            }
        }
        updateStatus(status);

        return status.isOK() || status.matches(Status.WARNING);
    }

    private boolean isValidDartIdentifier(String string) {
        if (DartIdentifierUtil.validateIdentifier(string) == Status.OK_STATUS) {
            return true;
        }
        return false;
    }

    private void reloadPressed() {
        PubPackageManager.getInstance().startPackageListFromPubJob();
    }

}