package platform.containersregister;
import java.util.Vector;
/**
* Class used by the supervisor in order to manage the list of connectors containers actually created.<br>
* Offers methods to add, find and remove containers.
* @author Dalmau
*/
// Classe utilisee par la PF pour enregistrer les conteneurs crees
// offre des methodes pour :
// enregistrer un conteneur (nom, entree, sortie)
// rechercher dans la liste un conteneur designe par son nom
// supprimer de la liste un conteneur designe par son nom
// changer l'entree d'un conteneur de la liste (deconnexion/reconnexion)
// changer la sortie d'un conteneur de la liste (deconnexion/reconnexion)
public class ConnectorsRegistration {
private Vector<KorronteaContainerDescriptor> conteneurs; // Liste des conteneurs enregistres (osagaia et korrontea)
/**
* Construction of a Container list
*/
public ConnectorsRegistration() {
conteneurs = new Vector<KorronteaContainerDescriptor>();
}
/**
* Add a container to the list
*
* @param descriptor the container to be added
*/
public void ajouterConteneur(KorronteaContainerDescriptor descriptor) {
conteneurs.addElement(descriptor);
}
/**
* Find a container in the list
*
* @param name name of the container to find
* @return The container descriptor (null if no container of this name)
*/
public KorronteaContainerDescriptor trouverConteneur(String name) {
// Recherche dans la liste le conteneur dont le nom est passe en parametre
int rang = trouverRangConteneur(name);
if (rang != -1) // s'il existe on retourne son descripteur
return conteneurs.elementAt(rang);
else return null; // sinon on retourne null
}
/**
* Remove a container from the list
*
* @param name name of the container to remove
*/
public void enleverConteneur(String name) {
// Enleve de la liste des conteneurs celui dont le nom est passe en parametre
int rang = trouverRangConteneur(name);
if (rang != -1) // s'il existe on l'enleve
conteneurs.removeElementAt(rang);
}
/**
* Change the input of a container
*
* @param name name of the container to change
* @param input name of the new input of the container
*/
public void changerEntreeConteneur(String name, String input) {
// Recherche dans la liste des conteneurs celui dont le nom est passe en parametre
KorronteaContainerDescriptor courant = trouverConteneur(name);
if (courant != null) // s'il existe on modifie son entree
courant.setEntree(input);
}
/**
* Change the output of a container
*
* @param name name of the container to change
* @param output name of the new output of the container
*/
public void changerSortieConteneur(String name, String output) {
// Recherche dans la liste des conteneurs celui dont le nom est passe en parametre
KorronteaContainerDescriptor courant = trouverConteneur(name);
if (courant != null) // s'il existe on modifie son entree
courant.setSortie(output);
}
private int trouverRangConteneur(String name) {
// Recherche dans la liste des conteneurs celui dont le nom est passe en parametre
int i=0;
boolean trouve=false;
KorronteaContainerDescriptor courant=null;
while ((!trouve) && (i<conteneurs.size())) {
courant = conteneurs.elementAt(i);
if (courant.getNom().equals(name)) {
trouve=true;
}
else i++;
}
if (trouve) return i; // s'il existe on retourne son rang
else return -1; // sinon on retourne -1
}
/**
* Returns the number of registered connectors
* @return the number of registered connectors
*/
public int getConnectorsNumber() {
// Renvoie le nombre de connecteurs enregistres
return conteneurs.size();
}
/**
* Returns a registered connector
* @param index number of the required connector
* @return the required registered connector */
public KorronteaContainerDescriptor getConnectorAt(int index) {
// Renvoie le indexieme connecteur
return conteneurs.elementAt(index);
}
/**
* Returns the number of connector which have their input comming from network
* @return the number of connector which have their input comming from network
*/
public int getNetworkInputConnectorsNumber() {
int nombre = 0;
for (int i=0; i<conteneurs.size(); i++) {
if (conteneurs.elementAt(i).isInputNetwork()) nombre++;
}
return nombre;
}
/**
* Returns the number of connector which have their output going to network
* @return the number of connector which have their output going to network
*/
public int getNetworkOutputConnectorsNumber() {
int nombre = 0;
for (int i=0; i<conteneurs.size(); i++) {
if (conteneurs.elementAt(i).isOutputNetwork()) nombre++;
}
return nombre;
}
}