diff --git a/src/main/java/org/petriNet/Arc.java b/src/main/java/org/petriNet/Arc.java index 0f04b62b6d812b95dba7600400e04f45c07dae9b..f2248c3cf6abc53400a2dd002ff5abcd03a756ef 100644 --- a/src/main/java/org/petriNet/Arc.java +++ b/src/main/java/org/petriNet/Arc.java @@ -44,6 +44,10 @@ public abstract class Arc { public Transition getTransition(){ return this.transition; }; + + public void supprimerPlace(Place place) { + this.place = null; + } } diff --git a/src/main/java/org/petriNet/PetriNetService.java b/src/main/java/org/petriNet/PetriNetService.java index 95d8001148a085e9fb490f83c910247b4a991801..918fda7dfc6767fc3d8f11509cf2997ff2e46f2b 100644 --- a/src/main/java/org/petriNet/PetriNetService.java +++ b/src/main/java/org/petriNet/PetriNetService.java @@ -7,6 +7,12 @@ public interface PetriNetService { public void ajouterTransition(Transition transition); public void ajouterArc(Arc arc); + + public void supprimerPlace(Place place); + + public void supprimerTransition(Transition transition); + + public void supprimerArc(Arc arc); public void afficherEtat(); @@ -18,4 +24,5 @@ public interface PetriNetService { public void afficherReseau(); public void tirer_transition(String id); + } diff --git a/src/main/java/org/petriNet/ReseauPetri.java b/src/main/java/org/petriNet/ReseauPetri.java index 214359fc599b5d7ce5fbd8a331e7844fa31efd7d..4a15acfaa253b349a7a4cca5f3ce20c9a1ef4a8e 100644 --- a/src/main/java/org/petriNet/ReseauPetri.java +++ b/src/main/java/org/petriNet/ReseauPetri.java @@ -102,6 +102,36 @@ public class ReseauPetri implements PetriNetService { this.arcs.add(arc); } + /** + * Supprimer une place entraîne la suppression de tous les arcs qui y sont liés. + * Supprimer une transition entraîne la suppression de tous les arcs qui y sont liés. + */ + + @Override + public void supprimerPlace(Place place) { + this.places.remove(place); + // remove all arcs linked to the place + this.arcs.removeIf(arc -> arc.getPlace().getId() == place.getId()); + } + + @Override + public void supprimerTransition(Transition transition) { + this.transitions.remove(transition); + // remove all arcs linked to the transition + this.arcs.removeIf(arc -> arc.getTransition().getId() == transition.getId()); + } + + @Override + public void supprimerArc(Arc arc) { + this.arcs.remove(arc); + // remove it from the list of arcs of the transition + if (arc instanceof Arc_ENTRANT) { + arc.getTransition().getArcs_ENTRANTS().remove(arc); + } else if (arc instanceof Arc_SORTANT) { + arc.getTransition().getArcs_SORTANTS().remove(arc); + } + } + @Override public void tirer_transition(String id) { @@ -129,6 +159,7 @@ public class ReseauPetri implements PetriNetService { } + @Override public void afficherEtat() { // TODO Auto-generated method stub diff --git a/src/test/java/org/petriNet/ReseauPetriTest.java b/src/test/java/org/petriNet/ReseauPetriTest.java index f942ba833e22cb67d23d24aaadae4415b18db9a9..ae0c35b6de7adf3f819bb2bcfa4391ee90545f46 100644 --- a/src/test/java/org/petriNet/ReseauPetriTest.java +++ b/src/test/java/org/petriNet/ReseauPetriTest.java @@ -8,24 +8,11 @@ import static org.junit.jupiter.api.Assertions.*; public class ReseauPetriTest { - /** - * Les fonctions à tester suivantes n’affichent rien. Elles créent des objets et les retournent à la - * fonction de test. C’est la fonction de test qui affiche afin que les testeurs puissent observer les - * résultats - */ - private ReseauPetri reseauPetri; private List<Place> places; private List<Transition> transitions; private LinkedList<Arc> arcs; - /** - * Créer un reseauPetri vide sans entrée. Résultat attendu : un RdP est créé vide - * Créer une transition. Résultat attendu : une transition est créée (sans lien) - * Créer une place avec nombres de jetons. Les cas : jetons ≥0, jetons < 0. - * Résultat attendu : une place est créée (sans lien), aucune place n’est créée ; Erreur - */ - @BeforeEach public void setUp() { reseauPetri = new ReseauPetri(); @@ -434,4 +421,82 @@ public class ReseauPetriTest { } + // Tests de supression + @Test + public void testSupprimerTransition() { + ReseauPetri Supp = new ReseauPetri(); + + Transition T1 = new Transition("T1", Supp.generateId(2)); + Supp.ajouterTransition(T1); + Supp.supprimerTransition(T1); + Supp.afficherReseau(); + } + + @Test + public void testDestruction_Place(){ + ReseauPetri Destruction = new ReseauPetri(); + + // créer un réseau de petri similaire à Active dans testActiverPetri_3 + Place P1 = new Place(2, Destruction.generateId(1)); + Destruction.ajouterPlace(P1); + + Transition T1 = new Transition("T1", Destruction.generateId(2)); + + // Creer l'arc entrant simple à T1 de P1 + Arc_ENTRANT arc = new Arc_entrant_simple(T1, P1, 1, Destruction.generateId(0)); + Destruction.ajouterArc(arc); + + T1.ajouterArc_ENTRANT(arc); + Destruction.ajouterTransition(T1); + + // Supprimer la place P1 + Destruction.supprimerPlace(P1); + Destruction.afficherReseau(); + + } + + @Test + public void testDestruction_Transition() { + ReseauPetri Destruction = new ReseauPetri(); + + // créer un réseau de petri similaire à Active dans testActiverPetri_3 + Place P1 = new Place(2, Destruction.generateId(1)); + Destruction.ajouterPlace(P1); + + Transition T1 = new Transition("T1", Destruction.generateId(2)); + + // Creer l'arc entrant simple à T1 de P1 + Arc_ENTRANT arc = new Arc_entrant_simple(T1, P1, 1, Destruction.generateId(0)); + Destruction.ajouterArc(arc); + + T1.ajouterArc_ENTRANT(arc); + Destruction.ajouterTransition(T1); + + // Supprimer la transition T1 + Destruction.supprimerTransition(T1); + Destruction.afficherReseau(); + } + + @Test + public void testDestruction_Arc() { + ReseauPetri Destruction = new ReseauPetri(); + + // créer un réseau de petri similaire à Active dans testActiverPetri_3 + Place P1 = new Place(2, Destruction.generateId(1)); + Destruction.ajouterPlace(P1); + + Transition T1 = new Transition("T1", Destruction.generateId(2)); + + // Creer l'arc entrant simple à T1 de P1 + Arc_ENTRANT arc = new Arc_entrant_simple(T1, P1, 1, Destruction.generateId(0)); + Destruction.ajouterArc(arc); + + T1.ajouterArc_ENTRANT(arc); + Destruction.ajouterTransition(T1); + + // Supprimer l'arc + Destruction.supprimerArc(arc); + Destruction.afficherReseau(); + } + }