Subversion Repositories eFlore/Applications.cel

Rev

Rev 2033 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2033 Rev 2392
Line 1... Line 1...
1
package org.tela_botanica.client.util;
1
package org.tela_botanica.client.util;
Line 2... Line 2...
2
 
2
 
3
import java.util.ArrayList;
-
 
4
import java.util.Date;
3
import java.util.ArrayList;
5
import java.util.HashMap;
4
import java.util.HashMap;
6
import java.util.Iterator;
5
import java.util.Iterator;
7
import java.util.List;
6
import java.util.List;
Line 8... Line 7...
8
import java.util.Map;
7
import java.util.Map;
9
 
8
 
10
import org.tela_botanica.client.interfaces.Rafraichissable;
-
 
11
import org.tela_botanica.client.modeles.dao.ListeReferentielChampsEtendusDAO;
9
import org.tela_botanica.client.interfaces.Rafraichissable;
12
import org.tela_botanica.client.modeles.objets.Configuration;
10
import org.tela_botanica.client.modeles.dao.ListeReferentielChampsEtendusDAO;
Line -... Line 11...
-
 
11
import org.tela_botanica.client.modeles.objets.ListeChampsEtendus;
13
import org.tela_botanica.client.modeles.objets.ListeChampsEtendus;
12
import org.tela_botanica.client.modeles.objets.ListeGroupesChampsEtendus;
14
import org.tela_botanica.client.modeles.objets.ListeGroupesChampsEtendus;
13
 
15
 
14
import com.google.gwt.core.client.Callback;
16
import com.google.gwt.user.client.Timer;
15
import com.google.gwt.user.client.Timer;
17
import com.google.gwt.user.client.Window;
16
import com.google.gwt.user.client.Window;
18
import com.google.gwt.user.client.ui.HTML;
17
import com.google.gwt.user.client.ui.HTML;
-
 
18
import com.google.gwt.user.client.ui.HorizontalPanel;
19
import com.google.gwt.user.client.ui.HorizontalPanel;
19
import com.gwtext.client.core.EventCallback;
20
import com.gwtext.client.core.EventCallback;
20
import com.gwtext.client.core.EventObject;
21
import com.gwtext.client.core.EventObject;
21
import com.gwtext.client.core.Ext;
22
import com.gwtext.client.core.ListenerConfig;
22
import com.gwtext.client.core.ListenerConfig;
23
import com.gwtext.client.data.ArrayReader;
23
import com.gwtext.client.data.ArrayReader;
Line 56... Line 56...
56
	private final int KEY_SHIFT = 16;
56
	private final int KEY_SHIFT = 16;
57
	private final int KEY_TAB = 9;
57
	private final int KEY_TAB = 9;
58
	private final int KEY_UP = 38;
58
	private final int KEY_UP = 38;
Line 59... Line 59...
59
	
59
	
60
	final ComboBox nChamp;
60
	final ComboBox nChamp;
61
	final String resultTplRefPerso = "<div class=\"search-item-ref\">{label}</div>"; 
61
	final String resultTplRefPerso = "<div class=\"search-item-ref\">{label_fmt}</div>"; 
62
	Button ajouterChampsEtenduEtFermer;
62
	Button ajouterChampsEtenduEtFermer;
63
	Button ajouterChampsEtendu;
63
	Button ajouterChampsEtendu;
64
	Button annulerAjouterChampEtendu;
64
	Button annulerAjouterChampEtendu;
Line 71... Line 71...
71
	private static ListeGroupesChampsEtendus cacheGroupes;
71
	private static ListeGroupesChampsEtendus cacheGroupes;
Line 72... Line 72...
72
	
72
	
Line 73... Line 73...
73
	private Timer timer = null;
73
	private Timer timer = null;
-
 
74
	
-
 
75
	private static Map<String, String> cacheClesValeur;
74
	
76
	private HTML descriptionChamp = null;
75
	private static Map<String, String> cacheClesValeur;
77
	
76
	private Record rdSelectionne = null;
78
	private Record rdSelectionne = null;
Line 77... Line 79...
77
    private Record groupeSelectionne = null;
79
    private Record groupeSelectionne = null;
Line 89... Line 91...
89
		
91
		
90
		groupesChampsEtendus = new ComboBox();
92
		groupesChampsEtendus = new ComboBox();
91
		groupesChampsEtendus.setWidth("350px");
93
		groupesChampsEtendus.setWidth("350px");
92
		groupesChampsEtendus.setLabel("Ajouter un groupe de champs");
94
		groupesChampsEtendus.setLabel("Ajouter un groupe de champs");
