1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.util;
35
36 import info.magnolia.context.MgnlContext;
37 import info.magnolia.jcr.util.NodeUtil;
38
39 import java.util.Arrays;
40 import java.util.Calendar;
41 import java.util.HashSet;
42 import java.util.Iterator;
43 import java.util.Set;
44 import java.util.TimeZone;
45
46 import javax.jcr.LoginException;
47 import javax.jcr.NodeIterator;
48 import javax.jcr.RepositoryException;
49 import javax.jcr.Session;
50 import javax.jcr.query.InvalidQueryException;
51 import javax.jcr.query.Query;
52 import javax.jcr.query.QueryManager;
53 import javax.jcr.query.QueryResult;
54 import javax.jcr.query.qom.QueryObjectModel;
55
56 import org.apache.commons.lang3.StringUtils;
57 import org.slf4j.Logger;
58 import org.slf4j.LoggerFactory;
59
60
61
62
63 public class QueryUtil {
64
65 private static Logger log = LoggerFactory.getLogger(QueryUtil.class);
66
67
68
69
70
71 @Deprecated
72 public static String createDateExpression(int year, int month, int day) {
73 Calendar cal = Calendar.getInstance();
74 cal.set(year, month - 1, day);
75 return createDateExpression(cal);
76 }
77
78
79
80
81
82
83 @Deprecated
84 public static String createDateExpression(Calendar calendar) {
85 return DateUtil.createDateExpression(calendar);
86 }
87
88
89
90
91
92 @Deprecated
93 public static String createDateTimeExpression(int year, int month, int day, int hour, int minutes, int seconds) {
94 Calendar cal = Calendar.getInstance();
95 cal.set(year, month - 1, day, hour, minutes, seconds);
96 return createDateTimeExpression(cal);
97 }
98
99
100
101
102
103
104 @Deprecated
105 public static String createDateTimeExpression(Calendar calendar) {
106 return DateUtil.createDateTimeExpression(calendar);
107 }
108
109
110
111
112
113 @Deprecated
114 public static String createDateTimeExpressionIgnoreTimeZone(int year, int month, int day, int hour, int minutes, int seconds) {
115 Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
116 cal.set(year, month - 1, day, hour, minutes, seconds);
117 return createDateTimeExpression(cal);
118 }
119
120
121
122
123
124
125 @Deprecated
126 public static String createDateTimeExpressionIgnoreTimeZone(Calendar calendar) {
127 return DateUtil.createDateTimeExpressionIgnoreTimeZone(calendar);
128 }
129
130
131
132
133
134
135
136
137
138 public static NodeIterator search(QueryObjectModel model, String returnItemType) throws InvalidQueryException, RepositoryException {
139 return NodeUtil.filterDuplicates(NodeUtil.filterParentNodeType(model.execute().getNodes(), returnItemType));
140 }
141
142
143
144
145
146
147
148
149
150 public static NodeIterator search(String workspace, String statement, String language) throws InvalidQueryException, RepositoryException {
151 Session session = MgnlContext.getJCRSession(workspace);
152 QueryManager manager = session.getWorkspace().getQueryManager();
153 Query query = manager.createQuery(statement, language);
154
155 return NodeUtil.filterDuplicates(query.execute().getNodes());
156 }
157
158
159
160
161
162
163
164
165
166
167 public static NodeIterator search(String workspace, String statement) throws InvalidQueryException, RepositoryException {
168 return search(workspace, statement, javax.jcr.query.Query.JCR_SQL2);
169 }
170
171
172
173
174
175
176
177
178
179 public static NodeIterator search(String workspace, String statement, String language, String returnItemType) throws LoginException, RepositoryException {
180 return search(workspace, statement, language, returnItemType, false);
181 }
182
183
184
185
186
187
188
189
190
191
192
193 public static NodeIterator search(String workspace, String statement, String language, String returnItemType, boolean isSelector) throws RepositoryException {
194 Session session = MgnlContext.getJCRSession(workspace);
195 QueryManager manager = session.getWorkspace().getQueryManager();
196 Query query = manager.createQuery(statement, language);
197 QueryResult result = query.execute();
198
199 if (isSelector) {
200 return NodeUtil.filterDuplicates(NodeUtil.filterParentNodeType(result.getRows(), returnItemType));
201 }
202 return NodeUtil.filterDuplicates(NodeUtil.filterParentNodeType(result.getNodes(), returnItemType));
203 }
204
205
206
207
208 public static String buildQuery(String statement, String startPath) {
209 Set<String> arguments = new HashSet<String>(Arrays.asList(StringUtils.splitByWholeSeparator(statement, ",")));
210
211 Iterator<String> argIt = arguments.iterator();
212 String queryString = "select * from [nt:base] as t where ISDESCENDANTNODE([" + startPath + "])";
213 while (argIt.hasNext()) {
214 queryString = queryString + " AND contains(t.*, '" + argIt.next() + "')";
215 }
216 log.debug("query string: {}", queryString);
217 return queryString;
218 }
219 }