org.jasig.portlet.blackboardvcportlet.dao.ws.impl.SessionWSDaoImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.jasig.portlet.blackboardvcportlet.dao.ws.impl.SessionWSDaoImpl.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.dao.ws.impl;

import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.xml.bind.JAXBElement;

import org.jasig.portlet.blackboardvcportlet.dao.ws.SessionWSDao;
import org.jasig.portlet.blackboardvcportlet.dao.ws.WSDaoUtils;
import org.jasig.portlet.blackboardvcportlet.data.ConferenceUser;
import org.jasig.portlet.blackboardvcportlet.data.RecordingMode;
import org.jasig.portlet.blackboardvcportlet.data.SessionTelephony;
import org.jasig.portlet.blackboardvcportlet.security.SecurityExpressionEvaluator;
import org.jasig.portlet.blackboardvcportlet.service.SessionForm;
import org.jasig.portlet.blackboardvcportlet.service.util.SASWebServiceOperations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.support.DataAccessUtils;
import org.springframework.stereotype.Service;

import com.elluminate.sas.BlackboardBuildSessionUrl;
import com.elluminate.sas.BlackboardClearSessionUserList;
import com.elluminate.sas.BlackboardListSession;
import com.elluminate.sas.BlackboardListSessionAttendance;
import com.elluminate.sas.BlackboardListSessionAttendanceResponseCollection;
import com.elluminate.sas.BlackboardRemoveSession;
import com.elluminate.sas.BlackboardSessionAttendanceResponse;
import com.elluminate.sas.BlackboardSessionResponse;
import com.elluminate.sas.BlackboardSessionResponseCollection;
import com.elluminate.sas.BlackboardSessionTelephony;
import com.elluminate.sas.BlackboardSessionTelephonyResponse;
import com.elluminate.sas.BlackboardSessionTelephonyResponseCollection;
import com.elluminate.sas.BlackboardSetSession;
import com.elluminate.sas.BlackboardSetSessionTelephony;
import com.elluminate.sas.BlackboardUpdateSession;
import com.elluminate.sas.BlackboardUrlResponse;
import com.elluminate.sas.ObjectFactory;

@Service
public class SessionWSDaoImpl implements SessionWSDao {
    private SASWebServiceOperations sasWebServiceOperations;
    private SecurityExpressionEvaluator securityExpressionEvaluator;

    @Autowired
    public void setSasWebServiceOperations(SASWebServiceOperations sasWebServiceOperations) {
        this.sasWebServiceOperations = sasWebServiceOperations;
    }

    @Autowired
    public void setSecurityExpressionEvaluator(SecurityExpressionEvaluator securityExpressionEvaluator) {
        this.securityExpressionEvaluator = securityExpressionEvaluator;
    }

    @Override
    public BlackboardSessionResponse createSession(ConferenceUser user, SessionForm sessionForm) {
        final BlackboardSetSession setSession = new BlackboardSetSession();
        setSession.setCreatorId(user.getUniqueId());
        setSession.setSessionName(sessionForm.getSessionName());
        setSession.setStartTime(sessionForm.getStartTime().getMillis());
        setSession.setEndTime(sessionForm.getEndTime().getMillis());
        setSession.setBoundaryTime(sessionForm.getBoundaryTime());
        setSession.setChairList(user.getUniqueId());

        if (securityExpressionEvaluator.authorize("hasRole('ROLE_FULL_ACCESS')")) {
            setSession.setMaxTalkers(sessionForm.getMaxTalkers());
            setSession.setMaxCameras(sessionForm.getMaxCameras());
            setSession.setMustBeSupervised(sessionForm.isMustBeSupervised());
            setSession.setPermissionsOn(sessionForm.isPermissionsOn());
            setSession.setRaiseHandOnEnter(sessionForm.isRaiseHandOnEnter());
            final RecordingMode recordingMode = sessionForm.getRecordingMode();
            if (recordingMode != null) {
                setSession.setRecordingModeType(recordingMode.getBlackboardRecordingMode());
            }
            setSession.setHideParticipantNames(sessionForm.isHideParticipantNames());
            setSession.setAllowInSessionInvites(sessionForm.isAllowInSessionInvites());
        }

        final Object objSessionResponse = sasWebServiceOperations
                .marshalSendAndReceiveToSAS("http://sas.elluminate.com/SetSession", setSession);
        @SuppressWarnings("unchecked")
        JAXBElement<BlackboardSessionResponseCollection> jaxbSessionResponse = (JAXBElement<BlackboardSessionResponseCollection>) objSessionResponse;

        final BlackboardSessionResponseCollection sessionResponses = jaxbSessionResponse.getValue();
        final BlackboardSessionResponse sessionResponse = DataAccessUtils
                .singleResult(sessionResponses.getSessionResponses());
        return sessionResponse;

    }

