Subversion Repositories eFlore/Applications.cel

Rev

Rev 2221 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2221 Rev 2230
1
package org.tela_botanica.client.vues.image;
1
package org.tela_botanica.client.vues.image;
2
 
-
 
3
import org.tela_botanica.client.cel2;
2
 
4
import org.tela_botanica.client.interfaces.Rafraichissable;
3
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.util.MotsClesUtilitaire;
4
import org.tela_botanica.client.util.MotsClesUtilitaire;
6
 
-
 
7
import com.google.gwt.core.client.JavaScriptObject;
5
 
8
import com.google.gwt.user.client.Window;
6
import com.google.gwt.user.client.Window;
9
import com.gwtext.client.core.EventObject;
7
import com.gwtext.client.core.EventObject;
10
import com.gwtext.client.data.Node;
8
import com.gwtext.client.data.Node;
11
import com.gwtext.client.data.NodeTraversalCallback;
9
import com.gwtext.client.data.NodeTraversalCallback;
12
import com.gwtext.client.data.Tree;
10
import com.gwtext.client.data.Tree;
13
import com.gwtext.client.dd.DD;
-
 
14
import com.gwtext.client.dd.DragData;
11
import com.gwtext.client.dd.DragData;
15
import com.gwtext.client.dd.DragDrop;
12
import com.gwtext.client.dd.DragDrop;
16
import com.gwtext.client.widgets.BoxComponent;
-
 
17
import com.gwtext.client.widgets.Button;
13
import com.gwtext.client.widgets.Button;
18
import com.gwtext.client.widgets.Component;
14
import com.gwtext.client.widgets.Component;
19
import com.gwtext.client.widgets.Container;
15
import com.gwtext.client.widgets.Container;
20
import com.gwtext.client.widgets.Panel;
16
import com.gwtext.client.widgets.Panel;
21
import com.gwtext.client.widgets.Toolbar;
17
import com.gwtext.client.widgets.Toolbar;
22
import com.gwtext.client.widgets.ToolbarButton;
18
import com.gwtext.client.widgets.ToolbarButton;
23
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
19
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
24
import com.gwtext.client.widgets.event.ContainerListener;
-
 
25
import com.gwtext.client.widgets.event.PanelListener;
-
 
26
import com.gwtext.client.widgets.event.WindowListener;
-
 
27
import com.gwtext.client.widgets.event.WindowListenerAdapter;
20
import com.gwtext.client.widgets.event.WindowListenerAdapter;
28
import com.gwtext.client.widgets.form.TextField;
21
import com.gwtext.client.widgets.form.TextField;
29
import com.gwtext.client.widgets.layout.FitLayout;
22
import com.gwtext.client.widgets.layout.FitLayout;
30
import com.gwtext.client.widgets.layout.HorizontalLayout;
23
import com.gwtext.client.widgets.layout.HorizontalLayout;
31
import com.gwtext.client.widgets.layout.RowLayout;
24
import com.gwtext.client.widgets.layout.RowLayout;
32
import com.gwtext.client.widgets.layout.RowLayoutData;
25
import com.gwtext.client.widgets.layout.RowLayoutData;
33
import com.gwtext.client.widgets.layout.VerticalLayout;
-
 
34
import com.gwtext.client.widgets.tree.DropNodeCallback;
-
 
35
import com.gwtext.client.widgets.tree.MultiSelectionModel;
26
import com.gwtext.client.widgets.tree.MultiSelectionModel;
36
import com.gwtext.client.widgets.tree.TreeEditor;
27
import com.gwtext.client.widgets.tree.TreeEditor;
37
import com.gwtext.client.widgets.tree.TreeNode;
28
import com.gwtext.client.widgets.tree.TreeNode;
38
import com.gwtext.client.widgets.tree.TreePanel;
29
import com.gwtext.client.widgets.tree.TreePanel;
39
import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
30
import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
40
import com.gwtext.client.widgets.tree.event.TreePanelListener;
-
 
41
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
31
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
42
 
32
 
43
/**
33
/**
44
 * Arbre des mots clés, qui est une vue rafraichissable, qui contient des mots
34
 * Arbre des mots clés, qui est une vue rafraichissable, qui contient des mots
45
 * clés cochables et réorganisables à volonté
35
 * clés cochables et réorganisables à volonté
46
 * 
36
 * 
47
 * @author aurelien
37
 * @author aurelien
48
 * 
38
 * 
49
 */
39
 */
