/* * Copyright 2008-2010 the original author or authors. * * 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 es.alvsanand.webpage.web.beans.cms; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import org.apache.commons.lang.StringUtils; import es.alvsanand.webpage.AlvsanandException; import es.alvsanand.webpage.common.Globals; import es.alvsanand.webpage.common.Logger; import es.alvsanand.webpage.model.Article; import es.alvsanand.webpage.model.Tag; import es.alvsanand.webpage.services.cms.SearchCmsService; import es.alvsanand.webpage.services.cms.SearchCmsServiceImpl; @SessionScoped @ManagedBean(name="searchBean") public class SearchBean implements Serializable{ /** * */ private static final long serialVersionUID = 4278071046272339705L; private transient static final Logger logger = new Logger(SearchBean.class); private transient static final String LIST_SEARCH_ARTICLES_VIEW_ID = "/xhtml/articlesByQuery.jsf"; private transient static final String LIST_DATES_ARTICLES_VIEW_ID = "/xhtml/articlesByTag.jsf"; public transient static final String[] DEFAULT_SORT_FIELDS = {"date"}; private transient SearchCmsService searchCmsService; private String tagName; private String query; private List<Article> articles; private String date; public SearchBean(){ } public String getTagName() { return tagName; } public void setTagName(String tagName) { this.tagName = tagName; } public String getQuery() { return query; } public void setQuery(String query) { this.query = query; } public String getEncodedQuery() throws UnsupportedEncodingException { return URLEncoder.encode(this.query, Globals.CHARACTER_ENCODING); } public void setEncodedQuery(String encodedQuery) throws UnsupportedEncodingException { this.query = URLDecoder.decode(encodedQuery, Globals.CHARACTER_ENCODING); } public List<Article> getArticles() { return articles; } public void setArticles(List<Article> articles) { this.articles = articles; } public SearchCmsService getSearchCmsService() { if(searchCmsService==null){ searchCmsService = new SearchCmsServiceImpl(); } return searchCmsService; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } // JSF methods public void searchArticlesByTagName() throws AlvsanandException, UnsupportedEncodingException { logger.info("Launched SearchBean.searchArticlesByTagName[" + tagName + "]"); Tag tag = new Tag(); tag.setEncodedName(tagName); articles = getSearchCmsService().getArticlesByTag(tag); } public void searchArticlesByQueryNoNiew() throws AlvsanandException { logger.info("Launched SearchBean.searchArticlesByQueryNoNiew[" + query + "]"); articles = getSearchCmsService().searchArticles(query); } public String searchArticlesByQuery() throws AlvsanandException { logger.info("Launched SearchBean.searchArticlesByQuery[" + query + "]"); articles = getSearchCmsService().searchArticles(query); return LIST_SEARCH_ARTICLES_VIEW_ID; } public boolean isSearchEmpty() { if(articles==null || articles.size()==0){ return true; } else{ return false; } } public void searchArticlesByDate() throws AlvsanandException { logger.info("Launched SearchBean.searchArticlesByDate[date=" + date + "]"); Calendar calendar = new GregorianCalendar(); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 1); if(StringUtils.isNotEmpty(date)){ String[] tmp = date.split(Globals.DATE_SEPARATOR); if(tmp.length>0){ Date beginDate = null; Date endDate = null; switch(tmp.length){ case 1: calendar.set(Calendar.YEAR, Integer.parseInt(tmp[0])); calendar.set(Calendar.MONTH, 0); calendar.set(Calendar.DAY_OF_MONTH, 1); beginDate = calendar.getTime(); calendar.add(Calendar.YEAR, 1); endDate = calendar.getTime(); break; case 2: calendar.set(Calendar.YEAR, Integer.parseInt(tmp[0])); calendar.set(Calendar.MONTH, Integer.parseInt(tmp[1])-1); calendar.set(Calendar.DAY_OF_MONTH, 1); beginDate = calendar.getTime(); calendar.add(Calendar.MONTH, 1); endDate = calendar.getTime(); break; default: calendar.set(Calendar.YEAR, Integer.parseInt(tmp[0])); calendar.set(Calendar.MONTH, Integer.parseInt(tmp[1])-1); calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(tmp[2])); beginDate = calendar.getTime(); calendar.add(Calendar.DAY_OF_YEAR, 1); endDate = calendar.getTime(); break; } articles = getSearchCmsService().getArticlesByDates(beginDate, endDate); } } } }