package com.pugh.sockso.web.action; 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.resources.Locale; import com.pugh.sockso.web.Request; import com.pugh.sockso.web.Response; import com.pugh.sockso.web.User; import com.google.inject.Inject; import org.apache.log4j.Logger; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; public abstract class BaseAction implements WebAction { private static final Logger log = Logger.getLogger( BaseAction.class ); private Request req; private Response res; private User user; private Locale locale; private Database db; private Properties p; /** * Indicates if this web action requires a login to be executed. If it does * not require a login then a session doesn't need to be started. * * @return boolean true if login required, false otherwise * */ @Override public boolean requiresLogin() { return true; } /** * All actions require a session by default * * @return * */ @Override public boolean requiresSession() { return true; } /** * Some getters for the standard objects * */ protected Request getRequest() { return req; } protected Response getResponse() { return res; } protected User getUser() { return user; } protected Locale getLocale() { return locale; } protected Database getDatabase() { return db; } protected Properties getProperties() { return p; } /** * And setters (used for DI during testing) * */ @Override @Inject public void setDatabase( final Database db ) { this.db = db; } @Override @Inject public void setProperties( final Properties p ) { this.p = p; } @Override public void setUser( final User user ) { this.user = user; } @Override public void setResponse( final Response res ) { this.res = res; } @Override public void setRequest( final Request req ) { this.req = req; } @Override public void setLocale( final Locale locale ) { this.locale = locale; } /** * fetches the latest tracks (limited by limit, obv...) * * @param int limit * * @return * * @throws java.sql.SQLException * * @todo move to Track class * */ protected List<Track> getLatestTracks( final int limit ) throws SQLException { ResultSet rs = null; PreparedStatement st = null; try { // latest tracks String sql = Track.getSelectFromSql() + " order by t.date_added desc " + " limit ? "; st = db.prepare( sql ); st.setInt( 1, limit ); rs = st.executeQuery(); return Track.createListFromResultSet( rs ); } finally { Utils.close( rs ); Utils.close( st ); } } }