Subversion Repositories eFlore/Applications.coel

Rev

Rev 1306 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
936 jpm 1
package org.tela_botanica.client.vues;
453 jp_milcent 2
 
3
import java.util.ArrayList;
4
import java.util.HashMap;
5
import java.util.Iterator;
6
 
7
import org.tela_botanica.client.ComposantClass;
8
import org.tela_botanica.client.Mediateur;
813 jpm 9
import org.tela_botanica.client.RegistreId;
907 jpm 10
import org.tela_botanica.client.configuration.Configuration;
453 jp_milcent 11
import org.tela_botanica.client.i18n.Constantes;
12
import org.tela_botanica.client.interfaces.Rafraichissable;
13
import org.tela_botanica.client.modeles.Valeur;
14
import org.tela_botanica.client.modeles.ValeurListe;
961 jpm 15
import org.tela_botanica.client.modeles.aDonnee;
935 jpm 16
import org.tela_botanica.client.modeles.projet.Projet;
17
import org.tela_botanica.client.modeles.projet.ProjetListe;
967 jpm 18
import org.tela_botanica.client.util.Debug;
819 gduche 19
import org.tela_botanica.client.util.UtilString;
453 jp_milcent 20
 
813 jpm 21
import com.extjs.gxt.ui.client.Registry;
453 jp_milcent 22
import com.extjs.gxt.ui.client.Style.Scroll;
23
import com.extjs.gxt.ui.client.util.Format;
24
import com.extjs.gxt.ui.client.util.Params;
25
import com.extjs.gxt.ui.client.widget.HtmlContainer;
26
import com.extjs.gxt.ui.client.widget.LayoutContainer;
27
import com.extjs.gxt.ui.client.widget.TabItem;
28
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
29
import com.google.gwt.core.client.GWT;
30
 
