
com.jaeksoft.searchlib.renderer.Renderer Maven / Gradle / Ivy
Show all versions of opensearchserver Show documentation
/**
* License Agreement for OpenSearchServer
*
* Copyright (C) 2011-2015 Emmanuel Keller / Jaeksoft
*
* http://www.open-search-server.com
*
* This file is part of OpenSearchServer.
*
* OpenSearchServer is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenSearchServer 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenSearchServer.
* If not, see .
**/
package com.jaeksoft.searchlib.renderer;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathExpressionException;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import com.jaeksoft.searchlib.SearchLibException;
import com.jaeksoft.searchlib.facet.Facet;
import com.jaeksoft.searchlib.query.ParseException;
import com.jaeksoft.searchlib.renderer.RendererException.NoUserException;
import com.jaeksoft.searchlib.renderer.field.RendererField;
import com.jaeksoft.searchlib.renderer.filter.RendererFilter;
import com.jaeksoft.searchlib.renderer.log.RendererLogField;
import com.jaeksoft.searchlib.renderer.plugin.AuthPluginEnum;
import com.jaeksoft.searchlib.renderer.plugin.AuthPluginInterface;
import com.jaeksoft.searchlib.renderer.plugin.AuthPluginInterface.User;
import com.jaeksoft.searchlib.renderer.plugin.AuthRendererTokens;
import com.jaeksoft.searchlib.request.AbstractSearchRequest;
import com.jaeksoft.searchlib.util.IOUtils;
import com.jaeksoft.searchlib.util.ReadWriteLock;
import com.jaeksoft.searchlib.util.XPathParser;
import com.jaeksoft.searchlib.util.XmlWriter;
import com.jaeksoft.searchlib.web.RendererServlet;
public class Renderer implements Comparable, XmlWriter.Interface {
private final static String RENDERER_SESSION_USER = "rendererUser";
private final static String RENDERER_ITEM_ROOTNODE_NAME = "renderer";
private final static String RENDERER_ITEM_ROOT_ATTR_NAME = "name";
private final static String RENDERER_ITEM_ROOT_ATTR_REQUEST = "request";
private final static String RENDERER_ITEM_ROOT_ATTR_AUTOCOMPLETION_NAME = "autoCompletionName";
private final static String RENDERER_ITEM_ROOT_ATTR_SEARCHBUTTONLABEL = "searchButtonLabel";
private final static String RENDERER_ITEM_ROOT_ATTR_NORESULTFOUNDTEXT = "noResultFoundText";
private final static String RENDERER_ITEM_ROOT_ATTR_ONERESULTFOUNDTEXT = "oneResultFoundText";
private final static String RENDERER_ITEM_ROOT_ATTR_RESULTSFOUNDTEXT = "resultsFoundText";
private final static String RENDERER_ITEM_ROOT_ATTR_LOGOUTTEXT = "logoutText";
private final static String RENDERER_ITEM_ROOT_ATTR_CLEARFILTERSTEXT = "clearFiltersText";
private final static String RENDERER_ITEM_ROOT_ATTR_FILTERSTITLETEXT = "filtersTitleText";
private final static String RENDERER_ITEM_ROOT_ATTR_FACET_WIDTH = "facetWidth";
private final static String RENDERER_ITEM_ROOT_ATTR_DEFAULT_JSP = "defaultJsp";
private final static String RENDERER_ITEM_NODE_CSS = "css";
private final static String RENDERER_ITEM_NODE_NAME_FIELD = "field";
private final static String RENDERER_ITEM_NODE_NAME_FILTER = "filter";
private final static String RENDERER_ITEM_NODE_NAME_SORT = "sort";
private final static String RENDERER_ITEM_NODE_HEADER = "header";
private final static String RENDERER_ITEM_NODE_FOOTER = "footer";
private final static String RENDERER_ITEM_ROOT_ATTR_LOGENABLED = "logEnabled";
private final static String RENDERER_ITEM_NODE_LOG_FIELD = "logField";
private final static String RENDERER_ITEM_ROOT_ATTR_FIELD_CONTENTTYPE = "contentTypeField";
private final static String RENDERER_ITEM_ROOT_ATTR_FIELD_FILENAME = "filenameField";
private final static String RENDERER_ITEM_ROOT_ATTR_FIELD_HOCR = "ocrField";
private final static String RENDERER_ITEM_AUTH_NODE = "auth";
private final static String RENDERER_ITEM_AUTH_ATTR_SERVER_HOST = "serverHostname";
private final static String RENDERER_ITEM_AUTH_ATTR_USERNAME = "username";
private final static String RENDERER_ITEM_AUTH_ATTR_PASSWORD = "password";
private final static String RENDERER_ITEM_AUTH_ATTR_DOMAIN = "domain";
private final static String RENDERER_ITEM_AUTH_ATTR_INDEX = "authIndex";
private final static String RENDERER_ITEM_AUTH_ATTR_PLUGIN_CLASS = "authPluginClass";
private final ReadWriteLock rwl = new ReadWriteLock();
private String name;
private String requestName;
private String autocompletionName;
private String searchButtonLabel;
private String resultsFoundText;
private String oneResultFoundText;
private String noResultFoundText;
private String logoutText;
private String clearFiltersText;
private String filtersTitleText;
private String facetWidth;
private List filters;
private List fields;
private List logFields;
private List sorts;
private String footer;
private String header;
private String css;
private boolean logEnabled;
private String contentTypeField;
private String filenameField;
private String hocrField;
private String authUsername;
private String authPassword;
private String authDomain;
private String authIndex;
private String authServer;
private String authPluginClass;
private String authUserAllowField;
private String authGroupAllowField;
private String authUserDenyField;
private String authGroupDenyField;
private RendererJspEnum defaultJsp;
private final AuthRendererTokens tokens;
public Renderer() {
name = null;
requestName = null;
autocompletionName = null;
searchButtonLabel = "Search";
oneResultFoundText = "1 result found";
resultsFoundText = "results found";
noResultFoundText = "No results found";
logoutText = "Logout";
clearFiltersText = "Clear all";
filtersTitleText = "Active filters";
facetWidth = "200px";
logEnabled = false;
tokens = new AuthRendererTokens();
fields = new ArrayList();
filters = new ArrayList();
sorts = new ArrayList(0);
logFields = new ArrayList();
footer = null;
header = null;
css = null;
contentTypeField = null;
filenameField = null;
hocrField = null;
authUsername = null;
authPassword = null;
authDomain = null;
authIndex = null;
authServer = null;
authPluginClass = null;
authUserAllowField = "userAllow";
authGroupAllowField = "groupAllow";
authUserDenyField = "userDeny";
authGroupDenyField = "groupDeny";
defaultJsp = RendererJspEnum.SimpleHtml;
}
public Renderer(XPathParser xpp)
throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
this();
Node rootNode = xpp.getNode(RENDERER_ITEM_ROOTNODE_NAME);
if (rootNode == null)
return;
setName(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_NAME));
setRequestName(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_REQUEST));
setSearchButtonLabel(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_SEARCHBUTTONLABEL));
setNoResultFoundText(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_NORESULTFOUNDTEXT));
setOneResultFoundText(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_ONERESULTFOUNDTEXT));
setResultsFoundText(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_RESULTSFOUNDTEXT));
setLogoutText(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_LOGOUTTEXT));
setClearFiltersText(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_CLEARFILTERSTEXT));
setFiltersTitleText(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_FILTERSTITLETEXT));
setContentTypeField(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_FIELD_CONTENTTYPE));
setFilenameField(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_FIELD_FILENAME));
setHocrField(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_FIELD_HOCR));
setAutocompletionName(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_AUTOCOMPLETION_NAME));
setDefaultJsp(
RendererJspEnum.find(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_DEFAULT_JSP)));
Node authNode = xpp.getNode(rootNode, RENDERER_ITEM_AUTH_NODE);
if (authNode != null) {
setAuthUsername(XPathParser.getAttributeString(authNode, RENDERER_ITEM_AUTH_ATTR_USERNAME));
setAuthPassword(XPathParser.getAttributeString(authNode, RENDERER_ITEM_AUTH_ATTR_PASSWORD));
setAuthDomain(XPathParser.getAttributeString(authNode, RENDERER_ITEM_AUTH_ATTR_DOMAIN));
setAuthIndex(XPathParser.getAttributeString(authNode, RENDERER_ITEM_AUTH_ATTR_INDEX));
setAuthServer(XPathParser.getAttributeString(authNode, RENDERER_ITEM_AUTH_ATTR_SERVER_HOST));
setAuthPluginClass(XPathParser.getAttributeString(authNode, RENDERER_ITEM_AUTH_ATTR_PLUGIN_CLASS));
}
String p = XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_FACET_WIDTH);
if (p == null || p.length() == 0)
p = "200px";
setFacetWidth(p);
setHeader(xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_HEADER, true));
setFooter(xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_FOOTER, true));
setCss(xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_CSS, true));
NodeList nodeFilterList = xpp.getNodeList(rootNode, RENDERER_ITEM_NODE_NAME_FILTER);
for (int i = 0; i < nodeFilterList.getLength(); i++)
addFilter(new RendererFilter(xpp, nodeFilterList.item(i)));
NodeList nodeFieldList = xpp.getNodeList(rootNode, RENDERER_ITEM_NODE_NAME_FIELD);
for (int i = 0; i < nodeFieldList.getLength(); i++)
addField(new RendererField(xpp, nodeFieldList.item(i)));
NodeList nodeSortList = xpp.getNodeList(rootNode, RENDERER_ITEM_NODE_NAME_SORT);
for (int i = 0; i < nodeSortList.getLength(); i++)
addSort(new RendererSort(xpp, nodeSortList.item(i)));
NodeList nodeLogList = xpp.getNodeList(rootNode, RENDERER_ITEM_NODE_LOG_FIELD);
for (int j = 0; j < nodeLogList.getLength(); j++)
addLogField(new RendererLogField(xpp, nodeLogList.item(j)));
setLogEnabled(
Boolean.parseBoolean(XPathParser.getAttributeString(rootNode, RENDERER_ITEM_ROOT_ATTR_LOGENABLED)));
if (css == null || css.length() == 0)
css = getOldCss(xpp, rootNode);
}
public Renderer(Renderer source) {
this();
source.copyTo(this);
}
public void setDefaultCss() throws SearchLibException {
InputStream is = null;
try {
is = getClass().getResourceAsStream("/com/jaeksoft/searchlib/template/common/renderers/default.xml");
Renderer r = new Renderer(new XPathParser(is));
setCss(r.css);
} catch (XPathExpressionException e) {
throw new SearchLibException(e);
} catch (ParserConfigurationException e) {
throw new SearchLibException(e);
} catch (SAXException e) {
throw new SearchLibException(e);
} catch (IOException e) {
throw new SearchLibException(e);
} finally {
IOUtils.close(is);
}
}
private void writeCss(PrintWriter pw, String name, String content) {
if (content == null || content.length() == 0)
return;
pw.print(name);
pw.print(" { ");
pw.println(content);
pw.println(" }");
}
/**
* Return the old CSS stylesheet
*
* @return
* @throws XPathExpressionException
*/
private String getOldCss(XPathParser xpp, Node rootNode) throws XPathExpressionException {
final String RENDERER_ITEM_NODE_COMMON_STYLE = "style";
final String RENDERER_ITEM_NODE_INPUT_STYLE = "inputStyle";
final String RENDERER_ITEM_NODE_BUTTON_STYLE = "buttonStyle";
final String RENDERER_ITEM_NODE_AUTOCOMPLETE_STYLE = "autocompleteStyle";
final String RENDERER_ITEM_NODE_AUTOCOMPLETELIST_STYLE = "autocompleteListStyle";
final String RENDERER_ITEM_NODE_AUTOCOMPLETELINK_STYLE = "autocompleteLinkStyle";
final String RENDERER_ITEM_NODE_AUTOCOMPLETELINKHOVER_STYLE = "autocompleteLinkHoverStyle";
final String RENDERER_ITEM_NODE_DOCUMENTFOUND_STYLE = "documentFoundStyle";
final String RENDERER_ITEM_NODE_PAGING_STYLE = "ossPagingStyle";
final String RENDERER_ITEM_NODE_CURRENTPAGE_STYLE = "ossCurrentPageStyle";
final String RENDERER_ITEM_NODE_ALINK = "alink";
final String RENDERER_ITEM_NODE_AVISITED = "avisited";
final String RENDERER_ITEM_NODE_AACTIVE = "aactive";
final String RENDERER_ITEM_NODE_AHOVER = "ahover";
final String RENDERER_ITEM_NODE_FACET_STYLE = "facetStyle";
final String RENDERER_ITEM_NODE_RESULT_STYLE = "resultStyle";
String commonStyle = xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_COMMON_STYLE, true);
String inputStyle = xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_INPUT_STYLE, true);
String buttonStyle = xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_BUTTON_STYLE, true);
String documentFoundStyle = xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_DOCUMENTFOUND_STYLE, true);
String pagingStyle = xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_PAGING_STYLE, true);
String currentPageStyle = xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_CURRENTPAGE_STYLE, true);
String autocompleteStyle = xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_AUTOCOMPLETE_STYLE, true);
String autocompleteListStyle =
xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_AUTOCOMPLETELIST_STYLE, true);
String autocompleteLinkStyle =
xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_AUTOCOMPLETELINK_STYLE, true);
String autocompleteLinkHoverStyle =
xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_AUTOCOMPLETELINKHOVER_STYLE, true);
String aactive = xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_AACTIVE, true);
String ahover = xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_AHOVER, true);
String alink = xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_ALINK, true);
String avisited = xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_AVISITED, true);
String facetStyle = xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_FACET_STYLE, true);
String resultStyle = xpp.getSubNodeTextIfAny(rootNode, RENDERER_ITEM_NODE_RESULT_STYLE, true);
rwl.w.lock();
try {
StringWriter sw = null;
PrintWriter pw = null;
try {
sw = new StringWriter();
pw = new PrintWriter(sw);
writeCss(pw, ".osscmnrdr", commonStyle);
writeCss(pw, ".ossinputrdr", inputStyle);
writeCss(pw, ".ossbuttonrdr", buttonStyle);
writeCss(pw, "a:link", alink);
writeCss(pw, "a:hover", ahover);
writeCss(pw, "a:visited", avisited);
writeCss(pw, "a:active", aactive);
writeCss(pw, "#ossautocomplete", autocompleteStyle);
writeCss(pw, "#ossautocompletelist", autocompleteListStyle);
writeCss(pw, ".ossautocomplete_link", autocompleteLinkStyle);
writeCss(pw, ".ossautocomplete_link_over", autocompleteLinkHoverStyle);
writeCss(pw, ".ossnumfound", documentFoundStyle);
writeCss(pw, ".oss-paging", pagingStyle);
writeCss(pw, ".oss-currentpage", currentPageStyle);
writeCss(pw, ".oss-facet", facetStyle);
writeCss(pw, ".oss-result", resultStyle);
int i = 0;
for (RendererField rendererField : fields) {
i++;
writeCss(pw, ".ossfieldrdr" + i, rendererField.getOldStyle());
}
return sw.toString();
} finally {
if (pw != null)
IOUtils.closeQuietly(pw);
if (sw != null)
IOUtils.closeQuietly(sw);
}
} finally {
rwl.w.unlock();
}
}
public void copyTo(Renderer target) {
rwl.r.lock();
try {
target.rwl.w.lock();
try {
target.name = name;
target.requestName = requestName;
target.autocompletionName = autocompletionName;
target.searchButtonLabel = searchButtonLabel;
target.noResultFoundText = noResultFoundText;
target.oneResultFoundText = oneResultFoundText;
target.resultsFoundText = resultsFoundText;
target.logoutText = logoutText;
target.clearFiltersText = clearFiltersText;
target.filtersTitleText = filtersTitleText;
target.facetWidth = facetWidth;
target.filters.clear();
target.fields.clear();
target.sorts.clear();
target.logFields.clear();
target.header = header;
target.footer = footer;
target.defaultJsp = defaultJsp;
target.css = css;
target.logEnabled = logEnabled;
target.contentTypeField = contentTypeField;
target.filenameField = filenameField;
target.hocrField = hocrField;
target.authUsername = authUsername;
target.authPassword = authPassword;
target.authDomain = authDomain;
target.authIndex = authIndex;
target.authServer = authServer;
target.authPluginClass = authPluginClass;
target.authUserAllowField = authUserAllowField;
target.authUserDenyField = authUserDenyField;
target.authGroupAllowField = authGroupAllowField;
target.authGroupDenyField = authGroupDenyField;
for (RendererFilter filter : filters)
target.addFilter(new RendererFilter(filter));
for (RendererField field : fields)
target.addField(new RendererField(field));
for (RendererSort sort : sorts)
target.addSort(new RendererSort(sort));
for (RendererLogField logField : logFields)
target.addLogField(new RendererLogField(logField));
} finally {
target.rwl.w.unlock();
}
} finally {
rwl.r.unlock();
}
}
public void addFilter(RendererFilter filter) {
rwl.w.lock();
try {
filters.add(filter);
} finally {
rwl.w.unlock();
}
}
public void removeFilter(RendererFilter filter) {
rwl.w.lock();
try {
filters.remove(filter);
} finally {
rwl.w.unlock();
}
}
public void addField(RendererField field) {
rwl.w.lock();
try {
fields.add(field);
} finally {
rwl.w.unlock();
}
}
public void removeField(RendererField field) {
rwl.w.lock();
try {
fields.remove(field);
} finally {
rwl.w.unlock();
}
}
public void addSort(RendererSort sort) {
rwl.w.lock();
try {
sorts.add(sort);
} finally {
rwl.w.unlock();
}
}
public void removeSort(RendererSort sort) {
rwl.w.lock();
try {
sorts.remove(sort);
} finally {
rwl.w.unlock();
}
}
/**
* Move filter up
*
* @param filter
*/
public void filterUp(RendererFilter filter) {
rwl.w.lock();
try {
int i = filters.indexOf(filter);
if (i == -1 || i == 0)
return;
filters.remove(i);
filters.add(i - 1, filter);
} finally {
rwl.w.unlock();
}
}
/**
* Move filter down
*
* @param filter
*/
public void filterDown(RendererFilter filter) {
rwl.w.lock();
try {
int i = filters.indexOf(filter);
if (i == -1 || i == filters.size() - 1)
return;
filters.remove(i);
filters.add(i + 1, filter);
} finally {
rwl.w.unlock();
}
}
/**
* Move field up
*
* @param field
*/
public void fieldUp(RendererField field) {
rwl.w.lock();
try {
int i = fields.indexOf(field);
if (i == -1 || i == 0)
return;
fields.remove(i);
fields.add(i - 1, field);
} finally {
rwl.w.unlock();
}
}
/**
* Move field down
*
* @param field
*/
public void fieldDown(RendererField field) {
rwl.w.lock();
try {
int i = fields.indexOf(field);
if (i == -1 || i == fields.size() - 1)
return;
fields.remove(i);
fields.add(i + 1, field);
} finally {
rwl.w.unlock();
}
}
public List getFields() {
rwl.r.lock();
try {
return fields;
} finally {
rwl.r.unlock();
}
}
public boolean isFieldWithJoin() {
rwl.r.lock();
try {
if (fields == null)
return false;
for (RendererField field : fields) {
Integer fieldSource = field.getFieldSource();
if (fieldSource != null && fieldSource > 0)
return true;
}
return false;
} finally {
rwl.r.unlock();
}
}
public List getFilters() {
rwl.r.lock();
try {
return filters;
} finally {
rwl.r.unlock();
}
}
public boolean isFilterListReplacement(Facet facet) {
if (facet == null)
return false;
for (RendererFilter filter : filters)
if (filter.isReplacement(facet.getFacetField().getName()))
return true;
return false;
}
/**
* Move sort up
*
* @param sort
*/
public void sortUp(RendererSort sort) {
rwl.w.lock();
try {
int i = sorts.indexOf(sort);
if (i == -1 || i == 0)
return;
sorts.remove(i);
sorts.add(i - 1, sort);
} finally {
rwl.w.unlock();
}
}
/**
* Move sort down
*
* @param sort
*/
public void sortDown(RendererSort sort) {
rwl.w.lock();
try {
int i = sorts.indexOf(sort);
if (i == -1 || i == sorts.size() - 1)
return;
sorts.remove(i);
sorts.add(i + 1, sort);
} finally {
rwl.w.unlock();
}
}
public List getSorts() {
rwl.r.lock();
try {
return sorts;
} finally {
rwl.r.unlock();
}
}
/**
* @param name the name to set
*/
public void setName(String name) {
rwl.w.lock();
try {
this.name = name;
} finally {
rwl.w.unlock();
}
}
/**
* @return the name
*/
public String getName() {
rwl.r.lock();
try {
return name;
} finally {
rwl.r.unlock();
}
}
/**
* @param name the requestName to set
*/
public void setRequestName(String requestName) {
rwl.w.lock();
try {
this.requestName = requestName;
} finally {
rwl.w.unlock();
}
}
/**
* @return the requestName
*/
public String getRequestName() {
rwl.r.lock();
try {
return requestName;
} finally {
rwl.r.unlock();
}
}
/**
* @param searchButtonLabel the searchButtonLabel to set
*/
public void setSearchButtonLabel(String searchButtonLabel) {
rwl.w.lock();
try {
this.searchButtonLabel = searchButtonLabel;
} finally {
rwl.w.unlock();
}
}
/**
* @return the searchButtonLabel
*/
public String getSearchButtonLabel() {
rwl.r.lock();
try {
return searchButtonLabel;
} finally {
rwl.r.unlock();
}
}
@Override
public final int compareTo(Renderer o) {
rwl.r.lock();
try {
return name.compareTo(o.name);
} finally {
rwl.r.unlock();
}
}
@Override
public void writeXml(XmlWriter xmlWriter) throws SAXException {
rwl.r.lock();
try {
xmlWriter.startElement(RENDERER_ITEM_ROOTNODE_NAME, RENDERER_ITEM_ROOT_ATTR_NAME, name,
RENDERER_ITEM_ROOT_ATTR_REQUEST, requestName, RENDERER_ITEM_ROOT_ATTR_SEARCHBUTTONLABEL,
searchButtonLabel, RENDERER_ITEM_ROOT_ATTR_NORESULTFOUNDTEXT, noResultFoundText,
RENDERER_ITEM_ROOT_ATTR_ONERESULTFOUNDTEXT, oneResultFoundText,
RENDERER_ITEM_ROOT_ATTR_RESULTSFOUNDTEXT, resultsFoundText, RENDERER_ITEM_ROOT_ATTR_LOGOUTTEXT,
logoutText, RENDERER_ITEM_ROOT_ATTR_CLEARFILTERSTEXT, clearFiltersText,
RENDERER_ITEM_ROOT_ATTR_FILTERSTITLETEXT, filtersTitleText, RENDERER_ITEM_ROOT_ATTR_FACET_WIDTH,
facetWidth, RENDERER_ITEM_ROOT_ATTR_LOGENABLED, Boolean.toString(logEnabled),
RENDERER_ITEM_ROOT_ATTR_FIELD_CONTENTTYPE, contentTypeField, RENDERER_ITEM_ROOT_ATTR_FIELD_FILENAME,
filenameField, RENDERER_ITEM_ROOT_ATTR_FIELD_HOCR, hocrField,
RENDERER_ITEM_ROOT_ATTR_AUTOCOMPLETION_NAME, autocompletionName,
RENDERER_ITEM_ROOT_ATTR_DEFAULT_JSP, defaultJsp == null ? null : defaultJsp.name());
xmlWriter.writeSubTextNodeIfAny(RENDERER_ITEM_NODE_HEADER, header);
xmlWriter.writeSubTextNodeIfAny(RENDERER_ITEM_NODE_FOOTER, footer);
xmlWriter.writeSubTextNodeIfAny(RENDERER_ITEM_NODE_CSS, css);
for (RendererField field : fields)
field.writeXml(xmlWriter, RENDERER_ITEM_NODE_NAME_FIELD);
for (RendererFilter filter : filters)
filter.writeXml(xmlWriter, RENDERER_ITEM_NODE_NAME_FILTER);
for (RendererSort sort : sorts)
sort.writeXml(xmlWriter, RENDERER_ITEM_NODE_NAME_SORT);
for (RendererLogField logReportField : logFields)
logReportField.writeXml(xmlWriter, RENDERER_ITEM_NODE_LOG_FIELD);
xmlWriter.startElement(RENDERER_ITEM_AUTH_NODE, RENDERER_ITEM_AUTH_ATTR_USERNAME, authUsername,
RENDERER_ITEM_AUTH_ATTR_PASSWORD, authPassword, RENDERER_ITEM_AUTH_ATTR_DOMAIN, authDomain,
RENDERER_ITEM_AUTH_ATTR_INDEX, authIndex, RENDERER_ITEM_AUTH_ATTR_SERVER_HOST, authServer,
RENDERER_ITEM_AUTH_ATTR_PLUGIN_CLASS, authPluginClass);
xmlWriter.endElement();
xmlWriter.endElement();
} finally {
rwl.r.unlock();
}
}
public AuthRendererTokens getTokens() {
return tokens;
}
public String getApiUrl() throws UnsupportedEncodingException {
rwl.r.lock();
try {
return RendererServlet.doRenderer(name, null);
} finally {
rwl.r.unlock();
}
}
public String getIFrameHtmlCode(String width, String height) throws UnsupportedEncodingException {
rwl.r.lock();
try {
StringBuilder sb = new StringBuilder();
sb.append("");
return sb.toString();
} finally {
rwl.r.unlock();
}
}
public String getResultsFoundText() {
rwl.r.lock();
try {
return resultsFoundText;
} finally {
rwl.r.unlock();
}
}
public void setResultsFoundText(String resultsFoundText) {
rwl.w.lock();
try {
this.resultsFoundText = resultsFoundText;
} finally {
rwl.w.unlock();
}
}
public String getOneResultFoundText() {
rwl.r.lock();
try {
return oneResultFoundText;
} finally {
rwl.r.unlock();
}
}
public void setOneResultFoundText(String oneResultFoundText) {
rwl.w.lock();
try {
this.oneResultFoundText = oneResultFoundText;
} finally {
rwl.w.unlock();
}
}
public String getNoResultFoundText() {
rwl.r.lock();
try {
return noResultFoundText;
} finally {
rwl.r.unlock();
}
}
/**
* @param noResultFoundText
*/
public void setNoResultFoundText(String noResultFoundText) {
rwl.w.lock();
try {
this.noResultFoundText = noResultFoundText;
} finally {
rwl.w.unlock();
}
}
public String getLogoutText() {
rwl.r.lock();
try {
return logoutText;
} finally {
rwl.r.unlock();
}
}
/**
* @param logoutText
*/
public void setLogoutText(String logoutText) {
rwl.w.lock();
try {
this.logoutText = logoutText;
} finally {
rwl.w.unlock();
}
}
final public String getResultFoundText(int resultsCount) {
rwl.r.lock();
try {
switch (resultsCount) {
case 0:
return noResultFoundText;
case 1:
return oneResultFoundText;
default:
StringBuilder sb = new StringBuilder();
sb.append(resultsCount);
sb.append(' ');
sb.append(resultsFoundText);
return sb.toString();
}
} finally {
rwl.r.unlock();
}
}
/**
* @return the footer
*/
public String getFooter() {
rwl.r.lock();
try {
return footer == null ? "" : footer;
} finally {
rwl.r.unlock();
}
}
/**
* @param footer the footer to set
*/
public void setFooter(String footer) {
rwl.w.lock();
try {
this.footer = footer;
} finally {
rwl.w.unlock();
}
}
/**
* @return the header
*/
public String getHeader() {
rwl.r.lock();
try {
return header == null ? "" : header;
} finally {
rwl.r.unlock();
}
}
/**
* @param header the header to set
*/
public void setHeader(String header) {
rwl.w.lock();
try {
this.header = header;
} finally {
rwl.w.unlock();
}
}
/**
* @return the facetWidth
*/
public String getFacetWidth() {
rwl.r.lock();
try {
return facetWidth;
} finally {
rwl.r.unlock();
}
}
/**
* @param facetWidth the facetWidth to set
*/
public void setFacetWidth(String facetWidth) {
rwl.w.lock();
try {
this.facetWidth = facetWidth;
} finally {
rwl.w.unlock();
}
}
/**
* @return the css
*/
public String getCss() {
rwl.r.lock();
try {
return css;
} finally {
rwl.r.unlock();
}
}
/**
* @param css the css to set
*/
public void setCss(String css) {
rwl.w.lock();
try {
this.css = css;
} finally {
rwl.w.unlock();
}
}
public boolean isLogEnabled() {
rwl.r.lock();
try {
return logEnabled;
} finally {
rwl.r.unlock();
}
}
public void setLogEnabled(boolean logReportEnabled) {
rwl.w.lock();
try {
this.logEnabled = logReportEnabled;
} finally {
rwl.w.unlock();
}
}
public void addLogField(RendererLogField logField) {
rwl.w.lock();
try {
logFields.add(logField);
} finally {
rwl.w.unlock();
}
}
public void removeLogField(RendererLogField logField) {
rwl.w.lock();
try {
logFields.remove(logField);
} finally {
rwl.w.unlock();
}
}
public List getLogFields() {
rwl.r.lock();
try {
return logFields;
} finally {
rwl.r.unlock();
}
}
/**
* @return the contentTypeField
*/
public String getContentTypeField() {
return contentTypeField;
}
/**
* @param contentTypeField the contentTypeField to set
*/
public void setContentTypeField(String contentTypeField) {
if (contentTypeField != null)
if (contentTypeField.length() == 0)
contentTypeField = null;
this.contentTypeField = contentTypeField;
}
/**
* @return the filenameField
*/
public String getFilenameField() {
return filenameField;
}
/**
* @param filenameField the filenameField to set
*/
public void setFilenameField(String filenameField) {
if (filenameField != null)
if (filenameField.length() == 0)
filenameField = null;
this.filenameField = filenameField;
}
/**
* @return the hocrField
*/
public String getHocrField() {
return hocrField;
}
/**
* @param hocrField the hocrField to set
*/
public void setHocrField(String hocrField) {
if (hocrField != null)
if (hocrField.length() == 0)
hocrField = null;
this.hocrField = hocrField;
}
/**
* @return the authUsername
*/
public String getAuthUsername() {
return authUsername;
}
/**
* @param authUsername the authUsername to set
*/
public void setAuthUsername(String authUsername) {
this.authUsername = authUsername;
}
/**
* @return the authPassword
*/
public String getAuthPassword() {
return authPassword;
}
/**
* @param authPassword the authPassword to set
*/
public void setAuthPassword(String authPassword) {
this.authPassword = authPassword;
}
/**
* @return the authDomain
*/
public String getAuthDomain() {
return authDomain;
}
/**
* @param authDomain the authDomain to set
*/
public void setAuthDomain(String authDomain) {
this.authDomain = authDomain;
}
/**
* @return the authIndex
*/
public String getAuthIndex() {
return authIndex;
}
/**
* @param authIndex the authIndex to set
*/
public void setAuthIndex(String authIndex) {
this.authIndex = authIndex;
}
/**
* @return the authServer
*/
public String getAuthServer() {
return authServer;
}
/**
* @param authServer the authServer to set
*/
public void setAuthServer(String authServer) {
this.authServer = authServer;
}
/**
* @return the authUserAllowField
*/
public String getAuthUserAllowField() {
return authUserAllowField;
}
/**
* @param authUserAllowField the authUserAllowField to set
*/
public void setAuthUserAllowField(String authUserAllowField) {
this.authUserAllowField = authUserAllowField;
}
/**
* @return the authGroupAllowField
*/
public String getAuthGroupAllowField() {
return authGroupAllowField;
}
/**
* @param authGroupAllowField the authGroupAllowField to set
*/
public void setAuthGroupAllowField(String authGroupAllowField) {
this.authGroupAllowField = authGroupAllowField;
}
/**
* @return the authUserDenyField
*/
public String getAuthUserDenyField() {
return authUserDenyField;
}
/**
* @param authUserDenyField the authUserDenyField to set
*/
public void setAuthUserDenyField(String authUserDenyField) {
this.authUserDenyField = authUserDenyField;
}
/**
* @return the authGroupDenyField
*/
public String getAuthGroupDenyField() {
return authGroupDenyField;
}
/**
* @param authGroupDenyField the authGroupDenyField to set
*/
public void setAuthGroupDenyField(String authGroupDenyField) {
this.authGroupDenyField = authGroupDenyField;
}
public void setAuthType(String authTypeName) {
AuthPluginEnum authPlugin = AuthPluginEnum.find(authTypeName);
authPluginClass = authPlugin == null ? authTypeName : authPlugin.getClassName();
}
public String getAuthType() {
AuthPluginEnum authPlugin = AuthPluginEnum.find(authPluginClass);
return authPlugin == null ? authPluginClass : authPlugin.label;
}
public boolean isAuthentication() {
AuthPluginEnum authPlugin = AuthPluginEnum.find(authPluginClass);
return authPlugin != null && authPlugin != AuthPluginEnum.NO_AUTH;
}
public boolean isLogout() {
AuthPluginEnum authPlugin = AuthPluginEnum.find(authPluginClass);
return authPlugin != null && authPlugin.isLogout();
}
private AuthPluginInterface getNewAuthPluginInterface() throws SearchLibException {
if (authPluginClass == null || authPluginClass.length() == 0)
return null;
try {
return (AuthPluginInterface) Class.forName(authPluginClass).newInstance();
} catch (InstantiationException e) {
throw new SearchLibException("Unable to instance the authentication plugin", e);
} catch (IllegalAccessException e) {
throw new SearchLibException("Unable to instance the authentication plugin", e);
} catch (ClassNotFoundException e) {
throw new SearchLibException("Unable to instance the authentication plugin", e);
}
}
public AuthPluginInterface.User configureAuthRequest(AbstractSearchRequest searchRequest,
HttpServletRequest servletRequest) throws ParseException, IOException, SearchLibException {
AuthPluginInterface authPlugin = getNewAuthPluginInterface();
if (authPlugin == null)
return null;
HttpSession session = servletRequest.getSession();
if (servletRequest.getParameter("logout") != null) {
session.removeAttribute(RENDERER_SESSION_USER);
throw new NoUserException("Logout");
}
AuthPluginInterface.User user = (User) session.getAttribute(RENDERER_SESSION_USER);
if (user == null)
user = authPlugin.getUser(this, servletRequest);
if (user == null)
throw new NoUserException("No user found");
session.setAttribute(RENDERER_SESSION_USER, user);
searchRequest.setUsers(user.usernames);
searchRequest.setGroups(user.groups);
return user;
}
public AuthPluginInterface.User testAuthRequest(String login, String password)
throws IOException, SearchLibException {
AuthPluginInterface authPlugin = getNewAuthPluginInterface();
if (authPlugin == null)
return null;
return authPlugin.getUser(this, login, password);
}
/**
* @return the authPluginClass
*/
public String getAuthPluginClass() {
return authPluginClass;
}
/**
* @param authPluginClass the authPluginClass to set
*/
public void setAuthPluginClass(String authPluginClass) {
this.authPluginClass = authPluginClass;
}
/**
* @return the autocompletionName
*/
public String getAutocompletionName() {
return autocompletionName;
}
/**
* @param autocompletionName the autocompletionName to set
*/
public void setAutocompletionName(String autocompletionName) {
this.autocompletionName = autocompletionName;
}
/**
* @return the defaultJsp
*/
public RendererJspEnum getDefaultJsp() {
return defaultJsp;
}
/**
* @param defaultJsp the defaultJsp to set
*/
public void setDefaultJsp(RendererJspEnum defaultJsp) {
this.defaultJsp = defaultJsp == null ? RendererJspEnum.SimpleHtml : defaultJsp;
}
/**
* @return the clearFiltersText
*/
public String getClearFiltersText() {
return clearFiltersText;
}
/**
* @param clearFiltersText the clearFiltersText to set
*/
public void setClearFiltersText(String clearFiltersText) {
this.clearFiltersText = clearFiltersText;
}
/**
* @return the filtersTitleText
*/
public String getFiltersTitleText() {
return filtersTitleText;
}
/**
* @param filtersTitleText the filtersTitleText to set
*/
public void setFiltersTitleText(String filtersTitleText) {
this.filtersTitleText = filtersTitleText;
}
}