50
public abstract class FenetreGestionMotsCles extends com.gwtext.client.widgets.Window implements Rafraichissable {
40
public abstract class FenetreGestionMotsCles extends com.gwtext.client.widgets.Window implements Rafraichissable {
51
 
41
 
52
	/**
42
	/**
53
	 * Le treepanel qui affiche l'arbre
43
	 * Le treepanel qui affiche l'arbre
54
	 */
44
	 */
55
	private TreePanel arbreMotsCles = null;
45
	private TreePanel arbreMotsCles = null;
56
	/**
46
	/**
57
	 * L'éditeur qui permet de modifier les mots clés dans l'arbre
47
	 * L'éditeur qui permet de modifier les mots clés dans l'arbre
58
	 */
48
	 */
59
	private TreeEditor te = null;
49
	private TreeEditor te = null;
60
	/**
50
	/**
61
	 * Le textfield associé à l'éditeur
51
	 * Le textfield associé à l'éditeur
62
	 */
52
	 */
63
	private TextField tfEdit = null;
53
	private TextField tfEdit = null;
64
	/**
54
	/**
65
	 * Bouton de validation
55
	 * Bouton de validation
66
	 */
56
	 */
67
	private Button valider = null;
57
	private Button valider = null;
68
	
58
	
69
	/**
59
	/**
70
	 * Bouton d'annulation
60
	 * Bouton d'annulation
71
	 */
61
	 */
72
	private Button annuler = null;
62
	private Button annuler = null;
73
	
63
	
74
	/**
64
	/**
75
	 * Bouton d'ajout de tag
65
	 * Bouton d'ajout de tag
76
	 */
66
	 */
77
	private ToolbarButton ajouterTag = null;
67
	private ToolbarButton ajouterTag = null;
78
	
68
	
79
	/**
69
	/**
80
	 * Bouton de suppression de tag
70
	 * Bouton de suppression de tag
81
	 */
71
	 */
82
	private ToolbarButton supprimerTag = null;
72
	private ToolbarButton supprimerTag = null;
83
	
73
	
84
	/**
74
	/**
85
	 * Bouton de renommage de tag
75
	 * Bouton de renommage de tag
86
	 */
76
	 */
87
	private ToolbarButton renommerTag = null;
77
	private ToolbarButton renommerTag = null;
88
	
78
	
89
	/**
79
	/**
90
	 * Une string permettant connaitre les mots clés cochés en cours séparés par
80
	 * Une string permettant connaitre les mots clés cochés en cours séparés par
91
	 * des virgules
81
	 * des virgules
92
	 */
82
	 */
93
	private String motsClesEnCours = "";
83
	private String motsClesEnCours = "";
94
	
84
	
95
	private String[] tableauMotsClesEnCours = new String[0];
85
	private String[] tableauMotsClesEnCours = new String[0];
96
	/**
86
	/**
97
	 * Tableau contenant les mots clés qui n'ont pas encore été jaouté à l'arbre
87
	 * Tableau contenant les mots clés qui n'ont pas encore été jaouté à l'arbre
98
	 * (sert au lazy rendering quand on reçoit des mots clés avant que le rendu
88
	 * (sert au lazy rendering quand on reçoit des mots clés avant que le rendu
99
	 * du conteneur n'ai été effectué)
89
	 * du conteneur n'ai été effectué)
100
	 */
90
	 */
101
	private String[] motsClesEnAttente = new String[0];
91
	private String[] motsClesEnAttente = new String[0];
102
	/**
92
	/**
103
	 * Booléen d'évènement qui sert à savoir si on est en train d'ajouter un
93
	 * Booléen d'évènement qui sert à savoir si on est en train d'ajouter un
104
	 * noeud
94
	 * noeud
105
	 */
95
	 */
106
	private boolean ajoutNoeud = false;
96
	private boolean ajoutNoeud = false;
107
	/**
97
	/**
108
	 * Booléen d'évènement qui sert à savoir si on est en train de modifier un
98
	 * Booléen d'évènement qui sert à savoir si on est en train de modifier un
109
	 * noeud
99
	 * noeud
110
	 */
100
	 */
111
	private boolean modifNoeud = false;
101
	private boolean modifNoeud = false;
112
	/**
102
	/**
113
	 * Booléen d'instanciation du conteneur
103
	 * Booléen d'instanciation du conteneur
114
	 */
104
	 */
115
	private boolean arbreCharge = false;
105
	private boolean arbreCharge = false;
116
	/**
106
	/**
117
	 * Booléen d'évènement qui sert à savoir si les mots clés ont bien été reçu
107
	 * Booléen d'évènement qui sert à savoir si les mots clés ont bien été reçu
118
	 */
108
	 */
119
	private boolean motsCleInitialises;
109
	private boolean motsCleInitialises;
120
	
110
	
121
	/**
111
	/**
122
	 * panneau intermédiaire contenant l'arbre
112
	 * panneau intermédiaire contenant l'arbre
123
	 */
113
	 */
124
	private Panel panelIntermediaire;
114
	private Panel panelIntermediaire;
125
	private String cheminTemporaireAjout;
115
	private String cheminTemporaireAjout;
126
 
116
 
127
	/**
117
	/**
128
	 * Constructeur avec paramètre
118
	 * Constructeur avec paramètre
129
	 * 
119
	 * 
130
	 * @param im
120
	 * @param im
131
	 *            le médiateur à associer
121
	 *            le médiateur à associer
132
	 */
122
	 */
133
	public FenetreGestionMotsCles() {
123
	public FenetreGestionMotsCles() {
134
				
124
				
135
		// on crée le panel
125
		// on crée le panel
136
		setTitle("Mots clés");
126
		setTitle("Mots clés");
137
		this.setLayoutData(new RowLayout());
127
		this.setLayoutData(new RowLayout());
138
 
128
 
139
		// on crée le conteneur de l'arbre
129
		// on crée le conteneur de l'arbre
140
		arbreMotsCles = new TreePanel();
130
		arbreMotsCles = new TreePanel();
141
		// on permet le drag and drop dans l'arbre
131
		// on permet le drag and drop dans l'arbre
142
		arbreMotsCles.setEnableDD(true);
132
		arbreMotsCles.setEnableDD(true);
143
		arbreMotsCles.setId("x-view-tree-keyword-imgs");
133
		arbreMotsCles.setId("x-view-tree-keyword-imgs");
144
 
134
 
145
		arbreMotsCles.setSelectionModel(new MultiSelectionModel());
135
		arbreMotsCles.setSelectionModel(new MultiSelectionModel());
146
 
136
 
147
		// on crée une racine pour l'arbre
137
		// on crée une racine pour l'arbre
148
		TreeNode root = new TreeNode("Tags");
138
		TreeNode root = new TreeNode("Tags");
149
		root.setId("racine");
139
		root.setId("racine");
150
		String[] usObject = { "Mots clés", "racine" };
140
		String[] usObject = { "Mots clés", "racine" };
151
		root.setExpandable(true);
141
		root.setExpandable(true);
152
		arbreMotsCles.setRootNode(root);
142
		arbreMotsCles.setRootNode(root);
153
		arbreMotsCles.setRootVisible(true);
143
		arbreMotsCles.setRootVisible(true);
154
		arbreMotsCles.setBorder(false);
144
		arbreMotsCles.setBorder(false);
155
		arbreMotsCles.setWidth(500);
145
		arbreMotsCles.setWidth(500);
156
		
146
		
157
		root.setUserObject(usObject);
147
		root.setUserObject(usObject);
158
		
148
		
159
		arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
149
		arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
160
 
150
 
161
			@Override
151
			@Override
162
			public void onClick(Node node, EventObject e) {
152
			public void onClick(Node node, EventObject e) {
163
				if(!arbreCharge) {
153
				if(!arbreCharge) {
164
					expand();
154
					expand();
165
				}
155
				}
166
			}
156
			}
167
 
157
 
168
			@Override
158
			@Override
169
			public void onExpand(Node node) {
159
			public void onExpand(Node node) {
170
				if(!arbreCharge) {
160
				if(!arbreCharge) {
171
					obtenirArbreMotsCles();
161
					obtenirArbreMotsCles();
172
					arbreCharge = true;
162
					arbreCharge = true;
173
				}
163
				}
174
			}
164
			}
175
 
165
 
176
		});
166
		});
177
 
167
 
178
		// on crée l'éditeur pour l'arbre
