1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.efaps.db.search.compare;
22
23 import java.util.ArrayList;
24 import java.util.List;
25
26 import org.apache.commons.lang3.builder.ToStringBuilder;
27 import org.efaps.db.AbstractObjectQuery;
28 import org.efaps.db.search.AbstractQPart;
29 import org.efaps.db.search.QAttribute;
30 import org.efaps.db.search.value.AbstractQValue;
31 import org.efaps.db.search.value.QBitValue;
32 import org.efaps.db.wrapper.SQLPart;
33 import org.efaps.db.wrapper.SQLSelect;
34 import org.efaps.util.EFapsException;
35
36
37
38
39
40
41
42 public class QNotEqual
43 extends AbstractQAttrCompare
44 {
45
46
47
48
49 private final List<AbstractQValue> values = new ArrayList<AbstractQValue>();
50
51
52
53
54
55
56 public QNotEqual(final QAttribute _attribute,
57 final AbstractQValue... _values)
58 {
59 super(_attribute, null);
60 for (final AbstractQValue value : _values) {
61 this.values.add(value);
62 }
63 }
64
65
66
67
68
69
70 @Override
71 public AbstractQValue getValue()
72 {
73 return this.values.isEmpty() ? null : this.values.get(0);
74 }
75
76
77
78
79
80
81 public List<AbstractQValue> getValues()
82 {
83 return this.values;
84 }
85
86
87
88
89
90
91 public AbstractQPart addValue(final AbstractQValue _value)
92 {
93 this.values.add(_value);
94 return this;
95 }
96
97
98
99
100 @Override
101 public QNotEqual appendSQL(final SQLSelect _sql)
102 throws EFapsException
103 {
104 getAttribute().appendSQL(_sql);
105 if (this.values.size() > 1 || this.values.size() > 0 && this.values.get(0) instanceof QBitValue) {
106 _sql.addPart(SQLPart.NOT).addPart(SQLPart.IN).addPart(SQLPart.PARENTHESIS_OPEN);
107 boolean first = true;
108 for (final AbstractQValue value : this.values) {
109 if (first) {
110 first = false;
111 } else {
112 _sql.addPart(SQLPart.COMMA);
113 }
114 value.appendSQL(_sql);
115 }
116 _sql.addPart(SQLPart.PARENTHESIS_CLOSE);
117 } else {
118 _sql.addPart(SQLPart.UNEQUAL);
119 getValue().appendSQL(_sql);
120 }
121 return this;
122 }
123
124
125
126
127 @Override
128 public QNotEqual prepare(final AbstractObjectQuery<?> _query,
129 final AbstractQPart _part)
130 throws EFapsException
131 {
132 getAttribute().prepare(_query, this);
133 for (final AbstractQValue value : this.values) {
134 value.prepare(_query, this);
135 }
136 return this;
137 }
138
139 @Override
140 public String toString()
141 {
142 return new ToStringBuilder(this).append("values", this.values).toString();
143 }
144 }