org.hoteia.qalingo.core.solr.service.UserSolrService.java Source code

Java tutorial

Introduction

Here is the source code for org.hoteia.qalingo.core.solr.service.UserSolrService.java

Source

/**
 * Most of the code in the Qalingo project is copyrighted Hoteia and licensed
 * under the Apache License Version 2.0 (release version 0.8.0)
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 *                   Copyright (c) Hoteia, 2012-2014
 * http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com
 *
 */
package org.hoteia.qalingo.core.solr.service;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrRequest.METHOD;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.response.FacetField;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.hoteia.qalingo.core.domain.User;
import org.hoteia.qalingo.core.service.GeolocService;
import org.hoteia.qalingo.core.solr.bean.SolrParam;
import org.hoteia.qalingo.core.solr.bean.SortField;
import org.hoteia.qalingo.core.solr.bean.UserSolr;
import org.hoteia.qalingo.core.solr.response.UserResponseBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service("userSolrService")
@Transactional
public class UserSolrService extends AbstractSolrService {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    protected SolrServer userSolrServer;

    @Autowired
    protected GeolocService geolocService;

    public void addOrUpdateUser(final User user) throws SolrServerException, IOException, IllegalArgumentException {
        if (user.getId() == null) {
            throw new IllegalArgumentException("Id  cannot be blank or null.");
        }
        if (logger.isDebugEnabled()) {
            logger.debug("Indexing User " + user.getId() + " : " + user.getCode() + " : " + user.getFirstname()
                    + " : " + user.getLastname());
        }
        UserSolr userSolr = new UserSolr();
        userSolr.setId(user.getId());
        userSolr.setActive(user.isActive());
        userSolr.setCode(user.getCode());
        userSolr.setLastname(user.getLastname());
        userSolr.setFirstname(user.getFirstname());
        userSolr.setEmail(user.getEmail());
        userSolr.setTitle(user.getTitle());
        userSolr.setAddress(user.getAddress1());
        userSolr.setPostalCode(user.getPostalCode());
        userSolr.setCity(user.getCity());
        userSolr.setCountryCode(user.getCountryCode());
        userSolr.setAddressUniqueKey(geolocService.encodeAddress(user.getAddress1(), user.getPostalCode(),
                user.getCity(), user.getCountryCode()));
        userSolrServer.addBean(userSolr);
        userSolrServer.commit();
    }

    public void removeUser(final UserSolr userSolr) throws SolrServerException, IOException {
        if (userSolr.getId() == null) {
            throw new IllegalArgumentException("Id  cannot be blank or null.");
        }
        if (logger.isDebugEnabled()) {
            logger.debug("Remove Index User " + userSolr.getId() + " : " + userSolr.getLastname() + " : "
                    + userSolr.getFirstname());
        }
        userSolrServer.deleteById(userSolr.getId().toString());
        userSolrServer.commit();
    }

    public UserResponseBean searchUser(final String searchQuery, final List<String> facetFields,
            final List<String> filterQueries, final SolrParam solrParam)
            throws IllegalArgumentException, SolrServerException, IOException {
        SolrQuery solrQuery = new SolrQuery();

        if (solrParam != null) {
            if (solrParam.get("rows") != null) {
                solrQuery.setParam("rows", (String) solrParam.get("rows"));
            } else {
                solrQuery.setParam("rows", getMaxResult());
            }

            if (solrParam.get("sortField") != null) {
                SortField sortField = (SortField) solrParam.get("sortField");
                for (Iterator<String> iterator = sortField.keySet().iterator(); iterator.hasNext();) {
                    String field = (String) iterator.next();
                    solrQuery.addSortField(field, sortField.get(field));
                }
            }
        }

        if (StringUtils.isEmpty(searchQuery)) {
            throw new IllegalArgumentException("SearchQuery field can not be Empty or Blank!");
        }
        solrQuery.setQuery(searchQuery);

        if (facetFields != null && !facetFields.isEmpty()) {
            solrQuery.setFacet(true);
            solrQuery.setFacetMinCount(1);
            for (String facetField : facetFields) {
                solrQuery.addFacetField(facetField);
            }
        }

        logger.debug("QueryRequest solrQuery: " + solrQuery);

        SolrRequest request = new QueryRequest(solrQuery, METHOD.POST);

        QueryResponse response = new QueryResponse(userSolrServer.request(request), userSolrServer);

        logger.debug("QueryResponse Obj: " + response.toString());

        List<UserSolr> solrList = response.getBeans(UserSolr.class);
        UserResponseBean userResponseBean = new UserResponseBean();
        userResponseBean.setUserSolrList(solrList);

        if (facetFields != null && !facetFields.isEmpty()) {
            List<FacetField> solrFacetFieldList = response.getFacetFields();
            userResponseBean.setUserSolrFacetFieldList(solrFacetFieldList);
        }
        return userResponseBean;
    }

    @Deprecated
    public UserResponseBean searchUser(String searchBy, String searchText, List<String> facetFields)
            throws IllegalArgumentException, SolrServerException, IOException {
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setParam("rows", getMaxResult());

        if (StringUtils.isEmpty(searchBy)) {
            throw new IllegalArgumentException("SearchBy field can not be Empty or Blank!");
        }

        if (StringUtils.isEmpty(searchText)) {
            solrQuery.setQuery(searchBy + ":*");
        } else {
            solrQuery.setQuery(searchBy + ":" + searchText + "*");
        }

        if (facetFields != null && !facetFields.isEmpty()) {
            solrQuery.setFacet(true);
            solrQuery.setFacetMinCount(1);
            for (String facetField : facetFields) {
                solrQuery.addFacetField(facetField);
            }
        }

        logger.debug("QueryRequest solrQuery: " + solrQuery);

        SolrRequest request = new QueryRequest(solrQuery, METHOD.POST);

        QueryResponse response = new QueryResponse(userSolrServer.request(request), userSolrServer);

        logger.debug("QueryResponse Obj: " + response.toString());

        List<UserSolr> solrList = response.getBeans(UserSolr.class);
        UserResponseBean userResponseBean = new UserResponseBean();
        userResponseBean.setUserSolrList(solrList);

        if (facetFields != null && !facetFields.isEmpty()) {
            List<FacetField> solrFacetFieldList = response.getFacetFields();
            userResponseBean.setUserSolrFacetFieldList(solrFacetFieldList);
        }
        return userResponseBean;
    }

    public UserResponseBean searchUser() throws IllegalArgumentException, SolrServerException, IOException {
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setParam("rows", getMaxResult());

        solrQuery.setQuery("*");
        solrQuery.setFacet(true);
        solrQuery.setFacetMinCount(1);
        solrQuery.addFacetField("lastname");

        logger.debug("QueryRequest solrQuery: " + solrQuery);

        SolrRequest request = new QueryRequest(solrQuery, METHOD.POST);

        QueryResponse response = new QueryResponse(userSolrServer.request(request), userSolrServer);

        logger.debug("QueryResponse Obj: " + response.toString());

        List<UserSolr> solrList = response.getBeans(UserSolr.class);
        List<FacetField> solrFacetFieldList = response.getFacetFields();

        UserResponseBean userResponseBean = new UserResponseBean();
        userResponseBean.setUserSolrList(solrList);
        userResponseBean.setUserSolrFacetFieldList(solrFacetFieldList);
        return userResponseBean;
    }

}