/***************************************************************************
* 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.forum.webui;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.exoplatform.forum.ForumUtils;
import org.exoplatform.forum.common.webui.UIPopupAction;
import org.exoplatform.forum.service.ForumPageList;
import org.exoplatform.forum.service.ForumSearchResult;
import org.exoplatform.forum.service.JCRPageList;
import org.exoplatform.forum.service.Post;
import org.exoplatform.forum.service.UserProfile;
import org.exoplatform.forum.service.Utils;
import org.exoplatform.forum.webui.popup.UIViewPost;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.core.model.SelectItemOption;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIFormSelectBox;
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/templates/forum/webui/UIForumListSearch.gtmpl",
events = {
@EventConfig(listeners = UIForumListSearch.OpentContentActionListener.class),
@EventConfig(listeners = UIForumListSearch.ChangeNumberItemActionListener.class),
@EventConfig(listeners = UIForumListSearch.AdvancedSearchActionListener.class),
@EventConfig(listeners = UIForumListSearch.CloseActionListener.class)
}
)
public class UIForumListSearch extends BaseForumForm {
private List<ForumSearchResult> listEvent = null;
private boolean isShowIter = true;
public final String SEARCH_ITERATOR = "forumSearchIterator";
public static final String FIELD_DISPLAY_ITEM_SELECTBOX = "DisplayItem";
public static final String ID = "id";
public static final String GO_BACK = "Goback";
private String pathLastVisit = GO_BACK + Utils.FORUM_SERVICE;
private JCRPageList pageList;
private String searchTerm = "";
private int pageSize = 10;
private UIForumPageIterator pageIterator;
private Map<String, String> displayItemsStorage = new HashMap<String, String>();
public UIForumListSearch() throws Exception {
pageIterator = addChild(UIForumPageIterator.class, null, SEARCH_ITERATOR);
List<SelectItemOption<String>> ls = new ArrayList<SelectItemOption<String>>();
for (int i = 10; i <= 45; i = i + 5) {
ls.add(new SelectItemOption<String>(String.valueOf(i), (ID + i)));
}
UIFormSelectBox displayItem = new UIFormSelectBox(FIELD_DISPLAY_ITEM_SELECTBOX, FIELD_DISPLAY_ITEM_SELECTBOX, ls);
displayItem.setDefaultValue(ID + 10);
displayItem.setOnChange("ChangeNumberItem");
addChild(displayItem);
}
public void setPathLastVisit(String pathLastVisit) {
this.pathLastVisit = pathLastVisit;
}
public String getPathLastVisit() {
return pathLastVisit;
}
public void setListSearchEvent(String text, List<ForumSearchResult> listEvent, String pathLastVisit) throws Exception {
this.listEvent = listEvent;
searchTerm = text;
this.setPathLastVisit(GO_BACK + pathLastVisit);
pageIterator.setSelectPage(1);
String userId = getUserProfile().getUserId();
if(displayItemsStorage.keySet().contains(userId)) {
String vl = displayItemsStorage.get(userId);
pageSize = Integer.valueOf(vl.substring(2));
getUIFormSelectBox(FIELD_DISPLAY_ITEM_SELECTBOX).setValue(vl) ;
}
}
public boolean getIsShowIter() {
return isShowIter;
}
@SuppressWarnings("unchecked")
public List<ForumSearchResult> getListEvent() {
pageList = new ForumPageList(pageSize, listEvent.size());
pageList.setPageSize(pageSize);
pageIterator.initPage(pageList.getPageSize(), pageList.getCurrentPage(),
pageList.getAvailable(), pageList.getAvailablePage());
isShowIter = true;
if (pageList.getAvailablePage() <= 1)
isShowIter = false;
int pageSelect = pageIterator.getPageSelected();
List<ForumSearchResult> list = new ArrayList<ForumSearchResult>();
list.addAll(pageList.getPageSearch(pageSelect, this.listEvent));
return list;
}
private ForumSearchResult getForumSearch(String id) {
for (ForumSearchResult forumSearch : this.listEvent) {
if (forumSearch.getId().equals(id))
return forumSearch;
}
return null;
}
static public class OpentContentActionListener extends EventListener<UIForumListSearch> {
public void execute(Event<UIForumListSearch> event) throws Exception {
UIForumListSearch uiForm = event.getSource();
String path = event.getRequestContext().getRequestParameter(OBJECTID);
UIForumPortlet forumPortlet = uiForm.getAncestorOfType(UIForumPortlet.class);
if(path.indexOf(GO_BACK) >= 0) {
path = path.replace(GO_BACK, "");
} else {
ForumSearchResult forumSearch = uiForm.getForumSearch(path);
if(!Utils.CATEGORY.equals(forumSearch.getType())) path = forumSearch.getPath();
if(Utils.POST.equals(forumSearch.getType())) {
Post post = uiForm.getForumService().getPost("", "", "", path);
if(post != null) {
UIPopupAction popupAction = forumPortlet.getChild(UIPopupAction.class).setRendered(true);
UIViewPost viewPost = popupAction.activate(UIViewPost.class, 670);
viewPost.setPostView(post);
viewPost.setViewUserInfo(false);
viewPost.setActionForm(new String[] { "Close", "OpenTopicLink" });
event.getRequestContext().addUIComponentToUpdateByAjax(popupAction);
return;
}
}
}
forumPortlet.calculateRenderComponent(path, event.getRequestContext());
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
}
}
static public class CloseActionListener extends EventListener<UIForumListSearch> {
public void execute(Event<UIForumListSearch> event) throws Exception {
UIForumListSearch uiForm = event.getSource();
UIForumPortlet forumPortlet = uiForm.getAncestorOfType(UIForumPortlet.class);
forumPortlet.findFirstComponentOfType(UICategories.class).setIsRenderChild(false);
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
}
}
static public class ChangeNumberItemActionListener extends EventListener<UIForumListSearch> {
public void execute(Event<UIForumListSearch> event) throws Exception {
UIForumListSearch uiForm = event.getSource();
String vl = uiForm.getUIFormSelectBox(FIELD_DISPLAY_ITEM_SELECTBOX).getValue();
uiForm.pageSize = Integer.valueOf(vl.substring(2));
String userId = uiForm.getUserProfile().getUserId();
if(!userId.equals(UserProfile.USER_GUEST)) {
uiForm.displayItemsStorage.put(userId, vl);
}
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm);
}
}
static public class AdvancedSearchActionListener extends EventListener<UIForumListSearch> {
public void execute(Event<UIForumListSearch> event) throws Exception {
UIForumListSearch uiForm = event.getSource();
UIForumPortlet forumPortlet = uiForm.getAncestorOfType(UIForumPortlet.class);
forumPortlet.updateIsRendered(ForumUtils.FIELD_SEARCHFORUM_LABEL);
forumPortlet.getChild(UIBreadcumbs.class).setUpdataPath(ForumUtils.FIELD_EXOFORUM_LABEL + ForumUtils.SLASH);
UISearchForm searchForm = forumPortlet.getChild(UISearchForm.class);
searchForm.setPath(ForumUtils.EMPTY_STR);
searchForm.setSelectType(Utils.CATEGORY);
searchForm.setSearchOptionsObjectType(Utils.CATEGORY);
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
}
}
}