/***************************************************************************
* Copyright (C) 2003-2009 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.popup;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.forum.ForumUtils;
import org.exoplatform.forum.SettingPortletPreference;
import org.exoplatform.forum.service.Category;
import org.exoplatform.forum.service.Forum;
import org.exoplatform.forum.service.ForumService;
import org.exoplatform.forum.service.ForumServiceUtils;
import org.exoplatform.forum.service.UserProfile;
import org.exoplatform.forum.service.Utils;
import org.exoplatform.forum.webui.UIForumPortlet;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIApplication;
import org.exoplatform.webui.core.UIComponent;
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;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormCheckBoxInput;
/**
* Created by The eXo Platform SAS
* Author : Vu Duy Tu
* tu.duy@exoplatform.com
* 12 Feb 2009 - 03:59:49
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/templates/forum/webui/popup/UISettingEditModeForm.gtmpl",
events = {
@EventConfig(listeners = UISettingEditModeForm.SaveActionListener.class),
@EventConfig(listeners = UISettingEditModeForm.SelectTabActionListener.class)
}
)
@SuppressWarnings( { "unused", "unchecked" })
public class UISettingEditModeForm extends UIForm implements UIPopupComponent {
private UserProfile userProfile;
public static final String FIELD_SCOPED_TAB = "Scoped";
public static final String FIELD_SHOW_HIDDEN_TAB = "EnabledPanel";
public static final String FIELD_FORUM_PREFERENCE_TAB = "ForumPreference";
public static final String FIELD_ISFORUMJUMP_CHECKBOX = "isShowForumJump";
public static final String FIELD_ISPOLL_CHECKBOX = "IsShowPoll";
public static final String FIELD_ISMODERATOR_CHECKBOX = "isShowModerator";
public static final String FIELD_ISQUICKREPLY_CHECKBOX = "isShowQuickReply";
public static final String FIELD_ISICONSLEGEND_CHECKBOX = "isShowIconsLegend";
public static final String FIELD_ISRULES_CHECKBOX = "isShowRules";
public static final String FIELD_ISSTATISTIC_CHECKBOX = "isShowStatistic";
public static final String FIELD_ISUSEAJAX_CHECKBOX = "isUseAjax";
private boolean isSave = false;
private int tabId = 0;
private static List<String> listCategoryinv = new ArrayList<String>();
private static List<String> listforuminv = new ArrayList<String>();
private SettingPortletPreference portletPreference;
public UISettingEditModeForm() {
UIForumInputWithActions Scoped = new UIForumInputWithActions(FIELD_SCOPED_TAB);
UIForumInputWithActions EnabledPanel = new UIForumInputWithActions(FIELD_SHOW_HIDDEN_TAB);
UIForumInputWithActions ForumPreference = new UIForumInputWithActions(FIELD_FORUM_PREFERENCE_TAB);
UIFormCheckBoxInput<Boolean> isShowForumJump = new UIFormCheckBoxInput<Boolean>(FIELD_ISFORUMJUMP_CHECKBOX, FIELD_ISFORUMJUMP_CHECKBOX, true);
UIFormCheckBoxInput<Boolean> IsShowPoll = new UIFormCheckBoxInput<Boolean>(FIELD_ISPOLL_CHECKBOX, FIELD_ISPOLL_CHECKBOX, true);
UIFormCheckBoxInput<Boolean> isShowModerator = new UIFormCheckBoxInput<Boolean>(FIELD_ISMODERATOR_CHECKBOX, FIELD_ISMODERATOR_CHECKBOX, true);
UIFormCheckBoxInput<Boolean> isShowQuickReply = new UIFormCheckBoxInput<Boolean>(FIELD_ISQUICKREPLY_CHECKBOX, FIELD_ISQUICKREPLY_CHECKBOX, true);
UIFormCheckBoxInput<Boolean> isShowIconsLegend = new UIFormCheckBoxInput<Boolean>(FIELD_ISICONSLEGEND_CHECKBOX, FIELD_ISICONSLEGEND_CHECKBOX, true);
UIFormCheckBoxInput<Boolean> isShowRules = new UIFormCheckBoxInput<Boolean>(FIELD_ISRULES_CHECKBOX, FIELD_ISRULES_CHECKBOX, true);
UIFormCheckBoxInput<Boolean> isShowStatistic = new UIFormCheckBoxInput<Boolean>(FIELD_ISSTATISTIC_CHECKBOX, FIELD_ISSTATISTIC_CHECKBOX, true);
UIFormCheckBoxInput<Boolean> isUseAjax = new UIFormCheckBoxInput<Boolean>(FIELD_ISUSEAJAX_CHECKBOX, FIELD_ISUSEAJAX_CHECKBOX, true);
EnabledPanel.addUIFormInput(isShowForumJump);
EnabledPanel.addUIFormInput(IsShowPoll);
EnabledPanel.addUIFormInput(isShowModerator);
EnabledPanel.addUIFormInput(isShowQuickReply);
EnabledPanel.addUIFormInput(isShowIconsLegend);
EnabledPanel.addUIFormInput(isShowRules);
EnabledPanel.addUIFormInput(isShowStatistic);
ForumPreference.addUIFormInput(isUseAjax);
addUIFormInput(Scoped);
addUIFormInput(EnabledPanel);
addUIFormInput(ForumPreference);
setActions(new String[] { "Save" });
}
public void setInitComponent() throws Exception {
UIForumInputWithActions EnabledPanel = getChildById(FIELD_SHOW_HIDDEN_TAB);
UIForumInputWithActions ForumPreference = getChildById(FIELD_FORUM_PREFERENCE_TAB);
portletPreference = ForumUtils.getPorletPreference();
EnabledPanel.getUIFormCheckBoxInput(FIELD_ISFORUMJUMP_CHECKBOX).setChecked(portletPreference.isShowForumJump());
EnabledPanel.getUIFormCheckBoxInput(FIELD_ISPOLL_CHECKBOX).setChecked(portletPreference.isShowPoll());
EnabledPanel.getUIFormCheckBoxInput(FIELD_ISQUICKREPLY_CHECKBOX).setChecked(portletPreference.isShowQuickReply());
EnabledPanel.getUIFormCheckBoxInput(FIELD_ISICONSLEGEND_CHECKBOX).setChecked(portletPreference.isShowIconsLegend());
EnabledPanel.getUIFormCheckBoxInput(FIELD_ISRULES_CHECKBOX).setChecked(portletPreference.isShowRules());
EnabledPanel.getUIFormCheckBoxInput(FIELD_ISSTATISTIC_CHECKBOX).setChecked(portletPreference.isShowStatistics());
EnabledPanel.getUIFormCheckBoxInput(FIELD_ISMODERATOR_CHECKBOX).setChecked(portletPreference.isShowModerators());
ForumPreference.getUIFormCheckBoxInput(FIELD_ISUSEAJAX_CHECKBOX).setChecked(portletPreference.isUseAjax());
}
public void setUserProfile(UserProfile userProfile) throws Exception {
setInitComponent();
this.userProfile = userProfile;
this.isSave = false;
}
private List<String> getListInValus(String value) throws Exception {
List<String> list = new ArrayList<String>();
if (!ForumUtils.isEmpty(value)) {
list.addAll(Arrays.asList(ForumUtils.addStringToString(value, value)));
}
return list;
}
private boolean tabIsSelected(int tabId) {
if (this.tabId == tabId)
return true;
else
return false;
}
public void activate() throws Exception {
}
public void deActivate() throws Exception {
}
private List<Category> getCategoryList() throws Exception {
List<Category> categoryList = new ArrayList<Category>();
try {
ForumService forumService = (ForumService) ExoContainerContext.getCurrentContainer().getComponentInstanceOfType(ForumService.class);
String userId = userProfile.getUserId();
if (userProfile.getUserRole() > 0) {
for (Category category : forumService.getCategories()) {
String[] uesrs = category.getUserPrivate();
if (uesrs != null && uesrs.length > 0 && !uesrs[0].equals(" ")) {
if (ForumServiceUtils.hasPermission(uesrs, userId)) {
categoryList.add(category);
}
} else {
categoryList.add(category);
}
}
} else {
categoryList.addAll(forumService.getCategories());
}
} catch (Exception e) {
}
if (!isSave) {
listCategoryinv = ((UIForumPortlet) this.getParent()).getInvisibleCategories();
}
for (Category category : categoryList) {
String categoryId = category.getId();
boolean isCheck = false;
if (listCategoryinv.contains(categoryId) || listCategoryinv.isEmpty())
isCheck = true;
if (getUIFormCheckBoxInput(categoryId) != null) {
getUIFormCheckBoxInput(categoryId).setChecked(isCheck);
} else {
UIFormCheckBoxInput boxInput = new UIFormCheckBoxInput(categoryId, categoryId, isCheck);
boxInput.setChecked(isCheck);
addUIFormInput(boxInput);
}
}
return categoryList;
}
private List<Forum> getForumList(String categoryId) throws Exception {
List<Forum> forumList = null;
String strQuery = ForumUtils.EMPTY_STR;
if (this.userProfile.getUserRole() > 0)
strQuery = "(@exo:isClosed='false') or (exo:moderators='" + this.userProfile.getUserId() + "')";
try {
ForumService forumService = (ForumService) ExoContainerContext.getCurrentContainer().getComponentInstanceOfType(ForumService.class);
forumList = forumService.getForums(categoryId, strQuery);
} catch (Exception e) {
forumList = new ArrayList<Forum>();
}
if (!isSave)
listforuminv = ((UIForumPortlet) this.getParent()).getInvisibleForums();
for (Forum forum : forumList) {
String forumId = forum.getId();
boolean isCheck = false;
if (listforuminv.contains(forumId) || listCategoryinv.isEmpty())
isCheck = true;
if (getUIFormCheckBoxInput(forumId) != null) {
getUIFormCheckBoxInput(forumId).setChecked(isCheck);
} else {
UIFormCheckBoxInput boxInput = new UIFormCheckBoxInput(forumId, forumId, isCheck);
boxInput.setChecked(isCheck);
addUIFormInput(boxInput);
}
}
return forumList;
}
static public class SaveActionListener extends EventListener<UISettingEditModeForm> {
public void execute(Event<UISettingEditModeForm> event) throws Exception {
UISettingEditModeForm editModeForm = event.getSource();
List<UIComponent> children = editModeForm.getChildren();
String listCategoryId = ForumUtils.EMPTY_STR;
String listForumId = ForumUtils.EMPTY_STR;
// int i = 0;
for (UIComponent child : children) {
if (child instanceof UIFormCheckBoxInput) {
if (((UIFormCheckBoxInput) child).isChecked()) {
if (child.getId().indexOf(Utils.CATEGORY) >= 0) {
if (ForumUtils.isEmpty(listCategoryId))
listCategoryId = child.getId();
else
listCategoryId = listCategoryId + ForumUtils.COMMA + child.getId();
} else {
if (ForumUtils.isEmpty(listForumId))
listForumId = child.getId();
else
listForumId = listForumId + ForumUtils.COMMA + child.getId();
}
// ++i;
}
}
}
UIForumInputWithActions EnabledPanel = editModeForm.getChildById(FIELD_SHOW_HIDDEN_TAB);
editModeForm.portletPreference.setShowForumJump((Boolean) EnabledPanel.getUIFormCheckBoxInput(FIELD_ISFORUMJUMP_CHECKBOX).getValue());
editModeForm.portletPreference.setShowPoll((Boolean) EnabledPanel.getUIFormCheckBoxInput(FIELD_ISPOLL_CHECKBOX).getValue());
editModeForm.portletPreference.setShowQuickReply((Boolean) EnabledPanel.getUIFormCheckBoxInput(FIELD_ISQUICKREPLY_CHECKBOX).getValue());
editModeForm.portletPreference.setShowIconsLegend((Boolean) EnabledPanel.getUIFormCheckBoxInput(FIELD_ISICONSLEGEND_CHECKBOX).getValue());
editModeForm.portletPreference.setShowRules((Boolean) EnabledPanel.getUIFormCheckBoxInput(FIELD_ISRULES_CHECKBOX).getValue());
editModeForm.portletPreference.setShowStatistics((Boolean) EnabledPanel.getUIFormCheckBoxInput(FIELD_ISSTATISTIC_CHECKBOX).getValue());
editModeForm.portletPreference.setShowModerators((Boolean) EnabledPanel.getUIFormCheckBoxInput(FIELD_ISMODERATOR_CHECKBOX).getValue());
UIApplication uiApp = editModeForm.getAncestorOfType(UIApplication.class);
UIForumInputWithActions ForumPreference = editModeForm.getChildById(FIELD_FORUM_PREFERENCE_TAB);
editModeForm.portletPreference.setUseAjax((Boolean) ForumPreference.getUIFormCheckBoxInput(FIELD_ISUSEAJAX_CHECKBOX).getValue());
try {
editModeForm.isSave = true;
listCategoryinv = editModeForm.getListInValus(listCategoryId);
listforuminv = editModeForm.getListInValus(listForumId);
editModeForm.portletPreference.setInvisibleCategories(listCategoryinv);
editModeForm.portletPreference.setInvisibleForums(listforuminv);
ForumUtils.savePortletPreference(editModeForm.portletPreference);
((UIForumPortlet) editModeForm.getParent()).loadPreferences();
Object[] args = { ForumUtils.EMPTY_STR };
uiApp.addMessage(new ApplicationMessage("UIForumPortlet.msg.save-successfully", args, ApplicationMessage.INFO));
event.getRequestContext().addUIComponentToUpdateByAjax(uiApp.getUIPopupMessages());
} catch (Exception e) {
Object[] args = { ForumUtils.EMPTY_STR };
uiApp.addMessage(new ApplicationMessage("UIForumPortlet.msg.save-fail", args, ApplicationMessage.INFO));
event.getRequestContext().addUIComponentToUpdateByAjax(uiApp.getUIPopupMessages());
}
}
}
static public class SelectTabActionListener extends EventListener<UISettingEditModeForm> {
public void execute(Event<UISettingEditModeForm> event) throws Exception {
String id = event.getRequestContext().getRequestParameter(OBJECTID);
UISettingEditModeForm editModeForm = event.getSource();
if (editModeForm.tabId == 0) {
String listCategoryId = ForumUtils.EMPTY_STR;
String listForumId = ForumUtils.EMPTY_STR;
List<UIComponent> children = editModeForm.getChildren();
for (UIComponent child : children) {
if (child instanceof UIFormCheckBoxInput) {
if (((UIFormCheckBoxInput) child).isChecked()) {
if (child.getId().indexOf(Utils.CATEGORY) >= 0) {
if (ForumUtils.isEmpty(listCategoryId))
listCategoryId = child.getId();
else
listCategoryId = listCategoryId + ForumUtils.COMMA + child.getId();
} else {
if (ForumUtils.isEmpty(listForumId))
listForumId = child.getId();
else
listForumId = listForumId + ForumUtils.COMMA + child.getId();
}
}
}
}
listCategoryinv = editModeForm.getListInValus(listCategoryId);
listforuminv = editModeForm.getListInValus(listForumId);
editModeForm.isSave = true;
}
editModeForm.tabId = Integer.parseInt(id);
event.getRequestContext().addUIComponentToUpdateByAjax(editModeForm.getParent());
}
}
}