Subversion Repositories eFlore/Applications.coel

Rev

Rev 1165 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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