Thank you, that worked.
One small glitch was that the trigger is not guaranteed to fire for every
element. (AfterPane.elementCountAtLeast(1) might fire after one element, or
more). When it fires for more than one of those iterables, I get
double/triple/etc of the intended file sizes, which is undesirable.
To overcome this, I created another window class, similar to the
IntervalWindow (called it BespokeIntervalWindow, which is the same thing as
the IntervalWindow except that there is an extra UUID field in it, in
addition to the "start" and "end" fields, that keeps each such window
distinct), and I have a WindowFn that gets the existing IntervalWindow from
the AssignContext and assigns an equivalent BespokeIntervalWindow to each
iterable in its assignWindow method. I then set
the AfterPane.elementCountAtLeast(1) trigger on this WindowFn to make it
not wait till the end of the interval to emit the pane.