blob: d60d9d5aa9ddb7c323be61fb3e46a8014a8cbacb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2013 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Tasktop Technologies - initial API and implementation
* Eugene Kuleshov - improvements
*******************************************************************************/
package org.eclipse.mylyn.internal.bugzilla.ui.tasklist;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.mylyn.internal.bugzilla.core.IBugzillaConstants;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.ui.TasksUiImages;
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.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
/**
* @author Rob Elves
* @author Mik Kersten
* @author Eugene Kuleshov
*/
public class BugzillaCustomQueryWizardPage extends AbstractRepositoryQueryPage {
private static final Pattern URL_PATTERN = Pattern.compile("([a-zA-Z][a-zA-Z+.-]{0,10}://[a-zA-Z0-9%._~!$&?#'()*+,;:@/=-]*/buglist.cgi?[a-zA-Z0-9%_~!$&?#'(*+;:@/=-])"); //$NON-NLS-1$
private Text queryText;
private final IRepositoryQuery query;
private Text queryTitle;
public BugzillaCustomQueryWizardPage(TaskRepository repository, IRepositoryQuery query) {
super(Messages.BugzillaCustomQueryWizardPage_Create_query_from_URL, repository, query);
this.query = query;
setTitle(Messages.BugzillaCustomQueryWizardPage_Create_query_from_URL);
setDescription(Messages.BugzillaCustomQueryWizardPage_Enter_the_title_and_URL_for_the_query);
setImageDescriptor(TasksUiImages.BANNER_REPOSITORY);
}
public BugzillaCustomQueryWizardPage(TaskRepository repository) {
this(repository, null);
}
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(2, false));
setControl(composite);
ModifyListener modifyListener = new ModifyListener() {
public void modifyText(ModifyEvent e) {
setPageComplete(isPageComplete());
}
};
final Label queryTitleLabel = new Label(composite, SWT.NONE);
queryTitleLabel.setText(Messages.BugzillaCustomQueryWizardPage_Query_Title);
queryTitle = new Text(composite, SWT.BORDER);
queryTitle.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
queryTitle.addModifyListener(modifyListener);
queryTitle.setFocus();
final Label queryUrlLabel = new Label(composite, SWT.NONE);
queryUrlLabel.setText(Messages.BugzillaCustomQueryWizardPage_Query_URL);
queryText = new Text(composite, SWT.BORDER | SWT.MULTI | SWT.WRAP);
final GridData gd_queryText = new GridData(GridData.FILL_BOTH);
gd_queryText.widthHint = 300;
queryText.setLayoutData(gd_queryText);
queryText.addModifyListener(modifyListener);
if (query != null) {
queryTitle.setText(query.getSummary());
queryText.setText(query.getUrl());
}
Dialog.applyDialogFont(composite);
}
@Override
public String getQueryTitle() {
return queryTitle.getText();
}
@Override
public boolean canFlipToNextPage() {
return false;
}
@Override
public boolean isPageComplete() {
if (super.isPageComplete()) {
if (queryText.getText().length() > 0) {
Matcher m = URL_PATTERN.matcher(queryText.getText());
if (m.find()) {
return true;
} else {
setErrorMessage(Messages.BugzillaCustomQueryWizardPage_No_Valid_Buglist_URL);
return false;
}
}
setErrorMessage(Messages.BugzillaCustomQueryWizardPage_Please_specify_Query_URL);
}
return false;
}
@Override
public void applyTo(IRepositoryQuery query) {
query.setSummary(this.getQueryTitle());
query.setUrl(queryText.getText());
query.setAttribute(IBugzillaConstants.ATTRIBUTE_BUGZILLA_QUERY_CUSTOM, Boolean.TRUE.toString());
}
}