    @Override
    public String buildSessionUrl(long sessionId, ConferenceUser user) {
        BlackboardBuildSessionUrl buildSessionUrlRequest = new BlackboardBuildSessionUrl();
        buildSessionUrlRequest.setSessionId(sessionId);
        buildSessionUrlRequest.setDisplayName(user.getDisplayName());
        buildSessionUrlRequest.setUserId(user.getBlackboardUniqueId());
        final Object urlResponseObject = sasWebServiceOperations
                .marshalSendAndReceiveToSAS("http://sas.elluminate.com/BuildSessionUrl", buildSessionUrlRequest);
        @SuppressWarnings("unchecked")
        JAXBElement<BlackboardUrlResponse> jaxbResponse = (JAXBElement<BlackboardUrlResponse>) urlResponseObject;
        return jaxbResponse.getValue().getUrl();
    }

    @Override
    public String buildGuestSessionUrl(long sessionId) {
        BlackboardBuildSessionUrl buildSessionUrlRequest = new BlackboardBuildSessionUrl();
        buildSessionUrlRequest.setSessionId(sessionId);
        buildSessionUrlRequest.setDisplayName("GUEST_PLACEHOLDER");
        final Object urlResponseObject = sasWebServiceOperations
                .marshalSendAndReceiveToSAS("http://sas.elluminate.com/BuildSessionUrl", buildSessionUrlRequest);
        @SuppressWarnings("unchecked")
        JAXBElement<BlackboardUrlResponse> jaxbResponse = (JAXBElement<BlackboardUrlResponse>) urlResponseObject;
        return jaxbResponse.getValue().getUrl().replace("&username=GUEST_PLACEHOLDER", "");
    }

    @Override
    public List<BlackboardSessionResponse> getSessions(String userId, String groupingId, Long sessionId,
            String creatorId, Long startTime, Long endTime, String sessionName) {
        //build search request
        BlackboardListSession request = new ObjectFactory().createBlackboardListSession();

        if (userId == null && groupingId == null && sessionId == null && creatorId == null && startTime == null
                && endTime == null && sessionName == null) {
            throw new IllegalStateException("You must specify at least 1 piece of criteria");
        }

        if (userId != null) {
            request.setUserId(userId);
        }
        if (groupingId != null) {
            request.setGroupingId(groupingId);
        }

        if (sessionId != null) {
            request.setSessionId(sessionId);
        }

        if (creatorId != null) {
            request.setCreatorId(creatorId);
        }

        if (startTime != null) {
            request.setStartTime(startTime);
        }

        if (endTime != null) {
            request.setEndTime(endTime);
        }

        if (sessionName != null) {
            request.setSessionName(sessionName);
        }

        Object obj = sasWebServiceOperations.marshalSendAndReceiveToSAS("http://sas.elluminate.com/ListSession",
                request);
        @SuppressWarnings("unchecked")
        JAXBElement<BlackboardSessionResponseCollection> responseCollection = (JAXBElement<BlackboardSessionResponseCollection>) obj;
        return responseCollection.getValue().getSessionResponses();
    }

