/* * Copyright (C) 2003-2008 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program 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 this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.faq.webui.popup; import java.util.ArrayList; import java.util.List; import org.exoplatform.faq.service.FAQService; import org.exoplatform.faq.service.JCRPageList; import org.exoplatform.faq.service.ObjectSearchResult; import org.exoplatform.faq.service.QuestionPageList; import org.exoplatform.faq.webui.FAQUtils; import org.exoplatform.faq.webui.UIAnswersContainer; import org.exoplatform.faq.webui.UIAnswersPageIterator; import org.exoplatform.faq.webui.UIAnswersPortlet; import org.exoplatform.faq.webui.UIBreadcumbs; import org.exoplatform.faq.webui.UICategories; import org.exoplatform.faq.webui.UIQuestions; import org.exoplatform.ks.common.webui.BaseEventListener; import org.exoplatform.ks.common.webui.BaseUIForm; import org.exoplatform.ks.common.webui.UIPopupAction; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIPopupComponent; import org.exoplatform.webui.core.lifecycle.UIFormLifecycle; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; /** * Created by The eXo Platform SARL * Author : Truong Nguyen * truong.nguyen@exoplatform.com * Apr 29, 2008, 11:51:17 AM */ @ComponentConfig( lifecycle = UIFormLifecycle.class, template = "app:/templates/faq/webui/popup/ResultQuickSearch.gtmpl", events = { @EventConfig(listeners = ResultQuickSearch.OpenCategoryActionListener.class), @EventConfig(listeners = ResultQuickSearch.LinkQuestionActionListener.class), @EventConfig(listeners = ResultQuickSearch.CloseActionListener.class) } ) public class ResultQuickSearch extends BaseUIForm implements UIPopupComponent { private List<ObjectSearchResult> searchResults_ = new ArrayList<ObjectSearchResult>(); private String LIST_RESULT_SEARCH = "listResultSearch"; private UIAnswersPageIterator pageIterator; private JCRPageList pageList; public ResultQuickSearch() throws Exception { addChild(UIAnswersPageIterator.class, null, LIST_RESULT_SEARCH); this.setActions(new String[] { "Close" }); } public void setSearchResults(List<ObjectSearchResult> searchResults) throws Exception { if (searchResults != null) this.searchResults_ = searchResults; else this.searchResults_ = new ArrayList<ObjectSearchResult>(); try { pageList = new QuestionPageList(searchResults_, 10); pageList.setPageSize(10); pageIterator = this.getChildById(LIST_RESULT_SEARCH); pageIterator.updatePageList(pageList); } catch (Exception e) { } } @SuppressWarnings("unused") private long getTotalpages(String pageInteratorId) { UIAnswersPageIterator pageIterator = this.getChildById(LIST_RESULT_SEARCH); try { return pageIterator.getInfoPage().get(3); } catch (Exception e) { return 1; } } public List<ObjectSearchResult> getSearchResults() { searchResults_ = new ArrayList<ObjectSearchResult>(); try { long pageSelected = pageIterator.getPageSelected(); searchResults_.addAll(pageList.getPageResultSearch(pageSelected, FAQUtils.getCurrentUser())); } catch (Exception e) { } return searchResults_; } public void activate() throws Exception { } public void deActivate() throws Exception { } static public class OpenCategoryActionListener extends BaseEventListener<ResultQuickSearch> { public void onEvent(Event<ResultQuickSearch> event, ResultQuickSearch resultQuickSearch, final String id) throws Exception { FAQService faqService = FAQUtils.getFAQService(); UIAnswersPortlet answerPortlet = resultQuickSearch.getAncestorOfType(UIAnswersPortlet.class); UIQuestions uiQuestions = answerPortlet.findFirstComponentOfType(UIQuestions.class); if (!faqService.isExisting(id)) { warning("UIQuestions.msg.category-id-deleted"); return; } uiQuestions.setCategoryId(id); uiQuestions.setDefaultLanguage(); uiQuestions.updateCurrentQuestionList(); UIBreadcumbs breadcumbs = answerPortlet.findFirstComponentOfType(UIBreadcumbs.class); breadcumbs.setUpdataPath(id); UICategories categories = answerPortlet.findFirstComponentOfType(UICategories.class); categories.setPathCategory(id); event.getRequestContext().addUIComponentToUpdateByAjax(breadcumbs); UIAnswersContainer fAQContainer = uiQuestions.getAncestorOfType(UIAnswersContainer.class); event.getRequestContext().addUIComponentToUpdateByAjax(fAQContainer); answerPortlet.cancelAction(); } } static public class LinkQuestionActionListener extends BaseEventListener<ResultQuickSearch> { public void onEvent(Event<ResultQuickSearch> event, ResultQuickSearch resultQuickSearch, final String id) throws Exception { FAQService faqService = FAQUtils.getFAQService(); try { UIAnswersPortlet answerPortlet = resultQuickSearch.getAncestorOfType(UIAnswersPortlet.class); UIQuestions uiQuestions = answerPortlet.findFirstComponentOfType(UIQuestions.class); String categoryId = faqService.getCategoryPathOf(id); uiQuestions.setCategoryId(categoryId); uiQuestions.setDefaultLanguage(); uiQuestions.viewingQuestionId_ = id; uiQuestions.updateCurrentQuestionList(); uiQuestions.updateLanguageMap(); UIBreadcumbs breadcumbs = answerPortlet.findFirstComponentOfType(UIBreadcumbs.class); breadcumbs.setUpdataPath(categoryId); UICategories categories = answerPortlet.findFirstComponentOfType(UICategories.class); categories.setPathCategory(categoryId); UIPopupAction popupAction = answerPortlet.getChild(UIPopupAction.class); popupAction.deActivate(); event.getRequestContext().addUIComponentToUpdateByAjax(popupAction); event.getRequestContext().addUIComponentToUpdateByAjax(answerPortlet.getChild(UIAnswersContainer.class)); } catch (Exception e) { event.getSource().log.error("Could listen a link question action: ", e); warning("UIQuestions.msg.question-id-deleted"); } } } static public class CloseActionListener extends EventListener<ResultQuickSearch> { public void execute(Event<ResultQuickSearch> event) throws Exception { event.getSource().cancelChildPopupAction(); } } }