Package org.apache.openmeetings.remote

Source Code of org.apache.openmeetings.remote.PollService

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF 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
*
*   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.apache.openmeetings.remote;

import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Set;

import org.apache.openmeetings.OpenmeetingsVariables;
import org.apache.openmeetings.data.conference.PollManager;
import org.apache.openmeetings.data.user.UserManager;
import org.apache.openmeetings.persistence.beans.poll.PollType;
import org.apache.openmeetings.persistence.beans.poll.RoomPoll;
import org.apache.openmeetings.persistence.beans.poll.RoomPollAnswers;
import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
import org.apache.openmeetings.persistence.beans.room.Client;
import org.apache.openmeetings.session.ISessionManager;
import org.red5.logging.Red5LoggerFactory;
import org.red5.server.api.IConnection;
import org.red5.server.api.Red5;
import org.red5.server.api.service.IPendingServiceCall;
import org.red5.server.api.service.IPendingServiceCallback;
import org.red5.server.api.service.IServiceCapableConnection;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;

/**
*
* @author swagner
*
*/
public class PollService implements IPendingServiceCallback {

  private static final Logger log = Red5LoggerFactory.getLogger(
      PollService.class, OpenmeetingsVariables.webAppRootKey);

  @Autowired
  private ISessionManager sessionManager;
  @Autowired
  private UserManager userManager;
  @Autowired
  private ScopeApplicationAdapter scopeApplicationAdapter;
  @Autowired
  private PollManager pollManager;

  public String createPoll(String pollName, String pollQuestion, int pollTypeId) {
    String returnValue = "";
    try {
      log.debug("createPoll: " + pollQuestion);

      IConnection currentcon = Red5.getConnectionLocal();
      Client rc = sessionManager.getClientByStreamId(currentcon
          .getClient().getId(), null);

      log.debug("rc: " + rc.getStreamid() + " " + rc.getUsername() + " "
          + rc.getIsMod());

      if (rc.getIsMod()) {
        // will move all existing polls to the archive
        pollManager.closePoll(rc.getRoom_id());
       
        sendNotification(currentcon, "newPoll",
            new Object[] { pollManager.createPoll(rc,
                pollName, pollQuestion, (long) pollTypeId) });
        returnValue = "200";
      } else {
        returnValue = "202";
      }

    } catch (Exception err) {
      returnValue = "203";
      log.error("[createPoll]", err);
    }
    return returnValue;
  }

  public boolean closePoll() {
    try {
      log.debug("closePoll: ");

      IConnection currentcon = Red5.getConnectionLocal();
      Client rc = sessionManager.getClientByStreamId(currentcon
          .getClient().getId(), null);

      log.debug("rc: " + rc.getStreamid() + " " + rc.getUsername() + " "
          + rc.getIsMod());

      if (rc.getIsMod()) {
        // will move all existing polls to the archive
        return pollManager.closePoll(rc.getRoom_id());
      }

    } catch (Exception err) {
      log.error("[closePoll]", err);
    }
    return false;
  }

  public boolean deletePoll(Long poll_id) {
    try {
      log.debug("closePoll: ");

      IConnection currentcon = Red5.getConnectionLocal();
      Client rc = sessionManager.getClientByStreamId(currentcon
          .getClient().getId(), null);

      log.debug("rc: " + rc.getStreamid() + " " + rc.getUsername() + " "
          + rc.getIsMod());

      if (rc.getIsMod()) {
        // will move all existing polls to the archive
        return pollManager.deletePoll(poll_id);
      }

    } catch (Exception err) {
      log.error("[closePoll]", err);
    }
    return false;
  }

