/*******************************************************************************
* Copyright (c) 2012, Directors of the Tyndale STEP Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* Neither the name of the Tyndale House, Cambridge (www.TyndaleHouse.com)
* nor the names of its contributors may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
******************************************************************************/
package com.tyndalehouse.step.jsp;
import java.util.ResourceBundle;
import javax.servlet.http.HttpServletRequest;
import com.google.inject.Injector;
import com.tyndalehouse.step.core.models.ClientSession;
/**
* A WebCookieRequest stores information from the request and the cookie for easy use in the jsp page.
*
* @author chrisburrell
*/
// CHECKSTYLE:OFF
public class AdvancedSearchStepRequest extends WebStepRequest {
private static final Object[] PRIMARY_INCLUDE_WITHIN = new Object[] {
"<input type=\"text\" class=\"textPrimaryIncludeRangedWords _m\" size=\"15\" />",
"<input type=\"text\" class=\"textPrimaryWithinXWords _m\" size=\"2\" />" };
private static final Object[] CLOSE_BY_INCLUDE_WITHIN = new Object[] {
"<input type=\"text\" class=\"textCloseByIncludeRangedWords _m\" size=\"15\" />",
"<input type=\"text\" class=\"textCloseByWithinXWords _m\" size=\"2\" />" };
private static final Object[] RESTRICT = new Object[] {
"<input type=\"text\" class=\"textRestriction showRanges drop _m\" size=\"15\" source=\"step.defaults.search.textual.availableRanges\" ro=\"false\" />",
"<input type=\"text\" class=\"textRestrictionExclude showRanges drop _m\" size=\"15\" source=\"step.defaults.search.textual.availableRanges\" ro=\"false\" default=\"\" />" };
private static final String QUERY_PROXIMITY = "<input type=\"text\" class=\"textVerseProximity _m\" size=\"2\" />";
private final ResourceBundle bundle;
/**
* Allows the generation of the search criteria HTML.
*
* @param injector the injector for the application
* @param request the servlet request
*/
public AdvancedSearchStepRequest(final Injector injector, final HttpServletRequest request) {
super(injector, request);
this.bundle = ResourceBundle.getBundle("HtmlBundle", injector.getInstance(ClientSession.class)
.getLocale());
}
/**
* Gets the proximity between queries.
*
* @return the proximity between queries
*/
public String getProximityBetweenQueries() {
return String.format(this.bundle.getString("advanced_search_first_and_second_proximity"),
QUERY_PROXIMITY);
}
/**
* Gets the primary include these words.
*
* @return the primary include these words
*/
public String getPrimaryIncludeTheseWords() {
final String format = String.format(
this.bundle.getString("advanced_search_include_words_within_range_of_each_other"),
PRIMARY_INCLUDE_WITHIN);
return getIncludeWithinRow(format, true);
}
/**
* Gets the close by include these words.
*
* @return the close by include these words
*/
public String getCloseByIncludeTheseWords() {
final String format = String.format(
this.bundle.getString("advanced_search_include_words_within_range_of_each_other"),
CLOSE_BY_INCLUDE_WITHIN);
return getIncludeWithinRow(format, true);
}
/**
* Gets the restrict search.
*
* @return the restrict search
*/
public String getRestrictSearch() {
final String format = String.format(this.bundle.getString("advanced_search_restrict_search"),
RESTRICT);
return getIncludeWithinRow(format, false);
}
/**
* Gets the include within row.
*
* @param format the format
* @param doubleSpanLast TODO
* @return the include within row
*/
private String getIncludeWithinRow(final String format, final boolean doubleSpanLast) {
final String[] split = format.split("\\|");
// build the row
final StringBuilder row = new StringBuilder(1024);
for (int ii = 0; ii < split.length; ii++) {
if (!doubleSpanLast || ii < split.length - 1) {
row.append("<td>");
} else {
row.append("<td colspan=2>");
}
row.append(split[ii]);
row.append("</td>");
}
return row.toString();
}
}