Subversion Repositories eFlore/Archives.cel-v2

Rev

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

Rev 28 Rev 30
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
2
 
2
 
3
import java.util.HashMap;
3
import java.util.HashMap;
4
 
4
 
5
import org.tela_botanica.client.image.ImageMediateur;
5
import org.tela_botanica.client.image.ImageMediateur;
6
import org.tela_botanica.client.interfaces.Rafraichissable;
6
import org.tela_botanica.client.interfaces.Rafraichissable;
7
import org.tela_botanica.client.modeles.MotsClesAsynchroneDAO;
7
import org.tela_botanica.client.modeles.MotsClesAsynchroneDAO;
8
 
8
 
9
import com.google.gwt.core.client.JavaScriptObject;
9
import com.google.gwt.core.client.JavaScriptObject;
10
import com.google.gwt.user.client.Window;
10
import com.google.gwt.user.client.Window;
11
import com.gwtext.client.core.EventObject;
11
import com.gwtext.client.core.EventObject;
12
import com.gwtext.client.core.ExtElement;
12
import com.gwtext.client.core.ExtElement;
13
import com.gwtext.client.data.Node;
13
import com.gwtext.client.data.Node;
14
import com.gwtext.client.data.NodeTraversalCallback;
14
import com.gwtext.client.data.NodeTraversalCallback;
15
import com.gwtext.client.data.Tree;
15
import com.gwtext.client.data.Tree;
16
import com.gwtext.client.dd.DD;
16
import com.gwtext.client.dd.DD;
17
import com.gwtext.client.dd.DragData;
17
import com.gwtext.client.dd.DragData;
18
import com.gwtext.client.dd.DragDrop;
18
import com.gwtext.client.dd.DragDrop;
19
import com.gwtext.client.widgets.BoxComponent;
19
import com.gwtext.client.widgets.BoxComponent;
20
import com.gwtext.client.widgets.Button;
20
import com.gwtext.client.widgets.Button;
21
import com.gwtext.client.widgets.Component;
21
import com.gwtext.client.widgets.Component;
22
import com.gwtext.client.widgets.Container;
22
import com.gwtext.client.widgets.Container;
23
import com.gwtext.client.widgets.Editor;
23
import com.gwtext.client.widgets.Editor;
24
import com.gwtext.client.widgets.Panel;
24
import com.gwtext.client.widgets.Panel;
25
import com.gwtext.client.widgets.event.ButtonListener;
25
import com.gwtext.client.widgets.event.ButtonListener;
26
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
26
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
-
 
27
import com.gwtext.client.widgets.event.ComponentListener;
-
 
28
import com.gwtext.client.widgets.event.ComponentListenerAdapter;
-
 
29
import com.gwtext.client.widgets.event.ContainerListener;
-
 
30
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
27
import com.gwtext.client.widgets.event.EditorListener;
31
import com.gwtext.client.widgets.event.EditorListener;
28
import com.gwtext.client.widgets.event.EditorListenerAdapter;
32
import com.gwtext.client.widgets.event.EditorListenerAdapter;
-
 
33
import com.gwtext.client.widgets.event.PanelListenerAdapter;
29
import com.gwtext.client.widgets.form.Field;
34
import com.gwtext.client.widgets.form.Field;
30
import com.gwtext.client.widgets.form.TextField;
35
import com.gwtext.client.widgets.form.TextField;
31
import com.gwtext.client.widgets.layout.RowLayout;
36
import com.gwtext.client.widgets.layout.RowLayout;
32
import com.gwtext.client.widgets.layout.RowLayoutData;
37
import com.gwtext.client.widgets.layout.RowLayoutData;
33
import com.gwtext.client.widgets.menu.Menu;
38
import com.gwtext.client.widgets.menu.Menu;
34
import com.gwtext.client.widgets.tree.DropNodeCallback;
39
import com.gwtext.client.widgets.tree.DropNodeCallback;
35
import com.gwtext.client.widgets.tree.TreeEditor;
40
import com.gwtext.client.widgets.tree.TreeEditor;
36
import com.gwtext.client.widgets.tree.TreeNode;
41
import com.gwtext.client.widgets.tree.TreeNode;
37
import com.gwtext.client.widgets.tree.TreePanel;
42
import com.gwtext.client.widgets.tree.TreePanel;
38
import com.gwtext.client.widgets.tree.event.TreePanelListener;
43
import com.gwtext.client.widgets.tree.event.TreePanelListener;
39
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
44
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
40
 
