package com.pugh.sockso.web.action.covers; import com.pugh.sockso.Properties; import com.pugh.sockso.cache.CacheException; import com.pugh.sockso.db.Database; import com.pugh.sockso.music.CoverArt; import com.pugh.sockso.cache.CoverArtCache; import com.pugh.sockso.resources.Locale; import com.pugh.sockso.web.Request; import com.pugh.sockso.web.Response; import com.pugh.sockso.web.action.FileHeaders; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; import org.apache.log4j.Logger; import com.google.inject.Inject; abstract public class BaseCoverer implements CovererPlugin { private static final Logger log = Logger.getLogger( BaseCoverer.class ); private Response res; private Request req; private Properties p; private Locale locale; private Database db; @Inject protected CoverArtCache coverCache; /** * Sets the current database * * @param db * */ public void setDatabase( final Database db ) { this.db = db; } /** * Returns the database connection * * @return * */ public Database getDatabase() { return db; } /** * Sets the current locale object * * @param locale * */ public void setLocale( final Locale locale ) { this.locale = locale; } /** * Fetches the current locale object * * @return * */ public Locale getLocale() { return locale; } /** * Set the response object * * @param res * */ public void setResponse( final Response res ) { this.res = res; } /** * Returns the response object * * @return * */ protected Response getResponse() { return res; } /** * Sets the request object * * @param req * */ public void setRequest( final Request req ) { this.req = req; } /** * Returns the request object * * @return * */ protected Request getRequest() { return req; } /** * Set application properties * * @param p * */ public void setProperties( final Properties p ) { this.p = p; } /** * Fetch application properties * * @return * */ public Properties getProperties() { return p; } /** * Serves a cover in the response * * @param cover * @param itemName * @param addToCache * * @throws IOException * */ protected void serveCover( final CoverArt cover, final String itemName, final boolean addToCache) throws IOException, CacheException { if ( addToCache ){ coverCache.addToCache(cover); } if ( req.hasArgument("width") && req.hasArgument("height") ) { final int width = Integer.parseInt( req.getArgument("width") ); final int height = Integer.parseInt( req.getArgument("height") ); log.debug( "Scaling cover to " +width+ ":" +height ); cover.scale(width, height); } final String extension = CoverArtCache.DEFAULT_IMAGE_TYPE; final BufferedImage image = cover.getImage(); sendHeaders( itemName + "." + extension ); ImageIO.write( image, extension, res.getOutputStream() ); } /** * Send headers for the file name (sends mime type from extension too) * * @param filename * */ protected void sendHeaders( final String filename ) { FileHeaders fh = new FileHeaders( getResponse(), getProperties() ); fh.sendHeaders( filename ); } }