/* * Copyright (C) 2003-2010 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.wiki.webui; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.exoplatform.commons.utils.PageList; import org.exoplatform.container.PortalContainer; import org.exoplatform.portal.config.model.PortalConfig; 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.SelectItem; import org.exoplatform.webui.core.model.SelectOption; import org.exoplatform.webui.core.model.SelectOptionGroup; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; import org.exoplatform.webui.form.UIForm; import org.exoplatform.webui.form.UIFormSelectBoxWithGroups; import org.exoplatform.webui.form.UIFormStringInput; import org.exoplatform.wiki.mow.api.Wiki; import org.exoplatform.wiki.mow.api.WikiType; import org.exoplatform.wiki.service.WikiPageParams; import org.exoplatform.wiki.service.WikiService; import org.exoplatform.wiki.service.search.WikiSearchData; import org.exoplatform.wiki.service.search.SearchResult; import org.exoplatform.wiki.utils.Utils; /** * Created by The eXo Platform SAS * Author : viet nguyen * viet.nguyen@exoplatform.com * May 14, 2010 */ @ComponentConfig( lifecycle = UIFormLifecycle.class, template = "app:/templates/wiki/webui/UIWikiAdvanceSearchForm.gtmpl", events = { @EventConfig(listeners = UIWikiAdvanceSearchForm.SearchActionListener.class) } ) public class UIWikiAdvanceSearchForm extends UIForm { final static String TEXT = "text".intern(); final static String WIKIS = "wikis".intern(); public UIWikiAdvanceSearchForm() throws Exception { addChild(new UIFormStringInput(TEXT, TEXT, null)); List<SelectOptionGroup> wikis = renderWikisOptions(); UIFormSelectBoxWithGroups selectSpaces = new UIFormSelectBoxWithGroups(WIKIS, WIKIS, new ArrayList<SelectItem>(wikis)); selectSpaces.setValue(getDefaultSelectWikiValue()); addChild(selectSpaces); this.setActions(new String[] { "Search" }); } public void resetWikiSpaces() throws Exception { getChild(UIFormSelectBoxWithGroups.class).setOptions(new ArrayList<SelectItem>(renderWikisOptions())) .setValue(getDefaultSelectWikiValue()); } public List<SelectOptionGroup> renderWikisOptions() throws Exception { List<SelectOptionGroup> listOptions = new ArrayList<SelectOptionGroup>(); if (getAllWikiOptions().getOptions().size() > 0) listOptions.add(getAllWikiOptions()); if (getPortalWikiOptions().getOptions().size() > 0) listOptions.add(getPortalWikiOptions()); if (getGroupWikiOptions().getOptions().size() > 0) listOptions.add(getGroupWikiOptions()); if (getUserWikiOptions().getOptions().size() > 0) listOptions.add(getUserWikiOptions()); return listOptions; } public SelectOptionGroup getAllWikiOptions() throws Exception { SelectOptionGroup allSpaceOptions = new SelectOptionGroup(""); allSpaceOptions.addOption(new SelectOption(getLabel("AllWikis"), "")); allSpaceOptions.addOption(new SelectOption(getLabel("AllPortalWikis"), PortalConfig.PORTAL_TYPE)); allSpaceOptions.addOption(new SelectOption(getLabel("AllGroupWikis"), PortalConfig.GROUP_TYPE)); allSpaceOptions.addOption(new SelectOption(getLabel("AllUserWikis"), PortalConfig.USER_TYPE)); return allSpaceOptions; } public SelectOptionGroup getPortalWikiOptions() throws Exception { SelectOptionGroup portalSpaceOptions = new SelectOptionGroup(getLabel("PortalWikis")); Collection<Wiki> portalWikis = Utils.getWikisByType(WikiType.PORTAL); for (Wiki wiki : portalWikis) { portalSpaceOptions.addOption(new SelectOption(wiki.getOwner(), PortalConfig.PORTAL_TYPE + "/" + wiki.getOwner())); } return portalSpaceOptions; } public SelectOptionGroup getGroupWikiOptions() throws Exception { SelectOptionGroup groupSpaceOptions = new SelectOptionGroup(getLabel("GroupWikis")); Collection<Wiki> groupWikis = Utils.getWikisByType(WikiType.GROUP); for (Wiki wiki : groupWikis) { groupSpaceOptions.addOption(new SelectOption(wiki.getOwner(), PortalConfig.GROUP_TYPE + "/" + Utils.validateWikiOwner(wiki.getType(), wiki.getOwner()))); } return groupSpaceOptions; } public SelectOptionGroup getUserWikiOptions() throws Exception { SelectOptionGroup userSpaceOptions = new SelectOptionGroup(getLabel("UserWikis")); Collection<Wiki> userWikis = Utils.getWikisByType(WikiType.USER); for (Wiki wiki : userWikis) { userSpaceOptions.addOption(new SelectOption(wiki.getOwner(), PortalConfig.USER_TYPE + "/" + wiki.getOwner())); } return userSpaceOptions; } public void processSearchAction() throws Exception { WikiService wservice = (WikiService) PortalContainer.getComponent(WikiService.class); String text = getUIStringInput(TEXT).getValue().trim(); String path = getChild(UIFormSelectBoxWithGroups.class).getValue(); String wikiType = null; String wikiOwner = null; if (!path.equals("")) { String[] arrayParams = path.split("/"); if (arrayParams.length >= 1) { wikiType = arrayParams[0]; if (arrayParams.length >= 2) wikiOwner = arrayParams[1]; } } WikiSearchData data = new WikiSearchData(text, null, null, wikiType, wikiOwner); PageList<SearchResult> results = wservice.search(data); UIWikiAdvanceSearchResult uiSearchResults = getParent().findFirstComponentOfType(UIWikiAdvanceSearchResult.class); uiSearchResults.setKeyword(text); uiSearchResults.setResult(results); } private String getDefaultSelectWikiValue() throws Exception { WikiPageParams currentParams = org.exoplatform.wiki.commons.Utils.getCurrentWikiPageParams(); String wikiType = currentParams.getType(); String owner = currentParams.getOwner(); return wikiType + "/" + Utils.validateWikiOwner(wikiType, owner); } static public class SearchActionListener extends EventListener<UIWikiAdvanceSearchForm> { public void execute(Event<UIWikiAdvanceSearchForm> event) throws Exception { UIWikiAdvanceSearchForm uiSearch = event.getSource() ; uiSearch.processSearchAction(); } } }