Rev 1165 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues.accueil;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.TreeMap;import org.tela_botanica.client.Mediateur;import org.tela_botanica.client.composants.InfoLogger;import org.tela_botanica.client.i18n.Constantes;import org.tela_botanica.client.images.Images;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.Information;import org.tela_botanica.client.util.Debug;import com.extjs.gxt.ui.client.GXT;import com.extjs.gxt.ui.client.event.ButtonEvent;import com.extjs.gxt.ui.client.event.SelectionListener;import com.extjs.gxt.ui.client.widget.ContentPanel;import com.extjs.gxt.ui.client.widget.Info;import com.extjs.gxt.ui.client.widget.LayoutContainer;import com.extjs.gxt.ui.client.widget.button.Button;import com.extjs.gxt.ui.client.widget.custom.Portal;import com.extjs.gxt.ui.client.widget.custom.Portlet;import com.extjs.gxt.ui.client.widget.layout.FitLayout;import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;import com.google.gwt.xml.client.Document;import com.google.gwt.xml.client.Element;import com.google.gwt.xml.client.Node;import com.google.gwt.xml.client.NodeList;import com.google.gwt.xml.client.XMLParser;public class AccueilVue extends LayoutContainer implements Rafraichissable {private Mediateur mediateur = null;private Constantes i18nC = null;private Portal portail = null;private static boolean enregistrementEnCours = false;public AccueilVue(Mediateur mediateurCourant) {mediateur = mediateurCourant;i18nC = Mediateur.i18nC;setLayout(new FitLayout());ContentPanel panneauPrincipal = new ContentPanel();panneauPrincipal.setLayout(new FitLayout());panneauPrincipal.setHeading("Accueil");panneauPrincipal.setBorders(false);ToolBar barreOutils = new ToolBar();Button ajouter = new Button(i18nC.ajouter());ajouter.setIcon(Images.ICONES.ajouter());ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {public void componentSelected(ButtonEvent be) {ajouterPortlet();}});barreOutils.add(ajouter);Button enregistrer = new Button("Enregistrer");enregistrer.setIcon(Images.ICONES.appliquer());enregistrer.addSelectionListener(new SelectionListener<ButtonEvent>() {public void componentSelected(ButtonEvent be) {if (enregistrementEnCours == false) {enregistrerParametres();} else {InfoLogger.display(i18nC.accueilEnregistrement(), i18nC.accueilEnregistrementEnCours());}}});barreOutils.add(enregistrer);panneauPrincipal.setTopComponent(barreOutils);portail = creerPortail();panneauPrincipal.add(portail);chargerParametres();add(panneauPrincipal);mediateur.desactiverChargement();}private Portal creerPortail() {Portal portail = new Portal(3);portail.setBorders(true);portail.setStyleAttribute("backgroundColor", "white");portail.setShadow(true);portail.setColumnWidth(0, .33);portail.setColumnWidth(1, .33);portail.setColumnWidth(2, .33);return portail;}// 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.private void viderPortail() {portail.getItem(0).removeAll();portail.getItem(1).removeAll();portail.getItem(2).removeAll();}private void chargerParametres() {viderPortail();Document paramXml = XMLParser.parse(mediateur.getUtilisateur().getParametre());NodeList listeAccueilNoeud = paramXml.getElementsByTagName("accueil");int nbreAccueilNoeud = listeAccueilNoeud.getLength();// Récupération du noeud accueilNode accueilNoeud = null;if (nbreAccueilNoeud == 0) {ajouterPortlet();} else if (nbreAccueilNoeud == 1) {accueilNoeud = listeAccueilNoeud.item(0);// Lecture des noeuds "applette"NodeList listeAppletteNoeud = accueilNoeud.getChildNodes();int nbreAppletteNoeud = listeAppletteNoeud.getLength();TreeMap<String, HashMap<String, String>> tableApplettes = new TreeMap<String, HashMap<String, String>>();for (int i = 0; i < nbreAppletteNoeud ; i++) {Element appletteNoeud = (Element) listeAppletteNoeud.item(i);int colonne = Integer.parseInt(appletteNoeud.getAttribute("colonne"));int index = Integer.parseInt(appletteNoeud.getAttribute("index"));HashMap<String, String> infoApplette = new HashMap<String, String>();infoApplette.put("reduite", appletteNoeud.getAttribute("reduite"));infoApplette.put("epingle", appletteNoeud.getAttribute("epingle"));infoApplette.put("type", appletteNoeud.getAttribute("type"));infoApplette.put("colonne", appletteNoeud.getAttribute("colonne"));infoApplette.put("index", appletteNoeud.getAttribute("index"));infoApplette.put("contenu", appletteNoeud.getAttribute("contenu"));tableApplettes.put(colonne+"-"+index, infoApplette);}Iterator<String> it = tableApplettes.keySet().iterator();while (it.hasNext()) {String id = it.next();HashMap<String, String> infoApplette = tableApplettes.get(id);boolean reduite = (infoApplette.get("reduite") != null && infoApplette.get("reduite").equals("true")) ? true : false;boolean epingle = (infoApplette.get("epingle") != null && infoApplette.get("epingle").equals("true")) ? true : false;int index = Integer.parseInt(infoApplette.get("index"));int colonne = Integer.parseInt(infoApplette.get("colonne"));ajouterPortlet(reduite, epingle, infoApplette.get("type"), colonne, index, infoApplette.get("contenu"));}}layout();}private void enregistrerParametres() {ArrayList<Portlet> applettes = getPortlets();Iterator<Portlet> it = applettes.iterator();Document paramXml = XMLParser.parse(mediateur.getUtilisateur().getParametre());NodeList listeAccueilNoeud = paramXml.getElementsByTagName("accueil");int nbreAccueilNoeud = listeAccueilNoeud.getLength();// Suppression des noeuds "accueil" existant car il ne devrait y en avoir qu'unif (nbreAccueilNoeud > 1) {for (int i = 0; i < nbreAccueilNoeud ; i++) {paramXml.getDocumentElement().removeChild(listeAccueilNoeud.item(i));}nbreAccueilNoeud = 0;}// Création du nouveau noeud accueilNode accueilNoeud = null;Element accueilElement = paramXml.createElement("accueil");if (nbreAccueilNoeud == 0) {accueilNoeud = paramXml.getDocumentElement().appendChild(accueilElement);} else if (nbreAccueilNoeud == 1) {accueilNoeud = listeAccueilNoeud.item(0);paramXml.getDocumentElement().replaceChild(accueilElement, accueilNoeud);accueilNoeud = paramXml.getElementsByTagName("accueil").item(0);}// Ajout des noeuds "applette" au noeud "accueil"while (it.hasNext()) {Portlet applette = it.next();String reduite = (applette.isCollapsed() ? "true" : "false");String epingle = (applette.isPinned() ? "true" : "false");String index = Integer.toString(portail.getPortletIndex(applette));String colonne = Integer.toString(portail.getPortletColumn(applette));String contenu = applette.getData("contenu");Element appletteElement = paramXml.createElement("applette");appletteElement.setAttribute("reduite", reduite);appletteElement.setAttribute("epingle", epingle);appletteElement.setAttribute("type", "statistique");appletteElement.setAttribute("colonne", colonne);appletteElement.setAttribute("index", index);appletteElement.setAttribute("contenu", contenu);accueilNoeud.appendChild(appletteElement);}enregistrementEnCours = true;mediateur.getUtilisateur().setParametre(paramXml.toString());mediateur.modifierUtilisateur();}private ArrayList<Portlet> getPortlets() {ArrayList<Portlet> applettes = new ArrayList<Portlet>();for (int i = 0; i < 3; i++) {int nbreApplette = portail.getItem(i).getItemCount();if (nbreApplette > 0) {for (int j = 0; j < nbreApplette; j++) {applettes.add((Portlet) portail.getItem(i).getItem(j));}}}return applettes;}private void ajouterPortlet() {ajouterPortlet(false, false, "statistique", 0, 0, null);}private void ajouterPortlet(boolean reduite, boolean epingle, String type, int colonne, int index, String contenu) {Applette applette = null;if (type.equals("statistique")) {applette = new AppletteStatistique(mediateur, contenu);}if (reduite) {applette.collapse();}portail.insert(applette, index, colonne);applette.setEpingler(epingle);layout();}public void rafraichir(Object nouvellesDonnees) {if (nouvellesDonnees instanceof Information) {Information info = (Information) nouvellesDonnees;String type = info.getType();if (type.equals("maj_utilisateur")) {if (enregistrementEnCours == true) {enregistrementEnCours = false;InfoLogger.display(i18nC.accueilEnregistrement(), i18nC.accueilEnregistrementSucces());} else {chargerParametres();InfoLogger.display(i18nC.accueil(), i18nC.accueilChargementSucces());}}} else {Debug.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()));}}}