package com.ldbc.driver.validation; import com.ldbc.driver.Operation; import com.ldbc.driver.SerializingMarshallingException; import com.ldbc.driver.Workload; import com.ldbc.driver.generator.GeneratorException; import java.util.Iterator; import static java.lang.String.format; public class ValidationParamsToCsvRows implements Iterator<String[]> { private final Iterator<ValidationParam> validationParams; private final Workload workload; private final boolean performSerializationMarshallingChecks; public ValidationParamsToCsvRows( Iterator<ValidationParam> validationParams, Workload workload, boolean performSerializationMarshallingChecks ) { this.validationParams = validationParams; this.workload = workload; this.performSerializationMarshallingChecks = performSerializationMarshallingChecks; } @Override public boolean hasNext() { return validationParams.hasNext(); } @Override public String[] next() { ValidationParam validationParam = validationParams.next(); Operation operation = validationParam.operation(); Object operationResult = validationParam.operationResult(); String serializedOperation; try { serializedOperation = workload.serializeOperation( operation ); } catch ( SerializingMarshallingException e ) { throw new GeneratorException( format( "Workload(%s) unable to serialize operation\n" + "Operation: %s", operation ), e ); } String serializedOperationResult; try { serializedOperationResult = operation.serializeResult( operationResult ); } catch ( SerializingMarshallingException e ) { throw new GeneratorException( format( "Error serializing operation result\n" + "Operation: %s\n" + "Operation Result: %s", operation, operationResult ), e ); } // Assert that serialization/marshalling is performed correctly if ( performSerializationMarshallingChecks ) { Object marshaledOperationResult; try { marshaledOperationResult = operation.marshalResult( serializedOperationResult ); } catch ( SerializingMarshallingException e ) { throw new GeneratorException( format( "" + "Error marshalling serialized operation result\n" + "Operation: %s\n" + "Operation Result: %s\n" + "Serialized Result: %s", operation, operationResult, serializedOperationResult ), e ); } if ( false == marshaledOperationResult.equals( operationResult ) ) { throw new GeneratorException( format( "" + "Operation result and serialized-then-marshaled operation result do not equal\n" + "Operation: %s\n" + "Actual Result: %s\n" + "Serialized Result: %s\n" + "Marshaled Result: %s", operation, operationResult, serializedOperationResult, marshaledOperationResult ) ); } } return new String[]{serializedOperation, serializedOperationResult}; } @Override public void remove() { throw new UnsupportedOperationException( "remove() not supported by " + getClass().getName() ); } }