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