package org.openedit.data;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import org.openedit.Data;
import com.openedit.WebPageRequest;
import com.openedit.hittracker.HitTracker;
import com.openedit.hittracker.SearchQuery;
public class QueryBuilder
{
protected Searcher fieldSearcher;
protected SearchQuery fieldQuery;
public Searcher getSearcher()
{
return fieldSearcher;
}
public void setSearcher(Searcher inSearcher)
{
fieldSearcher = inSearcher;
}
public SearchQuery getQuery()
{
if( fieldQuery == null)
{
fieldQuery = getSearcher().createSearchQuery();
}
return fieldQuery;
}
public void setQuery(SearchQuery inQuery)
{
fieldQuery = inQuery;
}
public QueryBuilder match(String inId, String inValue)
{
getQuery().addMatches(inId, inValue);
return this;
}
public QueryBuilder since(String inId, int date)
{
GregorianCalendar cal = new GregorianCalendar();
Date now = new Date();
cal.setTime(now);
if( date > 0)
{
date = 0 - date;
}
cal.add(GregorianCalendar.DAY_OF_MONTH, date);
getQuery().addBetween(inId, cal.getTime(),now);
return this;
}
public QueryBuilder orgroup(String inKey, Collection<String> inIds)
{
getQuery().addOrsGroup(inKey, inIds);
return this;
}
public QueryBuilder orgroup(String inKey, String inOrs)
{
getQuery().addOrsGroup(inKey, inOrs);
return this;
}
public QueryBuilder not(String inId, String inValue)
{
getQuery().addNot(inId, inValue);
return this;
}
public QueryBuilder sort(String inId)
{
getQuery().addSortBy(inId);
return this;
}
public QueryBuilder named(String inId)
{
getQuery().setHitsName(inId);
return this;
}
public HitTracker search(WebPageRequest inContext)
{
HitTracker tracker = getSearcher().cachedSearch(inContext, getQuery());
return tracker;
}
public HitTracker search(WebPageRequest inContext, int inHitsPerPage)
{
HitTracker tracker = getSearcher().cachedSearch(inContext, getQuery());
tracker.setHitsPerPage(inHitsPerPage);
return tracker;
}
public HitTracker search()
{
HitTracker tracker = getSearcher().search(getQuery());
return tracker;
}
public Data searchOne()
{
//getQuery().toFriendly();
Data found = getSearcher().searchByQuery(getQuery());
return found;
}
public QueryBuilder exact(String inKey, String inValue) {
getQuery().addExact(inKey, inValue);
return this;
}
public QueryBuilder startsWith(String inKey, String inValue) {
getQuery().addStartsWith(inKey, inValue);
return this;
}
public QueryBuilder or() {
getQuery().setAndTogether(false);
return this;
}
public QueryBuilder and() {
getQuery().setAndTogether(true);
return this;
}
public QueryBuilder all()
{
getQuery().addMatches("id", "*");
return this;
}
}