package org.openedit.logger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openedit.data.Searcher;
import org.openedit.data.SearcherManager;
import org.openedit.event.WebEvent;
import org.openedit.event.WebEventListener;
import com.openedit.OpenEditException;
import com.openedit.Shutdownable;
import com.openedit.WebPageRequest;
import com.openedit.hittracker.HitTracker;
import com.openedit.modules.BaseModule;
import com.openedit.page.Page;
public class LogSearchModule extends BaseModule implements Shutdownable
{
private static final Log log = LogFactory.getLog(LogSearchModule.class);
protected SearcherManager getSearcherManager()
{
return (SearcherManager) getBeanFactory().getBean("searcherManager");
}
public LuceneLogSearcher getLogSearcher(WebPageRequest inReq)
{
String foldername = inReq.findValue("foldername");
if( foldername == null)
{
return null;
}
if( foldername.startsWith("/"))
{
foldername = foldername.substring(1);
}
String[] info = foldername.split("/");
String type = info[info.length-1];
String catalogid = foldername.substring(0, foldername.length() - type.length() -1);
LuceneLogSearcher seacher = (LuceneLogSearcher) getSearcherManager().getSearcher(catalogid, type); //"logSearcher"
inReq.putPageValue("searcher", seacher);
return seacher;
}
public void fieldSearch(WebPageRequest inPageRequest) throws Exception
{
LuceneLogSearcher search = getLogSearcher(inPageRequest);
inPageRequest.putPageValue("searcher", search);
search.fieldSearch(inPageRequest);
}
public void recentSearch(WebPageRequest inPageRequest) throws Exception
{
LuceneLogSearcher search = getLogSearcher(inPageRequest);
inPageRequest.putPageValue("searcher", search);
if (inPageRequest.getRequestParameter("page") == null)
{
search.recentSearch(inPageRequest);
}
}
public HitTracker loadHits(WebPageRequest inReq) throws OpenEditException
{
String hitsname = inReq.findValue("hitsname");
if (hitsname == null)
{
hitsname = "loghits";
}
return getLogSearcher(inReq).loadHits(inReq, hitsname);
}
public HitTracker loadPageOfSearch(WebPageRequest inReq) throws Exception
{
return getLogSearcher(inReq).loadPageOfSearch(inReq);
}
protected void findLogs(List pagelist, String currentPath)
{
List<String> paths = getPageManager().getChildrenPaths(currentPath);
for (String path : paths)
{
Page page = getPageManager().getPage(path);
if( page.isFolder())
{
if(path.endsWith("Log"))
{
String temp = path.substring("/WEB-INF/logs".length());
pagelist.add(temp);
}
else
{
findLogs(pagelist, path);
}
}
}
}
public List loadLogList(WebPageRequest inReq)
{
List<String> pages = new ArrayList();
findLogs(pages, "/WEB-INF/logs");
Collections.sort(pages);
inReq.putPageValue("logs", pages);
return pages;
}
public void reindexLogs(WebPageRequest inContext) throws OpenEditException
{
LuceneLogSearcher search = getLogSearcher(inContext);
search.reIndexAll();
}
public void addEventLog(WebPageRequest inReq)
{
WebEvent inEvent = (WebEvent)inReq.getPageValue("webevent");
if ( inEvent == null)
{
//for some reason we do not have any event calling this. Maybe a user event?
log.error("No actual webevent found " + inReq.getPath());
return;
}
String type = inEvent.getOperation().replace("/","");
Searcher found = null;
found = getSearcherManager().getSearcher(inEvent.getCatalogId(), type + "Log");
if( found instanceof WebEventListener)
{
WebEventListener lucenelogsearcher= (WebEventListener)found;
lucenelogsearcher.eventFired(inEvent);
}
}
}