package projects.tokenTree.nodes.nodeImplementations;


import java.awt.Color;
import java.awt.Graphics;
import java.util.Iterator;

import projects.tokenTree.nodes.messages.tokenMessage;
import projects.tokenTree.nodes.timers.initTimer;
import sinalgo.configuration.WrongConfigurationException;
import sinalgo.gui.transformation.PositionTransformation;
import sinalgo.nodes.Node;
import sinalgo.nodes.edges.Edge;
import sinalgo.nodes.messages.Inbox;
import sinalgo.nodes.messages.Message;
import sinalgo.tools.Tools;


public class tokenNode extends Node {

	public boolean passage =false;


	public void preStep() {}

	// ATTENTION lorsque init est appel� les liens de communications n'existent pas
	// il faut attend une unit� de temps, avant que les connections soient r�alis�es
	// nous utilisons donc un timer

	public void init() {
		(new initTimer()).startRelative(1, this);
	}

	// Lorsque le timer pr�c�dent expire, la fonction start est appel�e
	// elle correspond ainsi � l'initialisation r�elle du processus

	public void start(){
		if(this.ID==1) {
			this.passage=true;
			this.send(new tokenMessage(this), this.getNode(1));
		}
	}

	// Cette fonction g�re la r�ception de message
	// Elle est appel�e r�guli�rement m�me si aucun message n'a �t� re�u

	public void handleMessages(Inbox inbox) {
		// Test si il y a des messages

		while(inbox.hasNext())
		{
			Message m=inbox.next();
			if(m instanceof tokenMessage) // Si le processus a re�u le jeton 
			{	
				if ((this.ID == 1) && (getLabel(((tokenMessage) m).sender) == this.outgoingConnections.size())){
					
					Tools.stopSimulation();				
					}
				else{
					this.passage = true;
					send(new tokenMessage(this), getNode(getLabel(((tokenMessage) m).sender) %  this.outgoingConnections.size() + 1 ));
				}
			}	
		}
	}
	
	private int getLabel(Node node){
		
		Iterator<Edge> liste = this.outgoingConnections.iterator();
		int i = 1;
		while(liste.hasNext()){
			if (node == liste.next().endNode){
				return i;
			}
			i++;
		}
		return -1;
	}

	private Node getNode(int label){
		Iterator<Edge> liste = this.outgoingConnections.iterator();
		for(int i = 1; i < label; i++){
			liste.next();
		}
		return liste.next().endNode;
	}

	public void neighborhoodChange() {}
	public void postStep() {}
	public void checkRequirements() throws WrongConfigurationException {}

	public Color Couleur(){
		if (passage){
			return Color.GREEN;
		}
		return Color.RED;
	}

	// affichage du noeud

	public void draw(Graphics g, PositionTransformation pt, boolean highlight){
		this.setColor(this.Couleur());
		String text = ""+this.ID;
		super.drawNodeAsDiskWithText(g, pt, highlight, text, 20, Color.black);
	}


}

@@ -48,17 +48,16 @@
 tions;%0A%0A
-%0A
 import j
@@ -584,17 +584,16 @@
 false;%0A%0A
-%0A
 %09public 
@@ -647,17 +647,17 @@
 st appel
-%EF%BF%BD
+%C3%A9
  les lie
@@ -719,17 +719,17 @@
 une unit
-%EF%BF%BD
+%C3%A9
  de temp
@@ -769,14 +769,14 @@
 nt r
-%EF%BF%BD
+%C3%A9
 alis
-%EF%BF%BD
+%C3%A9
 es%0A%09
@@ -905,11 +905,11 @@
 r pr
-%EF%BF%BDc%EF%BF%BD
+%C3%A9c%C3%A9
 dent
@@ -944,17 +944,17 @@
 st appel
-%EF%BF%BD
+%C3%A9
 e%0A%09// el
@@ -973,17 +973,17 @@
 d ainsi 
-%EF%BF%BD
+%C3%A0
  l'initi
@@ -993,17 +993,17 @@
 sation r
-%EF%BF%BD
+%C3%A9
 elle du 
@@ -1163,17 +1163,17 @@
 on g
-%EF%BF%BD
+%C3%A8
 re la r
-%EF%BF%BD
+%C3%A9
 cept
@@ -1209,26 +1209,26 @@
 ppel
-%EF%BF%BDe r%EF%BF%BD
+%C3%A9e r%C3%A9
 guli
-%EF%BF%BD
+%C3%A8
 rement m
 %EF%BF%BDme 
@@ -1223,17 +1223,17 @@
 rement m
-%EF%BF%BD
+%C3%AA
 me si au
@@ -1252,15 +1252,15 @@
 n'a 
-%EF%BF%BDt%EF%BF%BD re%EF%BF%BD
+%C3%A9t%C3%A9 re%C3%A7
 u%0A%0A%09
@@ -1305,42 +1305,8 @@
 ) %7B%0A
-%09%09// Test si il y a des messages%0A%0A
 %09%09wh
@@ -1393,44 +1393,8 @@
 age)
- // Si le processus a re%EF%BF%BDu le jeton 
 %0A%09%09%09
@@ -1497,21 +1497,16 @@
 ze()))%7B%0A
-%09%09%09%09%09
 %0A%09%09%09%09%09To
@@ -1535,17 +1535,16 @@
 %09%09%09%0A%09%09%09%09
-%09
 %7D%0A%09%09%09%09el
@@ -1713,17 +1713,16 @@
 %0A%09%09%7D%0A%09%7D%0A
-%09
 %0A%09privat
@@ -1748,18 +1748,16 @@
  node)%7B%0A
-%09%09
 %0A%09%09Itera
@@ -2373,17 +2373,16 @@
 u noeud%0A
-%0A
 %09public 
@@ -2591,8 +2591,5 @@
 %0A%09%7D%0A
-%0A%0A%7D%0A
+%7D

fix linux acc