Subversion Repositories general

Rev

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