Subversion Repositories eFlore/Applications.coel

Rev

Rev 1789 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1789 Rev 1790
Line 37... Line 37...
37
import com.google.gwt.xml.client.Element;
37
import com.google.gwt.xml.client.Element;
38
import com.google.gwt.xml.client.Node;
38
import com.google.gwt.xml.client.Node;
39
import com.google.gwt.xml.client.NodeList;
39
import com.google.gwt.xml.client.NodeList;
40
import com.google.gwt.xml.client.XMLParser;
40
import com.google.gwt.xml.client.XMLParser;
Line 41... Line 41...
41
 
41
 
Line 42... Line 42...
42
public class AccueilVue  extends LayoutContainer implements Rafraichissable {
42
public class AccueilVue extends LayoutContainer implements Rafraichissable {
43
	
43
	
44
	private Mediateur mediateur = null;
-
 
45
	private Constantes i18nC = null;
44
	private Mediateur mediateur = null;
46
	private static Portal portail = null;
-
 
47
	private static Widget tutoriel = null;
-
 
48
	private static boolean enregistrementEnCours = false;
-
 
Line 49... Line 45...
49
	private ContentPanel panneauPrincipalPortail = new ContentPanel();
45
	private Constantes i18nC = null;
50
	TabPanel panneauOnglet = null;
46
	private static Widget tutoriel = null;
51
	
47
	
52
	public AccueilVue(Mediateur mediateurCourant) {
48
	public AccueilVue(Mediateur mediateurCourant) {
53
		mediateur = mediateurCourant;
-
 
54
		i18nC = Mediateur.i18nC;
-
 
55
		setLayout(new FitLayout());
-
 
56
		
-
 
57
		panneauPrincipalPortail = new ContentPanel();
-
 
58
		panneauPrincipalPortail.setLayout(new FitLayout());
-
 
59
		panneauPrincipalPortail.setHeaderVisible(false);
-
 
60
		panneauPrincipalPortail.setBorders(false);
-
 
61
		
-
 
62
		panneauOnglet = new TabPanel();
-
 
63
		
-
 
64
		final ToolBar barreOutils = new ToolBar();
-
 
65
		Button ajouter = new Button(i18nC.ajouter());
-
 
66
		ajouter.setIcon(Images.ICONES.ajouter());
49
		mediateur = mediateurCourant;
67
		ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {  
-
 
68
			public void componentSelected(ButtonEvent be) {  
-
 
69
				ajouterPortlet();
-
 
70
			}  
-
 
71
		});
-
 
72
		ajouter.setToolTip(i18nC.indicationAjouterStatistiqueAccueil());
-
 
73
		barreOutils.add(ajouter);
-
 
74
		
-
 
75
		Button enregistrer = new Button("Enregistrer");
-
 
76
		enregistrer.setIcon(Images.ICONES.appliquer());
-
 
77
		enregistrer.addSelectionListener(new SelectionListener<ButtonEvent>() {  
-
 
78
			public void componentSelected(ButtonEvent be) {  
-
 
79
				if (enregistrementEnCours == false) {
-
 
80
					enregistrerParametres();
-
 
81
				} else {
-
 
82
					InfoLogger.display(i18nC.accueilEnregistrement(), i18nC.accueilEnregistrementEnCours());
-
 
83
				}
-
 
84
			}  
-
 
85
		});
-
 
86
		enregistrer.setToolTip(i18nC.indicationEnregistrerAccueil());
-
 
Line 87... Line 50...
87
		barreOutils.add(enregistrer);
50
		i18nC = Mediateur.i18nC;
88
		
-
 
89
		panneauPrincipalPortail.setTopComponent(barreOutils);
-
 
90
		
-
 
91
		tutoriel = new AccueilTutorielVue(mediateur);
-
 
92
		portail = creerPortail();
-
 
93
		
-
 
94
		Utilisateur utilisateur = ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).getUtilisateur();
-
 
95
		if(utilisateur.isIdentifie()) {
-
 
96
			chargerParametres();
-
 
97
		}
-
 
98
		ajouterPortletsDefaut();
-
 
99
		
-
 
100
		panneauPrincipalPortail.add(portail);
-
 
101
		
-
 
102
		TabItem tiPortlet = new TabItem("Statistiques");
-
 
103
		tiPortlet.add(panneauPrincipalPortail);
51
		setLayout(new FitLayout());
104
		
-
 
105
		final TabItem tiTuto = new TabItem("Premiers pas");
-
 
106
		tiTuto.setLayout(new FitLayout());
-
 
107
		tiTuto.add(tutoriel);
-
 
108
		
-
 
109
		panneauOnglet.add(tiTuto);
-
 
110
		panneauOnglet.add(tiPortlet);
-
 
111
 
-
 
112
		add(panneauOnglet);
-
 
113
		
-
 
114
		// Correction de hauteur du panneau contenant les stats qui gère mal le fait d'être
-
 
115
		// dans un onglet
-
 
116
		panneauOnglet.addListener(Events.Select, new Listener<TabPanelEvent>() {
-
 
117
			public void handleEvent(TabPanelEvent be) {
-
 
118
				if(portail.isRendered()) {
-
 
119
					portail.setHeight(panneauOnglet.getHeight() - barreOutils.getHeight());
-
 
Line 120... Line 52...
120
					portail.setWidth(panneauOnglet.getWidth());
52
		setBorders(false);
121
				}
53
		
122
			}
-
 
123
	    });
-
 
124
		
-
 
125
		mediateur.desactiverChargement(this);
-
 
126
	}
-
 
127
	
-
 
128
	private Portal creerPortail() {
-
 
129
		Portal portail  = new Portal(3);
-
 
130
		portail.setBorders(true);
-
 
131
		portail.setStyleAttribute("backgroundColor", "white");
-
 
132
		portail.setShadow(true);
-
 
133
		portail.setColumnWidth(0, .33);
-
 
134
		portail.setColumnWidth(1, .33);
-
 
135
		portail.setColumnWidth(2, .33);
-
 
136
		return portail;
-
 
137
	}
-
 
138
	
-
 
139
	// 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.
-
 
140
	private void viderPortail() {
-
 
141
		portail.getItem(0).removeAll();
-
 
142
		portail.getItem(1).removeAll();
-
 
143
		portail.getItem(2).removeAll();
-
 
144
	}
-
 
145
	
-
 
146
	private void chargerParametres() {	
-
 
147
		viderPortail();
-
 
148
		Document paramXml = XMLParser.parse(mediateur.getUtilisateur().getParametre());
-
 
149
		NodeList listeAccueilNoeud = paramXml.getElementsByTagName("accueil");
-
 
150
		int nbreAccueilNoeud = listeAccueilNoeud.getLength();
-
 
151
 
-
 
152
		// Récupération du noeud accueil
-
 
153
		Node accueilNoeud = null;
-
 
154
		if (nbreAccueilNoeud == 0) {		
-
 
155
			ajouterPortletsDefaut();
-
 
156
		} else if (nbreAccueilNoeud == 1) {
-
 
157
			accueilNoeud = listeAccueilNoeud.item(0);
-
 
158
			NodeList listeAppletteNoeud = accueilNoeud.getChildNodes();
-
 
159
			// un noeud de type vide indique que l'utilisateur a explicité effacé les applettes de la page d'accueil
-
 
160
			if(listeAppletteNoeud.getLength() > 0 && !listeAppletteNoeud.item(0).getNodeName().equals("vide")) {		
-
 
161
				// Lecture des noeuds "applette"
-
 
162
				int nbreAppletteNoeud = listeAppletteNoeud.getLength();
-
 
163
				TreeMap<String, HashMap<String, String>> tableApplettes = new TreeMap<String, HashMap<String, String>>(); 				
-
 
164
				for (int i = 0; i < nbreAppletteNoeud ; i++) {
-
 
165
					Element appletteNoeud = (Element) listeAppletteNoeud.item(i);
-
 
166
					int colonne = Integer.parseInt(appletteNoeud.getAttribute("colonne"));
-
 
167
					int index = Integer.parseInt(appletteNoeud.getAttribute("index"));
-
 
168
					HashMap<String, String> infoApplette = new HashMap<String, String>();
-
 
169
					infoApplette.put("reduite", appletteNoeud.getAttribute("reduite"));
-
 
170
					infoApplette.put("epingle", appletteNoeud.getAttribute("epingle"));
-
 
171
					infoApplette.put("type", appletteNoeud.getAttribute("type"));
-
 
172
					infoApplette.put("colonne", appletteNoeud.getAttribute("colonne"));
-
 
173
					infoApplette.put("index", appletteNoeud.getAttribute("index"));
-
 
174
					infoApplette.put("contenu", appletteNoeud.getAttribute("contenu"));
-
 
175
					tableApplettes.put(colonne+"-"+index, infoApplette);
-
 
176
				}
-
 
177
				Iterator<String> it = tableApplettes.keySet().iterator();
-
 
178
				while (it.hasNext()) {
-
 
179
					String id = it.next();
-
 
180
					HashMap<String, String> infoApplette = tableApplettes.get(id);
-
 
181
					boolean reduite = (infoApplette.get("reduite") != null && infoApplette.get("reduite").equals("true")) ? true : false;
-
 
182
					boolean epingle = (infoApplette.get("epingle") != null && infoApplette.get("epingle").equals("true")) ? true : false;
-
 
183
					int index = Integer.parseInt(infoApplette.get("index"));
-
 
184
					int colonne = Integer.parseInt(infoApplette.get("colonne"));			
-
 
185
					ajouterPortlet(reduite, epingle, infoApplette.get("type"), colonne, index, infoApplette.get("contenu"));				
-
 
186
				}
-
 
187
			} else if(listeAppletteNoeud.getLength() == 0) {
-
 
188
				ajouterPortletsDefaut();
-
 
189
			}
-
 
190
		}
-
 
191
		layout();		
-
 
192
	}
-
 
193
	
-
 
194
	private void enregistrerParametres() {
-
 
195
		ArrayList<Portlet> applettes = getPortlets();
-
 
196
		
-
 
Line 197... Line -...
197
		Iterator<Portlet>  it = applettes.iterator();
-
 
198
		
-
 
199
		Document paramXml = XMLParser.parse(mediateur.getUtilisateur().getParametre());
-
 
200
		NodeList listeAccueilNoeud = paramXml.getElementsByTagName("accueil");
-
 
201
		int nbreAccueilNoeud = listeAccueilNoeud.getLength();
-
 
202
 
-
 
203
		// Suppression des noeuds "accueil" existant car il ne devrait y en avoir qu'un
-
 
204
		if (nbreAccueilNoeud > 1) {
-
 
205
			for (int i = 0; i < nbreAccueilNoeud ; i++) {
-
 
206
				paramXml.getDocumentElement().removeChild(listeAccueilNoeud.item(i));
-
 
207
			}
-
 
208
			nbreAccueilNoeud = 0;
-
 
209
		}
-
 
210
		
-
 
211
		// Création du nouveau noeud accueil
-
 
212
		Node accueilNoeud = null;
-
 
213
		Element accueilElement = paramXml.createElement("accueil");
-
 
214
		if (nbreAccueilNoeud == 0) {
-
 
215
			accueilNoeud = paramXml.getDocumentElement().appendChild(accueilElement);
-
 
216
		} else if (nbreAccueilNoeud == 1) {
-
 
217
			accueilNoeud = listeAccueilNoeud.item(0);
-
 
218
			paramXml.getDocumentElement().replaceChild(accueilElement, accueilNoeud);
-
 
219
			accueilNoeud = paramXml.getElementsByTagName("accueil").item(0);
-
 
220
		}
-
 
221
		
-
 
222
		// si il existe des applettes ouvertes
-
 
223
		if(it.hasNext()) {
-
 
224
			// Ajout des noeuds "applette" au noeud "accueil"
-
 
225
			while (it.hasNext()) {
-
 
226
				Portlet applette = it.next();
-
 
227
				String reduite = (applette.isCollapsed() ? "true" : "false");
-
 
228
				String epingle = (applette.isPinned() ? "true" : "false");
-
 
229
				String index = Integer.toString(portail.getPortletIndex(applette));
-
 
230
				String colonne = Integer.toString(portail.getPortletColumn(applette));
-
 
231
				String contenu = applette.getData("contenu");
-
 
232
				
-
 
233
				Element appletteElement = paramXml.createElement("applette");
-
 
234
				appletteElement.setAttribute("reduite", reduite);
-
 
235
				appletteElement.setAttribute("epingle", epingle);
-
 
236
				appletteElement.setAttribute("type", "statistique");
-
 
237
				appletteElement.setAttribute("colonne", colonne);
54
		tutoriel = new AccueilTutorielVue(mediateur);
238
				appletteElement.setAttribute("index", index);
-
 
239
				appletteElement.setAttribute("contenu", contenu);
-
 
240
				
-
 
241
				accueilNoeud.appendChild(appletteElement);
-
 
242
			}
-
 
243
		} else {
-
 
244
			// sinon ajout d'un noeud vide
-
 
245
			Element videElement = paramXml.createElement("vide");
-
 
246
			accueilNoeud.appendChild(videElement);
-
 
247
		}
-
 
248
		
-
 
249
		enregistrementEnCours = true;
-
 
250
		mediateur.getUtilisateur().setParametre(paramXml.toString());
-
 
251
		mediateur.modifierUtilisateur();
-
 
252
	}
-
 
253
	
-
 
254
	private ArrayList<Portlet> getPortlets() {
-
 
255
		ArrayList<Portlet> applettes = new ArrayList<Portlet>();
-
 
256
		for (int i = 0; i < 3; i++) {
-
 
257
			int nbreApplette = portail.getItem(i).getItemCount();
-
 
258
			if (nbreApplette > 0) {
-
 
259
				for (int j = 0; j < nbreApplette; j++) {
-
 
260
					applettes.add((Portlet) portail.getItem(i).getItem(j));
-
 
261
				}
-
 
262
			}
-
 
263
		}
-
 
264
		return applettes;
-
 
265
	}
-
 
266
	
-
 
267
	private void ajouterPortlet() {
-
 
268
		ajouterPortlet(false, false, "statistique", 0, 0, null);
-
 
269
	}
-
 
270
	
-
 
271
	private void ajouterPortlet(boolean reduite, boolean epingle, String type, int colonne, int index, String contenu) {
-
 
272
		Applette applette = null;
-
 
273
		if (type.equals("statistique")) {		
-
 
274
			applette = new AppletteStatistique(mediateur, contenu);
-
 
275
		}
-
 
276
		if (reduite) {
-
 
277
			applette.collapse();
-
 
278
		}
-
 
279
		portail.insert(applette, index, colonne);		
-
 
280
		applette.setEpingler(epingle);	
-
 
281
		layout();
-
 
282
	}
-
 
283
	
-
 
284
	private void ajouterPortletsDefaut() {		
-
 
285
		//TODO créer une énum des différents types de portlet puis faire une boucle
-
 
286
		// dessus
-
 
287
		Applette applette = new AppletteStatistique(mediateur, "NombreDonnees");
-
 
288
		portail.insert(applette, 0, 0);		
-
 
289
		applette.setEpingler(true);	
-
 
290
		
-
 
291
		applette = new AppletteStatistique(mediateur, "MesDonnees");
-
 
292
		portail.insert(applette, 0, 1);	
-
 
293
		
-
 
294
		applette = new AppletteStatistique(mediateur, "TypeDepot");
-
 
295
		portail.insert(applette, 0, 2);	
-
 
296
		
55
		add(tutoriel);
297
		applette = new AppletteStatistique(mediateur, "NombreCollectionParStructure");
-
 
298
		portail.insert(applette, 1, 0);	
-
 
299
		layout();
-
 
300
	}
-
 
301
	
-
 
302
	public void rafraichir(Object nouvellesDonnees) {	
56
		
303
		if (nouvellesDonnees instanceof Information) {
-
 
304
			Information info = (Information) nouvellesDonnees;
-
 
305
			String type = info.getType(); 
-
 
306
			if (type.equals("maj_utilisateur")) {
-
 
307
				if (enregistrementEnCours == true) {
-
 
308
					enregistrementEnCours = false;
-
 
309
					InfoLogger.display(i18nC.accueilEnregistrement(), i18nC.accueilEnregistrementSucces());
-
 
310
				} else {
-
 
311
					chargerParametres();
-
 
312
					InfoLogger.display(i18nC.accueil(), i18nC.accueilChargementSucces());
57
		mediateur.desactiverChargement(this);
313
				}
58
	}