blob: f4129b87bb7e2c9c629f4a4df5b68c6f05b30777 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2012 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
*******************************************************************************/
package org.eclipse.mylyn.internal.bugzilla.ui;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaAttribute;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaClient;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaClientManager;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaCorePlugin;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaRepositoryConnector;
import org.eclipse.mylyn.internal.bugzilla.core.IBugzillaConstants;
import org.eclipse.mylyn.internal.bugzilla.core.RepositoryConfiguration;
import org.eclipse.mylyn.tasks.ui.TasksUi;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The main plugin class to be used in the desktop.
*
* @author Mik Kersten
*/
public class BugzillaUiPlugin extends AbstractUIPlugin {
public static final String ID_PLUGIN = "org.eclipse.mylyn.bugzilla.ui"; //$NON-NLS-1$
public static final String SEARCH_PAGE_ID = BugzillaUiPlugin.ID_PLUGIN + ".search.bugzillaSearchPage"; //$NON-NLS-1$
public static final String SEARCH_PAGE_CONTEXT = BugzillaUiPlugin.ID_PLUGIN + ".bugzillaSearchContext"; //$NON-NLS-1$
public static final String EDITOR_PAGE_CONTEXT = BugzillaUiPlugin.ID_PLUGIN + ".bugzillaEditorContext"; //$NON-NLS-1$
public static final String ATTACHMENT_WIZARD_SETTINGS_SECTION = "BugzillaAttachmentWizard."; //$NON-NLS-1$
// The is's for hit markers used in the label provider and sorters
public static final String HIT_MARKER_ATTR_ID = "taskId"; //$NON-NLS-1$
public static final String HIT_MARKER_ATTR_REPOSITORY = "repository"; //$NON-NLS-1$
public static final String HIT_MARKER_ATTR_HREF = "href"; //$NON-NLS-1$
public static final String HIT_MARKER_ATTR_DESC = "summary"; //$NON-NLS-1$
public static final String HIT_MARKER_ATTR_LABEL = "label"; //$NON-NLS-1$
public static final String HIT_MARKER_ATTR_SEVERITY = "severity"; //$NON-NLS-1$
public static final String HIT_MARKER_ATTR_PRIORITY = "priority"; //$NON-NLS-1$
public static final String HIT_MARKER_ATTR_PLATFORM = "platform"; //$NON-NLS-1$
public static final String HIT_MARKER_ATTR_STATE = "state"; //$NON-NLS-1$
public static final String HIT_MARKER_ATTR_RESULT = "result"; //$NON-NLS-1$
public static final String HIT_MARKER_ATTR_OWNER = "owner"; //$NON-NLS-1$
public static final String HIT_MARKER_ATTR_QUERY = "query"; //$NON-NLS-1$
/**
* XXX: remove?
*/
public static final String HIT_MARKER_ID = BugzillaUiPlugin.ID_PLUGIN + ".searchHit"; //$NON-NLS-1$
private static BugzillaUiPlugin plugin;
public static final char PREF_DELIM_REPOSITORY = ':';
private static final int WRAP_LENGTH = 90;
@SuppressWarnings("restriction")
public BugzillaUiPlugin() {
plugin = this;
org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin.getDefault().addSearchHandler(new BugzillaSearchHandler());
}
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
getPreferenceStore().setDefault(IBugzillaConstants.MAX_RESULTS, 100);
BugzillaRepositoryConnector bugzillaConnector = (BugzillaRepositoryConnector) TasksUi.getRepositoryManager()
.getRepositoryConnector(BugzillaCorePlugin.CONNECTOR_KIND);
BugzillaClientManager clientManager = bugzillaConnector.getClientManager();
TasksUi.getRepositoryManager().addListener(clientManager);
// NOTE: initializing extensions in start(..) has caused race
// conditions previously
BugzillaUiExtensionReader.initStartupExtensions();
}
public int getMaxResults() {
return getPreferenceStore().getInt(IBugzillaConstants.MAX_RESULTS);
}
/**
* This method is called when the plug-in is stopped
*/
@Override
public void stop(BundleContext context) throws Exception {
BugzillaRepositoryConnector bugzillaConnector = (BugzillaRepositoryConnector) TasksUi.getRepositoryManager()
.getRepositoryConnector(BugzillaCorePlugin.CONNECTOR_KIND);
TasksUi.getRepositoryManager().removeListener(bugzillaConnector.getClientManager());
super.stop(context);
plugin = null;
}
/**
* Returns the shared instance.
*/
public static BugzillaUiPlugin getDefault() {
return plugin;
}
/**
* Returns an image descriptor for the image file at the given plug-in relative path.
*
* @param path
* the path
* @return the image descriptor
*/
public static ImageDescriptor getImageDescriptor(String path) {
return AbstractUIPlugin.imageDescriptorFromPlugin(ID_PLUGIN, path);
}
public static String[] getQueryOptions(String prefId, String[] selectedProducts,
RepositoryConfiguration repositoryConfiguration) {
List<String> options = new ArrayList<String>();
if ((prefId.equals(IBugzillaConstants.VALUES_COMPONENT) || prefId.equals(IBugzillaConstants.VALUES_VERSION) || prefId.equals(IBugzillaConstants.VALUES_TARGET))
&& selectedProducts != null) {
for (String product : selectedProducts) {
if (prefId.equals(IBugzillaConstants.VALUES_COMPONENT)) {
for (String option : repositoryConfiguration.getProductOptionValues(BugzillaAttribute.COMPONENT,
product)) {
if (!options.contains(option)) {
options.add(option);
}
}
}
if (prefId.equals(IBugzillaConstants.VALUES_VERSION)) {
for (String option : repositoryConfiguration.getProductOptionValues(BugzillaAttribute.VERSION,
product)) {
if (!options.contains(option)) {
options.add(option);
}
}
}
if (prefId.equals(IBugzillaConstants.VALUES_TARGET)) {
for (String option : repositoryConfiguration.getProductOptionValues(
BugzillaAttribute.TARGET_MILESTONE, product)) {
if (!options.contains(option)) {
options.add(option);
}
}
}
}
} else {
if (prefId.equals(IBugzillaConstants.VALUES_COMPONENT)) {
options = repositoryConfiguration.getOptionValues(BugzillaAttribute.COMPONENT);
}
if (prefId.equals(IBugzillaConstants.VALUES_VERSION)) {
options = repositoryConfiguration.getOptionValues(BugzillaAttribute.VERSION);
}
if (prefId.equals(IBugzillaConstants.VALUES_TARGET)) {
options = repositoryConfiguration.getOptionValues(BugzillaAttribute.TARGET_MILESTONE);
}
}
return options.toArray(new String[options.size()]);
}
public static String getMostRecentQuery() {
return plugin.getPreferenceStore().getString(IBugzillaConstants.MOST_RECENT_QUERY);
}
/**
* Break text up into lines so that it is displayed properly in bugzilla
*
* @deprecated use {@link BugzillaClient#formatTextToLineWrap(String, boolean)} instead
*/
@Deprecated
public static String formatTextToLineWrap(String origText, boolean hardWrap) {
// BugzillaServerVersion bugzillaServerVersion =
// IBugzillaConstants.BugzillaServerVersion.fromString(repository
// .getVersion());
// if (bugzillaServerVersion != null &&
// bugzillaServerVersion.compareTo(BugzillaServerVersion.SERVER_220) >=
// 0) {
// return origText;
if (!hardWrap) {
return origText;
} else {
String[] textArray = new String[(origText.length() / WRAP_LENGTH + 1) * 2];
for (int i = 0; i < textArray.length; i++) {
textArray[i] = null;
}
int j = 0;
while (true) {
int spaceIndex = origText.indexOf(" ", WRAP_LENGTH - 5); //$NON-NLS-1$
if (spaceIndex == origText.length() || spaceIndex == -1) {
textArray[j] = origText;
break;
}
textArray[j] = origText.substring(0, spaceIndex);
origText = origText.substring(spaceIndex + 1, origText.length());
j++;
}
String newText = ""; //$NON-NLS-1$
for (String element : textArray) {
if (element == null) {
break;
}
newText += element + "\n"; //$NON-NLS-1$
}
return newText;
}
}
}