001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.cocoon.caching;
018:
019: import java.io.Serializable;
020:
021: import org.apache.excalibur.source.SourceValidity;
022:
023: /**
024: * This is a cached response. This can either contain a byte array with
025: * the complete character response or a byte array with compiled SAX events.
026: *
027: * This class replaces the <code>CachedEventObject</code> and the
028: * <code>CachedStreamObject</code>.
029: *
030: * @since 2.1
031: * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
032: * @version CVS $Id: CachedResponse.java 433543 2006-08-22 06:22:54Z crossley $
033: */
034: public class CachedResponse implements Serializable {
035:
036: protected final SourceValidity[] validityObjects;
037: protected final byte[] response;
038: protected Long expires;
039: protected final long lastModified;
040: protected String contentType;
041:
042: /**
043: * Create a new entry for the cache.
044: *
045: * @param validityObjects The SourceValidity objects in the order
046: * they occured in the pipeline
047: * @param response The cached sax stream or character stream
048: */
049: public CachedResponse(SourceValidity[] validityObjects,
050: byte[] response) {
051: this (validityObjects, response, null);
052: }
053:
054: /**
055: * Create a new entry for the cache.
056: *
057: * @param validityObject The SourceValidity object
058: * @param response The cached sax stream or character stream
059: */
060: public CachedResponse(SourceValidity validityObject, byte[] response) {
061: this (new SourceValidity[] { validityObject }, response, null);
062: }
063:
064: /**
065: * Create a new entry for the cache.
066: *
067: * @param validityObjects The SourceValidity objects in the order
068: * they occured in the pipeline
069: * @param response The cached sax stream or character stream
070: * @param expires The configured expires, or null if no
071: * expires was defined.
072: */
073: public CachedResponse(SourceValidity[] validityObjects,
074: byte[] response, Long expires) {
075: this .validityObjects = validityObjects;
076: this .response = response;
077: this .expires = expires;
078: this .lastModified = this .setLastModified(System
079: .currentTimeMillis());
080: }
081:
082: /**
083: * Get the validity objects
084: */
085: public SourceValidity[] getValidityObjects() {
086: return this .validityObjects;
087: }
088:
089: /**
090: * Get the cached response.
091: *
092: * @return The sax stream or character stream
093: */
094: public byte[] getResponse() {
095: return this .response;
096: }
097:
098: /**
099: * Get the configured expires.
100: *
101: * @return The configured expires, or null if no expires was defined
102: */
103: public Long getExpires() {
104: return this .expires;
105: }
106:
107: /**
108: * Set the (newly) configured expires.
109: *
110: */
111: public void setExpires(Long newExpires) {
112: this .expires = newExpires;
113: }
114:
115: /**
116: * Set the (newly) configured last modified.
117: *
118: */
119: protected long setLastModified(long lastModified) {
120: // Return the value rounded to the nearest second.
121: return lastModified - (lastModified % 1000);
122: }
123:
124: /**
125: * @return the last modified time
126: */
127: public long getLastModified() {
128: return lastModified;
129: }
130:
131: /**
132: * @return Returns the cached content type (or null).
133: */
134: public String getContentType() {
135: return this .contentType;
136: }
137:
138: /**
139: * @param value The content type to cache.
140: */
141: public void setContentType(String value) {
142: this.contentType = value;
143: }
144: }
|