com.jaeksoft.searchlib.request.AbstractRequest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of opensearchserver Show documentation
Show all versions of opensearchserver Show documentation
OpenSearchServer is a powerful, enterprise-class, search engine program. Using the web user interface, the crawlers (web, file, database, ...) and the REST/RESTFul API you will be able to integrate quickly and easily advanced full-text search capabilities in your application. OpenSearchServer runs on Windows and Linux/Unix/BSD.
The newest version!
/**
* License Agreement for OpenSearchServer
*
* Copyright (C) 2012-2013 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.request;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import javax.xml.xpath.XPathExpressionException;
import org.apache.commons.collections.CollectionUtils;
import org.apache.lucene.search.Query;
import org.w3c.dom.DOMException;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import com.jaeksoft.searchlib.SearchLibException;
import com.jaeksoft.searchlib.config.Config;
import com.jaeksoft.searchlib.function.expression.SyntaxError;
import com.jaeksoft.searchlib.index.ReaderAbstract;
import com.jaeksoft.searchlib.index.ReaderInterface;
import com.jaeksoft.searchlib.query.ParseException;
import com.jaeksoft.searchlib.result.AbstractResult;
import com.jaeksoft.searchlib.util.ReadWriteLock;
import com.jaeksoft.searchlib.util.StringUtils;
import com.jaeksoft.searchlib.util.XPathParser;
import com.jaeksoft.searchlib.util.XmlWriter;
import com.jaeksoft.searchlib.web.ServletTransaction;
public abstract class AbstractRequest {
public final static String XML_NODE_REQUEST = "request";
public final static String XML_ATTR_NAME = "name";
public final static String XML_ATTR_TYPE = "type";
protected final ReadWriteLock rwl = new ReadWriteLock();
public final RequestTypeEnum requestType;
private String requestName;
protected Config config;
protected ReaderAbstract reader;
private boolean withLogReport;
private List customLogs;
private int timerMinTime;
private int timerMaxDepth;
private Set users;
private Set groups;
protected AbstractRequest(Config config, RequestTypeEnum requestType) {
this.config = config;
this.requestType = requestType;
this.requestName = null;
setDefaultValues();
}
protected void fromXmlConfigNoLock(Config config, XPathParser xpp,
Node requestNode) throws XPathExpressionException, DOMException,
ParseException, InstantiationException, IllegalAccessException,
ClassNotFoundException {
this.config = config;
this.requestName = XPathParser.getAttributeString(requestNode,
XML_ATTR_NAME);
}
/**
* Build a new request by reading the XML config file
*
* @param config
* @param xpp
* @param requestNode
* @throws XPathExpressionException
* @throws DOMException
* @throws ParseException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws ClassNotFoundException
*/
public final void fromXmlConfig(Config config, XPathParser xpp,
Node requestNode) throws XPathExpressionException, DOMException,
ParseException, InstantiationException, IllegalAccessException,
ClassNotFoundException {
rwl.w.lock();
try {
fromXmlConfigNoLock(config, xpp, requestNode);
} finally {
rwl.w.unlock();
}
}
public void copyFrom(AbstractRequest request) {
this.config = request.config;
this.requestName = request.requestName;
this.withLogReport = request.withLogReport;
this.customLogs = null;
if (request.customLogs != null)
this.customLogs = new ArrayList(request.customLogs);
this.timerMinTime = request.timerMinTime;
this.timerMaxDepth = request.timerMaxDepth;
this.users = request.users == null ? null : new TreeSet(
request.users);
this.groups = request.groups == null ? null : new TreeSet(
request.groups);
}
public AbstractRequest duplicate() throws InstantiationException,
IllegalAccessException {
AbstractRequest newRequest = getClass().newInstance();
newRequest.copyFrom(this);
return newRequest;
}
protected void setDefaultValues() {
withLogReport = false;
customLogs = null;
timerMinTime = 10;
timerMaxDepth = 3;
users = null;
groups = null;
}
public final RequestTypeEnum getType() {
return requestType;
}
public void init(Config config) {
rwl.w.lock();
try {
this.config = config;
} finally {
rwl.w.unlock();
}
}
public Config getConfig() {
rwl.r.lock();
try {
return this.config;
} finally {
rwl.r.unlock();
}
}
public String getRequestName() {
rwl.r.lock();
try {
return this.requestName;
} finally {
rwl.r.unlock();
}
}
public abstract Query getQuery() throws ParseException, SyntaxError,
SearchLibException, IOException;
public void setRequestName(String name) {
rwl.w.lock();
try {
this.requestName = name;
} finally {
rwl.w.unlock();
}
}
public void setLogReport(boolean withLogReport) {
rwl.w.lock();
try {
this.withLogReport = withLogReport;
} finally {
rwl.w.unlock();
}
}
public boolean isLogReport() {
rwl.r.lock();
try {
return withLogReport;
} finally {
rwl.r.unlock();
}
}
public void addCustomLog(String p) {
rwl.w.lock();
try {
if (customLogs == null)
customLogs = new ArrayList(0);
customLogs.add(p);
} finally {
rwl.w.unlock();
}
}
public List getCustomLogs() {
rwl.r.lock();
try {
return customLogs;
} finally {
rwl.r.unlock();
}
}
public String getNameType() {
StringBuilder sb = new StringBuilder();
if (requestType != null)
sb.append(requestType.getLabel());
sb.append(": ");
sb.append(requestName);
return sb.toString();
}
public abstract String getInfo();
protected abstract void resetNoLock();
public final void reset() {
rwl.w.lock();
try {
resetNoLock();
} finally {
rwl.w.unlock();
}
}
public abstract void writeXmlConfig(XmlWriter xmlWriter)
throws SAXException;
protected void setFromServletNoLock(final ServletTransaction transaction,
final String prefix) throws SyntaxError, SearchLibException {
String[] usrs = transaction.getParameterValues("user");
if (usrs != null) {
users = new TreeSet();
for (String user : users)
users.add(user);
}
String[] grps = transaction.getParameterValues("group");
if (grps != null) {
groups = new TreeSet();
for (String grp : grps)
groups.add(grp);
}
}
public final void setFromServlet(final ServletTransaction transaction,
final String prefix) throws SyntaxError, SearchLibException {
rwl.w.lock();
try {
setFromServletNoLock(transaction, prefix);
} finally {
rwl.w.unlock();
}
}
public abstract AbstractResult> execute(ReaderInterface reader)
throws SearchLibException;
/**
* @param timerMinTime
* the timerMinTime to set
*/
public void setTimerMinTime(int timerMinTime) {
this.timerMinTime = timerMinTime;
}
/**
* @return the timerMi,Time
*/
public int getTimerMinTime() {
return timerMinTime;
}
/**
* @return the timerMaxDepth
*/
public int getTimerMaxDepth() {
return timerMaxDepth;
}
/**
* @param timerMaxDepth
* the timerMaxDepth to set
*/
public void setTimerMaxDepth(int timerMaxDepth) {
this.timerMaxDepth = timerMaxDepth;
}
public Collection getUsers() {
rwl.r.lock();
try {
return this.users;
} finally {
rwl.r.unlock();
}
}
public Collection getGroups() {
rwl.r.lock();
try {
return this.groups;
} finally {
rwl.r.unlock();
}
}
public void setUser(String user) {
rwl.w.lock();
try {
if (StringUtils.isEmpty(user)) {
this.users = null;
return;
}
if (this.users == null)
this.users = new TreeSet();
this.users.add(user);
} finally {
rwl.w.unlock();
}
}
public void setUsers(Collection users) {
rwl.w.lock();
try {
this.users = CollectionUtils.isEmpty(users) ? null
: new TreeSet(users);
} finally {
rwl.w.unlock();
}
}
public void setGroups(Collection groups) {
rwl.w.lock();
try {
this.groups = CollectionUtils.isEmpty(groups) ? null
: new TreeSet(groups);
} finally {
rwl.w.unlock();
}
}
}