private void updateListeners(@NonNull JSONObject content, boolean isLoadingMore) { for (AlgoliaResultsListener listener : resultListeners) { listener.onResults(new SearchResults(content), isLoadingMore); } }
/** Constructs a numeric refinement for the given attribute, operator and value. * @param attribute the attribute to refine on. * @param operator a {@link NumericRefinement#OPERATOR_LT comparison operator} to apply. * @param value the value to refine with. */ public NumericRefinement(@NonNull String attribute, int operator, double value) { checkOperatorIsValid(operator); this.operator = operator; this.value = value; this.attribute = attribute; }
@Override public String toString() { return attribute + getOperatorSymbol(operator) + String.format(Locale.US, "%f", value); }
/** * Removes the numeric refinement relative to an attribute and operator for the next queries. * * @param attribute an attribute that maybe has some refinements. * @param operator an {@link NumericRefinement#OPERATOR_EQ operator}. * @return this {@link Searcher} for chaining. */ @SuppressWarnings({"WeakerAccess", "unused"}) // For library users public Searcher removeNumericRefinement(@NonNull String attribute, @NonNull Integer operator) { return removeNumericRefinement(new NumericRefinement(attribute, operator, NumericRefinement.VALUE_UNKNOWN)); }
@Test public void shouldSortWithMoreValuesThanLimit() { //Given two facet value, and a RefinementList with limit=1 final RefinementList.FacetAdapter facetAdapter = (RefinementList.FacetAdapter) mRefinementList.getAdapter(); facetAdapter.addAll(Arrays.asList(new FacetValue("foo", 1), new FacetValue("bar", 2))); mRefinementList.setLimit(1); // Expect successful sort and one facet stored facetAdapter.sort(mRefinementList.getSortComparator()); assertThat(facetAdapter.getCount(), is(1)); }
@Test public void getOperatorCodeValid() { Assert.assertEquals(NumericRefinement.OPERATOR_LT, NumericRefinement.getOperatorCode("lt")); Assert.assertEquals(NumericRefinement.OPERATOR_LE, NumericRefinement.getOperatorCode("le")); Assert.assertEquals(NumericRefinement.OPERATOR_EQ, NumericRefinement.getOperatorCode("eq")); Assert.assertEquals(NumericRefinement.OPERATOR_NE, NumericRefinement.getOperatorCode("ne")); Assert.assertEquals(NumericRefinement.OPERATOR_GE, NumericRefinement.getOperatorCode("ge")); Assert.assertEquals(NumericRefinement.OPERATOR_GT, NumericRefinement.getOperatorCode("gt")); }
public ResultEvent(@NonNull final Searcher searcher, @NonNull final JSONObject json, @NonNull final Query query, final int requestSeqNumber) { super(searcher); this.results = new SearchResults(json); this.query = query; this.requestSeqNumber = requestSeqNumber; }
private void postError(@NonNull AlgoliaException error, int currentRequestId) { for (AlgoliaErrorListener listener : errorListeners) { listener.onError(query, error); } EventBus.getDefault().post(new ErrorEvent(this, error, query, currentRequestId)); }
private void rebuildQueryNumericFilters() { JSONArray numericFilters = new JSONArray(); for (SparseArray<NumericRefinement> refinements : numericRefinements.values()) { for (int i = 0; i < refinements.size(); i++) { numericFilters.put(refinements.valueAt(i).toString()); } } //noinspection deprecation (deprecated for end-users of API Client) query.setNumericFilters(numericFilters); query.setPage(0); }
/** * Removes any numeric refinements relative to a specific attribute for the next queries. * * @param attribute the attribute that may have a refinement. * @return this {@link Searcher} for chaining. */ @SuppressWarnings({"WeakerAccess", "unused"}) // For library users public Searcher removeNumericRefinement(@NonNull String attribute) { return removeNumericRefinement(new NumericRefinement(attribute, NumericRefinement.OPERATOR_UNKNOWN, NumericRefinement.VALUE_UNKNOWN)); }
/** * Gets the current numeric refinement for an attribute and an operator. * * @param attribute the attribute to refine on. * @param operator one of the {@link NumericRefinement#OPERATOR_EQ operators} defined in {@link NumericRefinement}. * @return a {@link NumericRefinement} describing the current refinement for these parameters, or {@code null} if there is none. */ @SuppressWarnings({"WeakerAccess", "unused"}) // For library users @Nullable public NumericRefinement getNumericRefinement(@NonNull String attribute, int operator) { NumericRefinement.checkOperatorIsValid(operator); final SparseArray<NumericRefinement> attributeRefinements = numericRefinements.get(attribute); return attributeRefinements == null ? null : attributeRefinements.get(operator); }
@Test public void getOperatorSymbolValid() { Assert.assertEquals("<", NumericRefinement.getOperatorSymbol(NumericRefinement.OPERATOR_LT)); Assert.assertEquals("<=", NumericRefinement.getOperatorSymbol(NumericRefinement.OPERATOR_LE)); Assert.assertEquals("=", NumericRefinement.getOperatorSymbol(NumericRefinement.OPERATOR_EQ)); Assert.assertEquals("!=", NumericRefinement.getOperatorSymbol(NumericRefinement.OPERATOR_NE)); Assert.assertEquals(">=", NumericRefinement.getOperatorSymbol(NumericRefinement.OPERATOR_GE)); Assert.assertEquals(">", NumericRefinement.getOperatorSymbol(NumericRefinement.OPERATOR_GT)); }
@Test public void shouldSortWithLessValuesThanLimit() { //Given one facet value, and a RefinementList with limit=10 final RefinementList.FacetAdapter facetAdapter = (RefinementList.FacetAdapter) mRefinementList.getAdapter(); facetAdapter.addAll(Collections.singletonList(new FacetValue("foo", 1))); // Expect successful sort and one facet stored facetAdapter.sort(mRefinementList.getSortComparator()); assertThat(facetAdapter.getCount(), is(1)); }
@Test(expected = IllegalStateException.class) public void getOperatorCodeInvalid() { NumericRefinement.getOperatorCode("foo"); }
private void onUpdate(final SeekBar seekBar) { int newProgressValue = seekBar.getProgress(); // avoid double search on ProgressChanged + StopTrackingTouch if (newProgressValue != lastProgressValue[0]) { final double actualValue = updateSeekBarText(tv, seekBar, name, minValue, maxValue, steps); if (newProgressValue == 0) { searcher.removeNumericRefinement(new NumericRefinement(attribute, NumericRefinement.OPERATOR_GT, actualValue)) .search(); } else { searcher.addNumericRefinement(new NumericRefinement(attribute, NumericRefinement.OPERATOR_GT, actualValue)) .search(); } } lastProgressValue[0] = newProgressValue; } });
@Test public void checkOperatorIsValid() { int operator = NumericRefinement.OPERATOR_LT; try { NumericRefinement.checkOperatorIsValid(operator); operator = NumericRefinement.OPERATOR_LE; NumericRefinement.checkOperatorIsValid(operator); operator = NumericRefinement.OPERATOR_EQ; NumericRefinement.checkOperatorIsValid(operator); operator = NumericRefinement.OPERATOR_NE; NumericRefinement.checkOperatorIsValid(operator); operator = NumericRefinement.OPERATOR_GE; NumericRefinement.checkOperatorIsValid(operator); operator = NumericRefinement.OPERATOR_GT; NumericRefinement.checkOperatorIsValid(operator); } catch (IllegalStateException e) { fail("Operator " + operator + "should be considered valid"); } }
@Test(expected = IllegalStateException.class) public void getOperatorSymbolInvalid() { NumericRefinement.getOperatorSymbol(-1); }
@Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { final Double selectedValue = values.get(position); if (currentRefinement != null) { searcher.removeNumericRefinement(currentRefinement); } if (selectedValue != null) { // don't refine if user selected the default value currentRefinement = new NumericRefinement(attribute, operator, selectedValue); searcher.addNumericRefinement(currentRefinement); } searcher.search(); //TODO: Conditional if refineNow (window) or not (dialog) }
@Test(expected = IllegalStateException.class) public void checkOperatorIsInvalid() { int operator = -1; NumericRefinement.checkOperatorIsValid(operator); } }
private void updateRefinement(String attribute, int operator) { if (currentRefinement != null) { searcher.removeNumericRefinement(currentRefinement); currentRefinement = new NumericRefinement(attribute, operator, currentRefinement.value); searcher.addNumericRefinement(currentRefinement); searcher.search(); } }