/*******************************************************************************
* Copyright (c) 2011 Wind River Systems, Inc. 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:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.tm.te.tcf.ui.tables;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.tm.te.tcf.ui.nls.Messages;
import org.eclipse.tm.te.ui.tables.TableViewerComparator;
/**
* TCF node properties table viewer comparator implementation.
*/
public class NodePropertiesViewerComparator extends TableViewerComparator {
/**
* Constructor.
*
* @param viewer The parent viewer. Must not be <code>null</code>.
* @param labelProvider The table label provider. Must not be <code>null</code>.
*/
public NodePropertiesViewerComparator(Viewer viewer, ITableLabelProvider labelProvider) {
super(viewer, labelProvider);
}
/* (non-Javadoc)
* @see org.eclipse.tm.te.tcf.vtl.ui.tables.TableViewerComparator#doCompare(java.lang.Object, java.lang.Object, java.lang.String, int, int)
*/
@Override
protected int doCompare(Object node1, Object node2, String sortColumn, int index, int inverter) {
if (node1 != null && node2 != null) {
String t1 = doGetText(node1, index);
String t2 = doGetText(node2, index);
// Name column sorting
if (index == 0) {
// Special handling for empty text and last error text
if ("".equals(t1) || "".equals(t2) //$NON-NLS-1$ //$NON-NLS-2$
|| Messages.NodePropertiesLabelProvider_lastScannerError.equals(t1)
|| Messages.NodePropertiesLabelProvider_lastScannerError.equals(t2)) {
if (("".equals(t1) || Messages.NodePropertiesLabelProvider_lastScannerError.equals(t1)) //$NON-NLS-1$
&& !("".equals(t2) || Messages.NodePropertiesLabelProvider_lastScannerError.equals(t2))) { //$NON-NLS-1$
return 1;
}
if (!("".equals(t1) || Messages.NodePropertiesLabelProvider_lastScannerError.equals(t1)) //$NON-NLS-1$
&& ("".equals(t2) || Messages.NodePropertiesLabelProvider_lastScannerError.equals(t2))) { //$NON-NLS-1$
return -1;
}
if ("".equals(t1) && Messages.NodePropertiesLabelProvider_lastScannerError.equals(t2)) { //$NON-NLS-1$
return -1;
}
if ("".equals(t2) && Messages.NodePropertiesLabelProvider_lastScannerError.equals(t1)) { //$NON-NLS-1$
return 1;
}
}
// Special handling for "\t"
else if ("\t".equals(t1) || "\t".equals(t2)) { //$NON-NLS-1$ //$NON-NLS-2$
return 0;
}
}
// Value column sorting
else if (index == 1) {
String t11 = doGetText(node1, 0);
String t21 = doGetText(node2, 0);
// Special handling for "\t"
if ("\t".equals(t11) || "\t".equals(t21)) { //$NON-NLS-1$ //$NON-NLS-2$
return 0;
}
}
}
return super.doCompare(node1, node2, sortColumn, index, inverter);
}
}