package org.openedit.entermedia.modules;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openedit.Data;
import org.openedit.data.Searcher;
import org.openedit.entermedia.savedqueries.SavedQueryManager;
import com.openedit.OpenEditException;
import com.openedit.WebPageRequest;
import com.openedit.hittracker.HitTracker;
import com.openedit.hittracker.SearchQuery;
import com.openedit.hittracker.Term;
public class SavedQueryModule extends BaseMediaModule
{
protected SavedQueryManager fieldSavedQueryManager;
private static final Log log = LogFactory.getLog(SavedQueryModule.class);
public SavedQueryManager getSavedQueryManager()
{
return fieldSavedQueryManager;
}
public void setSavedQueryManager(SavedQueryManager inSavedQueryManager)
{
fieldSavedQueryManager = inSavedQueryManager;
}
public void loadSavedQueryList(WebPageRequest inReq) throws Exception
{
// HitTracker hits = new ListHitTracker();
getSavedQueryManager().loadSavedQueryList(inReq);
// for (Iterator iterator = queries.iterator(); iterator.hasNext();)
// {
// SearchQuery query = (SearchQuery) iterator.next();
// if (!query.getId().contains("recent"))
// {
// // log.info(query.getId());
// hits.add(query);
// }
// }
// String hitsname = inReq.findValue("hitsname");
// if (hitsname == null)
// {
// hitsname = "hits";
// }
// inReq.putPageValue(hitsname, hits);
}
public Data loadSavedQuery(WebPageRequest inReq) throws Exception
{
String queryid = inReq.getRequestParameter("queryid");
if (queryid == null)
{
queryid = inReq.findValue("queryid"); // "mostrecent" ?
}
String catalogid = inReq.findValue("catalogid");
Data query = getSavedQueryManager().loadSavedQuery(catalogid, queryid, inReq.getUser());
inReq.putPageValue("savedquery", query);
return query;
}
public SearchQuery loadSearchQuery(WebPageRequest inReq) throws Exception
{
String queryid = inReq.getRequestParameter("queryid");
if (queryid == null)
{
queryid = inReq.findValue("queryid"); // "mostrecent" ?
}
if (queryid == null)
{
return null;
}
String catalogid = inReq.findValue("catalogid");
Data query = getSavedQueryManager().loadSavedQuery(catalogid, queryid, inReq.getUser());
//String sessionid = catalogid + "_" + queryid + "_query";
// inReq.putSessionValue(queryid + "_query", query);
if( query == null)
{
log.error("No such query " + queryid);
return null;
}
SearchQuery searchquery = getSavedQueryManager().loadSearchQuery(catalogid,query,inReq.getUser());
inReq.putSessionValue("currentquery", searchquery);
//inReq.putSessionValue(sessionid, searchquery);
inReq.putPageValue("query", searchquery);
return searchquery;
}
public void saveNew(WebPageRequest inReq) throws Exception
{
SearchQuery query = new SearchQuery();
query.setName("New");
inReq.putSessionValue("currentquery",query);
inReq.putPageValue("query", query);
}
public Data saveFromQuery(WebPageRequest inReq) throws Exception
{
//String id = inReq.getRequestParameter("queryid");
String name = inReq.getRequestParameter("name");
String description = inReq.getRequestParameter("description");
SearchQuery query = loadCurrentQuery(inReq);
query.setName(name);
query.setProperty("caption", description);
boolean usersaved = Boolean.valueOf( inReq.findValue("usersaved") );
query.setProperty("usersaved", String.valueOf(usersaved));
String catalogid = inReq.findValue("catalogid");
getSavedQueryManager().saveQuery(catalogid, query,inReq.getUser());
inReq.putSessionValue("currentquery", query);
inReq.putPageValue("query", query);
return query;
}
public Data addPreviousSearch(WebPageRequest inReq) throws Exception
{
if( inReq.getUser() == null)
{
return null;
}
SearchQuery query = loadCurrentQuery(inReq);
//query.setProperty("caption", query.getName() );
query.setProperty("usersaved", "false");
String catalogid = inReq.findValue("catalogid");
getSavedQueryManager().saveQuery(catalogid, query,inReq.getUser());
inReq.putSessionValue("currentquery", query);
inReq.putPageValue("query", query);
return query;
}
public void loadLastQuery(WebPageRequest inReq) throws Exception
{
loadCurrentQuery(inReq);
}
public SearchQuery loadCurrentQuery(WebPageRequest inReq) throws Exception
{
//String applicationid = inReq.findValue("applicationid");
String hitssessionid = inReq.getRequestParameter("hitssessionid");
SearchQuery query = null;
if (hitssessionid != null)
{
HitTracker hits = (HitTracker) inReq.getSessionValue(hitssessionid);
query = hits.getSearchQuery();
}
if (query == null)
{
HitTracker hits = (HitTracker)inReq.getPageValue("hits");
if( hits != null)
{
query = hits.getSearchQuery();
}
}
if (query == null)
{
query = (SearchQuery) inReq.getSessionValue("currentquery");
}
// query = getSearcherManager().getSearcher(applicationid, "luceneComposite").createSearchQuery();
// query.setDescription("Last edited query for user " + inReq.getUserName());
// query.setId(inReq.getUserName() + "-mostrecent");
// query.setName("Current query");
// }
if (query != null)
{
inReq.putSessionValue("currentquery", query);
inReq.putPageValue("query", query);
}
if(query.getName() == null){
query.setName("currentquery");
}
return query;
}
public void deletedSavedQuery(WebPageRequest inReq) throws Exception
{
String catalogid = inReq.findValue("catalogid");
String queryid = inReq.findValue("queryid");
getSavedQueryManager().deleteQuery(catalogid, queryid, inReq.getUser());
}
public HitTracker runSavedQuery(WebPageRequest inReq) throws Exception
{
String catalogid = inReq.findValue("catalogid");
String queryid = inReq.findValue("queryid");
Data data = getSavedQueryManager().loadSavedQuery(catalogid, queryid, inReq.getUser());
if(data != null)
{
//throw new OpenEditException("saved query not found " + queryid);
SearchQuery query = getSavedQueryManager().loadSearchQuery(catalogid, data,true,inReq.getUser());
Searcher searcher = getSearcherManager().getSearcher(catalogid, "asset");
HitTracker hittracker = searcher.cachedSearch(inReq, query);
return hittracker;
}
return null;
}
public void saveTerm(WebPageRequest inReq) throws Exception
{
String catalogid = inReq.findValue("catalogid");
String queryid = inReq.findValue("queryid");
Data data = getSavedQueryManager().loadSavedQuery(catalogid, queryid, inReq.getUser());
if(data == null)
{
throw new OpenEditException("saved query not found " + queryid);
}
//Construct it
SearchQuery query = getSavedQueryManager().loadSearchQuery(catalogid, data,inReq.getUser());
//Edit it
String detailid = inReq.findValue("detailid");
//TODO: Use this to create a new term:
SearchQuery tmpquery = getMediaArchive(inReq).getAssetSearcher().addStandardSearchTerms(inReq);
Term newterm = tmpquery.getTermByDetailId(detailid);
if( newterm == null)
{
log.info("Could not replace term");
return;
}
String termid = inReq.getRequestParameter("termid");
query.removeTerm(termid);
query.addTerm(newterm);
//query.getT
//Term term = query.getTermByTermId(termid);
// String value = inReq.getRequestParameter(term.getDetail().getId() + ".value");
// term.setValue(value);
//Save it back
Data saved = getSavedQueryManager().saveQuery(catalogid, query,inReq.getUser());
//TODO: Add any other properties
}
public void addTerm(WebPageRequest inReq) throws Exception
{
String catalogid = inReq.findValue("catalogid");
SearchQuery tmpquery = getMediaArchive(inReq).getAssetSearcher().addStandardSearchTerms(inReq);
//Edit it
String detailid = inReq.getRequestParameter("detailid");
String queryid = inReq.findValue("queryid");
Term term = tmpquery.getTermByDetailId(detailid);
Data data = getSavedQueryManager().loadSavedQuery(catalogid, queryid, inReq.getUser());
if(data == null)
{
throw new OpenEditException("saved query not found " + queryid);
}
//Construct it
SearchQuery query = getSavedQueryManager().loadSearchQuery(catalogid, data,inReq.getUser());
query.addTerm(term);
//Save it back
Data saved = getSavedQueryManager().saveQuery(catalogid, query,inReq.getUser());
}
public void removeTerm(WebPageRequest inReq) throws Exception
{
String catalogid = inReq.findValue("catalogid");
String queryid = inReq.findValue("queryid");
Data data = getSavedQueryManager().loadSavedQuery(catalogid, queryid, inReq.getUser());
if(data == null)
{
throw new OpenEditException("saved query not found " + queryid);
}
//Construct it
SearchQuery query = getSavedQueryManager().loadSearchQuery(catalogid, data,inReq.getUser());
String termid = inReq.getRequestParameter("termid");
query.removeTerm(termid);
//Save it back
Data saved = getSavedQueryManager().saveQuery(catalogid, query,inReq.getUser());
}
}