package com.kryptnostic.v2.search;
import java.util.UUID;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.kryptnostic.v2.constants.Names;
/**
* Represents a set of search results for a pa
*
* @author Matthew Tamayo-Rios <matthew@kryptnostic.com>
*
*/
public class SearchResult implements Comparable<SearchResult> {
private final String searchToken;
private final UUID metadataObjectId;
private final double score;
@JsonCreator
public SearchResult(
@JsonProperty( Names.TOKEN_FIELD ) String searchToken,
@JsonProperty( Names.METADATA_FIELD ) UUID metadataObjectId,
@JsonProperty( Names.SCORE_FIELD ) double score) {
this.searchToken = searchToken;
this.metadataObjectId = metadataObjectId;
this.score = score;
}
@JsonProperty( Names.TOKEN_FIELD )
public String getSearchToken() {
return searchToken;
}
@JsonProperty( Names.METADATA_FIELD )
public UUID getMetadata() {
return metadataObjectId;
}
@JsonProperty( Names.SCORE_FIELD )
public double getScore() {
return score;
}
@Override
public int compareTo( SearchResult o ) {
return Double.compare( score, o.getScore() );
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ( ( metadataObjectId == null ) ? 0 : metadataObjectId.hashCode() );
long temp;
temp = Double.doubleToLongBits( score );
result = prime * result + (int) ( temp ^ ( temp >>> 32 ) );
result = prime * result + ( ( searchToken == null ) ? 0 : searchToken.hashCode() );
return result;
}
@Override
public boolean equals( Object obj ) {
if ( this == obj ) {
return true;
}
if ( obj == null ) {
return false;
}
if ( !( obj instanceof SearchResult ) ) {
return false;
}
SearchResult other = (SearchResult) obj;
if ( metadataObjectId == null ) {
if ( other.metadataObjectId != null ) {
return false;
}
} else if ( !metadataObjectId.equals( other.metadataObjectId ) ) {
return false;
}
if ( Double.doubleToLongBits( score ) != Double.doubleToLongBits( other.score ) ) {
return false;
}
if ( searchToken == null ) {
if ( other.searchToken != null ) {
return false;
}
} else if ( !searchToken.equals( other.searchToken ) ) {
return false;
}
return true;
}
@Override
public String toString() {
return "SearchResult [searchToken=" + searchToken + ", metadataObjectId=" + metadataObjectId + ", score="
+ score + "]";
}
}