Subversion Repositories eFlore/Applications.cel

Rev

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

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