View Javadoc

1   package com.atlassian.plugin.webresource.transformer;
2   
3   import com.atlassian.plugin.servlet.DownloadException;
4   import com.atlassian.plugin.servlet.DownloadableResource;
5   import org.apache.commons.lang.StringUtils;
6   
7   import javax.servlet.http.HttpServletRequest;
8   import javax.servlet.http.HttpServletResponse;
9   import java.io.*;
10  
11  /**
12   * Abstract class for implementing downloadable resources that are wrapping an underlying resource as part of a
13   * {@link WebResourceTransformer} implementation.  Subclasses are expected to implement {@link #streamResource(OutputStream)},
14   * while the other methods are delegated by default.
15   *
16   * @since 2.5.0
17   */
18  public abstract class AbstractTransformedDownloadableResource implements DownloadableResource
19  {
20      private final DownloadableResource originalResource;
21  
22      public AbstractTransformedDownloadableResource(DownloadableResource originalResource) {
23          this.originalResource = originalResource;
24      }
25  
26      public boolean isResourceModified(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
27          return originalResource.isResourceModified(httpServletRequest, httpServletResponse);
28      }
29  
30      public void serveResource(HttpServletRequest httpServletRequest, HttpServletResponse response) throws DownloadException
31      {
32          // Allow subclasses to override the content type
33          final String contentType = getContentType();
34          if (StringUtils.isNotBlank(contentType))
35          {
36              response.setContentType(contentType);
37          }
38  
39          OutputStream out;
40          try
41          {
42              out = response.getOutputStream();
43          }
44          catch (final IOException e)
45          {
46              throw new DownloadException(e);
47          }
48  
49          streamResource(out);
50      }
51  
52      public String getContentType() {
53          return originalResource.getContentType();
54      }
55  
56      protected DownloadableResource getOriginalResource()
57      {
58          return originalResource;
59      }
60  }