com.crm.kernel.search.BaseSearchContainer.java Source code

Java tutorial

Introduction

Here is the source code for com.crm.kernel.search.BaseSearchContainer.java

Source

/**
 * 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;
}