001
014
015 package com.liferay.portlet.usersadmin.util;
016
017 import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018 import com.liferay.portal.kernel.dao.orm.IndexableActionableDynamicQuery;
019 import com.liferay.portal.kernel.exception.PortalException;
020 import com.liferay.portal.kernel.log.Log;
021 import com.liferay.portal.kernel.log.LogFactoryUtil;
022 import com.liferay.portal.kernel.search.BaseIndexer;
023 import com.liferay.portal.kernel.search.BooleanQuery;
024 import com.liferay.portal.kernel.search.Document;
025 import com.liferay.portal.kernel.search.Field;
026 import com.liferay.portal.kernel.search.SearchContext;
027 import com.liferay.portal.kernel.search.SearchEngineUtil;
028 import com.liferay.portal.kernel.search.Summary;
029 import com.liferay.portal.kernel.search.filter.BooleanFilter;
030 import com.liferay.portal.kernel.spring.osgi.OSGiBeanProperties;
031 import com.liferay.portal.kernel.util.GetterUtil;
032 import com.liferay.portal.kernel.util.Validator;
033 import com.liferay.portal.kernel.workflow.WorkflowConstants;
034 import com.liferay.portal.model.Contact;
035 import com.liferay.portal.model.User;
036 import com.liferay.portal.service.ContactLocalServiceUtil;
037 import com.liferay.portal.service.UserLocalServiceUtil;
038
039 import java.util.LinkedHashMap;
040 import java.util.Locale;
041
042 import javax.portlet.PortletRequest;
043 import javax.portlet.PortletResponse;
044
045
050 @OSGiBeanProperties
051 public class ContactIndexer extends BaseIndexer<Contact> {
052
053 public static final String CLASS_NAME = Contact.class.getName();
054
055 public ContactIndexer() {
056 setStagingAware(false);
057 }
058
059 @Override
060 public String getClassName() {
061 return CLASS_NAME;
062 }
063
064 @Override
065 public void postProcessSearchQuery(
066 BooleanQuery searchQuery, BooleanFilter fullQueryBooleanFilter,
067 SearchContext searchContext)
068 throws Exception {
069
070 addSearchTerm(searchQuery, searchContext, "city", false);
071 addSearchTerm(searchQuery, searchContext, "country", false);
072 addSearchTerm(searchQuery, searchContext, "emailAddress", false);
073 addSearchTerm(searchQuery, searchContext, "firstName", false);
074 addSearchTerm(searchQuery, searchContext, "fullName", false);
075 addSearchTerm(searchQuery, searchContext, "lastName", false);
076 addSearchTerm(searchQuery, searchContext, "middleName", false);
077 addSearchTerm(searchQuery, searchContext, "region", false);
078 addSearchTerm(searchQuery, searchContext, "screenName", false);
079 addSearchTerm(searchQuery, searchContext, "street", false);
080 addSearchTerm(searchQuery, searchContext, "zip", false);
081
082 LinkedHashMap<String, Object> params =
083 (LinkedHashMap<String, Object>)searchContext.getAttribute("params");
084
085 if (params != null) {
086 String expandoAttributes = (String)params.get("expandoAttributes");
087
088 if (Validator.isNotNull(expandoAttributes)) {
089 addSearchExpando(searchQuery, searchContext, expandoAttributes);
090 }
091 }
092 }
093
094 @Override
095 protected void doDelete(Contact contact) throws Exception {
096 deleteDocument(contact.getCompanyId(), contact.getContactId());
097 }
098
099 @Override
100 protected Document doGetDocument(Contact contact) throws Exception {
101 if (contact.isUser()) {
102 User user = UserLocalServiceUtil.fetchUserByContactId(
103 contact.getContactId());
104
105 if ((user == null) || user.isDefaultUser() ||
106 (user.getStatus() != WorkflowConstants.STATUS_APPROVED)) {
107
108 return null;
109 }
110 }
111
112 Document document = getBaseModelDocument(CLASS_NAME, contact);
113
114 document.addKeyword(Field.COMPANY_ID, contact.getCompanyId());
115 document.addDate(Field.MODIFIED_DATE, contact.getModifiedDate());
116 document.addKeyword(Field.USER_ID, contact.getUserId());
117 document.addKeyword(Field.USER_NAME, contact.getFullName());
118
119 document.addText("emailAddress", contact.getEmailAddress());
120 document.addText("firstName", contact.getFirstName());
121 document.addText("fullName", contact.getFullName());
122 document.addText("jobTitle", contact.getJobTitle());
123 document.addText("lastName", contact.getLastName());
124 document.addText("middleName", contact.getMiddleName());
125
126 return document;
127 }
128
129 @Override
130 protected String doGetSortField(String orderByCol) {
131 if (orderByCol.equals("email-address")) {
132 return "emailAddress";
133 }
134 else if (orderByCol.equals("first-name")) {
135 return "firstName";
136 }
137 else if (orderByCol.equals("job-title")) {
138 return "jobTitle";
139 }
140 else if (orderByCol.equals("last-name")) {
141 return "lastName";
142 }
143 else {
144 return orderByCol;
145 }
146 }
147
148 @Override
149 protected Summary doGetSummary(
150 Document document, Locale locale, String snippet,
151 PortletRequest portletRequest, PortletResponse portletResponse) {
152
153 return null;
154 }
155
156 @Override
157 protected void doReindex(Contact contact) throws Exception {
158 Document document = getDocument(contact);
159
160 if (document != null) {
161 SearchEngineUtil.updateDocument(
162 getSearchEngineId(), contact.getCompanyId(), document,
163 isCommitImmediately());
164 }
165 }
166
167 @Override
168 protected void doReindex(String className, long classPK) throws Exception {
169 Contact contact = ContactLocalServiceUtil.getContact(classPK);
170
171 doReindex(contact);
172 }
173
174 @Override
175 protected void doReindex(String[] ids) throws Exception {
176 long companyId = GetterUtil.getLong(ids[0]);
177
178 reindexContacts(companyId);
179 }
180
181 protected void reindexContacts(long companyId) throws PortalException {
182 final IndexableActionableDynamicQuery indexableActionableDynamicQuery =
183 ContactLocalServiceUtil.getIndexableActionableDynamicQuery();
184
185 indexableActionableDynamicQuery.setCompanyId(companyId);
186 indexableActionableDynamicQuery.setPerformActionMethod(
187 new ActionableDynamicQuery.PerformActionMethod<Contact>() {
188
189 @Override
190 public void performAction(Contact contact) {
191 try {
192 Document document = getDocument(contact);
193
194 if (document != null) {
195 indexableActionableDynamicQuery.addDocuments(
196 document);
197 }
198 }
199 catch (PortalException pe) {
200 if (_log.isWarnEnabled()) {
201 _log.warn(
202 "Unable to index contact " +
203 contact.getContactId(),
204 pe);
205 }
206 }
207 }
208
209 });
210 indexableActionableDynamicQuery.setSearchEngineId(getSearchEngineId());
211
212 indexableActionableDynamicQuery.performActions();
213 }
214
215 private static final Log _log = LogFactoryUtil.getLog(ContactIndexer.class);
216
217 }