Subversion Repositories eFlore/Applications.coel

Rev

Rev 910 | Rev 913 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
912 jpm 1
package org.tela_botanica.client.vues.accueil;
910 jpm 2
 
912 jpm 3
import java.util.ArrayList;
4
import java.util.HashMap;
5
import java.util.Iterator;
6
import java.util.TreeMap;
7
 
910 jpm 8
import org.tela_botanica.client.Mediateur;
9
import org.tela_botanica.client.i18n.Constantes;
10
import org.tela_botanica.client.images.Images;
11
import org.tela_botanica.client.interfaces.Rafraichissable;
12
import org.tela_botanica.client.modeles.Information;
13
import org.tela_botanica.client.util.Debug;
14
 
15
import com.extjs.gxt.ui.client.event.ButtonEvent;
16
import com.extjs.gxt.ui.client.event.SelectionListener;
17
import com.extjs.gxt.ui.client.widget.ContentPanel;
18
import com.extjs.gxt.ui.client.widget.LayoutContainer;
19
import com.extjs.gxt.ui.client.widget.button.Button;
20
import com.extjs.gxt.ui.client.widget.custom.Portal;
21
import com.extjs.gxt.ui.client.widget.custom.Portlet;
22
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
23
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
912 jpm 24
import com.google.gwt.xml.client.Document;
25
import com.google.gwt.xml.client.Element;
26
import com.google.gwt.xml.client.Node;
27
import com.google.gwt.xml.client.NodeList;
28
import com.google.gwt.xml.client.XMLParser;
910 jpm 29
 
30
public class AccueilVue  extends LayoutContainer implements Rafraichissable {
31
 
32
	private Mediateur mediateur = null;
33
	private Constantes i18nC = null;
34
	private Portal portail = null;
35
 
36
	public AccueilVue(Mediateur mediateurCourant) {
37
		mediateur = mediateurCourant;
38
		i18nC = Mediateur.i18nC;
39
		setLayout(new FitLayout());
40
 
41
		ContentPanel panneauPrincipal = new ContentPanel();
42
		panneauPrincipal.setLayout(new FitLayout());
43
		panneauPrincipal.setHeading("Accueil");
44
		panneauPrincipal.setBorders(false);
45
 
46
		ToolBar barreOutils = new ToolBar();
47
		Button ajouter = new Button(i18nC.ajouter());
48
		ajouter.setIcon(Images.ICONES.ajouter());
49
		ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {
50
			public void componentSelected(ButtonEvent be) {
912 jpm 51
				ajouterPortlet();
910 jpm 52
			}
53
		});
54
		barreOutils.add(ajouter);
55
 
912 jpm 56
		Button enregistrer = new Button("Enregistrer");
57
		enregistrer.setIcon(Images.ICONES.appliquer());
58
		enregistrer.addSelectionListener(new SelectionListener<ButtonEvent>() {
59
			public void componentSelected(ButtonEvent be) {
60
				enregistrerParametres();
61
			}
62
		});
63
		barreOutils.add(enregistrer);
64
 
910 jpm 65
		panneauPrincipal.setTopComponent(barreOutils);
66
 
912 jpm 67
		portail = creerPortail();
68
		panneauPrincipal.add(portail);
69
 
70
		chargerParametres();
71
 
72
		add(panneauPrincipal);
73
		mediateur.desactiverChargement();
74
	}
75
 
76
	private Portal creerPortail() {
77
		Portal portail  = new Portal(3);
910 jpm 78
		portail.setBorders(true);
79
		portail.setStyleAttribute("backgroundColor", "white");
80
		portail.setShadow(true);
81
		portail.setColumnWidth(0, .33);
82
		portail.setColumnWidth(1, .33);
83
		portail.setColumnWidth(2, .33);
912 jpm 84
		return portail;
910 jpm 85
	}
86
 
912 jpm 87
	// INFO: Les items d'une classse portal correspondent aux colonnes. Pour vider une Portal, il faut donc vider les éléments de chaque item du Portal.
88
	private void viderPortail() {
89
		portail.getItem(0).removeAll();
90
		portail.getItem(1).removeAll();
91
		portail.getItem(2).removeAll();
910 jpm 92
	}
93
 
