/*
* Copyright (2012) Schibsted ASA
* This file is part of Possom.
*
* Possom is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Possom is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Possom. If not, see <http://www.gnu.org/licenses/>.
*
*/
package no.sesat.search.run;
import no.sesat.commons.ioc.BaseContext;
import no.sesat.commons.ioc.ContextWrapper;
import no.sesat.search.datamodel.DataModel;
import no.sesat.search.datamodel.DataModelFactory;
import no.sesat.search.datamodel.generic.DataObject;
import no.sesat.search.datamodel.generic.StringDataObject;
import no.sesat.search.datamodel.page.PageDataObject;
import no.sesat.search.datamodel.request.ParametersDataObject;
import no.sesat.search.site.config.SiteConfiguration;
import no.sesat.search.view.SearchTabFactory;
import no.sesat.search.view.config.SearchTab;
import org.apache.log4j.Logger;
/**
* Utility methods around a RunningQuery.
*
* @version <tt>$Id$</tt>
*/
public final class RunningQueryUtility {
// Constants -----------------------------------------------------
private static final Logger LOG = Logger.getLogger(RunningQueryUtility.class);
private static final String ERR_MISSING_TAB = "No existing implementation for tab ";
// Attributes ----------------------------------------------------
// Static --------------------------------------------------------
public static SearchTab findSearchTabByKey(
final DataModel datamodel,
final String cParameter,
final DataModelFactory dmFactory,
final BaseContext genericCxt){
// determine the c parameter.
// default comes from SiteConfiguration unless there exists a page parameter when it becomes 'i'.
final ParametersDataObject parametersDO = datamodel.getParameters();
final StringDataObject page = parametersDO.getValue("page");
final String searchTabKey = null != cParameter && 0 < cParameter.length()
? cParameter
: null != page && null != page.getString() && 0 < page.getString().length() ? "i" : null;
return findSearchTab(datamodel, searchTabKey, dmFactory, genericCxt, true);
}
public static SearchTab findSearchTabById(
final DataModel datamodel,
final String tabId,
final DataModelFactory dmFactory,
final BaseContext genericCxt){
return findSearchTab(datamodel, tabId, dmFactory, genericCxt, false);
}
// Constructors --------------------------------------------------
private RunningQueryUtility(){}
// Public --------------------------------------------------------
// Package protected ---------------------------------------------
// Protected -----------------------------------------------------
// Private -------------------------------------------------------
private static SearchTab findSearchTab(
final DataModel datamodel,
final String searchTab,
final DataModelFactory dmFactory,
final BaseContext genericCxt,
final boolean useKey){
LOG.info("searchTab: " + searchTab);
SearchTab result = null;
if(null != searchTab){
try{
final SearchTabFactory stFactory = SearchTabFactory.instanceOf(
ContextWrapper.wrap(
SearchTabFactory.Context.class,
genericCxt));
result = useKey
? stFactory.getTabByKey(searchTab)
: stFactory.getTabByName(searchTab);
if(null == datamodel.getPage()){
final PageDataObject pageDO = dmFactory.instantiate(
PageDataObject.class,
datamodel,
new DataObject.Property("tabs", stFactory.getTabsByName()),
new DataObject.Property("currentTab", result));
datamodel.setPage(pageDO);
}else{
datamodel.getPage().setCurrentTab(result);
}
}catch(AssertionError ae){
// it's not normal to catch assert errors but we really want a 404 not 500 response error.
LOG.error("Caught Assertion: " + ae);
}
}
if(null == result){
LOG.error(ERR_MISSING_TAB + searchTab);
final String defaultSearchTab
= datamodel.getSite().getSiteConfiguration().getProperty(SiteConfiguration.DEFAULTTAB_KEY);
// first going to fallback to defaultSearchTab in preference to the pending 404 response error.
if(useKey || !defaultSearchTab.equals(searchTab)){
result = findSearchTab(datamodel, defaultSearchTab, dmFactory, genericCxt, false);
}
}
return result;
}
// Inner classes -------------------------------------------------
}