All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.spincast.plugins.routing.WebsocketRouteBuilder Maven / Gradle / Ivy

The newest version!
package org.spincast.plugins.routing;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import org.spincast.core.exchange.IRequestContext;
import org.spincast.core.routing.IHandler;
import org.spincast.core.routing.IRouter;
import org.spincast.core.websocket.IWebsocketContext;
import org.spincast.core.websocket.IWebsocketController;
import org.spincast.core.websocket.IWebsocketRoute;
import org.spincast.core.websocket.IWebsocketRouteBuilder;

import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.AssistedInject;

public class WebsocketRouteBuilder, W extends IWebsocketContext>
                                  implements IWebsocketRouteBuilder {

    private final IWebsocketRouteFactory websocketRouteFactory;
    private final IRouter router;
    private String path;
    private String id;
    private List> beforeFilters;
    private IWebsocketController websocketController;

    @AssistedInject
    public WebsocketRouteBuilder(IWebsocketRouteFactory websocketRouteFactory) {
        this(null, websocketRouteFactory);
    }

    @AssistedInject
    public WebsocketRouteBuilder(@Assisted IRouter router,
                                 IWebsocketRouteFactory websocketRouteFactory) {
        this.router = router;
        this.websocketRouteFactory = websocketRouteFactory;
    }

    protected IWebsocketRouteFactory getWebsocketRouteFactory() {
        return this.websocketRouteFactory;
    }

    protected IRouter getRouter() {
        return this.router;
    }

    public String getPath() {
        return this.path;
    }

    public String getId() {
        return this.id;
    }

    public IWebsocketController getWebsocketController() {
        return this.websocketController;
    }

    @Override
    public IWebsocketRouteBuilder path(String path) {
        this.path = path;
        return this;
    }

    @Override
    public IWebsocketRouteBuilder id(String id) {
        this.id = id;
        return this;
    }

    @Override
    public IWebsocketRouteBuilder before(IHandler beforeFilter) {

        Objects.requireNonNull(beforeFilter, "beforeFilter can't be NULL");

        getBeforeFilters().add(beforeFilter);
        return this;
    }

    public List> getBeforeFilters() {
        if(this.beforeFilters == null) {
            this.beforeFilters = new ArrayList>();
        }
        return this.beforeFilters;
    }

    @Override
    public void save(IWebsocketController websocketController) {

        if(getRouter() == null) {
            throw new RuntimeException("No router specified, can't save the Websocket route!");
        }

        IWebsocketRoute websocketRoute = create(websocketController);
        getRouter().addWebsocketRoute(websocketRoute);
    }

    @Override
    public IWebsocketRoute create(IWebsocketController websocketController) {

        this.websocketController = websocketController;

        IWebsocketRoute websocketRoute = getWebsocketRouteFactory().createRoute(getId(),
                                                                                      getPath(),
                                                                                      getBeforeFilters(),
                                                                                      websocketController);
        return websocketRoute;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy