org.jasig.portlet.blackboardvcportlet.mvc.sessionmngr.SessionCreateEditController.java Source code

Java tutorial

Introduction

Here is the source code for org.jasig.portlet.blackboardvcportlet.mvc.sessionmngr.SessionCreateEditController.java

Source

/**
 * Licensed to Apereo under one or more contributor license
 * agreements. See the NOTICE file distributed with this work
 * for additional information regarding copyright ownership.
 * Apereo licenses this file to you under the Apache 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 the following location:
 *
 *   http://www.apache.org/licenses/LICENSE-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.jasig.portlet.blackboardvcportlet.mvc.sessionmngr;

import java.util.Locale;
import java.util.Set;

import javax.portlet.ActionResponse;
import javax.portlet.PortletMode;
import javax.portlet.PortletModeException;
import javax.portlet.RenderRequest;
import javax.portlet.WindowState;
import javax.validation.Valid;

import org.apache.commons.lang.StringUtils;
import org.jasig.portlet.blackboardvcportlet.data.ConferenceUser;
import org.jasig.portlet.blackboardvcportlet.data.Multimedia;
import org.jasig.portlet.blackboardvcportlet.data.RecordingMode;
import org.jasig.portlet.blackboardvcportlet.data.ServerConfiguration;
import org.jasig.portlet.blackboardvcportlet.data.Session;
import org.jasig.portlet.blackboardvcportlet.security.ConferenceUserService;
import org.jasig.portlet.blackboardvcportlet.service.ServerConfigurationService;
import org.jasig.portlet.blackboardvcportlet.service.SessionForm;
import org.jasig.portlet.blackboardvcportlet.service.SessionService;
import org.joda.time.DateMidnight;
import org.joda.time.LocalTime;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.DateTimeFormatterBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.portlet.bind.annotation.ActionMapping;
import org.springframework.web.portlet.bind.annotation.RenderMapping;

import com.google.common.collect.Ordering;

/**
 * Controller class for Portlet EDIT related actions and render
 *
 * @author Richard Good
 */
@Controller
@RequestMapping("EDIT")
public class SessionCreateEditController {
    protected final Logger logger = LoggerFactory.getLogger(getClass());

    private ConferenceUserService conferenceUserService;
    private ServerConfigurationService serverConfigurationService;
    private SessionService sessionService;

    @Autowired
    private MessageSource messageSource;

    @Autowired
    private ViewSessionListController viewController;

    @Value("${maxuploadsize}")
    private Integer maxFileUploadSize;

    @Value("${presentationFileTypes}")
    private String presentationFileTypes;

    @Autowired
    public void setConferenceUserService(ConferenceUserService conferenceUserService) {
        this.conferenceUserService = conferenceUserService;
    }

    @Autowired
    public void setServerConfigurationService(ServerConfigurationService serverConfigurationService) {
        this.serverConfigurationService = serverConfigurationService;
    }

    @Autowired
    public void setSessionService(SessionService sessionService) {
        this.sessionService = sessionService;
    }

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        final DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("MM/dd/yyyy")
                .toFormatter();
        binder.registerCustomEditor(DateMidnight.class, new CustomDateMidnightEditor(formatter, false));

