package com.revolsys.collection.range; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; import com.revolsys.util.Property; import com.revolsys.util.Strings; /** * * Ranges are immutable */ public class CrossProductRange extends AbstractRange<String> { private List<AbstractRange<?>> ranges; private int size; public CrossProductRange(final AbstractRange<?>... ranges) { this(Arrays.asList(ranges)); } public CrossProductRange(final Collection<? extends AbstractRange<?>> ranges) { if (Property.hasValue(ranges)) { this.ranges = new ArrayList<>(ranges); } else { throw new IllegalArgumentException("List of ranges must not be empty"); } } @Override public AbstractRange<?> expand(final AbstractRange<?> range) { return null; } @Override public AbstractRange<?> expand(final Object value) { return null; } @Override public String getFrom() { final StringBuilder from = new StringBuilder(); for (final AbstractRange<?> range : this.ranges) { final Object rangeFrom = range.getFrom(); from.append(rangeFrom); } return from.toString(); } public AbstractRange<?> getRange(final int i) { return this.ranges.get(i); } public List<AbstractRange<?>> getRanges() { return this.ranges; } @Override public String getTo() { final StringBuilder to = new StringBuilder(); for (final AbstractRange<?> range : this.ranges) { final Object rangeTo = range.getTo(); to.append(rangeTo); } return to.toString(); } @Override public Iterator<String> iterator() { return new CrossProductRangeIterator(this); } @Override public long size() { return this.size; } @Override public String toString() { return Strings.toString("+", this.ranges); } }