1
22
23 package com.liferay.portlet.wiki.util;
24
25 import com.liferay.portal.kernel.search.BooleanQuery;
26 import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil;
27 import com.liferay.portal.kernel.search.Document;
28 import com.liferay.portal.kernel.search.DocumentImpl;
29 import com.liferay.portal.kernel.search.DocumentSummary;
30 import com.liferay.portal.kernel.search.Field;
31 import com.liferay.portal.kernel.search.Hits;
32 import com.liferay.portal.kernel.search.SearchEngineUtil;
33 import com.liferay.portal.kernel.search.SearchException;
34 import com.liferay.portal.kernel.util.HtmlUtil;
35 import com.liferay.portal.kernel.util.StringUtil;
36 import com.liferay.portal.util.PortletKeys;
37 import com.liferay.portlet.wiki.service.WikiNodeLocalServiceUtil;
38
39 import javax.portlet.PortletURL;
40
41
49 public class Indexer implements com.liferay.portal.kernel.search.Indexer {
50
51 public static final String PORTLET_ID = PortletKeys.WIKI;
52
53 public static void addPage(
54 long companyId, long groupId, long nodeId, String title,
55 String content, String[] tagsEntries)
56 throws SearchException {
57
58 try {
59 deletePage(companyId, nodeId, title);
60 }
61 catch (SearchException se) {
62 }
63
64 Document doc = getPageDocument(
65 companyId, groupId, nodeId, title, content, tagsEntries);
66
67 SearchEngineUtil.addDocument(companyId, doc);
68 }
69
70 public static void deletePage(long companyId, long nodeId, String title)
71 throws SearchException {
72
73 SearchEngineUtil.deleteDocument(companyId, getPageUID(nodeId, title));
74 }
75
76 public static void deletePages(long companyId, long nodeId)
77 throws SearchException {
78
79 BooleanQuery booleanQuery = BooleanQueryFactoryUtil.create();
80
81 booleanQuery.addRequiredTerm(Field.PORTLET_ID, PORTLET_ID);
82
83 booleanQuery.addRequiredTerm("nodeId", nodeId);
84
85 Hits hits = SearchEngineUtil.search(
86 companyId, booleanQuery, SearchEngineUtil.ALL_POS,
87 SearchEngineUtil.ALL_POS);
88
89 for (int i = 0; i < hits.getLength(); i++) {
90 Document doc = hits.doc(i);
91
92 SearchEngineUtil.deleteDocument(companyId, doc.get(Field.UID));
93 }
94 }
95
96 public static Document getPageDocument(
97 long companyId, long groupId, long nodeId, String title,
98 String content, String[] tagsEntries) {
99
100 content = HtmlUtil.extractText(content);
101
102 Document doc = new DocumentImpl();
103
104 doc.addUID(PORTLET_ID, nodeId, title);
105
106 doc.addKeyword(Field.COMPANY_ID, companyId);
107 doc.addKeyword(Field.PORTLET_ID, PORTLET_ID);
108 doc.addKeyword(Field.GROUP_ID, groupId);
109
110 doc.addText(Field.TITLE, title);
111 doc.addText(Field.CONTENT, content);
112
113 doc.addModifiedDate();
114
115 doc.addKeyword(Field.ENTRY_CLASS_PK, nodeId);
116
117 doc.addKeyword(Field.TAGS_ENTRIES, tagsEntries);
118
119 return doc;
120 }
121
122 public static String getPageUID(long nodeId, String title) {
123 Document doc = new DocumentImpl();
124
125 doc.addUID(PORTLET_ID, nodeId, title);
126
127 return doc.get(Field.UID);
128 }
129
130 public static void updatePage(
131 long companyId, long groupId, long nodeId, String title,
132 String content, String[] tagsEntries)
133 throws SearchException {
134
135 Document doc = getPageDocument(
136 companyId, groupId, nodeId, title, content, tagsEntries);
137
138 SearchEngineUtil.updateDocument(companyId, doc.get(Field.UID), doc);
139 }
140
141 public DocumentSummary getDocumentSummary(
142 com.liferay.portal.kernel.search.Document doc, PortletURL portletURL) {
143
144
146 String title = doc.get(Field.TITLE);
147
148
150 String content = doc.get(Field.CONTENT);
151
152 content = StringUtil.shorten(content, 200);
153
154
156 String nodeId = doc.get(Field.ENTRY_CLASS_PK);
157
158 portletURL.setParameter("struts_action", "/wiki/view");
159 portletURL.setParameter("nodeId", nodeId);
160 portletURL.setParameter("title", title);
161
162 return new DocumentSummary(title, content, portletURL);
163 }
164
165 public void reIndex(String[] ids) throws SearchException {
166 try {
167 WikiNodeLocalServiceUtil.reIndex(ids);
168 }
169 catch (Exception e) {
170 throw new SearchException(e);
171 }
172 }
173
174 }