/******************************************************************************* * Copyright (c) 2007 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.wst.server.ui.internal.view.servers; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; public class ServerViewerComparator extends ViewerComparator { public static final int MAX_DEPTH = 3; public static final int ASCENDING = 1; public static final int DESCENDING = -1; protected ServerTableLabelProvider labelProvider; protected int[] priorities = new int[] { 0 }; protected int[] directions = new int[] { ASCENDING }; public ServerViewerComparator(ServerTableLabelProvider labelProvider) { this.labelProvider = labelProvider; } public void setTopPriority(int priority) { if (priorities[0] == priority) return; int len = priorities.length + 1; if (len > MAX_DEPTH) len = MAX_DEPTH; int[] temp = new int[len]; System.arraycopy(priorities, 0, temp, 1, len - 1); temp[0] = priority; priorities = temp; temp = new int[len]; System.arraycopy(directions, 0, temp, 1, len - 1); temp[0] = ASCENDING; directions = temp; } public int getTopPriority() { return priorities[0]; } public void setTopPriorityDirection(int direction) { if (direction == ASCENDING || direction == DESCENDING) { directions[0] = direction; } } public int getTopPriorityDirection() { return directions[0]; } public void reverseTopPriority() { directions[0] *= -1; } public int compare(Viewer viewer, Object e1, Object e2, int a) { int col = priorities[a]; String s1 = labelProvider.getColumnText(e1, col); String s2 = labelProvider.getColumnText(e2, col); int s = s1.compareToIgnoreCase(s2) * directions[a]; if (s == 0) { if (a == priorities.length - 1) return 0; return compare(viewer, e1, e2, a+1); } return s; } public int compare(Viewer viewer, Object e1, Object e2) { return compare(viewer, e1, e2, 0); } }