/***************************************************************************
* 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.Calendar;
import java.util.List;
import java.util.Locale;
import org.exoplatform.forum.ForumUtils;
import org.exoplatform.forum.common.CommonUtils;
import org.exoplatform.forum.common.UserHelper;
import org.exoplatform.forum.common.webui.UIPopupAction;
import org.exoplatform.forum.common.webui.UIPopupContainer;
import org.exoplatform.forum.common.webui.UISelector;
import org.exoplatform.forum.common.webui.UIUserSelect;
import org.exoplatform.forum.service.ForumEventQuery;
import org.exoplatform.forum.service.ForumSearchResult;
import org.exoplatform.forum.service.Utils;
import org.exoplatform.portal.application.PortalRequestContext;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.ComponentConfigs;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIPopupWindow;
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.Event.Phase;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIFormDateTimeInput;
import org.exoplatform.webui.form.UIFormRadioBoxInput;
import org.exoplatform.webui.form.UIFormSelectBox;
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.webui.form.input.UICheckBoxInput;
@ComponentConfigs ( {
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/templates/forum/webui/popup/UISearchForm.gtmpl",
events = {
@EventConfig(listeners = UISearchForm.SearchActionListener.class),
@EventConfig(listeners = UISearchForm.OnchangeActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UISearchForm.ResetFieldActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UISearchForm.AddValuesUserActionListener.class, phase = Phase.DECODE),
@EventConfig(listeners = UISearchForm.CancelActionListener.class, phase = Phase.DECODE)
}
)
,
@ComponentConfig(
id = "UIUserSearchPopupWindow",
type = UIPopupWindow.class,
template = "system:/groovy/webui/core/UIPopupWindow.gtmpl",
events = {
@EventConfig(listeners = UISearchForm.ClosePopupActionListener.class, name = "ClosePopup") ,
@EventConfig(listeners = UISearchForm.AddActionListener.class, name = "Add", phase = Phase.DECODE),
@EventConfig(listeners = UISearchForm.CloseActionListener.class, name = "Close", phase = Phase.DECODE)
}
)
}
)
public class UISearchForm extends BaseForumForm implements UISelector {
final static private String FIELD_SEARCHVALUE_INPUT = "SearchValue";
final static private String FIELD_SCOPE_RADIOBOX = "Scope";
final static private String FIELD_SEARCHUSER_INPUT = "SearchUser";
final static private String FIELD_SEARCHTYPE_SELECTBOX = "SearchType";
final static private String FIELD_TOPICCOUNTMIN_SLIDER = "TopicCountMax";
final static private String FIELD_POSTCOUNTMIN_SLIDER = "PostCountMax";
final static private String FIELD_VIEWCOUNTMIN_SLIDER = "ViewCountMax";
final static private String FIELD_ISLOCK_CHECKBOX = "IsLock";
final static private String FIELD_ISUNLOCK_CHECKBOX = "IsUnLock";
final static private String FIELD_ISCLOSED_CHECKBOX = "IsClosed";
final static private String FIELD_ISOPEN_CHECKBOX = "IsOpen";
final static private String FIELD_MODERATOR_INPUT = "Moderator";
final static private String FROMDATECREATED = "FromDateCreated";
final static private String TODATECREATED = "ToDateCreated";
final static private String FROMDATECREATEDLASTPOST = "FromDateCreatedLastPost";
final static private String TODATECREATEDLASTPOST = "ToDateCreatedLastPost";
private boolean isSearchForum = false;
private boolean isSearchCate = false;
private boolean isSearchTopic = false;
private String path = ForumUtils.EMPTY_STR;
private final static String USER_SEARCH_POPUP_WINDOW_ID = "UIUserSearchPopupWindow";
private Locale locale;
private int currentType = 0;
public UISearchForm() throws Exception {
if (this.getId() == null)
setId("UISearchForm");
UIFormStringInput searchValue = new UIFormStringInput(FIELD_SEARCHVALUE_INPUT, FIELD_SEARCHVALUE_INPUT, null);
UIFormStringInput searchUser = new UIFormStringInput(FIELD_SEARCHUSER_INPUT, FIELD_SEARCHUSER_INPUT, null);
List<SelectItemOption<String>> list = new ArrayList<SelectItemOption<String>>();
list.add(new SelectItemOption<String>(getLabel("Category"), Utils.CATEGORY));
list.add(new SelectItemOption<String>(getLabel("Forum"), Utils.FORUM));
list.add(new SelectItemOption<String>(getLabel("Topic"), Utils.TOPIC));
list.add(new SelectItemOption<String>(getLabel("Post"), Utils.POST));
UIFormSelectBox searchType = new UIFormSelectBox(FIELD_SEARCHTYPE_SELECTBOX, FIELD_SEARCHTYPE_SELECTBOX, list);
searchType.setOnChange("Onchange");
UIFormRadioBoxInput boxInput = new UIFormRadioBoxInput(FIELD_SCOPE_RADIOBOX, FIELD_SCOPE_RADIOBOX, null);
UICheckBoxInput isLock = new UICheckBoxInput(FIELD_ISLOCK_CHECKBOX, FIELD_ISLOCK_CHECKBOX, false);
UICheckBoxInput isUnLock = new UICheckBoxInput(FIELD_ISUNLOCK_CHECKBOX, FIELD_ISUNLOCK_CHECKBOX, false);
UICheckBoxInput isClosed = new UICheckBoxInput(FIELD_ISCLOSED_CHECKBOX, FIELD_ISCLOSED_CHECKBOX, false);
UICheckBoxInput isOpent = new UICheckBoxInput(FIELD_ISOPEN_CHECKBOX, FIELD_ISOPEN_CHECKBOX, false);
UIFormDateTimeInput FromDateCreated = new UIFormDateTimeInput(FROMDATECREATED, FROMDATECREATED, null, false);
UIFormDateTimeInput ToDateCreated = new UIFormDateTimeInput(TODATECREATED, TODATECREATED, null, false);
UIFormDateTimeInput FromDateCreatedLastPost = new UIFormDateTimeInput(FROMDATECREATEDLASTPOST, FROMDATECREATEDLASTPOST, null, false);
UIFormDateTimeInput ToDateCreatedLastPost = new UIFormDateTimeInput(TODATECREATEDLASTPOST, TODATECREATEDLASTPOST, null, false);
UISliderControl topicCountMin = new UISliderControl(FIELD_TOPICCOUNTMIN_SLIDER, FIELD_TOPICCOUNTMIN_SLIDER, "0", 300);// Sliders
UISliderControl postCountMin = new UISliderControl(FIELD_POSTCOUNTMIN_SLIDER, FIELD_POSTCOUNTMIN_SLIDER, "0", 500);
UISliderControl viewCountMin = new UISliderControl(FIELD_VIEWCOUNTMIN_SLIDER, FIELD_VIEWCOUNTMIN_SLIDER, "0", 500);
UIFormStringInput moderator = new UIFormStringInput(FIELD_MODERATOR_INPUT, FIELD_MODERATOR_INPUT, null);
addUIFormInput(searchValue);
addUIFormInput(searchType);
addUIFormInput(boxInput);
addUIFormInput(searchUser);
addUIFormInput(isLock);
addUIFormInput(isUnLock);
addUIFormInput(isClosed);
addUIFormInput(isOpent);
addUIFormInput(FromDateCreated);
addUIFormInput(ToDateCreated);
addUIFormInput(FromDateCreatedLastPost);
addUIFormInput(ToDateCreatedLastPost);
addUIFormInput(topicCountMin);
addUIFormInput(postCountMin);
addUIFormInput(viewCountMin);
addUIFormInput(moderator);
setActions(new String[] { "Search", "ResetField", "Cancel" });
setAddColonInLabel(true);
setPlaceholderDateTimePicker();
}
private void setPlaceholderDateTimePicker() {
List<UIFormDateTimeInput> containers = new ArrayList<UIFormDateTimeInput>();
findComponentOfType(containers, UIFormDateTimeInput.class);
for (UIFormDateTimeInput uiFormDateTimeInput : containers) {
uiFormDateTimeInput.setHTMLAttribute("placeholder", "mm/dd/yyyy");
}
}
protected void setLocale() throws Exception {
PortalRequestContext portalContext = Util.getPortalRequestContext();
Locale locale = portalContext.getLocale();
if (this.locale == null || !locale.getLanguage().equals(this.locale.getLanguage())) {
initDefaultContent();
this.locale = locale;
}
}
public void initDefaultContent() throws Exception {
getUIFormSelectBox(FIELD_SEARCHTYPE_SELECTBOX).setOptions(optionsType(currentType));
List<SelectItemOption<String>> list = new ArrayList<SelectItemOption<String>>();
list.add(new SelectItemOption<String>(getLabel("Full"), ForumEventQuery.VALUE_IN_ENTIRE));
list.add(new SelectItemOption<String>(getLabel("Titles"), ForumEventQuery.VALUE_IN_TITLE));
UIFormRadioBoxInput boxInput = this.getUIFormRadioBoxInput(FIELD_SCOPE_RADIOBOX).setOptions(list);
boxInput.setValue(ForumEventQuery.VALUE_IN_ENTIRE);
}
public boolean getIsSearchCate() {
return isSearchCate;
}
public boolean getIsSearchForum() {
return isSearchForum;
}
public void setIsSearchForum(boolean isSearchForum) {
this.isSearchForum = isSearchForum;
}
public boolean getIsSearchTopic() {
return isSearchTopic;
}
public void setIsSearchTopic(boolean isSearchTopic) {
this.isSearchTopic = isSearchTopic;
}
public void setPath(String path) {
this.path = path;
}
private List<SelectItemOption<String>> optionsType(int type) {
List<SelectItemOption<String>> list = new ArrayList<SelectItemOption<String>>();
if(type == 0)list.add(new SelectItemOption<String>(getLabel("Category"), Utils.CATEGORY));
if(type <= 1)list.add(new SelectItemOption<String>(getLabel("Forum"), Utils.FORUM));
if(type <= 2)list.add(new SelectItemOption<String>(getLabel("Topic"), Utils.TOPIC));
if(type <= 3)list.add(new SelectItemOption<String>(getLabel("Post"), Utils.POST));
return list;
}
private void setSearchOptions(int type) {
this.currentType = type;
getUIFormSelectBox(FIELD_SEARCHTYPE_SELECTBOX).setOptions(optionsType(type));
}
public void setSearchOptionsObjectType(String type) {
if (type.equals(Utils.FORUM)) {
setSearchOptions(1);
} else if (type.equals(Utils.TOPIC)) {
setSearchOptions(2);
} else if (type.equals(Utils.POST)) {
setSearchOptions(3);
} else {
setSearchOptions(0);
}
}
private boolean getIsMod() {
return (getUserProfile().getUserRole() < 2) ? true : false;
}
public void setSelectType(String type){
if (type.equals(Utils.FORUM)) {
this.isSearchForum = true;
this.isSearchTopic = false;
this.isSearchCate = false;
} else if (type.equals(Utils.TOPIC)) {
this.isSearchCate = false;
this.isSearchForum = false;
this.isSearchTopic = true;
} else if (type.equals(Utils.CATEGORY)) {
this.isSearchCate = true;
this.isSearchForum = false;
this.isSearchTopic = false;
} else {
this.isSearchCate = false;
this.isSearchForum = false;
this.isSearchTopic = false;
}
getUIFormSelectBox(FIELD_SEARCHTYPE_SELECTBOX).setValue(type);
}
public UIFormRadioBoxInput getUIFormRadioBoxInput(String name) {
return (UIFormRadioBoxInput) findComponentById(name);
}
private String checkValue(String input) throws Exception {
if (!ForumUtils.isEmpty(input)) {
try {
Integer.parseInt(input.trim());
return input.trim();
} catch (NumberFormatException e) {
return null;
}
} else
return null;
}
public void updateSelect(String selectField, String value) throws Exception {
UIFormStringInput fieldInput = getUIStringInput(selectField);
String values = fieldInput.getValue();
fieldInput.setValue(ForumUtils.updateMultiValues(value, values));
}
private Calendar getCalendar(UIFormDateTimeInput dateTimeInput, String faled) throws Exception {
Calendar calendar = dateTimeInput.getCalendar();
if (!ForumUtils.isEmpty(dateTimeInput.getValue())) {
if (calendar == null) {
warning("NameValidator.msg.erro-format-date", faled);
}
}
return calendar;
}
static public class SearchActionListener extends EventListener<UISearchForm> {
public void execute(Event<UISearchForm> event) throws Exception {
UISearchForm uiForm = event.getSource();
Log log = ExoLogger.getLogger(SearchActionListener.class);
String keyValue = uiForm.getUIStringInput(FIELD_SEARCHVALUE_INPUT).getValue();
keyValue = CommonUtils.encodeSpecialCharInSearchTerm(keyValue);
String type = uiForm.getUIFormSelectBox(FIELD_SEARCHTYPE_SELECTBOX).getValue();
String valueIn = uiForm.getUIFormRadioBoxInput(FIELD_SCOPE_RADIOBOX).getValue();
if (valueIn == null || valueIn.length() == 0)
valueIn = ForumEventQuery.VALUE_IN_ENTIRE;
String byUser = uiForm.getUIStringInput(FIELD_SEARCHUSER_INPUT).getValue();
String isLock = "all";
boolean isL = (Boolean) uiForm.getUICheckBoxInput(FIELD_ISLOCK_CHECKBOX).getValue();
boolean isUL = (Boolean) uiForm.getUICheckBoxInput(FIELD_ISUNLOCK_CHECKBOX).getValue();
if (isL && !isUL)
isLock = "true";
if (!isL && isUL)
isLock = "false";
String isClosed = "all";
String remain = ForumUtils.EMPTY_STR;
boolean isCl = (Boolean) uiForm.getUICheckBoxInput(FIELD_ISCLOSED_CHECKBOX).getValue();
boolean isOp = (Boolean) uiForm.getUICheckBoxInput(FIELD_ISOPEN_CHECKBOX).getValue();
if (uiForm.getIsMod()) {
if (isCl && !isOp)
isClosed = "true";
if (!isCl && isOp)
isClosed = "false";
} else {
if (type.equals(Utils.FORUM)) {
isClosed = "false";
} else if (type.equals(Utils.TOPIC)) {
isClosed = "false";
remain = "@exo:isActiveByForum='true'";
} else if (type.equals(Utils.POST))
remain = "@exo:isActiveByTopic='true'";
}
String topicCountMin = uiForm.getUISliderControl(FIELD_TOPICCOUNTMIN_SLIDER).getValue();
String postCountMin = uiForm.getUISliderControl(FIELD_POSTCOUNTMIN_SLIDER).getValue();
String viewCountMin = uiForm.getUISliderControl(FIELD_VIEWCOUNTMIN_SLIDER).getValue();
String moderator = uiForm.getUIStringInput(FIELD_MODERATOR_INPUT).getValue();
Calendar fromDateCreated = uiForm.getCalendar(uiForm.getUIFormDateTimeInput(FROMDATECREATED), FROMDATECREATED);
Calendar toDateCreated = uiForm.getCalendar(uiForm.getUIFormDateTimeInput(TODATECREATED), TODATECREATED);
Calendar fromDateCreatedLastPost = uiForm.getCalendar(uiForm.getUIFormDateTimeInput(FROMDATECREATEDLASTPOST), FROMDATECREATEDLASTPOST);
Calendar toDateCreatedLastPost = uiForm.getCalendar(uiForm.getUIFormDateTimeInput(TODATECREATEDLASTPOST), TODATECREATEDLASTPOST);
if (fromDateCreated != null && toDateCreated != null && fromDateCreated.after(toDateCreated)) {
uiForm.warning("UISearchForm.msg.erro-from-less-then-to");
return;
}
if (type.equals(Utils.TOPIC) &&
(fromDateCreatedLastPost != null && toDateCreatedLastPost != null && fromDateCreatedLastPost.after(toDateCreatedLastPost))) {
uiForm.warning("UISearchForm.msg.erro-from-less-then-to");
return;
}
ForumEventQuery eventQuery = new ForumEventQuery();
eventQuery.setListOfUser(UserHelper.getAllGroupAndMembershipOfUser(null));
eventQuery.setUserPermission(uiForm.getUserProfile().getUserRole());
eventQuery.setType(type);
eventQuery.setKeyValue(keyValue);
eventQuery.setValueIn(valueIn);
eventQuery.setPath(uiForm.path);
eventQuery.setByUser(byUser);
eventQuery.setIsLock(isLock);
eventQuery.setIsClose(isClosed);
eventQuery.setTopicCountMin(uiForm.checkValue(topicCountMin));
eventQuery.setPostCountMin(uiForm.checkValue(postCountMin));
eventQuery.setViewCountMin(uiForm.checkValue(viewCountMin));
eventQuery.setModerator(moderator);
eventQuery.setFromDateCreated(fromDateCreated);
eventQuery.setToDateCreated(toDateCreated);
eventQuery.setFromDateCreatedLastPost(fromDateCreatedLastPost);
eventQuery.setToDateCreatedLastPost(toDateCreatedLastPost);
UIForumPortlet forumPortlet = uiForm.getAncestorOfType(UIForumPortlet.class);
if (type.equals(Utils.CATEGORY)) {
eventQuery.getPathQuery(forumPortlet.getInvisibleCategories());
} else {
eventQuery.getPathQuery(new ArrayList<String>(forumPortlet.getInvisibleForums()));
}
if (eventQuery.getIsEmpty()) {
uiForm.warning("NameValidator.msg.erro-empty-search");
return;
}
eventQuery.setRemain(remain);
List<ForumSearchResult> list = null;
try {
list = uiForm.getForumService().getAdvancedSearch(eventQuery, forumPortlet.getInvisibleCategories(), new ArrayList<String>(forumPortlet.getInvisibleForums()));
} catch (Exception e) {
log.warn("\nGetting advance search fail:\n " + e.getCause());
uiForm.warning("UIQuickSearchForm.msg.failure");
return;
}
forumPortlet.updateIsRendered(ForumUtils.CATEGORIES);
UICategoryContainer categoryContainer = forumPortlet.getChild(UICategoryContainer.class);
categoryContainer.updateIsRender(true);
UICategories categories = categoryContainer.getChild(UICategories.class);
categories.setIsRenderChild(true);
UIForumListSearch listSearchEvent = categories.getChild(UIForumListSearch.class);
listSearchEvent.setListSearchEvent(keyValue, list, ForumUtils.FIELD_SEARCHFORUM_LABEL+type);
forumPortlet.getChild(UIBreadcumbs.class).setUpdataPath(ForumUtils.FIELD_EXOFORUM_LABEL);
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
}
}
static public class OnchangeActionListener extends EventListener<UISearchForm> {
public void execute(Event<UISearchForm> event) throws Exception {
UISearchForm uiForm = event.getSource();
String type = uiForm.getUIFormSelectBox(FIELD_SEARCHTYPE_SELECTBOX).getValue();
uiForm.getUIFormRadioBoxInput(FIELD_SCOPE_RADIOBOX).setValue(ForumEventQuery.VALUE_IN_ENTIRE);
uiForm.setSelectType(type);
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm);
}
}
static public class ResetFieldActionListener extends EventListener<UISearchForm> {
public void execute(Event<UISearchForm> event) throws Exception {
UISearchForm uiForm = event.getSource();
uiForm.getUIFormSelectBox(FIELD_SEARCHTYPE_SELECTBOX).setValue(Utils.CATEGORY);
uiForm.getUIFormRadioBoxInput(FIELD_SCOPE_RADIOBOX).setValue(ForumEventQuery.VALUE_IN_ENTIRE);
uiForm.getUIFormDateTimeInput(FROMDATECREATEDLASTPOST).setValue(null);
uiForm.getUIFormDateTimeInput(TODATECREATEDLASTPOST).setValue(null);
uiForm.getUICheckBoxInput(FIELD_ISLOCK_CHECKBOX).setValue(false);
uiForm.getUICheckBoxInput(FIELD_ISUNLOCK_CHECKBOX).setValue(false);
uiForm.getUICheckBoxInput(FIELD_ISCLOSED_CHECKBOX).setValue(false);
uiForm.getUICheckBoxInput(FIELD_ISOPEN_CHECKBOX).setValue(false);
uiForm.getUIStringInput(FIELD_MODERATOR_INPUT).setValue(ForumUtils.EMPTY_STR);
uiForm.getUIStringInput(FIELD_SEARCHVALUE_INPUT).setValue(ForumUtils.EMPTY_STR);
uiForm.getUIFormDateTimeInput(FROMDATECREATED).setValue(null);
uiForm.getUIFormDateTimeInput(TODATECREATED).setValue(null);
uiForm.getUIStringInput(FIELD_SEARCHUSER_INPUT).setValue(ForumUtils.EMPTY_STR);
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm);
}
}
static public class CancelActionListener extends EventListener<UISearchForm> {
public void execute(Event<UISearchForm> event) throws Exception {
UISearchForm uiForm = event.getSource();
UIForumPortlet forumPortlet = uiForm.getParent();
forumPortlet.renderForumHome();
event.getRequestContext().addUIComponentToUpdateByAjax(forumPortlet);
}
}
static public class CloseActionListener extends EventListener<UIUserSelect> {
public void execute(Event<UIUserSelect> event) throws Exception {
UIUserSelect uiUserSelector = event.getSource();
UIForumPortlet forumPortlet = uiUserSelector.getAncestorOfType(UIForumPortlet.class);
UIPopupAction popupAction = forumPortlet.getChild(UIPopupAction.class);
popupAction.removeChild(UIPopupContainer.class);
event.getRequestContext().addUIComponentToUpdateByAjax(popupAction);
}
}
static public class ClosePopupActionListener extends EventListener<UIPopupWindow> {
public void execute(Event<UIPopupWindow> event) throws Exception {
UIPopupWindow popupWindow = event.getSource();
UIForumPortlet forumPortlet = popupWindow.getAncestorOfType(UIForumPortlet.class);
UIPopupAction popupAction = forumPortlet.getChild(UIPopupAction.class);
popupAction.removeChild(UIPopupContainer.class);
event.getRequestContext().addUIComponentToUpdateByAjax(popupAction);
}
}
static public class AddActionListener extends EventListener<UIUserSelect> {
public void execute(Event<UIUserSelect> event) throws Exception {
UIUserSelect uiUserSelector = event.getSource();
String values = uiUserSelector.getSelectedUsers();
UIForumPortlet forumPortlet = uiUserSelector.getAncestorOfType(UIForumPortlet.class);
UIPopupAction popupAction = forumPortlet.getChild(UIPopupAction.class);
UISearchForm searchForm = forumPortlet.findFirstComponentOfType(UISearchForm.class);
String id = uiUserSelector.getPermisionType();
if (id.equals(FIELD_SEARCHUSER_INPUT)) {
UIFormStringInput searchUser = searchForm.getUIStringInput(FIELD_SEARCHUSER_INPUT);
String vls = searchUser.getValue();
if (!ForumUtils.isEmpty(vls)) {
values = values + ForumUtils.COMMA + vls;
values = ForumUtils.removeStringResemble(values.replaceAll(",,", ForumUtils.COMMA));
}
searchUser.setValue(values);
} else {
UIFormStringInput moderators = searchForm.getUIStringInput(FIELD_MODERATOR_INPUT);
String vls = moderators.getValue();
if (!ForumUtils.isEmpty(vls)) {
values = values + ForumUtils.COMMA + vls;
values = ForumUtils.removeStringResemble(values.replaceAll(",,", ForumUtils.COMMA));
}
moderators.setValue(values);
}
popupAction.removeChild(UIPopupContainer.class);
event.getRequestContext().addUIComponentToUpdateByAjax(popupAction);
event.getRequestContext().addUIComponentToUpdateByAjax(searchForm);
}
}
static public class AddValuesUserActionListener extends EventListener<UISearchForm> {
public void execute(Event<UISearchForm> event) throws Exception {
String id = event.getRequestContext().getRequestParameter(OBJECTID);
UISearchForm searchForm = event.getSource();
UIForumPortlet forumPortlet = searchForm.getAncestorOfType(UIForumPortlet.class);
UIPopupAction popupAction = forumPortlet.getChild(UIPopupAction.class).setRendered(true);
UIPopupContainer popupContainer = popupAction.createUIComponent(UIPopupContainer.class, null, null);
searchForm.showUIUserSelect(popupContainer, USER_SEARCH_POPUP_WINDOW_ID, id);
popupAction.addChild(popupContainer);
event.getRequestContext().addUIComponentToUpdateByAjax(popupAction);
}
}
}