--- /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.portlet.documentlibrary.store;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import com.liferay.portal.kernel.exception.SystemException;\r
+import com.liferay.portal.kernel.log.Log;\r
+import com.liferay.portal.kernel.log.LogFactoryUtil;\r
+import com.liferay.portal.kernel.search.BooleanClauseOccur;\r
+import com.liferay.portal.kernel.search.BooleanQuery;\r
+import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil;\r
+import com.liferay.portal.kernel.search.Field;\r
+import com.liferay.portal.kernel.search.Hits;\r
+import com.liferay.portal.kernel.search.Indexer;\r
+import com.liferay.portal.kernel.search.IndexerRegistryUtil;\r
+import com.liferay.portal.kernel.search.SearchContext;\r
+import com.liferay.portal.kernel.search.SearchEngineUtil;\r
+import com.liferay.portal.kernel.search.SolrQueryUtil;\r
+import com.liferay.portal.kernel.search.TermQuery;\r
+import com.liferay.portal.kernel.search.TermQueryFactoryUtil;\r
+import com.liferay.portal.model.User;\r
+import com.liferay.portal.service.UserLocalServiceUtil;\r
+import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;\r
+import com.liferay.portlet.documentlibrary.service.DLFolderServiceUtil;\r
+import com.pentila.entSavoie.ENTRolesConstants;\r
+import com.pentila.entSavoie.search.util.IndexerUtil;\r
+\r
+/**\r
+ * @author Brian Wing Shun Chan\r
+ * @author Alexander Chow\r
+ * @author Edward Han\r
+ */\r
+public class CustomDLStoreImpl extends DLStoreImpl implements CustomDLStore {\r
+\r
+ private static Log logger = LogFactoryUtil.getLog(CustomDLStoreImpl.class);\r
+\r
+ public Hits search(\r
+ long companyId, long userId, String portletId, long groupId,\r
+ long[] repositoryIds, String keywords, int start, int end)\r
+ throws SystemException {\r
+ \r
+ logger.info("Searching '"+keywords+"' in documents (files) ...");\r
+\r
+ try {\r
+ SearchContext searchContext = new SearchContext();\r
+\r
+ searchContext.setCompanyId(companyId);\r
+ searchContext.setEnd(end);\r
+ searchContext.setEntryClassNames(\r
+ new String[] {DLFileEntryConstants.getClassName()});\r
+ searchContext.setGroupIds(new long[] {groupId});\r
+\r
+ Indexer indexer = IndexerRegistryUtil.getIndexer(\r
+ DLFileEntryConstants.getClassName());\r
+\r
+ searchContext.setSearchEngineId(indexer.getSearchEngineId());\r
+\r
+ searchContext.setStart(start);\r
+ searchContext.setUserId(userId);\r
+\r
+ BooleanQuery contextQuery = BooleanQueryFactoryUtil.create(\r
+ searchContext);\r
+ \r
+ contextQuery.addRequiredTerm(Field.PORTLET_ID, portletId);\r
+ \r
+ List<String> solrFilters = new ArrayList<String>();\r
+\r
+ User user = UserLocalServiceUtil.getUser(userId);\r
+\r
+ if (groupId > 0) {\r
+ solrFilters.add(Field.GROUP_ID + ":" + groupId);\r
+ } else if (ENTRolesConstants.hasGlobalVisibilityOnGroupOnItsSchool(user)) {\r
+ solrFilters.add("(" + Field.GROUP_ID + ":" + IndexerUtil.getExtendedVisibility(user, IndexerUtil.INCLUDE_USER_AND_COMMUNITY, IndexerUtil.INCLUDE_USER_GROUP) + ") "\r
+ + "OR (" + Field.ETAB_ID + ":" + IndexerUtil.getEtabVisibility(user) + ")");\r
+ } else {\r
+ String listGroupId = IndexerUtil.getSearchGroupsQuery(user, IndexerUtil.INCLUDE_USER_AND_COMMUNITY, \r
+ IndexerUtil.INCLUDE_GLOBAL_ORG, IndexerUtil.INCLUDE_USER_GROUP);\r
+ solrFilters.add(Field.GROUP_ID + ":" + listGroupId);\r
+ }\r
+\r
+\r
+ if ((repositoryIds != null) && (repositoryIds.length > 0)) {\r
+ BooleanQuery repositoryIdsQuery =\r
+ BooleanQueryFactoryUtil.create(searchContext);\r
+\r
+ boolean repositoryIdsQueryValid = false;\r
+ \r
+ for (long repositoryId : repositoryIds) {\r
+ if(repositoryId > 0){\r
+ try {\r
+ if (userId > 0) {\r
+ try {\r
+ DLFolderServiceUtil.getFolder(repositoryId);\r
+ repositoryIdsQueryValid = true;\r
+ }\r
+ catch (Exception e) {\r
+ continue;\r
+ }\r
+ }\r
+ \r
+ TermQuery termQuery = TermQueryFactoryUtil.create(\r
+ searchContext, "repositoryId", repositoryId);\r
+ \r
+ repositoryIdsQuery.add(\r
+ termQuery, BooleanClauseOccur.SHOULD);\r
+ }\r
+ catch (Exception e) {\r
+ }\r
+ }\r
+ }\r
+\r
+ if(repositoryIdsQueryValid){\r
+ contextQuery.add(repositoryIdsQuery, BooleanClauseOccur.MUST);\r
+ }\r
+ }\r
+ \r
+ String query = SolrQueryUtil.getQueryFromKeywords(keywords, true);\r
+ String queryWithoutFuzzySearch = SolrQueryUtil.getQueryFromKeywords(keywords, false);\r
+ \r
+ solrFilters.add("(" + Field.TITLE + ":" + query + ") "\r
+ + "OR (" + Field.CONTENT + ":" + queryWithoutFuzzySearch + ") "\r
+ + "OR (" + Field.PROPERTIES + ":" + queryWithoutFuzzySearch + ") "\r
+ + "OR (" + Field.ASSET_TAG_NAMES + ":" + query + ") "\r
+ + "OR (" + Field.KEYWORD_LIST + ":" + queryWithoutFuzzySearch+ ") "\r
+ + "OR (" + Field.TAG_LIST + ":" + queryWithoutFuzzySearch + ") "\r
+ + "OR (" + Field.LINK_LIST + ":" + queryWithoutFuzzySearch + ")");\r
+\r
+ BooleanQuery fullQuery = BooleanQueryFactoryUtil.create(searchContext);\r
+\r
+ fullQuery.add(contextQuery, BooleanClauseOccur.MUST);\r
+\r
+ //userId a 0 car on gere nous meme les permissions\r
+ return SearchEngineUtil.search(\r
+ indexer.getSearchEngineId(), companyId, fullQuery, solrFilters, start, end);\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ }\r
+ \r
+ public Hits searchByDate(\r
+ long companyId, String portletId, long groupId,\r
+ long userId, long[] repositoryIds, String keywords, int start,\r
+ int end) throws SystemException {\r
+\r
+ try {\r
+ SearchContext searchContext = new SearchContext();\r
+\r
+ searchContext.setCompanyId(companyId);\r
+ searchContext.setEnd(end);\r
+ searchContext.setEntryClassNames(\r
+ new String[] {DLFileEntryConstants.getClassName()});\r
+ searchContext.setGroupIds(new long[] {groupId});\r
+\r
+ Indexer indexer = IndexerRegistryUtil.getIndexer(\r
+ DLFileEntryConstants.getClassName());\r
+\r
+ searchContext.setSearchEngineId(indexer.getSearchEngineId());\r
+\r
+ searchContext.setStart(start);\r
+ searchContext.setUserId(userId);\r
+\r
+ BooleanQuery contextQuery = BooleanQueryFactoryUtil.create(\r
+ searchContext);\r
+\r
+ contextQuery.addRequiredTerm(Field.PORTLET_ID, portletId);\r
+ \r
+ List<String> solrFilters = new ArrayList<String>();\r
+ \r
+ User user = UserLocalServiceUtil.getUser(userId);\r
+ \r
+ if (groupId > 0) {\r
+ solrFilters.add(Field.GROUP_ID + ":" + groupId);\r
+ } else if (ENTRolesConstants.hasGlobalVisibilityOnGroupOnItsSchool(user)) {\r
+ solrFilters.add("(" + Field.GROUP_ID + ":" + IndexerUtil.getExtendedVisibility(user, IndexerUtil.INCLUDE_USER_AND_COMMUNITY, IndexerUtil.INCLUDE_USER_GROUP) + ") "\r
+ + "OR (" + Field.ETAB_ID + ":" + IndexerUtil.getEtabVisibility(user) + ")");\r
+ } else {\r
+ String listGroupId = IndexerUtil.getSearchGroupsQuery(user, IndexerUtil.INCLUDE_USER_AND_COMMUNITY, \r
+ IndexerUtil.INCLUDE_GLOBAL_ORG, IndexerUtil.INCLUDE_USER_GROUP);\r
+ solrFilters.add(Field.GROUP_ID + ":" + listGroupId);\r
+ }\r
+ \r
+\r
+ if ((repositoryIds != null) && (repositoryIds.length > 0)) {\r
+ BooleanQuery repositoryIdsQuery =\r
+ BooleanQueryFactoryUtil.create(searchContext);\r
+\r
+ for (long repositoryId : repositoryIds) {\r
+ try {\r
+ if (userId > 0) {\r
+ try {\r
+ DLFolderServiceUtil.getFolder(repositoryId);\r
+ }\r
+ catch (Exception e) {\r
+ continue;\r
+ }\r
+ }\r
+\r
+ TermQuery termQuery = TermQueryFactoryUtil.create(\r
+ searchContext, "repositoryId", repositoryId);\r
+\r
+ repositoryIdsQuery.add(\r
+ termQuery, BooleanClauseOccur.SHOULD);\r
+ }\r
+ catch (Exception e) {\r
+ }\r
+ }\r
+\r
+ contextQuery.add(repositoryIdsQuery, BooleanClauseOccur.MUST);\r
+ }\r
+ \r
+ if (!keywords.isEmpty()) {\r
+ //Field.MODIFIED_DATE = "modified" only \r
+ solrFilters.add("modifiedDate" + ":" + keywords);\r
+ } \r
+\r
+ BooleanQuery fullQuery = BooleanQueryFactoryUtil.create(searchContext);\r
+\r
+ fullQuery.add(contextQuery, BooleanClauseOccur.MUST);\r
+\r
+ //userId a 0 car on gere nous meme les permissions\r
+ return SearchEngineUtil.search(\r
+ indexer.getSearchEngineId(), companyId, fullQuery, solrFilters, start, end);\r
+ }\r
+ catch (Exception e) {\r
+ throw new SystemException(e);\r
+ }\r
+ }\r
+\r
+}
\ No newline at end of file