Package com.pugh.sockso.web.action

Source Code of com.pugh.sockso.web.action.Homer

/*
* Homer.java
*
* Created on Aug 8, 2007, 9:23:17 PM
*
* Shows the home page.
*/

package com.pugh.sockso.web.action;

import com.pugh.sockso.Constants;
import com.pugh.sockso.Properties;
import com.pugh.sockso.Utils;
import com.pugh.sockso.db.Database;
import com.pugh.sockso.music.Track;
import com.pugh.sockso.music.Album;
import com.pugh.sockso.music.Artist;
import com.pugh.sockso.templates.web.TMain;

import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.util.List;
import java.io.IOException;
import java.util.ArrayList;

import org.apache.log4j.Logger;

public class Homer extends BaseAction {

    private static final Logger log = Logger.getLogger( Homer.class );

    /**
     *  this method shows the home page
     *
     *  @throws SQLException
     *  @throws IOException
     *
     */
   
    public void handleRequest() throws SQLException, IOException {
       
        final Properties p = getProperties();
        final int totalRecentTracks = (int) p.get( Constants.WWW_BROWSE_RECENT_TRACKS_COUNT, 10 );
        final int totalTopArtists = (int) p.get( Constants.WWW_BROWSE_TOP_ARTISTS_COUNT, 10 );
        final List<Track> recentlyPlayedTracks = getRecentlyPlayedTracks( totalRecentTracks );
        final List<Artist> topArtists = getTopArtists( totalTopArtists );
        final List<Album> recentlyPlayedAlbums = getRecentlyPlayedAlbums( 5 );

        showMain( recentlyPlayedTracks, topArtists, recentlyPlayedAlbums );
       
    }
   
    /**
     *  shows the main page
     *
     *  @param recentlyPlayedTracks
     *  @param topArtists
     *  @param recentlyPlayedAlbums
     *
     *  @throws java.io.IOException
     *
     */
   
    protected void showMain( final List<Track> recentlyPlayedTracks,
            final List<Artist> topArtists,
            final List<Album> recentlyPlayedAlbums ) throws IOException, SQLException {
       
        final TMain tpl = new TMain();

        tpl.setRecentTracks( recentlyPlayedTracks );
        tpl.setTopArtists( topArtists );
        tpl.setRecentAlbums( recentlyPlayedAlbums );

        getResponse().showHtml( tpl );

    }

    /**
     *  returns the most played artists (limit set by property)
     *
     *  @return
     *
     *  @throws java.sql.SQLException
     *
     */
   
    protected List<Artist> getTopArtists( final int total ) throws SQLException {
       
        PreparedStatement st = null;
        ResultSet rs = null;

        try {

            final Database db = getDatabase();
            final String sql = " select ar.id as id, ar.name as name, count(t.id) as playCount " +
                    " from play_log l " +
                        " inner join tracks t " +
                        " on t.id = l.track_id " +
                        " inner join artists ar " +
                        " on ar.id = t.artist_id " +
                    " group by ar.id, ar.name " +
                    " order by playCount desc " +
                    " limit ? ";
           
            st = db.prepare( sql );
            st.setInt( 1, total );
            rs = st.executeQuery();
           
            final List<Artist> topArtists = new ArrayList<Artist>();
           
            while ( rs.next() ) {
                topArtists.add( new Artist.Builder()
                        .id(rs.getInt("id"))
                        .name(rs.getString("name"))
                        .playCount(rs.getInt("playCount"))
                        .build()
                );
            }
           
            return topArtists;
           
        }
       
        finally {
            Utils.close( rs );           
            Utils.close( st );           
        }

    }
   
    /**
     *  returns recently played tracks (limit set by property)
     *
     *  @param total
     *
     *  @return
     *
     */
   
    protected List<Track> getRecentlyPlayedTracks( final int total ) throws SQLException {

        PreparedStatement st = null;
        ResultSet rs = null;

        try {

            final Database db = getDatabase();
            final String sql = Track.getSelectSql() +
                    " from ( select l.track_id " +
                            " from play_log l " +
                            " order by l.date_played desc ) r " +
                        " inner join tracks t " +
                        " on r.track_id = t.id " +
                        " inner join genres g " +
                        " on g.id = t.genre_id " +
                        " inner join artists ar " +
                        " on ar.id = t.artist_id " +
                        " inner join albums al " +
                        " on al.id = t.album_id " +
                        " group by artistId, artistName, albumId, albumName, albumYear, " +
                        "trackId, trackName, trackPath, trackNo, genreId, genreName, dateAdded " +
                    " limit ? ";

            st = db.prepare( sql );
            st.setInt( 1, total );
            rs = st.executeQuery();
           
            return Track.createListFromResultSet( rs );

        }
       
        finally {
            Utils.close( rs );
            Utils.close( st );
        }
       
    }
   
    /**
     *  returns a list of the "total" most recent albums to have been played
     *
     *  @param total
     *
     *  @return
     *
     *  @throws SQLException
     *
     */
   
    protected List<Album> getRecentlyPlayedAlbums( final int total ) throws SQLException {

        PreparedStatement st = null;
        ResultSet rs = null;
       
        try {
           
            final Database db = getDatabase();
            final String sql = " select al.id as albumId, al.name as albumName, al.year as albumYear, " +
                        " ar.id as artistId, ar.name as artistName, " +
                        " max(l.date_played) as mostRecent " +
                  " from play_log l " +
                      " inner join tracks t " +
                      " on t.id = l.track_id " +
                      " inner join albums al " +
                      " on al.id = t.album_id " +
                      " inner join artists ar " +
                      " on ar.id = al.artist_id " +
                  " group by albumId, albumName, albumYear, artistId, artistName " +
                  " order by mostRecent desc " +
                  " limit ? ";

            st = db.prepare( sql );
            st.setInt( 1, total );
            rs = st.executeQuery();

            final List<Album> recentAlbums = new ArrayList<Album>();
            while ( rs.next() ) {
                final Artist artist = new Artist.Builder()
                        .id(rs.getInt("artistId"))
                        .name(rs.getString("artistName"))
                        .build();
                recentAlbums.add( new Album.Builder()
                        .artist( artist )
                        .id( rs.getInt("albumId") )
                        .name( rs.getString("albumName") )
                        .year( rs.getString("albumYear") )
                        .build()
                );
            }
           
            return recentAlbums;

        }
       
        finally {
            Utils.close( rs );
            Utils.close( st );
        }

    }
   
}
TOP

Related Classes of com.pugh.sockso.web.action.Homer

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.