21 package cz.vutbr.fit.knot.annotations.modules;
33 import java.util.ArrayList;
34 import java.util.Arrays;
35 import java.util.Iterator;
36 import java.util.List;
37 import java.util.logging.Level;
38 import java.util.logging.Logger;
39 import javax.persistence.EntityManager;
40 import javax.persistence.Query;
79 String retString =
"";
82 Iterator<String> reqIter = requestInfo.getQueryPersons().iterator();
83 retString = retString +
processQP(reqIter,
false, requestInfo);
87 Iterator<String> reqIter = requestInfo.getQueryPersonsWG().iterator();
88 retString = retString +
processQP(reqIter,
true, requestInfo);
92 Iterator<String> reqIter = requestInfo.getQueryUserGroups().iterator();
93 retString = retString +
processQUG(reqIter,
false, requestInfo);
97 Iterator<String> reqIter = requestInfo.getQueryUserGroupsWP().iterator();
98 retString = retString +
processQUG(reqIter,
true, requestInfo);
101 if(requestInfo.
getUsersQueryV2() != null && !requestInfo.getUsersQueryV2().isEmpty()){
103 retString = retString + P2MessagesCreator.getXMLUsersList(users,requestInfo.getUsersRestrictionsV2());
106 if(requestInfo.
getGroupsQueryV2() != null && !requestInfo.getGroupsQueryV2().isEmpty()){
108 boolean withUsers =
false;
112 retString = retString + P2MessagesCreator.getXMLGroupsList(groups,withUsers,requestInfo.getUsersGroupRestrictionsV2());
127 String retString =
"";
128 while (reqIter.hasNext()) {
129 String reqStr = reqIter.next();
133 String idStr = reqStr.replace(AppBean.getBaseGroupUri(),
"");
135 Integer reqId = null;
137 Integer
id = Integer.parseInt(idStr);
138 }
catch (NumberFormatException nfe) {
140 String msg =
"Bad id of group in the query message: " + idStr;
141 Logger.getLogger(PersonsModule.class.getName()).log(Level.SEVERE, msg, nfe);
146 Object[] params =
new Object[2];
149 gList = AppBean.getPersistenceManager().queryDB(
"UserGroup.findById", params);
151 EntityManager em = AppBean.getPersistenceManager().getEM();
152 String reqName = reqStr.replace(
"*",
"%");
154 String gQStr =
"SELECT u FROM UserGroup u WHERE u.name LIKE '" + reqName +
"'";
156 Query query = em.createQuery(gQStr);
157 gList = query.getResultList();
158 }
catch (Exception e) {
160 String msg =
"Exception during the query for user groups.";
161 Logger.getLogger(PersonsModule.class.getName()).log(Level.SEVERE, msg);
169 if (gList != null && !gList.isEmpty() && withPersons) {
171 Iterator gIter = gList.iterator();
172 while (gIter.hasNext()) {
174 retString = retString + uGroup.toXMLStringWP();
176 }
else if (gList != null && !gList.isEmpty()) {
178 Iterator gIter = gList.iterator();
179 while (gIter.hasNext()) {
181 retString = retString + uGroup.toXMLString();
187 retString =
"<userGroups>" + retString +
"</userGroups>";
200 String retString =
"";
201 while (reqIter.hasNext()) {
202 String reqStr = reqIter.next();
203 Integer reqId = null;
204 String reqName = null;
205 String reqEmail = null;
208 String[] reqAttrArray = reqStr.split(
";");
209 ArrayList<String> reqAttributes =
new ArrayList<String>(Arrays.asList(reqAttrArray));
210 Iterator<String> reqAttrIterator = reqAttributes.iterator();
211 while (reqAttrIterator.hasNext()) {
212 String reqAttr = reqAttrIterator.next();
213 if (reqAttr.indexOf(
" ") == 0) {
214 reqAttr = reqAttr.substring(1, reqAttr.length());
216 if (reqAttr.indexOf(
"id:") == 0) {
217 String reqIdStr = reqAttr.substring(3, reqAttr.length());
218 if (reqIdStr.indexOf(
" ") == 0) {
219 reqIdStr = reqIdStr.substring(1, reqIdStr.length());
222 reqIdStr = reqIdStr.replace(AppBean.getBaseAuthorUri(),
"");
225 reqId = Integer.parseInt(reqIdStr);
226 }
catch (NumberFormatException nfe) {
228 String msg =
"Bad id of person in the query message: " + reqIdStr;
229 Logger.getLogger(PersonsModule.class.getName()).log(Level.SEVERE, msg, nfe);
233 }
else if (reqAttr.indexOf(
"email:") == 0) {
234 reqEmail = reqAttr.substring(6, reqAttr.length());
235 if (reqEmail.indexOf(
" ") == 0) {
236 reqEmail = reqEmail.substring(1, reqEmail.length());
238 }
else if (reqAttr.indexOf(
"name:") == 0) {
239 reqName = reqAttr.substring(5, reqAttr.length());
240 if (reqName.indexOf(
" ") == 0) {
241 reqName = reqName.substring(1, reqName.length());
245 String reqIdStr = reqAttr.substring(AppBean.getBaseAuthorUri().length(), reqAttr.length());
248 reqId = Integer.parseInt(reqIdStr);
249 }
catch (NumberFormatException nfe) {
251 String msg =
"Bad id of person in the query message (in URI): " + reqIdStr;
252 Logger.getLogger(PersonsModule.class.getName()).log(Level.SEVERE, msg, nfe);
256 }
else if (reqAttr.indexOf(
"@") > 0 && reqEmail == null) {
258 }
else if (reqName == null) {
265 String qStr =
"User.findByNameAndEmail";
267 Object[] params = null;
269 qStr =
"User.findById";
270 params =
new Object[2];
273 }
else if (reqEmail != null && reqName != null) {
274 if (reqName.contains(
"*") && reqEmail.contains(
"*")) {
275 reqName = reqName.replace(
"*",
"%");
276 reqEmail = reqEmail.replace(
"*",
"%");
278 fQStr =
"SELECT u FROM User u WHERE u.name LIKE '" + reqName +
"' AND u.email LIKE '" + reqEmail +
"'";
279 }
else if (reqEmail.contains(
"*")) {
280 reqEmail = reqEmail.replace(
"*",
"%");
282 fQStr =
"SELECT u FROM User u WHERE u.name LIKE '" + reqName +
"' AND u.email = '" + reqEmail +
"'";
283 }
else if (reqName.contains(
"*")) {
284 reqName = reqName.replace(
"*",
"%");
286 fQStr =
"SELECT u FROM User u WHERE u.name = '" + reqName +
"' AND u.email LIKE '" + reqEmail +
"'";
288 params =
new Object[4];
292 params[3] = reqEmail;
294 }
else if (reqName == null) {
295 if (reqEmail.contains(
"*")) {
296 reqEmail = reqEmail.replace(
"*",
"%");
298 fQStr =
"SELECT u FROM User u WHERE u.email LIKE '" + reqEmail +
"'";
300 qStr =
"User.findByEmail";
301 params =
new Object[2];
303 params[1] = reqEmail;
306 if (reqName.contains(
"*")) {
307 reqName = reqName.replace(
"*",
"%");
309 fQStr =
"SELECT u FROM User u WHERE u.name LIKE '" + reqName +
"'";
311 qStr =
"User.findByName";
312 params =
new Object[2];
319 EntityManager em = AppBean.getPersistenceManager().getEM();
322 Query query = em.createQuery(fQStr);
323 uList = query.getResultList();
324 }
catch (Exception e) {
326 String msg =
"Exception during the query for persons.";
327 Logger.getLogger(PersonsModule.class.getName()).log(Level.SEVERE, msg);
335 uList = AppBean.getPersistenceManager().queryDB(qStr, params);
338 if (uList != null && !uList.isEmpty() && withGroups) {
340 Iterator uIter = uList.iterator();
341 while (uIter.hasNext()) {
343 retString = retString + user.toXMLStringWG();
345 }
else if (uList != null && !uList.isEmpty()) {
346 Iterator uIter = uList.iterator();
347 while (uIter.hasNext()) {
349 retString = retString + user.toXMLString();
355 retString =
"<persons>" + retString +
"</persons>";
367 @SuppressWarnings(
"unchecked")
369 List<UserGroup> result = null;
370 boolean isWild =
false;
371 boolean first =
true;
379 StringBuilder queryStr =
new StringBuilder();
380 queryStr.append(
"SELECT g FROM UserGroup g");
385 queryStr.append(
" WHERE g.id = '");
388 queryStr.append(
" AND g.id = '");
392 queryStr.append(
"'");
397 queryStr.append(
" WHERE g.name ");
400 queryStr.append(
" AND g.name ");
404 queryStr.append(
"LIKE '");
405 queryStr.append(name);
406 queryStr.append(
"%'");
408 queryStr.append(
"= '");
410 queryStr.append(
"'");
414 EntityManager em = AppBean.getPersistenceManager().getEM();
417 Query query = em.createQuery(queryStr.toString());
418 result = query.getResultList();
419 }
catch (Exception e) {
421 String msg =
"Exception during the query for groups.";
422 Logger.getLogger(PersonsModule.class.getName()).log(Level.SEVERE, msg);
429 ArrayList<UserGroup> returnArray;
431 returnArray =
new ArrayList<UserGroup>();
433 returnArray =
new ArrayList<UserGroup>(result);
447 @SuppressWarnings(
"unchecked")
449 List<User> result = null;
451 boolean isWild =
false;
452 boolean first =
true;
460 StringBuilder queryStr =
new StringBuilder();
461 queryStr.append(
"SELECT u FROM User u");
466 queryStr.append(
" WHERE u.id = '");
469 queryStr.append(
" AND u.id = '");
473 queryStr.append(
"'");
479 queryStr.append(
" WHERE u.name ");
482 queryStr.append(
" AND u.name ");
486 queryStr.append(
"LIKE '");
487 queryStr.append(name);
488 queryStr.append(
"%'");
490 queryStr.append(
"= '");
492 queryStr.append(
"'");
499 queryStr.append(
" WHERE u.email = '");
502 queryStr.append(
" AND u.email = '");
506 queryStr.append(
"'");
509 EntityManager em = AppBean.getPersistenceManager().getEM();
512 Query query = em.createQuery(queryStr.toString());
513 result = query.getResultList();
516 query = em.createQuery(qStr2);
517 group = (
UserGroup)query.getSingleResult();
519 }
catch (Exception e) {
521 String msg =
"Exception during the query for persons.";
522 Logger.getLogger(PersonsModule.class.getName()).log(Level.SEVERE, msg);
532 tmpArray = group.getUsers();
533 result.retainAll(tmpArray);
537 return new ArrayList<User>(result);
539 return new ArrayList<User>();
550 int index = value.indexOf(
'*');
552 return value.substring(0, index);
583 return "Persons module";
595 return "Persons module performs processing of queryPersons and queryUserGroups messages.";
Constants for protocol version 2.
static int USERS_Q_GROUP_ATTR
static final int LOG_LEVEL_ALL_ERRORS
String processQP(Iterator< String > reqIter, Boolean withGroups, RequestInfo requestInfo)
String getWildcardPrefix(String value)
ArrayList< String > getGroupsQueryV2()
String processQUG(Iterator< String > reqIter, Boolean withPersons, RequestInfo requestInfo)
static final int LOG_LEVEL_SERVER_INTERNAL_ERRORS
Singleton for storing global variables.
String messagesFromFlier(Flier flier, EditorSession session)
Class representing user group.
static int USERS_Q_NAME_ATTR
static int USERS_Q_URI_ATTR
ArrayList< User > userQuerry(ArrayList< String > queryList)
ArrayList< UserGroup > groupQuerry(ArrayList< String > queryList)
ArrayList< String > getQueryUserGroupsWP()
static final int LOG_LEVEL
static String getBaseGroupUri()
Flier with informations for comet handlers.
String processRequestAfterPersist(RequestInfo requestInfo, boolean persistFailed)
ArrayList< String > getUsersQueryV2()
ArrayList< String > getQueryPersonsWG()
Operations with persons (users of this server) and with user groups.
Interface for server module.
static String getBaseAuthorUri()
static int USERS_Q_EMAIL_ATTR
Processed informations about client request.
ArrayList< String > getQueryUserGroups()
String getModuleDescription(int lang)
ArrayList< String > getQueryPersons()
Informations about client session.
String getModuleName(int lang)
Class provides methods for transforming objects to messages.
String processRequestBeforePersist(RequestInfo requestInfo)
static int GROUPS_Q_W_USERS