package mil.nga.giat.geowave.core.store.index; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import mil.nga.giat.geowave.core.index.ByteArrayId; import mil.nga.giat.geowave.core.index.QueryConstraints; import mil.nga.giat.geowave.core.store.filter.DistributableFilterList; import mil.nga.giat.geowave.core.store.filter.DistributableQueryFilter; public class CompositeConstraints implements FilterableConstraints { private final List<FilterableConstraints> constraints = new LinkedList<FilterableConstraints>(); private boolean intersect = false; public CompositeConstraints() {} public CompositeConstraints( final List<FilterableConstraints> constraints ) { super(); this.constraints.addAll(constraints); } public CompositeConstraints( final List<FilterableConstraints> constraints, final boolean intersect ) { super(); this.constraints.addAll(constraints); this.intersect = intersect; } public List<FilterableConstraints> getConstraints() { return constraints; } @Override public int getDimensionCount() { return constraints == null ? 0 : constraints.size(); } @Override public boolean isEmpty() { return (constraints == null) || constraints.isEmpty(); } @Override public DistributableQueryFilter getFilter() { final List<DistributableQueryFilter> filters = new ArrayList<DistributableQueryFilter>(); for (final QueryConstraints constraint : constraints) { if (constraint instanceof FilterableConstraints) { DistributableQueryFilter filter = ((FilterableConstraints) constraint).getFilter(); if (filter != null) { filters.add(filter); } } } if (filters.isEmpty()) { return null; } if (filters.size() == 1) { return filters.get(0); } return new DistributableFilterList( intersect, filters); } @Override public ByteArrayId getFieldId() { return constraints.get( 0).getFieldId(); } @Override public FilterableConstraints intersect( final FilterableConstraints constraints ) { final CompositeConstraints cc = new CompositeConstraints( this.constraints, true); cc.constraints.add(constraints); return cc; } @Override public FilterableConstraints union( final FilterableConstraints constraints ) { final CompositeConstraints cc = new CompositeConstraints( this.constraints); cc.constraints.add(constraints); return cc; } }