93
		groupesChampsEtendus.setDisplayField("label") ;
95
		groupesChampsEtendus.setDisplayField("label") ;
94
		groupesChampsEtendus.setValueField("valeur");
96
		groupesChampsEtendus.setValueField("cle");
95
		groupesChampsEtendus.setEditable(false);
97
		groupesChampsEtendus.setEditable(false);
96
		groupesChampsEtendus.setHideTrigger(false);
98
		groupesChampsEtendus.setHideTrigger(false);
97
		groupesChampsEtendus.setForceSelection(true);
99
		groupesChampsEtendus.setForceSelection(true);
98
		groupesChampsEtendus.setCls("champ-separation");
100
		groupesChampsEtendus.setCls("champ-separation");
Line 114... Line 116...
114
			this.rafraichir(cacheGroupes, false);
116
			this.rafraichir(cacheGroupes, false);
115
		}
117
		}
Line 116... Line 118...
116
				
118
				
117
		HTML indicationSaisie = new HTML("Saisissez un nom de champ ou choisisez un nom proposé par l'autocomplétion "+
119
		HTML indicationSaisie = new HTML("Saisissez un nom de champ ou choisisez un nom proposé par l'autocomplétion "+
118
				"Si vous choissisez un nom de champ existant vous pourrez profiter d'une autocomplétion "+
120
				"Si vous choissisez un nom de champ existant vous pourrez profiter d'une autocomplétion "+
-
 
121
				"sur les valeurs déjà saisies pour ce champ par les autres utilisateurs.<br /> "+
-
 
122
				"Les champs de la forme 'label (clé)' sont des champs 'standards' ayant un rôle et une description " +
119
				"sur les valeurs déjà saisies pour ce champ par les autres utilisateurs");
123
				"bien définie");
120
		indicationSaisie.addStyleName("aideCreerChampEtendu");
124
		indicationSaisie.addStyleName("aideCreerChampEtendu");
Line 121... Line 125...
121
		add(indicationSaisie);
125
		add(indicationSaisie);
122
		
126
		
Line 123... Line 127...
123
		HorizontalPanel hp = new HorizontalPanel();
127
		HorizontalPanel hp = new HorizontalPanel();
-
 
128
		hp.setBorderWidth(0);
-
 
129
				
-
 
130
		nChamp = new ComboBox("Nom du champ", "nom_champ_etendu");
-
 
131
		nChamp.setWidth("350px");
-
 
132
		nChamp.setTpl(resultTplRefPerso);
-
 
133
		nChamp.setMode(ComboBox.REMOTE);
-
 
134
		nChamp.setItemSelector("div.search-item-ref");
-
 
135
		nChamp.setTypeAhead(false);  
-
 
136
		nChamp.setLoadingText("Recherche...");  
-
 
137
		nChamp.setHideTrigger(true);
-
 
138
		nChamp.setValidateOnBlur(false);
124
		hp.setBorderWidth(0);
139
		Store store = initStoreChampsEtendusVide();
Line -... Line 140...
-
 
140
		store.load();
-
 
141
	    nChamp.setStore(store);
-
 
142
		add(nChamp);
-
 
143
		
125
				
144
		descriptionChamp = new HTML();
126
		nChamp = new ComboBox("Nom du champ", "nom_champ_etendu");
145
		descriptionChamp.addStyleName("aideWikiChampEtendu");
127
		add(nChamp);
146
		add(descriptionChamp);
128
		
147
		
129
		ajouterChampsEtenduEtFermer = new Button("Ajouter et fermer");
148
		ajouterChampsEtenduEtFermer = new Button("Ajouter et fermer");
Line 135... Line 154...
135
		
154
		
136
		hp.add(ajouterChampsEtenduEtFermer);
155
		hp.add(ajouterChampsEtenduEtFermer);
137
		hp.add(ajouterChampsEtendu);
156
		hp.add(ajouterChampsEtendu);
138
		hp.add(annulerAjouterChampEtendu);	
157
		hp.add(annulerAjouterChampEtendu);	
139
		add(hp);
-
 
140
				
-
 
141
		nChamp.setTpl(resultTplRefPerso);
-
 
142
		nChamp.setMode(ComboBox.REMOTE);
-
 
143
		nChamp.setItemSelector("div.search-item-ref");
-
 
144
		nChamp.setTypeAhead(false);  
-
 
145
		nChamp.setLoadingText("Recherche...");  
-
 
146
		nChamp.setHideTrigger(true);
-
 
147
		nChamp.setValidateOnBlur(false);
-
 
148
		nChamp.setWidth("350px");	
-
 
Line 149... Line 158...
149
		nChamp.focus();
