Subversion Repositories eFlore/Applications.coel

Rev

Rev 936 | Rev 1028 | Go to most recent revision | 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;
819 gduche 18
import org.tela_botanica.client.util.UtilString;
453 jp_milcent 19
 
813 jpm 20
import com.extjs.gxt.ui.client.Registry;
453 jp_milcent 21
import com.extjs.gxt.ui.client.Style.Scroll;
22
import com.extjs.gxt.ui.client.util.Format;
23
import com.extjs.gxt.ui.client.util.Params;
24
import com.extjs.gxt.ui.client.widget.HtmlContainer;
25
import com.extjs.gxt.ui.client.widget.LayoutContainer;
26
import com.extjs.gxt.ui.client.widget.TabItem;
27
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
28
import com.google.gwt.core.client.GWT;
29
 
30
public abstract class DetailVue extends LayoutContainer implements Rafraichissable {
31
 
32
	protected Mediateur mediateur = null;
33
	protected Constantes i18nC = null;
34
 
35
	protected HashMap<String, Valeur> ontologie = null;
813 jpm 36
	protected boolean ontologieChargementOk = false;
37
	private HashMap<Integer, String> ontologiesEnAttenteDeReception = null;
38
 
453 jp_milcent 39
	protected ProjetListe projets = null;
813 jpm 40
	protected boolean projetsChargementOk = false;
41
 
453 jp_milcent 42
	protected String sautLigneTpl = null;
43
 
44
	public DetailVue(Mediateur mediateurCourant) {
45
		mediateur = mediateurCourant;
602 jp_milcent 46
		i18nC = Mediateur.i18nC;
453 jp_milcent 47
 
48
		initialiserSautLigneTpl();
49
 
50
		ontologie = new HashMap<String, Valeur>();
813 jpm 51
		ontologieChargementOk = false;
52
		ontologiesEnAttenteDeReception = new HashMap<Integer, String>();
53
		chargerProjets();
453 jp_milcent 54
 
55
		setLayout(new FitLayout());
56
		setBorders(false);
57
		setScrollMode(Scroll.AUTO);
58
	}
59
 
60
	private void initialiserSautLigneTpl() {
61
		sautLigneTpl = "<br />\n";
62
	}
63
 
813 jpm 64
	private void chargerProjets() {
928 jpm 65
		mediateur.selectionnerProjet(this, null);
453 jp_milcent 66
	}
813 jpm 67
 
453 jp_milcent 68
	protected String construireTxtProjet(String idProjet) {
69
		String chaineARetourner = idProjet;
70
 
71
		if (projets != null) {
72
			Projet projet = projets.get(idProjet);
813 jpm 73
			if (projet != null) {
74
				String nomDuProjet = projet.getNom();
75
				if  (!nomDuProjet.equals("")) {
76
					chaineARetourner = nomDuProjet;
77
				}
453 jp_milcent 78
			}
79
		}
80
 
81
		return chaineARetourner;
82
	}
83
 
84
	protected String construireTxtTruck(String chaineAAnalyser) {
85
		ArrayList<String> termes = new ArrayList<String>();
86
 
87
		if ((chaineAAnalyser != null) && (!chaineAAnalyser.trim().equals("")))	{
961 jpm 88
			String[] valeurs = chaineAAnalyser.split(aDonnee.SEPARATEUR_VALEURS);
453 jp_milcent 89
			int nbreValeurs = valeurs.length;
90
			if (nbreValeurs > 0)	{
91
				for (int i = 0; i < nbreValeurs; i++)	{
92
					String valeur = valeurs[i];
93
					String valeurFormatee = formaterValeurTruck(valeur);
94
					termes.add(valeurFormatee);
95
				}
96
			}
97
		}
98
 
99
		String chaineARetourner = formaterTableauDeTxt(termes);
100
		return chaineARetourner;
101
	}
102
 
103
	private String formaterValeurTruck(String valeur) {
104
		String chaineARetourner = "";
105
 
106
		if (valeur.matches("^[^#]+##[^$]+$"))	{
961 jpm 107
			String[] cleValeur = valeur.split(aDonnee.SEPARATEUR_TYPE_VALEUR);
453 jp_milcent 108
			chaineARetourner = cleValeur[1]+" "+formaterParenthese(cleValeur[0]);
109
		} else if (!valeur.equals(""))	{
110
			chaineARetourner = valeur;
111
		} else {
961 jpm 112
			GWT.log("Valeur truck posant problème :"+valeur, null);
453 jp_milcent 113
		}
114
 
115
		return chaineARetourner;
116
	}
117
 
118
	protected String formaterParenthese(String chaineAAfficher) {
119
		if (!chaineAAfficher.equals("")) {
120
			chaineAAfficher = "("+chaineAAfficher+")";
121
		}
122
		return chaineAAfficher;
123
	}
124
 
125
	protected String formaterTableauDeTxt(ArrayList<String> tableauDeTxt) {
126
		String chaineAAfficher = "";
127
		int tailleDuTableau = tableauDeTxt.size();
128
		if (tailleDuTableau > 0) {
129
			int indexAvtDernier = tailleDuTableau - 1;
130
			for (int i = 0; i < tailleDuTableau; i++)	{
131
				String mot = tableauDeTxt.get(i);
132
				if (i != indexAvtDernier) {
133
					chaineAAfficher += mot+", ";
134
				} else {
135
					chaineAAfficher += nettoyerPointFinal(mot)+".";
136
				}
137
			}
138
		}
819 gduche 139
		return UtilString.ucFirst(chaineAAfficher);
453 jp_milcent 140
	}
141
 
142
	protected String nettoyerPointFinal(String mot) {
143
		mot = mot.replaceAll("[.]$", "");
144
		return mot;
145
	}
146
 
803 jpm 147
	protected String formaterContenu(String template, Params parametres) {
453 jp_milcent 148
		String cHtml = Format.substitute(template, parametres);
149
 
150
		Params cssParams = new Params();
151
		cssParams.set("css_corps", ComposantClass.DETAIL_CORPS_CONTENU);
152
		cssParams.set("css_label", ComposantClass.LABEL);
153
		cssParams.set("css_indentation", ComposantClass.INDENTATION);
154
		cssParams.set("css_fieldset", ComposantClass.FIELDSET);
155
		cssParams.set("css_clear", ComposantClass.CLEAR);
156
		cHtml = Format.substitute(cHtml, cssParams);
157
 
803 jpm 158
		return cHtml;
159
	}
160
 
161
	protected void afficherOnglet(String template, Params parametres, TabItem onglet) {
162
		String cHtml = formaterContenu(template, parametres);
163
 
453 jp_milcent 164
		HtmlContainer corpsConteneurDuHtml = new HtmlContainer(cHtml);
165
		onglet.removeAll();
166
		onglet.add(corpsConteneurDuHtml);
167
	}
168
 
169
	protected String formaterAutre(String chaineAAfficher) {
170
		if (!chaineAAfficher.equals("")) {
171
			chaineAAfficher = " ["+i18nC.autres()+" : "+chaineAAfficher+"]";
172
		}
173
		return chaineAAfficher;
174
	}
175
 
176
	protected String formaterOuiNon(String chaineAFormater) {
177
		String txtARetourner = "";
178
		if (chaineAFormater.equals("0")) {
179
			txtARetourner = i18nC.non();
180
		} else if (chaineAFormater.equals("1")) {
181
			txtARetourner = i18nC.oui();
182
		}
183
		return txtARetourner;
184
	}
185
 
186
	protected String formaterSautDeLigne(String chaineAFormater) {
187
		String txtARetourner = chaineAFormater.replaceAll("\n", sautLigneTpl);
188
		return txtARetourner;
189
	}
190
 
813 jpm 191
	protected void lancerChargementListesValeurs(String[] listesCodes) {
192
		Configuration configuration = (Configuration) Registry.get(RegistreId.CONFIG);
193
		for (int i = 0; i < listesCodes.length ; i++) {
194
			String code = listesCodes[i];
195
			ontologiesEnAttenteDeReception.put(configuration.getListeId(code), code);
196
			mediateur.obtenirListeValeurEtRafraichir(this, code);
197
		}
198
	}
199
 
816 jpm 200
	protected void receptionerListeValeurs(ValeurListe listeValeursReceptionnee) {
813 jpm 201
		mettreAJourOntologieEnAttenteDeReception(listeValeursReceptionnee);
202
		ajouterListeValeursAOntologie(listeValeursReceptionnee);
203
	}
204
 
205
	protected void mettreAJourOntologieEnAttenteDeReception(ValeurListe listeValeursReceptionnee) {
206
		ontologiesEnAttenteDeReception.remove(listeValeursReceptionnee.getId());
207
		if (ontologiesEnAttenteDeReception.size() == 0) {
208
			ontologieChargementOk = true;
209
		}
210
	}
211
 
212
	protected void ajouterListeValeursAOntologie(ValeurListe listeValeursReceptionnee) {
213
		Iterator<String> it = listeValeursReceptionnee.keySet().iterator();
453 jp_milcent 214
		while (it.hasNext()) {
215
			String cle = it.next();
813 jpm 216
			Valeur valeur = listeValeursReceptionnee.get(cle);
453 jp_milcent 217
			if (valeur != null) {
218
				ontologie.put(cle, valeur);
219
			}
220
		}
221
	}
524 gduche 222
 
936 jpm 223
	public String construireTxtListeOntologie(String chaineAAnalyser) {
524 gduche 224
		ArrayList<String> termes = new ArrayList<String>();
225
		ArrayList<String> autres = new ArrayList<String>();
226
		if ((chaineAAnalyser != null) && (!chaineAAnalyser.trim().equals("")))	{
961 jpm 227
			String[] valeurs = chaineAAnalyser.split(aDonnee.SEPARATEUR_VALEURS);
524 gduche 228
			int nbreValeurs = valeurs.length;
229
			if (nbreValeurs > 0)	{
230
				for (int i = 0; i < nbreValeurs; i++)	{
231
					String id = valeurs[i];
961 jpm 232
					if (id.matches("^(?:"+aDonnee.TYPE_AUTRE+"|[0-9]+)[\\#]{2}.+$"))	{
819 gduche 233
						//Chaine truk typé : type##valeur;
961 jpm 234
						String idAutre = aDonnee.TYPE_AUTRE+aDonnee.SEPARATEUR_TYPE_VALEUR;
235
						if (id.contains(idAutre)) {
236
							String txt = id.replaceFirst("^"+idAutre, "");
819 gduche 237
							if (!txt.equals("")) {
238
								autres.add(txt);
239
							}
240
						} else {
961 jpm 241
							String type = id.substring(0, id.indexOf(aDonnee.SEPARATEUR_TYPE_VALEUR));
819 gduche 242
							Valeur valeur = ontologie.get(type);
961 jpm 243
							String txt = id.replaceFirst("^" + type + aDonnee.SEPARATEUR_TYPE_VALEUR, valeur.getNom() + ": ");
819 gduche 244
							termes.add(txt);
524 gduche 245
						}
246
					} else if (id.matches("^[0-9]+$"))	{
247
						if (ontologie != null) {
248
							Valeur valeur = ontologie.get(id);
249
							if (valeur != null) {
250
								String termeOntologie = valeur.getNom();
251
								termes.add(termeOntologie);
252
							}
253
						}
254
					}
255
				}
256
			}
257
		}
258
 
259
		String chaineTermes = formaterTableauDeTxt(termes);
260
		String chaineAutres = formaterTableauDeTxt(autres);
261
		String chaineARetourner = chaineTermes+formaterAutre(chaineAutres);
262
 
263
		return chaineARetourner;
264
	}
453 jp_milcent 265
}