1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.grouplens.grapht;
21
22 import com.google.common.base.Predicate;
23 import org.grouplens.grapht.reflect.Desire;
24 import org.grouplens.grapht.solver.DesireChain;
25
26 import javax.annotation.Nullable;
27 import java.io.Serializable;
28 import java.util.EnumSet;
29
30
31
32
33
34
35 public class Dependency implements Serializable {
36 private static final long serialVersionUID = 1L;
37
38 private final DesireChain desireChain;
39 private final EnumSet<Flag> flags;
40
41 private Dependency(DesireChain chain, EnumSet<Flag> flagSet) {
42 desireChain = chain;
43 flags = flagSet.clone();
44 }
45
46 public static Dependency create(DesireChain desires, EnumSet<Flag> flags) {
47 return new Dependency(desires, flags);
48 }
49
50
51
52
53
54 public DesireChain getDesireChain() {
55 return desireChain;
56 }
57
58
59
60
61
62 public Desire getInitialDesire() {
63 return desireChain.getInitialDesire();
64 }
65
66
67
68
69
70 public EnumSet<Flag> getFlags() {
71 return flags;
72 }
73
74
75
76
77
78 public boolean isFixed() {
79 return flags.contains(Flag.FIXED);
80 }
81
82
83
84
85
86
87 public static Predicate<Dependency> hasInitialDesire(final Desire d) {
88 return new Predicate<Dependency>() {
89 @Override
90 public boolean apply(@Nullable Dependency input) {
91 return input != null && input.getInitialDesire().equals(d);
92 }
93 };
94 }
95
96 @Override
97 public boolean equals(Object o) {
98 if (this == o) return true;
99 if (o == null || getClass() != o.getClass()) return false;
100
101 Dependency that = (Dependency) o;
102
103 if (!desireChain.equals(that.desireChain)) return false;
104 if (!flags.equals(that.flags)) return false;
105
106 return true;
107 }
108
109 @Override
110 public int hashCode() {
111 int result = desireChain.hashCode();
112 result = 31 * result + flags.hashCode();
113 return result;
114 }
115
116 @Override
117 public String toString() {
118 return "Dependency(" + desireChain + ", " + flags + ")";
119 }
120
121
122
123
124 public static enum Flag {
125
126
127
128 FIXED;
129
130 public static EnumSet<Flag> emptySet() {
131 return EnumSet.noneOf(Flag.class);
132 }
133 }
134 }