@Override public PCollection<Long> expand(PBegin input) { boolean isRangeUnbounded = getTo() < 0; boolean usesUnboundedFeatures = getTimestampFn() != null || getElementsPerPeriod() > 0 || getMaxReadTime() != null; if (!isRangeUnbounded && !usesUnboundedFeatures) { return input.apply(Read.from(CountingSource.createSourceForSubrange(getFrom(), getTo()))); return input.apply(readUnbounded); } else { return input.apply(readUnbounded.withMaxNumRecords(getTo() - getFrom())); return input.apply(withMaxReadTime); } else { return input.apply(withMaxReadTime.withMaxNumRecords(getTo() - getFrom()));
@Override public void populateDisplayData(DisplayData.Builder builder) { builder.add(DisplayData.item("from", getFrom()).withLabel("Generate sequence from")); builder.addIfNotDefault( DisplayData.item("to", getTo()).withLabel("Generate sequence to (exclusive)"), -1L); builder.addIfNotNull( DisplayData.item( "timestampFn", getTimestampFn() == null ? null : getTimestampFn().getClass()) .withLabel("Timestamp Function")); builder.addIfNotNull( DisplayData.item("maxReadTime", getMaxReadTime()).withLabel("Maximum Read Time")); if (getElementsPerPeriod() > 0) { builder.add( DisplayData.item("elementsPerPeriod", getElementsPerPeriod()) .withLabel("Elements per period")); builder.add(DisplayData.item("period", getPeriod()).withLabel("Period")); } } }