com.ssavr.solr.service.impl.IceCreamLocalServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.ssavr.solr.service.impl.IceCreamLocalServiceImpl.java

Source

/**
 * Copyright (c) 2000-2011 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.ssavr.solr.service.impl;

import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.ws.http.HTTPException;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.response.FacetField;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocumentList;

import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.Indexer;
import com.liferay.portal.kernel.search.IndexerRegistryUtil;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.service.ServiceContext;
import com.ssavr.solr.NoSuchIceCreamException;
import com.ssavr.solr.beans.IceCreamBean;
import com.ssavr.solr.beans.SolrResponse;
import com.ssavr.solr.model.IceCream;
import com.ssavr.solr.model.IceCreamDocuments;
import com.ssavr.solr.service.base.IceCreamLocalServiceBaseImpl;
import com.ssavr.solr.util.SolrUtil;

/**
 * The implementation of the ice cream local service.
 * 
 * <p>
 * All custom service methods should be put in this class. Whenever methods are
 * added, rerun ServiceBuilder to copy their definitions into the
 * {@link com.ssavr.solr.service.IceCreamLocalService} interface.
 * 
 * <p>
 * This is a local service. Methods of this service will not have security
 * checks based on the propagated JAAS credentials because this service can only
 * be accessed from within the same VM.
 * </p>
 * 
 * @author SAVRAMIS
 * @see com.ssavr.solr.service.base.IceCreamLocalServiceBaseImpl
 * @see com.ssavr.solr.service.IceCreamLocalServiceUtil
 */
public class IceCreamLocalServiceImpl extends IceCreamLocalServiceBaseImpl {
    /*
     * NOTE FOR DEVELOPERS:
     * 
     * Never reference this interface directly. Always use {@link
     * com.ssavr.solr.service.IceCreamLocalServiceUtil} to access the ice cream
     * local service.
     */
    public IceCream addIceCream(long userId, long companyId, ServiceContext serviceContext, String name,
            String flavor, String[] documents) throws Exception {

        long iceCreamId = counterLocalService.increment(IceCream.class.getName());
        IceCream iceCream = iceCreamPersistence.create(iceCreamId);
        iceCream.setUserId(userId);
        iceCream.setCompanyId(companyId);
        iceCream.setUuid(serviceContext.getUuid());
        iceCream.setName(name);
        iceCream.setFlavor(flavor);
        Date now = new Date();
        iceCream.setCreateDate(now);
        iceCream.setModifiedDate(now);
        iceCream = iceCreamPersistence.update(iceCream, false, serviceContext);

        iceCreamDocumentsLocalService.addIceCreamDocuments(userId, companyId, serviceContext, iceCreamId,
                documents);

        Indexer indexer = IndexerRegistryUtil.getIndexer(IceCreamBean.class);
        IceCreamBean bean = getIceCreamBean(iceCream);
        indexer.reindex(bean);

        return iceCream;
    }

    /***************************************************************************
     ************************** GET ********************************************
     ***************************************************************************/

    public IceCreamBean getIceCreamBean(IceCream iceCream) throws Exception {
        String uid = "iceCream_" + iceCream.getUuid();
        IceCreamBean bean = new IceCreamBean();
        bean.setUid(uid);
        bean.setCompanyId(iceCream.getCompanyId());
        bean.setIceCreamId(iceCream.getIceCreamId());
        bean.setName(iceCream.getName());
        bean.setFlavor(iceCream.getFlavor());
        List<IceCreamDocuments> documents = iceCreamDocumentsLocalService
                .getIceCreamDocumentsByIceCreamId(iceCream.getIceCreamId());
        List<String> documentsContent = new ArrayList<String>();

        if (!documents.isEmpty()) {
            List<String> documentIds = new ArrayList<String>();
            for (IceCreamDocuments document : documents) {
                documentIds.add(String.valueOf(document.getDocumentId()));
            }
            String documentsStr = StringUtil.merge(documentIds, StringPool.SPACE);

            SolrQuery query = new SolrQuery();
            query.setQuery(Field.ENTRY_CLASS_PK + ":(" + documentsStr + ")");
            query.addFilterQuery(
                    Field.ENTRY_CLASS_NAME + ":(com.liferay.portlet.documentlibrary.model.DLFileEntry)");
            query.setStart(0);
            query.setRows(10000000);

            String activeServerUrl = SolrUtil.getActiveSolrServer();
            CommonsHttpSolrServer server = new CommonsHttpSolrServer(activeServerUrl);

            QueryResponse qr = server.query(query);
            SolrDocumentList docs = qr.getResults();
            if (_log.isDebugEnabled()) {
                _log.debug("Found " + docs.size() + " Document(-s)");
            }

            for (int i = 0; i < docs.size(); ++i) {
                String docContent = (String) docs.get(i).getFieldValue("content");
                documentsContent.add(docContent);
            }
        }

        bean.setIceCreamRecipeContent(documentsContent);

        if (_log.isDebugEnabled()) {
            _log.debug(bean.toString());
        }

        return bean;
    }

