package io.airlift.event.client; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.io.IOException; import java.util.Arrays; import static java.util.Objects.requireNonNull; public abstract class AbstractEventClient implements EventClient { @SafeVarargs @Override public final <T> ListenableFuture<Void> post(T... event) throws IllegalArgumentException { requireNonNull(event, "event is null"); return post(Arrays.asList(event)); } @Override public final <T> ListenableFuture<Void> post(final Iterable<T> events) throws IllegalArgumentException { requireNonNull(events, "events is null"); return post(new EventGenerator<T>() { @Override public void generate(EventPoster<T> eventPoster) throws IOException { for (T event : events) { requireNonNull(event, "event is null"); eventPoster.post(event); } } }); } @Override public final <T> ListenableFuture<Void> post(EventGenerator<T> eventGenerator) throws IllegalArgumentException { try { eventGenerator.generate(new EventPoster<T>() { @Override public void post(T event) throws IOException { requireNonNull(event, "event is null"); postEvent(event); } }); } catch (IOException e) { return Futures.immediateFailedCheckedFuture(e); } return Futures.immediateCheckedFuture(null); } protected abstract <T> void postEvent(T event) throws IOException; }