Blame | 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.ComposantId;import org.tela_botanica.client.Mediateur;import org.tela_botanica.client.RegistreId;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.modeles.Utilisateur;import org.tela_botanica.client.util.Debug;import com.extjs.gxt.ui.client.Registry;import com.extjs.gxt.ui.client.event.BaseEvent;import com.extjs.gxt.ui.client.event.ButtonEvent;import com.extjs.gxt.ui.client.event.EventType;import com.extjs.gxt.ui.client.event.Events;import com.extjs.gxt.ui.client.event.Listener;import com.extjs.gxt.ui.client.event.SelectionListener;import com.extjs.gxt.ui.client.event.TabPanelEvent;import com.extjs.gxt.ui.client.widget.ContentPanel;import com.extjs.gxt.ui.client.widget.LayoutContainer;import com.extjs.gxt.ui.client.widget.TabItem;import com.extjs.gxt.ui.client.widget.TabPanel;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.user.client.Window;import com.google.gwt.user.client.ui.Widget;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 StatistiquesVue extends LayoutContainer implements Rafraichissable {private Mediateur mediateur = null;private Constantes i18nC = null;private static Portal portail = null;private static boolean enregistrementEnCours = false;private ContentPanel panneauPrincipalPortail = new ContentPanel();public StatistiquesVue(Mediateur mediateurCourant) {mediateur = mediateurCourant;i18nC = Mediateur.i18nC;setLayout(new FitLayout());panneauPrincipalPortail = new ContentPanel();panneauPrincipalPortail.setLayout(new FitLayout());panneauPrincipalPortail.setHeaderVisible(false);panneauPrincipalPortail.setBorders(false);final 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();}});ajouter.setToolTip(i18nC.indicationAjouterStatistiqueAccueil());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());}}});enregistrer.setToolTip(i18nC.indicationEnregistrerAccueil());barreOutils.add(enregistrer);panneauPrincipalPortail.setTopComponent(barreOutils);portail = creerPortail();ajouterPortletsDefaut();Utilisateur utilisateur = ((Mediateur) Registry.get(RegistreId.MEDIATEUR)).getUtilisateur();if(utilisateur.isIdentifie()) {chargerParametres();}panneauPrincipalPortail.add(portail);add(panneauPrincipalPortail);mediateur.desactiverChargement(this);}private Portal creerPortail() {final Portal portail = new Portal(3);portail.setBorders(true);portail.addListener(Events.Render, new Listener<BaseEvent>() {@Overridepublic void handleEvent(BaseEvent be) {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) {ajouterPortletsDefaut();} else if (nbreAccueilNoeud == 1) {accueilNoeud = listeAccueilNoeud.item(0);NodeList listeAppletteNoeud = accueilNoeud.getChildNodes();// un noeud de type vide indique que l'utilisateur a explicité effacé les applettes de la page d'accueilif(listeAppletteNoeud.getLength() > 0 && !listeAppletteNoeud.item(0).getNodeName().equals("vide")) {portail.removeAll();// Lecture des noeuds "applette"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"));}} else if(listeAppletteNoeud.getLength() == 0) {ajouterPortletsDefaut();}}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);}// si il existe des applettes ouvertesif(it.hasNext()) {// 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);}} else {// sinon ajout d'un noeud videElement videElement = paramXml.createElement("vide");accueilNoeud.appendChild(videElement);}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();}private void ajouterPortletsDefaut() {//TODO créer une énum des différents types de portlet puis faire une boucle// dessusApplette applette = new AppletteStatistique(mediateur, "NombreDonnees");portail.insert(applette, 0, 0);applette.setEpingler(true);applette = new AppletteStatistique(mediateur, "MesDonnees");portail.insert(applette, 0, 1);applette = new AppletteStatistique(mediateur, "TypeDepot");portail.insert(applette, 0, 2);applette = new AppletteStatistique(mediateur, "NombreCollectionParStructure");portail.insert(applette, 1, 0);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()));}}}