1 package org.kuali.common.devops.cache;
2
3 import static org.kuali.common.util.base.Precondition.checkNotBlank;
4 import static org.springframework.beans.BeanUtils.copyProperties;
5
6 import java.util.Set;
7
8 import javax.validation.ConstraintViolation;
9
10 import org.kuali.common.core.build.ViolationsBuilder;
11 import org.kuali.common.core.validate.annotation.IdiotProofImmutable;
12 import org.kuali.common.http.model.HttpContext;
13 import org.kuali.common.http.model.HttpWaitResult;
14 import org.kuali.common.http.service.DefaultHttpService;
15 import org.kuali.common.http.service.HttpService;
16 import org.kuali.common.util.nullify.NullUtils;
17
18 import com.google.common.cache.CacheLoader;
19
20 @IdiotProofImmutable
21 public final class UrlLoader extends CacheLoader<String, HttpWaitResult> {
22
23 private final HttpContext context;
24 private final HttpService service;
25
26 @Override
27 public HttpWaitResult load(String url) {
28 checkNotBlank(url, "url");
29 HttpContext.Builder builder = HttpContext.builder();
30 copyProperties(context, builder);
31 builder.setUrl(url);
32 HttpContext context = builder.build();
33 return service.wait(context);
34 }
35
36 private UrlLoader(Builder builder) {
37 this.context = builder.context;
38 this.service = builder.service;
39 }
40
41 public static UrlLoader newUrlLoader() {
42 return builder().build();
43 }
44
45 public static UrlLoader newUrlLoader(HttpContext context) {
46 return builder().context(context).build();
47 }
48
49 public static UrlLoader newUrlLoader(HttpContext context, HttpService service) {
50 return builder().context(context).service(service).build();
51 }
52
53 public static Builder builder() {
54 return new Builder();
55 }
56
57 public static class Builder extends ViolationsBuilder<UrlLoader> {
58
59 private HttpContext context = HttpContext.builder(NullUtils.NONE).build();
60 private HttpService service = new DefaultHttpService();
61
62 @Override
63 public Set<ConstraintViolation<UrlLoader>> violations() {
64 return violations(make());
65 }
66
67 @Override
68 public UrlLoader build() {
69 return validate(make());
70 }
71
72 private UrlLoader make() {
73 return new UrlLoader(this);
74 }
75
76 public Builder context(HttpContext context) {
77 this.context = context;
78 return this;
79 }
80
81 public Builder service(HttpService service) {
82 this.service = service;
83 return this;
84 }
85
86 public HttpContext getContext() {
87 return context;
88 }
89
90 public void setContext(HttpContext context) {
91 this.context = context;
92 }
93
94 public HttpService getService() {
95 return service;
96 }
97
98 public void setService(HttpService service) {
99 this.service = service;
100 }
101
102 }
103
104 public HttpContext getContext() {
105 return context;
106 }
107
108 public HttpService getService() {
109 return service;
110 }
111
112 }