/*
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.media;
import java.util.*;
import net.java.sip.communicator.service.media.event.*;
/**
* This is a utility class that can be used by objects that support constrained
* properties. You can use an instance of this class as a member field of your
* bean and delegate various work to it.
*
* @author Martin Andre
* @author Emil Ivov
*/
public class MediaEventDispatcher
{
/**
* All media listeners registered so far.
*/
private List<MediaListener> mediaListeners;
public MediaEventDispatcher()
{
}
/**
* Add a mediaListener to the listener list.
*
* @param listener The MediaListener to be added
*/
protected synchronized void addMediaListener(MediaListener listener)
{
if (mediaListeners == null)
{
mediaListeners = new Vector<MediaListener>();
}
mediaListeners.add(listener);
}
/**
* Remove a MediaListener from the listener list.
*
* @param listener The MediaListener to be removed
*/
protected synchronized void removeMediaListener(MediaListener listener)
{
if (mediaListeners != null)
{
mediaListeners.remove(listener);
}
}
/**
* Alert all media listeners that we're receiving a media stream.
*
* @param mediaEvent the source of the event
*/
protected void fireReceivedMediaStream(MediaEvent mediaEvent)
{
MediaListener[] targets = null;
synchronized (this)
{
if (mediaListeners != null)
{
targets =
mediaListeners.toArray(new MediaListener[mediaListeners
.size()]);
}
}
if (targets != null)
{
for (int i = 0; i < targets.length; i++)
{
targets[i].receivedMediaStream(mediaEvent);
}
}
}
/**
* Alert all media listeners that status has changed.
*/
protected void fireMediaServiceStatusChanged()
{
MediaListener[] targets = null;
synchronized (this)
{
if (mediaListeners != null)
{
targets =
mediaListeners.toArray(new MediaListener[mediaListeners
.size()]);
}
}
if (targets != null)
{
for (int i = 0; i < targets.length; i++)
{
targets[i].mediaServiceStatusChanged();
}
}
}
}