Subversion Repositories eFlore/Applications.coel

Rev

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