/***************************************************************************
* 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.faq.webui.popup;
import java.util.ArrayList;
import java.util.List;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.faq.service.Cate;
import org.exoplatform.faq.service.FAQService;
import org.exoplatform.faq.service.FAQSetting;
import org.exoplatform.faq.service.Utils;
import org.exoplatform.faq.webui.FAQUtils;
import org.exoplatform.ks.common.webui.BaseUIForm;
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.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.UIFormCheckBoxInput;
import org.exoplatform.webui.form.UIFormInputWithActions;
import org.exoplatform.webui.form.UIFormTextAreaInput;
/**
* Created by The eXo Platform SAS
* Author : Vu Duy Tu
* tu.duy@exoplatform.com
* Jun 30, 2009 - 6:57:35 AM
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/templates/faq/webui/popup/UIFAQSettingForm.gtmpl",
events = {
@EventConfig(listeners = UIFAQSettingForm.SaveActionListener.class),
@EventConfig(listeners = UIFAQSettingForm.SelectTabActionListener.class)
}
)
@SuppressWarnings( { "unchecked", "unused" })
public class UIFAQSettingForm extends BaseUIForm implements UIPopupComponent {
public static final String SELECT_CATEGORY_TAB = "SelectCategoryTab";
public static final String EDIT_TEMPLATE_TAB = "EditTemplateTab";
public static final String PREFERENCE_TAB = "PreferenceTab";
public static final String FIELD_TEMPLATE_TEXTARE = "ContentTemplate";
public static final String FIELD_USEAJAX_CHECKBOX = "UseAjax";
private FAQSetting faqSetting_;
private List<Cate> listCate = new ArrayList<Cate>();
private FAQService faqService_;
private int id_ = 0;
private boolean useAjax = false;
private List<String> categoriesId = new ArrayList<String>();
private String homeCategoryName = "";
public UIFAQSettingForm() throws Exception {
faqService_ = (FAQService) PortalContainer.getInstance().getComponentInstanceOfType(FAQService.class);
UIFormInputWithActions selectCategoryTab = new UIFormInputWithActions(SELECT_CATEGORY_TAB);
UIFormInputWithActions editTemplateTab = new UIFormInputWithActions(EDIT_TEMPLATE_TAB);
UIFormInputWithActions preferenceTab = new UIFormInputWithActions(PREFERENCE_TAB);
UIFormTextAreaInput textAreaInput = new UIFormTextAreaInput(FIELD_TEMPLATE_TEXTARE, FIELD_TEMPLATE_TEXTARE, null);
editTemplateTab.addUIFormInput(textAreaInput);
homeCategoryName = faqService_.getCategoryNameOf(Utils.CATEGORY_HOME);
initSettingForm();
UIFormCheckBoxInput<Boolean> checkBoxInput = null;
for (Cate cate : listCate) {
checkBoxInput = new UIFormCheckBoxInput<Boolean>(cate.getCategory().getId(), cate.getCategory().getId(), false);
checkBoxInput.setChecked(cate.getCategory().isView());
selectCategoryTab.addChild(checkBoxInput);
}
UIFormCheckBoxInput<Boolean> useAjaxCheckBox = new UIFormCheckBoxInput<Boolean>(FIELD_USEAJAX_CHECKBOX, FIELD_USEAJAX_CHECKBOX, false);
useAjaxCheckBox.setChecked(useAjax);
preferenceTab.addChild(useAjaxCheckBox);
addUIFormInput(selectCategoryTab);
addUIFormInput(editTemplateTab);
addUIFormInput(preferenceTab);
setTemplateEdit();
this.setActions(new String[] { "Save" });
}
public List<String> getCategoriesId() {
return categoriesId;
}
private boolean getIsSelected(int id) {
if (this.id_ == id)
return true;
return false;
}
private void setTemplateEdit() throws Exception {
byte[] data = faqService_.getTemplate();
String template = new String(data);
if (FAQUtils.isFieldEmpty(template)) {
// set default
}
UIFormInputWithActions withActions = this.getChildById(EDIT_TEMPLATE_TAB);
withActions.getUIFormTextAreaInput(FIELD_TEMPLATE_TEXTARE).setValue(template);
}
private List<Cate> getListCate() {
return this.listCate;
}
public void initSettingForm() throws Exception {
categoriesId = FAQUtils.getCategoriesIdFAQPortlet();
useAjax = FAQUtils.getUseAjaxFAQPortlet();
this.listCate.addAll(faqService_.listingCategoryTree());
this.faqSetting_ = new FAQSetting();
String orderType = faqSetting_.getOrderType();
if (orderType == null || orderType.equals("asc"))
faqSetting_.setOrderType("desc");
else
faqSetting_.setOrderType("asc");
}
public void activate() throws Exception {
}
public void deActivate() throws Exception {
}
private List<String> getCheckedId() throws Exception {
List<String> list = new ArrayList<String>();
UIFormInputWithActions selectCateTab = getChildById(SELECT_CATEGORY_TAB);
List<UIComponent> children = selectCateTab.getChildren();
for (UIComponent child : children) {
if (child instanceof UIFormCheckBoxInput) {
if (((UIFormCheckBoxInput) child).isChecked()) {
list.add(child.getId());
}
}
}
UIFormInputWithActions withActions = getChildById(PREFERENCE_TAB);
UIFormCheckBoxInput useAjaxCheckBox = withActions.getUIFormCheckBoxInput(FIELD_USEAJAX_CHECKBOX);
useAjax = useAjaxCheckBox.isChecked();
return list;
}
static public class SaveActionListener extends EventListener<UIFAQSettingForm> {
public void execute(Event<UIFAQSettingForm> event) throws Exception {
UIFAQSettingForm uiform = event.getSource();
if (uiform.id_ == 1) {
UIFormInputWithActions withActions = uiform.getChildById(EDIT_TEMPLATE_TAB);
String textAre = withActions.getUIFormTextAreaInput(FIELD_TEMPLATE_TEXTARE).getValue();
if (FAQUtils.isFieldEmpty(textAre)) {
uiform.warning("UIViewerSettingForm.msg.ContentTemplateEmpty");
return;
} else {
uiform.faqService_.saveTemplate(textAre);
}
uiform.setTemplateEdit();
} else {
uiform.categoriesId = uiform.getCheckedId();
FAQUtils.saveFAQPortletPreference(uiform.categoriesId, uiform.useAjax);
}
event.getRequestContext().addUIComponentToUpdateByAjax(uiform);
}
}
static public class SelectTabActionListener extends EventListener<UIFAQSettingForm> {
public void execute(Event<UIFAQSettingForm> event) throws Exception {
String id = event.getRequestContext().getRequestParameter(OBJECTID);
UIFAQSettingForm uiform = event.getSource();
uiform.id_ = Integer.parseInt(id);
if (uiform.id_ >= 1) {
uiform.categoriesId = uiform.getCheckedId();
}
event.getRequestContext().addUIComponentToUpdateByAjax(uiform);
}
}
}