UIPollManagement.java
/***************************************************************************
* Copyright (C) 2003-2010 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.poll.webui;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.portlet.PortletPreferences;
import org.exoplatform.commons.utils.ListAccessImpl;
import org.exoplatform.commons.utils.SerializablePageList;
import org.exoplatform.commons.utils.StringCommonUtils;
import org.exoplatform.forum.common.webui.UIPopupAction;
import org.exoplatform.forum.common.webui.UIPopupContainer;
import org.exoplatform.poll.Utils;
import org.exoplatform.poll.service.Poll;
import org.exoplatform.poll.webui.popup.UIPollForm;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.application.portlet.PortletRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIGrid;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.core.model.SelectItemOption;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIFormSelectBox;
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/templates/poll/webui/UIPollManagement.gtmpl",
events = {
@EventConfig(listeners = UIPollManagement.EditActionListener.class),
@EventConfig(listeners = UIPollManagement.DeleteActionListener.class),
@EventConfig(listeners = UIPollManagement.AddPollActionListener.class),
@EventConfig(listeners = UIPollManagement.SaveActionListener.class)
}
)
public class UIPollManagement extends BasePollForm {
public static final String FIELD_SELECT_POLL_SELECTBOX = "selectPoll";
public static String[] BEAN_FIELD = { "question", "votes", "lastVote", "expire" };
private static String[] ACTION = { "Edit", "Delete" };
private String[] dateUnit = new String[] { "Never", "Closed", "day(s)", "hour(s)", "minutes" };
private Map<String, Poll> mapPoll = new HashMap<String, Poll>();
private UIFormSelectBox selectPoll;
public UIPollManagement() throws Exception {
if (this.getId() == null)
this.setId("UIPollManagement");
UIGrid categoryList = addChild(UIGrid.class, null, "PollManagementList");
categoryList.configure("id", BEAN_FIELD, ACTION);
categoryList.getUIPageIterator().setId("PollManagementIterator");
setActions(new String[] { "AddPoll", "Save" });
selectPoll = new UIFormSelectBox(FIELD_SELECT_POLL_SELECTBOX, FIELD_SELECT_POLL_SELECTBOX, new ArrayList<SelectItemOption<String>>());
addUIFormInput(selectPoll);
dateUnit = new String[] { getLabel("Never"), getLabel("Closed"), getLabel("day"), getLabel("hour"), getLabel("minutes") };
}
public long getCurrentPage() {
return getChild(UIGrid.class).getUIPageIterator().getCurrentPage();
}
public long getAvailablePage() {
return getChild(UIGrid.class).getUIPageIterator().getAvailablePage();
}
public void setCurrentPage(int page) throws Exception {
getChild(UIGrid.class).getUIPageIterator().setCurrentPage(page);
}
public void updateGrid() throws Exception {
List<Poll> polls = getPollService().getPagePoll();
List<SelectItemOption<String>> list = new ArrayList<SelectItemOption<String>>();
mapPoll.clear();
for (Poll poll : polls) {
if (poll.getIsClosed())
poll.setExpire(Utils.getExpire(-1, poll.getModifiedDate(), dateUnit));
else
poll.setExpire(Utils.getExpire(poll.getTimeOut(), poll.getModifiedDate(), dateUnit));
list.add(new SelectItemOption<String>(poll.getQuestion(), poll.getId()));
String question = StringCommonUtils.decodeSpecialCharToHTMLnumber(poll.getQuestion());
poll.setQuestion(question);
mapPoll.put(poll.getId(), poll);
}
selectPoll.setOptions(list);
if (!polls.isEmpty()) {
PortletRequestContext pcontext = (PortletRequestContext) WebuiRequestContext.getCurrentInstance();
PortletPreferences portletPref = pcontext.getRequest().getPreferences();
selectPoll.setValue(portletPref.getValue(Utils.POLL_ID_SHOW, polls.get(0).getId()));
}
UIGrid uiGrid = getChild(UIGrid.class);
uiGrid.getUIPageIterator().setPageList(new SerializablePageList<Poll>(new ListAccessImpl<Poll>(Poll.class, polls), 10));
}
static public class EditActionListener extends EventListener<UIPollManagement> {
public void execute(Event<UIPollManagement> event) throws Exception {
String pollId = event.getRequestContext().getRequestParameter(OBJECTID);
UIPollManagement pollManagement = event.getSource();
Poll poll = pollManagement.mapPoll.get(pollId);
UIPollPortlet pollPortlet = pollManagement.getParent();
UIPopupAction popupAction = pollPortlet.getChild(UIPopupAction.class);
UIPopupContainer popupContainer = popupAction.createUIComponent(UIPopupContainer.class, null, null);
UIPollForm pollForm = popupContainer.getChild(UIPollForm.class);
if (pollForm == null) {
pollForm = popupContainer.addChild(UIPollForm.class, null, null);
}
popupContainer.setId("UIEditPollForm");
pollForm.setUpdatePoll(poll, true);
popupAction.activate(popupContainer, 655, 455, true);
event.getRequestContext().addUIComponentToUpdateByAjax(popupAction);
}
}
static public class DeleteActionListener extends EventListener<UIPollManagement> {
public void execute(Event<UIPollManagement> event) throws Exception {
UIPollManagement pollManagement = event.getSource();
String pollId = event.getRequestContext().getRequestParameter(OBJECTID);
pollManagement.getPollService().removePoll(pollManagement.mapPoll.get(pollId).getParentPath() + "/" + pollId);
event.getRequestContext().addUIComponentToUpdateByAjax(pollManagement);
}
}
static public class AddPollActionListener extends EventListener<UIPollManagement> {
public void execute(Event<UIPollManagement> event) throws Exception {
UIPollManagement pollManagement = event.getSource();
UIPollPortlet pollPortlet = pollManagement.getParent();
UIPopupAction popupAction = pollPortlet.getChild(UIPopupAction.class);
UIPopupContainer popupContainer = popupAction.createUIComponent(UIPopupContainer.class, null, null);
UIPollForm pollForm = popupContainer.getChild(UIPollForm.class);
if (pollForm == null)
pollForm = popupContainer.addChild(UIPollForm.class, null, null);
popupContainer.setId("UIAddPollForm");
popupAction.activate(popupContainer, 655, 455, true);
event.getRequestContext().addUIComponentToUpdateByAjax(popupAction);
}
}
static public class SaveActionListener extends EventListener<UIPollManagement> {
public void execute(Event<UIPollManagement> event) throws Exception {
UIPollManagement pollManagement = event.getSource();
PortletRequestContext pcontext = (PortletRequestContext) event.getRequestContext();
PortletPreferences portletPref = pcontext.getRequest().getPreferences();
String pollId = pollManagement.getUIFormSelectBox(FIELD_SELECT_POLL_SELECTBOX).getValue();
portletPref.setValue(Utils.POLL_ID_SHOW, pollId);
portletPref.store();
UIPollPortlet pollPortlet = ((UIPollPortlet) pollManagement.getParent());
pollPortlet.getChild(UIPoll.class).updatePollById(pollId);
event.getRequestContext().addUIComponentToUpdateByAjax(pollPortlet);
}
}
}