package com.ldbc.driver.workloads.dummy;
import com.ldbc.driver.Operation;
import com.ldbc.driver.SerializingMarshallingException;
import com.ldbc.driver.Workload;
import com.ldbc.driver.WorkloadException;
import com.ldbc.driver.WorkloadStreams;
import com.ldbc.driver.generator.GeneratorFactory;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class DummyWorkload extends Workload
{
private static final Map<Integer,Class<? extends Operation>> createOperationTypeToClassMapping()
{
Map<Integer,Class<? extends Operation>> operationTypeToClassMapping = new HashMap<>();
operationTypeToClassMapping.put( NothingOperation.TYPE, NothingOperation.class );
operationTypeToClassMapping.put( TimedNamedOperation1.TYPE, TimedNamedOperation1.class );
operationTypeToClassMapping.put( TimedNamedOperation2.TYPE, TimedNamedOperation2.class );
operationTypeToClassMapping.put( TimedNamedOperation3.TYPE, TimedNamedOperation3.class );
return operationTypeToClassMapping;
}
public static final Map<Integer,Class<? extends Operation>> OPERATION_TYPE_CLASS_MAPPING =
createOperationTypeToClassMapping();
private final long maxExpectedInterleaveAsMilli;
private final WorkloadStreams workloadStreams;
public DummyWorkload( WorkloadStreams workloadStreams,
long maxExpectedInterleaveAsMilli )
{
this.maxExpectedInterleaveAsMilli = maxExpectedInterleaveAsMilli;
this.workloadStreams = workloadStreams;
}
@Override
public Map<Integer,Class<? extends Operation>> operationTypeToClassMapping()
{
return OPERATION_TYPE_CLASS_MAPPING;
}
@Override
public void onInit( Map<String,String> params ) throws WorkloadException
{
}
@Override
protected void onClose() throws IOException
{
}
@Override
protected WorkloadStreams getStreams( GeneratorFactory generators, boolean hasDbConnected ) throws WorkloadException
{
return newCopyOfWorkloadStreams();
}
private WorkloadStreams newCopyOfWorkloadStreams()
{
return workloadStreams;
}
@Override
public String serializeOperation( Operation operation ) throws SerializingMarshallingException
{
if ( operation.getClass().equals( NothingOperation.class ) )
{ return NothingOperation.class.getName(); }
if ( operation.getClass().equals( TimedNamedOperation1.class ) )
{
return TimedNamedOperation1.class.getName()
+ "|"
+ Long.toString( operation.scheduledStartTimeAsMilli() )
+ "|"
+ Long.toString( operation.timeStamp() )
+ "|"
+ Long.toString( operation.dependencyTimeStamp() )
+ "|"
+ serializeName( ((TimedNamedOperation1) operation).name() );
}
if ( operation.getClass().equals( TimedNamedOperation2.class ) )
{
return TimedNamedOperation2.class.getName()
+ "|"
+ Long.toString( operation.scheduledStartTimeAsMilli() )
+ "|"
+ Long.toString( operation.timeStamp() )
+ "|"
+ Long.toString( operation.dependencyTimeStamp() )
+ "|"
+ serializeName( ((TimedNamedOperation2) operation).name() );
}
throw new SerializingMarshallingException( "Unsupported Operation: " + operation.getClass().getName() );
}
@Override
public Operation marshalOperation( String serializedOperation ) throws SerializingMarshallingException
{
if ( serializedOperation.startsWith( NothingOperation.class.getName() ) )
{ return new NothingOperation(); }
if ( serializedOperation.startsWith( TimedNamedOperation1.class.getName() ) )
{
String[] serializedOperationTokens = serializedOperation.split( "\\|" );
return new TimedNamedOperation1(
Long.parseLong( serializedOperationTokens[1] ),
Long.parseLong( serializedOperationTokens[2] ),
Long.parseLong( serializedOperationTokens[3] ),
marshalName( serializedOperationTokens[4] )
);
}
if ( serializedOperation.startsWith( TimedNamedOperation2.class.getName() ) )
{
String[] serializedOperationTokens = serializedOperation.split( "\\|" );
return new TimedNamedOperation2(
Long.parseLong( serializedOperationTokens[1] ),
Long.parseLong( serializedOperationTokens[2] ),
Long.parseLong( serializedOperationTokens[3] ),
marshalName( serializedOperationTokens[4] )
);
}
throw new SerializingMarshallingException( "Unsupported Operation: " + serializedOperation );
}
@Override
public boolean resultsEqual( Operation operation, Object result1, Object result2 ) throws WorkloadException
{
if ( null == result1 || null == result2 )
{ return false; }
else
{ return result1.equals( result2 ); }
}
private String serializeName( String name )
{
return (null == name) ? "null" : name;
}
private String marshalName( String nameString )
{
return ("null".equals( nameString )) ? null : nameString;
}
@Override
public long maxExpectedInterleaveAsMilli()
{
return maxExpectedInterleaveAsMilli;
}
}