package com.servershepherd.beume.resources;
import com.servershepherd.beume.CacheException;
import com.servershepherd.beume.CommonResources;
import com.servershepherd.beume.FrontKey;
import java.util.regex.Pattern;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import net.sf.ehcache.Element;
/**
*
* @author marc
*/
@Path("/cidi.jpg")
public class Resizer {
Pattern p = Pattern.compile("^(.*)\\[([^\\]]+)\\]");
@GET
@Produces("image/*")
public Response getFullImage(@QueryParam("source") String source,
@QueryParam("resize") String resize,
@QueryParam("filter") String filter,
@QueryParam("q") int mod) {
// System.out.println("Source:"+source);
// System.out.println("Resize:"+resize);
// System.out.println("mod:"+mod);
Element result;
try {
FrontKey fk = createKey(mod, source, resize, filter);
result = CommonResources.front.get(fk);
if (result == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Image not found").build();
} else if (result.getObjectValue() instanceof String) {
return Response.status(Response.Status.BAD_REQUEST).entity(result.getObjectValue()).type(MediaType.TEXT_PLAIN).build();
} else {
return Response.ok(result.getObjectValue()).type("image/jpeg").build();
}
} catch (CacheException e) {
return Response.status(Response.Status.BAD_REQUEST).entity(e.toString()).type(MediaType.TEXT_PLAIN).build();
}
}
private FrontKey createKey(int mod, String source, String resize, String filter) throws NumberFormatException, CacheException {
if (mod>100||mod<0) throw new CacheException("Quality must be 0-100");
int fmod = mod;
String[] a = resize.split("x");
if (a.length!=2) throw new CacheException("Wrong resize format \""+resize+"\" not \"WxH\"");
int fresize_x,fresize_y;
try {
fresize_x = Integer.parseInt(a[0]);
fresize_y = Integer.parseInt(a[1]);
} catch (NumberFormatException nfe) {
throw new CacheException("Wrong resize format (NaN)",nfe);
}
if ((filter==null)||("".equals(filter))) filter=CommonResources.DEFAULT_FILTER;
return new FrontKey(source, fresize_x, fresize_y, filter, fmod);
}
}