/***************************************************************************
* 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.faq.webui.popup;
import java.util.ArrayList;
import java.util.List;
import javax.jcr.ItemExistsException;
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.webui.FAQUtils;
import org.exoplatform.faq.webui.UIAnswersContainer;
import org.exoplatform.faq.webui.UIAnswersPortlet;
import org.exoplatform.faq.webui.UIBreadcumbs;
import org.exoplatform.faq.webui.UICategories;
import org.exoplatform.faq.webui.UIQuestions;
import org.exoplatform.ks.common.webui.BaseEventListener;
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;
/**
* Created by The eXo Platform SARL
* Author : Hung Nguyen
* hung.nguyen@exoplatform.com
* Aus 01, 2007 2:48:18 PM
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/templates/faq/webui/popup/UIMoveCategoryForm.gtmpl",
events = {
@EventConfig(listeners = UIMoveCategoryForm.SaveActionListener.class),
@EventConfig(listeners = UIMoveCategoryForm.CancelActionListener.class)
}
)
public class UIMoveCategoryForm extends BaseUIForm implements UIPopupComponent {
private String categoryId_;
private FAQSetting faqSetting_;
private boolean isCateSelect = false;
private List<Cate> listCate = new ArrayList<Cate>();
private static FAQService faqService_ = (FAQService) PortalContainer.getInstance().getComponentInstanceOfType(FAQService.class);
public UIMoveCategoryForm() throws Exception {
}
private String getCategoryID() {
return categoryId_;
}
public void setCategoryID(String s) {
categoryId_ = s;
}
public void activate() throws Exception {
}
public void deActivate() throws Exception {
}
public List<Cate> getListCate() {
return this.listCate;
}
public void setIsCateSelect(boolean isCateSelect) {
this.isCateSelect = isCateSelect;
}
public void setFAQSetting(FAQSetting faqSetting) {
this.faqSetting_ = faqSetting;
}
public void setListCate() throws Exception {
listCate.clear();
List<Cate> temp = faqService_.listingCategoryTree();
for (Cate cat : temp) {
if (cat.getCategory().getPath().indexOf(categoryId_) < 0) {
listCate.add(cat);
}
}
}
static public class SaveActionListener extends BaseEventListener<UIMoveCategoryForm> {
public void onEvent(Event<UIMoveCategoryForm> event, UIMoveCategoryForm moveCategory, String destCategoryId) throws Exception {
UIAnswersPortlet answerPortlet = moveCategory.getAncestorOfType(UIAnswersPortlet.class);
String categoryId = moveCategory.getCategoryID();
try {
boolean canMove = moveCategory.faqSetting_.isAdmin();
if (!canMove)
canMove = faqService_.isCategoryModerator(destCategoryId, FAQUtils.getCurrentUser());
if (canMove) {
faqService_.moveCategory(categoryId, destCategoryId);
} else {
warning("UIQuestions.msg.can-not-move-category");
return;
}
if (moveCategory.isCateSelect) {
String tmp = moveCategory.categoryId_;
if (tmp.indexOf("/") > 0)
tmp = tmp.substring(0, tmp.lastIndexOf("/"));
UIAnswersContainer container = answerPortlet.findFirstComponentOfType(UIAnswersContainer.class);
UICategories uiCategories = container.findFirstComponentOfType(UICategories.class);
uiCategories.setPathCategory(tmp);
UIQuestions questions = container.getChild(UIQuestions.class);
questions.pageSelect = 0;
questions.backPath_ = "";
questions.setLanguage(FAQUtils.getDefaultLanguage());
try {
questions.viewAuthorInfor = faqService_.isViewAuthorInfo(tmp);
questions.setCategoryId(tmp);
questions.updateCurrentQuestionList();
questions.viewingQuestionId_ = "";
questions.updateCurrentLanguage();
} catch (Exception e) {
}
UIBreadcumbs breadcumbs = answerPortlet.findFirstComponentOfType(UIBreadcumbs.class);
breadcumbs.setUpdataPath(tmp);
}
moveCategory.isCateSelect = false;
} catch (ItemExistsException ie) {
warning("UIQuestions.msg.already-in-destination");
} catch (Exception e) {
moveCategory.log.warn("Can not move this category. Exception: " + e.getMessage());
warning("UIQuestions.msg.category-id-deleted");
}
event.getRequestContext().addUIComponentToUpdateByAjax(answerPortlet);
answerPortlet.cancelAction();
}
}
static public class CancelActionListener extends EventListener<UIMoveCategoryForm> {
public void execute(Event<UIMoveCategoryForm> event) throws Exception {
UIAnswersPortlet answerPortlet = event.getSource().getAncestorOfType(UIAnswersPortlet.class);
answerPortlet.cancelAction();
}
}
}