@Override public List<Filter> build(Stack<Object> params) { final Object containingValue = params.pop(); Filter containingFilter = new Filter(propertyName(), ComparisonOperator.IN, containingValue); containingFilter.setOwnerEntityType(entityType); containingFilter.setBooleanOperator(booleanOperator); containingFilter.setNegated(isNegated()); containingFilter.setFunction(new ContainsAnyComparison(containingValue)); setNestedAttributes(part, containingFilter); return Collections.singletonList(containingFilter); }
@Override public List<Filter> build(Stack<Object> params) { Filter filter = new Filter(propertyName(), ComparisonOperator.EXISTS); filter.setOwnerEntityType(entityType); filter.setBooleanOperator(booleanOperator); filter.setNegated(isNegated()); setNestedAttributes(part, filter); return Collections.singletonList(filter); }
protected void setNestedAttributes(Part part, Filter filter) { List<Filter.NestedPathSegment> segments = new ArrayList<>(); PropertyPath property = part.getProperty(); if (property.hasNext()) { filter.setOwnerEntityType(property.getOwningType().getType()); segments.add(new Filter.NestedPathSegment(property.getSegment(), property.getType())); segments.addAll(deepNestedProperty(property)); filter.setPropertyName(property.getLeafProperty().getSegment()); filter.setNestedPath(segments.toArray(new Filter.NestedPathSegment[0])); } }
@Override public List<Filter> build(Stack<Object> params) { Object value = params.pop(); Filter filter = new Filter(propertyName(), convertToComparisonOperator(part.getType()), value); filter.setOwnerEntityType(entityType); filter.setBooleanOperator(booleanOperator); filter.setNegated(isNegated()); setNestedAttributes(part, filter); applyCaseInsensitivityIfShouldIgnoreCase(part, filter); return Collections.singletonList(filter); }
@Override public List<Filter> build(Stack<Object> params) { Filter filter = new Filter(propertyName(), ComparisonOperator.IS_TRUE); filter.setOwnerEntityType(entityType); filter.setBooleanOperator(booleanOperator); filter.setNegated(isNegated() || part.getType() == FALSE); setNestedAttributes(part, filter); return Collections.singletonList(filter); }
@Override public List<Filter> build(Stack<Object> params) { Filter filter = new Filter(propertyName(), ComparisonOperator.IS_NULL); filter.setOwnerEntityType(entityType); filter.setBooleanOperator(booleanOperator); filter.setNegated(isNegated() || part.getType() == IS_NOT_NULL); setNestedAttributes(part, filter); return Collections.singletonList(filter); }
@Override public List<Filter> build(Stack<Object> params) { final Object value1 = params.pop(); Filter gt = new Filter(propertyName(), ComparisonOperator.GREATER_THAN_EQUAL, value1); gt.setOwnerEntityType(entityType); gt.setBooleanOperator(booleanOperator); gt.setNegated(isNegated()); gt.setFunction(new PropertyComparison(value1)); setNestedAttributes(part, gt); final Object value2 = params.pop(); Filter lt = new Filter(propertyName(), ComparisonOperator.LESS_THAN_EQUAL, value2); lt.setOwnerEntityType(entityType); lt.setBooleanOperator(BooleanOperator.AND); lt.setNegated(isNegated()); lt.setFunction(new PropertyComparison(value2)); setNestedAttributes(part, lt); return Arrays.asList(gt, lt); } }
private Filter createFilterForSpringPoint(Distance distance, Point point, double meters) { DistanceFromPoint distanceFromPoint = new DistanceFromPoint(point.getX(), point.getY(), distance.getValue() * meters); DistanceComparison distanceComparison = new DistanceComparison(distanceFromPoint); Filter filter = new Filter(distanceComparison, ComparisonOperator.LESS_THAN); filter.setOwnerEntityType(entityType); filter.setBooleanOperator(booleanOperator); filter.setNegated(isNegated()); setNestedAttributes(part, filter); return filter; }
private Filter createFilterForSpatialPoint(AbstractPoint spatialPoint, double meters) { NativeDistanceComparison distanceComparison = NativeDistanceComparison .distanceComparisonFor(new DistanceFromNativePoint(spatialPoint, meters)); String propertyName = super.part.getProperty().getLeafProperty().getSegment(); Filter filter = new Filter(propertyName, distanceComparison, ComparisonOperator.LESS_THAN); filter.setOwnerEntityType(entityType); filter.setBooleanOperator(booleanOperator); filter.setNegated(isNegated()); setNestedAttributes(part, filter); return filter; }
@Override public List<Filter> build(Stack<Object> params) { Filter filter = new Filter(propertyName(), ComparisonOperator.EXISTS); filter.setOwnerEntityType(entityType); filter.setBooleanOperator(booleanOperator); filter.setNegated(isNegated()); setNestedAttributes(part, filter); return Collections.singletonList(filter); }
@Override public List<Filter> build(Stack<Object> params) { final Object containingValue = params.pop(); Filter containingFilter = new Filter(propertyName(), ComparisonOperator.IN, containingValue); containingFilter.setOwnerEntityType(entityType); containingFilter.setBooleanOperator(booleanOperator); containingFilter.setNegated(isNegated()); containingFilter.setFunction(new ContainsAnyComparison(containingValue)); setNestedAttributes(part, containingFilter); return Collections.singletonList(containingFilter); }
protected void setNestedAttributes(Part part, Filter filter) { List<Filter.NestedPathSegment> segments = new ArrayList<>(); PropertyPath property = part.getProperty(); if (property.hasNext()) { filter.setOwnerEntityType(property.getOwningType().getType()); segments.add(new Filter.NestedPathSegment(property.getSegment(), property.getType())); segments.addAll(deepNestedProperty(property)); filter.setPropertyName(property.getLeafProperty().getSegment()); filter.setNestedPath(segments.toArray(new Filter.NestedPathSegment[0])); } }
@Override public List<Filter> build(Stack<Object> params) { Filter filter = new Filter(propertyName(), ComparisonOperator.IS_NULL); filter.setOwnerEntityType(entityType); filter.setBooleanOperator(booleanOperator); filter.setNegated(isNegated() || part.getType() == IS_NOT_NULL); setNestedAttributes(part, filter); return Collections.singletonList(filter); }
@Override public List<Filter> build(Stack<Object> params) { Object value = params.pop(); Filter filter = new Filter(propertyName(), convertToComparisonOperator(part.getType()), value); filter.setOwnerEntityType(entityType); filter.setBooleanOperator(booleanOperator); filter.setNegated(isNegated()); setNestedAttributes(part, filter); applyCaseInsensitivityIfShouldIgnoreCase(part, filter); return Collections.singletonList(filter); }
@Override public List<Filter> build(Stack<Object> params) { Filter filter = new Filter(propertyName(), ComparisonOperator.IS_TRUE); filter.setOwnerEntityType(entityType); filter.setBooleanOperator(booleanOperator); filter.setNegated(isNegated() || part.getType() == FALSE); setNestedAttributes(part, filter); return Collections.singletonList(filter); }
@Override public List<Filter> build(Stack<Object> params) { final Object value1 = params.pop(); Filter gt = new Filter(propertyName(), ComparisonOperator.GREATER_THAN_EQUAL, value1); gt.setOwnerEntityType(entityType); gt.setBooleanOperator(booleanOperator); gt.setNegated(isNegated()); gt.setFunction(new PropertyComparison(value1)); setNestedAttributes(part, gt); final Object value2 = params.pop(); Filter lt = new Filter(propertyName(), ComparisonOperator.LESS_THAN_EQUAL, value2); lt.setOwnerEntityType(entityType); lt.setBooleanOperator(BooleanOperator.AND); lt.setNegated(isNegated()); lt.setFunction(new PropertyComparison(value2)); setNestedAttributes(part, lt); return Arrays.asList(gt, lt); } }
@Test public void loadFilmByRating() { Filter filter = new Filter("stars", ComparisonOperator.EQUALS, 5); filter.setOwnerEntityType(Movie.class); filter.setNestedPath( new Filter.NestedPathSegment("ratings", Rating.class) ); Collection<Movie> films = session.loadAll(Movie.class, filter); assertThat(films).hasSize(1); }
@Test public void loadFilmByRatingUserPlays() { Filter filter = new Filter("level", ComparisonOperator.EQUALS, "ok"); filter.setOwnerEntityType(Movie.class); filter.setNestedPath( new Filter.NestedPathSegment("ratings", Rating.class), new Filter.NestedPathSegment("user", User.class), new Filter.NestedPathSegment("plays", Plays.class) ); Collection<Movie> films = session.loadAll(Movie.class, filter); assertThat(films).hasSize(2); }
@Test public void loadFilmByRatingUsersPet() { // Pulp Fiction and Top Gear rated by Michal who owns Catty Filter filter = new Filter("name", ComparisonOperator.EQUALS, "Catty"); filter.setOwnerEntityType(Movie.class); filter.setNestedPath( new Filter.NestedPathSegment("ratings", Rating.class), new Filter.NestedPathSegment("user", User.class), new Filter.NestedPathSegment("pets", Pet.class) ); Collection<Movie> films = session.loadAll(Movie.class, filter); assertThat(films).hasSize(2); }
@Test public void loadFilmByUserAndRatingUserPlays() { Filter userFilter = new Filter("name", ComparisonOperator.EQUALS, "Michal"); userFilter.setNestedPath( new Filter.NestedPathSegment("ratings", Rating.class), new Filter.NestedPathSegment("user", User.class) ); Filter playsFilter = new Filter("level", ComparisonOperator.EQUALS, "ok"); playsFilter.setOwnerEntityType(Movie.class); playsFilter.setNestedPath( new Filter.NestedPathSegment("ratings", Rating.class), new Filter.NestedPathSegment("user", User.class), new Filter.NestedPathSegment("plays", Plays.class) ); Filters filters = userFilter.and(playsFilter); Collection<Movie> films = session.loadAll(Movie.class, filters); assertThat(films).hasSize(2); }