public RangeOption nextRange(int pageSize) { if (getTerminal() < 0) { throw new IllegalStateException("Cannot generate next range, range-terminal: " + getTerminal()); } if (pageSize < 0 && pageSize != TERMINAL_END_OF_RANGE) { throw new IllegalArgumentException("Invalid page size: " + pageSize); } int initial = getTerminal() + 1; int terminal = pageSize == TERMINAL_END_OF_RANGE ? TERMINAL_END_OF_RANGE : getTerminal() + pageSize; return new RangeOption(initial, terminal); } }
public int compareTo(RangeOption that) { if (this.getInitial() != that.getInitial()) throw new IllegalStateException("Ranges cannot be compared, range-initial not the same: " + this.toString() + " vs " + that.toString()); if (this.getTerminal() == that.getTerminal()) { return 0; } if (that.getTerminal() == TERMINAL_MISSING) { throw new IllegalStateException("Don't know how to deal with missing range-terminal: " + that.toString()); } if (this.getTerminal() == TERMINAL_MISSING) { throw new IllegalStateException("Don't know how to deal with missing range-terminal: " + this.toString()); } if (this.getTerminal() == TERMINAL_END_OF_RANGE) { return 1; } if (that.getTerminal() == TERMINAL_END_OF_RANGE) { return -1; } return this.getTerminal() > that.getTerminal() ? 1 : -1; }
public boolean isFullRange() { return getInitial() == 0 && getTerminal() == TERMINAL_END_OF_RANGE; }
@Test public void testNext() { RangeOption range = RangeOption.parse("Range=0-100"); range = range.nextRange(100); assertThat(range.getInitial()).isEqualTo(101); assertThat(range.getTerminal()).isEqualTo(200); range = range.nextRange(10); assertThat(range.getInitial()).isEqualTo(201); assertThat(range.getTerminal()).isEqualTo(210); range = range.nextRange(RangeOption.TERMINAL_END_OF_RANGE); assertThat(range.getInitial()).isEqualTo(211); assertThat(range.getTerminal()).isEqualTo(RangeOption.TERMINAL_END_OF_RANGE); } }
@Test public void testParse() throws Exception { RangeOption range = RangeOption.parse("Range=0-100"); assertThat(range.getInitial()).isEqualTo(0); assertThat(range.getTerminal()).isEqualTo(100); range = RangeOption.parse("range=0-100"); assertThat(range.getInitial()).isEqualTo(0); assertThat(range.getTerminal()).isEqualTo(100); range = RangeOption.parse("RANGE=0-100"); assertThat(range.getInitial()).isEqualTo(0); assertThat(range.getTerminal()).isEqualTo(100); range = RangeOption.parse("Range=0-*"); assertThat(range.getInitial()).isEqualTo(0); assertThat(range.getTerminal()).isEqualTo(RangeOption.TERMINAL_END_OF_RANGE); range = RangeOption.parse("Range=10"); assertThat(range.getInitial()).isEqualTo(10); assertThat(range.getTerminal()).isEqualTo(RangeOption.TERMINAL_MISSING); }
private DefaultIncrementalAttributeState(String actualAttributeName, int pageSize) { this.actualAttributeName = actualAttributeName; this.pageSize = pageSize; this.requestRange = new RangeOption(0, pageSize); }
public void appendTo(StringBuilder rangeBuilder) { rangeBuilder.append("Range=").append(initial); if (!isTerminalMissing()) { rangeBuilder.append('-'); if (isTerminalEndOfRange()) { rangeBuilder.append('*'); } else { rangeBuilder.append(terminal); } } }
@Override public String getAttributeNameForQuery() { StringBuilder attributeBuilder = new StringBuilder(actualAttributeName); if (!(requestRange.isFullRange())) { attributeBuilder.append(';'); requestRange.appendTo(attributeBuilder); } return attributeBuilder.toString(); }
@Test public void testCompare() { RangeOption range1 = RangeOption.parse("Range=10-500"); RangeOption range2 = RangeOption.parse("Range=10-500"); assertThat(range1.compareTo(range2) == 0).isTrue(); assertThat(range2.compareTo(range1) == 0).isTrue(); range1 = RangeOption.parse("Range=0-*"); range2 = RangeOption.parse("Range=0-*"); assertThat(range1.compareTo(range2) == 0).isTrue(); assertThat(range2.compareTo(range1) == 0).isTrue(); range1 = RangeOption.parse("Range=0"); range2 = RangeOption.parse("Range=0"); assertThat(range1.compareTo(range2) == 0).isTrue(); assertThat(range2.compareTo(range1) == 0).isTrue(); range1 = RangeOption.parse("Range=0-101"); range2 = RangeOption.parse("Range=0-100"); assertThat(range1.compareTo(range2) > 0).isTrue(); assertThat(range2.compareTo(range1) < 0).isTrue(); range1 = RangeOption.parse("Range=0-*"); range2 = RangeOption.parse("Range=0-100"); assertThat(range1.compareTo(range2) > 0).isTrue(); assertThat(range2.compareTo(range1) < 0).isTrue(); }
@Test public void testToString() throws Exception { RangeOption range = new RangeOption(0, 100); assertThat(range.toString()).isEqualTo("Range=0-100"); range = new RangeOption(0, RangeOption.TERMINAL_END_OF_RANGE); assertThat(range.toString()).isEqualTo("Range=0-*"); range = new RangeOption(0, RangeOption.TERMINAL_MISSING); assertThat(range.toString()).isEqualTo("Range=0"); }
private Attribute createRangeAttribute(String attributeName, RangeOption range, int valueCnt) { Attribute attribute = new BasicAttribute(attributeName + ";" + range.toString()); for (int i = 0; i < valueCnt; i++) { attribute.add("value" + (range.getInitial() + i - 1)); } return attribute; } }
@Test public void testParseInvalid() { assertThat(RangeOption.parse("Range=10-")).isNull(); assertThat(RangeOption.parse("Range=10-a")).isNull(); assertThat(RangeOption.parse("lang-en")).isNull(); assertThat(RangeOption.parse("member;Range=10-100")).isNull(); assertThat(RangeOption.parse(";Range=10-100")).isNull(); assertThat(RangeOption.parse("Range=10-100;")).isNull(); assertThat(RangeOption.parse("Range=10-100;lang-de")).isNull(); }
public String toString() { StringBuilder rangeBuilder = new StringBuilder(); appendTo(rangeBuilder); return rangeBuilder.toString(); }
public boolean isFullRange() { return getInitial() == 0 && getTerminal() == TERMINAL_END_OF_RANGE; }
private DefaultIncrementalAttributeState(String actualAttributeName, int pageSize) { this.actualAttributeName = actualAttributeName; this.pageSize = pageSize; this.requestRange = new RangeOption(0, pageSize); }
public void appendTo(StringBuilder rangeBuilder) { rangeBuilder.append("Range=").append(initial); if (!isTerminalMissing()) { rangeBuilder.append('-'); if (isTerminalEndOfRange()) { rangeBuilder.append('*'); } else { rangeBuilder.append(terminal); } } }
@Override public String getAttributeNameForQuery() { StringBuilder attributeBuilder = new StringBuilder(actualAttributeName); if (!(requestRange.isFullRange())) { attributeBuilder.append(';'); requestRange.appendTo(attributeBuilder); } return attributeBuilder.toString(); }
@Test public void testCompareInvalid() { RangeOption range1 = RangeOption.parse("Range=10-500"); RangeOption range2 = RangeOption.parse("Range=11-500"); try { assertThat(range1.compareTo(range2) == 0).isTrue(); fail("IllegalStateException expected"); } catch (IllegalStateException expected) { assertThat(true).isTrue(); } range1 = RangeOption.parse("Range=10"); range2 = RangeOption.parse("Range=10-500"); try { assertThat(range1.compareTo(range2) == 0).isTrue(); fail("IllegalStateException expected"); } catch (IllegalStateException expected) { assertThat(true).isTrue(); } range1 = RangeOption.parse("Range=10-500"); range2 = RangeOption.parse("Range=10"); try { assertThat(range1.compareTo(range2) == 0).isTrue(); fail("IllegalStateException expected"); } catch (IllegalStateException expected) { assertThat(true).isTrue(); } }
@Override public final DefaultIncrementalAttributesMapper mapFromAttributes(Attributes attributes) throws NamingException { if (!hasMore()) { throw new IllegalStateException("No more attributes!"); } // Reset the affected attributes. rangedAttributesInNextIteration = new HashSet<String>(); NamingEnumeration<String> attributeNameEnum = attributes.getIDs(); while (attributeNameEnum.hasMore()) { String attributeName = attributeNameEnum.next(); String[] attributeNameSplit = attributeName.split(";"); IncrementalAttributeState state = getState(attributeNameSplit[0]); if (attributeNameSplit.length == 1) { // No range specification for this attribute state.processValues(attributes, attributeName); } else { for (String option : attributeNameSplit) { RangeOption responseRange = RangeOption.parse(option); if (responseRange != null) { state.processValues(attributes, attributeName); state.calculateNextRange(responseRange); if (state.hasMore()) { rangedAttributesInNextIteration.add(state.getRequestedAttributeName()); } } } } } return this; }