158
		add(hp);
150
		
159
		
Line 151... Line 160...
151
		ajouterListeners();
160
		ajouterListeners();
Line 177... Line 186...
177
		    	      case KEY_UP:
186
		    	      case KEY_UP:
178
	    	        break;
187
	    	        break;
Line 179... Line 188...
179
	    	        
188
	    	        
180
		    	  case KEY_ENTER:
189
		    	  case KEY_ENTER:
181
  	    	    	  if(rdSelectionne != null) {
190
  	    	    	  if(rdSelectionne != null) {
182
  	    	    		  nChamp.setValue(rdSelectionne.getAsString("label"));
-
 
183
  	    	    		  idChamp = rdSelectionne.getAsString("cle");
191
  	    	    		nChamp.setValue(rdSelectionne.getAsString("label"));
184
  	    	    		  valeurBrute = rdSelectionne.getAsString("label");
192
  	    	    		valeurBrute = rdSelectionne.getAsString("cle");
185
  	    	    	  }
193
  	    	    	  }
Line 186... Line 194...
186
	              break;
194
	              break;
187
	    	        
195
	    	        
Line 205... Line 213...
205
							public void run() {
213
							public void run() {
206
			  	    	      	obtenirListeValeurs();
214
			  	    	      	obtenirListeValeurs();
207
							}
215
							}
208
						};
216
						};
209
						timer.schedule(300);
217
						timer.schedule(300);
210
						valeurBrute = nChamp.getValueAsString();
218
						valeurBrute = nChamp.getRawValue();
211
						nChamp.setValue(valeurBrute);
219
						nChamp.setRawValue(valeurBrute);
212
				}
220
				}
213
			}
221
			}
214
	    },listenerConfigAutocompletion);
222
	    },listenerConfigAutocompletion);
Line 215... Line -...
215
		
-
 
216
		// Listener completion 
223
		
217
	    nChamp.addListener(new ComboBoxListenerAdapter() {  
224
	    nChamp.addListener(new ComboBoxListenerAdapter() {  
218
            @Override
225
            @Override
219
			public void onSelect(ComboBox comboBox, Record record, int index) {  
226
			public void onSelect(ComboBox comboBox, Record record, int index) { 
-
 
227
            	rdSelectionne = record;
-
 
228
            	telechargerEtAfficherDescriptionChamps(rdSelectionne.getAsString("cle"));
-
 
229
            	nChamp.setRawValue(rdSelectionne.getAsString("label"));
220
            	rdSelectionne = record;
230
            	valeurBrute = rdSelectionne.getAsString("cle");
221
            }
231
            }
222
            
232
 
223
            @Override
233
			@Override
-
 
234
			public void onBlur(Field field) {
224
			public void onBlur(Field field) {  
235
            	if(rdSelectionne != null && !rdSelectionne.getAsString("cle").equals(valeurBrute)) {
225
            	nChamp.setRawValue(valeurBrute);
236
            		nChamp.setRawValue(valeurBrute);         		
-
 
237
            	} 
226
            	nChamp.collapse();
238
            	telechargerEtAfficherDescriptionChamps(valeurBrute);
227
            }
239
            }
Line 228... Line 240...
228
	     });
240
         });
229
	    
241
	    