168
		// on crée l'éditeur pour l'arbre
179
		tfEdit = new TextField();
169
		tfEdit = new TextField();
180
		tfEdit.setAutoWidth(true);
170
		tfEdit.setAutoWidth(true);
181
		te = new TreeEditor(arbreMotsCles, tfEdit);
171
		te = new TreeEditor(arbreMotsCles, tfEdit);
182
		valider = new Button("Appliquer");
172
		valider = new Button("Appliquer");
183
		annuler = new Button("Annuler");
173
		annuler = new Button("Annuler");
184
		arbreMotsCles.add(te);
174
		arbreMotsCles.add(te);
185
		
175
		
186
		panelIntermediaire = new Panel();
176
		panelIntermediaire = new Panel();
187
		panelIntermediaire.setLayout(new FitLayout());
177
		panelIntermediaire.setLayout(new FitLayout());
188
		panelIntermediaire.setAutoScroll(true);
178
		panelIntermediaire.setAutoScroll(true);
189
		panelIntermediaire.setWidth("100%");
179
		panelIntermediaire.setWidth("100%");
190
		arbreMotsCles.setWidth("100%");
180
		arbreMotsCles.setWidth("100%");
191
		arbreMotsCles.setHeight("100%");
181
		arbreMotsCles.setHeight("100%");
192
		
182
		
193
		Panel panelBoutons = new Panel();
183
		Panel panelBoutons = new Panel();
194
		panelBoutons.setLayout(new HorizontalLayout(130));
184
		panelBoutons.setLayout(new HorizontalLayout(130));
195
		panelBoutons.setWidth("100%");
185
		panelBoutons.setWidth("100%");
196
 
186
 
197
		// on met en forme le layout
187
		// on met en forme le layout
198
		panelIntermediaire.add(arbreMotsCles);
188
		panelIntermediaire.add(arbreMotsCles);
199
		panelBoutons.add(annuler);
189
		panelBoutons.add(annuler);
200
		panelBoutons.add(valider);
190
		panelBoutons.add(valider);
201
		
191
		
202
		this.add(panelIntermediaire, new RowLayoutData());
192
		this.add(panelIntermediaire, new RowLayoutData());
203
		this.add(panelBoutons, new RowLayoutData(30));
193
		this.add(panelBoutons, new RowLayoutData(30));
204
		arbreMotsCles.setHeight("100%");
194
		arbreMotsCles.setHeight("100%");
205
		arbreMotsCles.setAutoScroll(true);
195
		arbreMotsCles.setAutoScroll(true);
206
		
196
		
207
		Toolbar barreBouton = new Toolbar();
197
		Toolbar barreBouton = new Toolbar();
208
		ajouterTag = new ToolbarButton("Nouveau Tag");
198
		ajouterTag = new ToolbarButton("Nouveau Tag");
209
		ajouterTag.setIcon("mot_cle_ajouter.png");
199
		ajouterTag.setIcon("mot_cle_ajouter.png");
210
		renommerTag = new ToolbarButton("Renommer");
200
		renommerTag = new ToolbarButton("Renommer");
211
		renommerTag.setIcon("mot_cle_editer.png");
201
		renommerTag.setIcon("mot_cle_editer.png");
212
		renommerTag.disable();
202
		renommerTag.disable();
213
		supprimerTag = new ToolbarButton("Supprimer");
203
		supprimerTag = new ToolbarButton("Supprimer");
214
		supprimerTag.setIcon("mot_cle_supprimer.png");
204
		supprimerTag.setIcon("mot_cle_supprimer.png");
215
		supprimerTag.disable();
205
		supprimerTag.disable();
216
		barreBouton.addButton(ajouterTag);
206
		barreBouton.addButton(ajouterTag);
217
		barreBouton.addSeparator();
207
		barreBouton.addSeparator();
218
		barreBouton.addButton(renommerTag);
208
		barreBouton.addButton(renommerTag);
219
		barreBouton.addSeparator();
209
		barreBouton.addSeparator();
220
		barreBouton.addButton(supprimerTag);
210
		barreBouton.addButton(supprimerTag);
221
		this.setTopToolbar(barreBouton);
211
		this.setTopToolbar(barreBouton);
222
		
212
		
223
		setCloseAction(com.gwtext.client.widgets.Window.HIDE);		
213
		setCloseAction(com.gwtext.client.widgets.Window.HIDE);		
224
		// on ajoute les listeners
214
		// on ajoute les listeners
225
		ajouterListeners();
215
		ajouterListeners();
226
 
216
 
227
	}
217
	}
228
 
218
 
229
 
219
 
230
	/**
220
	/**
231
	 * Acesseur pour l'arbre des mots clés
221
	 * Acesseur pour l'arbre des mots clés
232
	 * 
222
	 * 
233
	 * @return le panel contenant l'arbre
223
	 * @return le panel contenant l'arbre
234
	 */
224
	 */
235
	public TreePanel getArbreMotsCles() {
225
	public TreePanel getArbreMotsCles() {
236
		return arbreMotsCles;
226
		return arbreMotsCles;
237
	}
227
	}
238
 
228
 
239
	/**
229
	/**
240
	 * Accesseur pour l'éditeur
230
	 * Accesseur pour l'éditeur
241
	 * 
231
	 * 
242
	 * @return l'éditeur associé à l'arbre
232
	 * @return l'éditeur associé à l'arbre
243
	 */
233
	 */
244
	public TreeEditor getTe() {
234
	public TreeEditor getTe() {
245
		return te;
235
		return te;
246
	}
236
	}
247
 
237
 
248
	/**
238
	/**
249
	 * Acesseur pour le TextField associé à l'éditeur
239
	 * Acesseur pour le TextField associé à l'éditeur
250
	 * 
240
	 * 
251
	 * @return le champ texte associé à l'éditeur
241
	 * @return le champ texte associé à l'éditeur
252
	 */
242
	 */
253
	public TextField getTfEdit() {
243
	public TextField getTfEdit() {
254
		return tfEdit;
244
		return tfEdit;
255
	}
245
	}
256
	
246
	
257
	protected abstract void surAffichageMenuContextuel(TreeNode node, EventObject e, TreeEditor te);
247
	protected abstract void surAffichageMenuContextuel(TreeNode node, EventObject e, TreeEditor te);
258
	protected abstract void surAjoutMotCle(TreeNode node, Tree arbre);
248
	protected abstract void surAjoutMotCle(TreeNode node, Tree arbre);
