/**********************************************************************************
* $URL: $
* $Id: $
***********************************************************************************
*
* Author: Charles Hedrick, hedrick@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.List;
import org.sakaiproject.lessonbuildertool.SimplePage;
import org.sakaiproject.lessonbuildertool.SimplePageItem;
import org.sakaiproject.lessonbuildertool.model.SimplePageToolDao;
import org.sakaiproject.lessonbuildertool.tool.beans.SimplePageBean;
import org.sakaiproject.lessonbuildertool.tool.view.GeneralViewParameters;
import org.sakaiproject.tool.api.ToolManager;
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.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.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;
/**
*
* Lightweight preview to help user identify the page. Based on ReorderProducer. Keep them synced
* @author Charles Hedrick <hedrick@rutgers.edu
*
*/
public class PreviewProducer implements ViewComponentProducer, NavigationCaseReporter, ViewParamsReporter {
private SimplePageBean simplePageBean;
private SimplePageToolDao simplePageToolDao;
private ShowPageProducer showPageProducer;
private ToolManager toolManager;
public MessageLocator messageLocator;
public LocaleGetter localeGetter;
public static final String VIEW_ID = "Preview";
public String getViewID() {
return VIEW_ID;
}
public void fillComponents(UIContainer tofill, ViewParameters params, ComponentChecker checker) {
UIOutput.make(tofill, "html").decorate(new UIFreeAttributeDecorator("lang", localeGetter.get().getLanguage()))
.decorate(new UIFreeAttributeDecorator("xml:lang", localeGetter.get().getLanguage()));
SimplePage currentPage = simplePageBean.getCurrentPage();
// we specifically can't update the current page, because we
// want to be able to preview stuff without affecting current state.
// so we have to do permission check
Long currentPageId = currentPage.getPageId();
if (((GeneralViewParameters) params).getSendingPage() != -1) {
currentPageId = ((GeneralViewParameters) params).getSendingPage();
}
SimplePage page = simplePageToolDao.getPage(currentPageId);
String siteId = toolManager.getCurrentPlacement().getContext();
// page should always be in this site, or someone is gaming us
if (!page.getSiteId().equals(siteId)) {
System.out.println("attempt to preview page not in the site");
return;
}
UIOutput.make(tofill, "title", messageLocator.getMessage("simplepage.preview").replace("{}", page.getTitle()));
UIOutput.make(tofill, "title2", messageLocator.getMessage("simplepage.preview").replace("{}", page.getTitle()));
if (simplePageBean.canEditPage()) {
List<SimplePageItem> items = simplePageToolDao.findItemsOnPage(currentPageId);
if (items.size() == 0) {
UIOutput.make(tofill, "message", messageLocator.getMessage("simplepage.noitems_error_user"));
} else {
UIOutput.make(tofill, "itemTable");
for (SimplePageItem i : items) {
if (i.getType() == 7) {
i.setType(1); // Temporarily change multimedia to standard resource
// so that links work properly.
}
UIContainer row = UIBranchContainer.make(tofill, "item:");
// UIOutput.make(row, "seq", String.valueOf(i.getSequence()));
UIOutput.make(row, "description", i.getDescription());
if (i.getType() == 5) {
if (i.getHtml().length() > 100) {
UIVerbatim.make(row, "boxed", i.getHtml().substring(0, 100) + "...");
} else {
UIVerbatim.make(row, "boxed", i.getHtml());
}
} else {
UIOutput.make(row, "text", i.getName());
}
}
}
}
}
public void setSimplePageBean(SimplePageBean simplePageBean) {
this.simplePageBean = simplePageBean;
}
public void setSimplePageToolDao(SimplePageToolDao simplePageToolDao) {
this.simplePageToolDao = simplePageToolDao;
}
public void setShowPageProducer(ShowPageProducer p) {
this.showPageProducer = p;
}
public void setToolManager(ToolManager t) {
this.toolManager = t;
}
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(PreviewProducer.VIEW_ID)));
togo.add(new NavigationCase("cancel", new SimpleViewParameters(ShowPageProducer.VIEW_ID)));
return togo;
}
}