Java tutorial
/** * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.crm.kernel.search; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import com.crm.kernel.model.AppEntity; import com.crm.kernel.model.AppSearch; import com.crm.kernel.service.AppEntityLocalServiceUtil; import com.crm.kernel.sql.DynamicSQLUtil; import com.crm.kernel.sql.SQLField; import com.crm.kernel.util.EntityUtil; import com.crm.util.AppProperties; import com.liferay.portal.kernel.dao.orm.DynamicQuery; import com.liferay.portal.kernel.dao.search.DisplayTerms; import com.liferay.portal.kernel.dao.search.SearchContainer; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.model.User; import com.liferay.portal.theme.ThemeDisplay; import javax.portlet.PortletRequest; import javax.portlet.PortletURL; /** * @author Phan Viet Thang */ public class BaseSearchContainer extends SearchContainer<AppSearch> { public static final String DEFAULT_EMPTY_RESULTS_MESSAGE = "no-records-were-found"; public BaseSearchContainer(PortletRequest portletRequest, DisplayTerms displayTerms, DisplayTerms searchTerms, String curParam, int cur, int delta, PortletURL iteratorURL, List<String> headerNames, String emptyResultsMessage, boolean dateRange) { super(portletRequest, displayTerms, searchTerms, curParam, cur, delta, iteratorURL, headerNames, emptyResultsMessage); setDateRange(dateRange); // This task delegate to line 322 --> 344 //init(iteratorURL); } public BaseSearchContainer(PortletRequest portletRequest, DisplayTerms displayTerms, DisplayTerms searchTerms, String curParam, int cur, int delta, PortletURL iteratorURL, List<String> headerNames, String emptyResultsMessage) { this(portletRequest, displayTerms, searchTerms, curParam, cur, delta, iteratorURL, headerNames, emptyResultsMessage, false); } public BaseSearchContainer(PortletRequest portletRequest, DisplayTerms displayTerms, DisplayTerms searchTerms, PortletURL iteratorURL, int delta, boolean dateRange) { this(portletRequest, displayTerms, searchTerms, DEFAULT_CUR_PARAM, 0, delta, iteratorURL, null, DEFAULT_EMPTY_RESULTS_MESSAGE, dateRange); } public BaseSearchContainer(PortletRequest portletRequest, DisplayTerms displayTerms, DisplayTerms searchTerms, PortletURL iteratorURL, boolean dateRange) { this(portletRequest, displayTerms, searchTerms, DEFAULT_CUR_PARAM, 0, 20, iteratorURL, null, DEFAULT_EMPTY_RESULTS_MESSAGE, dateRange); } public BaseSearchContainer(PortletRequest portletRequest, PortletURL iteratorURL, boolean dateRange) { this(portletRequest, new BaseDisplayTerms(portletRequest, dateRange), new BaseSearchTerms(portletRequest, dateRange), iteratorURL, dateRange); } public BaseSearchContainer(PortletRequest portletRequest, PortletURL iteratorURL) { this(portletRequest, new BaseDisplayTerms(portletRequest), new BaseSearchTerms(portletRequest), iteratorURL, false); } /** * Push all field value in BaseDisplayTerm in to iteratorURL. * @param iteratorURL */ protected void init(PortletURL iteratorURL) { BaseDisplayTerms displayTerms = (BaseDisplayTerms) getDisplayTerms(); iteratorURL.setParameter(BaseDisplayTerms.TYPE, displayTerms.getType()); iteratorURL.setParameter(BaseDisplayTerms.CODE, displayTerms.getCode()); iteratorURL.setParameter(BaseDisplayTerms.TITLE, displayTerms.getTitle()); iteratorURL.setParameter(BaseDisplayTerms.STATUS, String.valueOf(displayTerms.getStatus())); iteratorURL.setParameter(BaseDisplayTerms.ACTION_TYPE, displayTerms.getActionType()); iteratorURL.setParameter(BaseDisplayTerms.ORDER_TYPE, displayTerms.getOrderType()); iteratorURL.setParameter(BaseDisplayTerms.DELIVERY_TYPE, displayTerms.getDeliveryType()); iteratorURL.setParameter(BaseDisplayTerms.ISDN, displayTerms.getIsdn()); iteratorURL.setParameter(BaseDisplayTerms.IMSI, displayTerms.getImsi()); iteratorURL.setParameter(BaseDisplayTerms.ICCID, displayTerms.getIccid()); iteratorURL.setParameter(BaseDisplayTerms.BRANCH_ID, String.valueOf(displayTerms.getBranchId())); iteratorURL.setParameter(BaseDisplayTerms.CATEGORY_ID, String.valueOf(displayTerms.getCategoryId())); iteratorURL.setParameter(BaseDisplayTerms.PRODUCT_ID, String.valueOf(displayTerms.getProductId())); iteratorURL.setParameter(BaseDisplayTerms.CAMPAIGN_ID, String.valueOf(displayTerms.getCampaignId())); iteratorURL.setParameter(BaseDisplayTerms.SEGMENT_ID, String.valueOf(displayTerms.getSegmentId())); iteratorURL.setParameter(BaseDisplayTerms.RANK_ID, String.valueOf(displayTerms.getRankId())); iteratorURL.setParameter(BaseDisplayTerms.REASON_ID, String.valueOf(displayTerms.getReasonId())); iteratorURL.setParameter(BaseDisplayTerms.COMMAND_ID, String.valueOf(displayTerms.getCommandId())); iteratorURL.setParameter(BaseDisplayTerms.PROVISIONING_ID, String.valueOf(displayTerms.getProvisioningId())); iteratorURL.setParameter(BaseDisplayTerms.STATUS, String.valueOf(displayTerms.getStatus())); iteratorURL.setParameter(BaseDisplayTerms.NAME, displayTerms.getName()); iteratorURL.setParameter(BaseDisplayTerms.ID_NO, displayTerms.getIdNo()); iteratorURL.setParameter(BaseDisplayTerms.TERRITORY_CODE, displayTerms.getTerritoryCode()); iteratorURL.setParameter(BaseDisplayTerms.TERRITORY_TYPE, displayTerms.getTerritoryType()); iteratorURL.setParameter(BaseDisplayTerms.ADDRESS, displayTerms.getAddress()); iteratorURL.setParameter(BaseDisplayTerms.TELEPHONE, displayTerms.getTelephone()); iteratorURL.setParameter(BaseDisplayTerms.EMAIL_ADDRESS, displayTerms.getEmailAddress()); iteratorURL.setParameter(BaseDisplayTerms.MERCHANT_ID, String.valueOf(displayTerms.getMerchantId())); iteratorURL.setParameter(BaseDisplayTerms.ERP_CODE, displayTerms.getErpCode()); iteratorURL.setParameter(BaseDisplayTerms.CUSTOMER_TYPE, displayTerms.getCustomerType()); iteratorURL.setParameter(BaseDisplayTerms.SUBSCRIBER_TYPE, displayTerms.getSubscriberType()); iteratorURL.setParameter(BaseDisplayTerms.PRODUCT_TYPE, displayTerms.getProductType()); iteratorURL.setParameter(BaseDisplayTerms.PROVISIONING_TYPE, displayTerms.getProvisioningType()); if (isDateRange()) { buildDateIterator(BaseDisplayTerms.START_DATE, displayTerms.getStartDate(), iteratorURL); buildDateIterator(BaseDisplayTerms.END_DATE, displayTerms.getEndDate(), iteratorURL); } } /** * Add date String (dd/MM/yyyy) to iteratorURL * @param paramName * @param date * @param iteratorURL */ protected void buildDateIterator(String paramName, Date date, PortletURL iteratorURL) { SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); if (Validator.isNotNull(date)) { iteratorURL.setParameter(paramName, dateFormat.format(date)); } else { iteratorURL.setParameter(paramName, ""); } } /** * Basic method to buildDynamic Query (order class that implement BaseSearchContainer has to override this method) * (But this method base is fail if dateRange is true.) * @param query * @return * @throws PortalException * @throws SystemException */ protected DynamicQuery buildDynamicQuery(DynamicQuery query) throws PortalException, SystemException { BaseDisplayTerms searchTerms = (BaseSearchTerms) getSearchTerms(); if (getSearchTerms().isAdvancedSearch()) { DynamicSQLUtil.addCriterion(query, "alias", searchTerms.getCode()); DynamicSQLUtil.addCriterion(query, "title", searchTerms.getTitle()); if (dateRange) { DynamicSQLUtil.addRangeCriterion(query, "", searchTerms.getStartDate(), searchTerms.getEndDate()); } } else { DynamicSQLUtil.addCriterion(query, "alias", searchTerms.getKeywords()); } if (Validator.isNotNull(getOrderByCol())) { DynamicSQLUtil.addOrderBy(query, getOrderByCol(), getOrderByType().equalsIgnoreCase("asc")); } else { DynamicSQLUtil.addOrderBy(query, "alias"); } return query; } /** * Incorrect method (not use). * @param agentIsdn * @param sessionType * @return * @throws PortalException * @throws SystemException */ protected boolean checkUser(String agentIsdn, String sessionType) throws PortalException, SystemException { BaseDisplayTerms terms = (BaseDisplayTerms) getSearchTerms(); // get current agentIsdn if (Validator.isNotNull(agentIsdn)) { terms.setUserName(agentIsdn); } else if (Validator.isNotNull(sessionType)) { ThemeDisplay themeDisplay = (ThemeDisplay) getPortletRequest().getAttribute(WebKeys.THEME_DISPLAY); User user = themeDisplay.getUser(); if (user.isDefaultUser()) { } } return true; } /** * Not used! * @param sessionType * @return * @throws PortalException * @throws SystemException */ protected boolean checkUser(String sessionType) throws PortalException, SystemException { return checkUser(StringPool.BLANK, sessionType); } /** * Not used! * @return * @throws PortalException * @throws SystemException */ protected boolean checkUser() throws PortalException, SystemException { return checkUser(StringPool.BLANK); } public boolean isDateRange() { return dateRange; } public void setDateRange(boolean dateRange) { this.dateRange = dateRange; } /** * Simple create new instance HashMap<String, Object> * @return * @throws PortalException * @throws SystemException */ protected HashMap<String, Object> setPreferenceParameters() { HashMap<String, Object> fieldValues = new HashMap<String, Object>(); return fieldValues; } /** * Is not implemented. */ protected void transferParams() { } /** * Query DB base on AppEntity object in db. * @param entityCode * @param keywordField * @param dateField * @return * @throws PortalException * @throws SystemException */ public List<?> query(String entityCode, String keywordField, String dateField) throws PortalException, SystemException { PortletRequest request = this.getPortletRequest(); BaseSearchTerms terms = (BaseSearchTerms) getSearchTerms(); HashMap<String, Object> fieldValues = setPreferenceParameters(); // advanced search. if (terms.isAdvancedSearch()) { // map<String-fieldname, SQLField> has values, fieldName and name; fieldValues = EntityUtil.getFieldValues(entityCode, request); // Put all values in fieldValues in to Request (IteratorURL) - for pagging in the same criterions. for (Map.Entry<String, Object> entry : fieldValues.entrySet()) { SQLField field = (SQLField) entry.getValue(); if (field.getValue() != null) { this.getIteratorURL().setParameter(entry.getKey(), String.valueOf(((SQLField) entry.getValue()).getValue())); } } // Add dates critertions if they are available in to request (IteratorURL). if (Validator.isNotNull(dateField)) { DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); Date startDate = terms.getStartDate(); Date endDate = terms.getEndDate(); if (startDate != null) { this.getIteratorURL().setParameter(BaseDisplayTerms.START_DATE, format.format(startDate)); } if (endDate != null) { this.getIteratorURL().setParameter(BaseDisplayTerms.END_DATE, format.format(endDate)); } } } //Simple search (base search). else if (Validator.isNotNull(keywordField)) { if (fieldValues == null) { fieldValues = new HashMap<String, Object>(); } /** * propeties in entity could has config about keyword, and it should override keywordField in programs. */ AppEntity entity = AppEntityLocalServiceUtil.getEntity(entityCode); if (entity != null) { AppProperties config = new AppProperties(); try { config.load(entity.getProperties()); if (!config.getString("keywords").equals("")) { keywordField = config.getString("keywords"); } } catch (Exception e) { e.printStackTrace(); } } fieldValues.put(keywordField, terms.getKeywords()); // add keyword IteratorURL this.getIteratorURL().setParameter(BaseDisplayTerms.KEYWORDS, terms.getKeywords()); } if (terms.isAdvancedSearch()) { return AppEntityLocalServiceUtil.query(entityCode, fieldValues, dateField, terms.getStartDate(), terms.getEndDate(), getStart(), getEnd()); } else { /** * Base search differ from advanced search about it doesn't have date comparation criterions. */ return AppEntityLocalServiceUtil.query(entityCode, fieldValues, "", null, null, getStart(), getEnd()); } } public int count(String entityCode, String keywordField, String dateField) throws PortalException, SystemException { PortletRequest request = this.getPortletRequest(); BaseSearchTerms terms = (BaseSearchTerms) getSearchTerms(); HashMap<String, Object> fieldValues = setPreferenceParameters(); if (terms.isAdvancedSearch()) { fieldValues = EntityUtil.getFieldValues(entityCode, request); } else if (Validator.isNotNull(keywordField)) { if (fieldValues == null) { fieldValues = new HashMap<String, Object>(); } fieldValues.put(keywordField, terms.getKeywords()); } if (terms.isAdvancedSearch()) { return AppEntityLocalServiceUtil.count(entityCode, fieldValues, dateField, terms.getStartDate(), terms.getEndDate()); } else { /** * Base search differ from advanced search about it doesn't have date comparation criterions. */ return AppEntityLocalServiceUtil.count(entityCode, fieldValues, "", null, null); } } public List<?> query(String entityCode, String keywordField) throws PortalException, SystemException { return query(entityCode, keywordField, ""); } public int count(String entityCode, String keywordField) throws PortalException, SystemException { return count(entityCode, keywordField, ""); } protected boolean dateRange = false; }