45
 
41
public class ArbreMotsClesVue extends Panel implements Rafraichissable {
46
public class ArbreMotsClesVue extends Panel implements Rafraichissable {
42
 
47
 
43
	private ImageMediateur iMediateur = null ;
48
	private ImageMediateur iMediateur = null ;
44
	
49
	
45
	private TreePanel arbreMotsCles = null ;
50
	private TreePanel arbreMotsCles = null ;
46
	private TreeEditor te = null ;
51
	private TreeEditor te = null ;
47
	private TextField tfEdit = null ;
52
	private TextField tfEdit = null ;
48
	private Button valider = null ;
53
	private Button valider = null ;
49
	private String motsClesEnCours = "" ;
54
	private String motsClesEnCours = "" ;
-
 
55
	private String[] motsClesEnAttente ; 
50
	private boolean ajoutNoeud = false ;
56
	private boolean ajoutNoeud = false ;
51
	private boolean modifNoeud = false ;
57
	private boolean modifNoeud = false ;
-
 
58
	private boolean estInstancie = false ;
-
 
59
	private boolean motsCleInitialises ;
52
	
60
	
53
	public ArbreMotsClesVue(ImageMediateur im)
61
	public ArbreMotsClesVue(ImageMediateur im)
54
	{
62
	{
55
		super("Mots clés") ;
63
		super("Mots clés") ;
56
		this.setLayout(new RowLayout());
64
		this.setLayout(new RowLayout());
57
		iMediateur = im ;
65
		iMediateur = im ;
58
		
66
		
59
		arbreMotsCles = new TreePanel() ;
67
		arbreMotsCles = new TreePanel() ;
60
		arbreMotsCles.setEnableDD(true) ;
68
		arbreMotsCles.setEnableDD(true) ;
61
		
69
		
62
		TreeNode root = new TreeNode("Mots clés") ;
70
		TreeNode root = new TreeNode("Tags") ;
63
		root.setId("racine") ;
71
		root.setId("racine") ;
64
		String[] usObject = {"Mots clés" , "racine" } ;
72
		String[] usObject = {"Mots clés" , "racine" } ;
65
		root.setUserObject(usObject) ;
73
		root.setUserObject(usObject) ;
66
		
74
		
67
		arbreMotsCles.setRootNode(root) ;
75
		arbreMotsCles.setRootNode(root) ;
68
		arbreMotsCles.setRootVisible(true) ;
76
		arbreMotsCles.setRootVisible(false) ;
69
		arbreMotsCles.getRootNode().setIcon("tela.png") ;
77
		arbreMotsCles.getRootNode().setIcon("tela.png") ;
70
		
78
		
71
		tfEdit = new TextField() ;
79
		tfEdit = new TextField() ;
72
		te = new TreeEditor(arbreMotsCles,tfEdit) ;
80
		te = new TreeEditor(arbreMotsCles,tfEdit) ;
73
		valider = new Button("Appliquer") ;
81
		valider = new Button("Appliquer") ;
74
		arbreMotsCles.add(te) ;
82
		arbreMotsCles.add(te) ;
75
		this.add(arbreMotsCles,new RowLayoutData("90%")) ;
83
		this.add(arbreMotsCles,new RowLayoutData("90%")) ;
76
		this.add(valider,new RowLayoutData("10%")) ;
84
		this.add(valider,new RowLayoutData("10%")) ;
77
		
85
		
78
		ajouterListeners() ;
86
		ajouterListeners() ;
-
 
87
		
79
	}
88
	}
80
	
89
	
81
	private ImageMediateur GetIMediateur() {
90
	private ImageMediateur GetIMediateur() {
82
		
91
		
83
		return iMediateur ;
92
		return iMediateur ;
84
		
93
		
85
	}
94
	}
86
	
95
	
87
	/**
96
	/**
88
	 * @return the arbreMotsCles
97
	 * @return the arbreMotsCles
89
	 */
98
	 */
90
	public TreePanel getArbreMotsCles() {
99
	public TreePanel getArbreMotsCles() {
91
		return arbreMotsCles;
100
		return arbreMotsCles;
92
	}
101
	}
93
 
102
 
94
	/**
103
	/**
95
	 * @return the te
104
	 * @return the te
96
	 */
105
	 */
97
	public TreeEditor getTe() {
106
	public TreeEditor getTe() {
98
		return te;
107
		return te;
99
	}
108
	}
100
 
109
 
101
	/**
110
	/**
102
	 * @return the tfEdit
111
	 * @return the tfEdit
103
	 */
112
	 */
104
	public TextField getTfEdit() {
113
	public TextField getTfEdit() {
105
		return tfEdit;
114
		return tfEdit;
106
	}
115
	}
107
	
116
	
108
	public void ajouterListeners()
117
	public void ajouterListeners()
109
	{
118
	{
110
		arbreMotsCles.addListener(new TreePanelListenerAdapter() {
119
		arbreMotsCles.addListener(new TreePanelListenerAdapter() {
111
			
120
			
112
			public void onClick(TreeNode node, EventObject e) {
121
			public void onClick(TreeNode node, EventObject e) {
113
				
122
				
114
				e.stopEvent() ;
123
				e.stopEvent() ;
115
				gererClicNoeud(node);
124
				gererClicNoeud(node);
116
			}
125
			}
117
 
126
 
118
			
127
			
119
			public void onContextMenu(TreeNode node, EventObject e) {
128
			public void onContextMenu(TreeNode node, EventObject e) {
120
				
129
				
121
				e.stopEvent() ;
130
					e.stopEvent() ;
122
				GetIMediateur().montrerContextMenuArbre(node, e , getTe()) ;
131
					GetIMediateur().montrerContextMenuArbre(node, e , getTe()) ;
123
				
132
				
124
			}
133
			}
125
		
134
		
126
			public void onDblClick(TreeNode node, EventObject e) {
135
			public void onDblClick(TreeNode node, EventObject e) {
127
				
136
				
128
				modifNoeud = true ;
137
				modifNoeud = true ;
129
				te.startEdit(node);
138
				te.startEdit(node);
130
			}
139
			}
131
			
140
			
132
			public void onTextChange(TreeNode node, String text, String oldText) {
141
			public void onTextChange(TreeNode node, String text, String oldText) {
133
 
142
 
134
				
143
				
135
				TreeNode nd = node ;
144
				TreeNode nd = node ;
136
				String[] usObject = new String[2] ;
145
				String[] usObject = new String[2] ;
137
				usObject[0] = text ;
146
				usObject[0] = text ;
138
				usObject[1] = ((String[])nd.getUserObject())[1] ;
147
				usObject[1] = ((String[])nd.getUserObject())[1] ;
139
				nd.setUserObject(usObject) ;
148
				nd.setUserObject(usObject) ;
140
				
149
				
141
				if(ajoutNoeud)
150
				if(ajoutNoeud)
142
				{
151
				{
143
					GetIMediateur().ajouterMotCleDansArbre(nd,getArbreMotsCles().getTree()) ;
152
					GetIMediateur().ajouterMotCleDansArbre(nd,getArbreMotsCles().getTree()) ;
144
					ajoutNoeud = false ;
153
					ajoutNoeud = false ;
145
				}
154
				}
146
				else
155
				else
147
				{
156
				{
148
					modifNoeud = false ;
157
					modifNoeud = false ;
149
					GetIMediateur().modifierMotCleDansArbre(nd,getArbreMotsCles().getTree()) ;
158
					GetIMediateur().modifierMotCleDansArbre(nd,getArbreMotsCles().getTree()) ;
150
				}
159
				}
151
				
160
				
152
			}
161
			}
153
			
162
			
154
			public void onMoveNode(Tree tree, TreeNode node, TreeNode oldParent, TreeNode newParent,int index)
163
			public void onMoveNode(Tree tree, TreeNode node, TreeNode oldParent, TreeNode newParent,int index)
155
			{
164
			{
156
				GetIMediateur().deplacerMotCleDansArbre(node, getArbreMotsCles().getTree()) ;
165
				GetIMediateur().deplacerMotCleDansArbre(node, getArbreMotsCles().getTree()) ;
157
			}
166
			}
158
 
167
 
159
 
-
 
160
			
168
 
161
			public void onCheckChange(TreeNode node, boolean checked) {
169
			public void onCheckChange(TreeNode node, boolean checked) {
162
				
170
				
163
				if(checked)
171
				if(checked)
164
				{
172
				{
165
					node.bubble(new NodeTraversalCallback() {
173
					node.bubble(new NodeTraversalCallback() {
166
						
174
						
167
						public boolean execute(Node node)
175
						public boolean execute(Node node)
168
						{
176
						{
169
							TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
177
							TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
170
							tn.getUI().toggleCheck(true) ;
178
							tn.getUI().toggleCheck(true) ;
171
							
179
							
172
							return true ;
180
							return true ;
173
						}
181
						}
174
					}) ;
182
					}) ;
175
				}
183
				}
176
			}
184
			}
-
 
185
			
177
		}) ;
186
		}) ;
178
		
-
 
179
		
187
		
180
		valider.addListener(new ButtonListenerAdapter() {
188
		valider.addListener(new ButtonListenerAdapter() {
181
 
189
 
182
			public void onClick(Button button, EventObject e) {
190
			public void onClick(Button button, EventObject e) {
183
				
191
				
184
				motsClesEnCours = "" ;
192
				motsClesEnCours = "" ;
185
				getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
193
				getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
186
					
194
					
187
					public boolean execute(Node node) {
195
					public boolean execute(Node node) {
188
					
196
					
189
							TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
197
							TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
190
 
198
 
191
								String[] usObject =  (String[])tn.getUserObject() ;
199
								String[] usObject =  (String[])tn.getUserObject() ;
192
								GetIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
200
								GetIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
193
									
201
									
194
									if(tn.getUI().isChecked())
202
									if(tn.getUI().isChecked())
195
									{
203
									{
196
										motsClesEnCours += usObject[1]+"," ;
204
										motsClesEnCours += usObject[1]+"," ;
197
									}
205
									}
198
							
206
							
199
							return true ;
207
							return true ;
200
					}
208
					}
201
					
209
					
202
				});
210
				});
203
				
211
				
204
				GetIMediateur().mettreAjourMotsCles(motsClesEnCours,arbreMotsCles.getTree()) ;
212
				GetIMediateur().mettreAjourMotsCles(motsClesEnCours,arbreMotsCles.getTree()) ;
205
			}
213
			}
206
		}) ;
214
		}) ;