    public List<IceCream> getAllIceCreams() throws SystemException {
        return iceCreamPersistence.findAll();
    }

    public List<IceCream> getIceCreams(int start, int end, OrderByComparator orderByComparator)
            throws SystemException {
        if (_log.isDebugEnabled()) {
            _log.debug("getIceCreams()");
        }
        return iceCreamPersistence.findAll(start, end, orderByComparator);
    }

    public List<FacetField> getIceCreamsFacets() throws SystemException {

        List<FacetField> facets = new ArrayList<FacetField>();
        String activeServerURL = SolrUtil.getActiveSolrServer();
        try {
            CommonsHttpSolrServer server = new CommonsHttpSolrServer(activeServerURL);
            SolrQuery query = new SolrQuery();

            query.setQuery(getQuery());
            boolean enableFacet = true;
            query.setFacet(enableFacet);
            query.addFacetField("iceCreamName", "iceCreamFlavor");

            QueryResponse response = server.query(query);
            facets = response.getFacetFields();
        } catch (MalformedURLException e) {
            if (_log.isDebugEnabled()) {
                _log.debug(e.getMessage());
            }
            throw new SystemException(e);
        } catch (SolrServerException e) {
            if (_log.isDebugEnabled()) {
                _log.debug(e.getMessage());
            }
            throw new SystemException(e);
        } catch (HTTPException e) {
            if (_log.isDebugEnabled()) {
                _log.debug(e.getMessage());
            }
            throw new SystemException(e);
        }

        return facets;
    }

    public List<IceCream> facetIceCreams(String facetValue) throws SystemException {
        if (_log.isDebugEnabled()) {
            _log.debug("facetIceCreams()");
        }
        List<IceCream> iceCreams = new ArrayList<IceCream>();
        String activeServerURL = SolrUtil.getActiveSolrServer();

        try {
            CommonsHttpSolrServer server = new CommonsHttpSolrServer(activeServerURL);
            SolrQuery query = new SolrQuery();
            query.setQuery("*:*");
            query.setFacet(true);
            query.addFacetQuery("iceCreamName:" + facetValue);

            QueryResponse response = server.query(query);

            List<SolrResponse> searchResults = response.getBeans(SolrResponse.class);
            for (SolrResponse result : searchResults) {
                String iceCreamId = result.getEntryClassPK();
                IceCream iceCream = iceCreamPersistence.findByPrimaryKey(Long.parseLong(iceCreamId));
                iceCreams.add(iceCream);
            }

        } catch (MalformedURLException e) {
            if (_log.isDebugEnabled()) {
                _log.debug(e.getMessage());
            }
            throw new SystemException(e);
        } catch (SolrServerException e) {
            if (_log.isDebugEnabled()) {
                _log.debug(e.getMessage());
            }
            throw new SystemException(e);
        } catch (NoSuchIceCreamException e) {
            if (_log.isDebugEnabled()) {
                _log.debug(e.getMessage());
            }
            throw new SystemException(e);
        } catch (NumberFormatException e) {
            if (_log.isDebugEnabled()) {
                _log.debug(e.getMessage());
            }
            throw new SystemException(e);
        }

        return iceCreams;
    }

