# AbstractChangementFactory
Date: 2022-10-31

fr.iutfbleau.projetIHM2022FI2.API

## Interface AbstractChangementFactory

All Known Implementing Classes:
  AbstractChangementFactoryNP

    public interface AbstractChangementFactory

Usine abstraite gérant l'ensemble des changements.

### Method Summary

All Methods Instance Methods Abstract Methods
`void` `applyChangement(Changement c)` permet de mettre en oeuvre un changement connu de l'usine abstraite.
`void` `createChangement(Groupe A, Etudiant e, Groupe B)` permet d'ajouter un nouveau changement.
`void` `deleteChangement(Changement c)` permet de supprimer un changement connu de l'usine abstraite.
`java.util.Set<Changement>` `getAllChangements()` permet de récupérer les changements
`AbstractGroupeFactory` `getGroupeFactory()` permet de récupérer une usine abstraite pour les groupes qui fonctionne en tandem avec cette usine abstraite

### Method Detail

#### getGroupeFactory

    AbstractGroupeFactory getGroupeFactory()

permet de récupérer une usine abstraite pour les groupes qui fonctionne en tandem avec cette usine abstraite

Returns:
  cette usine abstraite pour les groupes

#### getAllChangements

    java.util.Set<Changement> getAllChangements()

permet de récupérer les changements

Returns:
  l'ensemble de tous les changements en attente NB. Attention. C'était Iterator<Changement> dans la version beta.

#### applyChangement

    void applyChangement(Changement c)

permet de mettre en oeuvre un changement connu de l'usine abstraite. En cas de succès, le changement est oublié (détruit).

Throws:
  `java.lang.NullPointerException` - si un argument est null
  `java.lang.IllegalArgumentException` - si inconnu de l'usine abstraite

#### deleteChangement

    void deleteChangement(Changement c)

permet de supprimer un changement connu de l'usine abstraite.

Throws:
  `java.lang.NullPointerException` - si un argument est null
  `java.lang.IllegalArgumentException` - si inconnu de l'usine abstraite

#### createChangement

    void createChangement(Groupe A,
                          Etudiant e,
                          Groupe B)

permet d'ajouter un nouveau changement.

Parameters:
  `A` - groupe actuel
  `B` - groupe demandé
  `e` - étudiant concerné par le changement
Throws:
  `java.lang.NullPointerException` - si un argument est null
  `java.lang.IllegalArgumentException` - si les groupes ou l'étudiant ne sont pas connus de la factory partenaire, ou e n'appartient pas à A ou A et B ne sont pas frères dans l'arbre des groupes.