150 |
gduche |
1 |
package org.tela_botanica.client.vues;
|
|
|
2 |
|
189 |
gduche |
3 |
|
|
|
4 |
|
197 |
gduche |
5 |
import java.util.HashMap;
|
|
|
6 |
import java.util.Iterator;
|
189 |
gduche |
7 |
|
197 |
gduche |
8 |
|
150 |
gduche |
9 |
import org.tela_botanica.client.RegistreId;
|
|
|
10 |
import org.tela_botanica.client.interfaces.Rafraichissable;
|
|
|
11 |
import org.tela_botanica.client.modeles.Personne;
|
|
|
12 |
import org.tela_botanica.client.modeles.StructureListe;
|
|
|
13 |
|
|
|
14 |
import com.extjs.gxt.ui.client.Registry;
|
|
|
15 |
import com.extjs.gxt.ui.client.Style.Scroll;
|
197 |
gduche |
16 |
import com.extjs.gxt.ui.client.event.ComponentEvent;
|
|
|
17 |
import com.extjs.gxt.ui.client.event.KeyListener;
|
150 |
gduche |
18 |
import com.extjs.gxt.ui.client.util.Params;
|
215 |
aurelien |
19 |
import com.extjs.gxt.ui.client.widget.ContentPanel;
|
150 |
gduche |
20 |
import com.extjs.gxt.ui.client.widget.Html;
|
197 |
gduche |
21 |
import com.extjs.gxt.ui.client.widget.LayoutContainer;
|
189 |
gduche |
22 |
import com.extjs.gxt.ui.client.widget.TabItem;
|
|
|
23 |
import com.extjs.gxt.ui.client.widget.TabPanel;
|
200 |
gduche |
24 |
import com.extjs.gxt.ui.client.widget.form.Field;
|
197 |
gduche |
25 |
import com.extjs.gxt.ui.client.widget.form.FieldSet;
|
200 |
gduche |
26 |
import com.extjs.gxt.ui.client.widget.form.TextArea;
|
197 |
gduche |
27 |
import com.extjs.gxt.ui.client.widget.form.TextField;
|
215 |
aurelien |
28 |
import com.extjs.gxt.ui.client.widget.layout.CenterLayout;
|
150 |
gduche |
29 |
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
|
197 |
gduche |
30 |
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
|
|
|
31 |
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
|
|
|
32 |
import com.extjs.gxt.ui.client.widget.layout.TableLayout;
|
|
|
33 |
import com.google.gwt.dom.client.LinkElement;
|
|
|
34 |
import com.google.gwt.dom.client.NodeList;
|
|
|
35 |
import com.google.gwt.user.client.Window;
|
189 |
gduche |
36 |
import com.google.gwt.user.client.ui.Hyperlink;
|
197 |
gduche |
37 |
import com.google.gwt.user.client.ui.Image;
|
189 |
gduche |
38 |
import com.google.gwt.user.client.ui.Label;
|
215 |
aurelien |
39 |
import com.google.gwt.user.client.ui.Panel;
|
|
|
40 |
import com.google.gwt.user.client.ui.SimplePanel;
|
200 |
gduche |
41 |
import com.google.gwt.user.client.ui.TextBox;
|
189 |
gduche |
42 |
import com.google.gwt.user.client.ui.Widget;
|
|
|
43 |
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
|
150 |
gduche |
44 |
|
189 |
gduche |
45 |
public class PersonneDetailPanneauVue extends TabPanel implements Rafraichissable {
|
150 |
gduche |
46 |
|
197 |
gduche |
47 |
// Le panneau détail se compose de formulaires tabulés
|
189 |
gduche |
48 |
|
197 |
gduche |
49 |
// Onglet 1 : identite & contact
|
215 |
aurelien |
50 |
private TabItem tabIdentite;
|
|
|
51 |
|
|
|
52 |
private ContentPanel panneauIdentite;
|
|
|
53 |
private ContentPanel panneauImage;
|
|
|
54 |
|
197 |
gduche |
55 |
private FieldSet fsIdentite;
|
|
|
56 |
private FieldSet fsContact;
|
189 |
gduche |
57 |
|
200 |
gduche |
58 |
// Onglet 2 : Adresses
|
|
|
59 |
private TabItem tabAdresse;
|
|
|
60 |
private FieldSet fsAdressePerso;
|
198 |
gduche |
61 |
// contient : adresse perso / adresse pro
|
|
|
62 |
|
215 |
aurelien |
63 |
// Onglet 3 : Informations naturalistes
|
|
|
64 |
private TabItem tabInfosNat;
|
198 |
gduche |
65 |
|
|
|
66 |
// > Se baser sur la présentation thunderBird
|
|
|
67 |
|
|
|
68 |
|
150 |
gduche |
69 |
public PersonneDetailPanneauVue() {
|
189 |
gduche |
70 |
|
198 |
gduche |
71 |
//Constructeur de la classe
|
150 |
gduche |
72 |
Registry.register(RegistreId.PANNEAU_PERSONNE_DETAIL, this);
|
189 |
gduche |
73 |
setLayout(new FitLayout());
|
150 |
gduche |
74 |
|
215 |
aurelien |
75 |
tabIdentite = new TabItem("Identité");
|
|
|
76 |
TableLayout tLayout = new TableLayout(2);
|
|
|
77 |
tabIdentite.setLayout(tLayout);
|
|
|
78 |
tabIdentite.setScrollMode(Scroll.AUTO);
|
189 |
gduche |
79 |
|
215 |
aurelien |
80 |
panneauIdentite = new ContentPanel();
|
|
|
81 |
panneauIdentite.setWidth("400px");
|
|
|
82 |
panneauIdentite.setHeaderVisible(false);
|
|
|
83 |
panneauIdentite.setBorders(false);
|
|
|
84 |
panneauIdentite.setBodyBorder(false);
|
|
|
85 |
panneauImage = new ContentPanel();
|
|
|
86 |
panneauImage.setWidth("350px");
|
|
|
87 |
panneauImage.setBorders(false);
|
|
|
88 |
panneauImage.setBodyBorder(false);
|
|
|
89 |
panneauImage.setHeaderVisible(false);
|
|
|
90 |
panneauImage.setStyleName("conteneur-image-centre");
|
200 |
gduche |
91 |
|
215 |
aurelien |
92 |
tabIdentite.add(panneauIdentite);
|
|
|
93 |
tabIdentite.add(panneauImage);
|
|
|
94 |
|
197 |
gduche |
95 |
fsIdentite = new FieldSet();
|
|
|
96 |
fsIdentite.setLayout(new FormLayout());
|
|
|
97 |
|
|
|
98 |
|
|
|
99 |
fsContact = new FieldSet();
|
|
|
100 |
fsContact.setLayout(new FormLayout());
|
|
|
101 |
|
215 |
aurelien |
102 |
this.add(tabIdentite);
|
197 |
gduche |
103 |
|
200 |
gduche |
104 |
//Onglet Adresse:
|
215 |
aurelien |
105 |
tabAdresse = new TabItem("Adresse");
|
200 |
gduche |
106 |
fsAdressePerso = new FieldSet();
|
|
|
107 |
fsAdressePerso.setLayout(new FormLayout());
|
|
|
108 |
|
215 |
aurelien |
109 |
this.add(tabAdresse);
|
200 |
gduche |
110 |
|
215 |
aurelien |
111 |
//Onglet info naturalistes
|
|
|
112 |
tabInfosNat = new TabItem("Informations naturalistes");
|
200 |
gduche |
113 |
|
215 |
aurelien |
114 |
this.add(tabInfosNat);
|
198 |
gduche |
115 |
|
150 |
gduche |
116 |
}
|
|
|
117 |
|
|
|
118 |
public void afficherDetailPersonne(Personne personne) {
|
|
|
119 |
if (personne != null) {
|
198 |
gduche |
120 |
|
|
|
121 |
|
|
|
122 |
//MAJ Identité : Configurer les fieldSet
|
215 |
aurelien |
123 |
panneauIdentite.removeAll();
|
|
|
124 |
panneauImage.removeAll();
|
150 |
gduche |
125 |
|
197 |
gduche |
126 |
fsIdentite.setHeading("Identité");
|
|
|
127 |
fsIdentite.setWidth("350px");
|
183 |
gduche |
128 |
|
197 |
gduche |
129 |
fsContact.setHeading("Contact");
|
|
|
130 |
fsContact.setWidth("350px");
|
183 |
gduche |
131 |
|
197 |
gduche |
132 |
|
215 |
aurelien |
133 |
panneauIdentite.add(fsIdentite);
|
|
|
134 |
|
198 |
gduche |
135 |
//La personne peut avoir un logo
|
197 |
gduche |
136 |
String logoUrl = (String) personne.obtenirValeurChamp("truk_logo");
|
198 |
gduche |
137 |
|
197 |
gduche |
138 |
if ((logoUrl!=null)&&(!logoUrl.trim().equals(""))) {
|
198 |
gduche |
139 |
//Si c'est le cas, on l'affiche sur la même ligne que fsIdentité
|
197 |
gduche |
140 |
Image img = new Image();
|
|
|
141 |
img.setUrl(logoUrl);
|
200 |
gduche |
142 |
img.setStyleName("logo-personne");
|
215 |
aurelien |
143 |
|
|
|
144 |
panneauImage.add(img);
|
189 |
gduche |
145 |
}
|
150 |
gduche |
146 |
|
215 |
aurelien |
147 |
panneauIdentite.add(fsContact);
|
183 |
gduche |
148 |
|
197 |
gduche |
149 |
fsIdentite.removeAll();
|
|
|
150 |
fsContact.removeAll();
|
215 |
aurelien |
151 |
fsAdressePerso.removeAll();
|
197 |
gduche |
152 |
//Ajout des champs Identité
|
|
|
153 |
|
|
|
154 |
|
|
|
155 |
|
|
|
156 |
// TODO: projet
|
|
|
157 |
|
|
|
158 |
// nom complet
|
|
|
159 |
Object nomComplet = personne.obtenirValeurChamp("fmt_nom_complet");
|
|
|
160 |
ajouterTextFieldNonEditable(fsIdentite,"Nom", nomComplet);
|
|
|
161 |
|
|
|
162 |
|
|
|
163 |
// TODO : nom autre
|
|
|
164 |
|
|
|
165 |
// abreviation
|
|
|
166 |
Object abreviation = personne.obtenirValeurChamp("abreviation");
|
|
|
167 |
ajouterTextFieldNonEditable(fsIdentite, "Abreviation", abreviation);
|
|
|
168 |
|
|
|
169 |
// date naissance
|
|
|
170 |
Object dateNaissance = personne.obtenirValeurChamp("date_naissance");
|
|
|
171 |
ajouterTextFieldNonEditable(fsIdentite, "Date de naissance", dateNaissance);
|
|
|
172 |
|
|
|
173 |
// lieu naissance
|
|
|
174 |
Object lieuNaissance = personne.obtenirValeurChamp("lieu_naissance");
|
|
|
175 |
ajouterTextFieldNonEditable(fsIdentite, "Lieu de naissance", lieuNaissance);
|
|
|
176 |
|
|
|
177 |
// date deces
|
|
|
178 |
Object dateDeces = personne.obtenirValeurChamp("date_deces");
|
|
|
179 |
ajouterTextFieldNonEditable(fsIdentite, "Date de décès", dateDeces);
|
|
|
180 |
|
|
|
181 |
// lieu deces
|
|
|
182 |
Object lieuDeces = personne.obtenirValeurChamp("lieu_deces");
|
|
|
183 |
ajouterTextFieldNonEditable(fsIdentite, "Lieu de décès", lieuDeces);
|
|
|
184 |
|
200 |
gduche |
185 |
//Description
|
|
|
186 |
String description = (String) personne.obtenirValeurChamp("description");
|
|
|
187 |
if ((description!=null)&&(!description.trim().equals(""))) {
|
|
|
188 |
TextArea txtDescription = new TextArea();
|
|
|
189 |
txtDescription.setFieldLabel("Description");
|
|
|
190 |
txtDescription.setValue(description);
|
|
|
191 |
|
|
|
192 |
rendreNonEditable(txtDescription);
|
|
|
193 |
|
|
|
194 |
fsIdentite.add(txtDescription);
|
|
|
195 |
}
|
197 |
gduche |
196 |
|
|
|
197 |
|
|
|
198 |
//CONTACT
|
|
|
199 |
|
215 |
aurelien |
200 |
// Courriel est un champ TRUK
|
198 |
gduche |
201 |
// on doit afficher N entrées
|
215 |
aurelien |
202 |
// Voir si le | (pipe) est bien le bon séparateur
|
|
|
203 |
String courriels = (String) personne.obtenirValeurChamp("truk_courriel");
|
|
|
204 |
String[] tabCourriel = courriels.split("\\|");
|
|
|
205 |
Html intituleHTML = new Html("<b style=\"margin:0 50px 0 0 ; color:black;\">Courriel:</b>");
|
|
|
206 |
fsContact.add(intituleHTML);
|
|
|
207 |
|
|
|
208 |
for(int i = 0 ; i < tabCourriel.length ; i++) {
|
|
|
209 |
String courriel = tabCourriel[i];
|
|
|
210 |
Hyperlink lnkCourriel = new Hyperlink();
|
|
|
211 |
lnkCourriel.setHTML("<a href=\"mailto:" + courriel + "\">" + courriel + "</a>");
|
|
|
212 |
fsContact.add(lnkCourriel);
|
|
|
213 |
}
|
197 |
gduche |
214 |
|
215 |
aurelien |
215 |
panneauIdentite.add(fsContact);
|
197 |
gduche |
216 |
|
198 |
gduche |
217 |
|
215 |
aurelien |
218 |
fsAdressePerso.setHeading("Adresse personnelle");
|
|
|
219 |
|
198 |
gduche |
220 |
/*
|
|
|
221 |
* Adresses :
|
215 |
aurelien |
222 |
* */
|
197 |
gduche |
223 |
String adresse01 = (String) personne.obtenirValeurChamp("adresse_01");
|
215 |
aurelien |
224 |
ajouterTextFieldNonEditable(fsAdressePerso, "Adresse", adresse01);
|
197 |
gduche |
225 |
|
|
|
226 |
|
|
|
227 |
String adresse02 = (String) personne.obtenirValeurChamp("adresse_02");
|
215 |
aurelien |
228 |
ajouterTextFieldNonEditable(fsAdressePerso, "", adresse02);
|
197 |
gduche |
229 |
|
|
|
230 |
String boitePostale = (String) personne.obtenirValeurChamp("bp");
|
215 |
aurelien |
231 |
ajouterTextFieldNonEditable(fsAdressePerso, "Boite Postale", boitePostale);
|
197 |
gduche |
232 |
|
|
|
233 |
String codePostal = (String) personne.obtenirValeurChamp("code_postal");
|
215 |
aurelien |
234 |
ajouterTextFieldNonEditable(fsAdressePerso, "Code postal", codePostal);
|
197 |
gduche |
235 |
|
|
|
236 |
String ville = (String) personne.obtenirValeurChamp("ville");
|
215 |
aurelien |
237 |
ajouterTextFieldNonEditable(fsAdressePerso, "Ville", ville);
|
197 |
gduche |
238 |
|
|
|
239 |
String region = (String) personne.obtenirValeurChamp("region");
|
215 |
aurelien |
240 |
ajouterTextFieldNonEditable(fsAdressePerso, "Région", region);
|
197 |
gduche |
241 |
|
|
|
242 |
String pays = (String) personne.obtenirValeurChamp("pays");
|
215 |
aurelien |
243 |
ajouterTextFieldNonEditable(fsAdressePerso, "Pays", pays);
|
197 |
gduche |
244 |
|
215 |
aurelien |
245 |
fsAdressePerso.addText("<br >");
|
|
|
246 |
fsAdressePerso.setWidth("350px");
|
197 |
gduche |
247 |
|
215 |
aurelien |
248 |
tabAdresse.add(fsAdressePerso);
|
|
|
249 |
tabAdresse.setScrollMode(Scroll.AUTO);
|
|
|
250 |
/*
|
|
|
251 |
*/
|
|
|
252 |
|
150 |
gduche |
253 |
layout();
|
197 |
gduche |
254 |
}
|
|
|
255 |
}
|
|
|
256 |
|
200 |
gduche |
257 |
private void ajouterTextFieldNonEditable(FieldSet fs, String tfLabel, Object tfValue) {
|
197 |
gduche |
258 |
|
|
|
259 |
if ((tfValue!=null)&&(!tfValue.toString().trim().equals(""))) {
|
189 |
gduche |
260 |
|
197 |
gduche |
261 |
TextField tf = new TextField();
|
|
|
262 |
|
|
|
263 |
tf.setFieldLabel(tfLabel);
|
|
|
264 |
if ((tfLabel==null)||("".equals(tfLabel))) {
|
|
|
265 |
tf.setHideLabel(true);
|
|
|
266 |
tf.setStyleAttribute("margin", "0 0 0 105px");
|
|
|
267 |
}
|
|
|
268 |
tf.setValue(tfValue);
|
|
|
269 |
|
|
|
270 |
// Non éditable : on empêche l'évènement par défaut
|
200 |
gduche |
271 |
rendreNonEditable(tf);
|
|
|
272 |
|
|
|
273 |
//Ajout au fieldSet
|
|
|
274 |
fs.add(tf);
|
|
|
275 |
}
|
|
|
276 |
}
|
|
|
277 |
|
|
|
278 |
private void rendreNonEditable(Field field) {
|
197 |
gduche |
279 |
|
200 |
gduche |
280 |
field.addKeyListener(new KeyListener() {
|
197 |
gduche |
281 |
public void componentKeyPress(ComponentEvent ev) {
|
|
|
282 |
ev.stopEvent();
|
|
|
283 |
}
|
|
|
284 |
});
|
200 |
gduche |
285 |
}
|
197 |
gduche |
286 |
|
|
|
287 |
|
183 |
gduche |
288 |
public void rafraichir(Object nouvelleDonnees) {
|
|
|
289 |
if (nouvelleDonnees instanceof Personne) {
|
|
|
290 |
afficherDetailPersonne((Personne) nouvelleDonnees);
|
150 |
gduche |
291 |
} else if (nouvelleDonnees instanceof StructureListe) {
|
|
|
292 |
StructureListe listeInstitutions = (StructureListe) nouvelleDonnees;
|
|
|
293 |
// Test pour savoir si la liste contient des éléments
|
|
|
294 |
if (listeInstitutions.size() == 0) {
|
183 |
gduche |
295 |
afficherDetailPersonne(null);
|
150 |
gduche |
296 |
}
|
183 |
gduche |
297 |
}
|
150 |
gduche |
298 |
}
|
|
|
299 |
|
197 |
gduche |
300 |
}
|