package scs.event_service.servant;
import java.util.ArrayList;
import java.util.Iterator;
import scs.core.IComponent;
import scs.core.InvalidName;
import scs.event_service.ChannelCollectionPOA;
import scs.event_service.ChannelDescr;
import scs.event_service.NameAlreadyInUse;
/**
* Classe que implementa o servant da interface scs::event_service::ChannelCollection::ChannelCollection.
* @author Eduardo Fonseca/Luiz Marques
*/
public class ChannelCollectionServant extends ChannelCollectionPOA {
ArrayList<ChannelDescr> events = new ArrayList<ChannelDescr>();
/**
* Adiciona um novo elemento ao container interno de EventChannels
* @param name nome do novo canal
* @param evCh canal de eventos a ser adicionado
* @throws NameAlreadyInUse caso o nome do canal j� exista
*/
public void addChannel(String name,IComponent evCh) throws NameAlreadyInUse
{
for (Iterator<ChannelDescr> iter = events.iterator(); iter.hasNext();) {
ChannelDescr element = iter.next();
if( element.name.equals(name))
throw new NameAlreadyInUse(name);
}
events.add(new ChannelDescr(name,evCh));
}
/**
* Remove um canal existente do container interno
* @param name nome do canal
* @throws InvalidName caso o canal n�o exista no container
*/
public void removeChannel(String name) throws InvalidName
{
for (Iterator<ChannelDescr> iter = events.iterator(); iter.hasNext();) {
ChannelDescr element = iter.next();
if( element.name.equals(name))
{
iter.remove();
return;
}
}
throw new InvalidName(name);
}
/* (non-Javadoc)
* @see EventService.ChannelCollectionOperations#getAll()
*/
public ChannelDescr[] getAll() {
return events.toArray(new ChannelDescr[events.size()]);
}
/* (non-Javadoc)
* @see EventService.ChannelCollectionOperations#getChannel(java.lang.String)
*/
public IComponent getChannel(String name) {
for (Iterator<ChannelDescr> iter = events.iterator(); iter.hasNext();) {
ChannelDescr element = iter.next();
if(element.name.equals(name))
{
return element.channel;
}
}
return null;
}
}