/*************************************************************************** * Copyright (C) 2003-2007 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.forum.webui; import java.util.ArrayList; import java.util.List; import org.exoplatform.forum.ForumUtils; import org.exoplatform.forum.service.JCRPageList; import org.exoplatform.forum.webui.popup.UIListTopicOld; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIComponent; import org.exoplatform.webui.core.UIContainer; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; /** * Created by The eXo Platform SARL * Author : Vu Duy Tu * tu.duy@exoplatform.com * Nov 19, 2007 9:18:18 AM */ @ComponentConfig( template = "app:/templates/forum/webui/UIForumPageIterator.gtmpl", events = { @EventConfig(listeners = UIForumPageIterator.GoPageActionListener.class) } ) public class UIForumPageIterator extends UIContainer { private JCRPageList pageList; private int page = 1; private int endTabPage = 0; private int beginTabPage = 0; private boolean isUpdateListTopicOld = false; public UIForumPageIterator() throws Exception { } public void setUpdateListTopicOld(boolean updateTwoTime) { this.isUpdateListTopicOld = updateTwoTime; } public boolean getUpdateListTopicOld() { return isUpdateListTopicOld; } public void updatePageList(JCRPageList pageList) { this.pageList = pageList; } @SuppressWarnings("unused") private List<String> getTotalpage() throws Exception { int max_Page = (int) pageList.getAvailablePage(); if (this.page > max_Page) this.page = max_Page; long page = this.page; if (page <= 3) { beginTabPage = 1; if (max_Page <= 7) endTabPage = max_Page; else endTabPage = 7; } else { if (max_Page > (page + 3)) { endTabPage = (int) (page + 3); beginTabPage = (int) (page - 3); } else { endTabPage = max_Page; if (max_Page > 7) beginTabPage = max_Page - 6; else beginTabPage = 1; } } List<String> temp = new ArrayList<String>(); for (int i = beginTabPage; i <= endTabPage; i++) { temp.add(ForumUtils.EMPTY_STR + i); } return temp; } @SuppressWarnings("unused") public List<Long> getInfoPage() throws Exception { List<Long> temp = new ArrayList<Long>(); try { temp.add((long) pageList.getPageSize()); temp.add((long) pageList.getCurrentPage()); temp.add((long) pageList.getAvailable()); temp.add((long) pageList.getAvailablePage()); } catch (Exception e) { temp.add((long) 1); temp.add((long) 1); temp.add((long) 1); temp.add((long) 1); } return temp; } public void setSelectPage(long page) { this.page = (int) page; } @SuppressWarnings("unused") public int getPageSelected() { return this.page; } static public class GoPageActionListener extends EventListener<UIForumPageIterator> { public void execute(Event<UIForumPageIterator> event) throws Exception { UIForumPageIterator forumPageIterator = event.getSource(); if ((UIComponent) forumPageIterator.getParent() instanceof UITopicDetail) { UITopicDetail topicDetail = forumPageIterator.getParent(); topicDetail.setIdPostView("top"); } String stateClick = event.getRequestContext().getRequestParameter(OBJECTID).trim(); int maxPage = forumPageIterator.pageList.getAvailablePage(); int presentPage = forumPageIterator.page; if (stateClick.equalsIgnoreCase("next")) { if (presentPage < maxPage) { forumPageIterator.page = presentPage + 1; if (forumPageIterator.getUpdateListTopicOld()) { UIListTopicOld listTopicOld = forumPageIterator.getParent(); listTopicOld.setIsUpdate(true); } event.getRequestContext().addUIComponentToUpdateByAjax(forumPageIterator.getParent()); } } else if (stateClick.equalsIgnoreCase("previous")) { if (presentPage > 1) { forumPageIterator.page = presentPage - 1; if (forumPageIterator.getUpdateListTopicOld()) { UIListTopicOld listTopicOld = forumPageIterator.getParent(); listTopicOld.setIsUpdate(true); } event.getRequestContext().addUIComponentToUpdateByAjax(forumPageIterator.getParent()); } } else if (stateClick.equalsIgnoreCase("last")) { if (presentPage != maxPage) { forumPageIterator.page = maxPage; if (forumPageIterator.getUpdateListTopicOld()) { UIListTopicOld listTopicOld = forumPageIterator.getParent(); listTopicOld.setIsUpdate(true); } event.getRequestContext().addUIComponentToUpdateByAjax(forumPageIterator.getParent()); } } else if (stateClick.equalsIgnoreCase("first")) { if (presentPage != 1) { forumPageIterator.page = 1; if (forumPageIterator.getUpdateListTopicOld()) { UIListTopicOld listTopicOld = forumPageIterator.getParent(); listTopicOld.setIsUpdate(true); } event.getRequestContext().addUIComponentToUpdateByAjax(forumPageIterator.getParent()); } } else { int temp = Integer.parseInt(stateClick); if (temp > 0 && temp <= maxPage && temp != presentPage) { forumPageIterator.page = temp; if (forumPageIterator.getUpdateListTopicOld()) { UIListTopicOld listTopicOld = forumPageIterator.getParent(); listTopicOld.setIsUpdate(true); } event.getRequestContext().addUIComponentToUpdateByAjax(forumPageIterator.getParent()); } } } } }