/***************************************************************************
* 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 org.exoplatform.container.PortalContainer;
import org.exoplatform.faq.service.FAQService;
import org.exoplatform.faq.service.JCRPageList;
import org.exoplatform.faq.service.Watch;
import org.exoplatform.faq.webui.UIAnswersContainer;
import org.exoplatform.faq.webui.UIAnswersPageIterator;
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.ks.common.webui.UIPopupAction;
import org.exoplatform.ks.common.webui.UIPopupContainer;
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 : Truong Nguyen
* truong.nguyen@exoplatform.com
* May 21, 2008, 10:39:12 AM
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/templates/faq/webui/popup/UIWatchManager.gtmpl",
events = {
@EventConfig(listeners = UIWatchManager.OpenCategoryActionListener.class),
@EventConfig(listeners = UIWatchManager.EditEmailActionListener.class),
@EventConfig(listeners = UIWatchManager.DeleteEmailActionListener.class, confirm = "UIWatchManager.msg.confirm-delete-watch"),
@EventConfig(listeners = UIWatchManager.CancelActionListener.class)
}
)
public class UIWatchManager extends BaseUIForm implements UIPopupComponent {
private String categoryId_ = "";
private static String ADD = "add";
private List<Watch> listWatchs_ = new ArrayList<Watch>();
private String LIST_EMAILS_WATCH = "listEmailsWatch";
private UIAnswersPageIterator pageIterator;
private JCRPageList pageList;
public long curentPage_ = 1;
private static FAQService faqService_ = (FAQService) PortalContainer.getInstance().getComponentInstanceOfType(FAQService.class);
public UIWatchManager() throws Exception {
addChild(UIAnswersPageIterator.class, null, LIST_EMAILS_WATCH);
this.setActions(new String[] { "Cancel" });
}
public void activate() throws Exception {
}
public void deActivate() throws Exception {
}
public String getCategoryID() {
return categoryId_;
}
public void setCategoryID(String s) throws Exception {
this.categoryId_ = s;
this.listWatchs_ = faqService_.getWatchByCategory(categoryId_);
try {
pageList = faqService_.getListMailInWatch(this.categoryId_);
pageList.setPageSize(5);
pageIterator = this.getChildById(LIST_EMAILS_WATCH);
pageIterator.updatePageList(pageList);
} catch (Exception e) {
log.error("Can not get category by categoryId, exception: " + e.getMessage());
}
}
public void setCurentPage(long page) {
this.curentPage_ = page;
}
public List<String> getListMails(List<Watch> listWatchs) {
List<String> listEmails = new ArrayList<String>();
for (Watch watch : listWatchs) {
listEmails.add(watch.getEmails());
}
return listEmails;
}
@SuppressWarnings("unused")
private long getTotalpages(String pageInteratorId) {
UIAnswersPageIterator pageIterator = this.getChildById(LIST_EMAILS_WATCH);
try {
return pageIterator.getInfoPage().get(3);
} catch (Exception e) {
log.debug("Getting total page fail: ", e);
return 1;
}
}
@SuppressWarnings("unused")
private List<Watch> getListWatch() throws Exception {
return this.listWatchs_;
}
static public class EditEmailActionListener extends BaseEventListener<UIWatchManager> {
public void onEvent(Event<UIWatchManager> event, UIWatchManager watchManager, String user) throws Exception {
UIPopupContainer popupContainer = watchManager.getParent();
UIWatchForm watchForm = openPopup(popupContainer, UIWatchForm.class, 450, 0);
watchForm.setCategoryID(watchManager.getCategoryID());
if (!user.equals(ADD)) {
for (Watch watch : watchManager.listWatchs_) {
if (watch.getUser().equals(user)) {
watchForm.setWatch(watch);
break;
}
}
}
}
}
static public class OpenCategoryActionListener extends BaseEventListener<UIWatchManager> {
public void onEvent(Event<UIWatchManager> event, UIWatchManager watchManager, String categoryId) throws Exception {
UIAnswersPortlet uiPortlet = watchManager.getAncestorOfType(UIAnswersPortlet.class);
UIQuestions uiQuestions = uiPortlet.findFirstComponentOfType(UIQuestions.class);
uiQuestions.setCategoryId(categoryId);
uiQuestions.setDefaultLanguage();
uiQuestions.updateCurrentQuestionList();
UICategories categories = uiPortlet.findFirstComponentOfType(UICategories.class);
categories.setPathCategory(categoryId);
UIBreadcumbs breadcumbs = uiPortlet.findFirstComponentOfType(UIBreadcumbs.class);
breadcumbs.setUpdataPath(categoryId);
uiPortlet.cancelAction();
event.getRequestContext().addUIComponentToUpdateByAjax(breadcumbs);
event.getRequestContext().addUIComponentToUpdateByAjax(uiQuestions.getAncestorOfType(UIAnswersContainer.class));
}
}
static public class DeleteEmailActionListener extends BaseEventListener<UIWatchManager> {
public void onEvent(Event<UIWatchManager> event, UIWatchManager watchManager, String user) throws Exception {
watchManager.curentPage_ = watchManager.pageIterator.getPageSelected();
faqService_.deleteCategoryWatch(watchManager.getCategoryID(), user);
watchManager.setCategoryID(watchManager.getCategoryID());
UIAnswersPortlet uiPortlet = watchManager.getAncestorOfType(UIAnswersPortlet.class);
event.getRequestContext().addUIComponentToUpdateByAjax(uiPortlet);
}
}
static public class CancelActionListener extends EventListener<UIWatchManager> {
public void execute(Event<UIWatchManager> event) throws Exception {
UIWatchManager watchManager = event.getSource();
UIAnswersPortlet portlet = watchManager.getAncestorOfType(UIAnswersPortlet.class);
UIPopupAction popupAction = portlet.getChild(UIPopupAction.class);
popupAction.deActivate();
event.getRequestContext().addUIComponentToUpdateByAjax(popupAction);
}
}
}