1 package net.krecan.m2_proxy.resource;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.io.OutputStream;
6
7 import net.krecan.m2_proxy.utils.ResourceUtils;
8
9 import org.apache.commons.logging.Log;
10 import org.apache.commons.logging.LogFactory;
11 /***
12 * Default resource implementantion. Wraps input stream.
13 * @author Lukas Krecan
14 *
15 */
16
17 public class DefaultResource extends AbstractResource implements ResourceWithInputStream{
18 long length = -1;
19 private InputStream inputStream;
20 private long lastModified;
21
22
23 private static final Log LOG = LogFactory.getLog(DefaultResource.class);
24
25
26 public DefaultResource(String logicalName, long lastModified, long length, InputStream inputStream) {
27 super(logicalName);
28 this.lastModified = lastModified;
29 this.inputStream = inputStream;
30 this.length = length;
31 }
32
33 public long getLength() {
34 return length;
35 }
36
37 public void copyToStream(OutputStream outputStream) throws IOException {
38 LOG.debug("Copying resurce to the output stream: "+getLogicalName());
39 ResourceUtils.copy(inputStream, outputStream);
40 }
41
42 public InputStream getInputStream() {
43 return inputStream;
44 }
45
46 protected void setInputStream(InputStream inputStream) {
47 this.inputStream = inputStream;
48 }
49
50 protected void setLength(long length) {
51 this.length = length;
52 }
53
54 public void release(){
55 try {
56 LOG.debug("Releasing resource "+getLogicalName());
57 if (inputStream!=null) inputStream.close();
58 setReleased(true);
59 } catch (IOException e) {
60 LOG.error("Error when closing input stream",e);
61 }
62 }
63
64 public long getLastModified() {
65 return lastModified;
66 }
67
68 public void setLastModified(long lastModificationDate) {
69 this.lastModified = lastModificationDate;
70 }
71
72
73 public String toString() {
74 return getClass().getName()+"logicalName="+getLogicalName()+"; lastModified="+lastModified+"; length="+length;
75 }
76 public boolean equals(Object obj) {
77 if (!(obj instanceof DefaultResource)) return false;
78 DefaultResource second = (DefaultResource)obj;
79
80 return getLogicalName().equals(second.getLogicalName()) && lastModified==second.getLastModified() && length==second.getLength();
81 }
82
83 public int hashCode() {
84 long hashCode = 17+getLogicalName().hashCode();
85 hashCode = hashCode*37+lastModified;
86 hashCode = hashCode*31+length;
87 return (int) hashCode;
88 }
89 }