    @Override
    public List<BlackboardSessionAttendanceResponse> getSessionAttendance(long sessionId, Object startTime) {
        BlackboardListSessionAttendance request = new ObjectFactory().createBlackboardListSessionAttendance();
        BlackboardListSessionAttendanceResponseCollection responseCollection = (BlackboardListSessionAttendanceResponseCollection) sasWebServiceOperations
                .marshalSendAndReceiveToSAS("http://sas.elluminate.com/ListSessionAttendance", request);
        return responseCollection.getSessionAttendanceResponses();
    }

    @Override
    public List<BlackboardSessionTelephonyResponse> getSessionTelephony(long sessionId) {
        BlackboardSessionTelephony request = new ObjectFactory().createBlackboardSessionTelephony();
        request.setSessionId(sessionId);
        final BlackboardSessionTelephonyResponseCollection response = (BlackboardSessionTelephonyResponseCollection) sasWebServiceOperations
                .marshalSendAndReceiveToSAS("http://sas.elluminate.com/ListSessionTelephony", request);
        return response.getSessionTelephonyResponses();
    }

    @Override
    public boolean removeSessionTelephony(long sessionId) {
        BlackboardSessionTelephony bst = new ObjectFactory().createBlackboardSessionTelephony();
        bst.setSessionId(sessionId);
        JAXBElement<BlackboardSessionTelephony> removeSessionTelephony = new ObjectFactory()
                .createRemoveSessionTelephony(bst);

        return WSDaoUtils.isSuccessful(sasWebServiceOperations.marshalSendAndReceiveToSAS(
                "http://sas.elluminate.com/RemoveSessionTelephony", removeSessionTelephony));
    }

    @Override
    public BlackboardSessionTelephonyResponse createSessionTelephony(long sessionId, SessionTelephony telephony) {
        BlackboardSetSessionTelephony request = new ObjectFactory().createBlackboardSetSessionTelephony();
        request.setSessionId(sessionId);
        request.setChairPhone(telephony.getChairPhone());
        request.setChairPIN(telephony.getChairPIN());
        request.setIsPhone(telephony.isPhone());
        request.setNonChairPhone(telephony.getNonChairPhone());
        request.setNonChairPIN(telephony.getNonChairPIN());
        request.setSessionPIN(telephony.getSessionPIN());
        request.setSessionSIPPhone(telephony.getSessionSIPPhone());
        Object obj = sasWebServiceOperations
                .marshalSendAndReceiveToSAS("http://sas.elluminate.com/SetSessionTelephony", request);

        @SuppressWarnings("unchecked")
        JAXBElement<BlackboardSessionTelephonyResponseCollection> jaxbResponse = (JAXBElement<BlackboardSessionTelephonyResponseCollection>) obj;
        return DataAccessUtils.singleResult(jaxbResponse.getValue().getSessionTelephonyResponses());
    }

    @Override
    public BlackboardSessionResponse updateSession(long bbSessionId, SessionForm sessionForm) {
        final BlackboardUpdateSession updateSession = new ObjectFactory().createBlackboardUpdateSession();

        updateSession.setSessionId(bbSessionId);
        updateSession.setSessionName(sessionForm.getSessionName());
        updateSession.setStartTime(sessionForm.getStartTime().getMillis());
        updateSession.setEndTime(sessionForm.getEndTime().getMillis());
        updateSession.setBoundaryTime(sessionForm.getBoundaryTime());

        if (securityExpressionEvaluator.authorize("hasRole('ROLE_FULL_ACCESS')")) {
            updateSession.setMaxTalkers(sessionForm.getMaxTalkers());
            updateSession.setMaxCameras(sessionForm.getMaxCameras());
            updateSession.setMustBeSupervised(sessionForm.isMustBeSupervised());
            updateSession.setPermissionsOn(sessionForm.isPermissionsOn());
            updateSession.setRaiseHandOnEnter(sessionForm.isRaiseHandOnEnter());
            final RecordingMode recordingMode = sessionForm.getRecordingMode();
            if (recordingMode != null) {
                updateSession.setRecordingModeType(recordingMode.getBlackboardRecordingMode());
            }
            updateSession.setHideParticipantNames(sessionForm.isHideParticipantNames());
            updateSession.setAllowInSessionInvites(sessionForm.isAllowInSessionInvites());
        }

        final Object objSessionResponse = sasWebServiceOperations
                .marshalSendAndReceiveToSAS("http://sas.elluminate.com/UpdateSession", updateSession);
        @SuppressWarnings("unchecked")
        JAXBElement<BlackboardSessionResponseCollection> response = (JAXBElement<BlackboardSessionResponseCollection>) objSessionResponse;
        return DataAccessUtils.singleResult(response.getValue().getSessionResponses());
    }