207
		
215
		
208
	}
216
	}
-
 
217
	
-
 
218
	public void obtenirArbreMotsCles() {
-
 
219
		
-
 
220
		GetIMediateur().obtenirArbreMotsCles(this) ;
-
 
221
		
-
 
222
	}
-
 
223
 
209
	
224
 
210
	public void supprimerNoeud(TreeNode n)
225
	public void supprimerNoeud(TreeNode n)
-
 
226
	{
-
 
227
		
-
 
228
		if(!n.getId().equals(getArbreMotsCles().getRootNode().getId()))
211
	{
229
		{
212
		n.getParentNode().removeChild(n);
230
			n.getParentNode().removeChild(n);
213
		n.destroy() ;
231
			n.destroy() ;
-
 
232
			GetIMediateur().supprimerMotCleDansArbre(n, arbreMotsCles.getTree()) ;
-
 
233
		}
-
 
234
		else
-
 
235
		{
-
 
236
			Window.alert("Impossible de supprimer la racine de l'arbre") ;
214
		GetIMediateur().supprimerMotCleDansArbre(n, arbreMotsCles.getTree()) ;
237
		}
215
	}
238
	}
216
	
239
	
217
	public void ajouterNoeud(TreeNode parent)
240
	public void ajouterNoeud(TreeNode parent)
218
	{
241
	{
219
		
242
		
220
		ajoutNoeud = true ;
243
		ajoutNoeud = true ;
221
		TreeNode nd = new TreeNode("");
244
		TreeNode nd = new TreeNode("");
222
		nd.setIcon("tela.png") ;
245
		nd.setIcon("tela.png") ;
223
		nd.setChecked(true);
246
		nd.setChecked(true);
224
		String[] usObject = new String[2] ;
247
		String[] usObject = new String[2] ;
225
		usObject[0] = "" ;
248
		usObject[0] = "" ;
226
		usObject[1] = Integer.toString(nd.hashCode()) ;
249
		usObject[1] = Integer.toString(nd.hashCode()) ;
227
		nd.setId(usObject[1]) ;
250
		nd.setId(usObject[1]) ;
228
		nd.setUserObject(usObject) ;
251
		nd.setUserObject(usObject) ;
229
		parent.appendChild(nd);
252
		parent.appendChild(nd);
230
		parent.expand();
253
		parent.expand();
231
		te.startEdit(nd);
254
		te.startEdit(nd);
232
	}
255
	}
233
	
256
	
234
	public void gererClicNoeud(TreeNode node)
257
	public void gererClicNoeud(TreeNode node)
235
	{
258
	{
236
		if(node.getUI().isChecked())
259
		if(node.getUI().isChecked())
237
		{
260
		{
238
			node.getUI().toggleCheck(false) ;
261
			node.getUI().toggleCheck(false) ;
239
		}
262
		}
240
		else
263
		else
241
		{
264
		{
242
			node.getUI().toggleCheck(true) ;
265
			node.getUI().toggleCheck(true) ;
243
		}
266
		}
244
	}
267
	}
