package scs.core.servant;
import java.util.ArrayList;
import java.util.Iterator;
import scs.core.AlreadyConnected;
import scs.core.ConnectionDescription;
import scs.core.ExceededConnectionLimit;
import scs.core.ReceptacleDescription;
/**
* Classe criada para facilitar o gerenciamento dos receptaculos no servant
* da interface IReceptacles.
*
* @author Eduardo Fonseca e Luiz Marques
*/
public class Receptacle {
String name;
String interfaceName;
boolean isMultiplex;
ArrayList<ConnectionDescription> connections;
/**
* @param name
* @param interfaceName
* @param isMultiplex
*/
public Receptacle(String name, String interfaceName, boolean isMultiplex) {
this.name = name;
this.interfaceName = interfaceName;
this.isMultiplex = isMultiplex;
connections = new ArrayList<ConnectionDescription>();
}
public String getName() {
return name;
}
public String getInterfaceName() {
return interfaceName;
}
public boolean isMultiplex() {
return isMultiplex;
}
public ArrayList<ConnectionDescription> getConnections() {
return connections;
}
public ConnectionDescription getConnection(int id) {
for (Iterator<ConnectionDescription> iter = this.connections.iterator(); iter.hasNext();) {
ConnectionDescription conn = iter.next();
if( conn.id == id )
return conn;
}
return null;
}
/**
* @param obj
* @return
* @throws AlreadyConnected
* @throws ExceededConnectionLimit
*/
public int addConnection(int id, org.omg.CORBA.Object obj) throws AlreadyConnected {
for (Iterator<ConnectionDescription> iter = this.connections.iterator(); iter.hasNext();) {
ConnectionDescription conn = iter.next();
if( conn.objref == obj )
throw new AlreadyConnected();
}
ConnectionDescription conn = new ConnectionDescription();
conn.id = id;
conn.objref = obj;
this.connections.add(conn);
return conn.id;
}
/**
* @param id
*/
public void removeConnection(int id) {
for (Iterator<ConnectionDescription> iter = this.connections.iterator(); iter.hasNext();) {
ConnectionDescription conn = iter.next();
if( conn.id == id )
iter.remove();
}
}
/**
* @return
*/
public ReceptacleDescription getReceptacleDescription() {
ReceptacleDescription desc = new ReceptacleDescription();
desc.name = this.getName();
desc.interface_name = this.getInterfaceName();
desc.is_multiplex = this.isMultiplex();
desc.connections = this.connections.toArray(new ConnectionDescription[this.connections.size()]);
return desc;
}
}