230
	    groupesChampsEtendus.addListener(new ComboBoxListenerAdapter() {  
242
	    groupesChampsEtendus.addListener(new ComboBoxListenerAdapter() {  
231
			@Override
243
			@Override
Line 236... Line 248...
236
	    
248
	    
237
	    ajouterChampsEtenduEtFermer.addListener(new ButtonListenerAdapter() {			
249
	    ajouterChampsEtenduEtFermer.addListener(new ButtonListenerAdapter() {			
238
			@Override
250
			@Override
239
			public void onClick(Button button, EventObject e) {
251
			public void onClick(Button button, EventObject e) {
240
				if(doitAjouterGroupe()) {
252
				if(doitAjouterGroupe()) {
241
					surValidationMultiple(renvoyerListeChampsEtendus(groupeSelectionne.getAsString("valeur")));
253
					surValidationMultiple(renvoyerListeChampsEtendus(groupeSelectionne.getAsString("cle")));
242
				} else {
254
				} else {
243
					if(champEtenduEstValide()) {
255
					if(champEtenduEstValide()) {
244
						surValidation(validerEtRenvoyerChampEtendu());
256
						surValidation(validerEtRenvoyerChampEtendu());
245
					} else {
257
					} else {
Line 274... Line 286...
274
		idChamp = null;
286
		idChamp = null;
275
		nChamp.clearValue();
287
		nChamp.clearValue();
276
		nChamp.focus();
288
		nChamp.focus();
277
	}
289
	}
Line 278... Line 290...
278
	
290
	
279
	private ChampSaisieEtendu validerEtRenvoyerChampEtendu() {		
291
	private ChampSaisieEtendu validerEtRenvoyerChampEtendu() {
280
		String valeurChamp = nChamp.getValueAsString();
-
 
281
		String idNouveauChamp = "";
292
		String valeurChamp = nChamp.getRawValue();
282
		if(!estUnChampSelectionne(valeurChamp)) {
293
		// Valeur contient soit la clé, soit le label s'il existe
283
			Date date = new Date();
294
		// valeur brute contient toujours la clé
284
			// affectation d'un id temporaire qui sera remplacé par l'id auto généré à partir
-
 
285
			// du label
-
 
286
			idNouveauChamp = "tempid_"+date.getTime();
-
 
287
		} else {
-
 
288
			idNouveauChamp = idChamp; 
-
 
289
		}
295
		// TODO: utiliser les champs de google et pas ceux de GWT-EXT qui puent du cul
290
		ChampSaisieEtendu retour = new ChampSaisieEtendu(valeurChamp, idNouveauChamp);
296
		ChampSaisieEtendu retour = new ChampSaisieEtendu(valeurChamp, valeurBrute);
291
		retour.setId(idNouveauChamp);
297
		retour.setId(valeurBrute);
292
		return retour;
298
		return retour;
Line 293... Line 299...
293
	}
299
	}
294
	
300
	
Line 304... Line 310...
304
 
310
 
305
		return champsDuGroupe;
311
		return champsDuGroupe;
Line 306... Line 312...
306
	}
312
	}
307
	
313
	
308
	private boolean doitAjouterGroupe() {
314
	private boolean doitAjouterGroupe() {
Line 309... Line 315...
309
		return groupeSelectionne != null && !groupeSelectionne.getAsString("valeur").equals("");
315
		return groupeSelectionne != null && !groupeSelectionne.getAsString("cle").equals("");
310
	}
316
	}
311
	
317
	
312
	private boolean champEtenduEstValide() {
318
	private boolean champEtenduEstValide() {
Line 313... Line 319...
313
		String valeurChamp = nChamp.getValueAsString();
319
		String valeurChamp = nChamp.getRawValue();
314
		return (valeurChamp != null && !valeurChamp.isEmpty());
320
		return (valeurChamp != null && !valeurChamp.isEmpty());
315
	}
321
	}
Line 316... Line 322...
316
	
322
	
317
	private boolean estUnChampSelectionne(String valeur) {
323
	private boolean estUnChampSelectionne(String valeur) {
318
		return cacheClesValeur.containsValue(valeur);
324
		return cacheClesValeur.containsValue(valeur);
Line 319... Line 325...
319
	}
325
	}
320
	
326
	
321
	private void obtenirListeValeurs() {
327
	private void obtenirListeValeurs() {
Line 338... Line 344...
338
		if(nouvelleDonnees instanceof ListeChampsEtendus) {
344
		if(nouvelleDonnees instanceof ListeChampsEtendus) {
339
			int i = 0;
345
			int i = 0;
Line 340... Line 346...
340
					
346
					
341
			ListeChampsEtendus clesLabels = (ListeChampsEtendus)nouvelleDonnees;	
347
			ListeChampsEtendus clesLabels = (ListeChampsEtendus)nouvelleDonnees;	
342
			cacheClesValeur = clesLabels;
348
			cacheClesValeur = clesLabels;
Line 343... Line 349...
343
			Object[][] refData = new Object[clesLabels.keySet().size()][2];
349
			Object[][] refData = new Object[clesLabels.keySet().size()][3];
344
			
350
			
345
			for (Iterator<String> it = clesLabels.keySet().iterator(); it.hasNext();) 
351
			for (Iterator<String> it = clesLabels.keySet().iterator(); it.hasNext();) 
346
			{
352
			{
-
 
353
				String cle = it.next();
347
				String cle = it.next();
354
				String label = clesLabels.get(cle);
348
				String label= clesLabels.get(cle);
355
				
-
 
356
				refData[i][0]= cle;
-
 
357
				refData[i][1]= label;
-
 
358
				if(cle.equals(label.toLowerCase())) {
-
 
359
					refData[i][2]= label;
-
 
360
				} else {
-
 
361
					refData[i][2]= label+" ("+cle+")";
349
				refData[i][0]= cle;
362
				}
350
				refData[i][1]= label;
363
 
Line 351... Line 364...
351
				i++;
364
				i++;
352
			}
365
			}
-
 
366
			
353
			
367
			FieldDef defCle = new StringFieldDef("cle");
Line 354... Line 368...
354
			FieldDef defCle = new StringFieldDef("cle");
368
			FieldDef defLabel = new StringFieldDef("label");
Line 355... Line 369...
355
			FieldDef defLabel = new StringFieldDef("label");
369
			FieldDef defLabelFmt = new StringFieldDef("label_fmt");
356
			FieldDef[] defTab = {defCle, defLabel};
370
			FieldDef[] defTab = {defCle, defLabel, defLabelFmt};
Line 375... Line 389...
375
				doLayout();
389
				doLayout();
376
			}
390
			}
377
		}
391
		}
378
	}
392
	}
Line -... Line 393...
-
 
393
	
-
 
394
    
-
 
395
    private void telechargerEtAfficherDescriptionChamps(final String cle) {
-
 
396
		ListeReferentielChampsEtendusDAO.telechargerDescriptionWikini(cle, new Callback<String, String>() {			
-
 
397
			@Override
-
 
398
			public void onSuccess(String description) {
-
 
399
				afficherDescriptionEtLienWikiChampEtendu(cle, description);
-
 
400
			}
-
 
401
			
-
 
402
			@Override
-
 
403
			public void onFailure(String reason) {
-
 
404
				// rien
-
 
405
			}
-
 
406
		});
-
 
407
	}
-
 
408
    
-
 
409
    private void afficherDescriptionEtLienWikiChampEtendu(final String cle, String description) {
-
 
410
    	if(description.trim().isEmpty()) {
-
 
411
			String urlDesc = ListeReferentielChampsEtendusDAO.obtenirUrlEditionDescriptionWiki(cle);
-
 
412
			descriptionChamp.setHTML("<span> Aucune description n'existe pour ce champ.<br />" +
-
 
413
					"Vous pouvez la remplir sur cette page :" +
-
 
414
					"<a id=\"lien_description_wiki_ce_"+cle+"\" href="+urlDesc+" target=\"_blank\">"+cle+"</span></span>");
-
 
415
			Ext.get("lien_description_wiki_ce_"+cle).addListener("click", new EventCallback() {	
-
 
416
				@Override
-
 
417
				public void execute(EventObject e) {
-
 
418
					ListeReferentielChampsEtendusDAO.creerPageWikini(cle);
-
 
419
				}
-
 
420
			});
-
 
421
		} else {
-
 
422
			descriptionChamp.setHTML("<span class=\"descriptionChampEtenduTitre\">Description :</span> "+description);
-
 
423
		}
-
 
424
    }
379
	
425
	
380
	private Store getGroupesChampsEtendusStore(ListeGroupesChampsEtendus listeGroupesChampsEtendus) {
426
	private Store getGroupesChampsEtendusStore(ListeGroupesChampsEtendus listeGroupesChampsEtendus) {
381
		int i = 1;		
427
		int i = 1;		
Line 382... Line 428...
382
		Object[][] valeurs = new Object[listeGroupesChampsEtendus.size()+1][2];
428
		Object[][] valeurs = new Object[listeGroupesChampsEtendus.size()+1][2];
Line 390... Line 436...
390
				valeurs[i][0]= cle;
436
				valeurs[i][0]= cle;
391
				valeurs[i][1]= cle;
437
				valeurs[i][1]= cle;
392
				i++;
438
				i++;
393
			}
439
			}
394
		}					
440
		}					
395
		SimpleStore store = new SimpleStore(new String[] {"label","valeur"},valeurs);
441
		SimpleStore store = new SimpleStore(new String[] {"label","cle"},valeurs);
396
		store.load();
442
		store.load();
397
		return store;
443
		return store;
398
	}
444
	}
-
 
445
	
-
 
446
	private Store initStoreChampsEtendusVide() {
-
 
447
		Object[][] refData = new Object[0][1];
-
 
448
		
-
 
449
		FieldDef defLabel = new StringFieldDef("label");
-
 
450
		FieldDef defCle = new StringFieldDef("cle");
-
 
451
		FieldDef[] defTab = {defLabel, defCle};
-
 
452
		
-
 
453
		RecordDef rd = new RecordDef(defTab);
-
 
454
		
-
 
455
		final MemoryProxy dataProxy = new MemoryProxy(refData);
-
 
456
		final ArrayReader reader = new ArrayReader(rd);		
-
 
457
						
-
 
458
		Store store = new Store(dataProxy,reader);
-
 
459
		
-
 
460
		return store;
-
 
461
	}
399
}
462
}