912 jpm 94
	private void chargerParametres() {
95
		viderPortail();
96
		Debug.log("Nbre aplletes c0 :"+portail.getItem(0).getItemCount());
97
		Debug.log("Charger:"+mediateur.getUtilisateur().getParametre());
98
 
99
		Document paramXml = XMLParser.parse(mediateur.getUtilisateur().getParametre());
100
		NodeList listeAccueilNoeud = paramXml.getElementsByTagName("accueil");
101
		int nbreAccueilNoeud = listeAccueilNoeud.getLength();
102
 
103
		// Récupération du noeud accueil
104
		Node accueilNoeud = null;
105
		if (nbreAccueilNoeud == 0) {
106
			ajouterPortlet();
107
		} else if (nbreAccueilNoeud == 1) {
108
			accueilNoeud = listeAccueilNoeud.item(0);
109
 
110
			// Lecture des noeuds "applette"
111
			NodeList listeAppletteNoeud = accueilNoeud.getChildNodes();
112
			int nbreAppletteNoeud = listeAppletteNoeud.getLength();
113
			TreeMap<String, HashMap<String, String>> tableApplettes = new TreeMap<String, HashMap<String, String>>();
114
			for (int i = 0; i < nbreAppletteNoeud ; i++) {
115
				Element appletteNoeud = (Element) listeAppletteNoeud.item(i);
116
				int colonne = Integer.parseInt(appletteNoeud.getAttribute("colonne"));
117
				int index = Integer.parseInt(appletteNoeud.getAttribute("index"));
118
				HashMap<String, String> infoApplette = new HashMap<String, String>();
119
				infoApplette.put("type", appletteNoeud.getAttribute("type"));
120
				infoApplette.put("colonne", appletteNoeud.getAttribute("colonne"));
121
				infoApplette.put("index", appletteNoeud.getAttribute("index"));
122
				infoApplette.put("contenu", appletteNoeud.getAttribute("contenu"));
123
				tableApplettes.put(colonne+"-"+index, infoApplette);
910 jpm 124
			}
912 jpm 125
			Iterator<String> it = tableApplettes.keySet().iterator();
126
			while (it.hasNext()) {
127
				String id = it.next();
128
				HashMap<String, String> infoApplette = tableApplettes.get(id);
129
				ajouterPortlet(infoApplette.get("type"), Integer.parseInt(infoApplette.get("colonne")), Integer.parseInt(infoApplette.get("index")), infoApplette.get("contenu"));
910 jpm 130
			}
912 jpm 131
		}
132
		Debug.log("Nbre aplletes c0 :"+portail.getItem(0).getItemCount());
133
		layout();
910 jpm 134
	}
135
 
912 jpm 136
	private void enregistrerParametres() {
137
		ArrayList<Portlet> applettes = getPortlets();
138
 
139
		Iterator<Portlet>  it = applettes.iterator();
140
 
141
		Document paramXml = XMLParser.parse(mediateur.getUtilisateur().getParametre());
142
		NodeList listeAccueilNoeud = paramXml.getElementsByTagName("accueil");
143
		int nbreAccueilNoeud = listeAccueilNoeud.getLength();
144
 
145
		// Suppression des noeuds "accueil" existant car il ne devrait y en avoir qu'un
146
		if (nbreAccueilNoeud > 1) {
147
			for (int i = 0; i < nbreAccueilNoeud ; i++) {
148
				paramXml.getDocumentElement().removeChild(listeAccueilNoeud.item(i));
149
			}
150
			nbreAccueilNoeud = 0;
151
		}
152
 
153
		// Création du nouveau noeud accueil
154
		Node accueilNoeud = null;
155
		Element accueilElement = paramXml.createElement("accueil");
156
		if (nbreAccueilNoeud == 0) {
157
			accueilNoeud = paramXml.getDocumentElement().appendChild(accueilElement);
158
		} else if (nbreAccueilNoeud == 1) {
159
			accueilNoeud = listeAccueilNoeud.item(0);
160
			paramXml.getDocumentElement().replaceChild(accueilElement, accueilNoeud);
161
			accueilNoeud = paramXml.getElementsByTagName("accueil").item(0);
162
		}
163
 
164
		// Ajout des noeuds "applette" au noeud "accueil"
165
		while (it.hasNext()) {
166
			Portlet applette = it.next();
167
			String index = Integer.toString(portail.getPortletIndex(applette));
168
			String colonne = Integer.toString(portail.getPortletColumn(applette));
169
			String contenu = applette.getData("contenu");
170
			Element appletteElement = paramXml.createElement("applette");
171
			appletteElement.setAttribute("type", "statistique");
172
			appletteElement.setAttribute("colonne", colonne);
173
			appletteElement.setAttribute("index", index);
174
			appletteElement.setAttribute("contenu", contenu);
175
			accueilNoeud.appendChild(appletteElement);
176
		}
177
 
178
		Debug.log("Enregistrer:"+paramXml.toString());
179
		mediateur.getUtilisateur().setParametre(paramXml.toString());
180
		mediateur.modifierUtilisateur();
181
	}
182
 
183
	private ArrayList<Portlet> getPortlets() {
184
		ArrayList<Portlet> applettes = new ArrayList<Portlet>();
185
		for (int i = 0; i < 3; i++) {
186
			int nbreApplette = portail.getItem(i).getItemCount();
187
			if (nbreApplette > 0) {
188
				for (int j = 0; j < nbreApplette; j++) {
189
					applettes.add((Portlet) portail.getItem(i).getItem(j));
190
				}
191
			}
192
		}
193
		return applettes;
194
	}
195
 
196
	private void ajouterPortlet() {
197
		ajouterPortlet("statistique", 0, 0, null);
198
	}
199
 
200
	private void ajouterPortlet(String type, int colonne, int index, String contenu) {
201
		Debug.log("Ajout:"+type+"-"+colonne+"-"+index+"-"+contenu);
202
		Portlet portlet = null;
203
		if (type.equals("statistique")) {
204
			portlet = new AppletteStatistique(contenu);
205
		}
206
		portail.insert(portlet, index, colonne);
207
		layout();
208
	}
209
 
910 jpm 210
	public void rafraichir(Object nouvellesDonnees) {
211
		if (nouvellesDonnees instanceof Information) {
212
			Information info = (Information) nouvellesDonnees;
213
			String type = info.getType();
912 jpm 214
			if (type.equals("maj_utilisateur")) {
215
				chargerParametres();
910 jpm 216
			}
217
		} else {
218
			Debug.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()));
219
		}
220
	}
221
}