/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* 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 net.java.sip.communicator.impl.protocol.jabber;
import java.util.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.event.*;
/**
* Keeps a list of all calls currently active and maintained by this protocol
* provider. Offers methods for finding a call by its ID, peer session
* and others.
*
* @author Emil Ivov
* @author Symphorien Wanko
* @author Vincent Lucas
*/
public class ActiveCallsRepositoryJabberGTalkImpl
<T extends AbstractCallJabberGTalkImpl<U>,
U extends AbstractCallPeerJabberGTalkImpl<T, ?, ?>>
extends ActiveCallsRepository<T, OperationSetBasicTelephonyJabberImpl>
{
/**
* It's where we store all active calls
*
* @param opSet the <tt>OperationSetBasicTelphony</tt> instance which has
* been used to create calls in this repository
*/
public ActiveCallsRepositoryJabberGTalkImpl(
OperationSetBasicTelephonyJabberImpl opSet)
{
super(opSet);
}
/**
* Returns the {@link CallJabberImpl} containing a {@link
* CallPeerJabberImpl} whose corresponding jingle session has the specified
* jingle <tt>sid</tt>.
*
* @param sid the jingle <tt>sid</tt> we're looking for.
*
* @return the {@link CallJabberImpl} containing the peer with the
* specified <tt>sid</tt> or <tt>null</tt> if we couldn't find one matching
* it.
*/
public T findSID(String sid)
{
Iterator<T> calls = getActiveCalls();
while (calls.hasNext())
{
T call = calls.next();
if (call.containsSID(sid))
return call;
}
return null;
}
/**
* Returns the <tt>Call</tt> with ID equal to <tt>callid</tt>.
*
* @param callid the ID to search for
* @return the <tt>Call</tt> with ID equal to <tt>callid</tt>.
*/
public T findCallId(String callid)
{
Iterator<T> calls = getActiveCalls();
while (calls.hasNext())
{
T call = calls.next();
if (call.getCallID().equals(callid))
return call;
}
return null;
}
/**
* Returns the {@link CallPeerJabberImpl} whose jingle session has the
* specified jingle <tt>sid</tt>.
*
* @param sid the jingle <tt>sid</tt> we're looking for.
*
* @return the {@link CallPeerJabberImpl} with the specified <tt>sid</tt>
* or <tt>null</tt> if we couldn't find one matching it.
*/
public U findCallPeer(String sid)
{
Iterator<T> calls = getActiveCalls();
while (calls.hasNext())
{
T call = calls.next();
U peer = call.getPeer(sid);
if ( peer != null )
return peer;
}
return null;
}
/**
* Returns the {@link CallPeerJabberImpl} whose session-init's ID has
* the specified IQ <tt>id</tt>.
*
* @param id the IQ <tt>id</tt> we're looking for.
*
* @return the {@link CallPeerJabberImpl} with the specified <tt>id</tt>
* or <tt>null</tt> if we couldn't find one matching it.
*/
public U findCallPeerBySessInitPacketID(String id)
{
Iterator<T> calls = getActiveCalls();
while (calls.hasNext())
{
T call = calls.next();
U peer = call.getPeerBySessInitPacketID(id);
if ( peer != null )
return peer;
}
return null;
}
/**
* Creates and dispatches a <tt>CallEvent</tt> notifying registered
* listeners that an event with id <tt>eventID</tt> has occurred on
* <tt>sourceCall</tt>.
*
* @param eventID the ID of the event to dispatch
* @param sourceCall the call on which the event has occurred
* @param cause the <tt>CallChangeEvent</tt>, if any, which is the cause
* that necessitated a new <tt>CallEvent</tt> to be fired
* @see ActiveCallsRepository#fireCallEvent(int, Call, CallChangeEvent)
*/
@Override
protected void fireCallEvent(
int eventID,
Call sourceCall,
CallChangeEvent cause)
{
parentOperationSet.fireCallEvent(eventID, sourceCall);
}
}