org.eclipse.mylyn.internal.github.ui.gist.GistRepositorySettingsPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.mylyn.internal.github.ui.gist.GistRepositorySettingsPage.java

Source

/*******************************************************************************
 *  Copyright (c) 2011 GitHub Inc.
 *  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:
 *    Kevin Sawicki (GitHub Inc.) - initial API and implementation
 *******************************************************************************/
package org.eclipse.mylyn.internal.github.ui.gist;

import java.io.IOException;
import java.net.URL;
import java.text.MessageFormat;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.egit.github.core.client.GitHubClient;
import org.eclipse.egit.github.core.service.GistService;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.mylyn.commons.net.AuthenticationType;
import org.eclipse.mylyn.internal.github.core.GitHubException;
import org.eclipse.mylyn.internal.github.core.gist.GistConnector;
import org.eclipse.mylyn.internal.github.ui.GitHubUi;
import org.eclipse.mylyn.internal.tasks.core.IRepositoryConstants;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage;
import org.eclipse.swt.widgets.Composite;

/**
 * Gist repository settings page class.
 * 
 * @author Kevin Sawicki (kevin@github.com)
 */
public class GistRepositorySettingsPage extends AbstractRepositorySettingsPage {

    /**
     * URL
     */
    public static final String URL = "https://gist.github.com"; //$NON-NLS-1$

    /**
     * @param taskRepository
     */
    public GistRepositorySettingsPage(TaskRepository taskRepository) {
        super(Messages.GistRepositorySettingsPage_Title, Messages.GistRepositorySettingsPage_Description,
                taskRepository);
        setNeedsAnonymousLogin(false);
    }

    /**
     * @see org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage#getConnectorKind()
     */
    public String getConnectorKind() {
        return GistConnector.KIND;
    }

    /**
     * @see org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage#createAdditionalControls(org.eclipse.swt.widgets.Composite)
     */
    protected void createAdditionalControls(Composite parent) {
        if (repository == null) {
            setUrl(URL);
            repositoryLabelEditor.setStringValue(Messages.GistRepositorySettingsPage_RepositoryLabelDefault);
        }
    }

    /**
     * @see org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage#isValidUrl(java.lang.String)
     */
    protected boolean isValidUrl(String url) {
        if (url.startsWith("http://") || url.startsWith("https://")) //$NON-NLS-1$ //$NON-NLS-2$
            try {
                new URL(url);
                return true;
            } catch (IOException e) {
                return false;
            }
        return false;

    }

    /**
     * @see org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage#getValidator(org.eclipse.mylyn.tasks.core.TaskRepository)
     */
    protected Validator getValidator(final TaskRepository repository) {
        return new Validator() {

            public void run(IProgressMonitor monitor) throws CoreException {
                monitor.beginTask(Messages.GistRepositorySettingsPage_TaskValidating, 100);
                try {
                    monitor.subTask(Messages.GistRepositorySettingsPage_TaskContacting);
                    try {
                        GitHubClient client = GistConnector.createClient(repository);
                        GistService service = new GistService(client);
                        String user = repository.getCredentials(AuthenticationType.REPOSITORY).getUserName();
                        monitor.worked(20);
                        service.getGists(user);
                    } catch (IOException e) {
                        e = GitHubException.wrap(e);
                        String message = MessageFormat.format(Messages.GistRepositorySettingsPage_StatusError,
                                e.getLocalizedMessage());
                        setStatus(GitHubUi.createErrorStatus(message));
                        return;
                    } finally {
                        monitor.done();
                    }
                    setStatus(new Status(IStatus.OK, GitHubUi.BUNDLE_ID,
                            Messages.GistRepositorySettingsPage_StatusSuccess));
                } finally {
                    monitor.done();
                }
            }
        };
    }

    /**
     * @see org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage#applyTo(org.eclipse.mylyn.tasks.core.TaskRepository)
     */
    public void applyTo(TaskRepository repository) {
        repository.setProperty(IRepositoryConstants.PROPERTY_CATEGORY, IRepositoryConstants.CATEGORY_REVIEW);
        super.applyTo(repository);
    }

    /**
     * @see org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage#canValidate()
     */
    public boolean canValidate() {
        return isPageComplete() && (getMessage() == null || getMessageType() != IMessageProvider.ERROR);
    }

}