package com.kryptnostic.search.v1.models.request; import java.util.Arrays; import java.util.List; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.kryptnostic.kodex.v1.constants.Names; /** * Search request for submittin * * @author Matthew Tamayo-Rios <matthew@kryptnostic.com> */ public class SearchRequest { public static final int DEFAULT_MAX_RESULTS = 30; private final List<byte[]> searchToken; private final int maxResults; private final int offset; public SearchRequest( List<byte[]> searchToken ) { this( searchToken, DEFAULT_MAX_RESULTS, 0 ); } @JsonCreator public SearchRequest( @JsonProperty( Names.QUERY_FIELD ) List<byte[]> searchToken, @JsonProperty( Names.MAX_FIELD ) int maxResults, @JsonProperty( Names.OFFSET_FIELD ) int offset ) { // Preconditions.checkArgument( searchToken != null && pairResults != null // && searchToken.size() == pairResults.size() ); this.searchToken = searchToken; this.maxResults = maxResults; this.offset = offset; } public static SearchRequest searchToken( byte[] searchToken ) { return SearchRequest.searchToken( Arrays.asList( searchToken ) ); } public static SearchRequest searchToken( List<byte[]> searchTokens ) { return new SearchRequest( searchTokens ); } public static SearchRequest searchToken( List<byte[]> searchTokens, int maxResults ) { return new SearchRequest( searchTokens, maxResults, 0 ); } public static SearchRequest searchToken( List<byte[]> searchTokens, int maxResults, int offset ) { return new SearchRequest( searchTokens, maxResults, offset ); } @JsonProperty( Names.QUERY_FIELD ) public List<byte[]> getSearchToken() { return searchToken; } @JsonProperty( Names.MAX_FIELD ) public int getMaxResults() { return maxResults; } @JsonProperty( Names.OFFSET_FIELD ) public int getOffset() { return offset; } @Override public boolean equals( Object obj ) { if ( this == obj ) { return true; } if ( obj == null ) { return false; } if ( !( obj instanceof SearchRequest ) ) { return false; } SearchRequest other = (SearchRequest) obj; if ( searchToken == null ) { if ( other.searchToken != null ) { return false; } } else if ( searchToken.size() != other.searchToken.size() ) { return false; } else { for ( int i = 0; i < searchToken.size(); ++i ) { if ( !Arrays.equals( searchToken.get( i ), other.searchToken.get( i ) ) ) { return false; } } } return offset == other.offset && maxResults == other.maxResults; } }