
com.jaeksoft.searchlib.web.ServletTransaction 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) 2008-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.web;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.transform.TransformerConfigurationException;
import org.apache.commons.lang3.StringUtils;
import org.xml.sax.SAXException;
import org.zkoss.zk.ui.WebApp;
import org.zkoss.zk.ui.http.WebManager;
import com.jaeksoft.searchlib.Client;
import com.jaeksoft.searchlib.ClientCatalog;
import com.jaeksoft.searchlib.SearchLibException;
import com.jaeksoft.searchlib.user.User;
import com.jaeksoft.searchlib.util.IOUtils;
import com.jaeksoft.searchlib.util.XmlWriter;
import com.jaeksoft.searchlib.web.controller.ScopeAttribute;
public class ServletTransaction {
public enum Method {
PUT, POST, GET, HEAD;
}
private User loggedUser;
private Client client;
private String indexName;
private AbstractServlet servlet;
private HttpServletResponse response;
private HttpServletRequest request;
private PrintWriter writer;
private BufferedReader reader;
private ServletOutputStream out;
private ServletInputStream in;
private Method method;
private XmlWriter xmlWriter;
private Map xmlResponse;
public ServletTransaction(AbstractServlet servlet,
HttpServletRequest request, Method method,
HttpServletResponse response) {
this.method = method;
this.servlet = servlet;
this.response = response;
this.request = request;
indexName = null;
xmlResponse = null;
writer = null;
reader = null;
xmlWriter = null;
out = null;
in = null;
}
public Method getMethod() {
return method;
}
public User getLoggedUser() throws SearchLibException, InterruptedException {
if (loggedUser != null)
return loggedUser;
if (ClientCatalog.getUserList().isEmpty())
return null;
String login = request.getParameter("login");
String key = request.getParameter("key");
if (!StringUtils.isEmpty(login) || !StringUtils.isEmpty(key)) {
loggedUser = ClientCatalog.authenticateKey(login, key);
if (loggedUser != null)
return loggedUser;
}
loggedUser = (User) request.getSession().getAttribute(
ScopeAttribute.LOGGED_USER.name());
if (loggedUser != null)
return loggedUser;
Thread.sleep(500);
throw new SearchLibException("Bad credential");
}
public String getIndexName() {
if (indexName != null)
return indexName;
indexName = request.getParameter("use");
if (indexName == null)
indexName = request.getParameter("index");
return indexName;
}
public Client getClient() throws SearchLibException, NamingException {
if (client != null)
return client;
client = ClientCatalog.getClient(getIndexName());
return client;
}
public Client getClientApi(String use) throws SearchLibException,
NamingException {
if (client != null)
return client;
client = ClientCatalog.getClient(use);
return client;
}
public void addXmlResponse(String key, String value) {
if (xmlResponse == null)
xmlResponse = new LinkedHashMap();
xmlResponse.put(key, value);
}
public BufferedReader getReader() throws IOException {
if (in != null)
throw new IOException("InputStream delivered before");
if (reader != null)
return reader;
reader = request.getReader();
return reader;
}
public ServletInputStream getInputStream() throws IOException {
if (reader != null)
throw new IOException("Reader delivered before");
if (in != null)
return in;
in = request.getInputStream();
return in;
}
public PrintWriter getWriter(String encoding) throws IOException {
if (out != null)
throw new IOException("OutputStream delivered before");
if (writer != null)
return writer;
response.setCharacterEncoding(encoding);
writer = response.getWriter();
return writer;
}
public XmlWriter getXmlWriter(String encoding) throws SearchLibException {
if (xmlWriter != null)
return xmlWriter;
try {
xmlWriter = new XmlWriter(getWriter(encoding), encoding);
} catch (TransformerConfigurationException e) {
throw new SearchLibException(e);
} catch (SAXException e) {
throw new SearchLibException(e);
} catch (IOException e) {
throw new SearchLibException(e);
}
return xmlWriter;
}
public ServletOutputStream getOutputStream() throws IOException {
if (writer != null)
throw new IOException("Writer delivered before");
if (out != null)
return out;
out = response.getOutputStream();
return out;
}
public void forward(String path) throws ServletException {
RequestDispatcher dispatcher = servlet.getServletContext()
.getRequestDispatcher(path);
try {
dispatcher.forward(request, response);
} catch (javax.servlet.ServletException e) {
throw new ServletException(e);
} catch (IOException e) {
throw new ServletException(e);
}
}
public HashSet getClassDetail(HttpServletRequest request) {
HashSet classDetail = new HashSet();
String[] values = request.getParameterValues("details");
if (values != null)
for (String value : values)
classDetail.add(value);
return classDetail;
}
public final String getResponseContentType() {
return response.getContentType();
}
public final void setResponseContentType(String contentType) {
response.setContentType(contentType);
}
public void writeXmlResponse() throws SearchLibException, SAXException {
if (xmlResponse == null)
return;
if (xmlResponse.size() == 0)
return;
getXmlWriter("UTF-8");
setResponseContentType("text/xml");
xmlWriter.startElement("response");
for (Map.Entry entry : xmlResponse.entrySet()) {
xmlWriter.startElement("entry", "key", entry.getKey());
xmlWriter.textNode(entry.getValue());
xmlWriter.endElement();
}
xmlWriter.endElement();
xmlWriter.endDocument();
}
public WebApp getWebApp() {
return WebManager.getWebApp(servlet.getServletContext());
}
public void sendFile(File file, String filename, String contentType,
boolean attach) throws SearchLibException {
response.setContentType(contentType);
if (attach)
response.addHeader("Content-Disposition", "attachment; filename="
+ filename);
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
ServletOutputStream outputStream = getOutputStream();
IOUtils.copy(inputStream, outputStream);
outputStream.close();
} catch (FileNotFoundException e) {
throw new SearchLibException(e);
} catch (IOException e) {
throw new SearchLibException(e);
} finally {
IOUtils.close(inputStream);
}
}
public final String getParameterString(String name) {
return request.getParameter(name);
}
public final String getParameterString(String name, String defaultValue) {
String p = request.getParameter(name);
return p == null ? defaultValue : p;
}
public final Integer getParameterInteger(String name) {
return getParameterInteger(name, null);
}
public final Integer getParameterInteger(String name, Integer defaultValue) {
String p = request.getParameter(name);
if (p == null || p.length() == 0)
return defaultValue;
return Integer.parseInt(p);
}
public final Long getParameterLong(String name) {
return getParameterLong(name, null);
}
public final Long getParameterLong(String name, Long defaultValue) {
String p = request.getParameter(name);
if (p == null || p.length() == 0)
return defaultValue;
return Long.parseLong(p);
}
public final Boolean getParameterBoolean(String name) {
return getParameterBoolean(name, null);
}
public final boolean getParameterBoolean(String name, boolean defaultValue) {
Boolean b = getParameterBoolean(name, null);
if (b == null)
return defaultValue;
return b;
}
public final boolean getParameterBoolean(String name, String valueExpected,
boolean defaultValue) {
Boolean b = getParameterBoolean(name, valueExpected);
if (b == null)
return defaultValue;
return b;
}
public final Boolean getParameterBoolean(String name, String valueExpected) {
String p = request.getParameter(name);
if (p == null)
return null;
if (valueExpected != null)
return valueExpected.equalsIgnoreCase(p);
return Boolean.parseBoolean(p);
}
public final String[] getParameterValues(String name) {
return request.getParameterValues(name);
}
public String getRequestContentType() {
return request.getContentType();
}
public void setRequestAttribute(String name, Object value) {
request.setAttribute(name, value);
}
public void setRequestEncoding(String encoding)
throws UnsupportedEncodingException {
request.setCharacterEncoding(encoding);
}
public HttpServletRequest getRequest() {
return request;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy