1 package de.juplo.httpresources;
2
3 import org.springframework.http.HttpHeaders;
4 import org.springframework.util.StringUtils;
5
6 import java.util.Arrays;
7 import java.util.Objects;
8
9
10
11
12
13 class HttpData
14 {
15 final static HttpData NOT_FETCHED =
16 new HttpData(
17 null,
18 new HttpHeaders(),
19 false,
20 Long.MIN_VALUE,
21 Long.MIN_VALUE,
22 null);
23
24 final static HttpData SERVER_ERROR =
25 new HttpData(
26 null,
27 new HttpHeaders(),
28 false,
29 -1,
30 -1,
31 null);
32
33 final static HttpData NOT_FOUND = SERVER_ERROR;
34
35 final byte[] content;
36 final HttpHeaders headers;
37 final boolean revalidate;
38 final long lastModified;
39 final long expires;
40 final String eTag;
41
42 private final String normalizedETag;
43
44
45 HttpData(
46 byte[] content,
47 HttpHeaders headers,
48 boolean revalidate,
49 long lastModified,
50 long expires,
51 String eTag)
52 {
53 this.content = content;
54 this.headers = headers;
55 this.revalidate = revalidate;
56 this.lastModified = lastModified;
57 this.expires = expires;
58 this.eTag = eTag;
59
60 String tmp = StringUtils.hasText(eTag) ? eTag.trim() : "";
61 this.normalizedETag =
62 tmp.length() >=2 && tmp.charAt(0) == 'W' && tmp.charAt(1) == '/'
63 ? tmp.substring(2).trim()
64 : tmp;
65 }
66
67
68 @Override
69 public boolean equals(Object o)
70 {
71 if (this == o) return true;
72 if (!(o instanceof HttpData)) return false;
73 HttpData../../../de/juplo/httpresources/HttpData.html#HttpData">HttpData data = (HttpData) o;
74
75 if (lastModified == 0 && normalizedETag.length() == 0)
76 return Arrays.equals(content, data.content);
77
78 return
79 lastModified == data.lastModified &&
80 normalizedETag.equals(data.normalizedETag);
81 }
82
83 @Override
84 public int hashCode()
85 {
86 if (lastModified == 0 && !StringUtils.hasText(eTag))
87 return Arrays.hashCode(content);
88
89 return Objects.hash(lastModified, eTag);
90 }
91
92 @Override
93 public String toString()
94 {
95 final StringBuffer sb = new StringBuffer();
96 sb.append("headers=").append(headers);
97 sb.append(", revalidate=").append(revalidate);
98 sb.append(", lastModified=").append(lastModified);
99 sb.append(", expires=").append(expires);
100 sb.append(", eTag='").append(eTag).append('\'');
101 sb.append(", content=");
102 if (content == null) sb.append("null");
103 else sb.append(new String(content));
104 return sb.toString();
105 }
106 }