Advertisement
akakunin

PetsIndexer.java

Dec 7th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.21 KB | None | 0 0
  1. package kz.bsbnb.petcatalog.search;
  2. import java.util.Locale;
  3.  
  4. import javax.portlet.PortletURL;
  5.  
  6. import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
  7. import com.liferay.portal.kernel.dao.orm.DynamicQuery;
  8. import com.liferay.portal.kernel.exception.PortalException;
  9. import com.liferay.portal.kernel.exception.SystemException;
  10. import com.liferay.portal.kernel.search.BaseIndexer;
  11. import com.liferay.portal.kernel.search.Document;
  12. import com.liferay.portal.kernel.search.Field;
  13. import com.liferay.portal.kernel.search.SearchContext;
  14. import com.liferay.portal.kernel.search.SearchEngineUtil;
  15. import com.liferay.portal.kernel.search.Summary;
  16. import com.liferay.portal.kernel.util.GetterUtil;
  17. import com.liferay.portal.kernel.util.StringUtil;
  18. import com.liferay.portal.kernel.util.Validator;
  19.  
  20. import kz.bsbnb.petcatalog.PortletKeys;
  21. import kz.bsbnb.petcatalog.model.Pet;
  22. import kz.bsbnb.petcatalog.portlet.PetCatalogPortlet;
  23. import kz.bsbnb.petcatalog.service.PetLocalServiceUtil;
  24. import kz.bsbnb.petcatalog.service.persistence.PetActionableDynamicQuery;
  25.  
  26. /**
  27. * Класс отвечающий за индексацию объектов Pet и за отображение результатов
  28. * поиска
  29. *
  30. */
  31. public class PetsIndexer extends BaseIndexer {
  32.  
  33. public static final String[] CLASS_NAMES = {Pet.class.getName()};
  34.  
  35. public static final String PORTLET_ID = PortletKeys.PET_CATALOG;
  36.  
  37. @Override
  38. public String[] getClassNames() {
  39. return CLASS_NAMES;
  40. }
  41.  
  42. @Override
  43. public String getPortletId() {
  44. return PORTLET_ID;
  45. }
  46.  
  47.  
  48. /**
  49. * Add then implement workflow
  50. *
  51. * @Override public boolean isVisible(long classPK, int status) throws
  52. * Exception { Pet pet = PetLocalServiceUtil.getPet(classPK);
  53. *
  54. * return isVisible(pet.getStatus(), status); }
  55. * @Override public void postProcessContextQuery( BooleanQuery contextQuery,
  56. * SearchContext searchContext) throws Exception {
  57. *
  58. * addStatus(contextQuery, searchContext); }
  59. */
  60.  
  61. @Override
  62. protected void doDelete(Object obj) throws Exception {
  63. Pet pet = (Pet) obj;
  64.  
  65. deleteDocument(pet.getCompanyId(), pet.getPetId());
  66. }
  67.  
  68. /**
  69. * Основной метод, который вызывается при интексации объекта В нем надо
  70. * индексировать только аттрибуты объекта - общие вещи, такие, как например,
  71. * теги и категории, индексируются в базовом классе
  72. */
  73. @Override
  74. protected Document doGetDocument(Object obj) throws Exception {
  75. Pet pet = (Pet) obj;
  76.  
  77. Document document = getBaseModelDocument(PORTLET_ID, pet);
  78.  
  79. document.addText(Field.DESCRIPTION, pet.getDescription());
  80. document.addDate(Field.MODIFIED_DATE, pet.getModifiedDate());
  81. document.addText(Field.TITLE, pet.getName());
  82.  
  83. return document;
  84. }
  85.  
  86. /**
  87. * Этот метод вызывается для отображения информации об объекте в поисковой
  88. * выдаче
  89. *
  90. */
  91. @Override
  92. protected Summary doGetSummary(
  93. Document document, Locale locale, String snippet,
  94. PortletURL portletURL) {
  95. String title = document.get(Field.TITLE);
  96.  
  97. String content = snippet;
  98.  
  99. if (Validator.isNull(snippet)) {
  100. content = StringUtil.shorten(document.get(Field.CONTENT), 200);
  101. }
  102.  
  103. String petId = document.get(Field.ENTRY_CLASS_PK);
  104.  
  105. portletURL.setParameter("jspPage", PetCatalogPortlet.VIEW_PET_JSP);
  106. portletURL.setParameter(PetCatalogPortlet.PARAM_PET_ID, petId);
  107.  
  108. return new Summary(title, content, portletURL);
  109. }
  110.  
  111. @Override
  112. protected void doReindex(Object obj) throws Exception {
  113. Pet pet = (Pet) obj;
  114.  
  115. Document document = getDocument(pet);
  116.  
  117. SearchEngineUtil.updateDocument(
  118. getSearchEngineId(), pet.getCompanyId(), document);
  119. }
  120.  
  121. @Override
  122. protected void doReindex(String className, long classPK) throws Exception {
  123. Pet pet = PetLocalServiceUtil.getPet(classPK);
  124.  
  125. doReindex(pet);
  126. }
  127.  
  128. @Override
  129. protected void doReindex(String[] ids) throws Exception {
  130. long companyId = GetterUtil.getLong(ids[0]);
  131.  
  132. reindexPets(companyId);
  133. }
  134.  
  135. @Override
  136. protected String getPortletId(SearchContext searchContext) {
  137. return PORTLET_ID;
  138. }
  139.  
  140. protected void reindexPets(long companyId)
  141. throws PortalException, SystemException {
  142.  
  143. ActionableDynamicQuery actionableDynamicQuery =
  144. new PetActionableDynamicQuery() {
  145.  
  146. @Override
  147. protected void addCriteria(DynamicQuery dynamicQuery) {
  148. /*
  149. * TODO Add it then implement workflow Property
  150. * displayDateProperty = PropertyFactoryUtil.forName(
  151. * "displayDate");
  152. * dynamicQuery.add(displayDateProperty.lt(new Date()));
  153. *
  154. * Property statusProperty =
  155. * PropertyFactoryUtil.forName("status");
  156. *
  157. * Integer[] statuses = {
  158. * WorkflowConstants.STATUS_APPROVED,
  159. * WorkflowConstants.STATUS_IN_TRASH };
  160. *
  161. * dynamicQuery.add(statusProperty.in(statuses));
  162. */
  163. }
  164.  
  165. @Override
  166. protected void performAction(Object object) throws PortalException {
  167. Pet pet = (Pet) object;
  168.  
  169. Document document = getDocument(pet);
  170.  
  171. addDocument(document);
  172. }
  173.  
  174. };
  175.  
  176. actionableDynamicQuery.setCompanyId(companyId);
  177. actionableDynamicQuery.setSearchEngineId(getSearchEngineId());
  178.  
  179. actionableDynamicQuery.performActions();
  180. }
  181.  
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement