001package org.xbib.elasticsearch.plugin.websocket;
002
003import org.elasticsearch.action.ActionModule;
004import org.elasticsearch.common.component.LifecycleComponent;
005import org.elasticsearch.common.inject.Module;
006import org.elasticsearch.common.settings.Settings;
007import org.elasticsearch.plugins.AbstractPlugin;
008import org.elasticsearch.rest.RestModule;
009import org.xbib.elasticsearch.action.cluster.admin.websocket.TransportWebsocketInfoAction;
010import org.xbib.elasticsearch.action.cluster.admin.websocket.WebsocketInfoAction;
011import org.xbib.elasticsearch.action.websocket.pubsub.Checkpointer;
012import org.xbib.elasticsearch.http.HttpServer;
013import org.xbib.elasticsearch.http.HttpServerModule;
014import org.xbib.elasticsearch.rest.action.websocket.RestPublishAction;
015import org.xbib.elasticsearch.rest.action.websocket.RestUnsubscribeAction;
016
017import java.util.Collection;
018
019import static org.elasticsearch.common.collect.Lists.newArrayList;
020
021/**
022 * Websocket plugin
023 */
024public class WebSocketPlugin extends AbstractPlugin {
025
026    private final Settings settings;
027
028    public WebSocketPlugin(Settings settings) {
029        this.settings = settings;
030    }
031
032    @Override
033    public String name() {
034        return "transport-websocket-"
035                + Build.getInstance().getVersion() + "-"
036                + Build.getInstance().getShortHash();
037    }
038
039    @Override
040    public String description() {
041        return "Websocket transport plugin";
042    }
043
044    @Override
045    public Collection<Class<? extends Module>> modules() {
046        Collection<Class<? extends Module>> modules = newArrayList();
047        if (settings.getAsBoolean("websocket.enabled", true)) {
048            modules.add(HttpServerModule.class);
049            modules.add(WebSocketModule.class);
050        }
051        return modules;
052    }
053
054    @Override
055    public Collection<Class<? extends LifecycleComponent>> services() {
056        Collection<Class<? extends LifecycleComponent>> services = newArrayList();
057        if (settings.getAsBoolean("websocket.enabled", true)) {
058            services.add(HttpServer.class);
059            services.add(Checkpointer.class);
060        }
061        return services;
062    }
063
064    public void onModule(ActionModule module) {
065        module.registerAction(WebsocketInfoAction.INSTANCE, TransportWebsocketInfoAction.class);
066    }
067
068    public void onModule(RestModule module) {
069        module.addRestAction(RestPublishAction.class);
070        module.addRestAction(RestUnsubscribeAction.class);
071    }
072
073}