Java RMI Y. Laborde Cours LOO - TOA
4
public void notifyControlers() throws java.rmi.RemoteException{
notifyControlers(null);
}
public void notifyControlers(W w) throws java.rmi.RemoteException{
ArrayList<MvcControlerView<W>> suppList = null;
// Envoi des update à des MvcControlerView<W>
// et non seulement à des MvcControlerView !
for( MvcControlerView<W> mvc : mvclist ) {
try {
mvc.update(this, w); // Invocation de l'OD-méthode
}
// ICI: on peut vouloir supprimer le contrôleur non valide
// de la liste des contrôleurs du modèle pour qu'il
// ne provoque plus d'erreur inutile la prochaine fois.
catch ( NoSuchObjectException e) {
// Peut arriver quand le client a été fermé !
if ( suppList == null ) {
suppList = new ArrayList<MvcControlerView<W>>();
}
suppList.add(mvc);
System.out.println("MvcModelAbstract(notifyControlers): ");
System.out.println(" Contrôleur inconnu : "+e.getMessage());
}
catch ( RemoteException e) {
// Peut arriver pour des raisons de communication réseau
if ( suppList == null ) {
suppList = new ArrayList<MvcControlerView<W>>();
}
suppList.add(mvc);
System.out.println("MvcModelAbstract(notifyControlers) : ");
System.out.println(" Contrôleur inaccessible : "+e.getMessage());
}
}
// Suppression des contrôleurs inconnus !
if ( suppList != null ) {
for( MvcControlerView<W> mvc : suppList ) {
deleteControler(mvc);
}
System.out.println("MvcModelAbstract(notifyControlers) : "
+ "suppression de "
+ suppList.size() + " contrôleur(s)");
}
}
public int countControlers() throws java.rmi.RemoteException{
return mvclist.size();
}
public boolean hasChanged() throws java.rmi.RemoteException{
return changed;
}
public void setChanged() throws java.rmi.RemoteException{
changed = true;
}