/* * 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 IllegalArgumentException if the edge is not directed. */ public class UniformInOut implements Transformer, Double> { /** * The graph for which the edge weights are defined. */ protected Graph graph; /** * Creates an instance for the specified graph. * @param graph the graph for which the edge weights will be defined */ public UniformInOut(Graph graph) { this.graph = graph; } /** * @see org.apache.commons.collections15.Transformer#transform(Object) * @throws IllegalArgumentException */ public Double transform(VEPair 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)); } }