All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jaeksoft.searchlib.web.ServletTransaction Maven / Gradle / Ivy

Go to download

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