001 // Copyright 2011 The Apache Software Foundation
002 //
003 // Licensed under the Apache License, Version 2.0 (the "License");
004 // you may not use this file except in compliance with the License.
005 // You may obtain a copy of the License at
006 //
007 // http://www.apache.org/licenses/LICENSE-2.0
008 //
009 // Unless required by applicable law or agreed to in writing, software
010 // distributed under the License is distributed on an "AS IS" BASIS,
011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012 // See the License for the specific language governing permissions and
013 // limitations under the License.
014
015 package org.apache.tapestry5.internal.services.assets;
016
017 import org.apache.tapestry5.services.assets.CompressionStatus;
018 import org.apache.tapestry5.services.assets.StreamableResource;
019
020 import java.io.IOException;
021 import java.io.InputStream;
022 import java.io.OutputStream;
023
024 public class StreamableResourceImpl implements StreamableResource
025 {
026 private final String description;
027
028 private final String contentType;
029
030 private final CompressionStatus compression;
031
032 private final long lastModified;
033
034 private final BytestreamCache bytestreamCache;
035
036 public StreamableResourceImpl(String description, String contentType, CompressionStatus compression, long lastModified,
037 BytestreamCache bytestreamCache)
038 {
039 this.description = description;
040 this.contentType = contentType;
041 this.compression = compression;
042 this.lastModified = lastModified;
043 this.bytestreamCache = bytestreamCache;
044 }
045
046 public String getDescription()
047 {
048 return description;
049 }
050
051 public CompressionStatus getCompression()
052 {
053 return compression;
054 }
055
056 public String getContentType()
057 {
058 return contentType;
059 }
060
061 public int getSize()
062 {
063 return bytestreamCache.size();
064 }
065
066 public long getLastModified()
067 {
068 return lastModified;
069 }
070
071 public void streamTo(OutputStream os) throws IOException
072 {
073 bytestreamCache.writeTo(os);
074 }
075
076 public InputStream openStream() throws IOException
077 {
078 return bytestreamCache.openStream();
079 }
080
081 @Override
082 public String toString()
083 {
084 return String.format("StreamableResource<%s %s %s lastModified: %tc size: %d>", contentType, description, compression.name(),
085 lastModified, getSize());
086 }
087 }