Subversion Repositories eFlore/Applications.cel

Rev

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

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