View Javadoc
1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2016 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  import java.nio.ByteBuffer;
24  import java.nio.channels.ReadableByteChannel;
25  import java.util.Map;
26  
27  import org.eclipse.jetty.http.MimeTypes.Type;
28  import org.eclipse.jetty.util.resource.Resource;
29  
30  /* ------------------------------------------------------------ */
31  public class PrecompressedHttpContent implements HttpContent
32  {
33      private final HttpContent _content;
34      private final HttpContent _precompressedContent;
35      private final CompressedContentFormat _format;
36  
37      public PrecompressedHttpContent(HttpContent content, HttpContent precompressedContent, CompressedContentFormat format)
38      {
39          _content = content;
40          _precompressedContent = precompressedContent;
41          _format = format;
42          if (_precompressedContent == null || _format == null)
43          {
44              throw new NullPointerException("Missing compressed content and/or format");
45          }
46      }
47  
48      @Override
49      public int hashCode()
50      {
51          return _content.hashCode();
52      }
53  
54      @Override
55      public boolean equals(Object obj)
56      {
57          return _content.equals(obj);
58      }
59  
60      @Override
61      public Resource getResource()
62      {
63          return _content.getResource();
64      }
65  
66      @Override
67      public HttpField getETag()
68      {
69          return new HttpField(HttpHeader.ETAG,getETagValue());
70      }
71  
72      @Override
73      public String getETagValue()
74      {
75          return _content.getResource().getWeakETag(_format._etag);
76      }
77  
78      @Override
79      public HttpField getLastModified()
80      {
81          return _content.getLastModified();
82      }
83  
84      @Override
85      public String getLastModifiedValue()
86      {
87          return _content.getLastModifiedValue();
88      }
89  
90      @Override
91      public HttpField getContentType()
92      {
93          return _content.getContentType();
94      }
95  
96      @Override
97      public String getContentTypeValue()
98      {
99          return _content.getContentTypeValue();
100     }
101 
102     @Override
103     public HttpField getContentEncoding()
104     {
105         return _format._contentEncoding;
106     }
107 
108     @Override
109     public String getContentEncodingValue()
110     {
111         return _format._contentEncoding.getValue();
112     }
113 
114     @Override
115     public String getCharacterEncoding()
116     {
117         return _content.getCharacterEncoding();
118     }
119 
120     @Override
121     public Type getMimeType()
122     {
123         return _content.getMimeType();
124     }
125 
126     @Override
127     public void release()
128     {
129         _content.release();
130     }
131 
132     @Override
133     public ByteBuffer getIndirectBuffer()
134     {
135         return _precompressedContent.getIndirectBuffer();
136     }
137 
138     @Override
139     public ByteBuffer getDirectBuffer()
140     {
141         return _precompressedContent.getDirectBuffer();
142     }
143 
144     @Override
145     public HttpField getContentLength()
146     {
147         return _precompressedContent.getContentLength();
148     }
149 
150     @Override
151     public long getContentLengthValue()
152     {
153         return _precompressedContent.getContentLengthValue();
154     }
155 
156     @Override
157     public InputStream getInputStream() throws IOException
158     {
159         return _precompressedContent.getInputStream();
160     }
161 
162     @Override
163     public ReadableByteChannel getReadableByteChannel() throws IOException
164     {
165         return _precompressedContent.getReadableByteChannel();
166     }
167 
168     @Override
169     public String toString()
170     {
171         return String.format("PrecompressedHttpContent@%x{e=%s,r=%s|%s,lm=%s|%s,ct=%s}",hashCode(),_format._encoding,
172                 _content.getResource(),_precompressedContent.getResource(),
173                 _content.getResource().lastModified(),_precompressedContent.getResource().lastModified(),
174                 getContentType());
175     }
176 
177     @Override
178     public Map<CompressedContentFormat, HttpContent> getPrecompressedContents()
179     {
180         return null;
181     }
182 }