/*******************************************************************************
* 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);
}
}