package org.openedit.entermedia.search;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.WeakHashMap;
import org.openedit.xml.XmlArchive;
import org.openedit.xml.XmlFile;
import com.openedit.OpenEditException;
import com.openedit.WebPageRequest;
import com.openedit.page.Page;
import com.openedit.page.Permission;
import com.openedit.page.manage.PageManager;
import com.openedit.users.BaseUser;
import com.openedit.users.User;
import com.openedit.util.PathUtilities;
public class SearchFilterArchive
{
protected XmlArchive fieldXmlArchive;
protected Map fieldCache;
protected PageManager fieldPageManager;
public void clearUserSearchFilter(User inUser, String inCatalogId) throws OpenEditException
{
XmlFile settings = getXmlArchive().loadXmlFile(inCatalogId + inUser.getUserName());
if (settings != null && settings.isExist())
{
getXmlArchive().deleteXmlFile(settings);
}
}
// public void savePropertiesXXX(String inName, Types inTypes, User inUser)
// throws OpenEditException {
// String path = "/" + getCatalogId() + "/configuration/lists/properties"
// + inName + ".xml";
//
// if (inTypes == null)
// {
// inTypes = getXmlArchive().createXmlFile(inName, path);
// }
// getXmlArchive().saveXml((XmlFile) inTypes, inUser);
//
// }
public SearchFilter saveUserCategoryFilter(WebPageRequest inReq, List inCategories, User inUser, String inCatalogId) throws Exception
{
SearchFilter filter = getSearchFilter(inReq, false, false, inCatalogId);
filter.clearCategoryFilters();
filter.addSavedCategoryFilter(inCategories);
getXmlArchive().saveXml(filter.getSavedCategoryFilters(), inUser);
return filter;
}
public XmlArchive getXmlArchive()
{
return fieldXmlArchive;
}
public void setXmlArchive(XmlArchive inXmlArchive)
{
fieldXmlArchive = inXmlArchive;
}
public void saveUserSearchFilter(SearchFilter inFilter) throws Exception
{
getXmlArchive().saveXml(inFilter.getSavedFilters(), inFilter.getUser());
}
// public void savePropertiesXXX(String inName, Types inTypes, User inUser)
// throws OpenEditException {
// String path = "/" + getCatalogId() + "/configuration/lists/properties"
// + inName + ".xml";
//
// if (inTypes == null)
// {
// inTypes = getXmlArchive().createXmlFile(inName, path);
// }
// getXmlArchive().saveXml((XmlFile) inTypes, inUser);
//
// }
public org.openedit.entermedia.search.SearchFilter getSearchFilter(WebPageRequest inReq, boolean inIncludeSavedFilter, boolean inSelected, String inCatalogId) throws OpenEditException
{
User inUser = inReq.getUser();
if (inUser == null)
{
inUser = new BaseUser();
inUser.setUserName("anonymous");
inUser.setVirtual(true);
}
SearchFilter details = (SearchFilter) getCache().get(inUser.getUserName());
if (details == null)
{
details = new SearchFilter();
details.setUser(inUser);
getCache().put(inUser.getUserName(), details);
}
details.setCategorySelected(inSelected);
// user specific filters
// These are the temporarily hidden categories?
String catpath = "/" + inCatalogId + "/data/userfilters/" + inUser.getUserName() + "categories.xml";
XmlFile settings = getXmlArchive().getXml(catpath, "filter");
if (!settings.isExist())
{
String altpath = "/" + inCatalogId + "/data/userfilters/defaultcategories.xml";
XmlFile altsettings = getXmlArchive().getXml(altpath, "filter");
settings.setRoot(altsettings.getRoot());
}
if (settings != null)
{
details.setSavedCategoryFilters(settings);
}
details.setIncludeUserFilter(inIncludeSavedFilter);
// saved filters this should happen every time?
// if (inIncludeSavedFilter)
// {
String userfilterpath = "/" + inCatalogId + "/data/userfilters/" + inUser.getUserName() + ".xml";
settings = getXmlArchive().getXml(userfilterpath, "filter");
details.setSavedFilters(settings);
// }
// /Loop over all the xconfs in categories
details.getExcludeCategories().clear();
//TODO:
List xconfs = getPageManager().getChildrenPaths("/" + inCatalogId + "/categories/");
for (Iterator iterator = xconfs.iterator(); iterator.hasNext();)
{
String path = (String) iterator.next();
if (path.endsWith(".xconf"))
{
Page page = getPageManager().getPage(path, true);
WebPageRequest req = inReq.copy(page);
Permission filter = page.getPermission("view");
if (filter != null)
{
if (!filter.passes(req))
{
details.addCategoryExclude(PathUtilities.extractPageName(path));
}
}
}
}
return details;
}
public Map getCache()
{
if (fieldCache == null)
{
fieldCache = new WeakHashMap();
}
return fieldCache;
}
public PageManager getPageManager()
{
return fieldPageManager;
}
public void setPageManager(PageManager inPageManager)
{
fieldPageManager = inPageManager;
}
// public XmlFile loadSystemWideFilters(String level) throws
// OpenEditException {
// XmlFile settings = null;
// if (level != null) {
// settings = loadXml("systemfilters", "searchfilter" + level,
// "filter");
// }
//
// return settings;
// }
}