/*******************************************************************************
 * Copyright (c) 2016 Chalmers | University of Gothenburg, rt-labs 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:
 *      Chalmers | University of Gothenburg and rt-labs - initial API and implementation and/or initial documentation
 *******************************************************************************/
package org.eclipse.capra.generic.priority;

import java.util.Collection;
import java.util.Comparator;

import org.eclipse.capra.core.handlers.IArtifactHandler;
import org.eclipse.capra.core.handlers.PriorityHandler;

/**
 * Provides a simple default policy for selecting an {@link IArtifactHandler} by
 * selecting the one which handles the more specific type. This is determined by
 * comparing the assignability of the classes handled by the
 * <code>ArtifactHandlers</code>.
 */
public class DefaultPriorityHandler implements PriorityHandler {

	@Override
	public <T> IArtifactHandler<? extends T> getSelectedHandler(
			Collection<? extends IArtifactHandler<? extends T>> handlers, Object artifact) {
		return handlers.stream().max(new ArtifactHandlerPriorityComparator()).get();
	}

	/**
	 * A comparator that compares two classes by whether the handled classes are
	 * assignable to each other. If instance A is of a type that is a superclass
	 * or superinterface of instance B, it will return A>B. A=B if the
	 * assignment works in both directions or if the assignment does not work at
	 * all.
	 */
	private class ArtifactHandlerPriorityComparator implements Comparator<IArtifactHandler<?>> {

		@Override
		public int compare(IArtifactHandler<?> o1, IArtifactHandler<?> o2) {
			if (!o1.getHandledClass().isAssignableFrom(o2.getHandledClass())
					&& o2.getHandledClass().isAssignableFrom(o1.getHandledClass())) {
				return 1;
			} else if (o1.getHandledClass().isAssignableFrom(o2.getHandledClass())
					&& !o2.getHandledClass().isAssignableFrom(o1.getHandledClass())) {
				return -1;
			} else {
				return 0;
			}
		}
	}

}
