1 package org.kuali.common.devops.metadata.model;
2
3 import org.kuali.common.core.build.ValidatingBuilder;
4 import org.kuali.common.core.validate.annotation.IdiotProofImmutable;
5
6 import com.google.common.base.Function;
7 import com.google.common.base.Optional;
8
9 @IdiotProofImmutable
10 public final class MetadataUrl<T> {
11
12 private final String url;
13 private final Optional<String> content;
14 private final Function<String, T> converter;
15 private final Optional<T> metadata;
16
17 private MetadataUrl(Builder<T> builder) {
18 this.url = builder.url;
19 this.content = builder.content;
20 this.converter = builder.converter;
21 this.metadata = builder.metadata;
22 }
23
24 public static <T> Builder<T> builder() {
25 return new Builder<T>();
26 }
27
28 public static class Builder<T> extends ValidatingBuilder<MetadataUrl<T>> {
29
30 private String url;
31 private Optional<String> content;
32 private Function<String, T> converter;
33 private Optional<T> metadata;
34
35 public Builder<T> metadata(Optional<T> metadata) {
36 this.metadata = metadata;
37 return this;
38 }
39
40 public Builder<T> url(String url) {
41 this.url = url;
42 return this;
43 }
44
45 public Builder<T> content(Optional<String> content) {
46 this.content = content;
47 return this;
48 }
49
50 public Builder<T> converter(Function<String, T> converter) {
51 this.converter = converter;
52 return this;
53 }
54
55 @Override
56 public MetadataUrl<T> build() {
57 return validate(new MetadataUrl<T>(this));
58 }
59
60 }
61
62 public String getUrl() {
63 return url;
64 }
65
66 public Optional<String> getContent() {
67 return content;
68 }
69
70 public Function<String, T> getConverter() {
71 return converter;
72 }
73
74 public Optional<T> getMetadata() {
75 return metadata;
76 }
77
78 }