259
	protected abstract void surSuppressionMotCle(TreeNode node, Tree arbre);
249
	protected abstract void surSuppressionMotCle(TreeNode node, Tree arbre);
260
	protected abstract void surDeplacementMotCle(TreeNode node, Tree arbre);
250
	protected abstract void surDeplacementMotCle(TreeNode node, Tree arbre);
261
	protected abstract void surChangementTexte(TreeNode node, Tree arbre);
251
	protected abstract void surChangementTexte(TreeNode node, Tree arbre);
262
	protected abstract void surClicValider(String chaineMotsCles, Tree arbre);
252
	protected abstract void surClicValider(String chaineMotsCles, Tree arbre);
263
	protected abstract void demanderArbreMotsCles(Rafraichissable r);
253
	protected abstract void demanderArbreMotsCles(Rafraichissable r);
264
	protected abstract void surRetourWebService(Tree arbre);
254
	protected abstract void surRetourWebService(Tree arbre);
265
 
255
 
266
	/**
256
	/**
267
	 * Ajoute les listeners nécessaires pour la gestion des évènements
257
	 * Ajoute les listeners nécessaires pour la gestion des évènements
268
	 */
258
	 */
269
	private void ajouterListeners() {
259
	private void ajouterListeners() {
270
		
260
		
271
		this.addListener(new WindowListenerAdapter() {			
261
		this.addListener(new WindowListenerAdapter() {			
272
			@Override
262
			@Override
273
			public void onResize(com.gwtext.client.widgets.Window source, int width,
263
			public void onResize(com.gwtext.client.widgets.Window source, int width,
274
					int height) {
264
					int height) {
275
					panelIntermediaire.setHeight(getHeight() - 80);		
265
					panelIntermediaire.setHeight(getHeight() - 80);		
276
			}
266
			}
277
		});
267
		});
278
						
268
						
279
		arbreMotsCles.addListener(new TreePanelListenerAdapter() {
269
		arbreMotsCles.addListener(new TreePanelListenerAdapter() {
280
			@Override
270
			@Override
281
			public void onAfterLayout(Container self) {
271
			public void onAfterLayout(Container self) {
282
				panelIntermediaire.setHeight(getHeight() - 80);		
272
				panelIntermediaire.setHeight(getHeight() - 80);		
283
			}
273
			}
284
			
274
			
285
			@Override
275
			@Override
286
			public void onExpandNode(TreeNode node) {		
276
			public void onExpandNode(TreeNode node) {		
287
				cocherMotsCles(tableauMotsClesEnCours);
277
				cocherMotsCles(tableauMotsClesEnCours);
288
			}
278
			}
289
 
279
 
290
			// gestion du clic sur un noeud
280
			// gestion du clic sur un noeud
291
			@Override
281
			@Override
292
			public void onClick(TreeNode node, EventObject e) {
282
			public void onClick(TreeNode node, EventObject e) {
293
 
283
 
294
				e.stopEvent();
284
				e.stopEvent();
295
				gererClicNoeud(node);
285
				gererClicNoeud(node);
296
				if(!node.equals(arbreMotsCles.getRootNode())) {
286
				if(!node.equals(arbreMotsCles.getRootNode())) {
297
					supprimerTag.enable();
287
					supprimerTag.enable();
298
					renommerTag.enable();
288
					renommerTag.enable();
299
				}
289
				}
300
			}
290
			}
301
 
291
 
302
			// gestion du clic droit sur un noeud
292
			// gestion du clic droit sur un noeud
303
			@Override
293
			@Override
304
			public void onContextMenu(TreeNode node, EventObject e) {
294
			public void onContextMenu(TreeNode node, EventObject e) {
305
 
295
 
306
				e.stopEvent();
296
				e.stopEvent();
307
				surAffichageMenuContextuel(node, e, getTe());
297
				surAffichageMenuContextuel(node, e, getTe());
308
				if(!node.equals(arbreMotsCles.getRootNode())) {
298
				if(!node.equals(arbreMotsCles.getRootNode())) {
309
					supprimerTag.enable();
299
					supprimerTag.enable();
310
					renommerTag.enable();
300
					renommerTag.enable();
311
				}
301
				}
312
			}
302
			}
313
 
303
 
314
			// gestion de la modification du texte d'un noeud
304
			// gestion de la modification du texte d'un noeud
315
			@Override
305
			@Override
316
			public void onTextChange(TreeNode node, String text, String oldText) {
306
			public void onTextChange(TreeNode node, String text, String oldText) {
317
				
307
				
318
				if(!MotsClesUtilitaire.estUnMotCleAutorise(text)) {
308
				if(!MotsClesUtilitaire.estUnMotCleAutorise(text)) {
319
					te.startEdit(node);
309
					te.startEdit(node);
320
					Window.alert("Un mot clé ne peut pas être vide ou contenir les caractères suivants : "+MotsClesUtilitaire.getChaineCaracteresInterdits());
310
					Window.alert("Un mot clé ne peut pas être vide ou contenir les caractères suivants : "+MotsClesUtilitaire.getChaineCaracteresInterdits());
321
					return;
311
					return;
322
				}
312
				}
323
				
313
				
324
				if(!MotsClesUtilitaire.estUnePositionAutorisee(node, node.getParentNode(), text)) {
314
				if(!MotsClesUtilitaire.estUnePositionAutorisee(node, node.getParentNode(), text)) {
325
					te.startEdit(node);
315
					te.startEdit(node);
326
					Window.alert("Un mot clé de même nom existe déjà à cette position");
316
					Window.alert("Un mot clé de même nom existe déjà à cette position");
327
					return;
317
					return;
328
				}
318
				}
329
 
319
 
330
				if(node.equals(arbreMotsCles.getRootNode())) {
320
				if(node.equals(arbreMotsCles.getRootNode())) {
331
					return;
321
					return;
332
				}
322
				}
333
 
323
 
334
				// on récupère les informations associées au noeud
324
				// on récupère les informations associées au noeud
335
				TreeNode nd = node;
325
				TreeNode nd = node;
336
				String[] usObject = new String[2];
326
				String[] usObject = new String[2];
337
				usObject[0] = text;
327
				usObject[0] = text;
338
				usObject[1] = ((String[]) nd.getUserObject())[1];
328
				usObject[1] = ((String[]) nd.getUserObject())[1];
339
				nd.setUserObject(usObject);
329
				nd.setUserObject(usObject);
340
 
330
 
341
				// si c'est un nouveau noeud
331
				// si c'est un nouveau noeud
342
				if (ajoutNoeud) {
332
				if (ajoutNoeud) {
343
					// on considère l'ajout achevé
333
					// on considère l'ajout achevé
344
					ajoutNoeud = false;
334
					ajoutNoeud = false;
345
					// et on notifie le médiateur de l'ajout et on lui passe
335
					// et on notifie le médiateur de l'ajout et on lui passe
346
					// l'arbre
336
					// l'arbre
347
					surAjoutMotCle(nd, getArbreMotsCles().getTree());
337
					surAjoutMotCle(nd, getArbreMotsCles().getTree());
348
					arbreMotsCles.disable();
338
					arbreMotsCles.disable();
349
				}
339
				}
350
				// si c'est noeud déjà existant
340
				// si c'est noeud déjà existant
351
				else {
341
				else {
352
					// on considère la modification achevée
342
					// on considère la modification achevée
353
					modifNoeud = false;
343
					modifNoeud = false;
354
					
344
					
355
					if(!text.equals(oldText)) {
345
					if(!text.equals(oldText)) {
356
						// et on notifie le médiateur de la modification et on lui
346
						// et on notifie le médiateur de la modification et on lui
357
						// passe l'arbre
347
						// passe l'arbre
358
						surChangementTexte(nd, getArbreMotsCles().getTree());
348
						surChangementTexte(nd, getArbreMotsCles().getTree());
359
						arbreMotsCles.disable();
349
						arbreMotsCles.disable();
360
					}
350
					}
361
				}
351
				}
362
			}
352
			}
363
			
353
			
364
			@Override
354
			@Override
365
			public boolean doBeforeMoveNode(Tree tree, TreeNode node,
355
			public boolean doBeforeMoveNode(Tree tree, TreeNode node,
366
					TreeNode oldParent, TreeNode newParent, int index) {
356
					TreeNode oldParent, TreeNode newParent, int index) {
367
				boolean ok = true;
357
				boolean ok = true;
368
				if(!MotsClesUtilitaire.estUnePositionAutorisee(node, newParent, node.getText())) {
358
				if(!MotsClesUtilitaire.estUnePositionAutorisee(node, newParent, node.getText())) {
369
					ok = false;
359
					ok = false;
370
					Window.alert("Un mot clé de même nom existe déjà à cette position");
360
					Window.alert("Un mot clé de même nom existe déjà à cette position");
371
				}
361
				}
372
				return ok;
362
				return ok;
373
			}
363
			}
374
			
364
			
375
			@Override
365
			@Override
376
			public boolean onNodeDragOver(TreePanel treePanel, TreeNode target,
366
			public boolean onNodeDragOver(TreePanel treePanel, TreeNode target,
377
					DragData dragData, String point, DragDrop source,
367
					DragData dragData, String point, DragDrop source,
378
					TreeNode dropNode) {
368
					TreeNode dropNode) {
379
				return MotsClesUtilitaire.estUnePositionAutorisee(dropNode, target, dropNode.getText());
369
				return MotsClesUtilitaire.estUnePositionAutorisee(dropNode, target, dropNode.getText());
380
			}
370
			}
381
 
371
 
382
			// gestion du déplacement d'un noeud
372
			// gestion du déplacement d'un noeud
383
			@Override
373
			@Override
384
			public void onMoveNode(Tree tree, TreeNode node,
374
			public void onMoveNode(Tree tree, TreeNode node,
385
					TreeNode oldParent, TreeNode newParent, int index) {
375
					TreeNode oldParent, TreeNode newParent, int index) {
386
				// on notifie le médiateur et on lui passe l'arbre
376
				// on notifie le médiateur et on lui passe l'arbre
387
				surDeplacementMotCle(node, getArbreMotsCles().getTree());
377
				surDeplacementMotCle(node, getArbreMotsCles().getTree());
388
			}
378
			}
389
 
379
 
390
		});
380
		});
391
 
381
 
392
		// gestion de la validation
382
		// gestion de la validation
393
		valider.addListener(new ButtonListenerAdapter() {
383
		valider.addListener(new ButtonListenerAdapter() {
394
 
384
 
395
			// lors du clic
385
			// lors du clic
396
			@Override
386
			@Override
397
			public void onClick(Button button, EventObject e) {
387
			public void onClick(Button button, EventObject e) {
398
 
388
 
399
				// on vide les mots clés en cours
389
				// on vide les mots clés en cours
400
				motsClesEnCours = "";
390
				motsClesEnCours = "";
401
				// pour chaque noeud à partir de la racine
391
				// pour chaque noeud à partir de la racine
402
				getArbreMotsCles().getRootNode().cascade(
392
				getArbreMotsCles().getRootNode().cascade(
403
						new NodeTraversalCallback() {
393
						new NodeTraversalCallback() {
404
 
394
 
405
							// on éxécute une fonction
395
							// on éxécute une fonction
406
							@Override
396
							@Override
407
							public boolean execute(Node node) {
397
							public boolean execute(Node node) {
408
 
398
 
409
								// on récupère le mot clé associé au noeud et
399
								// on récupère le mot clé associé au noeud et
410
								// ses infos
400
								// ses infos
411
								TreeNode tn = getArbreMotsCles().getNodeById(
401
								TreeNode tn = getArbreMotsCles().getNodeById(
412
										node.getId());
402
										node.getId());
413
 
403
 
414
								String[] usObject = (String[]) tn
404
								String[] usObject = (String[]) tn
415
										.getUserObject();
405
										.getUserObject();
416
								/*getIMediateur().mettreAjourMotsClesId(
406
								/*getIMediateur().mettreAjourMotsClesId(
417
										usObject[0], usObject[1]);*/
407
										usObject[0], usObject[1]);*/
418
 
408
 
419
								if (tn.getUI().isChecked()) {
409
								if (tn.getUI().isChecked()) {
420
									// et les concatène à la string des mots
410
									// et les concatène à la string des mots
421
									// clés en cours
411
									// clés en cours
422
									motsClesEnCours += usObject[1] + ",";
412
									motsClesEnCours += usObject[1] + ",";
423
								}
413
								}
424
 
414
 
425
								return true;
415
								return true;
426
							}
416
							}
427
 
417
 
428
						});
418
						});
429
 
419
 
430
				// enfin on notifie le médiateur et on lui passe l'arbre et la
420
				// enfin on notifie le médiateur et on lui passe l'arbre et la
431
				// liste des mots clés ainsi obtenue
421
				// liste des mots clés ainsi obtenue
432
				surClicValider(motsClesEnCours, arbreMotsCles.getTree());
422
				surClicValider(motsClesEnCours, arbreMotsCles.getTree());
433
			}
423
			}
434
		});
424
		});
435
		
425
		
436
		annuler.addListener(new ButtonListenerAdapter() {
426
		annuler.addListener(new ButtonListenerAdapter() {
437
			@Override
427
			@Override
438
			public void onClick(Button button, EventObject e) {
428
			public void onClick(Button button, EventObject e) {
439
				hide();
429
				hide();
440
			}
430
			}
441
		});
431
		});
442
		
432
		
443
		renommerTag.addListener(new ButtonListenerAdapter() {
433
		renommerTag.addListener(new ButtonListenerAdapter() {
444
			@Override
434
			@Override
445
			public void onClick(Button button, EventObject e) {
435
			public void onClick(Button button, EventObject e) {
446
				TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
436
				TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
447
				TreeNode noeudRenommage;
437
				TreeNode noeudRenommage;
448
				if(noeuds.length > 0) {
438
				if(noeuds.length > 0) {
449
					noeudRenommage = noeuds[noeuds.length - 1];
439
					noeudRenommage = noeuds[noeuds.length - 1];
450
				} else {
440
				} else {
451
					noeudRenommage = arbreMotsCles.getRootNode();
441
					noeudRenommage = arbreMotsCles.getRootNode();
452
				}
442
				}
453
				renommerNoeud(noeudRenommage);
443
				renommerNoeud(noeudRenommage);
454
			}
444
			}
455
		});
445
		});
456
		
446
		
457
		ajouterTag.addListener(new ButtonListenerAdapter() {
447
		ajouterTag.addListener(new ButtonListenerAdapter() {
458
			@Override
448
			@Override
459
			public void onClick(Button button, EventObject e) {
449
			public void onClick(Button button, EventObject e) {
460
				
450
				
461
				TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
451
				TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
462
				TreeNode noeudAjout;
452
				TreeNode noeudAjout;
463
				if(noeuds.length > 0) {
453
				if(noeuds.length > 0) {
464
					noeudAjout = noeuds[noeuds.length - 1];
454
					noeudAjout = noeuds[noeuds.length - 1];
465
				} else {
455
				} else {
466
					noeudAjout = arbreMotsCles.getRootNode();
456
					noeudAjout = arbreMotsCles.getRootNode();
467
				}
457
				}
468
 
458
 
469
				ajouterNoeud(noeudAjout);
459
				ajouterNoeud(noeudAjout);
470
			}
460
			}
471
		});
461
		});
472
		
462
		
473
		supprimerTag.addListener(new ButtonListenerAdapter() {
463
		supprimerTag.addListener(new ButtonListenerAdapter() {
474
			@Override
464
			@Override
475
			public void onClick(Button button, EventObject e) {
465
			public void onClick(Button button, EventObject e) {
476
				
466
				
477
				TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
467
				TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
478
				for (int i = 0; i < noeuds.length; i++) {
468
				for (int i = 0; i < noeuds.length; i++) {
479
					supprimerNoeud(noeuds[i]);
469
					supprimerNoeud(noeuds[i]);
480
				}
470
				}
481
			}
471
			}
482
		});
472
		});
483
	}