        final DateTimeFormatter formatter2 = new DateTimeFormatterBuilder().appendPattern("HH:mm").toFormatter();
        binder.registerCustomEditor(LocalTime.class, new CustomTimeEditor(formatter2, false));
    }

    @ModelAttribute("recordingModes")
    public RecordingMode[] getRecordingModes() {
        return RecordingMode.values();
    }

    @RenderMapping
    public String displayNewSessionForm(ModelMap model) throws PortletModeException {
        final ServerConfiguration serverConfiguration = this.serverConfigurationService.getServerConfiguration();
        model.put("serverConfiguration", serverConfiguration);
        if (!model.containsKey("sessionForm")) {
            SessionForm sessionForm = new SessionForm(serverConfiguration);
            model.addAttribute("sessionForm", sessionForm);
        }
        return "createEditSession";
    }

    @RenderMapping(params = "action=editSession")
    public String displayEditSessionForm(RenderRequest request, ModelMap model, @RequestParam long sessionId,
            @RequestParam(required = false) String presentationUploadError,
            @RequestParam(required = false) String multimediaUploadError,
            @RequestParam(required = false) String deleteMultimediaError,
            @RequestParam(value = "needToSendInitialEmail", defaultValue = "false", required = false) boolean needToSendInitialEmail)
            throws PortletModeException {
        if (WindowState.NORMAL.equals(request.getWindowState())) {
            return viewController.view(request, model, null, null);
        }

        final ServerConfiguration serverConfiguration = this.serverConfigurationService.getServerConfiguration();
        model.put("serverConfiguration", serverConfiguration);

        final Session session = this.sessionService.getSession(sessionId);
        //TODO if session is null

        // Don't override sessionForm if it already exists due to Form Validation
        if (!model.containsKey("sessionForm")) {
            SessionForm sessionForm = new SessionForm(session);
            sessionForm.setNeedToSendInitialEmail(needToSendInitialEmail);
            model.addAttribute("sessionForm", sessionForm);
        }

        final Set<ConferenceUser> sessionChairs = this.sessionService.getSessionChairs(session);
        model.addAttribute("sessionChairs",
                Ordering.from(ConferenceUserDisplayComparator.INSTANCE).sortedCopy(sessionChairs));

        final Set<ConferenceUser> sessionNonChairs = this.sessionService.getSessionNonChairs(session);
        model.addAttribute("sessionNonChairs",
                Ordering.from(ConferenceUserDisplayComparator.INSTANCE).sortedCopy(sessionNonChairs));

        final Set<Multimedia> sessionMultimedia = this.sessionService.getSessionMultimedia(session);
        model.addAttribute("sessionMultimedia",
                Ordering.from(MultimediaDisplayComparator.INSTANCE).sortedCopy(sessionMultimedia));

        model.addAttribute("presentationFileTypes", presentationFileTypes);
        model.addAttribute("presentation", session.getPresentation());

        if (presentationUploadError != null) {
            model.addAttribute("presentationUploadError", presentationUploadError);
        }

        if (multimediaUploadError != null) {
            model.addAttribute("multimediaUploadError", multimediaUploadError);
        }

        if (deleteMultimediaError != null) {
            model.addAttribute("deleteMultimediaError", deleteMultimediaError);
        }

        return "createEditSession";
    }

    @ActionMapping(params = "action=saveSession")
    public void saveSession(ActionResponse response, @Valid SessionForm session, BindingResult bindingResult)
            throws PortletModeException {
        if (bindingResult.hasErrors()) {
            if (session.isNewSession()) {
                response.setPortletMode(PortletMode.EDIT);
            } else {
                response.setRenderParameter("sessionId", Long.toString(session.getSessionId()));
                response.setRenderParameter("action", "editSession");
                response.setPortletMode(PortletMode.EDIT);
            }
        } else {
            final ConferenceUser conferenceUser = this.conferenceUserService.getCurrentConferenceUser();
            this.sessionService.createOrUpdateSession(conferenceUser, session);
            response.setPortletMode(PortletMode.VIEW);
        }
    }

    @ActionMapping(params = "action=deleteSessions")
    public void deleteSession(ActionResponse response, Locale locale,
            @RequestParam(required = false) long[] deleteSession) throws PortletModeException {

        if (deleteSession == null) {
            response.setRenderParameter("deleteSessionError",
                    messageSource.getMessage("error.nothingselected", null, locale));
        } else {
            //TODO do in try/catch?
            for (final long sessionId : deleteSession) {
                this.sessionService.removeSession(sessionId);
            }
        }

        response.setPortletMode(PortletMode.VIEW);
    }

    @ActionMapping(params = "action=deletePresentation")
    public void deletePresentation(ActionResponse response, Locale locale, @RequestParam long sessionId)
            throws PortletModeException {
        this.sessionService.deletePresentation(sessionId);

        response.setPortletMode(PortletMode.VIEW);
        response.setRenderParameter("sessionId", Long.toString(sessionId));
        response.setRenderParameter("action", "viewSession");
    }

    @ActionMapping(params = "action=Upload Presentation")
    public void uploadPresentation(ActionResponse response, Locale locale, @RequestParam long sessionId,
            @RequestParam MultipartFile presentationUpload, @RequestParam boolean needToSendInitialEmail)
            throws PortletModeException {
        String fileExtension = StringUtils.substringAfter(presentationUpload.getOriginalFilename(), ".")
                .toLowerCase();

        // Validate
        if (presentationUpload.getSize() < 1) {
            response.setRenderParameter("presentationUploadError",
                    messageSource.getMessage("error.uploadfilenotselected", null, locale));
        } else if (presentationUpload.getSize() > maxFileUploadSize) {
            response.setRenderParameter("presentationUploadError",
                    messageSource.getMessage("error.uploadfilesizetoobig", null, locale));
        } else if (fileExtension.length() == 0 || !presentationFileTypes.contains(fileExtension)) {
            response.setRenderParameter("presentationUploadError",
                    messageSource.getMessage("error.uploadfileextensionswrong", null, locale));
        } else {
            this.sessionService.addPresentation(sessionId, presentationUpload);
        }

        response.setPortletMode(PortletMode.VIEW);
        response.setRenderParameter("sessionId", Long.toString(sessionId));
        response.setRenderParameter("action", "viewSession");
        response.setRenderParameter("needToSendInitialEmail", Boolean.toString(needToSendInitialEmail));
    }

    @ActionMapping(params = "action=Delete Presentation")
    public void deletePresentation(ActionResponse response, @RequestParam long sessionId,
            @RequestParam boolean needToSendInitialEmail) throws PortletModeException {
        this.sessionService.deletePresentation(sessionId);

        response.setPortletMode(PortletMode.EDIT);
        response.setRenderParameter("sessionId", Long.toString(sessionId));
        response.setRenderParameter("action", "editSession");
        response.setRenderParameter("needToSendInitialEmail", Boolean.toString(needToSendInitialEmail));
    }
}