/****************************************************************************** * 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.pr; import java.util.LinkedList; import java.util.List; import org.eclipse.egit.github.core.service.IssueService; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.mylyn.internal.github.core.QueryUtils; import org.eclipse.mylyn.internal.github.ui.GitHubRepositoryQueryPage; import org.eclipse.mylyn.tasks.core.IRepositoryQuery; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; /** * GitHub pull request repository query page class. */ public class PullRequestRepositoryQueryPage extends GitHubRepositoryQueryPage { private Button openButton; private Button closedButton; private Text titleText; private SelectionListener completeListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { setPageComplete(isPageComplete()); } }; /** * @param pageName * @param taskRepository * @param query */ public PullRequestRepositoryQueryPage(String pageName, TaskRepository taskRepository, IRepositoryQuery query) { super(pageName, taskRepository, query); setDescription(Messages.PullRequestRepositoryQueryPage_Description); setPageComplete(false); } /** * @param taskRepository * @param query */ public PullRequestRepositoryQueryPage(TaskRepository taskRepository, IRepositoryQuery query) { this("prQueryPage", taskRepository, query); //$NON-NLS-1$ } private void createOptionsArea(Composite parent) { Composite optionsArea = new Composite(parent, SWT.NONE); GridLayoutFactory.fillDefaults().numColumns(2).applyTo(optionsArea); GridDataFactory.fillDefaults().grab(true, true).applyTo(optionsArea); Composite statusArea = new Composite(optionsArea, SWT.NONE); GridLayoutFactory.fillDefaults().numColumns(4).equalWidth(false) .applyTo(statusArea); GridDataFactory.fillDefaults().grab(true, false).span(2, 1) .applyTo(statusArea); new Label(statusArea, SWT.NONE) .setText(Messages.PullRequestRepositoryQueryPage_LabelStatus); openButton = new Button(statusArea, SWT.CHECK); openButton.setSelection(true); openButton.setText(Messages.PullRequestRepositoryQueryPage_StatusOpen); openButton.addSelectionListener(this.completeListener); closedButton = new Button(statusArea, SWT.CHECK); closedButton.setSelection(true); closedButton .setText(Messages.PullRequestRepositoryQueryPage_StatusClosed); closedButton.addSelectionListener(this.completeListener); } /** * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { Composite displayArea = new Composite(parent, SWT.NONE); GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(true) .applyTo(displayArea); GridDataFactory.fillDefaults().grab(true, true).applyTo(displayArea); if (!inSearchContainer()) { Composite titleArea = new Composite(displayArea, SWT.NONE); GridLayoutFactory.fillDefaults().numColumns(2).applyTo(titleArea); GridDataFactory.fillDefaults().grab(true, false).span(2, 1) .applyTo(titleArea); new Label(titleArea, SWT.NONE) .setText(Messages.PullRequestRepositoryQueryPage_LabelTitle); titleText = new Text(titleArea, SWT.SINGLE | SWT.BORDER); GridDataFactory.fillDefaults().grab(true, false).applyTo(titleText); titleText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(isPageComplete()); } }); } createOptionsArea(displayArea); initialize(); setControl(displayArea); } private void initialize() { IRepositoryQuery query = getQuery(); if (query == null) return; titleText.setText(query.getSummary()); List<String> status = QueryUtils.getAttributes( IssueService.FILTER_STATE, query); closedButton.setSelection(status.contains(IssueService.STATE_CLOSED)); openButton.setSelection(status.contains(IssueService.STATE_OPEN)); } /** * @see org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositoryQueryPage#isPageComplete() */ public boolean isPageComplete() { boolean complete = super.isPageComplete(); if (complete) { String message = null; if (!openButton.getSelection() && !closedButton.getSelection()) message = Messages.PullRequestRepositoryQueryPage_MessageSelectStatus; setErrorMessage(message); complete = message == null; } return complete; } /** * @see org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositoryQueryPage#getQueryTitle() */ public String getQueryTitle() { return this.titleText != null ? this.titleText.getText() : null; } /** * @see org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositoryQueryPage#applyTo(org.eclipse.mylyn.tasks.core.IRepositoryQuery) */ public void applyTo(IRepositoryQuery query) { query.setSummary(getQueryTitle()); List<String> statuses = new LinkedList<String>(); if (openButton.getSelection()) statuses.add(IssueService.STATE_OPEN); if (closedButton.getSelection()) statuses.add(IssueService.STATE_CLOSED); QueryUtils.setAttribute(IssueService.FILTER_STATE, statuses, query); } }