org.eclipse.equinox.internal.p2.ui.dialogs.AddRepositoryDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.equinox.internal.p2.ui.dialogs.AddRepositoryDialog.java

Source

/*******************************************************************************
 *  Copyright (c) 2007, 2010 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.equinox.internal.p2.ui.dialogs;

import java.net.URI;
import java.net.URISyntaxException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.URIUtil;
import org.eclipse.equinox.internal.p2.repository.helpers.RepositoryHelper;
import org.eclipse.equinox.internal.p2.ui.IProvHelpContextIds;
import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
import org.eclipse.equinox.p2.ui.Policy;
import org.eclipse.equinox.p2.ui.ProvisioningUI;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.PlatformUI;

/**
 * Abstract dialog class for adding repositories of different types. This class
 * assumes the user view of a repository is a name and URI. Individual subclasses 
 * will dictate what kind of repository and how it's created.
 * 
 * @since 3.4
 * 
 */
public abstract class AddRepositoryDialog extends RepositoryNameAndLocationDialog {

    URI addedLocation;
    static final String[] ARCHIVE_EXTENSIONS = new String[] { "*.jar;*.zip" }; //$NON-NLS-1$ 
    static String lastLocalLocation = null;
    static String lastArchiveLocation = null;
    Policy policy;

    public AddRepositoryDialog(Shell parentShell, ProvisioningUI ui) {
        super(parentShell, ui);
        setTitle(ProvUIMessages.AddRepositoryDialog_Title);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(parentShell, IProvHelpContextIds.ADD_REPOSITORY_DIALOG);
    }

    protected Control createDialogArea(Composite parent) {
        Composite comp = new Composite(parent, SWT.NONE);
        initializeDialogUnits(comp);
        GridLayout layout = new GridLayout();
        layout.numColumns = 3;
        layout.marginTop = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);

        comp.setLayout(layout);
        GridData data = new GridData();
        comp.setLayoutData(data);

        // Name: []
        nickname = createNameField(comp);

        Button localButton = new Button(comp, SWT.PUSH);
        localButton.setText(ProvUIMessages.RepositoryGroup_LocalRepoBrowseButton);
        localButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.APPLICATION_MODAL);
                dialog.setMessage(ProvUIMessages.RepositoryGroup_SelectRepositoryDirectory);
                dialog.setFilterPath(lastLocalLocation);
                String path = dialog.open();
                if (path != null) {
                    lastLocalLocation = path;
                    url.setText(makeLocalURIString(path));
                    validateRepositoryURL(false);
                }
            }
        });
        setButtonLayoutData(localButton);

        // Location: []
        url = createLocationField(comp);

        Button archiveButton = new Button(comp, SWT.PUSH);
        archiveButton.setText(ProvUIMessages.RepositoryGroup_ArchivedRepoBrowseButton);
        archiveButton.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                FileDialog dialog = new FileDialog(getShell(), SWT.APPLICATION_MODAL);
                dialog.setText(ProvUIMessages.RepositoryGroup_RepositoryFile);
                dialog.setFilterExtensions(ARCHIVE_EXTENSIONS);
                dialog.setFileName(lastArchiveLocation);
                String path = dialog.open();
                if (path != null) {
                    lastArchiveLocation = path;
                    url.setText(makeLocalURIString(path));
                    validateRepositoryURL(false);
                }
            }
        });
        setButtonLayoutData(archiveButton);
        comp.setTabList(new Control[] { nickname, url, localButton, archiveButton });
        Dialog.applyDialogFont(comp);
        return comp;
    }

    String makeLocalURIString(String path) {
        try {
            URI localURI = URIUtil.fromString(path);
            return URIUtil.toUnencodedString(RepositoryHelper.localRepoURIHelper(localURI));
        } catch (URISyntaxException e) {
            return path;
        }
    }

    protected boolean handleOk() {
        IStatus status = addRepository();
        return status.isOK();
    }

    /**
     * Get the location of the repository that was added by this dialog.  Return <code>null</code>
     * if the dialog has not yet added a repository location.
     * 
     * @return the location of the repository that has been added by this dialog, or <code>null</code>
     * if no repository has been added.
     */
    public URI getAddedLocation() {
        return addedLocation;
    }

    protected IStatus addRepository() {
        IStatus status = validateRepositoryURL(false);
        if (status.isOK()) {
            addedLocation = getUserLocation();
            String nick = nickname.getText().trim();
            if (nick.length() == 0)
                nick = null;
            getRepositoryTracker().addRepository(addedLocation, nick, getProvisioningUI().getSession());
        }
        return status;
    }
}