001
014
015 package com.liferay.util.servlet.filters;
016
017 import com.liferay.portal.kernel.servlet.BufferCacheServletResponse;
018 import com.liferay.portal.kernel.servlet.Header;
019
020 import java.io.IOException;
021 import java.io.ObjectInputStream;
022 import java.io.ObjectOutputStream;
023 import java.io.Serializable;
024
025 import java.nio.ByteBuffer;
026
027 import java.util.HashMap;
028 import java.util.Map;
029 import java.util.Set;
030
031
035 public class CacheResponseData implements Serializable {
036
037 public CacheResponseData(
038 BufferCacheServletResponse bufferCacheServletResponse)
039 throws IOException {
040
041 ByteBuffer byteBuffer = bufferCacheServletResponse.getByteBuffer();
042
043 _content = byteBuffer.array();
044 _contentType = bufferCacheServletResponse.getContentType();
045 _headers = bufferCacheServletResponse.getHeaders();
046 _length = byteBuffer.remaining();
047 _offset = byteBuffer.arrayOffset() + byteBuffer.position();
048 }
049
050 public Object getAttribute(String name) {
051 return _attributes.get(name);
052 }
053
054 public ByteBuffer getByteBuffer() {
055 return ByteBuffer.wrap(_content, _offset, _length);
056 }
057
058 public String getContentType() {
059 return _contentType;
060 }
061
062 public Map<String, Set<Header>> getHeaders() {
063 return _headers;
064 }
065
066 public void setAttribute(String name, Object value) {
067 _attributes.put(name, value);
068 }
069
070 private void readObject(ObjectInputStream objectInputStream)
071 throws ClassNotFoundException, IOException {
072
073 objectInputStream.defaultReadObject();
074
075 _length = objectInputStream.readInt();
076
077 _content = new byte[_length];
078
079 objectInputStream.readFully(_content);
080 }
081
082 private void writeObject(ObjectOutputStream objectOutputStream)
083 throws IOException {
084
085 objectOutputStream.defaultWriteObject();
086
087 objectOutputStream.writeInt(_length);
088 objectOutputStream.write(_content, _offset, _length);
089 }
090
091 private final Map<String, Object> _attributes = new HashMap<>();
092 private transient byte[] _content;
093 private final String _contentType;
094 private final Map<String, Set<Header>> _headers;
095 private transient int _length;
096 private transient final int _offset;
097
098 }