use of nl.knaw.huygens.timbuctoo.server.mediatypes.v2.search.DateRangeFacetValue in project timbuctoo by HuygensING.
the class DutchCaribbeanArchiveAndArchiverPeriodFacetDescriptionTest method shouldContainJustRight.
private void shouldContainJustRight(GraphTraversal<Vertex, Vertex> traversal, long startYear, long endYear) {
List<FacetValue> facetValues = Lists.newArrayList(new DateRangeFacetValue(FACET_NAME, startYear * 10_000, endYear * 10_000));
instance.filter(traversal, facetValues);
assertThat(traversal.toList(), contains(likeVertex().withTimId("just_right")));
}
use of nl.knaw.huygens.timbuctoo.server.mediatypes.v2.search.DateRangeFacetValue in project timbuctoo by HuygensING.
the class ChangeRangeFacetDescription method filter.
@Override
@SuppressWarnings("unchecked")
public void filter(GraphTraversal<Vertex, Vertex> graphTraversal, List<FacetValue> facets) {
Optional<FacetValue> first = facets.stream().filter(facetValue -> Objects.equals(facetValue.getName(), facetName)).findFirst();
if (!first.isPresent()) {
return;
}
FacetValue facetValue = first.get();
if (!(facetValue instanceof DateRangeFacetValue)) {
return;
}
long lowerLimit = ((DateRangeFacetValue) facetValue).getLowerLimit();
LocalDate lowerLimitDate = LocalDate.parse("" + lowerLimit, FORMATTER);
long upperLimit = ((DateRangeFacetValue) facetValue).getUpperLimit();
LocalDate upperLimitDate = LocalDate.parse(("" + upperLimit), FORMATTER);
// Use range because the java.time.Period has no way to determine if a date falls in that Period.
Range<LocalDate> period = Range.closed(lowerLimitDate, upperLimitDate);
graphTraversal.where(__.has(propertyName, P.test((o1, o2) -> {
try {
LocalDate localDate = getChangeLocalDate(o1);
return ((Range<LocalDate>) o2).contains(localDate);
} catch (IOException e) {
LOG.error("Date {} cannot be parsed.", o1);
}
return false;
}, period)));
}
use of nl.knaw.huygens.timbuctoo.server.mediatypes.v2.search.DateRangeFacetValue in project timbuctoo by HuygensING.
the class DatableRangeFacetDescription method filter.
@Override
@SuppressWarnings("unchecked")
public void filter(GraphTraversal<Vertex, Vertex> graphTraversal, List<FacetValue> facets) {
final Optional<DateRangeFacetValue> facet = FacetParsingHelp.getValue(facetName, facets);
if (!facet.isPresent()) {
return;
}
String lowerLimitString = facet.get().getLowerLimit() + "";
String upperLimitString = facet.get().getUpperLimit() + "";
try {
Range<Date> range = Range.closed(FILTER_FORMAT.parse(lowerLimitString), FILTER_FORMAT.parse(upperLimitString));
graphTraversal.where(__.has(propertyName, P.test((o1, o2) -> {
Datable datable = getDatable("" + o1);
if (!datable.isValid()) {
return false;
}
Range<Date> range1 = (Range<Date>) o2;
return range1.contains(datable.getFromDate()) || range1.contains(datable.getToDate());
}, range)));
} catch (ParseException e) {
LOG.error("Cannot parse date", e);
}
}
use of nl.knaw.huygens.timbuctoo.server.mediatypes.v2.search.DateRangeFacetValue in project timbuctoo by HuygensING.
the class FacetParsingHelp method getValue.
static Optional<DateRangeFacetValue> getValue(String facetName, List<FacetValue> facets) {
Optional<FacetValue> first = facets.stream().filter(facetValue -> Objects.equals(facetValue.getName(), facetName)).findFirst();
if (!first.isPresent()) {
return Optional.empty();
}
FacetValue facetValue = first.get();
if (!(facetValue instanceof DateRangeFacetValue)) {
return Optional.empty();
}
DateRangeFacetValue casted = (DateRangeFacetValue) facetValue;
// normalize input, make sure its always YYYY
// the input from the client is YNNNN YYNNNN YYYNNNN etc. NNNN goes from 0000 to 9999 and means 1/10th milliYear
// (1/10,000th of a year)
casted.setLowerLimit(casted.getLowerLimit() / 10000);
casted.setUpperLimit(casted.getUpperLimit() / 10000);
return Optional.of(casted);
}
use of nl.knaw.huygens.timbuctoo.server.mediatypes.v2.search.DateRangeFacetValue in project timbuctoo by HuygensING.
the class RelatedDatableRangeFacetDescription method filter.
@Override
@SuppressWarnings("unchecked")
public void filter(GraphTraversal<Vertex, Vertex> graphTraversal, List<FacetValue> facets) {
Optional<FacetValue> first = facets.stream().filter(facetValue -> Objects.equals(facetValue.getName(), facetName)).findFirst();
if (!first.isPresent()) {
return;
}
FacetValue facetValue = first.get();
if (!(facetValue instanceof DateRangeFacetValue)) {
return;
}
// pad the strings to make them parsable
String lowerLimitString = Strings.padStart("" + ((DateRangeFacetValue) facetValue).getLowerLimit(), 8, '0').substring(0, 4);
String upperLimitString = Strings.padStart("" + ((DateRangeFacetValue) facetValue).getUpperLimit(), 8, '0').substring(0, 4);
try {
Range<Date> range = Range.closed(FILTER_FORMAT.parse(lowerLimitString), FILTER_FORMAT.parse(upperLimitString));
graphTraversal.where(__.bothE(relations).otherV().has(propertyName, P.test((o1, o2) -> {
Datable datable = getDatable("" + o1);
if (!datable.isValid()) {
return false;
}
Range<Date> range1 = (Range<Date>) o2;
return range1.contains(datable.getFromDate()) || range1.contains(datable.getToDate());
}, range)));
} catch (ParseException e) {
LOG.error("Cannot parse date", e);
}
}
Aggregations