245
	
268
	
246
	public void cocherMotsCles(final String[] motsClesIds)
269
	public void cocherMotsCles(final String[] motsClesIds)
247
	{
270
	{
248
		getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
271
		if(getArbreMotsCles() != null && getArbreMotsCles().getRootNode() != null)
249
 
272
		{
250
			public boolean execute(Node node) {
273
			getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
251
				
274
	
252
				for(int i = 0 ; i < motsClesIds.length ; i++)
-
 
253
				{	
-
 
254
					String usObject[] = (String[])node.getUserObject() ;
-
 
255
					String nodeId = usObject[1] ;
275
				public boolean execute(Node node) {
-
 
276
					
-
 
277
						for(int i = 0 ; i < motsClesIds.length ; i++)
-
 
278
						{
-
 
279
							String usObject[] = (String[])node.getUserObject() ;
-
 
280
							String nodeId = usObject[1] ;
256
					
281
							
257
					getArbreMotsCles().getNodeById(node.getId()).getUI().toggleCheck(false) ;
282
							getArbreMotsCles().getNodeById(node.getId()).getUI().toggleCheck(false) ;
258
								
283
										
259
					if(nodeId.equals(motsClesIds[i]))
284
							if(nodeId.equals(motsClesIds[i]))
260
					{
285
							{
261
						getArbreMotsCles().getNodeById(nodeId).getUI().toggleCheck(true) ;
286
								getArbreMotsCles().getNodeById(nodeId).getUI().toggleCheck(true) ;
-
 
287
								return true ;
262
						return true ;
288
							}
-
 
289
						}
263
					}
290
						return true;
264
				}
-
 
265
				return true;
-
 
266
			}
291
				}
267
			
292
				
-
 
293
			}) ;
268
		}) ;
294
		}
269
	}
295
	}
270
	
296
	
271
	public void rafraichir(Object nouvelleDonnees,
297
	public void rafraichir(Object nouvelleDonnees,
272
			boolean repandreRafraichissement) {
298
			boolean repandreRafraichissement) {
273
		
299
		
274
		if(nouvelleDonnees instanceof Tree)
300
		if(nouvelleDonnees instanceof Tree)
275
		{
301
		{
276
			Tree nouvelArbre = (Tree)nouvelleDonnees ;
302
				Tree nouvelArbre = (Tree)nouvelleDonnees ;
-
 
303
				
277
			getArbreMotsCles().setRootNode(nouvelArbre.getRootNode()) ;
304
					getArbreMotsCles().getRootNode().appendChild(nouvelArbre.getRootNode()) ;
-
 
305
					getArbreMotsCles().expandAll() ;
-
 
306
					estInstancie = true ;
-
 
307
					
-
 
308
					if(motsCleInitialises == false && motsClesEnAttente != null)
-
 
309
					{
-
 
310
						cocherMotsCles(motsClesEnAttente) ;
-
 
311
						motsCleInitialises = true ; 
-
 
312
					}
278
		}
313
		}
279
		
314
		
280
		if(nouvelleDonnees instanceof String[])
315
		if(nouvelleDonnees instanceof String[])
281
		{
316
		{
-
 
317
			if(estInstancie && nouvelleDonnees != null)
-
 
318
			{
282
			String[] motsClesIds = (String[])nouvelleDonnees ;
319
				String[] motsClesIds = (String[])nouvelleDonnees ;		
283
			cocherMotsCles(motsClesIds) ;
320
				cocherMotsCles(motsClesIds) ;
-
 
321
				
-
 
322
			}
-
 
323
			else
-
 
324
			{
-
 
325
				motsClesEnAttente = (String[])nouvelleDonnees ;
-
 
326
			}
284
		}
327
		}
285
		
328
		
286
	}
329
	}
287
 
330
 
288
}
331
}