Package name.pehl.karaka.server.search

Source Code of name.pehl.karaka.server.search.BaseEntityIndexSearch

package name.pehl.karaka.server.search;

import com.google.appengine.api.search.Document;
import com.google.appengine.api.search.Index;
import com.google.appengine.api.search.PutResponse;
import com.google.appengine.api.search.Query;
import com.google.appengine.api.search.QueryOptions;
import com.google.appengine.api.search.Results;
import com.google.appengine.api.search.ScoredDocument;
import name.pehl.karaka.server.entity.BaseEntity;

import java.util.ArrayList;
import java.util.List;

/**
* @author $LastChangedBy:$
* @version $LastChangedRevision:$
*/
public abstract class BaseEntityIndexSearch<T extends BaseEntity> implements IndexSearch<T>
{
    static final int RESULT_LIMIT = 15;


    @Override
    public PutResponse index(T... entities)
    {
        if (entities != null && entities.length != 0)
        {
            List<Document> documents = new ArrayList<Document>();
            for (T entity : entities)
            {
                documents.add(documentBuilderFor(entity).build());
            }
            return getIndex().put(documents);
        }
        return null;
    }


    @Override
    public PutResponse index(Iterable<T> entities)
    {
        if (entities != null)
        {
            List<Document> documents = new ArrayList<Document>();
            for (T entity : entities)
            {
                documents.add(documentBuilderFor(entity).build());
            }
            return getIndex().put(documents);
        }
        return null;
    }


    @Override
    public void unIndex(T... entities)
    {
        if (entities != null && entities.length != 0)
        {
            List<String> documentIds = new ArrayList<String>();
            for (T entity : entities)
            {
                if (!entity.isTransient())
                {
                    documentIds.add(String.valueOf(entity.getId()));
                }
            }
            getIndex().delete(documentIds);
        }
    }


    @Override
    public void unIndex(Iterable<T> entities)
    {
        if (entities != null)
        {
            List<String> documentIds = new ArrayList<String>();
            for (T entity : entities)
            {
                if (!entity.isTransient())
                {
                    documentIds.add(String.valueOf(entity.getId()));
                }
            }
            getIndex().delete(documentIds);
        }
    }


    @Override
    public Results<ScoredDocument> search(String query)
    {
        Query q = Query.newBuilder().setOptions(queryOptionsBuilder()).build(query);
        return getIndex().search(q);
    }

    protected Document.Builder documentBuilderFor(T entity)
    {
        return Document.newBuilder().setId(String.valueOf(entity.getId()));
    }


    protected QueryOptions.Builder queryOptionsBuilder()
    {
        QueryOptions.Builder builder = QueryOptions.newBuilder().setLimit(RESULT_LIMIT);
        return builder;
    }


    protected abstract Index getIndex();
}
TOP

Related Classes of name.pehl.karaka.server.search.BaseEntityIndexSearch

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.