Skip to content

Commit

Permalink
Merge 9868116 into 175805b
Browse files Browse the repository at this point in the history
  • Loading branch information
aseure committed Sep 26, 2018
2 parents 175805b + 9868116 commit 19d0e71
Show file tree
Hide file tree
Showing 7 changed files with 177 additions and 3 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,5 @@ hs_err_pid*
*.iml
.DS_Store
*.logQueryTest

.factorypath
Original file line number Diff line number Diff line change
Expand Up @@ -192,14 +192,20 @@ public ConsequenceParams setMaxValuesPerFacet(Long maxValuesPerFacet) {
return (ConsequenceParams) super.setMaxValuesPerFacet(maxValuesPerFacet);
}

public List<String> getFacetFilters() {
public FacetFilters getFacetFilters() {
return facetFilters;
}

@Deprecated
public ConsequenceParams setFacetFilters(List<String> facetFilters) {
return (ConsequenceParams) super.setFacetFilters(facetFilters);
}

@JsonSetter
public ConsequenceParams setFacetFilters(FacetFilters facetFilters) {
return (ConsequenceParams) super.setFacetFilters(facetFilters);
}

public Boolean getFacetingAfterDistinct() {
return facetingAfterDistinct;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package com.algolia.search.objects;

import com.algolia.search.Defaults;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;

@JsonDeserialize(using = FacetFiltersJsonDeserializer.class)
@JsonSerialize(using = FacetFiltersJsonSerializer.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class FacetFilters implements Serializable {

public static FacetFilters ofList(List<String> filters) {
return new FacetFiltersAsListOfString(filters);
}

public static FacetFilters ofListOfList(List<List<String>> filters) {
return new FacetFiltersAsListOfList(filters);
}

@JsonIgnore
public abstract Object getInsideValue();
}

class FacetFiltersJsonDeserializer extends JsonDeserializer {

@Override
public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
List list = p.readValueAs(List.class);
if (list.isEmpty()) {
return new FacetFiltersAsListOfString();
}
if (list.get(0) instanceof String) {
return new FacetFiltersAsListOfString(list);
}
return new FacetFiltersAsListOfList(list);
}
}

class FacetFiltersJsonSerializer extends JsonSerializer<FacetFilters> {

@Override
public void serialize(FacetFilters value, JsonGenerator gen, SerializerProvider serializers)
throws IOException {

ObjectMapper objectMapper = Defaults.DEFAULT_OBJECT_MAPPER;

if (value instanceof FacetFiltersAsListOfString) {
FacetFiltersAsListOfString filters = (FacetFiltersAsListOfString) value;
objectMapper.writeValue(gen, filters.getFilters());

} else if (value instanceof FacetFiltersAsListOfList) {
FacetFiltersAsListOfList filters = (FacetFiltersAsListOfList) value;
objectMapper.writeValue(gen, filters.getFilters());

} else {
throw new IOException(
"cannot serialize facetFilters: unknown input type '" + value.getClass().getName() + "'");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.algolia.search.objects;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.util.List;

@JsonDeserialize(as = FacetFiltersAsListOfList.class)
public class FacetFiltersAsListOfList extends FacetFilters {

private List<List<String>> filters;

FacetFiltersAsListOfList(List<List<String>> filters) {
this.filters = filters;
}

@Override
@JsonIgnore
public Object getInsideValue() {
return this.filters;
}

List<List<String>> getFilters() {
return this.filters;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.algolia.search.objects;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import java.util.ArrayList;
import java.util.List;

@JsonDeserialize(as = FacetFiltersAsListOfString.class)
public class FacetFiltersAsListOfString extends FacetFilters {

private List<String> filters;

FacetFiltersAsListOfString() {
this.filters = new ArrayList<String>();
}

FacetFiltersAsListOfString(List<String> filters) {
this.filters = filters;
}

@Override
@JsonIgnore
public Object getInsideValue() {
return this.filters;
}

List<String> getFilters() {
return this.filters;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public class Query implements Serializable {
protected String filters;
protected String facets;
protected Long maxValuesPerFacet;
protected List<String> facetFilters;
protected FacetFilters facetFilters;
protected Boolean facetingAfterDistinct;
protected String sortFacetValuesBy;

Expand Down Expand Up @@ -482,11 +482,18 @@ public Query setMaxValuesPerFacet(Integer maxValuesPerFacet) {
return this.setMaxValuesPerFacet(maxValuesPerFacet.longValue());
}

public List<String> getFacetFilters() {
public FacetFilters getFacetFilters() {
return facetFilters;
}

@Deprecated
public Query setFacetFilters(List<String> facetFilters) {
this.facetFilters = new FacetFiltersAsListOfString(facetFilters);
return this;
}

@JsonSetter
public Query setFacetFilters(FacetFilters facetFilters) {
this.facetFilters = facetFilters;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.algolia.search.objects;

import static org.assertj.core.api.Assertions.assertThat;

import com.algolia.search.Defaults;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.Arrays;
import org.junit.Test;

public class FacetFiltersTest {

private ObjectMapper objectMapper = Defaults.DEFAULT_OBJECT_MAPPER;

private FacetFilters serializeDeserialize(FacetFilters facetFilters) throws IOException {
String serialized = objectMapper.writeValueAsString(facetFilters);
return objectMapper.readValue(
serialized, objectMapper.getTypeFactory().constructType(FacetFilters.class));
}

@Test
public void facetFiltersAsListOfString() throws IOException {
FacetFilters facetFilters = new FacetFiltersAsListOfString(Arrays.asList("filter1", "filter2"));
FacetFilters result = serializeDeserialize(facetFilters);
assertThat(result).isEqualToComparingFieldByField(facetFilters);
}

@Test
public void facetFiltersAsListOfList() throws IOException {
FacetFilters facetFilters =
new FacetFiltersAsListOfList(
Arrays.asList(Arrays.asList("filter1", "filter2"), Arrays.asList("filter3")));
FacetFilters result = serializeDeserialize(facetFilters);
assertThat(result).isEqualToComparingFieldByField(facetFilters);
}
}

0 comments on commit 19d0e71

Please sign in to comment.