473
	}
484
 
474
 
485
	/**
475
	/**
486
	 * Envoie une demande au médiateur pour obtenir l'arbre des mots clés
476
	 * Envoie une demande au médiateur pour obtenir l'arbre des mots clés
487
	 */
477
	 */
488
	public void obtenirArbreMotsCles() {
478
	public void obtenirArbreMotsCles() {
489
		demanderArbreMotsCles(this);
479
		demanderArbreMotsCles(this);
490
	}
480
	}
491
 
481
 
492
	/**
482
	/**
493
	 * Supprime un noeud de l'arbre
483
	 * Supprime un noeud de l'arbre
494
	 * 
484
	 * 
495
	 * @param n
485
	 * @param n
496
	 *            le noeud à supprimer
486
	 *            le noeud à supprimer
497
	 */
487
	 */
498
	public void supprimerNoeud(TreeNode n) {
488
	public void supprimerNoeud(TreeNode n) {
499
		// si ça n'est pas la racine (qu'on ne peut pas supprimer)
489
		// si ça n'est pas la racine (qu'on ne peut pas supprimer)
500
		if (!n.getId().equals(getArbreMotsCles().getRootNode().getId())) {
490
		if (!n.getId().equals(getArbreMotsCles().getRootNode().getId())) {
501
			if(Window.confirm("Êtes vous sur de vouloir supprimer le mot clé "+n.getText()+" ?")) {
491
			if(Window.confirm("Êtes vous sur de vouloir supprimer le mot clé "+n.getText()+" ?")) {
502
				// on détache le noeud et on le détruit
492
				// on détache le noeud et on le détruit
503
				n.getParentNode().removeChild(n);
493
				n.getParentNode().removeChild(n);
504
				n.destroy();
494
				n.destroy();
505
				// puis on en notifie le médiateur en lui passant le noeud supprimé
495
				// puis on en notifie le médiateur en lui passant le noeud supprimé
506
				// et l'arbre
496
				// et l'arbre
507
				surSuppressionMotCle(n, arbreMotsCles.getTree());
497
				surSuppressionMotCle(n, arbreMotsCles.getTree());
508
			}
498
			}
509
		} else {
499
		} else {
510
			// si l'utilisateur tente de supprimer la racine, on l'avertit de
500
			// si l'utilisateur tente de supprimer la racine, on l'avertit de
511
			// son erreur
501
			// son erreur
512
			Window.alert("Impossible de supprimer la racine de l'arbre");
502
			Window.alert("Impossible de supprimer la racine de l'arbre");
513
		}
503
		}
514
	}
504
	}
