/*
 * Created on Jul 11, 2008
 *
 * Copyright (c) 2008, the JUNG Project and the Regents of the University 
 * of California
 * All rights reserved.
 *
 * This software is open-source under the BSD license; see either
 * "license.txt" or
 * http://jung.sourceforge.net/license.txt for a description.
 */
package edu.uci.ics.jung.algorithms.scoring.util;

import org.apache.commons.collections15.Transformer;

/**
 * A <code>Transformer<VEPair,Number></code> that delegates its operation to a
 * <code>Transformer<E,Number></code>. Mainly useful for technical reasons
 * inside AbstractIterativeScorer; in essence it allows the edge weight instance
 * variable to be of type <code>VEPair,W</code> even if the edge weight
 * <code>Transformer</code> only operates on edges.
 */
public class DelegateToEdgeTransformer<V, E>
		implements Transformer<VEPair<V, E>, Number> {
	/**
	 * The transformer to which this instance delegates its function.
	 */
	protected Transformer<E, ? extends Number> delegate;

	/**
	 * Creates an instance with the specified delegate transformer.
	 * 
	 * @param delegate
	 *            the Transformer to which this instance will delegate
	 */
	public DelegateToEdgeTransformer(
			Transformer<E, ? extends Number> delegate) {
		this.delegate = delegate;
	}

	/**
	 * @see Transformer#transform(Object)
	 */
	@Override
	public Number transform(VEPair<V, E> arg0) {
		return delegate.transform(arg0.getE());
	}

}
