/*******************************************************************************
 * Copyright (c) 2004, 2008 Tasktop Technologies 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:
 *     Tasktop Technologies - initial API and implementation
 *******************************************************************************/

package org.eclipse.mylyn.internal.monitor.usage;

import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.mylyn.internal.monitor.core.collection.InteractionEventSummary;

/**
 * Sorts SingleSummary objects based on type, id, name, or usage count.
 */
public class InteractionEventSummarySorter extends ViewerSorter {

	/**
	 * Constructor argument values that indicate to sort items by different columns.
	 */
	public final static int TYPE = 1;

	public final static int ID = 2;

	public final static int NAME = 3;

	public final static int USAGE_COUNT = 4;

	// Criteria that the instance uses
	private final int criteria;

	/**
	 * Creates a resource sorter that will use the given sort criteria.
	 * 
	 * @param criteria
	 *            the sort criterion to use: one of <code>LABEL_VIEW_REPOSITORIES</code> or <code>TYPE</code>
	 */
	public InteractionEventSummarySorter(int criteria) {
		super();
		this.criteria = criteria;
	}

	@Override
	public int compare(Viewer viewer, Object obj1, Object obj2) {
		InteractionEventSummary summary1 = (InteractionEventSummary) obj1;
		InteractionEventSummary summary2 = (InteractionEventSummary) obj2;

		switch (criteria) {
		case TYPE:
			return compareTypes(summary1, summary2);
		case NAME:
			return compareNames(summary1, summary2);
		case USAGE_COUNT:
			return compareUsageCount(summary2, summary1);
		default:
			return 0;
		}
	}

	/**
	 * Returns a number reflecting the collation order of the given summaries based on their usage count.
	 * 
	 * @param summary1
	 * @param summary2
	 * @return a negative number if the first element is less than the second element; the value <code>0</code> if the
	 *         first element is equal to the second element; and a positive number if the first element is greater than
	 *         the second element
	 */
	private int compareUsageCount(InteractionEventSummary summary1, InteractionEventSummary summary2) {
		int result = summary1.getUsageCount() - summary2.getUsageCount();
		result = result < 0 ? -1 : (result > 0) ? 1 : 0;
		return result;
	}

	/**
	 * Returns a number reflecting the collation order of the given summaries based on their names.
	 * 
	 * @param summary1
	 *            the first task element to be ordered
	 * @param summary2
	 *            the second task element to be ordered
	 * @return a negative number if the first element is less than the second element; the value <code>0</code> if the
	 *         first element is equal to the second element; and a positive number if the first element is greater than
	 *         the second element
	 */
	@SuppressWarnings("unchecked")
	protected int compareNames(InteractionEventSummary summary1, InteractionEventSummary summary2) {
		return getComparator().compare(summary1.getName(), summary2.getName());
	}

	/**
	 * Returns a number reflecting the collation order of the given summaries based on their types.
	 * 
	 * @param summary1
	 *            the first task element to be ordered
	 * @param summary2
	 *            the second task element to be ordered
	 * @return a negative number if the first element is less than the second element; the value <code>0</code> if the
	 *         first element is equal to the second element; and a positive number if the first element is greater than
	 *         the second element
	 */
	@SuppressWarnings("unchecked")
	protected int compareTypes(InteractionEventSummary summary1, InteractionEventSummary summary2) {
		return getComparator().compare(summary1.getType(), summary2.getType());
	}

	/**
	 * Returns the sort criteria of this this sorter.
	 * 
	 * @return the sort criterion
	 */
	public int getCriteria() {
		return criteria;
	}
}
