package edu.ucsb.jpregel.system;
import static java.lang.System.err;
import static java.lang.System.exit;
import static java.lang.System.out;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
/**
*
* @author Pete Cappello
*/
class VertexTestMutability extends VertexImpl<Integer, Message<Integer, Integer>, Integer, Integer>
{
public VertexTestMutability( Integer vertexId, Map<Integer, Integer> edgeMap )
{
super( vertexId, edgeMap );
setVertexValue( new Message<Integer, Integer>( vertexId, Integer.MAX_VALUE ) );
}
public VertexTestMutability() {}
@Override
public VertexImpl make( String line )
{
StringTokenizer stringTokenizer = new StringTokenizer( line );
if ( ! stringTokenizer.hasMoreTokens() )
{
err.println( "TestMutabilityVertex.make: Empty lines are not allowed." );
exit( 1 );
}
int vertexId = Integer.parseInt( stringTokenizer.nextToken() );
Map<Integer, Integer> edgeMap = new HashMap<Integer, Integer>();
while( stringTokenizer.hasMoreTokens() )
{
int target = Integer.parseInt( stringTokenizer.nextToken() );
int weight = Integer.parseInt( stringTokenizer.nextToken() );
edgeMap.put( target, weight );
}
// return new VertexTestMutability( vertexId, outEdgeMap, combiner );
return new VertexTestMutability( vertexId, edgeMap );
}
@Override
public void compute()
{
if ( getSuperStep() == 0 && getVertexId() == 0 )
{
addEdge( new Integer( 2 ), -1 );
}
if ( getSuperStep() == 1 && getVertexId() == 0 )
{
removeEdge( new Integer( 1 ) );
}
if ( getSuperStep() == 2 && getVertexId() == 1 )
{
out.println("TestMutabilityVertex.compute: step: " + getSuperStep() + " numVertices: " + getNumVertices() );
removeVertex();
}
if ( getSuperStep() == 3 && getVertexId() == 0 )
{
out.println("TestMutabilityVertex.compute: step: numVertices: " + getNumVertices() );
}
/* This vote will be overturned, if during this step, a vertex for whom
* I am a target vertex discovered a shorter path to itself,
* in which case, it will send me a message.
*/
// if ( getSuperStep() == 3 )
// {
// voteToHalt();
// }
}
@Override
public String output()
{
StringBuilder string = new StringBuilder();
string.append( getVertexId() );
string.append( " : ");
// string.append( ((Message) getVertexValue() ).getMessageValue() );
for ( Integer targetId : getEdgeMap().keySet() )
{
string.append( targetId );
string.append( " ");
string.append( getEdgeMap().get( targetId ) );
string.append( " ");
}
return new String( string );
}
@Override
public boolean isInitiallyActive() { return isSource(); }
public boolean isSource() { return getVertexId() == 0; }
}