  public void sendNotification(IConnection current, String clientFunction,
      Object[] obj) throws Exception {
    // Notify all clients of the same scope (room)
    Client rc = this.sessionManager.getClientByStreamId(current
        .getClient().getId(), null);
    Collection<Set<IConnection>> conCollection = current.getScope()
        .getConnections();
    for (Set<IConnection> conset : conCollection) {
      for (IConnection conn : conset) {
        if (conn != null) {
          if (conn instanceof IServiceCapableConnection) {
            Client rcl = this.sessionManager
                .getClientByStreamId(conn.getClient().getId(), null);
            if (rcl.getIsScreenClient() != null
                && rcl.getIsScreenClient()) {
              // continue;
            } else {
              if (rcl.getRoom_id() != null && rcl.getRoom_id().equals(rc.getRoom_id())) {
                ((IServiceCapableConnection) conn).invoke(
                    clientFunction, obj,
                    scopeApplicationAdapter);
                log.debug("sending " + clientFunction + " to "
                    + conn + " " + conn.getClient().getId());
              }
            }
          }
        }
      }
    }
  }

  public List<PollType> getPollTypeList() {
    return pollManager.getPollTypes();
  }

  public int vote(int pollvalue, int pollTypeId) {
    int returnVal = 0;
    try {
      log.debug("PollService::vote: Enter");
      IConnection current = Red5.getConnectionLocal();
      String streamid = current.getClient().getId();
      Client rc = sessionManager.getClientByStreamId(streamid, null);

      if (rc == null) {
        log.error("RoomClient IS NULL for ClientID: "
            + current.getClient().getId());
        return -1;
      }
      long roomId = rc.getRoom_id();
      if (!pollManager.hasPoll(roomId)) {
        log.error("POLL IS NULL for RoomId: " + rc.getRoom_id());
        return -1;
      }
      if (pollManager.hasVoted(roomId, rc.getUser_id())) {
        log.debug("hasVoted: true");
        return -1;
      }
      // get Poll
      RoomPoll roomP = pollManager.getPoll(roomId);

      log.debug("vote: " + pollvalue + " " + pollTypeId + " "
          + roomP.getPollQuestion());

      log.debug("hasVoted: false");
      RoomPollAnswers rpA = new RoomPollAnswers();
      if (roomP.getPollType().getIsNumericAnswer()) {
        log.debug("numeric");
        rpA.setPointList(pollvalue);
      } else {
        log.debug("boolean");
        // Is boolean Question
        rpA.setAnswer(new Boolean(pollvalue == 1));
      }
      rpA.setVotedUser(userManager.getUserById(rc.getUser_id()));
      rpA.setVoteDate(new Date());
      rpA.setRoomPoll(roomP);
      roomP.getRoomPollAnswerList().add(rpA);
      pollManager.updatePoll(roomP);
      return 1;
    } catch (Exception err) {
      log.error("[vote]", err);
    }
    return returnVal;
  }

  public RoomPoll getVotes() {
    return getPoll();
  }

  public RoomPoll getPoll() {
    try {
      IConnection current = Red5.getConnectionLocal();
      Client rc = this.sessionManager.getClientByStreamId(current
          .getClient().getId(), null);

      // get Poll
      return pollManager.getPoll(rc.getRoom_id());
    } catch (Exception err) {
      log.error("[getPoll]", err);
    }
    return null;
  }

  public int checkHasVoted() {
    try {
      IConnection current = Red5.getConnectionLocal();
      String streamid = current.getClient().getId();
      Client rc = this.sessionManager
          .getClientByStreamId(streamid, null);

      long roomId = rc.getRoom_id();
      if (pollManager.hasPoll(roomId)) {
        return pollManager.hasVoted(roomId, rc.getUser_id()) ? -1 : 1;
      } else {
        return -2;
      }
    } catch (Exception err) {
      log.error("[checkHasVoted]", err);
    }
    return 0;
  }

  public List<RoomPoll> getArchivedPollList() {
    try {
      IConnection current = Red5.getConnectionLocal();
      Client rc = this.sessionManager.getClientByStreamId(current
          .getClient().getId(), null);

      // get Poll
      return pollManager.getArchivedPollList(rc.getRoom_id());
    } catch (Exception err) {
      log.error("[getArchivedPollList]", err);
    }
    return null;
  }

  public void resultReceived(IPendingServiceCall arg0) {
    // TODO Auto-generated method stub
   
  }
}
TOP

Related Classes of org.apache.openmeetings.remote.PollService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.