--- /dev/null
+/**\r
+ * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.\r
+ *\r
+ * This library is free software; you can redistribute it and/or modify it under\r
+ * the terms of the GNU Lesser General Public License as published by the Free\r
+ * Software Foundation; either version 2.1 of the License, or (at your option)\r
+ * any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more\r
+ * details.\r
+ */\r
+\r
+package com.liferay.portal.service.persistence;\r
+\r
+import com.liferay.portal.kernel.dao.orm.CustomSQLParam;\r
+import com.liferay.portal.kernel.dao.orm.QueryPos;\r
+import com.liferay.portal.kernel.dao.orm.QueryUtil;\r
+import com.liferay.portal.kernel.dao.orm.SQLQuery;\r
+import com.liferay.portal.kernel.dao.orm.Session;\r
+import com.liferay.portal.kernel.dao.orm.Type;\r
+import com.liferay.portal.kernel.exception.SystemException;\r
+import com.liferay.portal.kernel.util.GetterUtil;\r
+import com.liferay.portal.kernel.util.OrderByComparator;\r
+import com.liferay.portal.kernel.util.StringBundler;\r
+import com.liferay.portal.kernel.util.StringPool;\r
+import com.liferay.portal.kernel.util.StringUtil;\r
+import com.liferay.portal.kernel.util.Validator;\r
+import com.liferay.portal.kernel.workflow.WorkflowConstants;\r
+import com.liferay.portal.model.Group;\r
+import com.liferay.portal.model.Organization;\r
+import com.liferay.portal.model.User;\r
+import com.liferay.portal.model.UserGroup;\r
+import com.liferay.portal.model.impl.UserImpl;\r
+import com.liferay.portal.service.GroupLocalServiceUtil;\r
+import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;\r
+import com.liferay.util.dao.orm.CustomSQLUtil;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.LinkedHashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+/**\r
+ * @author Brian Wing Shun Chan\r
+ * @author Jon Steer\r
+ * @author Raymond Augé\r
+ * @author Connor McKay\r
+ */\r
+public class UserFinderImpl\r
+ extends BasePersistenceImpl<User> implements UserFinder {\r
+\r
+ public static final String COUNT_BY_USER =\r
+ UserFinder.class.getName() + ".countByUser";\r
+\r
+ public static final String COUNT_BY_C_FN_MN_LN_SN_EA_S =\r
+ UserFinder.class.getName() + ".countByC_FN_MN_LN_SN_EA_S";\r
+\r
+ public static final String FIND_BY_NO_ANNOUNCEMENTS_DELIVERIES =\r
+ UserFinder.class.getName() + ".findByNoAnnouncementsDeliveries";\r
+\r
+ public static final String FIND_BY_NO_CONTACTS =\r
+ UserFinder.class.getName() + ".findByNoContacts";\r
+\r
+ public static final String FIND_BY_NO_GROUPS =\r
+ UserFinder.class.getName() + ".findByNoGroups";\r
+\r
+ public static final String FIND_BY_C_FN_MN_LN_SN_EA_S =\r
+ UserFinder.class.getName() + ".findByC_FN_MN_LN_SN_EA_S";\r
+\r
+ public static final String JOIN_BY_CONTACT_TWITTER_SN =\r
+ UserFinder.class.getName() + ".joinByContactTwitterSN";\r
+\r
+ public static final String JOIN_BY_NO_ORGANIZATIONS =\r
+ UserFinder.class.getName() + ".joinByNoOrganizations";\r
+\r
+ public static final String JOIN_BY_PERMISSION =\r
+ UserFinder.class.getName() + ".joinByPermission";\r
+\r
+ public static final String JOIN_BY_USER_GROUP_ROLE =\r
+ UserFinder.class.getName() + ".joinByUserGroupRole";\r
+\r
+ public static final String JOIN_BY_USERS_GROUPS =\r
+ UserFinder.class.getName() + ".joinByUsersGroups";\r
+\r
+ public static final String JOIN_BY_USERS_ORGS =\r
+ UserFinder.class.getName() + ".joinByUsersOrgs";\r
+ \r
+ public static String JOIN_BY_USERS_ENSEIGNEMENT =\r
+ UserFinder.class.getName() + ".joinByUserEnseignement";\r
+ \r
+ public static final String JOIN_BY_USERS_ORGS_TREE =\r
+ UserFinder.class.getName() + ".joinByUsersOrgsTree";\r
+\r
+ public static final String JOIN_BY_USERS_PASSWORD_POLICIES =\r
+ UserFinder.class.getName() + ".joinByUsersPasswordPolicies";\r
+\r
+ public static final String JOIN_BY_USERS_ROLES =\r
+ UserFinder.class.getName() + ".joinByUsersRoles";\r
+\r
+ public static final String JOIN_BY_USERS_TEAMS =\r
+ UserFinder.class.getName() + ".joinByUsersTeams";\r
+\r
+ public static final String JOIN_BY_USERS_USER_GROUPS =\r
+ UserFinder.class.getName() + ".joinByUsersUserGroups";\r
+\r
+ public static final String JOIN_BY_ANNOUNCEMENTS_DELIVERY_EMAIL_OR_SMS =\r
+ UserFinder.class.getName() + ".joinByAnnouncementsDeliveryEmailOrSms";\r
+\r
+ public static final String JOIN_BY_SOCIAL_MUTUAL_RELATION =\r
+ UserFinder.class.getName() + ".joinBySocialMutualRelation";\r
+\r
+ public static final String JOIN_BY_SOCIAL_MUTUAL_RELATION_TYPE =\r
+ UserFinder.class.getName() + ".joinBySocialMutualRelationType";\r
+\r
+ public static final String JOIN_BY_SOCIAL_RELATION =\r
+ UserFinder.class.getName() + ".joinBySocialRelation";\r
+\r
+ public static final String JOIN_BY_SOCIAL_RELATION_TYPE =\r
+ UserFinder.class.getName() + ".joinBySocialRelationType";\r
+\r
+ public int countByUser(long userId, LinkedHashMap<String, Object> params)\r
+ throws SystemException {\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ String sql = CustomSQLUtil.get(COUNT_BY_USER);\r
+\r
+ sql = replaceJoinAndWhere(sql, params);\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.addScalar(COUNT_COLUMN_NAME, Type.LONG);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ setJoin(qPos, params);\r
+\r
+ qPos.add(userId);\r
+\r
+ Iterator<Long> itr = q.iterate();\r
+\r
+ if (itr.hasNext()) {\r
+ Long count = itr.next();\r
+\r
+ if (count != null) {\r
+ return count.intValue();\r
+ }\r
+ }\r
+\r
+ return 0;\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ public int countByKeywords(\r
+ long companyId, String keywords, int status,\r
+ LinkedHashMap<String, Object> params)\r
+ throws SystemException {\r
+\r
+ String[] firstNames = null;\r
+ String[] middleNames = null;\r
+ String[] lastNames = null;\r
+ String[] screenNames = null;\r
+ String[] emailAddresses = null;\r
+ boolean andOperator = false;\r
+\r
+ if (Validator.isNotNull(keywords)) {\r
+ firstNames = CustomSQLUtil.keywords(keywords);\r
+ middleNames = CustomSQLUtil.keywords(keywords);\r
+ lastNames = CustomSQLUtil.keywords(keywords);\r
+ screenNames = CustomSQLUtil.keywords(keywords);\r
+ emailAddresses = CustomSQLUtil.keywords(keywords);\r
+ }\r
+ else {\r
+ andOperator = true;\r
+ }\r
+\r
+ return countByC_FN_MN_LN_SN_EA_S(\r
+ companyId, firstNames, middleNames, lastNames, screenNames,\r
+ emailAddresses, status, params, andOperator);\r
+ }\r
+\r
+ public int countByC_FN_MN_LN_SN_EA_S(\r
+ long companyId, String firstName, String middleName,\r
+ String lastName, String screenName, String emailAddress, int status,\r
+ LinkedHashMap<String, Object> params, boolean andOperator)\r
+ throws SystemException {\r
+\r
+ // Search on the whole keyword and not over all parts of the keyword (split by space)\r
+ String[] firstNames = convertToTab(firstName);\r
+ String[] middleNames = convertToTab(middleName);\r
+ String[] lastNames = convertToTab(lastName);\r
+ String[] screenNames = convertToTab(screenName);\r
+ String[] emailAddresses = convertToTab(emailAddress);\r
+\r
+ return countByC_FN_MN_LN_SN_EA_S(\r
+ companyId, firstNames, middleNames, lastNames, screenNames,\r
+ emailAddresses, status, params, andOperator);\r
+ }\r
+\r
+ public int countByC_FN_MN_LN_SN_EA_S(\r
+ long companyId, String[] firstNames, String[] middleNames,\r
+ String[] lastNames, String[] screenNames, String[] emailAddresses,\r
+ int status, LinkedHashMap<String, Object> params,\r
+ boolean andOperator)\r
+ throws SystemException {\r
+\r
+ firstNames = CustomSQLUtil.keywords(firstNames);\r
+ middleNames = CustomSQLUtil.keywords(middleNames);\r
+ lastNames = CustomSQLUtil.keywords(lastNames);\r
+ screenNames = CustomSQLUtil.keywords(screenNames);\r
+ emailAddresses = CustomSQLUtil.keywords(emailAddresses);\r
+\r
+ if (params == null) {\r
+ params = _emptyLinkedHashMap;\r
+ }\r
+\r
+ Long groupId = (Long)params.get("usersGroups");\r
+ boolean inherit = GetterUtil.getBoolean(params.get("inherit"));\r
+\r
+ boolean doUnion = Validator.isNotNull(groupId) && inherit;\r
+\r
+ LinkedHashMap<String, Object> params1 = params;\r
+\r
+ LinkedHashMap<String, Object> params2 = null;\r
+\r
+ LinkedHashMap<String, Object> params3 = null;\r
+\r
+ if (doUnion) {\r
+ params2 = new LinkedHashMap<String, Object>(params1);\r
+\r
+ List<Long> organizationIds = new ArrayList<Long>();\r
+\r
+ Group group = GroupLocalServiceUtil.fetchGroup(groupId);\r
+\r
+ if ((group != null) && group.isOrganization()) {\r
+ organizationIds.add(group.getOrganizationId());\r
+ }\r
+\r
+ List<Organization> organizations = GroupUtil.getOrganizations(\r
+ groupId);\r
+\r
+ for (Organization organization : organizations) {\r
+ organizationIds.add(organization.getOrganizationId());\r
+ }\r
+\r
+ params2.remove("usersGroups");\r
+ params2.put(\r
+ "usersOrgs",\r
+ organizationIds.toArray(new Long[organizationIds.size()]));\r
+\r
+ params3 = new LinkedHashMap<String, Object>(params1);\r
+\r
+ List<UserGroup> userGroups = GroupUtil.getUserGroups(groupId);\r
+\r
+ Long[] userGroupIds = new Long[userGroups.size()];\r
+\r
+ for (int i = 0; i < userGroups.size(); i++) {\r
+ UserGroup userGroup = userGroups.get(i);\r
+\r
+ userGroupIds[i] = userGroup.getUserGroupId();\r
+ }\r
+\r
+ params3.remove("usersGroups");\r
+ params3.put("usersUserGroups", userGroupIds);\r
+ }\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ Set<Long> userIds = new HashSet<Long>();\r
+\r
+ userIds.addAll(\r
+ countByC_FN_MN_LN_SN_EA_S(\r
+ session, companyId, firstNames, middleNames, lastNames,\r
+ screenNames, emailAddresses, status, params1, andOperator));\r
+\r
+ if (doUnion) {\r
+ userIds.addAll(\r
+ countByC_FN_MN_LN_SN_EA_S(\r
+ session, companyId, firstNames, middleNames, lastNames,\r
+ screenNames, emailAddresses, status, params2,\r
+ andOperator));\r
+\r
+ userIds.addAll(\r
+ countByC_FN_MN_LN_SN_EA_S(\r
+ session, companyId, firstNames, middleNames, lastNames,\r
+ screenNames, emailAddresses, status, params3,\r
+ andOperator));\r
+ }\r
+\r
+ return userIds.size();\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ public List<User> findByKeywords(\r
+ long companyId, String keywords, int status,\r
+ LinkedHashMap<String, Object> params, int start, int end,\r
+ OrderByComparator obc)\r
+ throws SystemException {\r
+\r
+ String[] firstNames = null;\r
+ String[] middleNames = null;\r
+ String[] lastNames = null;\r
+ String[] screenNames = null;\r
+ String[] emailAddresses = null;\r
+ boolean andOperator = false;\r
+\r
+ if (Validator.isNotNull(keywords)) {\r
+ firstNames = CustomSQLUtil.keywords(keywords);\r
+ middleNames = CustomSQLUtil.keywords(keywords);\r
+ lastNames = CustomSQLUtil.keywords(keywords);\r
+ screenNames = CustomSQLUtil.keywords(keywords);\r
+ emailAddresses = CustomSQLUtil.keywords(keywords);\r
+ }\r
+ else {\r
+ andOperator = true;\r
+ }\r
+\r
+ return findByC_FN_MN_LN_SN_EA_S(\r
+ companyId, firstNames, middleNames, lastNames, screenNames,\r
+ emailAddresses, status, params, andOperator, start, end, obc);\r
+ }\r
+\r
+ public List<User> findByNoAnnouncementsDeliveries(String type)\r
+ throws SystemException {\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ String sql = CustomSQLUtil.get(FIND_BY_NO_ANNOUNCEMENTS_DELIVERIES);\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.addEntity("User_", UserImpl.class);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ qPos.add(type);\r
+\r
+ return q.list(true);\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ public List<User> findByNoContacts() throws SystemException {\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ String sql = CustomSQLUtil.get(FIND_BY_NO_CONTACTS);\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.addEntity("User_", UserImpl.class);\r
+\r
+ return q.list(true);\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ public List<User> findByEmail(String email) throws SystemException {\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ String sql = CustomSQLUtil.get(FIND_BY_NO_CONTACTS);\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.addEntity("User_", UserImpl.class);\r
+\r
+ return q.list(true);\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ public List<User> findByNoGroups() throws SystemException {\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ String sql = CustomSQLUtil.get(FIND_BY_NO_GROUPS);\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.addEntity("User_", UserImpl.class);\r
+\r
+ return q.list(true);\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ \r
+ private String[] convertToTab(String value) {\r
+ String[] tab;\r
+ if (value == null) {\r
+ tab = null;\r
+ } else {\r
+ tab = new String[1];\r
+ tab[0] = "%" + value + "%";\r
+ }\r
+ return tab;\r
+ }\r
+ \r
+ public List<User> findByC_FN_MN_LN_SN_EA_S(\r
+ long companyId, String firstName, String middleName,\r
+ String lastName, String screenName, String emailAddress, int status,\r
+ LinkedHashMap<String, Object> params, boolean andOperator,\r
+ int start, int end, OrderByComparator obc)\r
+ throws SystemException {\r
+\r
+ // Search on the whole keyword and not over all parts of the keyword (split by space)\r
+ String[] firstNames = convertToTab(firstName);\r
+ String[] middleNames = convertToTab(middleName);\r
+ String[] lastNames = convertToTab(lastName);\r
+ String[] screenNames = convertToTab(screenName);\r
+ String[] emailAddresses = convertToTab(emailAddress);\r
+ \r
+ return findByC_FN_MN_LN_SN_EA_S(\r
+ companyId, firstNames, middleNames, lastNames, screenNames,\r
+ emailAddresses, status, params, andOperator, start, end, obc);\r
+ }\r
+\r
+ public List<User> findByC_FN_MN_LN_SN_EA_S(\r
+ long companyId, String[] firstNames, String[] middleNames,\r
+ String[] lastNames, String[] screenNames, String[] emailAddresses,\r
+ int status, LinkedHashMap<String, Object> params,\r
+ boolean andOperator, int start, int end, OrderByComparator obc)\r
+ throws SystemException {\r
+ firstNames = CustomSQLUtil.keywords(firstNames);\r
+ middleNames = CustomSQLUtil.keywords(middleNames);\r
+ lastNames = CustomSQLUtil.keywords(lastNames);\r
+ screenNames = CustomSQLUtil.keywords(screenNames);\r
+ emailAddresses = CustomSQLUtil.keywords(emailAddresses);\r
+\r
+ if (params == null) {\r
+ params = _emptyLinkedHashMap;\r
+ }\r
+\r
+ Long groupId = (Long)params.get("usersGroups");\r
+ boolean inherit = GetterUtil.getBoolean(params.get("inherit"));\r
+\r
+ boolean doUnion = Validator.isNotNull(groupId) && inherit;\r
+\r
+ LinkedHashMap<String, Object> params1 = params;\r
+\r
+ LinkedHashMap<String, Object> params2 = null;\r
+\r
+ LinkedHashMap<String, Object> params3 = null;\r
+\r
+ if (doUnion) {\r
+ params2 = new LinkedHashMap<String, Object>(params1);\r
+\r
+ List<Long> organizationIds = new ArrayList<Long>();\r
+\r
+ Group group = GroupLocalServiceUtil.fetchGroup(groupId);\r
+\r
+ if ((group != null) && group.isOrganization()) {\r
+ organizationIds.add(group.getOrganizationId());\r
+ }\r
+\r
+ List<Organization> organizations = GroupUtil.getOrganizations(\r
+ groupId);\r
+\r
+ for (Organization organization : organizations) {\r
+ organizationIds.add(organization.getOrganizationId());\r
+ }\r
+\r
+ params2.remove("usersGroups");\r
+ params2.put(\r
+ "usersOrgs",\r
+ organizationIds.toArray(new Long[organizationIds.size()]));\r
+\r
+ params3 = new LinkedHashMap<String, Object>(params1);\r
+\r
+ List<UserGroup> userGroups = GroupUtil.getUserGroups(groupId);\r
+\r
+ Long[] userGroupIds = new Long[userGroups.size()];\r
+\r
+ for (int i = 0; i < userGroups.size(); i++) {\r
+ UserGroup userGroup = userGroups.get(i);\r
+\r
+ userGroupIds[i] = userGroup.getUserGroupId();\r
+ }\r
+\r
+ params3.remove("usersGroups");\r
+ params3.put("usersUserGroups", userGroupIds);\r
+ }\r
+\r
+ Session session = null;\r
+\r
+ try {\r
+ session = openSession();\r
+\r
+ //String sql = CustomSQLUtil.get(FIND_BY_C_FN_MN_LN_SN_EA_S);\r
+ String sql = "SELECT * FROM User_ "+\r
+ " [$JOIN$] "+\r
+ " WHERE [$WHERE$] "+\r
+ " (User_.companyId = ?) AND "+\r
+ " (User_.defaultUser = ?) AND "+\r
+ " ( "+\r
+ " (lower(User_.firstName) LIKE ? [$AND_OR_NULL_CHECK$]) [$AND_OR_CONNECTOR$] "+\r
+ " (lower(User_.middleName) LIKE ? [$AND_OR_NULL_CHECK$]) [$AND_OR_CONNECTOR$] "+\r
+ " (lower(User_.lastName) LIKE ? [$AND_OR_NULL_CHECK$]) [$AND_OR_CONNECTOR$] "+\r
+ " (lower(User_.screenName) LIKE ? [$AND_OR_NULL_CHECK$]) [$AND_OR_CONNECTOR$] "+\r
+ " (lower(User_.emailAddress) LIKE ? [$AND_OR_NULL_CHECK$]) "+\r
+ " ) AND (User_.status = ?) ";\r
+\r
+ sql = CustomSQLUtil.replaceKeywords(\r
+ sql, "lower(User_.firstName)", StringPool.LIKE, false,\r
+ firstNames);\r
+ sql = CustomSQLUtil.replaceKeywords(\r
+ sql, "lower(User_.middleName)", StringPool.LIKE, false,\r
+ middleNames);\r
+ sql = CustomSQLUtil.replaceKeywords(\r
+ sql, "lower(User_.lastName)", StringPool.LIKE, false,\r
+ lastNames);\r
+ sql = CustomSQLUtil.replaceKeywords(\r
+ sql, "lower(User_.screenName)", StringPool.LIKE, false,\r
+ screenNames);\r
+ sql = CustomSQLUtil.replaceKeywords(\r
+ sql, "lower(User_.emailAddress)", StringPool.LIKE, true,\r
+ emailAddresses);\r
+\r
+ if (status == WorkflowConstants.STATUS_ANY) {\r
+ sql = StringUtil.replace(sql, _STATUS_SQL, StringPool.BLANK);\r
+ }\r
+\r
+ StringBundler sb = new StringBundler();\r
+\r
+ sb.append(StringPool.OPEN_PARENTHESIS);\r
+ sb.append(replaceJoinAndWhere(sql, params1));\r
+ sb.append(StringPool.CLOSE_PARENTHESIS);\r
+\r
+ if (doUnion) {\r
+ sb.append(" UNION (");\r
+ sb.append(replaceJoinAndWhere(sql, params2));\r
+ sb.append(") UNION (");\r
+ sb.append(replaceJoinAndWhere(sql, params3));\r
+ sb.append(StringPool.CLOSE_PARENTHESIS);\r
+ }\r
+\r
+ if (obc != null) {\r
+ sb.append(" ORDER BY ");\r
+ sb.append(obc.toString());\r
+ }\r
+\r
+ sql = sb.toString();\r
+\r
+ sql = CustomSQLUtil.replaceAndOperator(sql, andOperator);\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ setJoin(qPos, params1);\r
+\r
+ qPos.add(companyId);\r
+ qPos.add(false);\r
+ qPos.add(firstNames, 2);\r
+ qPos.add(middleNames, 2);\r
+ qPos.add(lastNames, 2);\r
+ qPos.add(screenNames, 2);\r
+ qPos.add(emailAddresses, 2);\r
+\r
+ if (status != WorkflowConstants.STATUS_ANY) {\r
+ qPos.add(status);\r
+ }\r
+\r
+ if (doUnion) {\r
+ setJoin(qPos, params2);\r
+\r
+ qPos.add(companyId);\r
+ qPos.add(false);\r
+ qPos.add(firstNames, 2);\r
+ qPos.add(middleNames, 2);\r
+ qPos.add(lastNames, 2);\r
+ qPos.add(screenNames, 2);\r
+ qPos.add(emailAddresses, 2);\r
+\r
+ if (status != WorkflowConstants.STATUS_ANY) {\r
+ qPos.add(status);\r
+ }\r
+\r
+ setJoin(qPos, params3);\r
+\r
+ qPos.add(companyId);\r
+ qPos.add(false);\r
+ qPos.add(firstNames, 2);\r
+ qPos.add(middleNames, 2);\r
+ qPos.add(lastNames, 2);\r
+ qPos.add(screenNames, 2);\r
+ qPos.add(emailAddresses, 2);\r
+\r
+ if (status != WorkflowConstants.STATUS_ANY) {\r
+ qPos.add(status);\r
+ }\r
+ }\r
+ q.addEntity("User_", UserImpl.class);\r
+\r
+ if (start == -1 && end == -1) {\r
+ return q.list(true);\r
+ }\r
+ \r
+ return (List<User>)QueryUtil.list(q, getDialect(), start, end);\r
+ \r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ finally {\r
+ closeSession(session);\r
+ }\r
+ }\r
+\r
+ protected List<Long> countByC_FN_MN_LN_SN_EA_S(\r
+ Session session, long companyId, String[] firstNames,\r
+ String[] middleNames, String[] lastNames, String[] screenNames,\r
+ String[] emailAddresses, int status,\r
+ LinkedHashMap<String, Object> params, boolean andOperator) {\r
+\r
+ String sql = CustomSQLUtil.get(COUNT_BY_C_FN_MN_LN_SN_EA_S);\r
+\r
+ sql = CustomSQLUtil.replaceKeywords(\r
+ sql, "lower(User_.firstName)", StringPool.LIKE, false, firstNames);\r
+ sql = CustomSQLUtil.replaceKeywords(\r
+ sql, "lower(User_.middleName)", StringPool.LIKE, false,\r
+ middleNames);\r
+ sql = CustomSQLUtil.replaceKeywords(\r
+ sql, "lower(User_.lastName)", StringPool.LIKE, false, lastNames);\r
+ sql = CustomSQLUtil.replaceKeywords(\r
+ sql, "lower(User_.screenName)", StringPool.LIKE, false,\r
+ screenNames);\r
+ sql = CustomSQLUtil.replaceKeywords(\r
+ sql, "lower(User_.emailAddress)", StringPool.LIKE, true,\r
+ emailAddresses);\r
+\r
+ if (status == WorkflowConstants.STATUS_ANY) {\r
+ sql = StringUtil.replace(sql, _STATUS_SQL, StringPool.BLANK);\r
+ }\r
+\r
+ sql = replaceJoinAndWhere(sql, params);\r
+ sql = CustomSQLUtil.replaceAndOperator(sql, andOperator);\r
+\r
+ SQLQuery q = session.createSQLQuery(sql);\r
+\r
+ q.addScalar("userId", Type.LONG);\r
+\r
+ QueryPos qPos = QueryPos.getInstance(q);\r
+\r
+ setJoin(qPos, params);\r
+\r
+ qPos.add(companyId);\r
+ qPos.add(false);\r
+ qPos.add(firstNames, 2);\r
+ qPos.add(middleNames, 2);\r
+ qPos.add(lastNames, 2);\r
+ qPos.add(screenNames, 2);\r
+ qPos.add(emailAddresses, 2);\r
+\r
+ if (status != WorkflowConstants.STATUS_ANY) {\r
+ qPos.add(status);\r
+ }\r
+\r
+ return q.list(true);\r
+ }\r
+\r
+ protected String getJoin(LinkedHashMap<String, Object> params) {\r
+ if ((params == null) || params.isEmpty()) {\r
+ return StringPool.BLANK;\r
+ }\r
+\r
+ StringBundler sb = new StringBundler(params.size());\r
+\r
+ Iterator<Map.Entry<String, Object>> itr = params.entrySet().iterator();\r
+\r
+ while (itr.hasNext()) {\r
+ Map.Entry<String, Object> entry = itr.next();\r
+\r
+ String key = entry.getKey();\r
+\r
+ if (key.equals("expandoAttributes")) {\r
+ continue;\r
+ }\r
+\r
+ Object value = entry.getValue();\r
+\r
+ if (Validator.isNotNull(value)) {\r
+ sb.append(getJoin(key, value));\r
+ }\r
+ }\r
+\r
+ return sb.toString();\r
+ }\r
+\r
+ protected String getJoin(String key, Object value) {\r
+ String join = StringPool.BLANK;\r
+\r
+ if (key.equals("contactTwitterSn")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_CONTACT_TWITTER_SN);\r
+ }\r
+ else if (key.equals("noOrganizations")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_NO_ORGANIZATIONS);\r
+ }\r
+ else if (key.equals("permission")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_PERMISSION);\r
+ }\r
+ else if (key.equals("userGroupRole")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USER_GROUP_ROLE);\r
+ }\r
+ else if (key.equals("usersGroups")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_GROUPS);\r
+ }\r
+ else if (key.equals("usersOrgs")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_ORGS);\r
+ }\r
+ else if (key.equals("usersOrgsTree")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_ORGS_TREE);\r
+ }\r
+ else if (key.equals("usersPasswordPolicies")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_PASSWORD_POLICIES);\r
+ }\r
+ else if (key.equals("usersRoles")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_ROLES);\r
+ }\r
+ else if (key.equals("usersTeams")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_TEAMS);\r
+ }\r
+ else if (key.equals("usersUserGroups")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_USER_GROUPS);\r
+ }\r
+ else if (key.equals("announcementsDeliveryEmailOrSms")) {\r
+ join = CustomSQLUtil.get(\r
+ JOIN_BY_ANNOUNCEMENTS_DELIVERY_EMAIL_OR_SMS);\r
+ }\r
+ else if (key.equals("socialMutualRelation")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_SOCIAL_MUTUAL_RELATION);\r
+ }\r
+ else if (key.equals("socialMutualRelationType")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_SOCIAL_MUTUAL_RELATION_TYPE);\r
+ }\r
+ else if (key.equals("socialRelation")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_SOCIAL_RELATION);\r
+ }\r
+ else if (key.equals("socialRelationType")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_SOCIAL_RELATION_TYPE);\r
+ }\r
+ else if (key.equals("userEnseignement")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_ENSEIGNEMENT);\r
+ }\r
+ else if (value instanceof CustomSQLParam) {\r
+ CustomSQLParam customSQLParam = (CustomSQLParam)value;\r
+\r
+ join = customSQLParam.getSQL();\r
+ }\r
+\r
+ if (Validator.isNotNull(join)) {\r
+ int pos = join.indexOf("WHERE");\r
+\r
+ if (pos != -1) {\r
+ join = join.substring(0, pos);\r
+ }\r
+ }\r
+\r
+ return join;\r
+ }\r
+\r
+ protected String getWhere(LinkedHashMap<String, Object> params) {\r
+ if ((params == null) || params.isEmpty()) {\r
+ return StringPool.BLANK;\r
+ }\r
+\r
+ StringBundler sb = new StringBundler(params.size());\r
+\r
+ Iterator<Map.Entry<String, Object>> itr = params.entrySet().iterator();\r
+\r
+ while (itr.hasNext()) {\r
+ Map.Entry<String, Object> entry = itr.next();\r
+\r
+ String key = entry.getKey();\r
+\r
+ if (key.equals("expandoAttributes")) {\r
+ continue;\r
+ }\r
+\r
+ Object value = entry.getValue();\r
+\r
+ if (Validator.isNotNull(value)) {\r
+ sb.append(getWhere(key, value));\r
+ }\r
+ }\r
+\r
+ return sb.toString();\r
+ }\r
+\r
+ protected String getWhere(String key, Object value) {\r
+ String join = StringPool.BLANK;\r
+\r
+ if (key.equals("contactTwitterSn")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_CONTACT_TWITTER_SN);\r
+ }\r
+ else if (key.equals("noOrganizations")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_NO_ORGANIZATIONS);\r
+ }\r
+ else if (key.equals("permission")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_PERMISSION);\r
+ }\r
+ else if (key.equals("userGroupRole")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USER_GROUP_ROLE);\r
+ }\r
+ else if (key.equals("usersGroups")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_GROUPS);\r
+ }\r
+ else if (key.equals("userEnseignement")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_ENSEIGNEMENT);\r
+ }\r
+ else if (key.equals("usersOrgs")) {\r
+ if (value instanceof Long) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_ORGS);\r
+ }\r
+ else if (value instanceof Long[]) {\r
+ Long[] organizationIds = (Long[])value;\r
+\r
+ if (organizationIds.length == 0) {\r
+ join = "WHERE (Users_Orgs.organizationId = -1)";\r
+ }\r
+ else {\r
+ StringBundler sb = new StringBundler(\r
+ organizationIds.length * 2 + 1);\r
+\r
+ sb.append("WHERE (");\r
+\r
+ for (int i = 0; i < organizationIds.length; i++) {\r
+ sb.append("(Users_Orgs.organizationId = ?) ");\r
+\r
+ if ((i + 1) < organizationIds.length) {\r
+ sb.append("OR ");\r
+ }\r
+ }\r
+\r
+ sb.append(StringPool.CLOSE_PARENTHESIS);\r
+\r
+ join = sb.toString();\r
+ }\r
+ }\r
+ }\r
+ else if (key.equals("usersOrgsTree")) {\r
+ List<Organization> organizationsTree = (List<Organization>)value;\r
+\r
+ int size = organizationsTree.size();\r
+\r
+ if (size > 0) {\r
+ StringBundler sb = new StringBundler(size * 2 + 1);\r
+\r
+ sb.append("WHERE (");\r
+\r
+ for (int i = 0; i < size; i++) {\r
+ sb.append("(Organization_.treePath LIKE ?) ");\r
+\r
+ if ((i + 1) < size) {\r
+ sb.append("OR ");\r
+ }\r
+ }\r
+\r
+ sb.append(StringPool.CLOSE_PARENTHESIS);\r
+\r
+ join = sb.toString();\r
+ }\r
+ else {\r
+ join = "WHERE (Organization_.treePath LIKE ?)";\r
+ }\r
+ }\r
+ else if (key.equals("usersPasswordPolicies")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_PASSWORD_POLICIES);\r
+ }\r
+ else if (key.equals("usersRoles")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_ROLES);\r
+ }\r
+ else if (key.equals("usersTeams")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_TEAMS);\r
+ }\r
+ else if (key.equals("usersUserGroups")) {\r
+ if (value instanceof Long) {\r
+ join = CustomSQLUtil.get(JOIN_BY_USERS_USER_GROUPS);\r
+ }\r
+ else if (value instanceof Long[]) {\r
+ Long[] userGroupIds = (Long[])value;\r
+\r
+ if (userGroupIds.length == 0) {\r
+ join = "WHERE (Users_UserGroups.userGroupId = -1)";\r
+ }\r
+ else {\r
+ StringBundler sb = new StringBundler(\r
+ userGroupIds.length * 2 + 1);\r
+\r
+ sb.append("WHERE (");\r
+\r
+ for (int i = 0; i < userGroupIds.length; i++) {\r
+ sb.append("(Users_UserGroups.userGroupId = ?) ");\r
+\r
+ if ((i + 1) < userGroupIds.length) {\r
+ sb.append("OR ");\r
+ }\r
+ }\r
+\r
+ sb.append(StringPool.CLOSE_PARENTHESIS);\r
+\r
+ join = sb.toString();\r
+ }\r
+ }\r
+ }\r
+ else if (key.equals("announcementsDeliveryEmailOrSms")) {\r
+ join = CustomSQLUtil.get(\r
+ JOIN_BY_ANNOUNCEMENTS_DELIVERY_EMAIL_OR_SMS);\r
+ }\r
+ else if (key.equals("socialMutualRelation")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_SOCIAL_MUTUAL_RELATION);\r
+ }\r
+ else if (key.equals("socialMutualRelationType")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_SOCIAL_MUTUAL_RELATION_TYPE);\r
+ }\r
+ else if (key.equals("socialRelation")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_SOCIAL_RELATION);\r
+ }\r
+ else if (key.equals("socialRelationType")) {\r
+ join = CustomSQLUtil.get(JOIN_BY_SOCIAL_RELATION_TYPE);\r
+ }\r
+ else if (value instanceof CustomSQLParam) {\r
+ CustomSQLParam customSQLParam = (CustomSQLParam)value;\r
+\r
+ join = customSQLParam.getSQL();\r
+ }\r
+\r
+ if (Validator.isNotNull(join)) {\r
+ int pos = join.indexOf("WHERE");\r
+\r
+ if (pos != -1) {\r
+ join = join.substring(pos + 5, join.length()).concat(" AND ");\r
+ }\r
+ else {\r
+ join = StringPool.BLANK;\r
+ }\r
+ }\r
+\r
+ return join;\r
+ }\r
+\r
+ protected String replaceJoinAndWhere(\r
+ String sql, LinkedHashMap<String, Object> params) {\r
+\r
+ sql = StringUtil.replace(sql, "[$JOIN$]", getJoin(params));\r
+ sql = StringUtil.replace(sql, "[$WHERE$]", getWhere(params));\r
+\r
+ return sql;\r
+ }\r
+\r
+ protected void setJoin(\r
+ QueryPos qPos, LinkedHashMap<String, Object> params) {\r
+\r
+ if (params == null) {\r
+ return;\r
+ }\r
+\r
+ for (Map.Entry<String, Object> entry : params.entrySet()) {\r
+ String key = entry.getKey();\r
+\r
+ if (key.equals("expandoAttributes")) {\r
+ continue;\r
+ }\r
+\r
+ Object value = entry.getValue();\r
+\r
+ if (key.equals("usersOrgsTree")) {\r
+ List<Organization> organizationsTree =\r
+ (List<Organization>)value;\r
+\r
+ if (!organizationsTree.isEmpty()) {\r
+ for (Organization organization : organizationsTree) {\r
+ StringBundler treePath = new StringBundler(5);\r
+\r
+ treePath.append(StringPool.PERCENT);\r
+ treePath.append(StringPool.SLASH);\r
+ treePath.append(organization.getOrganizationId());\r
+ treePath.append(StringPool.SLASH);\r
+ treePath.append(StringPool.PERCENT);\r
+\r
+ qPos.add(treePath.toString());\r
+ }\r
+ }\r
+ else {\r
+ qPos.add("%/ /%");\r
+ }\r
+ }\r
+ else if (value instanceof Long) {\r
+ Long valueLong = (Long)value;\r
+\r
+ if (Validator.isNotNull(valueLong)) {\r
+ qPos.add(valueLong);\r
+ }\r
+ }\r
+ else if (value instanceof Long[]) {\r
+ Long[] valueArray = (Long[])value;\r
+\r
+ for (Long element : valueArray) {\r
+ if (Validator.isNotNull(element)) {\r
+ qPos.add(element);\r
+ }\r
+ }\r
+ }\r
+ else if (value instanceof Long[][]) {\r
+ Long[][] valueDoubleArray = (Long[][])value;\r
+\r
+ for (Long[] valueArray : valueDoubleArray) {\r
+ for (Long valueLong : valueArray) {\r
+ qPos.add(valueLong);\r
+ }\r
+ }\r
+ }\r
+ else if (value instanceof String) {\r
+ String valueString = (String)value;\r
+\r
+ if (Validator.isNotNull(valueString)) {\r
+ qPos.add(valueString);\r
+ }\r
+ }\r
+ else if (value instanceof String[]) {\r
+ String[] valueArray = (String[])value;\r
+\r
+ for (String element : valueArray) {\r
+ if (Validator.isNotNull(element)) {\r
+ qPos.add(element);\r
+ }\r
+ }\r
+ }\r
+ else if (value instanceof CustomSQLParam) {\r
+ CustomSQLParam customSQLParam = (CustomSQLParam)value;\r
+\r
+ customSQLParam.process(qPos);\r
+ }\r
+ }\r
+ }\r
+\r
+ private static final String _STATUS_SQL = "AND (User_.status = ?)";\r
+\r
+ private LinkedHashMap<String, Object> _emptyLinkedHashMap =\r
+ new LinkedHashMap<String, Object>(0);\r
+\r
+}
\ No newline at end of file