1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.core.api.criteria;
17
18 import javax.xml.bind.annotation.XmlAccessType;
19 import javax.xml.bind.annotation.XmlAccessorType;
20 import javax.xml.bind.annotation.XmlElement;
21 import javax.xml.bind.annotation.XmlElements;
22 import javax.xml.bind.annotation.XmlType;
23 import java.util.Collections;
24 import java.util.HashSet;
25 import java.util.Set;
26
27
28
29
30
31
32
33
34
35
36 @XmlAccessorType(XmlAccessType.NONE)
37 @XmlType(name = AbstractCompositePredicate.Constants.TYPE_NAME)
38 abstract class AbstractCompositePredicate extends AbstractPredicate implements CompositePredicate {
39
40 private static final long serialVersionUID = 6164560054223588779L;
41 private static final String LINE_SEPARATOR = System.getProperty("line.separator");
42
43
44
45
46
47
48
49 @XmlElements(value = {
50 @XmlElement(name = AndPredicate.Constants.ROOT_ELEMENT_NAME, type = AndPredicate.class, required = false),
51 @XmlElement(name = EqualPredicate.Constants.ROOT_ELEMENT_NAME, type = EqualPredicate.class, required = false),
52 @XmlElement(name = EqualIgnoreCasePredicate.Constants.ROOT_ELEMENT_NAME, type = EqualIgnoreCasePredicate.class, required = false),
53 @XmlElement(name = GreaterThanPredicate.Constants.ROOT_ELEMENT_NAME, type = GreaterThanPredicate.class, required = false),
54 @XmlElement(name = GreaterThanOrEqualPredicate.Constants.ROOT_ELEMENT_NAME, type = GreaterThanOrEqualPredicate.class, required = false),
55 @XmlElement(name = InPredicate.Constants.ROOT_ELEMENT_NAME, type = InPredicate.class, required = false),
56 @XmlElement(name = InIgnoreCasePredicate.Constants.ROOT_ELEMENT_NAME, type = InIgnoreCasePredicate.class, required = false),
57 @XmlElement(name = LessThanPredicate.Constants.ROOT_ELEMENT_NAME, type = LessThanPredicate.class, required = false),
58 @XmlElement(name = LessThanOrEqualPredicate.Constants.ROOT_ELEMENT_NAME, type = LessThanOrEqualPredicate.class, required = false),
59 @XmlElement(name = LikePredicate.Constants.ROOT_ELEMENT_NAME, type = LikePredicate.class, required = false),
60 @XmlElement(name = NotEqualPredicate.Constants.ROOT_ELEMENT_NAME, type = NotEqualPredicate.class, required = false),
61 @XmlElement(name = NotEqualIgnoreCasePredicate.Constants.ROOT_ELEMENT_NAME, type = NotEqualIgnoreCasePredicate.class, required = false),
62 @XmlElement(name = NotInPredicate.Constants.ROOT_ELEMENT_NAME, type = NotInPredicate.class, required = false),
63 @XmlElement(name = NotInIgnoreCasePredicate.Constants.ROOT_ELEMENT_NAME, type = NotInIgnoreCasePredicate.class, required = false),
64 @XmlElement(name = NotLikePredicate.Constants.ROOT_ELEMENT_NAME, type = NotLikePredicate.class, required = false),
65 @XmlElement(name = NotNullPredicate.Constants.ROOT_ELEMENT_NAME, type = NotNullPredicate.class, required = false),
66 @XmlElement(name = NullPredicate.Constants.ROOT_ELEMENT_NAME, type = NullPredicate.class, required = false),
67 @XmlElement(name = OrPredicate.Constants.ROOT_ELEMENT_NAME, type = OrPredicate.class, required = false)
68 })
69 private final Set<Predicate> predicates;
70
71
72
73
74
75 AbstractCompositePredicate() {
76 this.predicates = null;
77 }
78
79
80
81
82
83
84
85
86 AbstractCompositePredicate(final Set<Predicate> predicates) {
87 if (predicates == null) {
88 this.predicates = Collections.emptySet();
89 } else {
90 final Set<Predicate> temp = new HashSet<Predicate>();
91 for (Predicate predicate: predicates) {
92 if (predicate != null) {
93 temp.add(predicate);
94 }
95 }
96 this.predicates = Collections.unmodifiableSet(temp);
97 }
98 }
99
100 @Override
101 public Set<Predicate> getPredicates() {
102 return Collections.unmodifiableSet(predicates);
103 }
104
105
106
107
108 static class Constants {
109 final static String TYPE_NAME = "CompositePredicateType";
110 }
111
112 @Override
113 public final String toString() {
114 StringBuilder b = new StringBuilder(CriteriaSupportUtils.findDynName(this.getClass().getSimpleName()));
115 b.append("(");
116 if (!predicates.isEmpty()) {
117 for (Predicate p : predicates) {
118 b.append(LINE_SEPARATOR);
119
120 b.append(p);
121 b.append(", ");
122 }
123 b.deleteCharAt(b.lastIndexOf(", "));
124 b.append(LINE_SEPARATOR);
125 }
126 b.append(')');
127 return b.toString();
128 }
129 }