New file |
0,0 → 1,221 |
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.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.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.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; |
|
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) { |
enregistrerParametres(); |
} |
}); |
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(); |
Debug.log("Nbre aplletes c0 :"+portail.getItem(0).getItemCount()); |
Debug.log("Charger:"+mediateur.getUtilisateur().getParametre()); |
|
Document paramXml = XMLParser.parse(mediateur.getUtilisateur().getParametre()); |
NodeList listeAccueilNoeud = paramXml.getElementsByTagName("accueil"); |
int nbreAccueilNoeud = listeAccueilNoeud.getLength(); |
|
// Récupération du noeud accueil |
Node 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("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); |
ajouterPortlet(infoApplette.get("type"), Integer.parseInt(infoApplette.get("colonne")), Integer.parseInt(infoApplette.get("index")), infoApplette.get("contenu")); |
} |
} |
Debug.log("Nbre aplletes c0 :"+portail.getItem(0).getItemCount()); |
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'un |
if (nbreAccueilNoeud > 1) { |
for (int i = 0; i < nbreAccueilNoeud ; i++) { |
paramXml.getDocumentElement().removeChild(listeAccueilNoeud.item(i)); |
} |
nbreAccueilNoeud = 0; |
} |
|
// Création du nouveau noeud accueil |
Node 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 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("type", "statistique"); |
appletteElement.setAttribute("colonne", colonne); |
appletteElement.setAttribute("index", index); |
appletteElement.setAttribute("contenu", contenu); |
accueilNoeud.appendChild(appletteElement); |
} |
|
Debug.log("Enregistrer:"+paramXml.toString()); |
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("statistique", 0, 0, null); |
} |
|
private void ajouterPortlet(String type, int colonne, int index, String contenu) { |
Debug.log("Ajout:"+type+"-"+colonne+"-"+index+"-"+contenu); |
Portlet portlet = null; |
if (type.equals("statistique")) { |
portlet = new AppletteStatistique(contenu); |
} |
portail.insert(portlet, index, colonne); |
layout(); |
} |
|
public void rafraichir(Object nouvellesDonnees) { |
if (nouvellesDonnees instanceof Information) { |
Information info = (Information) nouvellesDonnees; |
String type = info.getType(); |
if (type.equals("maj_utilisateur")) { |
chargerParametres(); |
} |
} else { |
Debug.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass())); |
} |
} |
} |