/********************************************************************************** * $URL: $ * $Id: $ *********************************************************************************** * * Author: Eric Jeney, jeney@rutgers.edu * * Copyright (c) 2010 Rutgers, the State University of New Jersey * * 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.lessonbuildertool.tool.producers; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.text.DateFormat; import org.sakaiproject.lessonbuildertool.service.LessonEntity; import org.sakaiproject.lessonbuildertool.SimplePage; import org.sakaiproject.lessonbuildertool.SimplePageItem; import org.sakaiproject.lessonbuildertool.tool.beans.SimplePageBean; import org.sakaiproject.lessonbuildertool.tool.beans.SimplePageBean.UrlItem; import org.sakaiproject.lessonbuildertool.tool.view.GeneralViewParameters; import org.sakaiproject.lessonbuildertool.model.SimplePageToolDao; import uk.org.ponder.messageutil.MessageLocator; import uk.org.ponder.localeutil.LocaleGetter; 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.UIForm; import uk.org.ponder.rsf.components.UILink; import uk.org.ponder.rsf.components.UIOutput; import uk.org.ponder.rsf.components.UIInput; import uk.org.ponder.rsf.components.UISelect; import uk.org.ponder.rsf.components.UISelectChoice; import uk.org.ponder.rsf.components.UIInternalLink; import uk.org.ponder.rsf.components.decorators.UIFreeAttributeDecorator; 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.SimpleViewParameters; import uk.org.ponder.rsf.viewstate.ViewParameters; import uk.org.ponder.rsf.viewstate.ViewParamsReporter; import org.sakaiproject.time.cover.TimeService; import org.sakaiproject.util.ResourceLoader; /** * Creates a window for the user to choose which assignment to add to the page. * * @author Eric Jeney <jeney@rutgers.edu> * */ public class AssignmentPickerProducer implements ViewComponentProducer, NavigationCaseReporter, ViewParamsReporter { public static final String VIEW_ID = "AssignmentPicker"; private SimplePageBean simplePageBean; private SimplePageToolDao simplePageToolDao; private LessonEntity assignmentEntity; public MessageLocator messageLocator; public LocaleGetter localeGetter; public void setSimplePageBean(SimplePageBean simplePageBean) { this.simplePageBean = simplePageBean; } public void setSimplePageToolDao(Object dao) { simplePageToolDao = (SimplePageToolDao) dao; } public void setAssignmentEntity(LessonEntity l) { assignmentEntity = l; } public String getViewID() { return VIEW_ID; } public void fillComponents(UIContainer tofill, ViewParameters viewparams, ComponentChecker checker) { if (((GeneralViewParameters) viewparams).getSendingPage() != -1) { // will fail if page not in this site // security then depends upon making sure that we only deal with this page try { simplePageBean.updatePageObject(((GeneralViewParameters) viewparams).getSendingPage()); } catch (Exception e) { System.out.println("AssignmentPicker permission exception " + e); return; } } UIOutput.make(tofill, "html").decorate(new UIFreeAttributeDecorator("lang", localeGetter.get().getLanguage())) .decorate(new UIFreeAttributeDecorator("xml:lang", localeGetter.get().getLanguage())); Long itemId = ((GeneralViewParameters) viewparams).getItemId(); simplePageBean.setItemId(itemId); if (simplePageBean.canEditPage()) { SimplePage page = simplePageBean.getCurrentPage(); String assignId = null; // default, normally current // if itemid is null, we'll append to current page, so it's ok if (itemId != null && itemId != -1) { SimplePageItem currentItem = simplePageToolDao.findItem(itemId); if (currentItem == null) return; // trying to hack on item not on this page if (currentItem.getPageId() != page.getPageId()) return; assignId = currentItem.getSakaiId(); } List<UrlItem> createLinks = assignmentEntity.createNewUrls(simplePageBean); for (UrlItem createLink: createLinks) { UIBranchContainer link = UIBranchContainer.make(tofill, "assignment-create:"); GeneralViewParameters view = new GeneralViewParameters(ShowItemProducer.VIEW_ID); view.setSendingPage(((GeneralViewParameters) viewparams).getSendingPage()); view.setItemId(((GeneralViewParameters) viewparams).getItemId()); view.setSource(createLink.Url); view.setReturnView(VIEW_ID); view.setTitle(messageLocator.getMessage("simplepage.return_assignment")); UIInternalLink.make(link, "assignment-create-link", createLink.label , view); } UIForm form = UIForm.make(tofill, "assignment-picker"); if (createLinks.size() == 0) { System.out.println("creatlinks " + createLinks.size()); UIOutput.make(tofill, "error-div"); UIOutput.make(tofill, "error", messageLocator.getMessage("simplepage.no_assignment_tools")); UICommand.make(tofill, "cancel", messageLocator.getMessage("simplepage.cancel"), "#{simplePageBean.cancel}"); return; } List<LessonEntity> alist = assignmentEntity.getEntitiesInSite(simplePageBean); if (alist == null || alist.size() < 1) { UIOutput.make(tofill, "error-div"); UIOutput.make(tofill, "error", messageLocator.getMessage("simplepage.no_assignments")); UICommand.make(tofill, "cancel", messageLocator.getMessage("simplepage.cancel"), "#{simplePageBean.cancel}"); return; } ArrayList<String> values = new ArrayList<String>(); for (LessonEntity assignment: alist) { values.add(assignment.getReference()); } // if no current item, use first if (assignId == null) assignId = alist.get(0).getReference(); UISelect select = UISelect.make(form, "assignment-span", values.toArray(new String[1]), "#{simplePageBean.selectedAssignment}", assignId); for (LessonEntity a : alist) { UIBranchContainer row = UIBranchContainer.make(form, "assignment:", String.valueOf(alist.indexOf(a))); UISelectChoice.make(row, "select", select.getFullID(), alist.indexOf(a)). decorate(new UIFreeAttributeDecorator("title", a.getTitle())); UILink.make(row, "link", a.getTitle(), a.getUrl()); DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, new ResourceLoader().getLocale()); df.setTimeZone(TimeService.getLocalTimeZone()); if (a.getDueDate() != null) UIOutput.make(row, "due", df.format(a.getDueDate())); else UIOutput.make(row, "due", ""); } UIInput.make(form, "item-id", "#{simplePageBean.itemId}"); UICommand.make(form, "submit", messageLocator.getMessage("simplepage.chooser.select"), "#{simplePageBean.addAssignment}"); UICommand.make(form, "cancel", messageLocator.getMessage("simplepage.cancel"), "#{simplePageBean.cancel}"); } } public ViewParameters getViewParameters() { return new GeneralViewParameters(); } public List reportNavigationCases() { List<NavigationCase> togo = new ArrayList<NavigationCase>(); togo.add(new NavigationCase("success", new SimpleViewParameters(ShowPageProducer.VIEW_ID))); togo.add(new NavigationCase("failure", new SimpleViewParameters(AssignmentPickerProducer.VIEW_ID))); togo.add(new NavigationCase("cancel", new SimpleViewParameters(ShowPageProducer.VIEW_ID))); return togo; } }