/**********************************************************************************
* $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.List;
import org.sakaiproject.component.cover.ServerConfigurationService;
import org.sakaiproject.content.api.ContentHostingService;
import org.sakaiproject.content.api.FilePickerHelper;
import org.sakaiproject.lessonbuildertool.tool.beans.SimplePageBean;
import org.sakaiproject.lessonbuildertool.tool.view.FilePickerViewParameters;
import org.sakaiproject.tool.api.SessionManager;
import org.sakaiproject.tool.api.ToolManager;
import org.sakaiproject.tool.api.ToolSession;
import uk.org.ponder.messageutil.MessageLocator;
import uk.org.ponder.localeutil.LocaleGetter;
import uk.ac.cam.caret.sakai.rsf.helper.HelperViewParameters;
import uk.org.ponder.rsf.components.UICommand;
import uk.org.ponder.rsf.components.UIContainer;
import uk.org.ponder.rsf.components.UIOutput;
import uk.org.ponder.rsf.components.UIInput;
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;
/**
* Uses the ResourcePicker to permit adding resources to the page.
*
* This producer is used both for adding resources and for adding multimedia.
*
* @author Eric Jeney <jeney@rutgers.edu>
*
*/
public class ResourcePickerProducer implements ViewComponentProducer, ViewParamsReporter, NavigationCaseReporter {
public static final String VIEW_ID = "ResourcePicker";
public String getViewID() {
return VIEW_ID;
}
private SimplePageBean simplePageBean;
// helper tool
public static final String HELPER = "sakai.filepicker";
private SessionManager sessionManager;
public void setSessionManager(SessionManager sessionManager) {
this.sessionManager = sessionManager;
}
private ContentHostingService contentHostingService;
public void setContentHostingService(ContentHostingService contentHostingService) {
this.contentHostingService = contentHostingService;
}
private ToolManager toolManager;
public void setToolManager(ToolManager toolManager) {
this.toolManager = toolManager;
}
private MessageLocator messageLocator;
public void setMessageLocator(MessageLocator messageLocator) {
this.messageLocator = messageLocator;
}
public LocaleGetter localeGetter;
public void fillComponents(UIContainer tofill, ViewParameters viewparams, ComponentChecker checker) {
// this doesn't show anything in LB. I don't see any real permissions issues
if (((FilePickerViewParameters) viewparams).getSender() != -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(((FilePickerViewParameters) viewparams).getSender());
} catch (Exception e) {
System.out.println("ResourcePicker permission exception " + e);
return;
}
}
if (!simplePageBean.canReadPage())
return;
UIOutput.make(tofill, "html").decorate(new UIFreeAttributeDecorator("lang", localeGetter.get().getLanguage()))
.decorate(new UIFreeAttributeDecorator("xml:lang", localeGetter.get().getLanguage()));
// parameters for helper
ToolSession toolSession = sessionManager.getCurrentToolSession();
toolSession.setAttribute(FilePickerHelper.FILE_PICKER_TITLE_TEXT, "Please Choose a File");
toolSession.setAttribute(FilePickerHelper.FILE_PICKER_INSTRUCTION_TEXT, messageLocator.getMessage("simplepage.filepicker_instructions"));
toolSession.setAttribute(FilePickerHelper.FILE_PICKER_MAX_ATTACHMENTS, FilePickerHelper.CARDINALITY_SINGLE);
toolSession.setAttribute(FilePickerHelper.FILE_PICKER_ATTACHMENTS, new ArrayList());
toolSession.setAttribute(FilePickerHelper.FILE_PICKER_RESOURCE_FILTER, null);
toolSession.setAttribute(FilePickerHelper.FILE_PICKER_ATTACH_LINKS, ServerConfigurationService.getString("lessonbuilder.attachlinks", "true"));
toolSession.setAttribute(SimplePageBean.LESSONBUILDER_ITEMID, ((FilePickerViewParameters) viewparams).getPageItemId());
if (simplePageBean.getCurrentPage().getOwner() != null) {
toolSession.setAttribute(FilePickerHelper.DEFAULT_COLLECTION_ID, "/user/" + simplePageBean.getCurrentUserId() + "/");
}
// rsf:id helper-id
UIOutput.make(tofill, HelperViewParameters.HELPER_ID, HELPER);
// rsf:id helper-binding method binding
String process = null;
if (((FilePickerViewParameters) viewparams).getWebsite())
process = "#{simplePageBean.processWebSite}";
else if (((FilePickerViewParameters) viewparams).getResourceType())
process = "#{simplePageBean.processMultimedia}";
else
process = "#{simplePageBean.processResource}";
UICommand.make(tofill, HelperViewParameters.POST_HELPER_BINDING, process);
}
public void setSimplePageBean(SimplePageBean simplePageBean) {
this.simplePageBean = simplePageBean;
}
public List reportNavigationCases() {
List l = new ArrayList();
l.add(new NavigationCase("cancel", new SimpleViewParameters(ShowPageProducer.VIEW_ID)));
l.add(new NavigationCase("importing", new SimpleViewParameters(ShowPageProducer.VIEW_ID)));
return l;
}
public ViewParameters getViewParameters() {
return new FilePickerViewParameters();
}
}