/* * Vige, Home of Professional Open Source * Copyright 2010, Vige, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package it.vige.magazzino.inventory; import java.io.Serializable; import javax.enterprise.context.SessionScoped; import javax.inject.Named; /** * @author <a href="http://www.vige.it">Luca Stancapiano</a> */ @Named @SessionScoped public class SearchCriteria implements Serializable { static final long serialVersionUID = 7L; private static final char SQL_WILDCARD_CHAR = '%'; private static final String SQL_WILDCARD_STR = String.valueOf(SQL_WILDCARD_CHAR); private static final String REPEAT_SQL_WIDCARD_REGEX = SQL_WILDCARD_STR + "+"; private static final char HUMAN_WILDCARD_CHAR = '*'; private String query = ""; private int pageSize = 5; private int page = 0; public String getSearchPattern() { if (query == null || query.length() == 0) { return SQL_WILDCARD_STR; } StringBuilder pattern = new StringBuilder(); pattern.append(query.toLowerCase().replace(HUMAN_WILDCARD_CHAR, SQL_WILDCARD_CHAR) .replaceAll(REPEAT_SQL_WIDCARD_REGEX, SQL_WILDCARD_STR)); if (pattern.length() == 0 || pattern.charAt(0) != SQL_WILDCARD_CHAR) { pattern.insert(0, SQL_WILDCARD_CHAR); } if (pattern.length() > 1 && pattern.charAt(pattern.length() - 1) != SQL_WILDCARD_CHAR) { pattern.append(SQL_WILDCARD_CHAR); } return pattern.toString(); } public int getPage() { return page; } public void setPage(int page) { this.page = page; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getFetchSize() { return pageSize + 1; } public int getFetchOffset() { return page * pageSize; } public String getQuery() { return query; } public void setQuery(String query) { this.query = (query != null ? query.trim() : null); } public void nextPage() { page++; } public void previousPage() { if (page > 0) { page--; } } public void firstPage() { page = 0; } }