1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.grouplens.grapht.solver;
21
22 import org.grouplens.grapht.CachePolicy;
23 import org.grouplens.grapht.reflect.Desire;
24 import org.grouplens.grapht.util.Preconditions;
25
26 import java.util.EnumSet;
27
28
29
30
31
32
33
34
35 public class BindingResult {
36 private final Desire desire;
37 private final CachePolicy policy;
38 private final EnumSet<BindingFlag> flags;
39
40
41
42
43
44
45
46
47 BindingResult(Desire desire, CachePolicy policy, EnumSet<BindingFlag> flags) {
48 Preconditions.notNull("desire", desire);
49 Preconditions.notNull("policy", policy);
50
51 this.policy = policy;
52 this.desire = desire;
53 this.flags = flags.clone();
54 }
55
56 public static Builder newBuilder() {
57 return new Builder();
58 }
59
60 public static Builder newBuilder(Desire desire, CachePolicy policy) {
61 return newBuilder()
62 .setDesire(desire)
63 .setCachePolicy(policy);
64 }
65
66
67
68
69 public Desire getDesire() {
70 return desire;
71 }
72
73
74
75
76 public CachePolicy getCachePolicy() {
77 return policy;
78 }
79
80
81
82
83
84 public boolean isFixed() {
85 return flags.contains(BindingFlag.FIXED);
86 }
87
88
89
90
91
92 public boolean isDeferred() {
93 return flags.contains(BindingFlag.DEFERRED);
94 }
95
96
97
98
99
100 public boolean terminates() {
101 return flags.contains(BindingFlag.TERMINAL);
102 }
103
104
105
106
107
108 public boolean isSkippable() {
109 return flags.contains(BindingFlag.SKIPPABLE);
110 }
111
112 public static class Builder {
113 private Desire desire;
114 private CachePolicy policy;
115 private EnumSet<BindingFlag> flags = BindingFlag.emptySet();
116
117 private Builder() {}
118
119 public Builder setDesire(Desire desire) {
120 this.desire = desire;
121 return this;
122 }
123
124 public Builder setCachePolicy(CachePolicy policy) {
125 this.policy = policy;
126 return this;
127 }
128
129 public Builder addFlag(BindingFlag flag) {
130 flags.add(flag);
131 return this;
132 }
133
134 public Builder setFlags(EnumSet<BindingFlag> flags) {
135 this.flags = flags.clone();
136 return this;
137 }
138
139 public BindingResult build() {
140 com.google.common.base.Preconditions.checkState(desire != null, "no desire set");
141 com.google.common.base.Preconditions.checkState(policy != null, "no policy set");
142 return new BindingResult(desire, policy, flags);
143 }
144 }
145 }