package sk.stuba.fiit.perconik.elasticsearch; import javax.annotation.Nullable; import org.elasticsearch.client.transport.TransportClient; import static java.lang.String.format; public abstract class AbstractElasticsearchProxy implements ElasticsearchProxy { public AbstractElasticsearchProxy() {} protected abstract TransportClient client(); public final <T> T execute(final Task<T> task) { final TransportClient client = this.client(); try { return task.perform(client); } catch (Exception failure) { this.reportFailure(format("unexpected failure while performing %s on %s", task, client), failure); throw failure; } } @SuppressWarnings("unused") protected void reportMessage(final String message) {} @SuppressWarnings("unused") protected void reportFailure(final String message, @Nullable final Exception failure) {} }