    @Override
    public BlackboardSessionResponse setSessionChairs(long bbSessionId, Set<ConferenceUser> sessionChairs) {
        final BlackboardUpdateSession updateSession = new ObjectFactory().createBlackboardUpdateSession();

        updateSession.setSessionId(bbSessionId);

        final String chairList = buildUidList(sessionChairs);
        updateSession.setChairList(chairList);

        final Object objSessionResponse = sasWebServiceOperations
                .marshalSendAndReceiveToSAS("http://sas.elluminate.com/UpdateSession", updateSession);
        @SuppressWarnings("unchecked")
        JAXBElement<BlackboardSessionResponseCollection> response = (JAXBElement<BlackboardSessionResponseCollection>) objSessionResponse;
        return DataAccessUtils.singleResult(response.getValue().getSessionResponses());
    }

    @Override
    public BlackboardSessionResponse setSessionNonChairs(long bbSessionId, Set<ConferenceUser> sessionNonChairs) {
        final BlackboardUpdateSession updateSession = new ObjectFactory().createBlackboardUpdateSession();

        updateSession.setSessionId(bbSessionId);

        final String chairList = buildUidList(sessionNonChairs);
        updateSession.setNonChairList(chairList);

        final Object objSessionResponse = sasWebServiceOperations
                .marshalSendAndReceiveToSAS("http://sas.elluminate.com/UpdateSession", updateSession);
        @SuppressWarnings("unchecked")
        JAXBElement<BlackboardSessionResponseCollection> response = (JAXBElement<BlackboardSessionResponseCollection>) objSessionResponse;
        return DataAccessUtils.singleResult(response.getValue().getSessionResponses());
    }

    @Override
    public boolean deleteSession(long sessionId) {
        BlackboardRemoveSession request = new ObjectFactory().createBlackboardRemoveSession();
        request.setSessionId(sessionId);
        return WSDaoUtils.isSuccessful(sasWebServiceOperations
                .marshalSendAndReceiveToSAS("http://sas.elluminate.com/RemoveSession", request));
    }

    @Override
    public boolean clearSessionChairList(long sessionId) {
        return clearSessionUserList(sessionId, true);
    }

    @Override
    public boolean clearSessionNonChairList(long sessionId) {
        return clearSessionUserList(sessionId, false);
    }

    private String buildUidList(Set<ConferenceUser> users) {
        final StringBuilder uidBuilder = new StringBuilder();
        for (final Iterator<ConferenceUser> userItr = users.iterator(); userItr.hasNext();) {
            final ConferenceUser user = userItr.next();
            uidBuilder.append(user.getBlackboardUniqueId());
            if (userItr.hasNext()) {
                uidBuilder.append(',');
            }
        }
        return uidBuilder.toString();
    }

    private boolean clearSessionUserList(Long sessionId, boolean isChairList) {
        BlackboardClearSessionUserList vo = new ObjectFactory().createBlackboardClearSessionUserList();
        vo.setSessionId(sessionId);
        Object request;
        if (isChairList) {
            request = new ObjectFactory().createClearSessionChairList(vo);
        } else {
            request = new ObjectFactory().createClearSessionNonChairList(vo);
        }
        return WSDaoUtils.isSuccessful(sasWebServiceOperations.marshalSendAndReceiveToSAS(
                "http://sas.elluminate.com/ClearSession" + (isChairList ? "" : "Non") + "ChairList", request));
    }
}