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 _content = null;
039 _contentType = null;
040 _headers = null;
041 _length = 0;
042 _offset = 0;
043 _valid = false;
044 }
045
046 public CacheResponseData(
047 BufferCacheServletResponse bufferCacheServletResponse)
048 throws IOException {
049
050 ByteBuffer byteBuffer = bufferCacheServletResponse.getByteBuffer();
051
052 _content = byteBuffer.array();
053 _contentType = bufferCacheServletResponse.getContentType();
054 _headers = bufferCacheServletResponse.getHeaders();
055 _length = byteBuffer.remaining();
056 _offset = byteBuffer.arrayOffset() + byteBuffer.position();
057 _valid = true;
058 }
059
060 public Object getAttribute(String name) {
061 return _attributes.get(name);
062 }
063
064 public ByteBuffer getByteBuffer() {
065 return ByteBuffer.wrap(_content, _offset, _length);
066 }
067
068 public String getContentType() {
069 return _contentType;
070 }
071
072 public Map<String, Set<Header>> getHeaders() {
073 return _headers;
074 }
075
076 public boolean isValid() {
077 return _valid;
078 }
079
080 public void setAttribute(String name, Object value) {
081 _attributes.put(name, value);
082 }
083
084 private void readObject(ObjectInputStream objectInputStream)
085 throws ClassNotFoundException, IOException {
086
087 objectInputStream.defaultReadObject();
088
089 _length = objectInputStream.readInt();
090
091 _content = new byte[_length];
092
093 objectInputStream.readFully(_content);
094 }
095
096 private void writeObject(ObjectOutputStream objectOutputStream)
097 throws IOException {
098
099 objectOutputStream.defaultWriteObject();
100
101 objectOutputStream.writeInt(_length);
102 objectOutputStream.write(_content, _offset, _length);
103 }
104
105 private Map<String, Object> _attributes = new HashMap<String, Object>();
106 private transient byte[] _content;
107 private String _contentType;
108 private Map<String, Set<Header>> _headers;
109 private transient int _length;
110 private transient final int _offset;
111 private boolean _valid;
112
113 }