Code cleanups.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
This commit is contained in:
parent
c14f7efc95
commit
b09760ca9a
|
@ -24,7 +24,6 @@ import java.io.InputStream;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.channels.ReadableByteChannel;
|
import java.nio.channels.ReadableByteChannel;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
|
@ -50,9 +49,6 @@ import org.eclipse.jetty.util.log.Logger;
|
||||||
import org.eclipse.jetty.util.resource.Resource;
|
import org.eclipse.jetty.util.resource.Resource;
|
||||||
import org.eclipse.jetty.util.resource.ResourceFactory;
|
import org.eclipse.jetty.util.resource.ResourceFactory;
|
||||||
|
|
||||||
/**
|
|
||||||
* Caching HttpContent.Factory
|
|
||||||
*/
|
|
||||||
public class CachedContentFactory implements HttpContent.ContentFactory
|
public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
{
|
{
|
||||||
private static final Logger LOG = Log.getLogger(CachedContentFactory.class);
|
private static final Logger LOG = Log.getLogger(CachedContentFactory.class);
|
||||||
|
@ -72,8 +68,9 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
private int _maxCachedFiles = 2048;
|
private int _maxCachedFiles = 2048;
|
||||||
private int _maxCacheSize = 256 * 1024 * 1024;
|
private int _maxCacheSize = 256 * 1024 * 1024;
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/**
|
||||||
/** Constructor.
|
* Constructor.
|
||||||
|
*
|
||||||
* @param parent the parent resource cache
|
* @param parent the parent resource cache
|
||||||
* @param factory the resource factory
|
* @param factory the resource factory
|
||||||
* @param mimeTypes Mimetype to use for meta data
|
* @param mimeTypes Mimetype to use for meta data
|
||||||
|
@ -84,7 +81,7 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
public CachedContentFactory(CachedContentFactory parent, ResourceFactory factory, MimeTypes mimeTypes, boolean useFileMappedBuffer, boolean etags, CompressedContentFormat[] precompressedFormats)
|
public CachedContentFactory(CachedContentFactory parent, ResourceFactory factory, MimeTypes mimeTypes, boolean useFileMappedBuffer, boolean etags, CompressedContentFormat[] precompressedFormats)
|
||||||
{
|
{
|
||||||
_factory = factory;
|
_factory = factory;
|
||||||
_cache=new ConcurrentHashMap<String,CachedHttpContent>();
|
_cache = new ConcurrentHashMap<>();
|
||||||
_cachedSize = new AtomicInteger();
|
_cachedSize = new AtomicInteger();
|
||||||
_cachedFiles = new AtomicInteger();
|
_cachedFiles = new AtomicInteger();
|
||||||
_mimeTypes = mimeTypes;
|
_mimeTypes = mimeTypes;
|
||||||
|
@ -94,56 +91,48 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
_precompressedFormats = precompressedFormats;
|
_precompressedFormats = precompressedFormats;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
public int getCachedSize()
|
public int getCachedSize()
|
||||||
{
|
{
|
||||||
return _cachedSize.get();
|
return _cachedSize.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
public int getCachedFiles()
|
public int getCachedFiles()
|
||||||
{
|
{
|
||||||
return _cachedFiles.get();
|
return _cachedFiles.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
public int getMaxCachedFileSize()
|
public int getMaxCachedFileSize()
|
||||||
{
|
{
|
||||||
return _maxCachedFileSize;
|
return _maxCachedFileSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
public void setMaxCachedFileSize(int maxCachedFileSize)
|
public void setMaxCachedFileSize(int maxCachedFileSize)
|
||||||
{
|
{
|
||||||
_maxCachedFileSize = maxCachedFileSize;
|
_maxCachedFileSize = maxCachedFileSize;
|
||||||
shrinkCache();
|
shrinkCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
public int getMaxCacheSize()
|
public int getMaxCacheSize()
|
||||||
{
|
{
|
||||||
return _maxCacheSize;
|
return _maxCacheSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
public void setMaxCacheSize(int maxCacheSize)
|
public void setMaxCacheSize(int maxCacheSize)
|
||||||
{
|
{
|
||||||
_maxCacheSize = maxCacheSize;
|
_maxCacheSize = maxCacheSize;
|
||||||
shrinkCache();
|
shrinkCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
/**
|
||||||
* @return Returns the maxCachedFiles.
|
* @return the max number of cached files.
|
||||||
*/
|
*/
|
||||||
public int getMaxCachedFiles()
|
public int getMaxCachedFiles()
|
||||||
{
|
{
|
||||||
return _maxCachedFiles;
|
return _maxCachedFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
/**
|
||||||
* @param maxCachedFiles The maxCachedFiles to set.
|
* @param maxCachedFiles the max number of cached files.
|
||||||
*/
|
*/
|
||||||
public void setMaxCachedFiles(int maxCachedFiles)
|
public void setMaxCachedFiles(int maxCachedFiles)
|
||||||
{
|
{
|
||||||
|
@ -151,16 +140,12 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
shrinkCache();
|
shrinkCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
public boolean isUseFileMappedBuffer()
|
public boolean isUseFileMappedBuffer()
|
||||||
{
|
{
|
||||||
return _useFileMappedBuffer;
|
return _useFileMappedBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
public void flushCache()
|
public void flushCache()
|
||||||
{
|
|
||||||
if (_cache!=null)
|
|
||||||
{
|
{
|
||||||
while (_cache.size() > 0)
|
while (_cache.size() > 0)
|
||||||
{
|
{
|
||||||
|
@ -172,32 +157,27 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public HttpContent lookup(String pathInContext)
|
public HttpContent lookup(String pathInContext) throws IOException
|
||||||
throws IOException
|
|
||||||
{
|
{
|
||||||
return getContent(pathInContext, _maxCachedFileSize);
|
return getContent(pathInContext, _maxCachedFileSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/**
|
||||||
/** Get a Entry from the cache.
|
* <p>Returns an entry from the cache, or creates a new one.</p>
|
||||||
* Get either a valid entry object or create a new one if possible.
|
|
||||||
*
|
*
|
||||||
* @param pathInContext The key into the cache
|
* @param pathInContext The key into the cache
|
||||||
* @param maxBufferSize The maximum buffer to allocated for this request. For cached content, a larger buffer may have
|
* @param maxBufferSize The maximum buffer size allocated for this request. For cached content, a larger buffer may have
|
||||||
* previously been allocated and returned by the {@link HttpContent#getDirectBuffer()} or {@link HttpContent#getIndirectBuffer()} calls.
|
* previously been allocated and returned by the {@link HttpContent#getDirectBuffer()} or {@link HttpContent#getIndirectBuffer()} calls.
|
||||||
* @return The entry matching <code>pathInContext</code>, or a new entry
|
* @return The entry matching {@code pathInContext}, or a new entry
|
||||||
* if no matching entry was found. If the content exists but is not cachable,
|
* if no matching entry was found. If the content exists but is not cacheable,
|
||||||
* then a {@link ResourceHttpContent} instance is return. If
|
* then a {@link ResourceHttpContent} instance is returned. If
|
||||||
* the resource does not exist, then null is returned.
|
* the resource does not exist, then null is returned.
|
||||||
* @throws IOException Problem loading the resource
|
* @throws IOException if the resource cannot be retrieved
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public HttpContent getContent(String pathInContext,int maxBufferSize)
|
public HttpContent getContent(String pathInContext, int maxBufferSize) throws IOException
|
||||||
throws IOException
|
|
||||||
{
|
{
|
||||||
// Is the content in this cache?
|
// Is the content in this cache?
|
||||||
CachedHttpContent content = _cache.get(pathInContext);
|
CachedHttpContent content = _cache.get(pathInContext);
|
||||||
|
@ -221,10 +201,9 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/**
|
/**
|
||||||
* @param resource the resource to test
|
* @param resource the resource to test
|
||||||
* @return True if the resource is cacheable. The default implementation tests the cache sizes.
|
* @return whether the resource is cacheable. The default implementation tests the cache sizes.
|
||||||
*/
|
*/
|
||||||
protected boolean isCacheable(Resource resource)
|
protected boolean isCacheable(Resource resource)
|
||||||
{
|
{
|
||||||
|
@ -237,9 +216,7 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
return (len > 0 && (_useFileMappedBuffer || (len < _maxCachedFileSize && len < _maxCacheSize)));
|
return (len > 0 && (_useFileMappedBuffer || (len < _maxCachedFileSize && len < _maxCacheSize)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
private HttpContent load(String pathInContext, Resource resource, int maxBufferSize)
|
private HttpContent load(String pathInContext, Resource resource, int maxBufferSize)
|
||||||
throws IOException
|
|
||||||
{
|
{
|
||||||
if (resource == null || !resource.exists())
|
if (resource == null || !resource.exists())
|
||||||
return null;
|
return null;
|
||||||
|
@ -250,7 +227,7 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
// Will it fit in the cache?
|
// Will it fit in the cache?
|
||||||
if (isCacheable(resource))
|
if (isCacheable(resource))
|
||||||
{
|
{
|
||||||
CachedHttpContent content = null;
|
CachedHttpContent content;
|
||||||
|
|
||||||
// Look for precompressed resources
|
// Look for precompressed resources
|
||||||
if (_precompressedFormats.length > 0)
|
if (_precompressedFormats.length > 0)
|
||||||
|
@ -322,18 +299,13 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
return new ResourceHttpContent(resource, mt, maxBufferSize);
|
return new ResourceHttpContent(resource, mt, maxBufferSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
private void shrinkCache()
|
private void shrinkCache()
|
||||||
{
|
{
|
||||||
// While we need to shrink
|
// While we need to shrink
|
||||||
while (_cache.size() > 0 && (_cachedFiles.get() > _maxCachedFiles || _cachedSize.get() > _maxCacheSize))
|
while (_cache.size() > 0 && (_cachedFiles.get() > _maxCachedFiles || _cachedSize.get() > _maxCacheSize))
|
||||||
{
|
{
|
||||||
// Scan the entire cache and generate an ordered list by last accessed time.
|
// Scan the entire cache and generate an ordered list by last accessed time.
|
||||||
SortedSet<CachedHttpContent> sorted= new TreeSet<CachedHttpContent>(
|
SortedSet<CachedHttpContent> sorted = new TreeSet<>((c1, c2) ->
|
||||||
new Comparator<CachedHttpContent>()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public int compare(CachedHttpContent c1, CachedHttpContent c2)
|
|
||||||
{
|
{
|
||||||
if (c1._lastAccessed < c2._lastAccessed)
|
if (c1._lastAccessed < c2._lastAccessed)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -345,10 +317,8 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return c1._key.compareTo(c2._key);
|
return c1._key.compareTo(c2._key);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
for (CachedHttpContent content : _cache.values())
|
sorted.addAll(_cache.values());
|
||||||
sorted.add(content);
|
|
||||||
|
|
||||||
// Invalidate least recently used first
|
// Invalidate least recently used first
|
||||||
for (CachedHttpContent content : sorted)
|
for (CachedHttpContent content : sorted)
|
||||||
|
@ -361,7 +331,6 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
protected ByteBuffer getIndirectBuffer(Resource resource)
|
protected ByteBuffer getIndirectBuffer(Resource resource)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -375,7 +344,6 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
protected ByteBuffer getMappedBuffer(Resource resource)
|
protected ByteBuffer getMappedBuffer(Resource resource)
|
||||||
{
|
{
|
||||||
// Only use file mapped buffers for cached resources, otherwise too much virtual memory commitment for
|
// Only use file mapped buffers for cached resources, otherwise too much virtual memory commitment for
|
||||||
|
@ -392,7 +360,6 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
protected ByteBuffer getDirectBuffer(Resource resource)
|
protected ByteBuffer getDirectBuffer(Resource resource)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -406,36 +373,32 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
return "ResourceCache[" + _parent + "," + _factory + "]@" + hashCode();
|
return "ResourceCache[" + _parent + "," + _factory + "]@" + hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/**
|
||||||
/* ------------------------------------------------------------ */
|
* MetaData associated with a context Resource.
|
||||||
/** MetaData associated with a context Resource.
|
|
||||||
*/
|
*/
|
||||||
public class CachedHttpContent implements HttpContent
|
public class CachedHttpContent implements HttpContent
|
||||||
{
|
{
|
||||||
final String _key;
|
private final String _key;
|
||||||
final Resource _resource;
|
private final Resource _resource;
|
||||||
final int _contentLengthValue;
|
private final int _contentLengthValue;
|
||||||
final HttpField _contentType;
|
private final HttpField _contentType;
|
||||||
final String _characterEncoding;
|
private final String _characterEncoding;
|
||||||
final MimeTypes.Type _mimeType;
|
private final MimeTypes.Type _mimeType;
|
||||||
final HttpField _contentLength;
|
private final HttpField _contentLength;
|
||||||
final HttpField _lastModified;
|
private final HttpField _lastModified;
|
||||||
final long _lastModifiedValue;
|
private final long _lastModifiedValue;
|
||||||
final HttpField _etag;
|
private final HttpField _etag;
|
||||||
final Map<CompressedContentFormat, CachedPrecompressedHttpContent> _precompressed;
|
private final Map<CompressedContentFormat, CachedPrecompressedHttpContent> _precompressed;
|
||||||
|
private final AtomicReference<ByteBuffer> _indirectBuffer = new AtomicReference<>();
|
||||||
|
private final AtomicReference<ByteBuffer> _directBuffer = new AtomicReference<>();
|
||||||
|
private volatile long _lastAccessed;
|
||||||
|
|
||||||
volatile long _lastAccessed;
|
|
||||||
AtomicReference<ByteBuffer> _indirectBuffer=new AtomicReference<ByteBuffer>();
|
|
||||||
AtomicReference<ByteBuffer> _directBuffer=new AtomicReference<ByteBuffer>();
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
CachedHttpContent(String pathInContext, Resource resource, Map<CompressedContentFormat, CachedHttpContent> precompressedResources)
|
CachedHttpContent(String pathInContext, Resource resource, Map<CompressedContentFormat, CachedHttpContent> precompressedResources)
|
||||||
{
|
{
|
||||||
_key = pathInContext;
|
_key = pathInContext;
|
||||||
|
@ -475,47 +438,34 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
public String getKey()
|
public String getKey()
|
||||||
{
|
{
|
||||||
return _key;
|
return _key;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
public boolean isCached()
|
public boolean isCached()
|
||||||
{
|
{
|
||||||
return _key != null;
|
return _key != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
public boolean isMiss()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public Resource getResource()
|
public Resource getResource()
|
||||||
{
|
{
|
||||||
return _resource;
|
return _resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public HttpField getETag()
|
public HttpField getETag()
|
||||||
{
|
{
|
||||||
return _etag;
|
return _etag;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public String getETagValue()
|
public String getETagValue()
|
||||||
{
|
{
|
||||||
return _etag.getValue();
|
return _etag.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
boolean isValid()
|
boolean isValid()
|
||||||
{
|
{
|
||||||
if (_lastModifiedValue == _resource.lastModified() && _contentLengthValue == _resource.length())
|
if (_lastModifiedValue == _resource.lastModified() && _contentLengthValue == _resource.length())
|
||||||
|
@ -529,7 +479,6 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
protected void invalidate()
|
protected void invalidate()
|
||||||
{
|
{
|
||||||
ByteBuffer indirect = _indirectBuffer.get();
|
ByteBuffer indirect = _indirectBuffer.get();
|
||||||
|
@ -545,69 +494,59 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
_resource.close();
|
_resource.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public HttpField getLastModified()
|
public HttpField getLastModified()
|
||||||
{
|
{
|
||||||
return _lastModified;
|
return _lastModified;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public String getLastModifiedValue()
|
public String getLastModifiedValue()
|
||||||
{
|
{
|
||||||
return _lastModified == null ? null : _lastModified.getValue();
|
return _lastModified == null ? null : _lastModified.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public HttpField getContentType()
|
public HttpField getContentType()
|
||||||
{
|
{
|
||||||
return _contentType;
|
return _contentType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public String getContentTypeValue()
|
public String getContentTypeValue()
|
||||||
{
|
{
|
||||||
return _contentType == null ? null : _contentType.getValue();
|
return _contentType == null ? null : _contentType.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public HttpField getContentEncoding()
|
public HttpField getContentEncoding()
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public String getContentEncodingValue()
|
public String getContentEncodingValue()
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public String getCharacterEncoding()
|
public String getCharacterEncoding()
|
||||||
{
|
{
|
||||||
return _characterEncoding;
|
return _characterEncoding;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public Type getMimeType()
|
public Type getMimeType()
|
||||||
{
|
{
|
||||||
return _mimeType;
|
return _mimeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public void release()
|
public void release()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public ByteBuffer getIndirectBuffer()
|
public ByteBuffer getIndirectBuffer()
|
||||||
{
|
{
|
||||||
|
@ -632,7 +571,6 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
return buffer.slice();
|
return buffer.slice();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public ByteBuffer getDirectBuffer()
|
public ByteBuffer getDirectBuffer()
|
||||||
{
|
{
|
||||||
|
@ -658,21 +596,18 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
return buffer.asReadOnlyBuffer();
|
return buffer.asReadOnlyBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public HttpField getContentLength()
|
public HttpField getContentLength()
|
||||||
{
|
{
|
||||||
return _contentLength;
|
return _contentLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public long getContentLengthValue()
|
public long getContentLengthValue()
|
||||||
{
|
{
|
||||||
return _contentLengthValue;
|
return _contentLengthValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream getInputStream() throws IOException
|
public InputStream getInputStream() throws IOException
|
||||||
{
|
{
|
||||||
|
@ -683,21 +618,18 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
return _resource.getInputStream();
|
return _resource.getInputStream();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public ReadableByteChannel getReadableByteChannel() throws IOException
|
public ReadableByteChannel getReadableByteChannel() throws IOException
|
||||||
{
|
{
|
||||||
return _resource.getReadableByteChannel();
|
return _resource.getReadableByteChannel();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
return String.format("CachedContent@%x{r=%s,e=%b,lm=%s,ct=%s,c=%d}", hashCode(), _resource, _resource.exists(), _lastModified, _contentType, _precompressed.size());
|
return String.format("CachedContent@%x{r=%s,e=%b,lm=%s,ct=%s,c=%d}", hashCode(), _resource, _resource.exists(), _lastModified, _contentType, _precompressed.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
@Override
|
@Override
|
||||||
public Map<CompressedContentFormat, ? extends HttpContent> getPrecompressedContents()
|
public Map<CompressedContentFormat, ? extends HttpContent> getPrecompressedContents()
|
||||||
{
|
{
|
||||||
|
@ -717,9 +649,6 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
/* ------------------------------------------------------------ */
|
|
||||||
public class CachedPrecompressedHttpContent extends PrecompressedHttpContent
|
public class CachedPrecompressedHttpContent extends PrecompressedHttpContent
|
||||||
{
|
{
|
||||||
private final CachedHttpContent _content;
|
private final CachedHttpContent _content;
|
||||||
|
@ -762,5 +691,4 @@ public class CachedContentFactory implements HttpContent.ContentFactory
|
||||||
return "Cached" + super.toString();
|
return "Cached" + super.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue