/*
* File : ActiveMediaBag.java
* Created : 02-may-2001 11:28
* By : fbusquets
*
* JClic - Authoring and playing system for educational activities
*
* Copyright (C) 2000 - 2005 Francesc Busquets & Departament
* d'Educacio de la Generalitat de Catalunya
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details (see the LICENSE file).
*/
package edu.xtec.jclic.media;
import edu.xtec.jclic.*;
import edu.xtec.jclic.bags.MediaBag;
import java.util.*;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.09.10
*/
public class ActiveMediaBag extends HashSet<ActiveMediaPlayer> {
/** Creates new ActiveMediaBag */
public ActiveMediaBag() {
}
public ActiveMediaPlayer createActiveMediaPlayer(MediaContent mc, MediaBag mb, PlayStation ps){
ActiveMediaPlayer amp=null;
switch(mc.mediaType){
case MediaContent.RECORD_AUDIO:
if(mc.length<=0 || mc.length>=AudioBuffer.MAX_RECORD_LENGTH)
break;
case MediaContent.PLAY_RECORDED_AUDIO:
if(mc.recBuffer<0 || mc.recBuffer>=ActiveMediaPlayer.AUDIO_BUFFERS)
break;
case MediaContent.PLAY_AUDIO:
case MediaContent.PLAY_MIDI:
case MediaContent.PLAY_VIDEO:
amp=ActiveMediaPlayer.createActiveMediaPlayer(mc, mb, ps);
break;
}
if(amp!=null)
add(amp);
return amp;
}
public ActiveMediaPlayer getActiveMediaPlayer(MediaContent mc, MediaBag mb, PlayStation ps){
ActiveMediaPlayer amp=null;
for (Iterator i = iterator(); i.hasNext(); ){
amp=(ActiveMediaPlayer)i.next();
if(amp.getMediaContent()==mc || amp.getMediaContent().isEquivalent(mc))
break;
amp=null;
}
if(amp==null)
amp=createActiveMediaPlayer(mc, mb, ps);
return amp;
}
public void removeActiveMediaPlayer(MediaContent mc){
ActiveMediaPlayer amp=null;
for (Iterator i = iterator(); i.hasNext(); ){
amp=(ActiveMediaPlayer)i.next();
if(amp.getMediaContent()==mc) break;
amp=null;
}
if(amp!=null){
amp.clear();
remove(amp);
}
}
public void realizeAll(){
for (Iterator<ActiveMediaPlayer> i = iterator(); i.hasNext(); ){
ActiveMediaPlayer amp=i.next();
amp.realize();
}
}
public void stopAll(){
stopAll(-1);
}
public void stopAll(int level){
for (Iterator i = iterator(); i.hasNext(); ){
ActiveMediaPlayer amp=(ActiveMediaPlayer)i.next();
if(level==-1 || amp.getMediaContent().level<=level) amp.stop();
}
}
public void removeAll(){
for (Iterator i = iterator(); i.hasNext(); ){
ActiveMediaPlayer amp=(ActiveMediaPlayer)i.next();
amp.clear();
}
clear();
ActiveMediaPlayer.clearAllAudioBuffers();
}
}