/******************************************************************************* * Copyright (c) 2016 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.windup.ui.internal.explorer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.ui.views.navigator.ResourceComparator; import org.jboss.tools.windup.ui.internal.explorer.IssueExplorerContentProvider.ReportNode; import org.jboss.tools.windup.ui.internal.explorer.IssueExplorerContentProvider.RootReportNode; import org.jboss.tools.windup.ui.internal.explorer.IssueExplorerContentProvider.TreeNode; import com.google.common.base.Objects; /** * Issue explorer comparator. */ public class IssueExplorerComparator extends ResourceComparator { public IssueExplorerComparator() { super(NAME); } @Override public int compare(Viewer viewer, Object o1, Object o2) { if (o1 instanceof MarkerNode && o2 instanceof MarkerNode) { MarkerNode n1 = (MarkerNode)o1; MarkerNode n2 = (MarkerNode)o2; o1 = n1.getMarker().getResource(); o2 = n2.getMarker().getResource(); if (Objects.equal(o1, o2)) { return compareLineNumber(n1, n2); } } if (o1 instanceof ReportNode || o1 instanceof RootReportNode) { return -1; } if (o2 instanceof ReportNode || o1 instanceof RootReportNode) { return 1; } if (o1 instanceof TreeNode) { o1 = ((TreeNode)o1).getSegment(); } if (o2 instanceof TreeNode) { o2 = ((TreeNode)o2).getSegment(); } return super.compare(viewer, o1, o2); } private int compareLineNumber(MarkerNode n1, MarkerNode n2) { return new Integer(n1.getLineNumber()).compareTo(n2.getLineNumber()); } }