public void injectElement(InputT value, Instant timestamp) throws Exception { Collection<W> windows = windowFn.assignWindows( new TriggerTester.StubAssignContext<W>( windowFn, value, timestamp, Arrays.asList(GlobalWindow.INSTANCE))); logInteraction( "Element %s at time %d put in windows %s", value, timestamp.getMillis(), windows); runner.processElement(WindowedValue.of(value, timestamp, windows, PaneInfo.NO_FIRING)); }
protected <T> WindowedValue<T> makeWindowedValue( T output, Instant timestamp, Collection<? extends BoundedWindow> windows, PaneInfo pane) { final Instant inputTimestamp = timestamp; final WindowFn windowFn = windowingStrategy.getWindowFn(); if (timestamp == null) { timestamp = BoundedWindow.TIMESTAMP_MIN_VALUE; } if (windows == null) { try { windows = windowFn.assignWindows( windowFn.new AssignContext() { @Override public Object element() { throw new UnsupportedOperationException( "WindowFn attempted to access input element when none was available"); // TODO: 12/16/15 aljoscha's comment in slack } @Override public Instant timestamp() { if (inputTimestamp == null) { throw new UnsupportedOperationException( "WindowFn attempted to access input timestamp when none was available"); } return inputTimestamp; } @Override public Collection<? extends BoundedWindow> windows() { throw new UnsupportedOperationException( "WindowFn attempted to access input windows when none were available"); } }); } catch (Exception e) { Throwables.propagateIfInstanceOf(e, UserCodeException.class); throw new UserCodeException(e); } } return WindowedValue.of(output, timestamp, windows, pane); }