blob: 5f4a3e8ddd9f9a758f16840a5902ac9a0f39e67b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2009 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.views.markers.internal;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.ui.internal.ide.Policy;
import org.eclipse.ui.views.markers.MarkerItem;
/**
* The TypeMarkerGroup is a MarkerGroup used for the sorting by type which
* cannot be expressed currently using the markerSupport extension point.
*
* @since 3.4
*
*/
public class TypeMarkerGroup extends MarkerGroup {
private Map entries=new HashMap();
/**
* TypeMarkerField is the MarkerField used for MarkerGroupungs
*
* @since 3.4
*
*/
class TypeMarkerField extends GroupMarkerField {
/**
* Create a new instance of the receiver.
*/
TypeMarkerField() {
super();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#getValue(org.eclipse.ui.internal.provisional.views.markers.api.MarkerItem)
*/
public String getValue(MarkerItem item) {
if (item.getMarker() != null) {
IMarker marker = item.getMarker();
if (marker == null || !marker.exists())
return MarkerMessages.FieldCategory_Uncategorized;
String groupName = MarkerSupportRegistry.getInstance()
.getCategory(marker);
if (groupName == null) {
String typeId;
try {
typeId = marker.getType();
} catch (CoreException e) {
Policy.handle(e);
return MarkerMessages.FieldCategory_Uncategorized;
}
MarkerType type = MarkerTypesModel.getInstance().getType(
typeId);
groupName = type.getLabel();
}
return groupName;
}
return Util.EMPTY_STRING;
}
/* (non-Javadoc)
* @see org.eclipse.ui.views.markers.internal.MarkerGroup.GroupMarkerField#compare(org.eclipse.ui.views.markers.MarkerItem, org.eclipse.ui.views.markers.MarkerItem)
*/
public int compare(MarkerItem item1, MarkerItem item2) {
return getValue(item1).compareTo(getValue(item2));
}
}
private String name;
/**
* Create a new instance of the receiver.
*
* @param name
*/
public TypeMarkerGroup(String name) {
super(null);
this.name = name;
}
/**
* Create the fields for the marker views.
*/
protected void createFields() {
field = new FieldCategory();
markerField = new TypeMarkerField();
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.views.markers.internal.MarkerGroup#findGroupValue(java
* .lang.String, org.eclipse.core.resources.IMarker)
*/
public MarkerGroupingEntry findGroupValue(String typeId, IMarker marker) {
TypesMarkerGroupingEntry entry = (TypesMarkerGroupingEntry) entries
.get(typeId);
if (entry == null) {
String groupName = MarkerSupportRegistry.getInstance().getCategory(
marker);
if (groupName == null) {
MarkerType mkType = MarkerTypesModel.getInstance().getType(
typeId);
groupName = mkType.getLabel();
}
entry = new TypesMarkerGroupingEntry(groupName);
entry.setGroup(this);
entries.put(typeId, entry);
}
return entry;
}
/* (non-Javadoc)
* @see org.eclipse.ui.views.markers.internal.MarkerGroup#getId()
*/
public String getId() {
return Util.TYPE_MARKER_GROUPING_ID;
}
/* (non-Javadoc)
* @see org.eclipse.ui.views.markers.internal.MarkerGroup#getTitle()
*/
public String getTitle() {
return name;
}
/* (non-Javadoc)
* @see org.eclipse.ui.views.markers.internal.MarkerGroup#getEntriesComparator()
*/
public Comparator getEntriesComparator() {
return new Comparator() {
public int compare(Object o1, Object o2) {
//TODO: use a collator to compare?
return ((MarkerGroupingEntry) o1).getLabel().compareTo(
((MarkerGroupingEntry) o2).getLabel());
}
};
}
private class TypesMarkerGroupingEntry extends MarkerGroupingEntry {
public TypesMarkerGroupingEntry(String label) {
super(label);
}
}
}