1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.hc.client5.http.impl.cache;
28
29 import java.util.ArrayList;
30 import java.util.List;
31
32 import org.apache.hc.client5.http.cache.RequestCacheControl;
33 import org.apache.hc.core5.annotation.Contract;
34 import org.apache.hc.core5.annotation.Internal;
35 import org.apache.hc.core5.annotation.ThreadingBehavior;
36 import org.apache.hc.core5.http.Header;
37 import org.apache.hc.core5.http.HttpHeaders;
38 import org.apache.hc.core5.http.HttpMessage;
39 import org.apache.hc.core5.http.NameValuePair;
40 import org.apache.hc.core5.http.message.BasicHeader;
41 import org.apache.hc.core5.http.message.BasicHeaderValueFormatter;
42 import org.apache.hc.core5.http.message.BufferedHeader;
43 import org.apache.hc.core5.util.Args;
44 import org.apache.hc.core5.util.CharArrayBuffer;
45
46 @Internal
47 @Contract(threading = ThreadingBehavior.IMMUTABLE)
48 class CacheControlHeaderGenerator {
49
50
51
52
53 public static final CacheControlHeaderGenerator INSTANCE = new CacheControlHeaderGenerator();
54
55 public List<NameValuePair> convert(final RequestCacheControl cacheControl) {
56 Args.notNull(cacheControl, "Cache control");
57 final List<NameValuePair> params = new ArrayList<>(10);
58 if (cacheControl.getMaxAge() >= 0) {
59 params.add(new BasicHeader("max-age", cacheControl.getMaxAge()));
60 }
61 if (cacheControl.getMaxStale() >= 0) {
62 params.add(new BasicHeader("max-stale", cacheControl.getMaxStale()));
63 }
64 if (cacheControl.getMinFresh() >= 0) {
65 params.add(new BasicHeader("min-fresh", cacheControl.getMinFresh()));
66 }
67 if (cacheControl.isNoCache()) {
68 params.add(new BasicHeader("no-cache", null));
69 }
70 if (cacheControl.isNoStore()) {
71 params.add(new BasicHeader("no-store", null));
72 }
73 if (cacheControl.isOnlyIfCached()) {
74 params.add(new BasicHeader("only-if-cached", null));
75 }
76 if (cacheControl.getStaleIfError() >= 0) {
77 params.add(new BasicHeader("stale-if-error", cacheControl.getStaleIfError()));
78 }
79 return params;
80 }
81
82 public Header generate(final RequestCacheControl cacheControl) {
83 final List<NameValuePair> params = convert(cacheControl);
84 if (!params.isEmpty()) {
85 final CharArrayBuffer buf = new CharArrayBuffer(1024);
86 buf.append(HttpHeaders.CACHE_CONTROL);
87 buf.append(": ");
88 for (int i = 0; i < params.size(); i++) {
89 if (i > 0) {
90 buf.append(", ");
91 }
92 BasicHeaderValueFormatter.INSTANCE.formatNameValuePair(buf, params.get(i), false);
93 }
94 return BufferedHeader.create(buf);
95 }
96 return null;
97 }
98
99 public void generate(final RequestCacheControl cacheControl, final HttpMessage message) {
100 final Header h = generate(cacheControl);
101 if (h != null) {
102 message.addHeader(h);
103 }
104 }
105
106 }
107
108