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

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

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

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.TAlbum;
import com.pugh.sockso.web.BadRequestException;
import com.pugh.sockso.web.Request;
import com.pugh.sockso.web.action.BaseAction;

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

/**
*  shows an album and it's tracks
*
*/

public class Albumer extends BaseAction {
   
    /**
     *  browses an album
     *
     *  @param req the request object
     *  @param res the response object
     *
     *  @throws IOException
     *  @throws SQLException
     *  @throws BadRequestException
     *
     */
   
    @Override
    public void handleRequest() throws IOException, SQLException, BadRequestException {
       
        final Request req = getRequest();
        final int id = Integer.parseInt( req.getUrlParam(2)  );
        final Album album = getAlbum ( id );
        final List<Track> tracks = getAlbumTracks( id );
       
        showAlbum( album, tracks );
       
    }
   
    /**
     *  shows the album page listing it's tracks
     *
     *  @param album
     *  @param tracks
     *
     *  @throws java.io.IOException
     *
     */
   
    protected void showAlbum( final Album album, final List<Track> tracks ) throws IOException, SQLException {
       
        final TAlbum tpl = new TAlbum();

        tpl.setAlbum( album );
        tpl.setTracks( tracks );

        getResponse().showHtml( tpl );

    }

    /**
     *  fetches the tracks from an album
     *
     *  @param albumId
     *
     *  @return
     *
     *  @throws java.sql.SQLException
     *
     */
   
    protected List<Track> getAlbumTracks( final int albumId ) throws SQLException {

        ResultSet rs = null;
        PreparedStatement st = null;
       
        try {
           
            final Database db = getDatabase();
            final String sql = Track.getSelectFromSql() +
                  " where t.album_id = ? " +
                  " order by t.track_no asc ";
            st = db.prepare( sql );
            st.setInt( 1, albumId );
            rs = st.executeQuery();

            return Track.createListFromResultSet( rs );
           
        }
       
        finally {
            Utils.close( rs );
            Utils.close( st );
        }
           
    }
   
    /**
     *  fetches an album by id, if it's not found then a BadRequestException
     *  is thrown
     *
     *  @param id
     *
     *  @return
     *
     *  @throws java.sql.SQLException
     *  @throws com.pugh.sockso.web.BadRequestException
     *
     */
   
    protected Album getAlbum( final int id ) throws SQLException, BadRequestException {

        ResultSet rs = null;
        PreparedStatement st = null;
       
        try {
           
            final Database db = getDatabase();
            final String sql = " select ar.id as artistId, ar.name as artistName, " +
                        " al.id as albumId, al.name as albumName, al.year as albumYear, " +
                        " al.date_added, ( " +
                            " select count(*) " +
                            " from play_log l " +
                                " inner join tracks t " +
                                " on t.id = l.track_id " +
                            " where t.album_id = al.id " +
                        " ) as playCount " +
                    " from albums al " +
                        " inner join artists ar " +
                        " on ar.id = al.artist_id " +
                    " where al.id = ? " +
                    " limit 1 ";
            st = db.prepare( sql );
            st.setInt( 1, id );
            rs = st.executeQuery();
            if ( !rs.next() )
                throw new BadRequestException( "album not found", 404 );

            final Artist artist = new Artist.Builder()
                    .id(rs.getInt("artistId"))
                    .name(rs.getString("artistName"))
                    .build();

            return new Album.Builder()
                .artist( artist )
                .id( rs.getInt("albumId") )
                .name( rs.getString("albumName") )
                .year( rs.getString("albumYear") )
                .dateAdded( rs.getDate("date_added") )
                .playCount( rs.getInt("playCount") )
                .build();

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

    }
   
}
TOP

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

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.