package com.ldbc.driver.workloads.ldbc.snb.interactive; import com.google.common.collect.Lists; import com.ldbc.driver.validation.ValidationEquality; import java.util.Iterator; public class LdbcQuery14Result { private final Iterable<? extends Number> personIdsInPath; private final double pathWeight; public LdbcQuery14Result( Iterable<? extends Number> personIdsInPath, double pathWeight ) { this.personIdsInPath = personIdsInPath; this.pathWeight = pathWeight; } public Iterable<? extends Number> personsIdsInPath() { // force to List, as Guava/Jackson magic changes it to a strange collection that breaks equality somewhere // not performance sensitive code path, only used for validation & serialization - not during runs return Lists.newArrayList( personIdsInPath ); } public double pathWeight() { return pathWeight; } @Override public boolean equals( Object o ) { if ( this == o ) { return true; } if ( o == null || getClass() != o.getClass() ) { return false; } LdbcQuery14Result that = (LdbcQuery14Result) o; if ( !ValidationEquality.doubleEquals( that.pathWeight, pathWeight ) ) { return false; } if ( null == personIdsInPath || null == that.personIdsInPath ) { return false; } return personIdPathsEqual( personIdsInPath, that.personIdsInPath ); } private boolean personIdPathsEqual( Iterable<? extends Number> path1, Iterable<? extends Number> path2 ) { Iterator<? extends Number> path1Iterator = path1.iterator(); Iterator<? extends Number> path2Iterator = path2.iterator(); while ( path1Iterator.hasNext() ) { if ( !path2Iterator.hasNext() ) { return false; } Number path1IdNumber = path1Iterator.next(); Number path2IdNumber = path2Iterator.next(); if ( null == path1IdNumber || null == path2IdNumber ) { return false; } long path1Id = path1IdNumber.longValue(); long path2Id = path2IdNumber.longValue(); if ( path1Id != path2Id ) { return false; } } return !path2Iterator.hasNext(); } @Override public String toString() { return "LdbcQuery14Result{" + "personIdsInPath=" + personIdsInPath + ", pathWeight=" + pathWeight + '}'; } }