/*
* 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.List;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.faq.service.Category;
import org.exoplatform.faq.service.FAQService;
import org.exoplatform.faq.service.FAQSetting;
import org.exoplatform.faq.service.JCRPageList;
import org.exoplatform.faq.service.Question;
import org.exoplatform.faq.webui.FAQUtils;
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.UIPopupAction;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
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.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.UIFormTabPane;
/**
* Created by The eXo Platform SARL
* Author : Truong Nguyen
* truong.nguyen@exoplatform.com
* Oct 13, 2008, 11:30:44 AM
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/templates/faq/webui/popup/UIUserWatchManager.gtmpl",
events = {
@EventConfig(listeners = UIUserWatchManager.LinkActionListener.class),
@EventConfig(listeners = UIUserWatchManager.UnWatchActionListener.class, confirm = "UIUserWatchManager.msg.confirm-unwatch-category"),
@EventConfig(listeners = UIUserWatchManager.CancelActionListener.class)
}
)
public class UIUserWatchManager extends UIFormTabPane implements UIPopupComponent {
private FAQSetting faqSetting_ = null;
@SuppressWarnings("unused")
private UIAnswersPageIterator pageIteratorCate;
@SuppressWarnings("unused")
private JCRPageList pageListCate;
private UIAnswersPageIterator pageIteratorQues;
private UIAnswersPageIterator pageIteratorCates;
private JCRPageList pageListQues;
private JCRPageList pageListCates;
private String LIST_QUESTIONS_WATCHED = "listQuestionsWatch";
private String LIST_CATES_WATCHED = "listCatesWatch";
private int tabSelect = 0;
private String emailAddress;
static private Log log = ExoLogger.getLogger(UIWatchManager.class);
// private String[] tabs = new String[]{"watchCategoryTab", "watchQuestionTab"};
private static FAQService faqService_ = (FAQService) PortalContainer.getInstance().getComponentInstanceOfType(FAQService.class);
public UIUserWatchManager() throws Exception {
super("UIUswerWatchManager");
addChild(UIAnswersPageIterator.class, null, LIST_QUESTIONS_WATCHED);
addChild(UIAnswersPageIterator.class, null, LIST_CATES_WATCHED);
emailAddress = FAQUtils.getEmailUser(FAQUtils.getCurrentUser());
this.setActions(new String[] { "Cancel" });
}
public void activate() throws Exception {
}
public void deActivate() throws Exception {
}
public int getTabSelect() {
return tabSelect;
}
public String getEmailAddress() {
return emailAddress;
}
public List<Category> getListCategory() throws Exception {
return getListCategoriesWatch();
}
public String getCategoriesName(String categoryId) throws Exception {
return faqService_.getParentCategoriesName(categoryId);
}
public static String getSubString(String str, int max) {
if (!FAQUtils.isFieldEmpty(str)) {
int l = str.length();
if (l > max) {
str = str.substring(0, (max - 3));
int comma = str.lastIndexOf(",");
if (comma > 0)
str = str.substring(0, comma) + "...";
else
str = str + "...";
}
}
return str;
}
public void setFAQSetting(FAQSetting setting) {
this.faqSetting_ = setting;
}
private List<Category> getListCategoriesWatch() {
try {
if (pageListCates == null) {
pageListCates = faqService_.getWatchedCategoryByUser(FAQUtils.getCurrentUser());
pageListCates.setPageSize(5);
pageIteratorCates = this.getChildById(LIST_CATES_WATCHED);
pageIteratorCates.updatePageList(pageListCates);
}
long pageSelect = pageIteratorCates.getPageSelected();
List<Category> listCategories = new ArrayList<Category>();
listCategories.addAll(this.pageListCates.getPageResultCategoriesSearch(pageSelect, null));
if (listCategories.isEmpty()) {
UIAnswersPageIterator pageIterator = null;
while (listCategories.isEmpty() && pageSelect > 1) {
pageIterator = this.getChildById(LIST_CATES_WATCHED);
listCategories.addAll(this.pageListCates.getPageResultCategoriesSearch(--pageSelect, null));
pageIterator.setSelectPage(pageSelect);
}
}
return listCategories;
} catch (Exception e) {
log.error("Fail to get list of category watch: ", e);
return null;
}
}
@SuppressWarnings("unused")
private List<Question> getListQuestionsWatch() {
try {
if (pageListQues == null) {
pageListQues = faqService_.getListQuestionsWatch(faqSetting_, FAQUtils.getCurrentUser());
pageListQues.setPageSize(5);
pageIteratorQues = this.getChildById(LIST_QUESTIONS_WATCHED);
pageIteratorQues.updatePageList(pageListQues);
}
long pageSelect = pageIteratorQues.getPageSelected();
List<Question> listQuestion_ = new ArrayList<Question>();
listQuestion_.addAll(this.pageListQues.getPage(pageSelect, null));
if (listQuestion_.isEmpty()) {
UIAnswersPageIterator pageIterator = null;
while (listQuestion_.isEmpty() && pageSelect > 1) {
pageIterator = this.getChildById(LIST_QUESTIONS_WATCHED);
listQuestion_.addAll(this.pageListQues.getPage(--pageSelect, null));
pageIterator.setSelectPage(pageSelect);
}
}
return listQuestion_;
} catch (Exception e) {
log.error("fail to get list of question watch: " + e.getMessage(), e);
}
return null;
}
@SuppressWarnings("unused")
private long getTotalpages(String pageInteratorId) {
UIAnswersPageIterator pageIterator = this.getChildById(pageInteratorId);
try {
return pageIterator.getInfoPage().get(3);
} catch (Exception e) {
log.debug("Getting total page fail: ", e);
return 1;
}
}
static public class LinkActionListener extends EventListener<UIUserWatchManager> {
public void execute(Event<UIUserWatchManager> event) throws Exception {
UIUserWatchManager watchManager = event.getSource();
String categoryId = event.getRequestContext().getRequestParameter(OBJECTID);
UIAnswersPortlet uiPortlet = watchManager.getAncestorOfType(UIAnswersPortlet.class);
UIQuestions uiQuestions = uiPortlet.findFirstComponentOfType(UIQuestions.class);
if (!faqService_.isExisting(categoryId)) {
UIApplication uiApplication = watchManager.getAncestorOfType(UIApplication.class);
uiApplication.addMessage(new ApplicationMessage("UIQuestions.msg.category-id-deleted", null, ApplicationMessage.WARNING));
event.getRequestContext().addUIComponentToUpdateByAjax(uiApplication.getUIPopupMessages());
uiQuestions.setDefaultLanguage();
UIPopupAction popupAction = uiPortlet.getChild(UIPopupAction.class);
popupAction.deActivate();
event.getRequestContext().addUIComponentToUpdateByAjax(popupAction);
event.getRequestContext().addUIComponentToUpdateByAjax(uiPortlet);
return;
}
uiQuestions.setCategoryId(categoryId);
UIBreadcumbs breadcumbs = uiPortlet.findFirstComponentOfType(UIBreadcumbs.class);
UICategories categories = uiPortlet.findFirstComponentOfType(UICategories.class);
breadcumbs.setUpdataPath(categoryId);
categories.setPathCategory(categoryId);
event.getRequestContext().addUIComponentToUpdateByAjax(breadcumbs);
UIAnswersContainer fAQContainer = uiQuestions.getAncestorOfType(UIAnswersContainer.class);
event.getRequestContext().addUIComponentToUpdateByAjax(fAQContainer);
uiPortlet.cancelAction();
}
}
static public class UnWatchActionListener extends EventListener<UIUserWatchManager> {
public void execute(Event<UIUserWatchManager> event) throws Exception {
UIUserWatchManager watchManager = event.getSource();
String categoryId = event.getRequestContext().getRequestParameter(OBJECTID);
UIAnswersPortlet uiPortlet = watchManager.getAncestorOfType(UIAnswersPortlet.class);
if (!faqService_.isExisting(categoryId)) {
UIApplication uiApplication = watchManager.getAncestorOfType(UIApplication.class);
uiApplication.addMessage(new ApplicationMessage("UIQuestions.msg.category-id-deleted", null, ApplicationMessage.WARNING));
event.getRequestContext().addUIComponentToUpdateByAjax(uiApplication.getUIPopupMessages());
UIPopupAction popupAction = uiPortlet.getChild(UIPopupAction.class);
popupAction.deActivate();
event.getRequestContext().addUIComponentToUpdateByAjax(popupAction);
event.getRequestContext().addUIComponentToUpdateByAjax(uiPortlet);
return;
}
faqService_.unWatchCategory(categoryId, FAQUtils.getCurrentUser());
event.getRequestContext().addUIComponentToUpdateByAjax(watchManager);
}
}
static public class CancelActionListener extends EventListener<UIUserWatchManager> {
public void execute(Event<UIUserWatchManager> event) throws Exception {
UIUserWatchManager watchManager = event.getSource();
UIPopupAction uiPopupAction = watchManager.getAncestorOfType(UIPopupAction.class);
uiPopupAction.deActivate();
event.getRequestContext().addUIComponentToUpdateByAjax(uiPopupAction);
}
}
}