blob: 4a74226c727661ed1fe4102b99e0ff56be05a6d4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 empolis GmbH and brox IT Solutions GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Juergen Schumacher (empolis GmbH) - initial API and implementation
*******************************************************************************/
package org.eclipse.smila.search.servlet;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.eclipse.smila.search.api.helper.QueryBuilder;
/**
* fill SMILA query builder from servlet http request.
*
* TODO: Parse and create attribute filters and ranking annotations.
*
* @author jschumacher
*
*/
public class HttpRequestParser extends ARequestParser {
/**
* create new instance with default pipeline.
*
* @param defaultPipeline
* default pipeline name to use, if request does not contain a pipeline parameter.
*/
public HttpRequestParser(final String defaultPipeline) {
super(defaultPipeline);
}
/**
* create QueryBuilder from http request parameters.
*
* @param request
* http request
* @return new query builder instance.
* @throws ServletException
* error creating a valid query builder.
*/
public QueryBuilder parse(final HttpServletRequest request) throws ServletException {
String pipeline = request.getParameter("pipeline");
if (StringUtils.isEmpty(pipeline)) {
pipeline = _defaultPipeline;
}
if (pipeline == null) {
throw new ServletException("No pipeline name specified.");
}
final QueryBuilder builder = new QueryBuilder(pipeline);
final Enumeration paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
final String paramName = (String) paramNames.nextElement();
final String[] paramValues = request.getParameterValues(paramName);
if (paramValues != null && paramValues.length > 0) {
processParameter(builder, paramName, paramValues);
}
}
setupQuery(builder);
return builder;
}
}