package com.ldbc.driver; import com.ldbc.driver.runtime.ConcurrentErrorReporter; import static java.lang.String.format; public interface ResultReporter { <OTHER_RESULT_TYPE> void report( int resultCode, OTHER_RESULT_TYPE result, Operation<OTHER_RESULT_TYPE> operation ) throws DbException; Object result(); int resultCode(); long runDurationAsNano(); long actualStartTimeAsMilli(); class SimpleResultReporter implements ResultReporter { private final ConcurrentErrorReporter errorReporter; private Object result = null; private int resultCode = -1; private long actualStartTimeAsMilli = -1; private long runDurationAsNano = -1; public SimpleResultReporter( ConcurrentErrorReporter errorReporter ) { this.errorReporter = errorReporter; } public <OTHER_RESULT_TYPE> void report( int resultCode, OTHER_RESULT_TYPE result, Operation<OTHER_RESULT_TYPE> operation ) throws DbException { this.resultCode = resultCode; this.result = result; if ( null == operation ) { String errMsg = format( "Operation is null\n" + "Operation: %s\n" + "Result: %s", operation, result ); errorReporter.reportError( this, errMsg ); throw new DbException( errMsg ); } } @Override public int resultCode() { return resultCode; } public void setRunDurationAsNano( long runDurationAsNano ) { this.runDurationAsNano = runDurationAsNano; } @Override public long runDurationAsNano() { return runDurationAsNano; } public void setActualStartTimeAsMilli( long actualStartTimeAsMilli ) { this.actualStartTimeAsMilli = actualStartTimeAsMilli; } @Override public long actualStartTimeAsMilli() { return actualStartTimeAsMilli; } @Override public Object result() { return result; } @Override public String toString() { return "SimpleResultReporter{\n" + "\t-->errorReporter=" + errorReporter + "\n" + "\t-->result=" + result + "\n" + "\t-->resultCode=" + resultCode + "\n" + "\t-->actualStartTimeAsMilli=" + actualStartTimeAsMilli + "\n" + "\t-->runDurationAsNano=" + runDurationAsNano + "\n" + '}'; } } }