515
 
505
 
516
	/**
506
	/**
517
	 * Ajoute un noeud dans l'arbre au parent donné
507
	 * Ajoute un noeud dans l'arbre au parent donné
518
	 * 
508
	 * 
519
	 * @param parent
509
	 * @param parent
520
	 *            le futur parent du noeud à ajouter
510
	 *            le futur parent du noeud à ajouter
521
	 */
511
	 */
522
	public void ajouterNoeud(TreeNode parent) {
512
	public void ajouterNoeud(TreeNode parent) {
523
		ajoutNoeud = true;		
513
		ajoutNoeud = true;		
524
		TreeNode nd = MotsClesUtilitaire.ajouterNoeud(parent, true);
514
		TreeNode nd = MotsClesUtilitaire.ajouterNoeud(parent, true);
525
		// on le concatène au parent et on étend ses enfants
515
		// on le concatène au parent et on étend ses enfants
526
		parent.appendChild(nd);
516
		parent.appendChild(nd);
527
		parent.expand();
517
		parent.expand();
528
		cheminTemporaireAjout = nd.getId();
518
		cheminTemporaireAjout = nd.getId();
529
		te.startEdit(nd);
519
		te.startEdit(nd);
530
	}
520
	}
531
 
521
 
532
	/**
522
	/**
533
	 * Renomme le noeud passé en paramètre
523
	 * Renomme le noeud passé en paramètre
534
	 */
