Subversion Repositories general

Rev

Rev 1272 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
936 dev 1
package ak.photoalbum.webapp;
2
 
3
import javax.servlet.http.HttpServletRequest;
4
import javax.servlet.http.HttpServletResponse;
5
import org.apache.struts.action.ActionMapping;
6
import org.apache.struts.action.ActionForm;
7
import org.apache.struts.action.ActionForward;
8
import org.apache.log4j.Logger;
1249 dev 9
import ak.photoalbum.logic.Logic;
1272 dev 10
import ak.photoalbum.util.TimestampRecipient;
936 dev 11
 
12
public final class ImageAction
13
  extends BaseAction
14
{
15
  private static final Logger logger = Logger.getLogger(ImageAction.class);
16
 
17
  public ActionForward executeAction(ActionMapping mapping, ActionForm form,
18
     HttpServletRequest request, HttpServletResponse response)
19
    throws Exception
20
  {
1272 dev 21
    PathForm               theForm            = (PathForm)form;
22
    String                 branch             = theForm.getBranch();
23
    String                 path               = theForm.getPath();
24
    Logic                  logic              = Logic.getLogic();
25
    HttpTimestampRecipient timestampRecipient = new HttpTimestampRecipient(response);
26
    long                   ifModifiedSince;
27
    boolean                fileModified       = true;
936 dev 28
 
1272 dev 29
    try {
30
      ifModifiedSince = request.getDateHeader("If-Modified-Since");
31
    }
32
    catch(Exception ex) {
33
      ifModifiedSince = -1;
34
    }
35
 
936 dev 36
    logger.info("get image " + mapping.getParameter() + " for " + path);
37
 
38
    if("dir".equals(mapping.getParameter())) {
1249 dev 39
      response.setContentType(logic.getThumbnailMime(branch));
1272 dev 40
      fileModified = logic.writeDir(branch, path, ifModifiedSince,
41
        response.getOutputStream(), timestampRecipient);
936 dev 42
    }
43
    else if("small".equals(mapping.getParameter())) {
1249 dev 44
      response.setContentType(logic.getThumbnailMime(branch));
1272 dev 45
      fileModified = logic.writeSmall(branch, path, ifModifiedSince,
46
        response.getOutputStream(), timestampRecipient);
936 dev 47
    }
48
    else if("medium".equals(mapping.getParameter())) {
1249 dev 49
      response.setContentType(logic.getThumbnailMime(branch));
1272 dev 50
      fileModified = logic.writeMedium(branch, path, ifModifiedSince,
51
        response.getOutputStream(), timestampRecipient);
936 dev 52
    }
53
    else if("origin".equals(mapping.getParameter())) {
1249 dev 54
      response.setContentType(logic.getOriginMime(branch, path));
1272 dev 55
      fileModified = logic.writeOrigin(branch, path, ifModifiedSince,
56
        response.getOutputStream(), timestampRecipient);
936 dev 57
    }
58
 
1272 dev 59
    // if file was modified comapring to "If-Modified-Since" header, then it's already written
60
    // into to response; otherwise send 304 code
61
    if(!fileModified) {
62
      response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
63
    }
64
 
936 dev 65
    return null;
66
  }
1272 dev 67
 
68
  private class HttpTimestampRecipient
69
    implements TimestampRecipient
70
  {
1274 dev 71
    private final HttpServletResponse response;
1272 dev 72
 
73
    public HttpTimestampRecipient(HttpServletResponse response)
74
    {
75
      this.response = response;
76
    }
77
 
78
    public void setTimestamp(long timestamp)
79
    {
80
      response.setDateHeader("Last-Modified", timestamp);
81
    }
82
  }
936 dev 83
}