/********************************************************************************** * $URL: $ * $Id: $ *********************************************************************************** * * Copyright (c) 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package org.sakaiproject.poll.tool.producers; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.poll.logic.ExternalLogic; import org.sakaiproject.poll.logic.PollListManager; import org.sakaiproject.poll.model.Option; import org.sakaiproject.poll.model.Poll; import org.sakaiproject.poll.tool.params.OptionViewParameters; import org.sakaiproject.poll.tool.params.PollViewParameters; import org.sakaiproject.poll.tool.params.VoteBean; import org.sakaiproject.tool.api.Session; import org.sakaiproject.tool.api.SessionManager; import uk.org.ponder.messageutil.MessageLocator; import uk.org.ponder.messageutil.TargettedMessageList; import uk.org.ponder.rsf.components.UIBranchContainer; import uk.org.ponder.rsf.components.UICommand; import uk.org.ponder.rsf.components.UIContainer; import uk.org.ponder.rsf.components.UIELBinding; import uk.org.ponder.rsf.components.UIForm; import uk.org.ponder.rsf.components.UIInput; import uk.org.ponder.rsf.components.UIMessage; import uk.org.ponder.rsf.components.UIOutput; import uk.org.ponder.rsf.evolvers.TextInputEvolver; import uk.org.ponder.rsf.flow.ARIResult; import uk.org.ponder.rsf.flow.ActionResultInterceptor; import uk.org.ponder.rsf.flow.jsfnav.NavigationCase; import uk.org.ponder.rsf.flow.jsfnav.NavigationCaseReporter; import uk.org.ponder.rsf.view.ComponentChecker; import uk.org.ponder.rsf.view.ViewComponentProducer; import uk.org.ponder.rsf.viewstate.ViewParameters; import uk.org.ponder.rsf.viewstate.ViewParamsReporter; public class PollOptionProducer implements ViewComponentProducer,ViewParamsReporter,NavigationCaseReporter, ActionResultInterceptor { public static final String VIEW_ID = "pollOption"; private static final Log LOG = LogFactory.getLog(PollOptionProducer.class); private VoteBean voteBean; private MessageLocator messageLocator; public String getViewID() { return VIEW_ID; } public void setVoteBean(VoteBean vb){ this.voteBean = vb; } public void setMessageLocator(MessageLocator messageLocator) { this.messageLocator = messageLocator; } private PollListManager pollListManager; public void setPollListManager(PollListManager p){ this.pollListManager = p; } private TargettedMessageList tml; public void setTargettedMessageList(TargettedMessageList tml) { this.tml = tml; } private TextInputEvolver richTextEvolver; public void setRichTextEvolver(TextInputEvolver richTextEvolver) { this.richTextEvolver = richTextEvolver; } private ExternalLogic externalLogic; public void setExternalLogic(ExternalLogic externalLogic) { this.externalLogic = externalLogic; } public void fillComponents(UIContainer tofill, ViewParameters viewparams, ComponentChecker arg2) { if (tml.size() > 0) { for (int i = 0; i < tml.size(); i ++ ) { UIBranchContainer errorRow = UIBranchContainer.make(tofill,"error-row:"); String output; if (tml.messageAt(i).args != null ) { output = messageLocator.getMessage(tml.messageAt(i).acquireMessageCode(),tml.messageAt(i).args[0]); } else { output = messageLocator.getMessage(tml.messageAt(i).acquireMessageCode()); } UIOutput.make(errorRow,"error", output); } } Option option = null; Poll poll = null; OptionViewParameters aivp = (OptionViewParameters) viewparams; boolean newOption = false; if(aivp.id != null) { LOG.debug("got a paramater with id: " + Long.valueOf(aivp.id)); // passed in an id so we should be modifying an item if we can find it option = pollListManager.getOptionById(Long.valueOf(aivp.id)); // SAK-14702 : Bugfix poll = pollListManager.getPollById(option.getPollId()); UIMessage.make(tofill,"new-option-title","edit_option_title"); } else { option = new Option(); if (aivp.pollId != null) { option.setPollId(Long.valueOf(aivp.pollId)); poll = pollListManager.getPollById(Long.valueOf(aivp.pollId)); } else { option.setPollId(voteBean.getPoll().getPollId()); } newOption = true; UIMessage.make(tofill,"new-option-title","new_option_title"); } if (poll == null) { LOG.warn("no poll found"); return; } UIOutput.make(tofill,"poll_text",poll.getText()); UIOutput.make(tofill,"poll-question",messageLocator.getMessage("new_poll_question")); UIForm form = UIForm.make(tofill,"opt-form"); //UIOutput.make(form,"option-label",messageLocator.getMessage("new_poll_option")); if (option.getOptionText() == null) option.setOptionText(""); if (!externalLogic.isMobileBrowser()) { // show WYSIWYG editor UIInput optText = UIInput.make(form,"optText:","#{option.optionText}",option.getOptionText()); richTextEvolver.evolveTextInput(optText); } else { // do not show WYSIWYG editor in the mobile view UIInput optText = UIInput.make(form,"optText_mobile","#{option.optionText}",option.getOptionText()); } form.parameters.add(new UIELBinding("#{option.pollId}", poll.getPollId())); UICommand save = UICommand.make(form, "submit-new-option", messageLocator.getMessage("new_poll_submit"), "#{pollToolBean.proccessActionAddOption}"); save.parameters.add(new UIELBinding("#{pollToolBean.submissionStatus}", "save")); if (newOption) { UICommand saveAdd = UICommand.make(form, "submit-option-add", messageLocator.getMessage("new_poll_saveoption"), "#{pollToolBean.proccessActionAddOption}"); saveAdd.parameters.add(new UIELBinding("#{pollToolBean.submissionStatus}", "option")); } else { form.parameters.add(new UIELBinding("#{option.optionId}", option.getOptionId())); } UICommand cancel = UICommand.make(form, "cancel",messageLocator.getMessage("new_poll_cancel"),"#{pollToolBean.cancel}"); cancel.parameters.add(new UIELBinding("#{option.status}", "cancel")); } public List<NavigationCase> reportNavigationCases() { List<NavigationCase> togo = new ArrayList<NavigationCase>(); togo.add(new NavigationCase("save", new PollViewParameters(AddPollProducer.VIEW_ID))); togo.add(new NavigationCase("cancel", null)); return togo; } public ViewParameters getViewParameters() { return new OptionViewParameters(); } public void interceptActionResult(ARIResult result, ViewParameters incoming, Object actionReturn) { LOG.debug("checking IntercetpActionResult("); if (result.resultingView instanceof OptionViewParameters) { OptionViewParameters optvp = (OptionViewParameters) result.resultingView; LOG.debug("OptionViewParams: " + optvp.id + " : " + optvp.pollId); String retVal = (String) actionReturn; LOG.debug("retval is " + retVal); if (retVal == null) { return; } String viewId = AddPollProducer.VIEW_ID; if (optvp.pollId != null) { if (! "option".equals(retVal)) { result.resultingView = new PollViewParameters(viewId, optvp.pollId); } else { LOG.debug("New option for poll: " + optvp.pollId); result.resultingView = new OptionViewParameters(VIEW_ID, optvp.id , optvp.pollId); } } else { Option option = pollListManager.getOptionById(Long.valueOf(optvp.id)); result.resultingView = new PollViewParameters(viewId, option.getPollId().toString()); } } } }