package sk.stuba.fiit.perconik.elasticsearch.ui.preferences; import java.util.Map; import java.util.SortedMap; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableSortedMap; import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse; import org.elasticsearch.action.admin.cluster.stats.ClusterStatsResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import sk.stuba.fiit.perconik.elasticsearch.ElasticsearchProxy; import sk.stuba.fiit.perconik.elasticsearch.ElasticsearchProxy.Task; import sk.stuba.fiit.perconik.elasticsearch.SharedElasticsearchProxy; import sk.stuba.fiit.perconik.elasticsearch.preferences.ElasticsearchOptions; import sk.stuba.fiit.perconik.utilities.configuration.MapOptions; import static java.lang.System.lineSeparator; import static com.google.common.collect.Maps.newLinkedHashMap; import static sk.stuba.fiit.perconik.elasticsearch.preferences.ElasticsearchOptions.Schema.displayErrors; import static sk.stuba.fiit.perconik.elasticsearch.preferences.ElasticsearchOptions.Schema.logErrors; import static sk.stuba.fiit.perconik.elasticsearch.preferences.ElasticsearchOptions.Schema.logNotices; final class ElasticsearchHandler { static ElasticsearchProxy createProxy(final ElasticsearchOptions options) { return new SharedElasticsearchProxy(stripReporting(options)); } static ElasticsearchOptions stripReporting(final ElasticsearchOptions options) { Map<String, Object> raw = newLinkedHashMap(options.toMap()); raw.put(displayErrors.getKey(), false); raw.put(logNotices.getKey(), false); raw.put(logErrors.getKey(), false); return ElasticsearchOptions.View.of(MapOptions.view(raw)); } static String formatSettings(final Settings settings) { return Joiner.on(lineSeparator()).withKeyValueSeparator(" = ").join(sortSettings(settings)); } static SortedMap<String, ?> sortSettings(final Settings settings) { return ImmutableSortedMap.copyOf(settings.getAsMap()); } static ClusterStateResponse requestClusterState(final ElasticsearchProxy proxy) { return proxy.execute(new Task<ClusterStateResponse>() { public ClusterStateResponse perform(final TransportClient client) { return client.admin().cluster().prepareState().get(); } }); } static ClusterStatsResponse requestClusterStats(final ElasticsearchProxy proxy) { return proxy.execute(new Task<ClusterStatsResponse>() { public ClusterStatsResponse perform(final TransportClient client) { return client.admin().cluster().prepareClusterStats().get(); } }); } }