/*
* 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.faq.webui.popup;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.Question;
import org.exoplatform.faq.service.Utils;
import org.exoplatform.faq.webui.FAQUtils;
import org.exoplatform.faq.webui.UIAnswersPortlet;
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.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;
/**
* Created by The eXo Platform SARL
* Author : Ha Mai
* ha.mai@exoplatform.com
* Apr 18, 2008 ,1:32:01 PM
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/templates/faq/webui/popup/UIAddRelationForm.gtmpl",
events = {
@EventConfig(listeners = UIAddRelationForm.SaveActionListener.class),
@EventConfig(listeners = UIAddRelationForm.CancelActionListener.class)
}
)
@SuppressWarnings("unused")
public class UIAddRelationForm extends BaseUIForm implements UIPopupComponent {
private String homeCategoryName = "";
private List<Question> listQuestion = new ArrayList<Question>();
private List<String> quesIdsSelect = new ArrayList<String>();
Map<String, List<Question>> mapQuestion_ = new HashMap<String, List<Question>>();
private String questionId_;
private FAQSetting faqSetting_ = new FAQSetting();
public void activate() throws Exception {
}
public void deActivate() throws Exception {
}
private List<String> listCateSelected = new ArrayList<String>();
private List<Cate> listCategory_ = new ArrayList<Cate>();
private static FAQService getFAQService() {
return (FAQService) PortalContainer.getInstance().getComponentInstanceOfType(FAQService.class);
}
private List<Cate> getListCate() {
return this.listCategory_;
}
public UIAddRelationForm() throws Exception {
setActions(new String[] { "Save", "Cancel" });
FAQUtils.getPorletPreference(faqSetting_);
getFAQService().getUserSetting(FAQUtils.getCurrentUser(), faqSetting_);
}
public void setFAQSetting(FAQSetting faqSetting) {
this.faqSetting_ = faqSetting;
}
public void setRelationed(List<String> listRelation) {
quesIdsSelect = listRelation;
try {
homeCategoryName = getFAQService().getCategoryNameOf(Utils.CATEGORY_HOME);
setListCate(Utils.CATEGORY_HOME);
initPage();
} catch (Exception e) {
log.error("Set Relationed is fall, exception: ", e);
}
}
public void setQuestionId(String questionId) {
this.questionId_ = questionId;
}
@SuppressWarnings("unchecked")
private void initPage() throws Exception {
List<String> listIds = new ArrayList<String>();
listIds.add(Utils.CATEGORY_HOME);
for (Cate cate : listCategory_) {
listIds.add(cate.getCategory().getId());
}
listQuestion.addAll(getFAQService().getQuickQuestionsByListCatetory(listIds, false));
UIFormCheckBoxInput<Boolean> checkQuestion;
for (Question question : listQuestion) {
if (!question.isApproved()) { continue ; }
mapQuestion_.get(question.getCategoryId()).add(question);
if (quesIdsSelect.contains(question.getId())) {
checkQuestion = new UIFormCheckBoxInput<Boolean>(question.getId(), question.getId(), true).setChecked(true);
} else {
checkQuestion = new UIFormCheckBoxInput<Boolean>(question.getId(), question.getId(), false);
}
if (question.getPath().equals(questionId_))
checkQuestion.setEnable(false);
addChild(checkQuestion);
}
}
private void setListCate(String path) throws Exception {
// List<Cate> listCate = new ArrayList<Cate>();
// String userName = FAQUtils.getCurrentUser();
/*
* List<String>userPrivates = null; if(userName != null){ userPrivates = FAQServiceUtils.getAllGroupAndMembershipOfUser(userName); }
*/
this.listCategory_.clear();
this.listCategory_.addAll(getFAQService().listingCategoryTree());
mapQuestion_.put(Utils.CATEGORY_HOME, new ArrayList<Question>());
for (Cate cat : listCategory_) {
mapQuestion_.put(cat.getCategory().getId(), new ArrayList<Question>());
}
}
private List<Question> getQuestions(String cateId) {
return mapQuestion_.get(cateId);
}
static public class SaveActionListener extends EventListener<UIAddRelationForm> {
public void execute(Event<UIAddRelationForm> event) throws Exception {
UIAddRelationForm addRelationForm = event.getSource();
UIResponseForm responseForm = addRelationForm.getAncestorOfType(UIAnswersPortlet.class).findFirstComponentOfType(UIResponseForm.class);
List<String> listQuestionPath = new ArrayList<String>();
List<String> listQuestionId = new ArrayList<String>();
for (Question question : addRelationForm.listQuestion) {
if (addRelationForm.getUIFormCheckBoxInput(question.getId()).isChecked()) {
listQuestionPath.add(question.getPath());
listQuestionId.add(question.getId());
}
}
responseForm.setListIdQuesRela(listQuestionId);
List<String> contents = getFAQService().getQuestionContents(listQuestionPath);
responseForm.setListRelationQuestion(contents);
event.getRequestContext().addUIComponentToUpdateByAjax(responseForm);
addRelationForm.cancelChildPopupAction();
}
}
static public class CancelActionListener extends EventListener<UIAddRelationForm> {
public void execute(Event<UIAddRelationForm> event) throws Exception {
event.getSource().cancelChildPopupAction();
}
}
}