/*******************************************************************************
* 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 org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
import org.eclipse.mylyn.commons.net.AuthenticationType;
import org.eclipse.mylyn.internal.github.core.gist.IGistQueryConstants;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositoryQueryPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* Gist repository query page class.
*/
public class GistRepositoryQueryPage extends AbstractRepositoryQueryPage {
private Text titleText;
private Text userText;
/**
* @param taskRepository
* @param query
*/
public GistRepositoryQueryPage(TaskRepository taskRepository,
IRepositoryQuery query) {
this("gistQueryPage", taskRepository, query); //$NON-NLS-1$
}
/**
* @param pageName
* @param taskRepository
* @param query
*/
public GistRepositoryQueryPage(String pageName,
TaskRepository taskRepository, IRepositoryQuery query) {
super(pageName, taskRepository, query);
}
/**
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
Composite displayArea = new Composite(parent, SWT.NONE);
initializeDialogUnits(displayArea);
GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(false)
.applyTo(displayArea);
GridDataFactory.fillDefaults().grab(true, true).applyTo(displayArea);
ModifyListener completeListener = new ModifyListener() {
public void modifyText(ModifyEvent e) {
setPageComplete(isPageComplete());
}
};
if (!inSearchContainer()) {
new Label(displayArea, SWT.NONE)
.setText(Messages.GistRepositoryQueryPage_LabelTitle);
titleText = new Text(displayArea, SWT.SINGLE | SWT.BORDER);
GridDataFactory.fillDefaults().grab(true, false).applyTo(titleText);
titleText.addModifyListener(completeListener);
titleText.setFocus();
}
new Label(displayArea, SWT.NONE)
.setText(Messages.GistRepositoryQueryPage_LabelUser);
userText = new Text(displayArea, SWT.SINGLE | SWT.BORDER);
GridDataFactory.fillDefaults().grab(true, false).applyTo(userText);
userText.addModifyListener(completeListener);
IRepositoryQuery query = getQuery();
if (query != null) {
if (titleText != null && query.getSummary() != null)
titleText.setText(query.getSummary());
if (query.getAttribute(IGistQueryConstants.USER) != null)
userText.setText(query.getAttribute(IGistQueryConstants.USER));
} else if (!inSearchContainer() && !hasQueries()) {
titleText.setText(Messages.GistRepositoryQueryPage_TitleDefault);
AuthenticationCredentials credentials = getTaskRepository()
.getCredentials(AuthenticationType.REPOSITORY);
if (credentials != null)
userText.setText(credentials.getUserName());
}
Dialog.applyDialogFont(displayArea);
setControl(displayArea);
setPageComplete(isPageComplete());
}
/**
* @return true if queries existing for this repository, false otherwise
*/
protected boolean hasQueries() {
String url = getTaskRepository().getRepositoryUrl();
return !TasksUiPlugin.getTaskList().getRepositoryQueries(url).isEmpty();
}
/**
* @see org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositoryQueryPage#getQueryTitle()
*/
public String getQueryTitle() {
return titleText != null ? titleText.getText() : null;
}
/**
* @see org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositoryQueryPage#isPageComplete()
*/
public boolean isPageComplete() {
boolean complete = inSearchContainer() ? true : super.isPageComplete();
if (complete)
complete = userText.getText().trim().length() > 0;
return complete;
}
/**
* @see org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositoryQueryPage#applyTo(org.eclipse.mylyn.tasks.core.IRepositoryQuery)
*/
public void applyTo(IRepositoryQuery query) {
query.setSummary(getQueryTitle());
query.setAttribute(IGistQueryConstants.USER, userText.getText().trim());
}
}