001
014
015 package com.liferay.portlet.bookmarks.util;
016
017 import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018 import com.liferay.portal.kernel.dao.orm.DynamicQuery;
019 import com.liferay.portal.kernel.dao.orm.Property;
020 import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
021 import com.liferay.portal.kernel.exception.PortalException;
022 import com.liferay.portal.kernel.exception.SystemException;
023 import com.liferay.portal.kernel.search.BaseIndexer;
024 import com.liferay.portal.kernel.search.BooleanQuery;
025 import com.liferay.portal.kernel.search.Document;
026 import com.liferay.portal.kernel.search.Field;
027 import com.liferay.portal.kernel.search.SearchContext;
028 import com.liferay.portal.kernel.search.SearchEngineUtil;
029 import com.liferay.portal.kernel.search.Summary;
030 import com.liferay.portal.kernel.util.CharPool;
031 import com.liferay.portal.kernel.util.GetterUtil;
032 import com.liferay.portal.kernel.util.StringUtil;
033 import com.liferay.portal.kernel.workflow.WorkflowConstants;
034 import com.liferay.portal.model.Group;
035 import com.liferay.portal.service.persistence.GroupActionableDynamicQuery;
036 import com.liferay.portal.util.PortletKeys;
037 import com.liferay.portlet.bookmarks.model.BookmarksEntry;
038 import com.liferay.portlet.bookmarks.model.BookmarksFolder;
039 import com.liferay.portlet.bookmarks.model.BookmarksFolderConstants;
040 import com.liferay.portlet.bookmarks.service.BookmarksEntryLocalServiceUtil;
041 import com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryActionableDynamicQuery;
042 import com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderActionableDynamicQuery;
043
044 import java.util.Locale;
045
046 import javax.portlet.PortletURL;
047
048
053 public class BookmarksEntryIndexer extends BaseIndexer {
054
055 public static final String[] CLASS_NAMES = {BookmarksEntry.class.getName()};
056
057 public static final String PORTLET_ID = PortletKeys.BOOKMARKS;
058
059 public BookmarksEntryIndexer() {
060 setPermissionAware(true);
061 }
062
063 @Override
064 public String[] getClassNames() {
065 return CLASS_NAMES;
066 }
067
068 @Override
069 public String getPortletId() {
070 return PORTLET_ID;
071 }
072
073 @Override
074 public void postProcessContextQuery(
075 BooleanQuery contextQuery, SearchContext searchContext)
076 throws Exception {
077
078 addStatus(contextQuery, searchContext);
079 }
080
081 @Override
082 protected void doDelete(Object obj) throws Exception {
083 BookmarksEntry entry = (BookmarksEntry)obj;
084
085 deleteDocument(entry.getCompanyId(), entry.getEntryId());
086 }
087
088 @Override
089 protected Document doGetDocument(Object obj) throws Exception {
090 BookmarksEntry entry = (BookmarksEntry)obj;
091
092 Document document = getBaseModelDocument(PORTLET_ID, entry);
093
094 document.addText(Field.DESCRIPTION, entry.getDescription());
095 document.addKeyword(Field.FOLDER_ID, entry.getFolderId());
096 document.addText(Field.TITLE, entry.getName());
097 document.addKeyword(
098 Field.TREE_PATH,
099 StringUtil.split(entry.getTreePath(), CharPool.SLASH));
100 document.addText(Field.URL, entry.getUrl());
101
102 return document;
103 }
104
105 @Override
106 protected Summary doGetSummary(
107 Document document, Locale locale, String snippet,
108 PortletURL portletURL) {
109
110 String entryId = document.get(Field.ENTRY_CLASS_PK);
111
112 portletURL.setParameter("struts_action", "/bookmarks/view_entry");
113 portletURL.setParameter("entryId", entryId);
114
115 Summary summary = createSummary(document, Field.TITLE, Field.URL);
116
117 summary.setPortletURL(portletURL);
118
119 return summary;
120 }
121
122 @Override
123 protected void doReindex(Object obj) throws Exception {
124 BookmarksEntry entry = (BookmarksEntry)obj;
125
126 Document document = getDocument(entry);
127
128 SearchEngineUtil.updateDocument(
129 getSearchEngineId(), entry.getCompanyId(), document);
130 }
131
132 @Override
133 protected void doReindex(String className, long classPK) throws Exception {
134 BookmarksEntry entry = BookmarksEntryLocalServiceUtil.getEntry(classPK);
135
136 doReindex(entry);
137 }
138
139 @Override
140 protected void doReindex(String[] ids) throws Exception {
141 long companyId = GetterUtil.getLong(ids[0]);
142
143 reindexFolders(companyId);
144 reindexRoot(companyId);
145 }
146
147 @Override
148 protected String getPortletId(SearchContext searchContext) {
149 return PORTLET_ID;
150 }
151
152 protected void reindexEntries(
153 long companyId, final long groupId, final long folderId)
154 throws PortalException, SystemException {
155
156 ActionableDynamicQuery actionableDynamicQuery =
157 new BookmarksEntryActionableDynamicQuery() {
158
159 @Override
160 protected void addCriteria(DynamicQuery dynamicQuery) {
161 Property folderIdProperty = PropertyFactoryUtil.forName(
162 "folderId");
163
164 dynamicQuery.add(folderIdProperty.eq(folderId));
165
166 Property statusProperty = PropertyFactoryUtil.forName("status");
167
168 Integer[] statuses = {
169 WorkflowConstants.STATUS_APPROVED,
170 WorkflowConstants.STATUS_IN_TRASH
171 };
172
173 dynamicQuery.add(statusProperty.in(statuses));
174 }
175
176 @Override
177 protected void performAction(Object object) throws PortalException {
178 BookmarksEntry entry = (BookmarksEntry)object;
179
180 Document document = getDocument(entry);
181
182 addDocument(document);
183 }
184
185 };
186
187 actionableDynamicQuery.setCompanyId(companyId);
188 actionableDynamicQuery.setGroupId(groupId);
189 actionableDynamicQuery.setSearchEngineId(getSearchEngineId());
190
191 actionableDynamicQuery.performActions();
192 }
193
194 protected void reindexFolders(final long companyId)
195 throws PortalException, SystemException {
196
197 ActionableDynamicQuery actionableDynamicQuery =
198 new BookmarksFolderActionableDynamicQuery() {
199
200 @Override
201 protected void performAction(Object object)
202 throws PortalException, SystemException {
203
204 BookmarksFolder folder = (BookmarksFolder)object;
205
206 long groupId = folder.getGroupId();
207 long folderId = folder.getFolderId();
208
209 reindexEntries(companyId, groupId, folderId);
210 }
211
212 };
213
214 actionableDynamicQuery.setCompanyId(companyId);
215
216 actionableDynamicQuery.performActions();
217 }
218
219 protected void reindexRoot(final long companyId)
220 throws PortalException, SystemException {
221
222 ActionableDynamicQuery actionableDynamicQuery =
223 new GroupActionableDynamicQuery() {
224
225 @Override
226 protected void performAction(Object object)
227 throws PortalException, SystemException {
228
229 Group group = (Group)object;
230
231 long groupId = group.getGroupId();
232 long folderId =
233 BookmarksFolderConstants.DEFAULT_PARENT_FOLDER_ID;
234
235 reindexEntries(companyId, groupId, folderId);
236 }
237
238 };
239
240 actionableDynamicQuery.setCompanyId(companyId);
241
242 actionableDynamicQuery.performActions();
243 }
244
245 }