package com.ldbc.driver.workloads.ldbc.snb.interactive; import com.ldbc.driver.Operation; import com.ldbc.driver.SerializingMarshallingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; import java.io.IOException; import java.util.ArrayList; import java.util.List; import static java.lang.String.format; public class LdbcShortQuery7MessageReplies extends Operation<List<LdbcShortQuery7MessageRepliesResult>> { public static final int TYPE = 107; private static final ObjectMapper objectMapper = new ObjectMapper(); private final long messageId; public LdbcShortQuery7MessageReplies( long messageId ) { this.messageId = messageId; } public long messageId() { return messageId; } @Override public List<LdbcShortQuery7MessageRepliesResult> marshalResult( String serializedResult ) throws SerializingMarshallingException { List<List<Object>> resultsAsList; try { resultsAsList = objectMapper.readValue( serializedResult, new TypeReference<List<List<Object>>>() { } ); } catch ( IOException e ) { throw new SerializingMarshallingException( format( "Error while parsing serialized results\n%s", serializedResult ), e ); } List<LdbcShortQuery7MessageRepliesResult> results = new ArrayList<>(); for ( int i = 0; i < resultsAsList.size(); i++ ) { List<Object> resultAsList = resultsAsList.get( i ); long commentId = ((Number) resultAsList.get( 0 )).longValue(); String commentContent = (String) resultAsList.get( 1 ); long commentCreationDate = ((Number) resultAsList.get( 2 )).longValue(); long replyAuthorId = ((Number) resultAsList.get( 3 )).longValue(); String replyAuthorFirstName = (String) resultAsList.get( 4 ); String replyAuthorLastName = (String) resultAsList.get( 5 ); boolean isReplyAuthorKnowsOriginalMessageAuthor = (Boolean) resultAsList.get( 6 ); results.add( new LdbcShortQuery7MessageRepliesResult( commentId, commentContent, commentCreationDate, replyAuthorId, replyAuthorFirstName, replyAuthorLastName, isReplyAuthorKnowsOriginalMessageAuthor ) ); } return results; } @Override public String serializeResult( Object operationResultInstance ) throws SerializingMarshallingException { List<LdbcShortQuery7MessageRepliesResult> results = (List<LdbcShortQuery7MessageRepliesResult>) operationResultInstance; List<List<Object>> resultsFields = new ArrayList<>(); for ( int i = 0; i < results.size(); i++ ) { LdbcShortQuery7MessageRepliesResult result = results.get( i ); List<Object> resultFields = new ArrayList<>(); resultFields.add( result.commentId() ); resultFields.add( result.commentContent() ); resultFields.add( result.commentCreationDate() ); resultFields.add( result.replyAuthorId() ); resultFields.add( result.replyAuthorFirstName() ); resultFields.add( result.replyAuthorLastName() ); resultFields.add( result.isReplyAuthorKnowsOriginalMessageAuthor() ); resultsFields.add( resultFields ); } try { return objectMapper.writeValueAsString( resultsFields ); } catch ( IOException e ) { throw new SerializingMarshallingException( format( "Error while trying to serialize result\n%s", results.toString() ), e ); } } @Override public boolean equals( Object o ) { if ( this == o ) { return true; } if ( o == null || getClass() != o.getClass() ) { return false; } LdbcShortQuery7MessageReplies that = (LdbcShortQuery7MessageReplies) o; if ( messageId != that.messageId ) { return false; } return true; } @Override public int hashCode() { return (int) (messageId ^ (messageId >>> 32)); } @Override public String toString() { return "LdbcShortQuery7MessageReplies{" + "messageId=" + messageId + '}'; } @Override public int type() { return TYPE; } }