Rev 100 | Rev 103 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.tela_botanica.client.Modele;
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Configuration;
import org.tela_botanica.client.modeles.InterneValeur;
import org.tela_botanica.client.modeles.InterneValeurListe;
import org.tela_botanica.client.modeles.Personne;
import org.tela_botanica.client.modeles.Valeur;
import org.tela_botanica.client.modeles.ValeurListe;
import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.store.ListStore;
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.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.NumberField;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
import com.extjs.gxt.ui.client.widget.grid.CheckBoxSelectionModel;
import com.extjs.gxt.ui.client.widget.grid.CheckColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.layout.ColumnData;
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.TextToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.NumberFormat;
public class FormStructureVue extends LayoutContainer implements Rafraichissable {
private Modele coelModele = null ;
private ListStore<Valeur> magazinLstpr = null;
private ComboBox<Valeur> comboLstpr = null;
private ListStore<Valeur> magazinLstpu = null;
private ComboBox<Valeur> comboLstpu = null;
private ComboBox<InterneValeur> comboAcronyme = null;
private TextField<String> ihChp = null;
private TextField<String> mnhnChp = null;
private ComboBox<InterneValeur> comboTypeStructure = null;
public FormStructureVue() {
//+-----------------------------------------------------------------------------------------------------------+
// Initialisation de variables
setLayout(new FitLayout());
coelModele = Registry.get(RegistreId.MODELE);
// Création de la disposition : FIELDSET
FormLayout layoutFieldset = new FormLayout();
layoutFieldset.setLabelWidth(200);
layoutFieldset.setPadding(4);
//+-----------------------------------------------------------------------------------------------------------+
// Création du panneau Formulaire
FormPanel panel = new FormPanel();
panel.setFrame(true);
panel.setIconStyle("icone-form-ajouter");
panel.setCollapsible(false);
panel.setHeading("Ajout d'une institution");
panel.setButtonAlign(HorizontalAlignment.CENTER);
panel.setLayout(new FlowLayout());
// Création des onglets
TabPanel onglets = new TabPanel();
onglets.setAutoHeight(true);
//tabs.setDeferredRender(false);
//+-----------------------------------------------------------------------------------------------------------+
// Onlget formulaire IDENTIFICATION
TabItem identificationOnglet = new TabItem();
identificationOnglet.setText("Identification");
identificationOnglet.setLayout(new FormLayout());
// Fieldset IDENTITÉ
FieldSet fieldSetIdentite = new FieldSet();
fieldSetIdentite.setHeading("Identité");
fieldSetIdentite.setCollapsible(true);
fieldSetIdentite.setLayout(layoutFieldset);
TextField<String> nomStructureChp = new TextField<String>();
nomStructureChp.setFieldLabel("Nom de la structure");
nomStructureChp.setAllowBlank(false);
nomStructureChp.getMessages().setBlankText("Ce champ est obligatoire.");
fieldSetIdentite.add(nomStructureChp, new FormData(450, 0));
// Création du sous-formulaire : Acronyme
LayoutContainer ligne = new LayoutContainer();
ligne.setLayout(new ColumnLayout());
LayoutContainer gauche = new LayoutContainer();
FormLayout layoutGauche = new FormLayout();
layoutGauche.setLabelAlign(LabelAlign.LEFT);
layoutGauche.setLabelWidth(200);
layoutGauche.setPadding(0);
gauche.setLayout(layoutGauche);
LayoutContainer droite = new LayoutContainer();
FormLayout layoutDroite = new FormLayout();
layoutDroite.setLabelWidth(0);
layoutDroite.setPadding(0);
droite.setLayout(layoutDroite);
ListStore<InterneValeur> acronymes = new ListStore<InterneValeur>();
acronymes.add(InterneValeurListe.getTypeAcronyme());
comboAcronyme = new ComboBox<InterneValeur>();
comboAcronyme.setEmptyText("Sélectioner un type d'acronyme...");
comboAcronyme.setFieldLabel("Acronymes");
comboAcronyme.setDisplayField("nom");
comboAcronyme.setStore(acronymes);
comboAcronyme.setEditable(false);
comboAcronyme.setTypeAhead(true);
comboAcronyme.setTriggerAction(TriggerAction.ALL);
comboAcronyme.addSelectionChangedListener(new SelectionChangedListener<InterneValeur>() {
@Override
public void selectionChanged(SelectionChangedEvent<InterneValeur> se) {
String acronymeAbr = se.getSelectedItem().getAbr();
if (acronymeAbr.equals("IH")) {
mnhnChp.hide();
ihChp.show();
} else if (acronymeAbr.equals("MNHN")) {
ihChp.hide();
mnhnChp.show();
} else if (acronymeAbr.equals("")) {
ihChp.hide();
mnhnChp.hide();
comboAcronyme.clearSelections();
}
}
});
gauche.add(comboAcronyme);
ihChp = new TextField<String>();
//ihChp.setEmptyText("Index Herbariorum");
ihChp.setLabelSeparator("");
ihChp.setToolTip("Index Herbariorum : herbier de plus de 5000 échantillons");
ihChp.hide();
droite.add(ihChp);
mnhnChp = new TextField<String>();
//mnhnChp.setEmptyText("MNHN");
mnhnChp.setLabelSeparator("");
mnhnChp.setToolTip("Acronyme MNHN : herbier de moins de 5000 échantillons");
mnhnChp.hide();
droite.add(mnhnChp);
ligne.add(gauche, new ColumnData(0.5));
ligne.add(droite, new ColumnData(0.5));
fieldSetIdentite.add(ligne);
// Création du sous-formulaire : Type de Structure
LayoutContainer ligneTs = new LayoutContainer();
ligneTs.setLayout(new ColumnLayout());
LayoutContainer gaucheTs = new LayoutContainer();
layoutGauche = new FormLayout();
layoutGauche.setLabelAlign(LabelAlign.LEFT);
layoutGauche.setLabelWidth(200);
layoutGauche.setPadding(0);
gaucheTs.setLayout(layoutGauche);
LayoutContainer droiteTs = new LayoutContainer();
layoutDroite = new FormLayout();
layoutDroite.setLabelWidth(0);
layoutDroite.setPadding(0);
droiteTs.setLayout(layoutDroite);
ListStore<InterneValeur> typesStructure = new ListStore<InterneValeur>();
typesStructure.add(InterneValeurListe.getTypeStructure());
this.comboTypeStructure = new ComboBox<InterneValeur>();
comboTypeStructure.setEmptyText("Sélectioner un type de structure...");
comboTypeStructure.setFieldLabel("Statut des structures");
comboTypeStructure.setDisplayField("nom");
comboTypeStructure.setStore(typesStructure);
comboTypeStructure.setEditable(false);
comboTypeStructure.setTypeAhead(true);
comboTypeStructure.setTriggerAction(TriggerAction.ALL);
comboTypeStructure.addSelectionChangedListener(new SelectionChangedListener<InterneValeur>() {
@Override
public void selectionChanged(SelectionChangedEvent<InterneValeur> se) {
String typeAbr = se.getSelectedItem().getAbr();
if (typeAbr.equals("stpu")) {
comboLstpr.hide();
comboLstpu.show();
} else if (typeAbr.equals("stpr")) {
comboLstpu.hide();
comboLstpr.show();
} else if (typeAbr.equals("")) {
comboLstpr.hide();
comboLstpu.hide();
comboTypeStructure.clearSelections();
}
}
});
gaucheTs.add(comboTypeStructure);
coelModele.obtenirListeValeurs(((Configuration) Registry.get(RegistreId.CONFIG)).getListeId("stpu"));
magazinLstpu = new ListStore<Valeur>();
magazinLstpu.add(new ArrayList<Valeur>());
comboLstpu = new ComboBox<Valeur>();
//comboLstpu.setFieldLabel("Statut des structures publiques");
comboLstpu.setLabelSeparator("");
comboLstpu.setDisplayField("nom");
comboLstpu.setEditable(false);
comboLstpu.setTriggerAction(TriggerAction.ALL);
comboLstpu.setStore(magazinLstpu);
comboLstpu.hide();
droiteTs.add(comboLstpu);
coelModele.obtenirListeValeurs(((Configuration) Registry.get(RegistreId.CONFIG)).getListeId("stpr"));
magazinLstpr = new ListStore<Valeur>();
magazinLstpr.add(new ArrayList<Valeur>());
comboLstpr = new ComboBox<Valeur>();
//comboLstpr.setFieldLabel("Statut des structures privées");
comboLstpr.setLabelSeparator("");
comboLstpr.setDisplayField("nom");
comboLstpr.setEditable(false);
comboLstpr.setTriggerAction(TriggerAction.ALL);
comboLstpr.setStore(magazinLstpr);
comboLstpr.hide();
droiteTs.add(comboLstpr);
ligneTs.add(gaucheTs, new ColumnData(0.5));
ligneTs.add(droiteTs, new ColumnData(0.5));
fieldSetIdentite.add(ligneTs);
DateField dateFondationChp = new DateField();
dateFondationChp.setFieldLabel("Date de fondation");
dateFondationChp.getPropertyEditor().getFormat();
dateFondationChp.getPropertyEditor().setFormat(DateTimeFormat.getFormat("dd/MM/yyyy"));
dateFondationChp.getMessages().setInvalidText("La valeur saisie n'est pas une date valide. La date doit être au format «jj/mm/aaaa».");
fieldSetIdentite.add(dateFondationChp);
identificationOnglet.add(fieldSetIdentite);
// Fieldset ADRESSE
LayoutContainer principalFdAdresse = new LayoutContainer();
principalFdAdresse.setLayout(new ColumnLayout());
LayoutContainer gaucheFdAdresse = new LayoutContainer();
layoutGauche = new FormLayout();
layoutGauche.setLabelAlign(LabelAlign.LEFT);
layoutGauche.setLabelWidth(100);
layoutGauche.setPadding(0);
gaucheFdAdresse.setLayout(layoutGauche);
LayoutContainer droiteFdAdresse = new LayoutContainer();
layoutDroite = new FormLayout();
layoutDroite.setLabelAlign(LabelAlign.LEFT);
layoutDroite.setLabelWidth(100);
layoutDroite.setPadding(0);
droiteFdAdresse.setLayout(layoutDroite);
FieldSet fieldSetAdresse = new FieldSet();
fieldSetAdresse.setHeading("Adresse");
fieldSetAdresse.setCollapsible(true);
layoutFieldset = new FormLayout();
layoutFieldset.setLabelWidth(100);
layoutFieldset.setPadding(4);
fieldSetAdresse.setLayout(layoutFieldset);
TextField<String> adrChp = new TextField<String>();
adrChp.setFieldLabel("Adresse");
fieldSetAdresse.add(adrChp, new FormData(550, 0));
TextField<String> cpChp = new TextField<String>();
cpChp.setFieldLabel("Code postal");
gaucheFdAdresse.add(cpChp);
TextField<String> villeChp = new TextField<String>();
villeChp.setFieldLabel("Ville");
droiteFdAdresse.add(villeChp);
TextField<String> regionChp = new TextField<String>();
regionChp.setFieldLabel("Région");
gaucheFdAdresse.add(regionChp);
TextField<String> paysChp = new TextField<String>();
paysChp.setFieldLabel("Pays");
droiteFdAdresse.add(paysChp);
principalFdAdresse.add(gaucheFdAdresse, new ColumnData(.5));
principalFdAdresse.add(droiteFdAdresse, new ColumnData(.5));
fieldSetAdresse.add(principalFdAdresse);
identificationOnglet.add(fieldSetAdresse);
// Fieldset TÉLÉPHONE et EMAIL
LayoutContainer principalFdTelMail = new LayoutContainer();
principalFdTelMail.setLayout(new ColumnLayout());
LayoutContainer gaucheFdTelMail = new LayoutContainer();
layoutGauche = new FormLayout();
layoutGauche.setLabelAlign(LabelAlign.LEFT);
layoutGauche.setLabelWidth(100);
layoutGauche.setPadding(0);
gaucheFdTelMail.setLayout(layoutGauche);
LayoutContainer droiteFdTelMail = new LayoutContainer();
layoutDroite = new FormLayout();
layoutDroite.setLabelAlign(LabelAlign.LEFT);
layoutDroite.setLabelWidth(100);
layoutDroite.setPadding(0);
droiteFdTelMail.setLayout(layoutDroite);
FieldSet fieldSetTelMail = new FieldSet();
fieldSetTelMail.setHeading("Communication");
fieldSetTelMail.setCollapsible(true);
layoutFieldset = new FormLayout();
layoutFieldset.setLabelWidth(200);
layoutFieldset.setPadding(4);
fieldSetTelMail.setLayout(layoutFieldset);
TextField<String> telChp = new TextField<String>();
telChp.setFieldLabel("Téléphone");
gaucheFdTelMail.add(telChp);
TextField<String> faxChp = new TextField<String>();
faxChp.setFieldLabel("Fax");
droiteFdTelMail.add(faxChp);
TextField<String> emailChp = new TextField<String>();
emailChp.setFieldLabel("Courriel");
emailChp.setToolTip("Saisir le courriel de l'organisation, pas de courriel individuel. Ex. : accueil@organisation.org");
gaucheFdTelMail.add(emailChp);
TextField<String> urlChp = new TextField<String>();
urlChp.setFieldLabel("Site web");
droiteFdTelMail.add(urlChp);
principalFdTelMail.add(gaucheFdTelMail, new ColumnData(.5));
principalFdTelMail.add(droiteFdTelMail, new ColumnData(.5));
fieldSetTelMail.add(principalFdTelMail);
identificationOnglet.add(fieldSetTelMail);
onglets.add(identificationOnglet);
//+-----------------------------------------------------------------------------------------------------------+
// Onlget formulaire PERSONNEL
TabItem personnelOnglet = new TabItem();
personnelOnglet.setText("Personnel");
FormLayout personnelOngletLayout = new FormLayout();
personnelOngletLayout.setLabelWidth(400);
personnelOnglet.setLayout(personnelOngletLayout);
TextField<String> nbreTotalPersonneStructureChp = new TextField<String>();
nbreTotalPersonneStructureChp.setFieldLabel("Nombre de personne travaillant dans l'institution");
personnelOnglet.add(nbreTotalPersonneStructureChp);
personnelOnglet.add(this.creerGrillePersonnel());
onglets.add(personnelOnglet);
//+-----------------------------------------------------------------------------------------------------------+
// Onlget formulaire CONSERVATION
TabItem conservationOnglet = new TabItem();
conservationOnglet.setText("Conservation");
conservationOnglet.setLayout(new FormLayout());
onglets.add(conservationOnglet);
//+-----------------------------------------------------------------------------------------------------------+
// Onlget formulaire VALORISATION
TabItem valorisationOnglet = new TabItem();
valorisationOnglet.setText("Valorisation");
valorisationOnglet.setLayout(new FormLayout());
onglets.add(valorisationOnglet);
//+-----------------------------------------------------------------------------------------------------------+
// Gestion du FORMULAIRE GÉNÉRAL
// Ajout des onglets
panel.add(onglets);
// Ajout des boutons au panneau formulaire
Button annulerBtn = new Button("Annuler");
panel.addButton(annulerBtn);
Button validerBtn = new Button("Valider");
panel.addButton(validerBtn);
// Ajout du panneau Formulaire à la disposition générale
add(panel);
}
private ContentPanel creerGrillePersonnel() {
List<Personne> personnes = new ArrayList<Personne>();
personnes.add(new Personne(Valeur.FONCTION_DIRECTEUR));
personnes.add(new Personne(Valeur.FONCTION_CONSERVATEUR));
List<ColumnConfig> configs = new ArrayList<ColumnConfig>();
CheckBoxSelectionModel<Personne> sm = new CheckBoxSelectionModel<Personne>();
configs.add(sm.getColumn());
ColumnConfig column = new ColumnConfig();
column.setId("ce_truk_fonction");
column.setHeader("Fonction");
column.setWidth(100);
configs.add(column);
column = new ColumnConfig();
column.setId("prenom");
column.setHeader("Prénom");
column.setWidth(100);
configs.add(column);
column = new ColumnConfig();
column.setId("nom");
column.setHeader("Nom");
column.setWidth(75);
TextField<String> text = new TextField<String>();
text.setAllowBlank(false);
text.setAutoValidate(true);
column.setEditor(new CellEditor(text));
configs.add(column);
column = new ColumnConfig("tel", "Téléphone", 100);
configs.add(column);
column = new ColumnConfig("fax", "Fax", 100);
configs.add(column);
column = new ColumnConfig("tps_w", "Temps travail", 0);
column.setNumberFormat(NumberFormat.getDecimalFormat());
column.setEditor(new CellEditor(new NumberField()));
configs.add(column);
column = new ColumnConfig("specialites", "Spécialités botaniques", 200);
configs.add(column);
CheckColumnConfig checkColumn = new CheckColumnConfig("mark_contact", "Contact ?", 55);
configs.add(checkColumn);
ContentPanel cp = new ContentPanel();
cp.setHeading("Personnes travaillant sur les collections");
cp.setFrame(true);
cp.setIconStyle("icon-table");
cp.setLayout(new FitLayout());
ToolBar toolBar = new ToolBar();
toolBar.add(new TextToolItem("Ajouter", "icon-add"));
toolBar.add(new SeparatorToolItem());
toolBar.add(new TextToolItem("Supprimer", "icon-delete"));
cp.setTopComponent(toolBar);
ListStore<Personne> store = new ListStore<Personne>();
store.add(personnes);
ColumnModel cm = new ColumnModel(configs);
EditorGrid<Personne> grid = new EditorGrid<Personne>(store, cm);
grid.setBorders(true);
grid.setSelectionModel(sm);
grid.addPlugin(sm);
//grid.setAutoExpandColumn("nom");
grid.addPlugin(checkColumn);
grid.setHeight(400);
cp.add(grid);
return cp;
}
public void rafraichir(Object nouvelleDonnees) {
if (nouvelleDonnees instanceof ValeurListe) {
ValeurListe listeValeurs = (ValeurListe) nouvelleDonnees;
List<Valeur> liste = new ArrayList<Valeur>();
for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
liste.add(listeValeurs.get(it.next()));
}
// Test pour savoir si la liste contient des éléments
if (liste.size() > 0) {
Configuration config = (Configuration) Registry.get(RegistreId.CONFIG);
if (listeValeurs.getId().equals(config.getListeId("stpr"))) {
GWT.log("La liste #"+listeValeurs.getId()+" a été reçue!", null);
magazinLstpr.removeAll();
magazinLstpr.add(liste);
comboLstpr.setStore(magazinLstpr);
}
if (listeValeurs.getId().equals(config.getListeId("stpu"))) {
GWT.log("La liste #"+listeValeurs.getId()+" a été reçue!", null);
magazinLstpu.removeAll();
magazinLstpu.add(liste);
comboLstpu.setStore(magazinLstpu);
}
} else {
GWT.log("La liste #"+listeValeurs.getId()+" ne contient aucune valeurs!", null);
}
}
}
}