Initial opendaylight infrastructure commit!!
[controller.git] / third-party / net.sf.jung2 / src / main / java / edu / uci / ics / jung / algorithms / scoring / util / UniformInOut.java
diff --git a/third-party/net.sf.jung2/src/main/java/edu/uci/ics/jung/algorithms/scoring/util/UniformInOut.java b/third-party/net.sf.jung2/src/main/java/edu/uci/ics/jung/algorithms/scoring/util/UniformInOut.java
new file mode 100644 (file)
index 0000000..7853f00
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * 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
+     */
+    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));
+    }
+}