package org.openedit.data;
import java.text.DateFormat;
import java.util.Collection;
import java.util.List;
import org.openedit.Data;
import org.openedit.profile.UserProfile;
import com.openedit.OpenEditException;
import com.openedit.WebPageRequest;
import com.openedit.hittracker.HitTracker;
import com.openedit.hittracker.SearchQuery;
import com.openedit.users.User;
public interface Searcher
{
public String nextId();
public abstract HitTracker cachedSearch(WebPageRequest inPageRequest, SearchQuery inQuery) throws OpenEditException;
public abstract HitTracker loadHits(WebPageRequest inReq) throws OpenEditException;
public abstract HitTracker loadHits(WebPageRequest inReq, String hitsname) throws OpenEditException;
/** @deprecated **/
public abstract DateFormat getDefaultDateFormat();
public abstract void setDefaultDateFormat(DateFormat inDefaultDateFormat);
public abstract HitTracker fieldSearch(WebPageRequest inReq) throws OpenEditException;
public HitTracker fieldSearch(String attr, String value);
public HitTracker fieldSearch(String attr, String value, String orderby);
public abstract SearchQuery addStandardSearchTerms(WebPageRequest inPageRequest) throws OpenEditException;
public Data updateData(WebPageRequest inReq, String[] fields, Data data);
public abstract List deselect(String inField, String[] toremove) throws OpenEditException;
public QueryBuilder query();
/**
* Use this to automatically filter a search with the .xconf that declares the action.
* Example:
* <page-action name="OrderModule.getOrdersForUser">
* <not>
* <orderstatus>completed</orderstatus>
* </not>
* </page-action>
* @param inReq
* @param search
* @return
*/
public abstract SearchQuery addActionFilters(WebPageRequest inReq, SearchQuery search);
public abstract HitTracker loadPageOfSearch(WebPageRequest inPageRequest) throws OpenEditException;
//Some of these may be able to become protected
public abstract void reIndexAll() throws OpenEditException;
public SearchQuery createSearchQuery();
public Object searchById(String inId);
public Data loadData(Data inHit);
public Object searchByField(String inField,String inValue);
public Data searchByQuery(SearchQuery inQuery);
// public abstract HitTracker search(String inQuery);
public abstract HitTracker search(SearchQuery inQuery);
// public abstract HitTracker search(String inQuery, String inOrdering);
public abstract String getIndexId();
public abstract void clearIndex();
public abstract PropertyDetailsArchive getPropertyDetailsArchive();
public abstract void setPropertyDetailsArchive(PropertyDetailsArchive inPropertyDetailsArchive);
public PropertyDetails getPropertyDetails();
/**
* @deprecated No longer need a user passed in
* @param inView
* @param inUser
* @return
*/
public List getDetailsForView(String inView, User inUser);
public List getDetailsForView(String inView, UserProfile inUserProfile);
/**
* Do we even need this to work?
* @deprecated No longer need a user passed in
* @param inView
* @param inFieldName
* @param inUser
* @return
*/
public PropertyDetail getDetailForView(String inView, String inFieldName, User inUser);
public List getProperties();
public abstract HitTracker getAllHits(WebPageRequest inReq);
public abstract HitTracker getAllHits();
public abstract SearcherManager getSearcherManager();
public abstract void setSearcherManager(SearcherManager inSearcherManager);
/**
* @deprecated Use {@link #getSearchType()} instead
*/
public abstract String getFieldName();
public abstract String getSearchType();
/**
* @deprecated Use {@link #setSearchType(String)} instead
*/
public abstract void setFieldName(String inFieldName);
public abstract void setSearchType(String inFieldName);
public abstract String getCatalogId();
public abstract void setCatalogId(String inCatalogId);
public abstract void saveData(Data inData, User inUser);
public abstract Data createNewData();
public abstract void deleteAll(User inUser);
public abstract void delete(Data inData, User inUser);
public abstract void saveAllData(Collection<Data> inAll, User inUser);
public PropertyDetail getDetail(String inId);
public void changeSort(WebPageRequest inReq);
public void addChildQuery(WebPageRequest inReq);
public abstract void saveDetails(WebPageRequest inReq, String[] fields, Data data, String id);
/**
* @deprecated use searchByQuery
* @param inQ
* @return
*/
public Data uniqueResult(SearchQuery inQ);
HitTracker searchByIds(Collection<String> inIds);
public void updateFilters(WebPageRequest inReq);
public void restoreSettings();
public void reloadSettings();
}