/*
* 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;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.util.EdgeType;
/**
* Assigns weights to directed edges (the edge of the vertex/edge pair)
* depending on whether the vertex is the edge's source or its destination. If
* the vertex v is the edge's source, assigns 1/outdegree(v). Otherwise, assigns
* 1/indegree(w). Throws <code>IllegalArgumentException</code> if the edge is
* not directed.
*/
public class UniformInOut<V, E> implements Transformer<VEPair<V, E>, Double> {
/**
* The graph for which the edge weights are defined.
*/
protected Graph<V, E> graph;
/**
* Creates an instance for the specified graph.
*
* @param graph
* the graph for which the edge weights will be defined
*/
public UniformInOut(Graph<V, E> graph) {
this.graph = graph;
}
/**
* @see org.apache.commons.collections15.Transformer#transform(Object)
* @throws IllegalArgumentException
*/
@Override
public Double transform(VEPair<V, E> ve_pair) {
V v = ve_pair.getV();
E e = ve_pair.getE();
if (graph.getEdgeType(e) != EdgeType.DIRECTED) {
throw new IllegalArgumentException(
"This transformer only" + " operates on directed edges");
}
return 1.0 / (graph.isSource(v, e) ? graph.outDegree(v)
: graph.inDegree(v));
}
}