public boolean isEmpty() { if (constraintsSet.isEmpty()) { return true; } boolean isEmpty = true; for (final Entry<String, TemporalConstraints> entry : getSet()) { isEmpty &= entry.getValue().isEmpty(); } return isEmpty; } }
private boolean expressionContainsTime(final Expression expression) { return !((TemporalConstraints) expression.accept(this, null)).isEmpty(); }
public static final TemporalConstraints merge( final TemporalConstraints left, final TemporalConstraints right) { if (left.isEmpty()) { return right; } if (right.isEmpty()) { return left; } final TemporalConstraints newSetOfRanges = new TemporalConstraints(left.name); newSetOfRanges.constraints.addAll(left.constraints); for (final TemporalRange range : right.constraints) { newSetOfRanges.add(range); } return newSetOfRanges; }
@Override public Object visit(final TEquals equals, final Object data) { final TemporalConstraints leftResult = (TemporalConstraints) equals.getExpression1().accept(this, data); final TemporalConstraints rightResult = (TemporalConstraints) equals.getExpression2().accept(this, data); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } // property contains value if (leftResult instanceof ParameterTimeConstraint) { return rightResult; } // value contains property if (rightResult instanceof ParameterTimeConstraint) { return leftResult; } // property contains property return new TemporalConstraints(); }
@Override public Object visit(final PropertyIsLessThan filter, final Object data) { final TemporalConstraints leftResult = (TemporalConstraints) filter.getExpression1().accept(this, data); final TemporalConstraints rightResult = (TemporalConstraints) filter.getExpression2().accept(this, data); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } if (leftResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint( new TemporalRange( TemporalRange.START_TIME, new Date(rightResult.getStartRange().getStartTime().getTime() - 1)), leftResult.getName()); } else { return new ParameterTimeConstraint( new TemporalRange( new Date(leftResult.getStartRange().getStartTime().getTime() + 1), TemporalRange.END_TIME), rightResult.getName()); } }
private TemporalConstraints not(final TemporalConstraints constraints) { final ParameterTimeConstraint notRanges = new ParameterTimeConstraint(constraints.getName()); notRanges.empty(); Date lastMax = TemporalRange.START_TIME; for (final TemporalRange range : constraints.getRanges()) { if (range.getStartTime().after(TemporalRange.START_TIME)) { notRanges.add(new TemporalRange(lastMax, new Date(range.getStartTime().getTime() - 1))); } lastMax = range.getEndTime(); } if (!constraints.isEmpty() && (TemporalRange.END_TIME.after(constraints.getEndRange().getEndTime()))) { notRanges.add(new TemporalRange(lastMax, TemporalRange.END_TIME)); } return notRanges; }
/** * Compose a time constraints. When the provided constraints do not fulfill the indexed * dimensions, compose constraints from statistics. * * @param featureType * @param timeDescriptors * @param statsMap * @param timeBoundsSet * @return */ public static Constraints composeTimeConstraints( final SimpleFeatureType featureType, final TimeDescriptors timeDescriptors, final Map<StatisticsId, InternalDataStatistics<SimpleFeature, ?, ?>> statsMap, final TemporalConstraintsSet timeBoundsSet) { final TemporalConstraints timeBounds = TimeUtils.getTemporalConstraintsForDescriptors(timeDescriptors, timeBoundsSet); return (timeBounds != null) && !timeBounds.isEmpty() ? ExplicitSpatialTemporalQuery.createConstraints(timeBounds, false) : new Constraints(getTimeConstraintsFromIndex(timeDescriptors, statsMap)); }
@Override public Object visit(final During during, final Object data) { final TemporalConstraints leftResult = (TemporalConstraints) during.getExpression1().accept(this, data); final TemporalConstraints rightResult = (TemporalConstraints) during.getExpression2().accept(this, data); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } // property during value if (leftResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint(rightResult.getRanges(), leftResult.getName()); } // value during property else if (rightResult instanceof ParameterTimeConstraint) { return rightResult; } // property during property return new TemporalConstraints(); }
@Override public Object visit(final Meets meets, final Object data) { final TemporalConstraints leftResult = (TemporalConstraints) meets.getExpression1().accept(this, data); final TemporalConstraints rightResult = (TemporalConstraints) meets.getExpression2().accept(this, data); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } // property ends value if (leftResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint( new TemporalRange( TemporalRange.START_TIME, rightResult.getMinOr(TemporalRange.END_TIME, 0)), leftResult.getName()); } else if (rightResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint(rightResult.getName()); } // property ended by property return new TemporalConstraints(); }
@Override public Object visit(final Begins begins, final Object data) { final TemporalConstraints leftResult = (TemporalConstraints) begins.getExpression1().accept(this, data); final TemporalConstraints rightResult = (TemporalConstraints) begins.getExpression2().accept(this, data); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } // property begins value if (leftResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint(rightResult.getRanges(), leftResult.getName()); } else if (rightResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint( new TemporalRange( leftResult.getMinOr(TemporalRange.START_TIME, 0), TemporalRange.END_TIME), rightResult.getName()); } // property begins property return new TemporalConstraints(); }
@Override public Object visit(final Ends ends, final Object data) { final TemporalConstraints leftResult = (TemporalConstraints) ends.getExpression1().accept(this, data); final TemporalConstraints rightResult = (TemporalConstraints) ends.getExpression2().accept(this, data); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } // property ends value if (leftResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint(rightResult.getRanges(), leftResult.getName()); } else if (rightResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint( new TemporalRange( TemporalRange.START_TIME, leftResult.getMaxOr(TemporalRange.END_TIME, 0)), rightResult.getName()); } // property ended by property return new TemporalConstraints(); }
@Override public Object visit(final EndedBy endedBy, final Object data) { final TemporalConstraints leftResult = (TemporalConstraints) endedBy.getExpression1().accept(this, data); final TemporalConstraints rightResult = (TemporalConstraints) endedBy.getExpression2().accept(this, data); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } // property ended by value if (leftResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint( new TemporalRange( TemporalRange.START_TIME, rightResult.getMaxOr(TemporalRange.END_TIME, 0)), leftResult.getName()); } else if (rightResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint(leftResult.getRanges(), rightResult.getName()); } // property ended by property return new TemporalConstraints(); }
@Override public Object visit(final BegunBy begunBy, final Object data) { final TemporalConstraints leftResult = (TemporalConstraints) begunBy.getExpression1().accept(this, data); final TemporalConstraints rightResult = (TemporalConstraints) begunBy.getExpression2().accept(this, data); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } // property begun by value if (leftResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint( new TemporalRange( rightResult.getMinOr(TemporalRange.START_TIME, 0), TemporalRange.END_TIME), leftResult.getName()); } else if (rightResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint(leftResult.getRanges(), rightResult.getName()); } // property begins property return new TemporalConstraints(); }
@Override public Object visit(final TContains contains, final Object data) { final TemporalConstraints leftResult = (TemporalConstraints) contains.getExpression1().accept(this, data); final TemporalConstraints rightResult = (TemporalConstraints) contains.getExpression2().accept(this, data); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } // property contains value if (leftResult instanceof ParameterTimeConstraint) { return new TemporalConstraints( new TemporalRange( TemporalRange.START_TIME, rightResult.getMaxOr(TemporalRange.END_TIME, -1)), leftResult.getName()); } else if (rightResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint(leftResult.getRanges(), rightResult.getName()); } // property contains property return new TemporalConstraints(); }
@Override public Object visit(final PropertyIsGreaterThanOrEqualTo filter, final Object data) { final TemporalConstraints leftResult = (TemporalConstraints) filter.getExpression1().accept(this, data); final TemporalConstraints rightResult = (TemporalConstraints) filter.getExpression2().accept(this, data); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } if (leftResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint( new TemporalRange(rightResult.getStartRange().getStartTime(), TemporalRange.END_TIME), leftResult.getName()); } else { return new ParameterTimeConstraint( new TemporalRange(TemporalRange.START_TIME, leftResult.getStartRange().getStartTime()), rightResult.getName()); } }
@Override public Object visit(final PropertyIsLessThanOrEqualTo filter, final Object data) { final TemporalConstraints leftResult = (TemporalConstraints) filter.getExpression1().accept(this, data); final TemporalConstraints rightResult = (TemporalConstraints) filter.getExpression2().accept(this, data); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } if (leftResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint( new TemporalRange(TemporalRange.START_TIME, rightResult.getStartRange().getStartTime()), leftResult.getName()); } else { return new ParameterTimeConstraint( new TemporalRange(leftResult.getStartRange().getStartTime(), TemporalRange.END_TIME), rightResult.getName()); } }
@Override public Object visit(final MetBy metBy, final Object data) { final TemporalConstraints leftResult = (TemporalConstraints) metBy.getExpression1().accept(this, data); final TemporalConstraints rightResult = (TemporalConstraints) metBy.getExpression2().accept(this, data); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } // property ends value if (leftResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint( new TemporalRange( rightResult.getMaxOr(TemporalRange.START_TIME, 0), TemporalRange.END_TIME), leftResult.getName()); } else if (rightResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint( new TemporalRange( TemporalRange.START_TIME, leftResult.getMinOr(TemporalRange.END_TIME, 0)), rightResult.getName()); } // property ends property return new TemporalConstraints(); }
@Override public Object visit(final Before before, final Object data) { final TemporalConstraints leftResult = btime(before.getExpression1().accept(this, data)); final TemporalConstraints rightResult = btime(before.getExpression2().accept(this, data)); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } // property before value if (leftResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint( new TemporalRange( TemporalRange.START_TIME, rightResult.getMinOr(TemporalRange.END_TIME, -1)), leftResult.getName()); } else if (rightResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint( new TemporalRange( leftResult.getMaxOr(TemporalRange.START_TIME, 1), TemporalRange.END_TIME), rightResult.getName()); } // property after property return new TemporalConstraints(); }
@Override public Object visit(final PropertyIsEqualTo filter, final Object data) { final TemporalConstraints leftResult = (TemporalConstraints) filter.getExpression1().accept(this, data); final TemporalConstraints rightResult = (TemporalConstraints) filter.getExpression2().accept(this, data); if (leftResult.isEmpty() || rightResult.isEmpty()) { return new TemporalConstraints(); } if (leftResult instanceof ParameterTimeConstraint) { return new ParameterTimeConstraint( new TemporalRange( rightResult.getStartRange().getStartTime(), rightResult.getEndRange().getEndTime()), leftResult.getName()); } else { return new ParameterTimeConstraint( new TemporalRange( leftResult.getStartRange().getStartTime(), leftResult.getEndRange().getEndTime()), rightResult.getName()); } }
@Override public Object visit(final PropertyIsBetween filter, final Object data) { final TemporalConstraints propertyExp = (TemporalConstraints) filter.getExpression().accept(this, data); final TemporalConstraints lowerBound = (TemporalConstraints) filter.getLowerBoundary().accept(this, data); final TemporalConstraints upperBound = (TemporalConstraints) filter.getUpperBoundary().accept(this, data); if (propertyExp.isEmpty()) { return new TemporalConstraints(); } return new ParameterTimeConstraint( new TemporalRange( lowerBound.getStartRange().getStartTime(), upperBound.getEndRange().getEndTime()), propertyExp.getName()); }