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