31
public abstract class DetailVue extends LayoutContainer implements Rafraichissable {
32
 
33
	protected Mediateur mediateur = null;
34
	protected Constantes i18nC = null;
35
 
36
	protected HashMap<String, Valeur> ontologie = null;
813 jpm 37
	protected boolean ontologieChargementOk = false;
38
	private HashMap<Integer, String> ontologiesEnAttenteDeReception = null;
39
 
453 jp_milcent 40
	protected ProjetListe projets = null;
813 jpm 41
	protected boolean projetsChargementOk = false;
42
 
453 jp_milcent 43
	protected String sautLigneTpl = null;
44
 
45
	public DetailVue(Mediateur mediateurCourant) {
46
		mediateur = mediateurCourant;
602 jp_milcent 47
		i18nC = Mediateur.i18nC;
453 jp_milcent 48
 
49
		initialiserSautLigneTpl();
50
 
51
		ontologie = new HashMap<String, Valeur>();
813 jpm 52
		ontologieChargementOk = false;
53
		ontologiesEnAttenteDeReception = new HashMap<Integer, String>();
54
		chargerProjets();
453 jp_milcent 55
 
56
		setLayout(new FitLayout());
57
		setBorders(false);
58
		setScrollMode(Scroll.AUTO);
59
	}
60
 
61
	private void initialiserSautLigneTpl() {
62
		sautLigneTpl = "<br />\n";
63
	}
64
 
813 jpm 65
	private void chargerProjets() {
928 jpm 66
		mediateur.selectionnerProjet(this, null);
453 jp_milcent 67
	}
813 jpm 68
 
453 jp_milcent 69
	protected String construireTxtProjet(String idProjet) {
70
		String chaineARetourner = idProjet;
71
 
72
		if (projets != null) {
73
			Projet projet = projets.get(idProjet);
813 jpm 74
			if (projet != null) {
75
				String nomDuProjet = projet.getNom();
76
				if  (!nomDuProjet.equals("")) {
77
					chaineARetourner = nomDuProjet;
78
				}
453 jp_milcent 79
			}
80
		}
81
 
82
		return chaineARetourner;
83
	}
84
 
85
	protected String construireTxtTruck(String chaineAAnalyser) {
1344 cyprien 86
		return construireTxtTruck(chaineAAnalyser, true);
87
	}
88
 
89
	protected String construireTxtTruck(String chaineAAnalyser, boolean ucFirst) {
453 jp_milcent 90
		ArrayList<String> termes = new ArrayList<String>();
91
 
92
		if ((chaineAAnalyser != null) && (!chaineAAnalyser.trim().equals("")))	{
961 jpm 93
			String[] valeurs = chaineAAnalyser.split(aDonnee.SEPARATEUR_VALEURS);
453 jp_milcent 94
			int nbreValeurs = valeurs.length;
95
			if (nbreValeurs > 0)	{
96
				for (int i = 0; i < nbreValeurs; i++)	{
97
					String valeur = valeurs[i];
98
					String valeurFormatee = formaterValeurTruck(valeur);
99
					termes.add(valeurFormatee);
100
				}
101
			}
102
		}
103
 
1344 cyprien 104
		String chaineARetourner = formaterTableauDeTxt(termes, ucFirst);
453 jp_milcent 105
		return chaineARetourner;
106
	}
107
 
108
	private String formaterValeurTruck(String valeur) {
109
		String chaineARetourner = "";
110
 
111
		if (valeur.matches("^[^#]+##[^$]+$"))	{
961 jpm 112
			String[] cleValeur = valeur.split(aDonnee.SEPARATEUR_TYPE_VALEUR);
1044 gduche 113
			chaineARetourner = (UtilString.isEmpty(cleValeur[1]) || cleValeur[1].equals("null") ? aDonnee.VALEUR_NULL : cleValeur[1]) +" "+formaterParenthese(cleValeur[0]);
453 jp_milcent 114
		} else if (!valeur.equals(""))	{
115
			chaineARetourner = valeur;
116
		} else {
961 jpm 117
			GWT.log("Valeur truck posant problème :"+valeur, null);
453 jp_milcent 118
		}
119
 
120
		return chaineARetourner;
121
	}
122
 
123
	protected String formaterParenthese(String chaineAAfficher) {
124
		if (!chaineAAfficher.equals("")) {
125
			chaineAAfficher = "("+chaineAAfficher+")";
126
		}
127
		return chaineAAfficher;
128
	}
129
 
1344 cyprien 130
	protected String formaterTableauDeTxt(ArrayList<String> tableauDeTxt, boolean ucFirst) {
453 jp_milcent 131
		String chaineAAfficher = "";
132
		int tailleDuTableau = tableauDeTxt.size();
133
		if (tailleDuTableau > 0) {
134
			int indexAvtDernier = tailleDuTableau - 1;
135
			for (int i = 0; i < tailleDuTableau; i++)	{
136
				String mot = tableauDeTxt.get(i);
137
				if (i != indexAvtDernier) {
138
					chaineAAfficher += mot+", ";
139
				} else {
140
					chaineAAfficher += nettoyerPointFinal(mot)+".";
141
				}
142
			}
143
		}
1344 cyprien 144
		if (ucFirst) return UtilString.ucFirst(chaineAAfficher);
145
		else return chaineAAfficher;
453 jp_milcent 146
	}
147
 
148
	protected String nettoyerPointFinal(String mot) {
149
		mot = mot.replaceAll("[.]$", "");
150
		return mot;
151
	}
152
 
803 jpm 153
	protected String formaterContenu(String template, Params parametres) {
453 jp_milcent 154
		String cHtml = Format.substitute(template, parametres);
155
 
156
		Params cssParams = new Params();
1121 jpm 157
		cssParams.set("css_lien_ext", ComposantClass.LIEN_EXTERNE);
453 jp_milcent 158
		cssParams.set("css_corps", ComposantClass.DETAIL_CORPS_CONTENU);
159
		cssParams.set("css_label", ComposantClass.LABEL);
160
		cssParams.set("css_indentation", ComposantClass.INDENTATION);
161
		cssParams.set("css_fieldset", ComposantClass.FIELDSET);
162
		cssParams.set("css_clear", ComposantClass.CLEAR);
163
		cHtml = Format.substitute(cHtml, cssParams);
164
 
803 jpm 165
		return cHtml;
166
	}
167
 
168
	protected void afficherOnglet(String template, Params parametres, TabItem onglet) {
169
		String cHtml = formaterContenu(template, parametres);
170
 
453 jp_milcent 171
		HtmlContainer corpsConteneurDuHtml = new HtmlContainer(cHtml);
172
		onglet.removeAll();
173
		onglet.add(corpsConteneurDuHtml);
174
	}
175
 
176
	protected String formaterAutre(String chaineAAfficher) {
177
		if (!chaineAAfficher.equals("")) {
178
			chaineAAfficher = " ["+i18nC.autres()+" : "+chaineAAfficher+"]";
179
		}
180
		return chaineAAfficher;
181
	}
182
 
183
	protected String formaterOuiNon(String chaineAFormater) {
184
		String txtARetourner = "";
185
		if (chaineAFormater.equals("0")) {
186
			txtARetourner = i18nC.non();
187
		} else if (chaineAFormater.equals("1")) {
188
			txtARetourner = i18nC.oui();
189
		}
190
		return txtARetourner;
191
	}
192
 
193
	protected String formaterSautDeLigne(String chaineAFormater) {
194
		String txtARetourner = chaineAFormater.replaceAll("\n", sautLigneTpl);
195
		return txtARetourner;
196
	}
197
 
813 jpm 198
	protected void lancerChargementListesValeurs(String[] listesCodes) {
199
		Configuration configuration = (Configuration) Registry.get(RegistreId.CONFIG);
200
		for (int i = 0; i < listesCodes.length ; i++) {
201
			String code = listesCodes[i];
202
			ontologiesEnAttenteDeReception.put(configuration.getListeId(code), code);
203
			mediateur.obtenirListeValeurEtRafraichir(this, code);
204
		}
205
	}
206
 
816 jpm 207
	protected void receptionerListeValeurs(ValeurListe listeValeursReceptionnee) {
813 jpm 208
		mettreAJourOntologieEnAttenteDeReception(listeValeursReceptionnee);
209
		ajouterListeValeursAOntologie(listeValeursReceptionnee);
210
	}
211
 
212
	protected void mettreAJourOntologieEnAttenteDeReception(ValeurListe listeValeursReceptionnee) {
213
		ontologiesEnAttenteDeReception.remove(listeValeursReceptionnee.getId());
214
		if (ontologiesEnAttenteDeReception.size() == 0) {
215
			ontologieChargementOk = true;
216
		}
217
	}
218
 
219
	protected void ajouterListeValeursAOntologie(ValeurListe listeValeursReceptionnee) {
220
		Iterator<String> it = listeValeursReceptionnee.keySet().iterator();
453 jp_milcent 221
		while (it.hasNext()) {
222
			String cle = it.next();
813 jpm 223
			Valeur valeur = listeValeursReceptionnee.get(cle);
453 jp_milcent 224
			if (valeur != null) {
225
				ontologie.put(cle, valeur);
226
			}
227
		}
228
	}
524 gduche 229
 
936 jpm 230
	public String construireTxtListeOntologie(String chaineAAnalyser) {
967 jpm 231
		return construireTxtListeOntologie(chaineAAnalyser, true, true, false);
232
	}
233
 
234
	public String construireTxtListeOntologie(String chaineAAnalyser, boolean valeurEstOntologie, boolean typeEstOntologie, boolean donneeEstOntologie) {
524 gduche 235
		ArrayList<String> termes = new ArrayList<String>();
236
		ArrayList<String> autres = new ArrayList<String>();
1028 jpm 237
		chaineAAnalyser = chaineAAnalyser.trim();
238
		if (!UtilString.isEmpty(chaineAAnalyser)) {
961 jpm 239
			String[] valeurs = chaineAAnalyser.split(aDonnee.SEPARATEUR_VALEURS);
524 gduche 240
			int nbreValeurs = valeurs.length;
241
			if (nbreValeurs > 0)	{
242
				for (int i = 0; i < nbreValeurs; i++)	{
967 jpm 243
					String valeur = valeurs[i];
244
 
245
					// VALEUR SANS TYPE
246
					// La valeur sans type est une entrée de l'ontologie
247
					if (valeurEstOntologie && valeur.matches("^[0-9]+$"))	{
248
						if (valeur.equals("0")) {
249
							valeur = "";
250
						} else if (ontologie != null) {
251
							Valeur valeurOntologie = ontologie.get(valeur);
252
							if (valeurOntologie != null) {
253
								valeur = valeurOntologie.getNom();
819 gduche 254
							}
524 gduche 255
						}
967 jpm 256
					}
257
 
258
					// VALEUR AVEC TYPE
259
					// Type : AUTRE
260
					String valeurTypeAutre = aDonnee.TYPE_AUTRE+aDonnee.SEPARATEUR_TYPE_VALEUR;
1306 cyprien 261
					if (valeur.matches("^"+valeurTypeAutre+".*$")) {
967 jpm 262
						String txtAutre = valeur.replaceFirst("^"+valeurTypeAutre, "");
263
						if (!txtAutre.equals("")) {
264
							autres.add(txtAutre);
265
						}
266
						valeur = "";
267
					}
268
					// Type correspondant à une entrée de l'ontologie
269
					if (typeEstOntologie) {
270
						String valeurTypeOntologie = "[0-9]+"+aDonnee.SEPARATEUR_TYPE_VALEUR;
271
						if (valeur.matches("^"+valeurTypeOntologie+".+$")) {
272
							String type = valeur.substring(0, valeur.indexOf(aDonnee.SEPARATEUR_TYPE_VALEUR));
273
							if (ontologie != null && ontologie.get(type) != null) {
274
								Valeur valeurOntologie = ontologie.get(type);
275
								valeur = valeur.replaceFirst("^"+type, valeurOntologie.getNom()+": ");
524 gduche 276
							}
277
						}
278
					}
967 jpm 279
					// Donnée correspondant à une entrée de l'ontologie
280
					if (donneeEstOntologie) {
281
						String donneeOntologie = aDonnee.SEPARATEUR_TYPE_VALEUR+"[0-9]+";
282
						if (valeur.matches("^.+"+donneeOntologie+"$")) {
283
							String donnee = valeur.substring(valeur.indexOf(aDonnee.SEPARATEUR_TYPE_VALEUR), valeur.length());
284
							donnee = donnee.replaceFirst("^"+aDonnee.SEPARATEUR_TYPE_VALEUR, "");
285
							if (ontologie != null && ontologie.get(donnee) != null) {
286
								Valeur valeurOntologie = ontologie.get(donnee);
287
								valeur = valeur.replaceFirst(donnee+"$", valeurOntologie.getNom());
288
							}
289
						}
290
					}
291
 
292
					// Nettoyage final
293
					valeur = valeur.replaceFirst(aDonnee.SEPARATEUR_TYPE_VALEUR, "");
294
 
295
					if (!UtilString.isEmpty(valeur)) {
296
						termes.add(valeur);
297
					}
524 gduche 298
				}
299
			}
300
		}
301
 
1344 cyprien 302
		String chaineTermes = formaterTableauDeTxt(termes, true);
303
		String chaineAutres = formaterTableauDeTxt(autres, true);
524 gduche 304
		String chaineARetourner = chaineTermes+formaterAutre(chaineAutres);
305
 
306
		return chaineARetourner;
307
	}
453 jp_milcent 308
}