524
	 */
535
	public void renommerNoeud(TreeNode n) {
525
	public void renommerNoeud(TreeNode n) {
536
		// TODO Auto-generated method stub
526
		// TODO Auto-generated method stub
537
		te.startEdit(n);
527
		te.startEdit(n);
538
	}
528
	}
539
 
529
 
540
	/**
530
	/**
541
	 * Coche le noeud s'il est décoché, le décoche sinon
531
	 * Coche le noeud s'il est décoché, le décoche sinon
542
	 * 
532
	 * 
543
	 * @param node
533
	 * @param node
544
	 */
534
	 */
545
	public void gererClicNoeud(TreeNode node) {
535
	public void gererClicNoeud(TreeNode node) {
546
		if (node.getUI().isChecked()) {
536
		if (node.getUI().isChecked()) {
547
			node.getUI().toggleCheck(false);
537
			node.getUI().toggleCheck(false);
548
		} else {
538
		} else {
549
			node.getUI().toggleCheck(true);
539
			node.getUI().toggleCheck(true);
550
		}
540
		}
551
	}
541
	}
552
 
542
 
553
	/**
543
	/**
554
	 * Parcourt l'arbre et coche les noeud qui font partie de la liste des mots
544
	 * Parcourt l'arbre et coche les noeud qui font partie de la liste des mots
555
	 * clés à cocher
545
	 * clés à cocher
556
	 * 
546
	 * 
557
	 * @param motsClesIds
547
	 * @param motsClesIds
558
	 *            un tableau contenant les identifiants des mots clés à cocher
548
	 *            un tableau contenant les identifiants des mots clés à cocher
559
	 */
549
	 */
560
	public void cocherMotsCles(final String[] motsClesIds) {
550
	public void cocherMotsCles(final String[] motsClesIds) {
561
		if (getArbreMotsCles() != null
551
		if (getArbreMotsCles() != null
562
				&& getArbreMotsCles().getRootNode() != null) {
552
				&& getArbreMotsCles().getRootNode() != null) {
563
			// à partir de la racine
553
			// à partir de la racine
564
			getArbreMotsCles().getRootNode().cascade(
554
			getArbreMotsCles().getRootNode().cascade(
565
				new NodeTraversalCallback() {
555
				new NodeTraversalCallback() {
566
 
556
 
567
					// pour chaque noeud
557
					// pour chaque noeud
568
					@Override
558
					@Override
569
					public boolean execute(Node node) {
559
					public boolean execute(Node node) {
570
 
560
 
571
						String usObject[] = (String[]) node
561
						String usObject[] = (String[]) node
572
								.getUserObject();
562
								.getUserObject();
573
						String nodeId = usObject[1];
563
						String nodeId = usObject[1];
574
						
564
						
575
						TreeNode tn = getArbreMotsCles().getNodeById(node.getId());
565
						TreeNode tn = getArbreMotsCles().getNodeById(node.getId());
576
						if(tn != null) {
566
						if(tn != null) {
577
							tn.getUI().toggleCheck(false);
567
							tn.getUI().toggleCheck(false);
578
							// on parcourt le tableau des mots clés
568
							// on parcourt le tableau des mots clés
579
							for (int i = 0; i < motsClesIds.length; i++) {
569
							for (int i = 0; i < motsClesIds.length; i++) {
580
								// si le mot clé fait partie des id à cocher on
570
								// si le mot clé fait partie des id à cocher on
581
								// le coche
571
								// le coche
582
 
572
 
583
								if (nodeId.equals(motsClesIds[i])) {
573
								if (nodeId.equals(motsClesIds[i])) {
584
									tn.getUI().toggleCheck(true);
574
									tn.getUI().toggleCheck(true);
585
									tn.ensureVisible();
575
									tn.ensureVisible();
586
									return true;
576
									return true;
587
								}
577
								}
588
							}
578
							}
589
							// et on passe au suivant
579
							// et on passe au suivant
590
						}
580
						}
591
						
581
						
592
						return true;
582
						return true;
593
					}
583
					}
594
 
584
 
595
				});
585
				});
596
		}
586
		}
597
	}
587
	}
598
 
588
 
599
	/**
589
	/**
600
	 * Méthode héritée de l'interface rafraichissable
590
	 * Méthode héritée de l'interface rafraichissable
601
	 * 
591
	 * 
602
	 * @param nouvelleDonnees
592
	 * @param nouvelleDonnees
603
	 *            les nouvelles données pour l'objet
593
	 *            les nouvelles données pour l'objet
604
	 * @param repandreRafraichissement
594
	 * @param repandreRafraichissement
605
	 *            booleen qui dit si on doit répandre l'évenement
595
	 *            booleen qui dit si on doit répandre l'évenement
606
	 */
596
	 */
607
	@Override
597
	@Override
