Rev 1083 | Rev 1172 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues.collection;
import java.util.ArrayList;
import org.tela_botanica.client.ComposantClass;
import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.composants.ChampCaseACocher;
import org.tela_botanica.client.composants.ChampComboBoxListeValeurs;
import org.tela_botanica.client.composants.ChampMultiValeurs;
import org.tela_botanica.client.composants.ConteneurMultiChamps;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.ValeurListe;
import org.tela_botanica.client.modeles.collection.Collection;
import org.tela_botanica.client.modeles.collection.CollectionListe;
import org.tela_botanica.client.modeles.projet.Projet;
import org.tela_botanica.client.modeles.projet.ProjetListe;
import org.tela_botanica.client.modeles.structure.Structure;
import org.tela_botanica.client.modeles.structure.StructureListe;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.vues.Formulaire;
import org.tela_botanica.client.vues.FormulaireOnglet;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.util.Margins;
import com.extjs.gxt.ui.client.widget.Text;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.Field;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.form.HiddenField;
import com.extjs.gxt.ui.client.widget.form.NumberField;
import com.extjs.gxt.ui.client.widget.form.TextArea;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.form.Validator;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.HBoxLayoutData;
import com.google.gwt.i18n.client.NumberFormat;
public class CollectionFormGeneral extends FormulaireOnglet implements Rafraichissable {
public static final String ID = "general";
private Collection collection = null;
private Collection collectionCollectee = null;
private HiddenField<String> idCollectionChp = null;
private ComboBox<Projet> projetsCombo = null;
private ComboBox<Structure> structuresCombo = null;
private ComboBox<Collection> collectionsCombo = null;
private ChampCaseACocher periodeConstitutionChp = null;
private ChampComboBoxListeValeurs groupementPrincipeCombo = null;
private ChampMultiValeurs lieuCouvertureChp = null;
private ChampComboBoxListeValeurs specimenTypeCombo = null;
private ChampComboBoxListeValeurs precisionTypeNbreCombo = null;
private NumberField nbreTypeChp = null;
private ChampComboBoxListeValeurs classementSpecimenTypeCombo = null;
private ChampComboBoxListeValeurs typeDepotCombo = null;
private TextField<String> coteChp = null;
private ChampMultiValeurs idAlternatifsChp = null;
private ChampMultiValeurs nomsAlternatifsChp = null;
private ChampMultiValeurs codesAlternatifsChp = null;
private TextArea descriptionSpecialisteChp = null;
private TextArea descriptionChp = null;
private TextArea historiqueChp = null;
private ChampMultiValeurs urlsChp = null;
private ChampComboBoxListeValeurs butRealisationCombo = null;
public CollectionFormGeneral(Formulaire formulaireCourrant) {
initialiserOnglet(formulaireCourrant);
setId(ID);
setText(Mediateur.i18nC.collectionGeneral());
creerChampsCache();
creerFieldsetLiaison();
creerFieldsetAdministratif();
creerFieldsetDescription();
creerFieldsetCouverture();
creerFieldsetType();
}
private void initialiserCollection() {
collection = ((CollectionForm) formulaire).collection;
collectionCollectee = ((CollectionForm) formulaire).collectionCollectee;
}
private void creerChampsCache() {
// Champs cachés
idCollectionChp = new HiddenField<String>();
this.add(idCollectionChp);
}
private void creerFieldsetLiaison() {
FieldSet liaisonFieldSet = new FieldSet();
liaisonFieldSet.setHeading(i18nC.liaisonTitreCollection());
liaisonFieldSet.setCollapsible(true);
liaisonFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
projetsCombo = new ComboBox<Projet>();
projetsCombo.setTabIndex(tabIndex++);
projetsCombo.setFieldLabel(i18nC.projetChamp());
projetsCombo.setDisplayField("nom");
projetsCombo.setForceSelection(true);
projetsCombo.setValidator(new Validator() {
@Override
public String validate(Field<?> field, String value) {
String retour = null;
if (field.getRawValue().equals("")) {
field.setValue(null);
} else if (projetsCombo.getStore().findModel("nom", field.getRawValue()) == null) {
String contenuBrut = field.getRawValue();
field.setValue(null);
field.setRawValue(contenuBrut);
retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
}
return retour;
}
});
projetsCombo.setTriggerAction(TriggerAction.ALL);
projetsCombo.setStore(new ListStore<Projet>());
projetsCombo.addStyleName(ComposantClass.OBLIGATOIRE);
projetsCombo.addListener(Events.Valid, Formulaire.creerEcouteurChampObligatoire());
liaisonFieldSet.add(projetsCombo, new FormData(450, 0));
mediateur.selectionnerProjet(this, null);
structuresCombo = new ComboBox<Structure>();
structuresCombo.setTabIndex(tabIndex++);
structuresCombo.setFieldLabel(i18nC.lienStructureCollection());
structuresCombo.setDisplayField("nom");
structuresCombo.setForceSelection(true);
structuresCombo.setValidator(new Validator() {
@Override
public String validate(Field<?> field, String value) {
String retour = null;
if (field.getRawValue().equals("")) {
field.setValue(null);
} else if (structuresCombo.getStore().findModel("nom", field.getRawValue()) == null) {
String contenuBrut = field.getRawValue();
field.setValue(null);
field.setRawValue(contenuBrut);
retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
}
return retour;
}
});
structuresCombo.setTriggerAction(TriggerAction.ALL);
structuresCombo.setStore(new ListStore<Structure>());
liaisonFieldSet.add(structuresCombo, new FormData(450, 0));
mediateur.selectionnerStructureParProjet(this, null);
collectionsCombo = new ComboBox<Collection>();
collectionsCombo.setTabIndex(tabIndex++);
collectionsCombo.setFieldLabel(i18nC.lienMereCollection());
collectionsCombo.setDisplayField("nom");
collectionsCombo.setForceSelection(true);
collectionsCombo.setValidator(new Validator() {
@Override
public String validate(Field<?> field, String value) {
String retour = null;
if (field.getRawValue().equals("")) {
field.setValue(null);
} else if (collectionsCombo.getStore().findModel("nom", field.getRawValue()) == null) {
String contenuBrut = field.getRawValue();
field.setValue(null);
field.setRawValue(contenuBrut);
retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
}
return retour;
}
});
collectionsCombo.setTriggerAction(TriggerAction.ALL);
collectionsCombo.setStore(new ListStore<Collection>());
liaisonFieldSet.add(collectionsCombo, new FormData(450, 0));
mediateur.selectionnerCollectionParProjet(this, null);
this.add(liaisonFieldSet);
}
private void creerFieldsetAdministratif() {
// Fieldset ADMINISTRATIF
FieldSet administratifFieldSet = new FieldSet();
administratifFieldSet.setHeading(i18nC.collectionGeneralTitre());
administratifFieldSet.setCollapsible(true);
administratifFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
typeDepotCombo = new ChampComboBoxListeValeurs(i18nC.typeDepot(), "typeDepot", tabIndex++);
administratifFieldSet.add(typeDepotCombo);
coteChp = new TextField<String>();
coteChp.setTabIndex(tabIndex++);
coteChp.setFieldLabel(i18nC.cote());
administratifFieldSet.add(coteChp, new FormData(450, 0));
idAlternatifsChp = new ChampMultiValeurs(i18nC.idAlternatifCollection());
administratifFieldSet.add(idAlternatifsChp);
nomsAlternatifsChp = new ChampMultiValeurs(i18nC.intituleAlternatifCollection());
administratifFieldSet.add(nomsAlternatifsChp);
codesAlternatifsChp = new ChampMultiValeurs(i18nC.codeAlternatifCollection());
administratifFieldSet.add(codesAlternatifsChp);
this.add(administratifFieldSet);
}
private void creerFieldsetDescription() {
// Fieldset DESCRIPTION
FieldSet descriptionFieldSet = new FieldSet();
descriptionFieldSet.setHeading(i18nC.collectionDescriptionTitre());
descriptionFieldSet.setCollapsible(true);
descriptionFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
descriptionChp = new TextArea();
descriptionChp.setFieldLabel(i18nC.description());
descriptionFieldSet.add(descriptionChp, new FormData(550, 0));
descriptionSpecialisteChp = new TextArea();
descriptionSpecialisteChp.setFieldLabel(i18nC.descriptionSpecialiste());
descriptionFieldSet.add(descriptionSpecialisteChp, new FormData(550, 0));
historiqueChp = new TextArea();
historiqueChp.setFieldLabel(i18nC.historique());
descriptionFieldSet.add(historiqueChp, new FormData(550, 0));
urlsChp = new ChampMultiValeurs(i18nC.urlsCollection());
descriptionFieldSet.add(urlsChp);
this.add(descriptionFieldSet);
}
private void creerFieldsetCouverture() {
FieldSet couvertureFieldSet = new FieldSet();
couvertureFieldSet.setHeading("Couvertures");
couvertureFieldSet.setCollapsible(true);
couvertureFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
periodeConstitutionChp = new ChampCaseACocher(i18nC.periodeConstitution(), "siecleNaturaliste", false);
couvertureFieldSet.add(periodeConstitutionChp);
groupementPrincipeCombo = new ChampComboBoxListeValeurs(i18nC.groupementPrincipeCollection(), "groupementPrincipe", tabIndex++);
groupementPrincipeCombo.setToolTip(i18nC.groupementPrincipeCollectionInfo());
couvertureFieldSet.add(groupementPrincipeCombo);
butRealisationCombo = new ChampComboBoxListeValeurs(i18nC.butCollection(), "realisationBut", tabIndex++);
couvertureFieldSet.add(butRealisationCombo);
lieuCouvertureChp = new ChampMultiValeurs(i18nC.lieuCouvertureCollection());
couvertureFieldSet.add(lieuCouvertureChp);
this.add(couvertureFieldSet);
}
private void creerFieldsetType() {
FieldSet typeFieldSet = new FieldSet();
typeFieldSet.setHeading("Spécimens «types»");
typeFieldSet.setCollapsible(true);
typeFieldSet.setLayout(Formulaire.creerFormLayout(largeurLabelDefaut, alignementLabelDefaut));
specimenTypeCombo = new ChampComboBoxListeValeurs(i18nC.specimenTypeCollection(), "onpi", tabIndex++);
typeFieldSet.add(specimenTypeCombo);
ConteneurMultiChamps nbreTypeConteneur = new ConteneurMultiChamps(i18nC.nbreSpecimenTypeCollection());
nbreTypeChp = new NumberField();
nbreTypeChp.setFormat(NumberFormat.getFormat("#"));
nbreTypeConteneur.ajouterChamp(nbreTypeChp, new HBoxLayoutData(new Margins(0, 20, 0, 0)));
precisionTypeNbreCombo = new ChampComboBoxListeValeurs(null, "ea");
precisionTypeNbreCombo.setTrie("id_valeur");
precisionTypeNbreCombo.setEmptyText(i18nC.precisionNbreSpecimenTypeCollectionChpVide());
nbreTypeConteneur.ajouterChamp(precisionTypeNbreCombo);
typeFieldSet.add(nbreTypeConteneur);
classementSpecimenTypeCombo = new ChampComboBoxListeValeurs(i18nC.classementSpecimenTypeCollection(), "typeClassement", tabIndex++);
typeFieldSet.add(classementSpecimenTypeCombo);
Text infoType = new Text(i18nC.specimenTypeCollectionInfo());
typeFieldSet.add(infoType);
this.add(typeFieldSet);
}
public void peupler() {
initialiserCollection();
if (collection != null) {
idCollectionChp.setValue(collection.getId());
setValeurComboProjets();
setValeurComboStructures();
setValeurComboCollections();
typeDepotCombo.peupler(collection.getTypeDepot());
coteChp.setValue(collection.getCote());
idAlternatifsChp.peupler(collection.getIdAlternatif());
nomsAlternatifsChp.peupler(collection.getNomAlternatif());
codesAlternatifsChp.peupler(collection.getCode());
descriptionChp.setValue(collection.getDescription());
descriptionSpecialisteChp.setValue(collection.getDescriptionSpecialiste());
historiqueChp.setValue(collection.getHistorique());
urlsChp.peupler(collection.getUrls());
periodeConstitutionChp.peupler(collection.getPeriodeConstitution());
groupementPrincipeCombo.peupler(collection.getGroupementPrincipe());
butRealisationCombo.peupler(collection.getGroupementBut());
lieuCouvertureChp.peupler(collection.getCouvertureLieu());
specimenTypeCombo.peupler(collection.getSpecimenType());
nbreTypeChp.setValue((collection.getSpecimenTypeNbre().equals("") ? 0 : Integer.parseInt(collection.getSpecimenTypeNbre())));
precisionTypeNbreCombo.peupler(collection.getSpecimenTypeNbrePrecision());
classementSpecimenTypeCombo.peupler(collection.getSpecimenTypeClassement());
}
}
public ArrayList<String> verifier() {
ArrayList<String> messages = new ArrayList<String>();
if (projetsCombo.getValue() == null || !projetsCombo.isValid()) {
messages.add(i18nM.selectionObligatoire(i18nC.articleUn()+" "+i18nC.projetSingulier(), i18nC.articleLa()+" "+i18nC.collectionSingulier()));
}
return messages;
}
public void collecter() {
initialiserCollection();
if (etreAccede()) {
collectionCollectee.setId(idCollectionChp.getValue());
collectionCollectee.setIdProjet(getValeurComboProjets());
collectionCollectee.setIdStructure(getValeurComboStructures());
collectionCollectee.setCollectionMereId(getValeurComboCollections());
collectionCollectee.setTypeDepot(typeDepotCombo.getValeur());
collectionCollectee.setCote(coteChp.getValue());
collectionCollectee.setIdAlternatif(idAlternatifsChp.getValeurs());
collectionCollectee.setNomAlternatif(nomsAlternatifsChp.getValeurs());
collectionCollectee.setCode(codesAlternatifsChp.getValeurs());
collectionCollectee.setDescription(descriptionChp.getValue());
collectionCollectee.setDescriptionSpecialiste(descriptionSpecialisteChp.getValue());
collectionCollectee.setHistorique(historiqueChp.getValue());
collectionCollectee.setUrls(urlsChp.getValeurs());
collectionCollectee.setPeriodeConstitution(periodeConstitutionChp.getValeur());
collectionCollectee.setGroupementPrincipe(groupementPrincipeCombo.getValeur());
collectionCollectee.setGroupementBut(butRealisationCombo.getValeur());
collectionCollectee.setCouvertureLieu(lieuCouvertureChp.getValeurs());
collectionCollectee.setSpecimenType(specimenTypeCombo.getValeur());
if (nbreTypeChp.getValue() != null) {
collectionCollectee.setSpecimenTypeNbre(nbreTypeChp.getValue().toString());
}
collectionCollectee.setSpecimenTypeNbrePrecision(precisionTypeNbreCombo.getValeur());
collectionCollectee.setSpecimenTypeClassement(classementSpecimenTypeCombo.getValeur());
}
}
private String getValeurComboProjets() {
String valeur = "";
if (projetsCombo.getValue() != null) {
valeur = projetsCombo.getValue().getId();
}
return valeur;
}
private void setValeurComboProjets() {
if (projetsCombo.getStore() != null && collection != null) {
projetsCombo.setValue(projetsCombo.getStore().findModel("id_projet", collection.getIdProjet()));
}
}
private String getValeurComboStructures() {
String valeur = "";
if (structuresCombo.getValue() != null) {
valeur = structuresCombo.getValue().getId();
}
return valeur;
}
private void setValeurComboStructures() {
if (structuresCombo.getStore() != null && collection != null) {
structuresCombo.setValue(structuresCombo.getStore().findModel("id_structure", collection.getIdStructure()));
}
}
private String getValeurComboCollections() {
String valeur = "";
if (collectionsCombo.getValue() != null) {
valeur = collectionsCombo.getValue().getId();
}
return valeur;
}
private void setValeurComboCollections() {
if (collectionsCombo.getStore() != null && collection != null) {
collectionsCombo.setValue(collectionsCombo.getStore().findModel("id_collection", collection.getCollectionMereId()));
}
}
public void rafraichir(Object nouvellesDonnees) {
if (nouvellesDonnees instanceof ProjetListe) {
ProjetListe projets = (ProjetListe) nouvellesDonnees;
Formulaire.rafraichirComboBox(projets, projetsCombo);
setValeurComboProjets();
} else if (nouvellesDonnees instanceof StructureListe) {
StructureListe structures = (StructureListe) nouvellesDonnees;
Formulaire.rafraichirComboBox(structures, structuresCombo);
setValeurComboStructures();
} else if (nouvellesDonnees instanceof CollectionListe) {
CollectionListe collections = (CollectionListe) nouvellesDonnees;
Formulaire.rafraichirComboBox(collections, collectionsCombo);
setValeurComboCollections();
} else if (nouvellesDonnees instanceof ValeurListe) {
ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
rafraichirValeurListe(listeValeurs);
} else {
Debug.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()));
}
}
private void rafraichirValeurListe(ValeurListe listeValeurs) {
if (listeValeurs.getId().equals(config.getListeId("typeDepot"))) {
Formulaire.rafraichirComboBox(listeValeurs, typeDepotCombo);
} else {
Debug.log("Gestion de la liste "+listeValeurs.getId()+" non implémenté!");
}
}
}