package edu.ucsb.jpregel.system; import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; /** * * @author Pete Cappello */ public class VertexSources extends VertexImpl<Integer, Boolean, Integer, Integer> { public VertexSources() {} public VertexSources( Integer vertexId, Map<Integer, Integer> edgeMap ) { super( vertexId, edgeMap ); } @Override public void compute() { if ( null == getVertexValue() ) { setVertexValue( true ); // initially mark all vertices as sources // for each out-edge (u, v), send a message to vertex v for ( Integer targetVertexId : getEdgeTargets() ) { sendMessage( targetVertexId, new Message( null, null ) ); } } else if ( getMessageQ().size() > 0 ) { setVertexValue( false ); // I have at least 1 in-edge! } } @Override public String output() { return getVertexId() + " " + getVertexValue(); } @Override public boolean isInitiallyActive() { return true; } @Override public VertexImpl make(String line) { StringTokenizer stringTokenizer = new StringTokenizer( line ); int vertexId = Integer.parseInt( stringTokenizer.nextToken() ); Map<Integer, Integer> edgeMap = new HashMap<Integer, Integer>(); while( stringTokenizer.hasMoreTokens() ) { int targetVertexId = Integer.parseInt( stringTokenizer.nextToken() ); edgeMap.put( targetVertexId, null ); } return new VertexSources( vertexId, edgeMap ); } }