Package com.pugh.sockso.web.action.browse

Source Code of com.pugh.sockso.web.action.browse.Latester

package com.pugh.sockso.web.action.browse;

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.Album;
import com.pugh.sockso.music.Artist;
import com.pugh.sockso.music.Track;
import com.pugh.sockso.templates.web.browse.TLatest;
import com.pugh.sockso.web.action.BaseAction;

import org.apache.log4j.Logger;

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

/**
*  shows the latest tracks/artists added to the collection
*
*/

public class Latester extends BaseAction {
   
    private static final Logger log = Logger.getLogger( Latester.class  );
       
    /**
     *  shows the latest music added to the collection
     *
     *  @param req the request object
     *  @param res the response object
     *
     *  @throws SQLException
     *  @throws IOException
     *
     */
   
    @Override
    public void handleRequest() throws SQLException, IOException {
       
        final Properties p = getProperties();
        final List<Track> tracks = getLatestTracks( (int) p.get(Constants.WWW_BROWSE_LATEST_TRACKS_COUNT,20) );
        final List<Artist> artists = getLatestArtists();
        final List<Album> albums = getLatestAlbums();
       
        showLatest( tracks, artists, albums );
       
    }

    /**
     *  shows the page with the latest tracks and artists that have been
     *  added to the collection
     *
     *  @param tracks
     *  @param artists
     *
     *  @throws java.io.IOException
     *
     */
   
    protected void showLatest( final List<Track> tracks, final List<Artist> artists, final List<Album> albums ) throws IOException, SQLException {

        final TLatest tpl = new TLatest();
       
        tpl.setTracks( tracks );
        tpl.setArtists( artists );
        tpl.setAlbums( albums );
       
        getResponse().showHtml( tpl );
       
    }

    /**
     *  returns the latest artists.  the number returned is set in properties
     *
     *  @return
     *
     *  @throws java.sql.SQLException
     *
     */
   
    protected List<Artist> getLatestArtists() throws SQLException {
       
        final ResultSet rs = getLatestMusic( "artist", Constants.WWW_BROWSE_LATEST_ARTISTS_COUNT );
        final List<Artist> artists = new ArrayList<Artist>();

        while ( rs.next() ) {
            artists.add(
                new Artist.Builder()
                    .id(rs.getInt("id"))
                    .name(rs.getString("name"))
                    .build()
            );
        }

        Utils.close( rs );
       
        return artists;

    }

    /**
     *  queries the database for the latest music of the specified type.  the property
     *  name is the name of the property that controls how many results are returned.
     *
     *  @param type
     *  @param totalPropertyName
     *
     *  @return
     *
     *  @throws java.sql.SQLException
     *
     */
   
    private ResultSet getLatestMusic( final String type, final String totalPropertyName ) throws SQLException {
   
        PreparedStatement st = null;
       
        final Properties p = getProperties();
        final Database db = getDatabase();
        final String sql = " select ar.id, ar.name, max(t.date_added) as mostRecent " +
                    " from tracks t " +
                        " inner join " +type+ "s ar " +
                        " on ar.id = t." +type+ "_id " +
                    " group by ar.id, ar.name " +
                    " order by mostRecent desc " +
                    " limit ? ";
        st = db.prepare( sql );
        st.setInt( 1, (int) p.get(totalPropertyName,10) );

        return st.executeQuery();

    }
   
    /**
     *  returns the latest albums that have been added
     *
     *  @return
     *
     *  @throws java.sql.SQLException
     *
     */
   
    protected List<Album> getLatestAlbums() throws SQLException {
       
        final ResultSet rs = getLatestMusic( "album", Constants.WWW_BROWSE_LATEST_ALBUMS_COUNT );
        final List<Album> albums = new ArrayList<Album>();

        while ( rs.next() )
            albums.add(
                new Album.Builder()
                    .id( rs.getInt("id") )
                    .name( rs.getString("name") )
                    .build()
            );

        return albums;
       
    }
   
}
TOP

Related Classes of com.pugh.sockso.web.action.browse.Latester

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.