Package com.pugh.sockso.web

Source Code of com.pugh.sockso.web.Dispatcher

package com.pugh.sockso.web;

import com.pugh.sockso.Constants;
import com.pugh.sockso.Properties;

import com.pugh.sockso.auth.DBAuthenticator;

import com.pugh.sockso.web.action.AdminAction;
import com.pugh.sockso.web.action.Api;
import com.pugh.sockso.web.action.Downloader;
import com.pugh.sockso.web.action.Coverer;
import com.pugh.sockso.web.action.Feeder;
import com.pugh.sockso.web.action.FileServer;
import com.pugh.sockso.web.action.Homer;
import com.pugh.sockso.web.action.Jsoner;
import com.pugh.sockso.web.action.Nater;
import com.pugh.sockso.web.action.Player;
import com.pugh.sockso.web.action.Sharer;
import com.pugh.sockso.web.action.Streamer;
import com.pugh.sockso.web.action.Uploader;
import com.pugh.sockso.web.action.Userer;
import com.pugh.sockso.web.action.BaseAction;

import com.pugh.sockso.web.action.covers.CachedCoverer;
import com.pugh.sockso.web.action.covers.TagCoverer;
import com.pugh.sockso.web.action.covers.LocalCoverer;
import com.pugh.sockso.web.action.covers.RemoteCoverer;
import com.pugh.sockso.web.action.covers.DefaultCoverer;

import com.pugh.sockso.web.action.admin.Console;

import com.pugh.sockso.web.action.browse.Albumer;
import com.pugh.sockso.web.action.browse.Artister;
import com.pugh.sockso.web.action.browse.ByLetterer;
import com.pugh.sockso.web.action.browse.Folderer;
import com.pugh.sockso.web.action.browse.Latester;
import com.pugh.sockso.web.action.browse.Playlister;
import com.pugh.sockso.web.action.browse.Playlistser;
import com.pugh.sockso.web.action.browse.Popularer;

import com.pugh.sockso.web.action.playlist.M3uer;
import com.pugh.sockso.web.action.playlist.Plser;
import com.pugh.sockso.web.action.playlist.Xspfer;

import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Singleton;

/**
*  looks at the request to determine which web action to invoke
*
*/

@Singleton
public class Dispatcher {

    private final Properties p;
    private final Injector injector;
   
    private String protocol;
    private int port;
   
    @Inject
    public Dispatcher( final Injector injector, final Properties p ) {

        this.injector = injector;
        this.p = p;
       
    }
   
    /**
     *  Initialise the dispatcher with non-injectables
     *
     *  @param protocol
     *  @param port
     *
     */
   
    public void init( final String protocol, final int port ) {
       
        this.protocol = protocol;
        this.port = port;
       
    }
   
    /**
     *  action =s the web action specified by the request
     *
     *  @param req
     *
     *  @action =
     *
     */
   
    public BaseAction getAction( final Request req ) {

        final String command = req.getUrlParam( 0 );
        final String host = getHost();

        BaseAction action = null;
       
        if ( command.equals("file") ) {
            final String fileType = req.getUrlParam( 1 );
            if ( fileType != null && fileType.equals("cover") ) {
                action = getCoverer();
            }
            else {
                action = injector.getInstance( FileServer.class );
            }
        }

        else if ( command.equals("browse") )
            action = getBrowseAction( req );
       
        else if ( command.equals("") )
            action = injector.getInstance( Homer.class );
       
        else if ( command.equals("xspf") ) {
            Xspfer xspf = injector.getInstance( Xspfer.class );
            xspf.init( protocol );
            action = xspf;
        }
               
        else if ( command.equals("m3u") ) {
            M3uer m3u = injector.getInstance( M3uer.class );
            m3u.init( protocol );
            action = m3u;
        }
               
        else if ( command.equals("pls") ) {
            Plser pls = injector.getInstance( Plser.class );
            pls.init( protocol );
            action = pls;
        }
       
        else if ( command.equals("stream") ) {
            action = injector.getInstance( Streamer.class );
        }
       
        else if ( command.equals("api") ) {
            action = injector.getInstance( Api.class );
        }

        else if ( command.equals("json") )
            action = injector.getInstance( Jsoner.class );
       
        else if ( command.equals("user") ) {
            final Userer u = injector.getInstance( Userer.class );
            u.addAuthenticator( injector.getInstance(DBAuthenticator.class) );
            action = u;
        }
       
        else if ( command.equals("player") )
            action = injector.getInstance( Player.class );
       
        else if ( command.equals("download") )
            action = injector.getInstance( Downloader.class );
       
        else if ( command.equals("upload") )
            action = injector.getInstance( Uploader.class );
       
        else if ( command.equals("share") )
            action = injector.getInstance( Sharer.class );
       
        else if ( command.equals("rss") ) {
            final Feeder feeder = injector.getInstance( Feeder.class );
            feeder.init( host );
            action = feeder;
        }

        else if ( command.equals("admin") ) {
            action = getAdminAction( req );
        }
       
        else if ( command.equals("nat") ) {
            action = injector.getInstance( Nater.class );
        }
               
        return action;
       
    }
   
    /**
     *  action =s the handler for a browse action
     *
     *  @param req
     *
     *  @action =
     *
     */
   
    protected BaseAction getBrowseAction( final Request req ) {
       
        final String command = req.getUrlParam( 1 );
       
        if ( command.equals("folders") )
            return injector.getInstance( Folderer.class );
       
        else if ( command.equals("popular") )
            return injector.getInstance( Popularer.class );
       
        else if ( command.equals("latest") )
            return injector.getInstance( Latester.class );
       
        else if ( command.equals("letter") )
            return injector.getInstance( ByLetterer.class );

        else if ( command.equals("artist") )
            return injector.getInstance( Artister.class );

        else if ( command.equals("album"))
            return injector.getInstance( Albumer.class );

        else if ( command.equals("playlists"))
            return injector.getInstance( Playlistser.class );

        else if ( command.equals("playlist"))
            return injector.getInstance( Playlister.class );

        else return null;
       
    }

    /**
     *  Returns an action from the admin namespace
     *
     *  @param req
     *
     *  @return
     *
     */
   
    protected AdminAction getAdminAction( final Request req ) {

        final String command = req.getUrlParam( 1 );

        if ( command.equals("console") ) {
            return injector.getInstance( Console.class  );
        }

        return null;

    }

    /**
     * action =s the ip address the server is bound to and the port that we're
     * listening on
     *
     * @action = ip:port combo
     *
     */

    public String getHost() {

        return p.get( Constants.SERVER_HOST ) + ":" + port;

    }

    /**
     *  Creates and returns a Coverer action
     *
     *  @return
     *
     */

    protected Coverer getCoverer() {

        final Coverer coverer = injector.getInstance( Coverer.class );

        coverer.addPlugin( injector.getInstance(CachedCoverer.class) );
        // TODO coverer.addPlugin( injector.getInstance(TagCoverer.class) );
        coverer.addPlugin( injector.getInstance(LocalCoverer.class) );
        coverer.addPlugin( injector.getInstance(RemoteCoverer.class) );
        coverer.addPlugin( injector.getInstance(DefaultCoverer.class) );

        return coverer;

    }

}
TOP

Related Classes of com.pugh.sockso.web.Dispatcher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.