// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.mdm.repository.ui.markers.datamodel;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.IMarker;
import org.eclipse.ui.views.markers.MarkerField;
import org.eclipse.ui.views.markers.MarkerItem;
import org.eclipse.ui.views.markers.internal.FieldCategory;
import org.eclipse.ui.views.markers.internal.MarkerGroup;
import org.eclipse.ui.views.markers.internal.MarkerGroupingEntry;
import org.talend.mdm.repository.core.validate.i18n.Messages;
/**
* created by HHB on 2013-1-25 Detailled comment
*
*/
public class ModelNameMarkerGroup extends MarkerGroup {
protected static final String BLANK = ""; //$NON-NLS-1$
/**
*
*/
public static final String ID = "org.talend.mdm.error.datamodel.groupby.model"; //$NON-NLS-1$
private Map entries = new HashMap();
class ModelNameMarkerField extends MarkerField {
ModelNameMarkerField() {
super();
}
@Override
public String getValue(MarkerItem item) {
if (item.getMarker() != null) {
IMarker marker = item.getMarker();
if (marker == null || !marker.exists()) {
// Uncategorized
return Messages.ModelNameMarkerGroup_Uncategorized;
}
String groupName = ModelMarkerHelper.getModelName(marker);
if (groupName == null) {
return BLANK;
}
return groupName;
}
return ""; //$NON-NLS-1$
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.views.markers.internal.MarkerGroup.GroupMarkerField#compare(org.eclipse.ui.views.markers.
* MarkerItem, org.eclipse.ui.views.markers.MarkerItem)
*/
@Override
public int compare(MarkerItem item1, MarkerItem item2) {
return getValue(item1).compareTo(getValue(item2));
}
@Override
public String getName() {
return ModelNameMarkerGroup.this.getTitle();
}
}
private String name;
public ModelNameMarkerGroup() {
super(null);
this.name = Messages.ModelNameMarkerGroup_modelName;
}
/**
* Create the fields for the marker views.
*/
@Override
protected void createFields() {
field = new FieldCategory();
markerField = new ModelNameMarkerField();
}
@Override
public MarkerGroupingEntry findGroupValue(String typeId, IMarker marker) {
String groupName = ModelMarkerHelper.getModelName(marker);
ModelNameMarkerGroupingEntry entry = (ModelNameMarkerGroupingEntry) entries.get(groupName);
if (entry == null) {
entry = new ModelNameMarkerGroupingEntry(groupName);
entry.setGroup(this);
entries.put(groupName, entry);
}
return entry;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.views.markers.internal.MarkerGroup#getId()
*/
@Override
public String getId() {
return ID;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.views.markers.internal.MarkerGroup#getTitle()
*/
@Override
public String getTitle() {
return name;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.views.markers.internal.MarkerGroup#getEntriesComparator()
*/
@Override
public Comparator getEntriesComparator() {
return new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return ((MarkerGroupingEntry) o1).getLabel().compareTo(((MarkerGroupingEntry) o2).getLabel());
}
};
}
private class ModelNameMarkerGroupingEntry extends MarkerGroupingEntry {
public ModelNameMarkerGroupingEntry(String label) {
super(label);
}
}
}