1
2
3
4
5
6
7
8
9
10
11
12 package org.eclipse.jgit.revwalk.filter;
13
14 import java.io.IOException;
15 import java.util.Collection;
16
17 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
18 import org.eclipse.jgit.errors.MissingObjectException;
19 import org.eclipse.jgit.internal.JGitText;
20 import org.eclipse.jgit.revwalk.RevCommit;
21 import org.eclipse.jgit.revwalk.RevWalk;
22
23
24
25
26
27
28
29
30
31
32 public abstract class OrRevFilter extends RevFilter {
33
34
35
36
37
38
39
40
41
42 public static RevFilteref="../../../../../org/eclipse/jgit/revwalk/filter/RevFilter.html#RevFilter">RevFilter../../../../../org/eclipse/jgit/revwalk/filter/RevFilter.html#RevFilter">RevFilter create(RevFilteref="../../../../../org/eclipse/jgit/revwalk/filter/RevFilter.html#RevFilter">RevFilter a, RevFilter b) {
43 if (a == ALL || b == ALL)
44 return ALL;
45 return new Binary(a, b);
46 }
47
48
49
50
51
52
53
54
55
56 public static RevFilter../../../../../org/eclipse/jgit/revwalk/filter/RevFilter.html#RevFilter">RevFilter create(RevFilter[] list) {
57 if (list.length == 2)
58 return create(list[0], list[1]);
59 if (list.length < 2)
60 throw new IllegalArgumentException(JGitText.get().atLeastTwoFiltersNeeded);
61 final RevFiltervFilter.html#RevFilter">RevFilter[] subfilters = new RevFilter[list.length];
62 System.arraycopy(list, 0, subfilters, 0, list.length);
63 return new List(subfilters);
64 }
65
66
67
68
69
70
71
72
73
74 public static RevFilter create(Collection<RevFilter> list) {
75 if (list.size() < 2)
76 throw new IllegalArgumentException(JGitText.get().atLeastTwoFiltersNeeded);
77 final RevFiltervFilter.html#RevFilter">RevFilter[] subfilters = new RevFilter[list.size()];
78 list.toArray(subfilters);
79 if (subfilters.length == 2)
80 return create(subfilters[0], subfilters[1]);
81 return new List(subfilters);
82 }
83
84 private static class Binary extends OrRevFilter {
85 private final RevFilter a;
86
87 private final RevFilter b;
88
89 private final boolean requiresCommitBody;
90
91 Binary(RevFilter="../../../../../org/eclipse/jgit/revwalk/filter/RevFilter.html#RevFilter">RevFilter one, RevFilter two) {
92 a = one;
93 b = two;
94 requiresCommitBody = a.requiresCommitBody()
95 || b.requiresCommitBody();
96 }
97
98 @Override
99 public boolean include(RevWalk walker, RevCommit c)
100 throws MissingObjectException, IncorrectObjectTypeException,
101 IOException {
102 return a.include(walker, c) || b.include(walker, c);
103 }
104
105 @Override
106 public boolean requiresCommitBody() {
107 return requiresCommitBody;
108 }
109
110 @Override
111 public RevFilter clone() {
112 return new Binary(a.clone(), b.clone());
113 }
114
115 @SuppressWarnings("nls")
116 @Override
117 public String toString() {
118 return "(" + a.toString() + " OR " + b.toString() + ")";
119 }
120 }
121
122 private static class List extends OrRevFilter {
123 private final RevFilter[] subfilters;
124
125 private final boolean requiresCommitBody;
126
127 List(RevFilter[] list) {
128 subfilters = list;
129
130 boolean rcb = false;
131 for (RevFilter filter : subfilters)
132 rcb |= filter.requiresCommitBody();
133 requiresCommitBody = rcb;
134 }
135
136 @Override
137 public boolean include(RevWalk walker, RevCommit c)
138 throws MissingObjectException, IncorrectObjectTypeException,
139 IOException {
140 for (RevFilter f : subfilters) {
141 if (f.include(walker, c))
142 return true;
143 }
144 return false;
145 }
146
147 @Override
148 public boolean requiresCommitBody() {
149 return requiresCommitBody;
150 }
151
152 @Override
153 public RevFilter clone() {
154 final RevFilterfilter/RevFilter.html#RevFilter">RevFilter[] s = new RevFilter[subfilters.length];
155 for (int i = 0; i < s.length; i++)
156 s[i] = subfilters[i].clone();
157 return new List(s);
158 }
159
160 @Override
161 public String toString() {
162 final StringBuilder r = new StringBuilder();
163 r.append("(");
164 for (int i = 0; i < subfilters.length; i++) {
165 if (i > 0)
166 r.append(" OR ");
167 r.append(subfilters[i].toString());
168 }
169 r.append(")");
170 return r.toString();
171 }
172 }
173 }