608
	public void rafraichir(Object nouvelleDonnees,
598
	public void rafraichir(Object nouvelleDonnees,
609
			boolean repandreRafraichissement) {
599
			boolean repandreRafraichissement) {
610
		
600
		
611
		if(nouvelleDonnees instanceof Tree) {
601
		if(nouvelleDonnees instanceof Tree) {
612
 
602
 
613
			Tree nouvelArbre = (Tree)nouvelleDonnees ;
603
			Tree nouvelArbre = (Tree)nouvelleDonnees ;
614
 
604
 
615
			// on prend sa racine et on l'attache à l'arbre des mots clés
605
			// on prend sa racine et on l'attache à l'arbre des mots clés
616
			Node[] rootChild = getArbreMotsCles().getRootNode().getChildNodes();
606
			Node[] rootChild = getArbreMotsCles().getRootNode().getChildNodes();
617
			for (int i = 0; i < rootChild.length; i++) {
607
			for (int i = 0; i < rootChild.length; i++) {
618
				
608
				
619
				rootChild[i].remove();
609
				rootChild[i].remove();
620
			}
610
			}
621
			
611
			
622
			copierFilsNoeud(nouvelArbre.getRootNode(),getArbreMotsCles().getRootNode());
612
			copierFilsNoeud(nouvelArbre.getRootNode(),getArbreMotsCles().getRootNode());
623
 
613
 
624
			// si l'arbre n'était pas encore considéré comme instancié
614
			// si l'arbre n'était pas encore considéré comme instancié
625
			if (!arbreCharge) {
615
			if (!arbreCharge) {
626
				// on signale que oui
616
				// on signale que oui
627
				arbreCharge = true;
617
				arbreCharge = true;
628
			}
618
			}
629
		}
619
		}
630
 
620
 
631
		// Si on reçoit un tableau de String (cas ou l'on séléectionne une
621
		// Si on reçoit un tableau de String (cas ou l'on séléectionne une
632
		// nouvelle image)
622
		// nouvelle image)
633
		if (nouvelleDonnees instanceof String[]) {
623
		if (nouvelleDonnees instanceof String[]) {
634
 
624
 
635
			// le tableau de String contient les id des mots clés associés à
625
			// le tableau de String contient les id des mots clés associés à
636
			// l'image
626
			// l'image
637
			// on coche les mots clés contenu dans le tableau
627
			// on coche les mots clés contenu dans le tableau
638
			tableauMotsClesEnCours = (String[]) nouvelleDonnees;
628
			tableauMotsClesEnCours = (String[]) nouvelleDonnees;
639
			if(this.isVisible()) {
629
			if(this.isVisible()) {
640
				cocherMotsCles(tableauMotsClesEnCours);
630
				cocherMotsCles(tableauMotsClesEnCours);
641
			} else {
631
			} else {
642
				addListener(new WindowListenerAdapter() {
632
				addListener(new WindowListenerAdapter() {
643
					
633
					
644
					@Override
634
					@Override
645
					public void onShow(Component component) {
635
					public void onShow(Component component) {
646
						cocherMotsCles(tableauMotsClesEnCours);
636
						cocherMotsCles(tableauMotsClesEnCours);
647
					}
637
					}
648
				});
638
				});
649
			}
639
			}
650
		}
640
		}
651
		
641
		
652
		// reception d'un nouvel identifiant de mot clé
642
		// reception d'un nouvel identifiant de mot clé
653
		if(nouvelleDonnees instanceof Integer) {
643
		if(nouvelleDonnees instanceof Integer) {
654
			if(cheminTemporaireAjout != null) {
644
			if(cheminTemporaireAjout != null) {
655
				String id = ((Integer)(nouvelleDonnees)).toString();
645
				String id = ((Integer)(nouvelleDonnees)).toString();
656
				TreeNode noeudEnAjout = arbreMotsCles.getNodeById(cheminTemporaireAjout);
646
				TreeNode noeudEnAjout = arbreMotsCles.getNodeById(cheminTemporaireAjout);
657
				String[] userObj = {noeudEnAjout.getText(), id};
647
				String[] userObj = {noeudEnAjout.getText(), id};
658
				noeudEnAjout.setUserObject(userObj);
648
				noeudEnAjout.setUserObject(userObj);
659
				cheminTemporaireAjout = null;
649
				cheminTemporaireAjout = null;
660
			}
650
			}
661
		}
651
		}
662
		surRetourWebService(arbreMotsCles.getTree());
652
		surRetourWebService(arbreMotsCles.getTree());
663
		arbreMotsCles.enable();
653
		arbreMotsCles.enable();
664
	}
654
	}
665
	
655
	
666
	/**
656
	/**
667
	 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un
657
	 * Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un
668
	 * copie du sous arbre du premier noeud, qu'elle concatène au deuxième
658
	 * copie du sous arbre du premier noeud, qu'elle concatène au deuxième
669
	 * 
659
	 * 
670
	 * @param ndPereOriginal
660
	 * @param ndPereOriginal
671
	 *            le père des noeuds de l'arbre original
661
	 *            le père des noeuds de l'arbre original
672
	 * @param ndPereCopie
662
	 * @param ndPereCopie
673
	 *            le père qui va recevoir les copies
663
	 *            le père qui va recevoir les copies
674
	 */
664
	 */
675
	private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) {
665
	private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) {
676
		if (ndPereCopie != null && ndPereOriginal != null) {
666
		if (ndPereCopie != null && ndPereOriginal != null) {
677
			Node[] ndNodeFils = ndPereOriginal.getChildNodes();
667
			Node[] ndNodeFils = ndPereOriginal.getChildNodes();
678
			
668
			
679
			for (int i = 0; i < ndNodeFils.length; i++) {
669
			for (int i = 0; i < ndNodeFils.length; i++) {
680
 
670
 
681
				String[] usObj = (String[]) ndNodeFils[i].getUserObject();
671
				String[] usObj = (String[]) ndNodeFils[i].getUserObject();
682
				TreeNode child = new TreeNode(usObj[0]);
672
				TreeNode child = new TreeNode(usObj[0]);
683
				child.setId(usObj[1]);
673
				child.setId(usObj[1]);
684
				child.setChecked(false);
674
				child.setChecked(false);
685
				child.setUserObject(usObj);
675
				child.setUserObject(usObj);
686
				ndPereCopie.appendChild(child);
676
				ndPereCopie.appendChild(child);
687
 
677
 
688
				if (!ndNodeFils[i].isLeaf()) {
678
				if (!ndNodeFils[i].isLeaf()) {
689
					copierFilsNoeud(ndNodeFils[i], child);
679
					copierFilsNoeud(ndNodeFils[i], child);
690
				}
680
				}
691
 
681
 
692
			}
682
			}
693
		}
683
		}
694
	}
684
	}
695
 
685
 
696
 
686
 
697
	public void activerBoutonValider(boolean activer) {
687
	public void activerBoutonValider(boolean activer) {
698
		valider.setVisible(activer);
688
		valider.setVisible(activer);
699
	}
689
	}
700
}
690
}
701
 
691