10,66 → 10,35 |
import org.tela_botanica.client.composants.ChampComboBoxListeValeurs; |
import org.tela_botanica.client.composants.ChampMultiValeursMultiTypes; |
import org.tela_botanica.client.composants.ChampSliderPourcentage; |
import org.tela_botanica.client.composants.InfoLogger; |
import org.tela_botanica.client.composants.ChampNombre; |
import org.tela_botanica.client.images.Images; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.InterneValeur; |
import org.tela_botanica.client.modeles.Valeur; |
import org.tela_botanica.client.modeles.ValeurListe; |
import org.tela_botanica.client.modeles.aDonnee; |
import org.tela_botanica.client.modeles.collection.Collection; |
import org.tela_botanica.client.modeles.collection.CollectionBotanique; |
import org.tela_botanica.client.modeles.collection.UniteBase; |
import org.tela_botanica.client.modeles.collection.UniteRangement; |
import org.tela_botanica.client.util.Debug; |
import org.tela_botanica.client.util.Pattern; |
import org.tela_botanica.client.util.UtilNombre; |
import org.tela_botanica.client.util.UtilString; |
import org.tela_botanica.client.vues.Formulaire; |
import org.tela_botanica.client.vues.FormulaireOnglet; |
|
import com.extjs.gxt.ui.client.Style.Scroll; |
import com.extjs.gxt.ui.client.event.BaseEvent; |
import com.extjs.gxt.ui.client.event.ButtonEvent; |
import com.extjs.gxt.ui.client.event.ComponentEvent; |
import com.extjs.gxt.ui.client.event.Events; |
import com.extjs.gxt.ui.client.event.FieldEvent; |
import com.extjs.gxt.ui.client.event.Listener; |
import com.extjs.gxt.ui.client.event.MessageBoxEvent; |
import com.extjs.gxt.ui.client.event.SelectionListener; |
import com.extjs.gxt.ui.client.store.ListStore; |
import com.extjs.gxt.ui.client.widget.ContentPanel; |
import com.extjs.gxt.ui.client.widget.Info; |
import com.extjs.gxt.ui.client.widget.MessageBox; |
import com.extjs.gxt.ui.client.widget.Label; |
import com.extjs.gxt.ui.client.widget.Text; |
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.FieldSet; |
import com.extjs.gxt.ui.client.widget.form.LabelField; |
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.ComboBox.TriggerAction; |
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign; |
import com.extjs.gxt.ui.client.widget.grid.AggregationRowConfig; |
import com.extjs.gxt.ui.client.widget.grid.CellEditor; |
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; |
import com.extjs.gxt.ui.client.widget.grid.ColumnData; |
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.grid.GridCellRenderer; |
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel; |
import com.extjs.gxt.ui.client.widget.grid.HeaderGroupConfig; |
import com.extjs.gxt.ui.client.widget.grid.SummaryType; |
import com.extjs.gxt.ui.client.widget.layout.FitLayout; |
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.ToolBar; |
import com.google.gwt.event.dom.client.KeyCodes; |
import com.google.gwt.i18n.client.NumberFormat; |
import com.google.gwt.user.client.ui.HorizontalPanel; |
|
public class CollectionFormDescription extends FormulaireOnglet implements Rafraichissable { |
|
103,6 → 72,11 |
private Text labelPresentationDegradationChp = null; |
private ChampNombre planchesHerbier = null; |
private ChampNombre nbEspeces = null; |
private ChampNombre nbCartonsHerbier = null; |
private TextField<String> cartonsHerbierFormat = null; |
private ChampNombre nbLiasses = null; |
private TextField<String> liassesFormat = null; |
private TextArea autresUnitesRangement = null; |
|
public CollectionFormDescription(Formulaire formulaireCourrant) { |
initialiserOnglet(formulaireCourrant); |
153,301 → 127,7 |
precisionStore.add(new InterneValeur(UniteRangement.COMPTE_EXACT, Mediateur.i18nC.precisionExact())); |
} |
} |
|
private static String getPrecisionNom(String precisionAbr) { |
String precision = ""; |
if (!precisionAbr.equals("NULL")) { |
creerStorePrecision(); |
InterneValeur precisionValeur = precisionStore.findModel("abr", precisionAbr); |
if (precisionValeur != null && !precisionValeur.getNom().equals("NULL")) { |
precision = precisionValeur.getNom(); |
} |
} |
return precision; |
} |
|
private static String getPrecisionAbr(String precisionNom) { |
String precision = ""; |
if (!precisionNom.equals("NULL")) { |
creerStorePrecision(); |
InterneValeur precisionValeur = precisionStore.findModel("nom", precisionNom); |
if (precisionValeur != null) { |
precision = precisionValeur.getAbr(); |
} |
} |
return precision; |
} |
|
private ComboBox<InterneValeur> getChampPrecision() { |
ComboBox<InterneValeur> precisionCombo = new ComboBox<InterneValeur>(); |
precisionCombo.setForceSelection(true); |
precisionCombo.setTriggerAction(TriggerAction.ALL); |
precisionCombo.setDisplayField("nom"); |
precisionCombo.setStore(precisionStore); |
precisionCombo.setEditable(false); |
return precisionCombo; |
} |
|
/** |
* La classe NumberField est sujette à un bug qui empeche son |
* édition dans firefox, il faut donc la surcharger |
**/ |
private NumberField creerChampNombre() { |
ChampNombre champNombre = new ChampNombre(); |
return champNombre; |
} |
|
private ContentPanel creerUniteRangement() { |
ContentPanel panneauGrille = creerPanneauContenantGrille(i18nC.collectionUniteRangementTitre()); |
|
uniteRangementGrille = creerGrilleUniteRangement(); |
mediateur.obtenirListeValeurEtRafraichir(this, "typeUniteRangement", null); |
panneauGrille.add(uniteRangementGrille); |
|
ToolBar barreOutils = creerBarreOutilsGrilleUniteRangement(); |
panneauGrille.setTopComponent(barreOutils); |
|
return panneauGrille; |
} |
|
private ContentPanel creerPanneauContenantGrille(String titre) { |
ContentPanel panneau = new ContentPanel(); |
panneau.setHeadingHtml(titre); |
panneau.setIcon(Images.ICONES.table()); |
panneau.setLayout(new FitLayout()); |
panneau.setFrame(true); |
panneau.setSize(800, 200); |
panneau.setScrollMode(Scroll.NONE); |
panneau.setCollapsible(true); |
panneau.setStyleAttribute("margin", "5px 0"); |
|
return panneau; |
} |
|
private EditorGrid<UniteRangement> creerGrilleUniteRangement() { |
ListStore<UniteRangement> storeGrille = new ListStore<UniteRangement>(); |
|
List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>(); |
colonnes.add(new ColumnConfig("type", i18nC.collectionUniteType(), 150)); |
|
NumberField champNombre = creerChampNombre(); |
champNombre.setFormat(NumberFormat.getFormat("#")); |
ColumnConfig nombreColonne = new ColumnConfig("nombre", i18nC.collectionUniteNbre(), 50); |
nombreColonne.setEditor(new CellEditor(champNombre)); |
nombreColonne.setNumberFormat(NumberFormat.getFormat("#")); |
colonnes.add(nombreColonne); |
|
CellEditor editeurPrecision = new CellEditor(getChampPrecision()) { |
@Override |
public Object preProcessValue(Object valeur) { |
InterneValeur retour = null; |
if (valeur != null ) { |
if (precisionStore.findModel("nom", valeur.toString()) != null) { |
retour = precisionStore.findModel("nom", valeur.toString()); |
} else if (precisionStore.findModel("abr", valeur.toString()) != null) { |
retour = precisionStore.findModel("abr", valeur.toString()); |
} |
} |
return retour; |
} |
|
@Override |
public Object postProcessValue(Object valeur) { |
String retour = null; |
if (valeur != null ) { |
if (valeur instanceof InterneValeur) { |
InterneValeur valeurInterne = (InterneValeur) valeur; |
retour = valeurInterne.getNom(); |
} |
} |
return retour; |
} |
}; |
|
ColumnConfig precisionColonne = new ColumnConfig("precision", i18nC.collectionUnitePrecision(), 50); |
precisionColonne.setEditor(editeurPrecision); |
colonnes.add(precisionColonne); |
|
TextField<String> formatChp = new TextField<String>(); |
ColumnConfig formatColonne = new ColumnConfig("format", i18nC.collectionUniteFormat(), 100); |
formatColonne.setEditor(new CellEditor(formatChp)); |
colonnes.add(formatColonne); |
|
GridSelectionModel<UniteRangement> modeleDeSelection = new GridSelectionModel<UniteRangement>(); |
ColumnModel modeleDeColonnes = new ColumnModel(colonnes); |
|
AggregationRowConfig<UniteBase> total = new AggregationRowConfig<UniteBase>(); |
total.setHtml("type", i18nC.total()); |
total.setSummaryType("nombre", SummaryType.SUM); |
total.setSummaryFormat("nombre", NumberFormat.getFormat("#")); |
modeleDeColonnes.addAggregationRow(total); |
|
EditorGrid<UniteRangement> grilleUniteRangement = new EditorGrid<UniteRangement>(storeGrille, modeleDeColonnes); |
grilleUniteRangement.setHeight(300); |
grilleUniteRangement.setBorders(true); |
grilleUniteRangement.setSelectionModel(modeleDeSelection); |
grilleUniteRangement.getView().setForceFit(true); |
grilleUniteRangement.getView().setAutoFill(true); |
grilleUniteRangement.setAutoExpandColumn("type"); |
grilleUniteRangement.setStripeRows(true); |
grilleUniteRangement.setTrackMouseOver(true); |
|
return grilleUniteRangement; |
} |
|
private String collecterGrilleUniteRangement() { |
String truk = ""; |
int nbreUnite = uniteRangementGrille.getStore().getCount(); |
for (int i = 0; i < nbreUnite; i++) { |
UniteRangement unite = uniteRangementGrille.getStore().getAt(i); |
if (unite.getTypeAutre()) { |
truk += unite.getType(); |
} else { |
truk += unite.getId(); |
} |
truk += aDonnee.SEPARATEUR_TYPE_VALEUR; |
truk += UtilNombre.formaterEnEntier(unite.getNombre())+aDonnee.SEPARATEUR_DONNEES; |
truk += getPrecisionAbr(unite.getPrecision())+aDonnee.SEPARATEUR_DONNEES; |
truk += unite.getFormat(); |
truk += (i == (nbreUnite - 1)) ? "" : aDonnee.SEPARATEUR_VALEURS; |
|
if (truk.matches("^"+aDonnee.SEPARATEUR_DONNEES)) { |
truk = truk.replaceFirst("^"+aDonnee.SEPARATEUR_DONNEES, ""); |
} |
|
if (truk.matches("^"+aDonnee.SEPARATEUR_TYPE_VALEUR)) { |
truk = truk.replaceFirst("^"+aDonnee.SEPARATEUR_TYPE_VALEUR, ""); |
} |
} |
return truk; |
} |
|
private void peuplerGrilleUniteRangement(String valeurTruk) { |
if (!UtilString.isEmpty(valeurTruk)) { |
HashMap<String,UniteRangement> unitesEnregistrees = parserValeurUniteRangement(valeurTruk); |
|
ArrayList<UniteRangement> listeUniteMaj = new ArrayList<UniteRangement>(); |
int nbreUnite = uniteRangementGrille.getStore().getCount(); |
for (int i = 0; i < nbreUnite; i++) { |
UniteRangement uniteDansGrille = uniteRangementGrille.getStore().getAt(i); |
UniteRangement uniteEnregistree = unitesEnregistrees.get(uniteDansGrille.getId()); |
|
if (uniteEnregistree != null) { |
uniteEnregistree.setType(uniteDansGrille.getType()); |
listeUniteMaj.add(uniteEnregistree); |
} else { |
listeUniteMaj.add(uniteDansGrille); |
} |
} |
|
Iterator<String> it = unitesEnregistrees.keySet().iterator(); |
while (it.hasNext()) { |
String cle = it.next(); |
if (cle.matches(aDonnee.TYPE_AUTRE+aDonnee.SEPARATEUR_TYPE_VALEUR+"[a-zA-Z0-9]+")) { |
UniteRangement uniteAutreEnregistree = unitesEnregistrees.get(cle); |
listeUniteMaj.add(uniteAutreEnregistree); |
} |
} |
|
uniteRangementGrille.getStore().removeAll(); |
uniteRangementGrille.getStore().add(listeUniteMaj); |
layout(); |
} |
} |
|
public static HashMap<String,UniteRangement> parserValeurUniteRangement(String valeurTruk) { |
HashMap<String,UniteRangement> unitesEnregistrees = new HashMap<String,UniteRangement>(); |
if (!UtilString.isEmpty(valeurTruk)) { |
String[] unites = valeurTruk.split(Pattern.quote(aDonnee.SEPARATEUR_VALEURS)); |
for (int i = 0; i < unites.length; i++) { |
String[] uniteTypeIdDonnees = unites[i].split(Pattern.quote(aDonnee.SEPARATEUR_TYPE_VALEUR)); |
String uniteChaineDonnees = uniteTypeIdDonnees[1]; |
String[] uniteDonnees = uniteChaineDonnees.split(Pattern.quote(aDonnee.SEPARATEUR_DONNEES)); |
|
UniteRangement uniteRangement = new UniteRangement(); |
if (uniteDonnees.length > 0) { |
uniteRangement.setNombre(UtilString.formaterEnEntier(uniteDonnees[0])); |
} |
if (uniteDonnees.length > 1) { |
uniteRangement.setPrecision(getPrecisionNom(uniteDonnees[1])); |
} |
if (uniteDonnees.length > 2) { |
uniteRangement.setFormat(uniteDonnees[2]); |
} |
|
if (uniteTypeIdDonnees[0].matches("[0-9]+")) { |
uniteRangement.setId(uniteTypeIdDonnees[0]); |
uniteRangement.setTypeAutre(false); |
unitesEnregistrees.put(uniteTypeIdDonnees[0], uniteRangement); |
} else { |
uniteRangement.setType(uniteTypeIdDonnees[0]); |
uniteRangement.setTypeAutre(true); |
String id = aDonnee.TYPE_AUTRE+aDonnee.SEPARATEUR_TYPE_VALEUR+uniteTypeIdDonnees[0]+"-"+i; |
uniteRangement.setId(id); |
unitesEnregistrees.put(aDonnee.TYPE_AUTRE+aDonnee.SEPARATEUR_TYPE_VALEUR+uniteTypeIdDonnees[0], uniteRangement); |
} |
} |
} |
return unitesEnregistrees; |
} |
|
private ToolBar creerBarreOutilsGrilleUniteRangement() { |
ToolBar barreOutils = new ToolBar(); |
|
Button ajouterBouton = creerBoutonAjouterUniteRangement(); |
barreOutils.add(ajouterBouton); |
|
barreOutils.add(new SeparatorToolItem()); |
|
Button supprimerBouton = creerBoutonSupprimerUniteRangement(); |
barreOutils.add(supprimerBouton); |
|
return barreOutils; |
} |
|
private Button creerBoutonAjouterUniteRangement() { |
Button bouton = new Button(i18nC.ajouter()); |
bouton.setIcon(Images.ICONES.ajouter()); |
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() { |
@Override |
public void componentSelected(ButtonEvent ce) { |
final MessageBox box = MessageBox.prompt(i18nC.collectionUniteType(), i18nC.collectionUniteRangementSaisirType()); |
box.addCallback(new Listener<MessageBoxEvent>() { |
public void handleEvent(MessageBoxEvent be) { |
if (!UtilString.isEmpty(be.getValue()) && !be.getValue().matches("[0-9]+")) { |
final UniteRangement unite = new UniteRangement(); |
unite.setType(be.getValue()); |
unite.setTypeAutre(true); |
uniteRangementGrille.getStore().add(unite); |
} else { |
InfoLogger.display("Information", "Vous ne pouvez pas saisir de valeur vide ou numérique"); |
} |
} |
}); |
} |
}); |
return bouton; |
} |
|
private Button creerBoutonSupprimerUniteRangement() { |
Button bouton = new Button(i18nC.supprimer()); |
bouton.setIcon(Images.ICONES.supprimer()); |
bouton.addSelectionListener(new SelectionListener<ButtonEvent>() { |
@Override |
public void componentSelected(ButtonEvent ce) { |
UniteRangement uniteRangementSelectionnee = uniteRangementGrille.getSelectionModel().getSelectedItem(); |
if (uniteRangementSelectionnee == null) { |
InfoLogger.display(i18nC.informationTitreGenerique(), Mediateur.i18nM.veuillezSelectionner(i18nC.selectionnerUniteRangement())); |
} else if (uniteRangementSelectionnee.getTypeAutre() == false) { |
InfoLogger.display(i18nC.informationTitreGenerique(), i18nC.selectionnerUniteRangementAjoute()); |
} else { |
uniteRangementGrille.getStore().remove(uniteRangementSelectionnee); |
} |
} |
}); |
return bouton; |
} |
|
private void creerFieldsetConservation() { |
FieldSet conservationFieldSet = new FieldSet(); |
conservationFieldSet.setHeadingHtml(i18nC.collectionTitreConservation()); |
529,8 → 209,56 |
etatUniteRangementCombo.setWidth(300); |
etatTypesUniteFieldSet.add(etatUniteRangementCombo); |
|
etatTypesUniteFieldSet.add(creerUniteRangement()); |
|
// Liasses et cartons d'herbier |
Label labelcartonsHerbiersFormat = new Label(i18nC.collectionCartonsHerbiers()); |
labelcartonsHerbiersFormat.setStyleName("labelChampNombreFormat"); |
|
nbCartonsHerbier = new ChampNombre(); |
nbCartonsHerbier.setStyleName("champNombreFormat"); |
nbCartonsHerbier.setWidth(55); |
nbCartonsHerbier.setEmptyText(i18nC.collectionUniteNbre()); |
|
cartonsHerbierFormat = new TextField<String>(); |
cartonsHerbierFormat.setStyleName("champNombreFormat"); |
cartonsHerbierFormat.setEmptyText(i18nC.collectionUniteFormat()); |
|
HorizontalPanel conteneurCartonsHerbiers = new HorizontalPanel(); |
conteneurCartonsHerbiers.setBorderWidth(0); |
|
conteneurCartonsHerbiers.add(labelcartonsHerbiersFormat); |
conteneurCartonsHerbiers.add(nbCartonsHerbier); |
conteneurCartonsHerbiers.add(cartonsHerbierFormat); |
|
etatTypesUniteFieldSet.add(conteneurCartonsHerbiers); |
|
Label labelLiasses = new Label(i18nC.collectionLiasses()); |
labelLiasses.setStyleName("labelChampNombreFormat"); |
|
nbLiasses = new ChampNombre(); |
nbLiasses.setStyleName("champNombreFormat"); |
nbLiasses.setWidth(55); |
nbLiasses.setEmptyText(i18nC.collectionUniteNbre()); |
|
liassesFormat = new TextField<String>(); |
liassesFormat.setStyleName("champNombreFormat"); |
liassesFormat.setEmptyText(i18nC.collectionUniteFormat()); |
|
HorizontalPanel conteneurLiasses = new HorizontalPanel(); |
conteneurLiasses.setBorderWidth(0); |
|
conteneurLiasses.add(labelLiasses); |
conteneurLiasses.add(nbLiasses); |
conteneurLiasses.add(liassesFormat); |
|
etatTypesUniteFieldSet.add(conteneurLiasses); |
|
autresUnitesRangement = new TextArea(); |
autresUnitesRangement.setStyleName("textAreaAutreUniteRangement"); |
autresUnitesRangement.setHeight(90); |
autresUnitesRangement.setFieldLabel(i18nC.collectionAutreUnitesRangement()); |
|
etatTypesUniteFieldSet.add(autresUnitesRangement); |
|
planchesHerbier = new ChampNombre(); |
planchesHerbier.setFieldLabel(i18nC.collectionNbPlanchesHerbier()); |
|
591,7 → 319,18 |
nbreEchantillonChp.setValue(Integer.parseInt(collectionBotanique.getNbreEchantillon())); |
} |
|
peuplerGrilleUniteRangement(collectionBotanique.getUniteRangement()); |
if(!collectionBotanique.getNbCartonsHerbiers().isEmpty()) { |
nbCartonsHerbier.setValue((Integer.parseInt(collectionBotanique.getNbCartonsHerbiers()))); |
} |
cartonsHerbierFormat.setValue(collectionBotanique.getFormatCartonsHerbiers()); |
|
if(!collectionBotanique.getNbLiasses().isEmpty()) { |
nbLiasses.setValue((Integer.parseInt(collectionBotanique.getNbLiasses()))); |
} |
liassesFormat.setValue(collectionBotanique.getFormatLiasses()); |
|
autresUnitesRangement.setValue(collectionBotanique.getAutresUnitesRangement()); |
|
etatUniteRangementCombo.peupler(collectionBotanique.getUniteRangementEtat()); |
|
|
632,7 → 371,12 |
collectionBotaniqueCollectee.setNbreEchantillon(Integer.toString(nbreEchantillonChp.getValue().intValue())); |
} |
|
collectionBotaniqueCollectee.setUniteRangement(collecterGrilleUniteRangement()); |
collectionBotaniqueCollectee.setNbCartonsHerbiers(nbCartonsHerbier.getValue()+""); |
collectionBotaniqueCollectee.setFormatCartonsHerbiers(cartonsHerbierFormat.getValue()); |
collectionBotaniqueCollectee.setNbLiasses(nbLiasses.getValue()+""); |
collectionBotaniqueCollectee.setFormatLiasses(liassesFormat.getValue()); |
collectionBotaniqueCollectee.setAutresUnitesRangement(autresUnitesRangement.getValue()); |
|
collectionBotaniqueCollectee.setUniteRangementEtat(etatUniteRangementCombo.getValeur()); |
|
collectionBotaniqueCollectee.setNbPlanchesHerbiers(planchesHerbier.getValue()+""); |