• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 //  ========================================================================
3 //  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
4 //  ------------------------------------------------------------------------
5 //  All rights reserved. This program and the accompanying materials
6 //  are made available under the terms of the Eclipse Public License v1.0
7 //  and Apache License v2.0 which accompanies this distribution.
8 //
9 //      The Eclipse Public License is available at
10 //      http://www.eclipse.org/legal/epl-v10.html
11 //
12 //      The Apache License v2.0 is available at
13 //      http://www.opensource.org/licenses/apache2.0.php
14 //
15 //  You may elect to redistribute this code under either of these licenses.
16 //  ========================================================================
17 //
18 
19 package org.eclipse.jetty.http;
20 
21 import java.io.IOException;
22 import java.io.InputStream;
23 
24 import org.eclipse.jetty.io.Buffer;
25 import org.eclipse.jetty.io.ByteArrayBuffer;
26 import org.eclipse.jetty.util.log.Log;
27 import org.eclipse.jetty.util.log.Logger;
28 import org.eclipse.jetty.util.resource.Resource;
29 
30 /* ------------------------------------------------------------ */
31 /** HttpContent.
32  *
33  *
34  */
35 public interface HttpContent
36 {
getContentType()37     Buffer getContentType();
getLastModified()38     Buffer getLastModified();
getIndirectBuffer()39     Buffer getIndirectBuffer();
getDirectBuffer()40     Buffer getDirectBuffer();
getETag()41     Buffer getETag();
getResource()42     Resource getResource();
getContentLength()43     long getContentLength();
getInputStream()44     InputStream getInputStream() throws IOException;
release()45     void release();
46 
47     /* ------------------------------------------------------------ */
48     /* ------------------------------------------------------------ */
49     /* ------------------------------------------------------------ */
50     public class ResourceAsHttpContent implements HttpContent
51     {
52         private static final Logger LOG = Log.getLogger(ResourceAsHttpContent.class);
53 
54         final Resource _resource;
55         final Buffer _mimeType;
56         final int _maxBuffer;
57         final Buffer _etag;
58 
59         /* ------------------------------------------------------------ */
ResourceAsHttpContent(final Resource resource, final Buffer mimeType)60         public ResourceAsHttpContent(final Resource resource, final Buffer mimeType)
61         {
62             this(resource,mimeType,-1,false);
63         }
64 
65         /* ------------------------------------------------------------ */
ResourceAsHttpContent(final Resource resource, final Buffer mimeType, int maxBuffer)66         public ResourceAsHttpContent(final Resource resource, final Buffer mimeType, int maxBuffer)
67         {
68             this(resource,mimeType,maxBuffer,false);
69         }
70 
71         /* ------------------------------------------------------------ */
ResourceAsHttpContent(final Resource resource, final Buffer mimeType, boolean etag)72         public ResourceAsHttpContent(final Resource resource, final Buffer mimeType, boolean etag)
73         {
74             this(resource,mimeType,-1,etag);
75         }
76 
77         /* ------------------------------------------------------------ */
ResourceAsHttpContent(final Resource resource, final Buffer mimeType, int maxBuffer, boolean etag)78         public ResourceAsHttpContent(final Resource resource, final Buffer mimeType, int maxBuffer, boolean etag)
79         {
80             _resource=resource;
81             _mimeType=mimeType;
82             _maxBuffer=maxBuffer;
83             _etag=etag?new ByteArrayBuffer(resource.getWeakETag()):null;
84         }
85 
86         /* ------------------------------------------------------------ */
getContentType()87         public Buffer getContentType()
88         {
89             return _mimeType;
90         }
91 
92         /* ------------------------------------------------------------ */
getLastModified()93         public Buffer getLastModified()
94         {
95             return null;
96         }
97 
98         /* ------------------------------------------------------------ */
getDirectBuffer()99         public Buffer getDirectBuffer()
100         {
101             return null;
102         }
103 
104         /* ------------------------------------------------------------ */
getETag()105         public Buffer getETag()
106         {
107             return _etag;
108         }
109 
110         /* ------------------------------------------------------------ */
getIndirectBuffer()111         public Buffer getIndirectBuffer()
112         {
113             InputStream inputStream = null;
114             try
115             {
116                 if (_resource.length() <= 0 || _maxBuffer < _resource.length())
117                     return null;
118                 ByteArrayBuffer buffer = new ByteArrayBuffer((int)_resource.length());
119                 inputStream = _resource.getInputStream();
120                 buffer.readFrom(inputStream,(int)_resource.length());
121                 return buffer;
122             }
123             catch (IOException e)
124             {
125                 throw new RuntimeException(e);
126             }
127             finally
128             {
129                 if (inputStream != null)
130                 {
131                     try
132                     {
133                         inputStream.close();
134                     }
135                     catch (IOException e)
136                     {
137                         LOG.warn("Couldn't close inputStream. Possible file handle leak",e);
138                     }
139                 }
140             }
141         }
142 
143         /* ------------------------------------------------------------ */
getContentLength()144         public long getContentLength()
145         {
146             return _resource.length();
147         }
148 
149         /* ------------------------------------------------------------ */
getInputStream()150         public InputStream getInputStream() throws IOException
151         {
152             return _resource.getInputStream();
153         }
154 
155         /* ------------------------------------------------------------ */
getResource()156         public Resource getResource()
157         {
158             return _resource;
159         }
160 
161         /* ------------------------------------------------------------ */
release()162         public void release()
163         {
164             _resource.release();
165         }
166     }
167 }
168