1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 }