/**********************************************************************************
* $URL: $
* $Id: $
***********************************************************************************
*
* Copyright (c) 2007 Sakai Project/Sakai Foundation
* Licensed under the Educational Community License version 1.0
*
* This file was originally part of SimplePageTool, by Joshua Ryan josh@asu.edu
*
* Changes for Lesson Builder are
*
* Copyright (c) 2010 Rutgers, the State University of New Jersey
*
* Author: Eric Jeney, jeney@rutgers.edu
*
* 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.List;
import java.util.Collection;
import org.sakaiproject.lessonbuildertool.tool.beans.SimplePageBean;
import org.sakaiproject.lessonbuildertool.tool.view.GeneralViewParameters;
import org.sakaiproject.lessonbuildertool.tool.producers.ShowPageProducer;
import org.sakaiproject.lessonbuildertool.SimplePage;
import org.sakaiproject.lessonbuildertool.SimplePageItem;
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.UIBoundBoolean;
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.UIOutput;
import uk.org.ponder.rsf.components.UIVerbatim;
import uk.org.ponder.rsf.components.decorators.UIFreeAttributeDecorator;
import uk.org.ponder.rsf.components.decorators.UITooltipDecorator;
import uk.org.ponder.rsf.evolvers.TextInputEvolver;
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.component.cover.ServerConfigurationService;
import org.sakaiproject.content.cover.ContentHostingService;
import org.sakaiproject.exception.IdUnusedException;
/**
* Uses an FCK editor to edit blocks of text.
*
* @author Joshua Ryan josh@asu.edu alt^I
* @author Eric Jeney <jeney@rutgers.edu>
*/
public class EditPageProducer implements ViewComponentProducer, NavigationCaseReporter, ViewParamsReporter {
private TextInputEvolver richTextEvolver;
private SimplePageBean simplePageBean;
private ShowPageProducer showPageProducer;
public MessageLocator messageLocator;
public LocaleGetter localeGetter;
public static final String VIEW_ID = "EditPage";
public String getViewID() {
return VIEW_ID;
}
public void fillComponents(UIContainer tofill, ViewParameters viewparams, ComponentChecker checker) {
GeneralViewParameters gparams = (GeneralViewParameters) viewparams;
UIOutput.make(tofill, "html").decorate(new UIFreeAttributeDecorator("lang", localeGetter.get().getLanguage()))
.decorate(new UIFreeAttributeDecorator("xml:lang", localeGetter.get().getLanguage()));
if (gparams.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(gparams.getSendingPage());
} catch (Exception e) {
System.out.println("EditPage permission exception " + e);
return;
}
}
SimplePage page = simplePageBean.getCurrentPage();
Long itemId = gparams.getItemId();
Collection<String> groups = null;
boolean isPrerequisite = false;
if (itemId != null && itemId != -1) {
SimplePageItem i = simplePageBean.findItem(itemId);
if (i.getPageId() != page.getPageId()) {
System.out.println("EditPage asked to edit item not in current page");
return;
}
try {
groups = simplePageBean.getItemGroups(i, null, true);
} catch (IdUnusedException exc) {
// should be impossible for text item; underlying object missing
}
isPrerequisite = i.isPrerequisite();
}
if (simplePageBean.canEditPage()) {
simplePageBean.setItemId(itemId);
UIOutput.make(tofill, "title-label", messageLocator.getMessage("simplepage.adding-text"));
UIOutput.make(tofill, "page-title", simplePageBean.getCurrentPage().getTitle());
UIForm form = UIForm.make(tofill, "page_form");
// Rich Text Input
UIInput instructions = UIInput.make(form, "page:", "#{simplePageBean.contents}");
instructions.decorate(new UIFreeAttributeDecorator("height", "500"));
instructions.decorate(new UIFreeAttributeDecorator("width", "700"));
form.parameters.add(new UIELBinding("#{simplePageBean.itemId}", itemId));
richTextEvolver.evolveTextInput(instructions);
if (page.getOwner() == null) {
// these options don't apply on student pages
showPageProducer.createGroupList(form, groups, "", "#{simplePageBean.selectedGroups}");
UIOutput.make(form, "prerequisite-block");
UIBoundBoolean.make(form, "question-prerequisite", "#{simplePageBean.prerequisite}",isPrerequisite);
}
UICommand.make(form, "save", messageLocator.getMessage("simplepage.save_message"), "#{simplePageBean.submit}").decorate(new UITooltipDecorator(messageLocator.getMessage("simplepage.save_message")));
UICommand.make(form, "cancel", messageLocator.getMessage("simplepage.cancel_message"), "#{simplePageBean.cancel}").decorate(new UITooltipDecorator(messageLocator.getMessage("simplepage.cancel_message")));
if (itemId != null && itemId != -1) {
form.parameters.add(new UIELBinding("#{simplePageBean.itemId}", gparams.getItemId()));
UICommand.make(form, "delete", messageLocator.getMessage("simplepage.delete"), "#{simplePageBean.deleteItem}").decorate(new UITooltipDecorator(messageLocator.getMessage("simplepage.delete")));
UIOutput.make(form, "delete-div");
}
} else {
UIBranchContainer error = UIBranchContainer.make(tofill, "error");
UIOutput.make(error, "message", messageLocator.getMessage("simplepage.not_available"));
}
}
public void setRichTextEvolver(TextInputEvolver richTextEvolver) {
this.richTextEvolver = richTextEvolver;
}
public void setShowPageProducer(ShowPageProducer showPageProducer) {
this.showPageProducer = showPageProducer;
}
public void setSimplePageBean(SimplePageBean simplePageBean) {
this.simplePageBean = simplePageBean;
}
public ViewParameters getViewParameters() {
return new GeneralViewParameters();
}
public List reportNavigationCases() {
List<NavigationCase> togo = new ArrayList<NavigationCase>();
togo.add(new NavigationCase(null, new SimpleViewParameters(ShowPageProducer.VIEW_ID)));
togo.add(new NavigationCase("success", new SimpleViewParameters(ShowPageProducer.VIEW_ID)));
togo.add(new NavigationCase("cancel", new SimpleViewParameters(ShowPageProducer.VIEW_ID)));
return togo;
}
}