/**
* $RCSfile: ,v $
* $Revision: $
* $Date: $
*
* Copyright (C) 2004-2011 Jive Software. All rights reserved.
*
* Licensed 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.jivesoftware.sparkplugin;
import org.jivesoftware.spark.ui.ChatRoom;
import java.util.HashMap;
import java.util.Map;
/**
*
*/
public class JingleStateManager {
private static JingleStateManager singleton;
private static final Object LOCK = new Object();
private Map<ChatRoom, JingleRoomState> jingleRooms = new HashMap<ChatRoom, JingleRoomState>();
/**
* Type of states a jingle call can be in.
*/
public static enum JingleRoomState {
/**
* The room contains a jingle session.
*/
inJingleCall,
/**
* The rooms contained a jingle session, but the call was ended.
*/
callWasEnded,
/**
* The room contains an incoming jingle session.
*/
ringing,
/**
* The jingle session is muted.
*/
muted
}
/**
* Returns the singleton instance of <CODE>JingleManager</CODE>,
* creating it if necessary.
* <p/>
*
* @return the singleton instance of <Code>JingleManager</CODE>
*/
public static JingleStateManager getInstance() {
// Synchronize on LOCK to ensure that we don't end up creating
// two singletons.
synchronized (LOCK) {
if (null == singleton) {
JingleStateManager controller = new JingleStateManager();
singleton = controller;
return controller;
}
}
return singleton;
}
private JingleStateManager() {
}
/**
* Adds a new JingleRoomState.
*
* @param room the room the jingle session is taking place.
* @param state the state of the jingle call.
*/
public void addJingleSession(ChatRoom room, JingleRoomState state) {
jingleRooms.put(room, state);
}
/**
* Removes a JingleRoomState.
*
* @param room the room the jingle session was taking place.
*/
public void removeJingleSession(ChatRoom room) {
jingleRooms.remove(room);
}
/**
* Returns the jingle state of a <code>ChatRoom</code>. If no jingle session is taking place,
* this method will return null.
*
* @param room the <code>ChatRoom</code>.
* @return the JingleRoomState.`
*/
public JingleRoomState getJingleRoomState(ChatRoom room) {
return jingleRooms.get(room);
}
}