# AbstractChangementFactoryNP
Date: 2022-10-31

fr.iutfbleau.projetIHM2022FI2.MNP

## Class AbstractChangementFactoryNP

- java.lang.Object
- - fr.iutfbleau.projetIHM2022FI2.MNP.AbstractChangementFactoryNP

All Implemented Interfaces:
  AbstractChangementFactory

    public class AbstractChangementFactoryNP
    extends java.lang.Object
    implements AbstractChangementFactory

Usine abstraite gérant l'ensemble des changements.

### Constructor Summary

Constructors
Constructor and Description
`AbstractChangementFactoryNP(AbstractGroupeFactory agf)`

### Method Summary

All Methods Instance Methods Concrete 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 l'usine abstraite pour les groupes qui fonctionne en tandem avec cette usine abstraite

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### AbstractChangementFactoryNP

    public AbstractChangementFactoryNP(AbstractGroupeFactory agf)

### Method Detail

#### getGroupeFactory

    public AbstractGroupeFactory getGroupeFactory()

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

Specified by:
  `getGroupeFactory` in interface `AbstractChangementFactory`
Returns:
  cette usine abstraite pour les groupes

#### getAllChangements

    public java.util.Set<Changement> getAllChangements()

permet de récupérer les changements

Specified by:
  `getAllChangements` in interface `AbstractChangementFactory`
Returns:
  l'ensemble de tous les changements en attente

#### applyChangement

    public void applyChangement(Changement c)

permet de mettre en oeuvre un changement connu de l'usine abstraite.

Specified by:
  `applyChangement` in interface `AbstractChangementFactory`
Throws:
  `java.lang.NullPointerException` - si un argument est null
  `java.lang.IllegalStateException` - si le changement n'a pas de sens en l'état actuel (e.g. étudiant pas dans le groupe de départ a, groupe b inconnu, groupe a inconnu, etc).
  `java.lang.IllegalArgumentException` - si inconnu de l'usine abstraite

#### deleteChangement

    public void deleteChangement(Changement c)

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

Specified by:
  `deleteChangement` in interface `AbstractChangementFactory`
Throws:
  `java.lang.NullPointerException` - si un argument est null
  `java.lang.IllegalArgumentException` - si inconnu de l'usine abstraite

#### createChangement

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

permet d'ajouter un nouveau changement.

Specified by:
  `createChangement` in interface `AbstractChangementFactory`
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.