package com.englishtown.vertx.jersey.impl; import com.englishtown.vertx.jersey.WriteStreamOutput; import io.vertx.core.Handler; import io.vertx.core.buffer.Buffer; import io.vertx.core.http.HttpServerResponse; /** * Default implementation of {@link com.englishtown.vertx.jersey.WriteStreamOutput} */ public class DefaultWriteStreamOutput implements WriteStreamOutput { private HttpServerResponse response; private Handler<Void> endHandler; /** * {@inheritDoc} */ @Override public WriteStreamOutput init(HttpServerResponse response, Handler<Void> endHandler) { this.response = response; this.endHandler = endHandler; return this; } /** * Flag to indicate if the {@link io.vertx.core.http.HttpServerResponse} has been set yet. * * @return boolean flag */ @Override public boolean isResponseSet() { return (response != null); } /** * {@inheritDoc} */ @Override public void end() { checkResponseSet(); if (endHandler != null) { endHandler.handle(null); } else { response.end(); } } /** * {@inheritDoc} */ @Override public WriteStreamOutput write(Buffer data) { checkResponseSet(); response.write(data); return this; } /** * {@inheritDoc} */ @Override public WriteStreamOutput setWriteQueueMaxSize(int maxSize) { checkResponseSet(); response.setWriteQueueMaxSize(maxSize); return null; } /** * {@inheritDoc} */ @Override public boolean writeQueueFull() { checkResponseSet(); return response.writeQueueFull(); } /** * {@inheritDoc} */ @Override public WriteStreamOutput drainHandler(Handler<Void> handler) { checkResponseSet(); response.drainHandler(handler); return this; } /** * {@inheritDoc} */ @Override public WriteStreamOutput exceptionHandler(Handler<Throwable> handler) { checkResponseSet(); response.exceptionHandler(handler); return this; } private void checkResponseSet() { if (response == null) { throw new IllegalStateException("The HttpServerResponse has not been set yet."); } } }