/*
 * Copyright (c) 2011, Patrik Dufresne. All rights reserved.
 * Patrik Dufresne PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package com.planimod.core.comparators;

import java.util.Comparator;

import org.apache.commons.collections.ComparatorUtils;
import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.comparators.ComparatorChain;

import com.planimod.core.Task;

/**
 * Utility class used to provide comparators for {@link Task} class.
 * 
 * @author Patrik Dufresne
 * 
 */
public class TaskComparators {

	/**
	 * Compare {@link Task} by team, by date and Section
	 * 
	 * @return the comparator
	 */
	public static Comparator<Task> byTeam() {
		ComparatorChain chain = new ComparatorChain();

		chain.addComparator(ComparatorUtils.nullHighComparator(ComparatorUtils
				.transformedComparator(TeamComparators.byName(),
						new Transformer() {
							@Override
							public Object transform(Object input) {
								return ((Task) input).getProductionEvent()
										.getShift().getTeam();
							}
						})));

		chain.addComparator(ComparatorUtils.nullHighComparator(ComparatorUtils
				.transformedComparator(TimeRangeComparators.byDate(),
						new Transformer() {
							@Override
							public Object transform(Object input) {
								return ((Task) input).getProductionEvent()
										.getShift();
							}
						})));

		chain.addComparator(ComparatorUtils.nullHighComparator(ComparatorUtils
				.transformedComparator(SectionComparators.byName(),
						new Transformer() {
							@Override
							public Object transform(Object input) {
								return ((Task) input).getPosition()
										.getSection();
							}
						})));

		return chain;
	}

}