    public List<IceCream> searchIceCreams(String name, String flavor, String text, int start, int rows,
            String orderByCol, String orderByType) throws PortalException, SystemException {
        if (_log.isDebugEnabled()) {
            _log.debug("searchIceCreams()");
        }
        List<IceCream> iceCreams = new ArrayList<IceCream>();
        String activeServerURL = SolrUtil.getActiveSolrServer();
        try {
            CommonsHttpSolrServer server = new CommonsHttpSolrServer(activeServerURL);
            SolrQuery query = new SolrQuery();

            query.setQuery(getQuery());
            List<String> filterQueries = getFilterQueries(name, flavor, text);
            for (String fq : filterQueries) {
                query.setFilterQueries(fq);
            }

            query.setStart(start);
            query.setRows(rows);

            QueryResponse response = server.query(query);

            List<SolrResponse> searchResults = response.getBeans(SolrResponse.class);
            for (SolrResponse result : searchResults) {
                String iceCreamId = result.getEntryClassPK();
                IceCream iceCream = iceCreamPersistence.findByPrimaryKey(Long.parseLong(iceCreamId));
                iceCreams.add(iceCream);
            }
        } catch (MalformedURLException e) {
            if (_log.isDebugEnabled()) {
                _log.debug(e.getMessage());
            }
            throw new SystemException(e);
        } catch (SolrServerException e) {
            if (_log.isDebugEnabled()) {
                _log.debug(e.getMessage());
            }
            throw new SystemException(e);
        }

        return iceCreams;
    }

    public List<IceCream> searchIceCreamsWithEDisMax(String name, String flavor, String text, String value,
            int start, int rows, String orderByCol, String orderByType) throws PortalException, SystemException {
        if (_log.isDebugEnabled()) {
            _log.debug("searchIceCreams()");
        }
        List<IceCream> iceCreams = new ArrayList<IceCream>();
        String activeServerURL = SolrUtil.getActiveSolrServer();
        try {
            CommonsHttpSolrServer server = new CommonsHttpSolrServer(activeServerURL);
            SolrQuery query = new SolrQuery();

            query.setQuery(getQuery(value));
            query.set("qf", "iceCreamName iceCreamFlavor");
            /*
             * List<String> filterQueries = getFilterQueries(name, flavor,
             * text); for (String fq : filterQueries) {
             * query.setFilterQueries(fq); }
             */

            query.setStart(start);
            query.setRows(rows);

            boolean enableFacet = true;
            query.setFacet(enableFacet);
            query.addFacetField("iceCreamName", "iceCreamFlavor");

            QueryResponse response = server.query(query);

            List<SolrResponse> searchResults = response.getBeans(SolrResponse.class);

            for (SolrResponse result : searchResults) {
                String iceCreamId = result.getEntryClassPK();
                IceCream iceCream = iceCreamPersistence.findByPrimaryKey(Long.parseLong(iceCreamId));
                iceCreams.add(iceCream);
            }
        } catch (MalformedURLException e) {
            if (_log.isDebugEnabled()) {
                _log.debug(e.getMessage());
            }
            throw new SystemException(e);
        } catch (SolrServerException e) {
            if (_log.isDebugEnabled()) {
                _log.debug(e.getMessage());
            }
            throw new SystemException(e);
        }

        return iceCreams;
    }

    private List<String> getFilterQueries(String name, String flavor, String text) {
        List<String> fqs = new ArrayList<String>();
        if (Validator.isNotNull(name)) {
            fqs.add(getNameFilterQuery(name));
        }

        if (Validator.isNotNull(flavor)) {
            fqs.add(getFlavorFilterQuery(flavor));
        }

        if (Validator.isNotNull(text)) {
            fqs.add(getTextFilterQuery(text));
        }

        return fqs;
    }

    private String getTextFilterQuery(String text) {
        return "content:" + text;
    }

    private String getFlavorFilterQuery(String flavor) {
        return "iceCreamFlavor:" + flavor;
    }

    private String getNameFilterQuery(String name) {
        return "iceCreamName:" + name;
    }

    private String getQuery(String value) {
        return "{!edismax}" + value;
    }

    private String getQuery() {
        return getEDisMaxSimpleQuery();
    }

    private String getEDisMaxSimpleQuery() {
        return "{!edismax} entryClassName:com.ssavr.solr.beans.IceCreamBean";
    }

    /***************************************************************************
     ************************ DELETE *******************************************
     ***************************************************************************/

    public void deleteIceCream(long iceCreamId) throws PortalException, SystemException {
        IceCream iceCream = iceCreamPersistence.findByPrimaryKey(iceCreamId);
        iceCreamDocumentsLocalService.deleteIceCreamDocumentsByIceCreamId(iceCreamId);
        try {
            IceCreamBean bean = getIceCreamBean(iceCream);
            IndexerRegistryUtil.getIndexer(IceCreamBean.class).delete(bean);
        } catch (Exception e) {
            if (_log.isDebugEnabled()) {
                _log.debug(e.getMessage());
            }
            throw new PortalException(e);
        }
        iceCreamPersistence.remove(iceCream);
    }

    private static Log _log = LogFactoryUtil.getLog(IceCreamLocalServiceImpl.class);
}