blob: a9d762cb5a1ac2544f0bd454171aff41214aef21 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 20072008 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.ui.internal.views.markers;
import java.net.URL;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.resource.ResourceManager;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.internal.ide.IDEInternalPreferences;
import org.eclipse.ui.internal.ide.IDEInternalWorkbenchImages;
import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
import org.eclipse.ui.internal.ide.Policy;
import org.eclipse.ui.internal.util.BundleUtility;
import org.eclipse.ui.statushandlers.StatusAdapter;
import org.eclipse.ui.views.markers.FilterConfigurationArea;
import org.eclipse.ui.views.markers.MarkerField;
import org.eclipse.ui.views.markers.MarkerFieldFilter;
import org.eclipse.ui.views.markers.MarkerItem;
import org.eclipse.ui.views.markers.internal.MarkerGroup;
import org.eclipse.ui.views.markers.internal.MarkerGroupingEntry;
import com.ibm.icu.text.CollationKey;
import com.ibm.icu.text.Collator;
/**
* MarkerSupportUtilities is the class that maintains constants and
* functionality used by multiple classes.
*
* @since 3.4
*
*/
public class MarkerSupportInternalUtilities {
static final String ATTRIBUTE_CLASS = "class"; //$NON-NLS-1$
private static final String ATTRIBUTE_FILTER_CLASS = "filterClass"; //$NON-NLS-1$
private static final String ATTRIBUTE_FILTER_CONFIGURATION_CLASS = "filterConfigurationClass"; //$NON-NLS-1$
/**
* The icon attribute name from a configuration element.
*/
public static final String ATTRIBUTE_ICON = "icon"; //$NON-NLS-1$
/**
* The id attribute name from a configuration element.
*/
public static final String ATTRIBUTE_ID = "id"; //$NON-NLS-1$
/**
* The name attribute name from a configuration element.
*/
public static final String ATTRIBUTE_NAME = "name"; //$NON-NLS-1$
/**
* The name attribute name from a configuration element.
*/
public static final String ATTRIBUTE_TYPE = "type"; //$NON-NLS-1$
static final Object CONTAINS_MODIFIER_TOKEN = new Object();
static final Object CONTAINS_TEXT_TOKEN = new Object();
static final CollationKey EMPTY_COLLATION_KEY = Collator.getInstance()
.getCollationKey(MarkerSupportInternalUtilities.EMPTY_STRING);
static final IMarker[] EMPTY_MARKER_ARRAY = new IMarker[0];
static final MarkerSupportItem[] EMPTY_MARKER_ITEM_ARRAY = new MarkerSupportItem[0];
static final IResource[] EMPTY_RESOURCE_ARRAY = new IResource[0];
/**
* A reusable empty {@link String}
*/
public static final String EMPTY_STRING = ""; //$NON-NLS-1$
/**
* The configuration element constant for false
*/
static final String FALSE = "false"; //$NON-NLS-1$
/**
* The markers help decoration.
*/
public static final String IMG_MARKERS_HELP_DECORATION_PATH = "markers/help_small.gif"; //$NON-NLS-1$
/**
* The markers quick fix decoration.
*/
public static final String IMG_MARKERS_QUICK_FIX_DECORATION_PATH = "markers/contassist_ovr.gif"; //$NON-NLS-1$
/**
* The suffix to the view names for the legacy markers views.
*/
public static final String LEGACY_SUFFIX = ".old"; //$NON-NLS-1$
/**
* A constant to map migration to the filter being migrated
*/
public static final String MIGRATE_PREFERENCE_CONSTANT = "_MIGRATE"; //$NON-NLS-1$
/**
* Constant for the bookmark filters migration.
*/
public static final String MIGRATE_BOOKMARK_FILTERS = IDEInternalPreferences.BOOKMARKS_FILTERS
+ MIGRATE_PREFERENCE_CONSTANT;
/**
* Constant for the problem filters migration.
*/
public static final String MIGRATE_PROBLEM_FILTERS = IDEInternalPreferences.PROBLEMS_FILTERS
+ MIGRATE_PREFERENCE_CONSTANT;
/**
* Constant for the task filters migration.
*/
public static final String MIGRATE_TASK_FILTERS = IDEInternalPreferences.TASKS_FILTERS
+ MIGRATE_PREFERENCE_CONSTANT;
/**
* The string value of the false value for a boolean attribute.
*/
public static final Object VALUE_FALSE = "false"; //$NON-NLS-1$
/**
* Create the image at the supplied path.
*
* @param completeImagePath
* @param manager the resource manager to allocate the image in
* @return Image or <code>null</code>.
*/
static final Image createImage(String completeImagePath, ResourceManager manager) {
URL url = BundleUtility.find(IDEWorkbenchPlugin.getDefault()
.getBundle().getSymbolicName(), completeImagePath);
if (url == null)
return null;
return manager.createImageWithDefault(ImageDescriptor.createFromURL(url));
}
/**
* Return a StatusAdapter for the error
*
* @param exception
* @return StatusAdapter
*/
static final StatusAdapter errorFor(Throwable exception) {
IStatus status = new Status(IStatus.ERROR,
IDEWorkbenchPlugin.IDE_WORKBENCH, IStatus.ERROR, exception
.getLocalizedMessage(), exception);
return new StatusAdapter(status);
}
/**
* Generate the filter for the receiver from the configurationElement.
*
* @param field
* the field being generated
* @return MarkerFieldFilter or <code>null</code>.
*/
static final MarkerFieldFilter generateFilter(MarkerField field) {
IConfigurationElement configurationElement = field
.getConfigurationElement();
try {
if (configurationElement.getAttribute(ATTRIBUTE_FILTER_CLASS) == null)
return null;
Object filter = IDEWorkbenchPlugin.createExtension(
configurationElement, ATTRIBUTE_FILTER_CLASS);
if (filter == null)
return null;
MarkerFieldFilter fieldFilter = (MarkerFieldFilter) filter;
fieldFilter.setField(field);
return fieldFilter;
} catch (CoreException e) {
Policy.handle(e);
return null;
}
}
/**
* Create a FilterConfigurationArea for the receiver.
*
* @param field
* the field with the specified area
* @return FilterConfigurationArea or <code>null</code>
*/
static final FilterConfigurationArea generateFilterArea(MarkerField field) {
IConfigurationElement configurationElement = field
.getConfigurationElement();
try {
if (configurationElement
.getAttribute(ATTRIBUTE_FILTER_CONFIGURATION_CLASS) == null)
return null;
FilterConfigurationArea area = (FilterConfigurationArea) IDEWorkbenchPlugin
.createExtension(configurationElement,
ATTRIBUTE_FILTER_CONFIGURATION_CLASS);
if (area != null)
area.setField(field);
return area;
} catch (CoreException e) {
Policy.handle(e);
return null;
}
}
/**
* Return the children of the given marker item (may return an array of
* length 0)
*
* @param markerItem
* @return the children
*/
public static final MarkerItem[] getChildren(MarkerItem markerItem) {
if (markerItem instanceof MarkerCategory) {
return ((MarkerCategory) markerItem).getChildren();
}
return EMPTY_MARKER_ITEM_ARRAY;
}
/**
* Determine the average width of font used by the control.
*
* @param control
* @return int
*/
public static final int getFontWidth(Control control) {
GC gc = new GC(control.getDisplay());
int width = gc.getFontMetrics().getAverageCharWidth();
gc.dispose();
return width;
}
/**
* Return the group value of the item in group.
*
* @param group
* @param item
* @return String
*/
public static final String getGroupValue(MarkerGroup group, MarkerItem item) {
if (item.getMarker() == null)
return ((MarkerSupportItem) item).getDescription();
try {
MarkerGroupingEntry groupingEntry = group.findGroupValue(item
.getMarker().getType(), item.getMarker());
return groupingEntry.getLabel();
} catch (CoreException exception) {
Policy.handle(exception);
return MarkerSupportInternalUtilities.EMPTY_STRING;
}
}
/**
* Returns the highest severity of the given marker item and all its
* children.
*
* @param markerItem
* @return the severity
*/
public static final int getHighestSeverity(MarkerItem markerItem) {
if (markerItem instanceof MarkerCategory) {
MarkerCategory category = (MarkerCategory) markerItem;
return category.getHighestSeverity();
}
IMarker marker = markerItem.getMarker();
Assert.isNotNull(marker);
return marker.getAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO);
}
/**
* Return the id for the field.
*
* @param field
* @return String
*/
public static final String getId(MarkerField field) {
return field.getConfigurationElement().getAttribute(
MarkerSupportInternalUtilities.ATTRIBUTE_ID);
}
/**
* Get the IDE image at path.
*
* @param constantName
* @return Image
*/
private static Image getIDEImage(String constantName) {
return JFaceResources.getResources().createImageWithDefault(
IDEInternalWorkbenchImages.getImageDescriptor(constantName));
}
/**
* Get the marker limit for the receiver.
*
* @return int
*/
static int getMarkerLimit() {
// If limits are enabled return it. Otherwise return -1
if (IDEWorkbenchPlugin.getDefault().getPreferenceStore().getBoolean(
IDEInternalPreferences.USE_MARKER_LIMITS)) {
return IDEWorkbenchPlugin.getDefault().getPreferenceStore().getInt(
IDEInternalPreferences.MARKER_LIMITS_VALUE);
}
return -1;
}
/**
* Return the severity value for item. A value of -1 indicates
* that there is no severity value.
*
* @param item
* @return int
*/
static int getSeverity(MarkerItem item) {
return item.getAttributeValue(IMarker.SEVERITY, -1);
}
/**
* Get the image for the supplied severity
*
* @param severity
* @return {@link Image}
*/
public static Image getSeverityImage(int severity) {
if (severity == IMarker.SEVERITY_ERROR) {
return getIDEImage(IDEInternalWorkbenchImages.IMG_OBJS_ERROR_PATH);
}
if (severity == IMarker.SEVERITY_WARNING) {
return getIDEImage(IDEInternalWorkbenchImages.IMG_OBJS_WARNING_PATH);
}
if (severity == IMarker.SEVERITY_INFO) {
return getIDEImage(IDEInternalWorkbenchImages.IMG_OBJS_INFO_PATH);
}
return null;
}
/**
* Create the MarkerItem that wraps marker.
*
* @param marker
* @return {@link MarkerItem}
*/
static MarkerItem newMarkerItem(IMarker marker) {
return new MarkerEntry(marker);
}
/**
* Show the marker in view if possible.
*
* @param view
* @param marker
* @return <code>true</code> if the marker is shown
*/
public static boolean showMarker(IViewPart view, IMarker marker) {
if (view instanceof ExtendedMarkersView) {
StructuredSelection selection = new StructuredSelection(marker);
ExtendedMarkersView markerView = (ExtendedMarkersView) view;
markerView.setSelection(selection, true);
return true;
}
return false;
}
}