package com.ldbc.driver.workloads.dummy;
import com.ldbc.driver.Db;
import com.ldbc.driver.DbConnectionState;
import com.ldbc.driver.DbException;
import com.ldbc.driver.OperationHandler;
import com.ldbc.driver.ResultReporter;
import com.ldbc.driver.control.LoggingService;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class DummyDb extends Db
{
private class AllowedConnectionState extends DbConnectionState
{
private final Map<String,Boolean> nameAllowedMap;
private boolean defaultAllowed;
private AllowedConnectionState( boolean defaultAllowed )
{
this.defaultAllowed = defaultAllowed;
this.nameAllowedMap = new HashMap<>();
}
private void setNameAllowedValue( String name, boolean allowed )
{
nameAllowedMap.put( name, allowed );
}
private void setAllowedValueForAll( boolean allowed )
{
nameAllowedMap.clear();
defaultAllowed = allowed;
}
private boolean isAllowed( String name )
{
if ( false == nameAllowedMap.containsKey( name ) )
{ return defaultAllowed; }
return nameAllowedMap.get( name );
}
@Override
public void close() throws IOException
{
}
}
public static final String ALLOWED_DEFAULT_ARG = "allowed";
private static final boolean ALLOWED_DEFAULT = true;
private AllowedConnectionState allowedConnectionState = null;
public void setNameAllowedValue( String name, boolean allowed )
{
allowedConnectionState.setNameAllowedValue( name, allowed );
}
public void setAllowedValueForAll( boolean allowed )
{
allowedConnectionState.setAllowedValueForAll( allowed );
}
@Override
protected void onInit( Map<String,String> params, LoggingService loggingService ) throws DbException
{
registerOperationHandler( NothingOperation.class, NothingOperationHandler.class );
registerOperationHandler( TimedNamedOperation1.class, TimedNamedOperation1Handler.class );
registerOperationHandler( TimedNamedOperation2.class, TimedNamedOperation2Handler.class );
registerOperationHandler( TimedNamedOperation3.class, TimedNamedOperation3Handler.class );
boolean allowedDefault = (params.containsKey( ALLOWED_DEFAULT_ARG ))
? Boolean.parseBoolean( params.get( ALLOWED_DEFAULT_ARG ) )
: ALLOWED_DEFAULT;
allowedConnectionState = new AllowedConnectionState( allowedDefault );
}
@Override
protected void onClose() throws IOException
{
}
@Override
protected DbConnectionState getConnectionState() throws DbException
{
return allowedConnectionState;
}
public static class NothingOperationHandler implements OperationHandler<NothingOperation,AllowedConnectionState>
{
@Override
public void executeOperation( NothingOperation operation, AllowedConnectionState connectionState,
ResultReporter resultReporter ) throws DbException
{
resultReporter.report( 0, new DummyResult(), operation );
}
}
public static class TimedNamedOperation1Handler
implements OperationHandler<TimedNamedOperation1,AllowedConnectionState>
{
@Override
public void executeOperation( TimedNamedOperation1 operation, AllowedConnectionState connectionState,
ResultReporter resultReporter ) throws DbException
{
while ( false == connectionState.isAllowed( operation.name() ) )
{
// wait to be a allowed to execute
}
resultReporter.report( 0, new DummyResult(), operation );
}
}
public static class TimedNamedOperation2Handler
implements OperationHandler<TimedNamedOperation2,AllowedConnectionState>
{
@Override
public void executeOperation( TimedNamedOperation2 operation, AllowedConnectionState connectionState,
ResultReporter resultReporter ) throws DbException
{
while ( false == connectionState.isAllowed( operation.name() ) )
{
// wait to be a allowed to execute
}
resultReporter.report( 0, new DummyResult(), operation );
}
}
public static class TimedNamedOperation3Handler
implements OperationHandler<TimedNamedOperation3,AllowedConnectionState>
{
@Override
public void executeOperation( TimedNamedOperation3 operation, AllowedConnectionState connectionState,
ResultReporter resultReporter ) throws DbException
{
while ( false == connectionState.isAllowed( operation.name() ) )
{
// wait to be a allowed to execute
}
resultReporter.report( 0, new DummyResult(), operation );
}
}
}