/*
* GroupAnySync.java
* Eisenkraut
*
* Copyright (c) 2004-2016 Hanns Holger Rutz. All rights reserved.
*
* This software is published under the GNU General Public License v3+
*
*
* For further information, please contact Hanns Holger Rutz at
* contact@sciss.de
*/
package de.sciss.eisenkraut.net;
import java.util.HashSet;
import java.util.Set;
import de.sciss.net.OSCBundle;
public class GroupAnySync
extends GroupSync
implements GroupSync.Slave {
private final Set<GroupSync> syncs = new HashSet<GroupSync>();
private int numActive = 0;
public GroupAnySync()
{
super();
}
public void addSync(GroupSync s) {
if (!syncs.add(s)) throw new IllegalArgumentException("Sync already added");
s.addSlave(this);
if (s.isActive() && (++numActive == 1)) {
activate(null);
}
}
public void removeSync(GroupSync s) {
if (!syncs.remove(s)) throw new IllegalArgumentException("Sync not found");
s.removeSlave(this);
//System.err.println( "removeSync. isActive = "+s.isActive()+"; numActive = "+numActive );
if (s.isActive() && (--numActive == 0)) {
deactivate(null);
}
}
public void clearSyncs() {
syncs.clear();
numActive = 0;
active = false;
}
// -------------- Disposable interface --------------
public void dispose()
{
clearSyncs();
super.dispose();
}
// ------------------ GroupSync.Slave interface ------------------
public void groupActivate( OSCBundle bndl )
{
if( ++numActive == 1 ) {
activate( bndl );
}
}
public void groupDeactivate( OSCBundle bndl )
{
if( --numActive == 0 ) {
deactivate( bndl );
}
}
}