public static TemporalConstraints getTemporalConstraintsForDescriptors( final TimeDescriptors timeDescriptors, final TemporalConstraintsSet timeBoundsSet) { if ((timeBoundsSet == null) || timeBoundsSet.isEmpty()) { return new TemporalConstraints(); } if ((timeDescriptors.getStartRange() != null) && (timeDescriptors.getEndRange() != null)) { return composeRangeTemporalConstraints(timeDescriptors, timeBoundsSet); } else if ((timeDescriptors.getTime() != null) && timeBoundsSet.hasConstraintsFor(timeDescriptors.getTime().getLocalName())) { return timeBoundsSet.getConstraintsFor(timeDescriptors.getTime().getLocalName()); } return new TemporalConstraints(); }
public ExtractTimeFilterVisitor(final TimeDescriptors timeDescriptors) { if (timeDescriptors.hasTime() && (timeDescriptors.getStartRange() != null) && (timeDescriptors.getEndRange() != null)) { addRangeVariables( timeDescriptors.getStartRange().getLocalName(), timeDescriptors.getEndRange().getLocalName()); } }
public TimeDescriptors( final SimpleFeatureType type, final TimeDescriptorConfiguration configuration) { update(type, configuration); }
public static String getTimeField(final DataStorePluginOptions dataStore, final String typeName) { final PersistentAdapterStore adapterStore = dataStore.createAdapterStore(); final InternalAdapterStore internalAdapterStore = dataStore.createInternalAdapterStore(); final DataTypeAdapter<?> adapter = adapterStore.getAdapter(internalAdapterStore.getAdapterId(typeName)).getAdapter(); if ((adapter != null) && (adapter instanceof GeotoolsFeatureDataAdapter)) { final GeotoolsFeatureDataAdapter gtAdapter = (GeotoolsFeatureDataAdapter) adapter; final SimpleFeatureType featureType = gtAdapter.getFeatureType(); final TimeDescriptors timeDescriptors = gtAdapter.getTimeDescriptors(); // If not indexed, try to find a time field if ((timeDescriptors == null) || !timeDescriptors.hasTime()) { for (final AttributeDescriptor attrDesc : featureType.getAttributeDescriptors()) { final Class<?> bindingClass = attrDesc.getType().getBinding(); if (TimeUtils.isTemporal(bindingClass)) { return attrDesc.getLocalName(); } } } else { if (timeDescriptors.getTime() != null) { return timeDescriptors.getTime().getLocalName(); } else if (timeDescriptors.getStartRange() != null) { // give back start|stop string return timeDescriptors.getStartRange().getLocalName() + "|" + timeDescriptors.getEndRange().getLocalName(); } } } return null; }
@Override public boolean hasTemporalConstraints() { return getTimeDescriptors().hasTime(); }
@Override protected boolean isCommonIndex(final Index index, final GeotoolsFeatureDataAdapter adapter) { // because field name param doesn't allow for multiple, ranges cannot be // set, field name param can be null in which case it can use a range, // or if field name is non-nul it must use a timestamp return ((fieldNameParam == null) || ((adapter.getTimeDescriptors().getTime() != null) && fieldNameParam.getFieldName().equals( adapter.getTimeDescriptors().getTime().getLocalName()))) && IndexOptimizationUtils.hasTime(index, adapter); }
/** * Determine if a time or range descriptor is set. If so, then use it, otherwise infer. * * @param persistType - FeatureType that will be scanned for TimeAttributes * @return */ public static final TimeDescriptors inferTimeAttributeDescriptor( final SimpleFeatureType persistType) { final TimeDescriptorConfiguration config = new TimeDescriptorConfiguration(persistType); final TimeDescriptors timeDescriptors = new TimeDescriptors(persistType, config); // Up the meta-data so that it is clear and visible any inference that // has occurred here. Also, this is critical to // serialization/deserialization config.updateType(persistType); return timeDescriptors; } }
/** * If composed constraints matched statistics constraints, are empty or null, then return empty * constraint set. * * @param featureType * @param timeDescriptors * @param statsMap * @param timeBoundsSet * @return */ public static Constraints composeTimeBoundedConstraints( final SimpleFeatureType featureType, final TimeDescriptors timeDescriptors, final Map<StatisticsId, InternalDataStatistics<SimpleFeature, ?, ?>> statsMap, final TemporalConstraintsSet timeBoundsSet) { if ((timeBoundsSet == null) || timeBoundsSet.isEmpty() || !timeDescriptors.hasTime()) { return new Constraints(); } final TemporalConstraints boundsTemporalConstraints = TimeUtils.getTemporalConstraintsForDescriptors(timeDescriptors, timeBoundsSet); if (boundsTemporalConstraints.isEmpty()) { return new Constraints(); } final Constraints indexTimeConstraints = new Constraints(QueryIndexHelper.getTimeConstraintsFromIndex(timeDescriptors, statsMap)); final Constraints boundsTimeConstraints = ExplicitSpatialTemporalQuery.createConstraints(boundsTemporalConstraints, false); return (boundsTimeConstraints.matches(indexTimeConstraints)) ? new Constraints() : boundsTimeConstraints; }
/** * Compose temporal constraints given the constraint set and the descriptors for the index. * * @param timeDescriptors * @param constraintsSet * @return null if the constraints does not have the fields required by the time descriptors */ public static TemporalConstraints composeRangeTemporalConstraints( final TimeDescriptors timeDescriptors, final TemporalConstraintsSet constraintsSet) { if ((timeDescriptors.getEndRange() != null) && (timeDescriptors.getStartRange() != null)) { final String ename = timeDescriptors.getEndRange().getLocalName(); final String sname = timeDescriptors.getStartRange().getLocalName(); if (constraintsSet.hasConstraintsForRange(sname, ename)) { return constraintsSet.getConstraintsForRange(sname, ename); } } else if ((timeDescriptors.getTime() != null) && constraintsSet.hasConstraintsFor(timeDescriptors.getTime().getLocalName())) { return constraintsSet.getConstraintsFor(timeDescriptors.getTime().getLocalName()); } return new TemporalConstraints(); }
final TimeDescriptors timeDescriptors = TimeUtils.inferTimeAttributeDescriptor(featureType); if ((timeDescriptors.getStartRange() != null) && (timeDescriptors.getEndRange() != null)) { new FeatureAttributeHandler(timeDescriptors.getStartRange()); final FeatureAttributeHandler fah_endRange = new FeatureAttributeHandler(timeDescriptors.getEndRange()); final FieldVisibilityHandler<SimpleFeature, Object> visibilityHandler = config.getManager().createVisibilityHandler( timeDescriptors.getStartRange().getLocalName(), fieldVisiblityHandler, config.getAttributeName()); } else if (timeDescriptors.getTime() != null) { timeDescriptors.getTime().getLocalName(), fieldVisiblityHandler, config.getAttributeName()); new FeatureTimestampHandler(timeDescriptors.getTime(), visibilityHandler);
descMap.put(type, desc); if ((desc.getStartRange() != null) && (desc.getEndRange() != null)) { final Object start = entry.getAttribute(desc.getStartRange().getName()); final Object end = entry.getAttribute(desc.getStartRange().getName()); if ((start == null) || (end == null)) { LOGGER.warn("start or end value is null, ignoring feature"); Instant.ofEpochMilli(TimeUtils.getTimeMillis(start)), Instant.ofEpochMilli(TimeUtils.getTimeMillis(end))); } else if (desc.getTime() != null) { final Object time = entry.getAttribute(desc.getTime().getName()); if ((time == null)) { LOGGER.warn("time attribute value is null, ignoring feature");
protected static Filter getFilter( final GeotoolsFeatureDataAdapter adapter, final QueryConstraints delegateConstraints) { final List<MultiDimensionalNumericData> constraints = delegateConstraints.getIndexConstraints(new TemporalIndexBuilder().createIndex()); if (adapter.getTimeDescriptors().getTime() != null) { return constraintsToFilter( constraints, data -> TimeUtils.toDuringFilter( (long) data.getMinValuesPerDimension()[0], (long) data.getMaxValuesPerDimension()[0], adapter.getTimeDescriptors().getTime().getLocalName())); } else if ((adapter.getTimeDescriptors().getStartRange() != null) && (adapter.getTimeDescriptors().getEndRange() != null)) { return constraintsToFilter( constraints, data -> TimeUtils.toFilter( (long) data.getMinValuesPerDimension()[0], (long) data.getMaxValuesPerDimension()[0], adapter.getTimeDescriptors().getStartRange().getLocalName(), adapter.getTimeDescriptors().getEndRange().getLocalName())); } return null; }
if ((timeDescriptors.getEndRange() != null) && (timeDescriptors.getStartRange() != null)) { final String ename = timeDescriptors.getEndRange().getLocalName(); final String sname = timeDescriptors.getStartRange().getLocalName(); if (constraintsSet.hasConstraintsForRange(sname, ename)) { final TemporalRange statsStartRange = getStatsRange(statsMap, timeDescriptors.getStartRange()); final TemporalRange statsEndRange = getStatsRange(statsMap, timeDescriptors.getEndRange()); final TemporalRange fullRange = new TemporalRange(statsStartRange.getStartTime(), statsEndRange.getEndTime()); } else if ((timeDescriptors.getTime() != null) && constraintsSet.hasConstraintsFor(timeDescriptors.getTime().getLocalName())) { final String name = timeDescriptors.getTime().getLocalName(); final FeatureTimeRangeStatistics stats = ((FeatureTimeRangeStatistics) statsMap.get(
final Map<StatisticsId, InternalDataStatistics<SimpleFeature, ?, ?>> stats) { if ((timeDescriptors.getEndRange() != null) || (timeDescriptors.getStartRange() != null)) { final FeatureTimeRangeStatistics endRange = (timeDescriptors.getEndRange() != null) ? ((FeatureTimeRangeStatistics) stats.get( VectorStatisticsQueryBuilder.newBuilder().factory().timeRange().fieldName( timeDescriptors.getEndRange().getLocalName()).build().getId())) : null; final FeatureTimeRangeStatistics startRange = (timeDescriptors.getStartRange() != null) ? ((FeatureTimeRangeStatistics) stats.get( VectorStatisticsQueryBuilder.newBuilder().factory().timeRange().fieldName( timeDescriptors.getStartRange().getLocalName()).build().getId())) : null; return ExplicitSpatialTemporalQuery.createConstraints(startRange.asTemporalRange(), true); } else if (timeDescriptors.getTime() != null) { final FeatureTimeRangeStatistics timeStat = ((FeatureTimeRangeStatistics) stats.get( VectorStatisticsQueryBuilder.newBuilder().factory().timeRange().fieldName( timeDescriptors.getTime().getLocalName()).build().getId())); if (timeStat != null) { return ExplicitSpatialTemporalQuery.createConstraints(timeStat.asTemporalRange(), true);
final TimeDescriptors timeDescriptors = adapter.getTimeDescriptors(); if (timeDescriptors != null) { final AttributeDescriptor timeDesc = timeDescriptors.getTime(); if (timeDesc != null) { attrs.remove(timeDesc.getLocalName()); final AttributeDescriptor startDesc = timeDescriptors.getStartRange(); if (startDesc != null) { attrs.remove(startDesc.getLocalName()); final AttributeDescriptor endDesc = timeDescriptors.getEndRange(); if (endDesc != null) { attrs.remove(endDesc.getLocalName());