Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 601 → Rev 602

/trunk/src/org/tela_botanica/del/client/navigation/evenement/BusEvenementiel.java
62,7 → 62,6
@Override
public void onRechercheObservation(EvenementRechercheObservation event) {
doRechercheObservation();
 
}
});
 
/trunk/src/org/tela_botanica/del/client/utils/UtilitairesServiceResultat.java
35,7 → 35,7
public static Observation parserObservationEtCreerPropositionDetermination(JSONObject observationJson) {
Observation observation = parserObservationJSON(observationJson);
observation.addImageCelValidationData(creerPropositionDeterminationAPartirObservationJSON(observationJson));
observation.ajouterPropositionDetermination(creerPropositionDeterminationAPartirObservationJSON(observationJson));
return observation;
}
/trunk/src/org/tela_botanica/del/client/vues/vueinitiale/VueInitiale.java
1,7 → 1,7
package org.tela_botanica.del.client.vues.vueinitiale;
 
import org.tela_botanica.del.client.composants.identification.FormulaireIdentificationPresenteur;
import org.tela_botanica.del.client.composants.identification.FormulaireIdentificationVue;
import org.tela_botanica.del.client.composants.formulaires.identification.FormulaireIdentificationPresenteur;
import org.tela_botanica.del.client.composants.formulaires.identification.FormulaireIdentificationVue;
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
import org.tela_botanica.del.client.services.rest.UtilisateurService;
import org.tela_botanica.del.client.services.rest.UtilisateurServiceConcret;
/trunk/src/org/tela_botanica/del/client/vues/plateformedetermination/formulaireproposition/FormulairePropositionVue.ui.xml
File deleted
\ No newline at end of file
/trunk/src/org/tela_botanica/del/client/vues/plateformedetermination/formulaireproposition/FormulairePropositionPresenteur.java
File deleted
/trunk/src/org/tela_botanica/del/client/vues/plateformedetermination/formulaireproposition/FormulairePropositionVue.java
File deleted
/trunk/src/org/tela_botanica/del/client/vues/plateformedetermination/formulaireproposition/formulaireProposition.css
File deleted
\ No newline at end of file
/trunk/src/org/tela_botanica/del/client/vues/plateformedetermination/DeterminationPresenteur.java
17,8 → 17,10
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination;
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
import org.tela_botanica.del.client.vues.plateformedetermination.formulaireproposition.FormulairePropositionPresenteur;
import org.tela_botanica.del.client.vues.plateformedetermination.formulaireproposition.FormulairePropositionVue;
import org.tela_botanica.del.client.composants.fenetereoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetereoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionPresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionVue;
import org.tela_botanica.del.client.vues.plateformedetermination.formulairerechercheeflore.FormulaireRechercheEflorePresenteur;
import org.tela_botanica.del.client.vues.plateformedetermination.forum.ForumPresenteur;
import org.tela_botanica.del.client.vues.plateformedetermination.forum.ForumVue;
36,19 → 38,13
 
public class DeterminationPresenteur extends Presenteur {
 
public abstract interface Vue extends IsWidget {
public interface Vue extends IsWidget {
public VerticalPanel getForum();
 
public VerticalPanel getDetailImageObservation();
 
public VerticalPanel getFormulaireRechercheEflore();
 
public VerticalPanel getVote();
 
public VerticalPanel getBarreRepartition();
 
public Button getBoutonAjoutProposition();
public HasWidgets getMetadonnees();
}
 
55,6 → 51,7
private Vue vue;
 
BarreRepartitionVotePresenteur barreRepartitionVotePresenteur;
FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
 
public DeterminationPresenteur(Vue vue) {
this.vue = vue;
98,17 → 95,16
vue.getBoutonAjoutProposition().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
 
ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue()));
fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue()));
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
 
@Override
public void onAjoutDetermination(EvenementAjoutDetermination event) {
if (fenetreModaleEstOuverte()) {
fermerFenetreModale();
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
/trunk/src/org/tela_botanica/del/client/vues/rechercheobservations/resultats/observations/ObservationVue.ui.xml
11,7 → 11,7
<g:HTMLPanel ui:field="metadonnees" styleName="{style.metadonnees}"/>
<g:HTMLPanel ui:field="imagesPanel" />
<g:HTMLPanel>
<g:Label ui:field="lienDeterminer" styleName="lien {style.lienDetermination}"
<g:Button ui:field="boutonAjoutProposition" styleName="{style.lienDetermination}"
text="{constants.proposerSaDetermination}" />
<g:HTMLPanel ui:field="determinationsPanel" />
</g:HTMLPanel>
/trunk/src/org/tela_botanica/del/client/vues/rechercheobservations/resultats/observations/ObservationPresenteur.java
11,8 → 11,15
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.validationobservation.EvenementValidation;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination;
import org.tela_botanica.del.client.composants.fenetereoverlay.FenetreOverlayDefilantePresenteur;
import org.tela_botanica.del.client.composants.fenetereoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetereoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionPresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulaireproposition.FormulairePropositionVue;
import org.tela_botanica.del.client.vues.rechercheobservations.resultats.observationdeterminations.ObservationDeterminationPresenteur;
import org.tela_botanica.del.client.vues.rechercheobservations.resultats.observationdeterminations.ObservationDeterminationVue;
 
24,14 → 31,10
 
public class ObservationPresenteur extends Presenteur {
 
public abstract interface Vue extends IsWidget {
 
public HasClickHandlers getLienDeterminer();
 
public interface Vue extends IsWidget {
public HasClickHandlers getBoutonAjoutProposition();
public HasWidgets getDeterminationsPanel();
 
public HasWidgets getImagesPanel();
public HasWidgets getImagesPanel();
public HasWidgets getMetadonneesPanel();
}
 
38,6 → 41,8
private Vue vue;
 
private Observation observation;
private ObservationDeterminationPresenteur observationDeterminationPresenteur;
 
public ObservationPresenteur(Vue vue, Observation observation) {
this.observation = observation;
46,13 → 51,12
}
 
public void chargerObservation() {
 
new ObservationImagesPresenteur(new ObservationImagesVue(), observation).go(vue.getImagesPanel());
new MetadonneesPresenteur(new MetadonneesVue(), observation, ModeRecherche.MODE_OBSERVATION).go(vue.getMetadonneesPanel());
new ObservationDeterminationPresenteur(new ObservationDeterminationVue(), observation.getPropositionsDetermination()).go(vue.getDeterminationsPanel());
observationDeterminationPresenteur = new ObservationDeterminationPresenteur(new ObservationDeterminationVue(), observation.getPropositionsDetermination());
observationDeterminationPresenteur.go(vue.getDeterminationsPanel());
 
gererEvenements();
 
}
 
public void go(HasWidgets composite) {
60,9 → 64,19
}
 
protected void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
@Override
public void onAjoutDetermination(EvenementAjoutDetermination event) {
if (fenetreModaleEstOuverte()) {
fermerFenetreModale();
ajouterPropositionDetermination(event.getPropositionDetermination());
}
}
});
 
vue.getLienDeterminer().addClickHandler(new ClickHandler() {
 
vue.getBoutonAjoutProposition().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
List<Image> images = observation.getImages();
if (images.size() > 0) {
70,8 → 84,14
} else {
CacheClient.getInstance().setImageCourante(null);
}
BusEvenementiel.getInstance().fireEvent(new EvenementValidation(observation));
CacheClient.getInstance().setObservationCourante(observation);
FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue()));
}
});
}
private void ajouterPropositionDetermination(PropositionDetermination propositionDetermination) {
observationDeterminationPresenteur.setPropositions(observation.getPropositionsDetermination());
}
}
/trunk/src/org/tela_botanica/del/client/vues/rechercheobservations/resultats/observations/ObservationVue.java
5,6 → 5,7
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
19,7 → 20,7
private static Binder binder = GWT.create(Binder.class);
 
@UiField
protected Label lienDeterminer;
Button boutonAjoutProposition;
 
@UiField
protected Panel determinationsPanel;
32,8 → 33,8
}
 
@Override
public HasClickHandlers getLienDeterminer() {
return lienDeterminer;
public HasClickHandlers getBoutonAjoutProposition() {
return boutonAjoutProposition;
}
 
public Panel getDeterminationsPanel() {
/trunk/src/org/tela_botanica/del/client/vues/rechercheobservations/resultats/observationdeterminations/ObservationDeterminationPresenteur.java
32,7 → 32,6
 
int i = 0;
for (PropositionDetermination proposition : propositions) {
 
HTMLPanel panneau = new HTMLPanel("");
DetailVoteObservationPresenteur presenteurVote = new DetailVoteObservationPresenteur(new DetailVoteObservationVue(), proposition);
presenteurVote.go(panneau);
40,8 → 39,12
vue.setTexteTableau(i, 1, String.valueOf(proposition.getListeCommentaires().size()) + " " + I18n.getVocabulary().commentaires());
i++;
}
 
}
public void setPropositions(List<PropositionDetermination> propositions) {
this.propositions = propositions;
chargerPropositions();
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
/trunk/src/org/tela_botanica/del/client/composants/fenetereoverlay/FenetreOverlaySimplePresenteur.java
New file
0,0 → 1,21
package org.tela_botanica.del.client.composants.fenetereoverlay;
 
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
 
public class FenetreOverlaySimplePresenteur extends FenetreOverlayDefilantePresenteur {
 
public FenetreOverlaySimplePresenteur(Vue vue) {
super(0, vue);
afficherBoutonsSuivantsPrecedents(false);
}
public void ouvrirFenetreModale(Presenteur presenteur) {
super.ouvrirFenetreModaleDefilante(0, presenteur);
}
 
@Override
public void surClicBoutonSuivant() {}
 
@Override
public void surClicBoutonPrecedent() {}
}
/trunk/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRecherchePresenteur.java
1,8 → 1,8
package org.tela_botanica.del.client.composants.moteurrecherche;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.formulaires.AutoCompletionComboBoxPresenteur;
import org.tela_botanica.del.client.composants.formulaires.AutoCompletionComboBoxVue;
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxPresenteur;
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
/trunk/src/org/tela_botanica/del/client/composants/formulaires/AutoCompletionComboBoxVue.java
File deleted
/trunk/src/org/tela_botanica/del/client/composants/formulaires/AutoCompletionComboBoxPresenteur.java
File deleted
\ No newline at end of file
/trunk/src/org/tela_botanica/del/client/composants/formulaires/identification/identification.css
New file
0,0 → 1,8
.zoneIdentification {}
.connecter { text-decoration:underline; color:blue; cursor:pointer}
.deconnecter { text-decoration:underline; color:blue; cursor:pointer}
.email {padding-right:10px}
.zoneFormulaire {position:absolute; padding:10px; margin-top:10px; border:solid 2px #8eb533; background:white; box-shadow:2px 2px 2px #666}
.login {}
.motdepasse {}
.erreur {color:red;}
/trunk/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationVue.ui.xml
New file
0,0 → 1,24
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
<ui:with field='res' type='org.tela_botanica.del.client.resources.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="identification.css" />
<g:HTMLPanel styleName="{style.zoneIdentification}">
<g:HTMLPanel ui:field="zoneUtilisateur">
<g:Label ui:field="connecter" styleName="{style.connecter}" text="{constants.seConnecter}" />
<g:HorizontalPanel><g:Label ui:field="email" styleName="{style.email}">Email</g:Label><g:Label ui:field="deconnecter" styleName="{style.deconnecter}" text="{constants.seDeconnecter}" /></g:HorizontalPanel>
</g:HTMLPanel>
<g:HTMLPanel ui:field="zoneFormulaire" styleName="{style.zoneFormulaire}">
<g:Label ui:field="erreurIdentification" styleName="{style.erreur}"></g:Label>
<g:Label text="{constants.login}" />
<g:TextBox ui:field="login" styleName="{style.login}" />
<g:Label text="{constants.motdepasse}" />
<g:PasswordTextBox ui:field="motdepasse" styleName="{style.motdepasse}"></g:PasswordTextBox>
<g:Button ui:field="boutonOK">OK</g:Button>
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/trunk/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationPresenteur.java
New file
0,0 → 1,149
package org.tela_botanica.del.client.composants.formulaires.identification;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.services.rest.UtilisateurService;
import org.tela_botanica.del.client.services.rest.UtilisateurServiceConcret;
import org.tela_botanica.del.client.services.rest.async.UtilisateurCallback;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class FormulaireIdentificationPresenteur {
public abstract interface Vue extends IsWidget {
public void ajouterVue(HasWidgets composite);
public HasClickHandlers getSeConnecter();
public HasClickHandlers getSeDeconnecter();
public void basculerAffichageFormulaire();
public void basculerModeConnecte(Utilisateur utilisateur);
public HasClickHandlers getBoutonOK();
public HasText getLogin();
public HasText getMotdepasse();
public void afficherErreur();
public void masquerErreur();
public void viderFormulaire();
public void setErreur(String idTexte);
public String getErreur();
public HasKeyPressHandlers getLoginHasKeyPressHandler();
public HasKeyPressHandlers getMotdepasseHasKeyPressHandler();
}
private Vue vue;
private Utilisateur utilisateur;
private UtilisateurService utilisateurService;
public FormulaireIdentificationPresenteur(Vue vue, UtilisateurService utilisateurService) {
this.vue = vue;
this.utilisateurService = utilisateurService;
utilisateurService.obtenirUtilisateur(new UtilisateurCallback() {
@Override
public void surRetourUtilisateur(Utilisateur utilisateur) {
CacheClient.getInstance().setUtilisateur(utilisateur);
rafraichir();
}
});
gererEvenements();
}
public void rafraichir() {
utilisateur = CacheClient.getInstance().getUtilisateur();
vue.basculerModeConnecte(this.utilisateur);
}
public void gererEvenements() {
vue.getSeConnecter().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
vue.basculerAffichageFormulaire();
}
});
vue.getBoutonOK().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
surTentativeLogin();
}
});
vue.getSeDeconnecter().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
deconnecterUtilisateur(utilisateur.getCourriel());
}
});
vue.getLoginHasKeyPressHandler().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
vue.getMotdepasseHasKeyPressHandler().addKeyPressHandler(creerGestionnaireEvenementToucheEntree());
}
private void surTentativeLogin() {
String login = vue.getLogin().getText();
String motdepasse = vue.getMotdepasse().getText();
if (login.equals("") || motdepasse.equals("")) {
gererErreur("saisirLogin");
} else {
connecterUtilisateur(login, motdepasse);
}
}
public KeyPressHandler creerGestionnaireEvenementToucheEntree() {
return new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
surTentativeLogin();
}
}
};
}
public void gererErreur(String erreur) {
vue.setErreur(erreur);
vue.afficherErreur();
}
public void connecterUtilisateur(String login, String motdepasse) {
 
utilisateurService.connecterUtilisateur(login, motdepasse, new UtilisateurCallback() {
@Override
public void surRetourUtilisateur(Utilisateur utilisateur) {
CacheClient.getInstance().setUtilisateur(utilisateur);
if (utilisateur.estIdentifie()) {
vue.masquerErreur();
rafraichir();
vue.basculerAffichageFormulaire();
vue.viderFormulaire();
} else {
vue.setErreur("identificationRefus");
vue.afficherErreur();
}
}
});
}
public void deconnecterUtilisateur(String courriel) {
utilisateurService.deconnecterUtilisateur(courriel, new UtilisateurCallback() {
@Override
public void surRetourUtilisateur(Utilisateur utilisateur) {
CacheClient.getInstance().setUtilisateur(utilisateur);
rafraichir();
}
});
}
public void go(HasWidgets composite) {
vue.ajouterVue(composite);
}
}
/trunk/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationVue.java
New file
0,0 → 1,127
package org.tela_botanica.del.client.composants.formulaires.identification;
 
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Utilisateur;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
 
public class FormulaireIdentificationVue extends Composite implements FormulaireIdentificationPresenteur.Vue {
interface Binder extends UiBinder<Widget, FormulaireIdentificationVue> {
}
private static Binder uiBinder = GWT.create(Binder.class);
@UiField
Label connecter, deconnecter, email, erreurIdentification;
@UiField Panel zoneFormulaire;
@UiField Button boutonOK;
@UiField TextBox login, motdepasse;
public FormulaireIdentificationVue() {
initWidget(uiBinder.createAndBindUi(this));
basculerAffichageFormulaire();
connecter.setVisible(false);
erreurIdentification.setVisible(false);
}
@Override
public void ajouterVue(HasWidgets composite) {
composite.add(this.asWidget());
}
 
@Override
public HasClickHandlers getSeConnecter() {
return connecter;
}
 
@Override
public void basculerAffichageFormulaire() {
zoneFormulaire.setVisible(!zoneFormulaire.isVisible());
}
 
@Override
public void basculerModeConnecte(Utilisateur utilisateur) {
boolean estConnecte = utilisateur.estIdentifie();
connecter.setVisible(!estConnecte);
deconnecter.setVisible(estConnecte);
email.setText(utilisateur.getNomPrenomFormate());
email.setVisible(estConnecte);
}
 
@Override
public HasClickHandlers getBoutonOK() {
return boutonOK;
}
 
@Override
public TextBox getLogin() {
return login;
}
 
@Override
public TextBox getMotdepasse() {
return motdepasse;
}
 
@Override
public HasClickHandlers getSeDeconnecter() {
return deconnecter;
}
@Override
public void afficherErreur() {
erreurIdentification.setVisible(true);
}
@Override
public void masquerErreur() {
erreurIdentification.setVisible(false);
}
@Override
public void viderFormulaire() {
login.setText("");
motdepasse.setText("");
}
@Override
public void setErreur(String idTexte) {
String texte = "";
if (idTexte.equals("saisirLogin")) {
texte = I18n.getMessages().saisirLogin();
} else {
texte = I18n.getMessages().identificationRefus();
}
erreurIdentification.setText(texte);
}
public String getErreur() {
return erreurIdentification.getText();
}
 
@Override
public HasKeyPressHandlers getLoginHasKeyPressHandler() {
return login;
}
 
@Override
public HasKeyPressHandlers getMotdepasseHasKeyPressHandler() {
return motdepasse;
}
}
/trunk/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/formulaireProposition.css
New file
0,0 → 1,9
.formulaireProposition {z-index:1500; padding:50px; background:white; width:50%; width:600px; margin:0 auto; margin-top:5%;}
.boutonProposer {float:right; margin-right:35px; margin-top:-85px; padding:10px; background:url(./img/add.png) no-repeat 5px 12px #DDD; padding-left:20px; cursor:pointer}
.boutonProposer:hover {background-color:#AAA}
.colonneGauche, .colonneDroite {width:250px;}
.colonneGauche {padding-right:30px}
.colonneGauche select {width:100%}
.colonneGauche input {width:95%}
.commentaire {width:250px; height:100px}
.propositionTaxon{width:100%;height:30px;}
/trunk/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/FormulairePropositionVue.ui.xml
New file
0,0 → 1,31
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:vues="urn:import:org.tela_botanica.del.client.vues.plateformedetermination.forum">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="formulaireProposition.css" />
<g:VerticalPanel styleName="{style.formulaireProposition}">
<g:Label text="{constants.proposerSaDetermination}" styleName="titre"/>
<g:Label text="{constants.infoProposerDetermination}" styleName="petit"/>
<g:HTML><br /></g:HTML>
<g:HorizontalPanel>
<g:VerticalPanel styleName="{style.colonneGauche}">
<g:Label text="{constants.vous}" styleName="sousTitre"/>
<g:Label text="{constants.infoVous}" styleName="petit" />
<g:TextBox ui:field="nomPrenom" />
<g:HTML><br /></g:HTML>
<g:Label text="{constants.choisirUnTaxon}" styleName="sousTitre"/>
<g:HTML HTML="{constants.infoTaxon}" styleName="petit"/>
<g:LayoutPanel ui:field="propositionTaxon" styleName="{style.propositionTaxon}" />
<g:HTML><br /></g:HTML>
<g:Label text="{constants.commentaire}" styleName="sousTitre"/>
<g:TextArea ui:field="commentaires" styleName="{style.commentaire}" />
</g:VerticalPanel>
</g:HorizontalPanel>
<g:Button text="{constants.boutonProposer}" ui:field="boutonValidationProposition" styleName="{style.boutonProposer}"/>
</g:VerticalPanel>
 
</ui:UiBinder>
/trunk/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/FormulairePropositionPresenteur.java
New file
0,0 → 1,128
package org.tela_botanica.del.client.composants.formulaires.formulaireproposition;
 
import java.util.Date;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxPresenteur;
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxVue;
 
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.validation.ValidateurChampTexteNonNul;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.modeles.Commentaire;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination;
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService;
 
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class FormulairePropositionPresenteur extends Presenteur {
public interface Vue extends IsWidget {
public HasText getNomPrenom();
public HasWidgets getPropositionTaxon();
public HasText getCommentaires();
public HasClickHandlers getBoutonValidationProposition();
public void afficherStyleErreur(String styleErreur);
public void supprimerStyleErreur(String styleErreur);
public void afficherNomPrenomEtDesactiver(String nomPrenomFormate);
}
private Vue vue;
private Config config;
private AutoCompletionComboBoxPresenteur autoCompletionNomTaxonsPresenteur;
public FormulairePropositionPresenteur(Vue vue) {
this.vue = vue;
config = new Config();
creerCompletionTaxons();
remplirAvecInfosUtilisateur();
}
private void remplirAvecInfosUtilisateur() {
if(CacheClient.getInstance().getUtilisateur().estIdentifie()) {
vue.afficherNomPrenomEtDesactiver(CacheClient.getInstance().getUtilisateur().getNomPrenomFormate());
}
}
private void creerCompletionTaxons() {
String url = this.config.getUrl("nomSciCompletionService");
autoCompletionNomTaxonsPresenteur = new AutoCompletionComboBoxPresenteur(new AutoCompletionComboBoxVue(), url) {
protected String effectuerPreTraitementChaineRequete(String requete) {
return UtilitairesAutoCompletionService.effectuerPreTraitementChaineRequeteGenreEspeceSlash(requete);
}
@Override
protected String[] parserResultatRequete(Response response) {
return UtilitairesAutoCompletionService.parserRetourSimple(response);
}
};
}
 
public void go(HasWidgets composite) {
autoCompletionNomTaxonsPresenteur.go(vue.getPropositionTaxon());
composite.add(vue.asWidget());
gererEvenements();
}
 
protected void gererEvenements() {
vue.getBoutonValidationProposition().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
 
if (!validerSaisieProposition()) {
return;
} else {
PropositionDetermination propositionAjoutee = collecterValeursSaisieProposition();
CacheClient.getInstance().getObservationCourante().ajouterPropositionDetermination(propositionAjoutee);
 
EvenementAjoutDetermination evenementAjoutDetermination = new EvenementAjoutDetermination(propositionAjoutee);
BusEvenementiel.getInstance().fireEvent(evenementAjoutDetermination);
}
}
});
}
 
private boolean validerSaisieProposition() {
 
ValidateurChampTexteNonNul validateurTaxon = new ValidateurChampTexteNonNul(vue.getNomPrenom()) {
@Override
public void afficherStyleErreur(String styleErreur) {
vue.afficherStyleErreur(styleErreur);
}
@Override
public void supprimerStyleErreur(String styleErreur) {
vue.supprimerStyleErreur(styleErreur);
}
};
boolean taxonSaisi = validateurTaxon.valider();
 
return taxonSaisi;
}
 
private PropositionDetermination collecterValeursSaisieProposition() {
PropositionDetermination propositionAjoutee = new PropositionDetermination();
propositionAjoutee.setId(CacheClient.getInstance().getImageCourante().getIdImage());
 
String auteur = vue.getNomPrenom().getText();
if (vue.getCommentaires().getText() != "") {
String contenuCommentaire = vue.getCommentaires().getText();
Commentaire comm = new Commentaire(auteur, new Date(), contenuCommentaire);
propositionAjoutee.ajouterCommentaire(comm);
}
propositionAjoutee.setContributeur(auteur);
propositionAjoutee.setDate(new Date());
 
propositionAjoutee.setEspece(autoCompletionNomTaxonsPresenteur.getValeur());
 
return propositionAjoutee;
}
}
/trunk/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/FormulairePropositionVue.java
New file
0,0 → 1,73
package org.tela_botanica.del.client.composants.formulaires.formulaireproposition;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
 
public class FormulairePropositionVue extends Composite implements FormulairePropositionPresenteur.Vue {
 
@UiField(provided = true)
public TextBox nomPrenom = new TextBox();
 
@UiField(provided = true)
public LayoutPanel propositionTaxon = new LayoutPanel();
 
@UiField(provided = true)
public TextArea commentaires = new TextArea();
 
@UiField(provided = true)
public Button boutonValidationProposition = new Button();
 
interface FormulairePropositionUIiBinder extends UiBinder<Widget, FormulairePropositionVue> {
};
 
FormulairePropositionUIiBinder uiBinder = GWT.create(FormulairePropositionUIiBinder.class);
 
public FormulairePropositionVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
@Override
public TextBox getNomPrenom() {
return nomPrenom;
}
 
@Override
public LayoutPanel getPropositionTaxon() {
return propositionTaxon;
}
 
@Override
public TextArea getCommentaires() {
return commentaires;
}
 
@Override
public Button getBoutonValidationProposition() {
return boutonValidationProposition;
}
 
@Override
public void afficherStyleErreur(String styleErreur) {
nomPrenom.addStyleName(styleErreur);
propositionTaxon.addStyleName(styleErreur);
}
 
@Override
public void supprimerStyleErreur(String styleErreur) {
nomPrenom.removeStyleName(styleErreur);
propositionTaxon.removeStyleName(styleErreur);
}
 
@Override
public void afficherNomPrenomEtDesactiver(String nomPrenomFormate) {
nomPrenom.setText(nomPrenomFormate);
nomPrenom.setEnabled(false);
}
}
/trunk/src/org/tela_botanica/del/client/composants/formulaires/autocompletion/AutoCompletionComboBoxPresenteur.java
New file
0,0 → 1,172
package org.tela_botanica.del.client.composants.formulaires.autocompletion;
 
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.SuggestOracle;
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
 
public abstract class AutoCompletionComboBoxPresenteur {
public interface Vue extends IsWidget {
public void ajouterVue(HasWidgets composite);
public HasKeyPressHandlers getSuggestBoxHasKeyPressHandlers();
public String getValeur();
public void remplirListe(String[] suggestions);
public void afficherSuggestions(SuggestOracle.Request request,SuggestOracle.Callback response);
public void afficherListeDeroulante();
public void nettoyer();
public void setValeur(String valeur);
HasSelectionHandlers<Suggestion> getSuggestBoxHasSelectionChangeHandlers();
}
private Vue autoCompletionComboBoxVue;
SuggestOracle.Request requeteOracle;
SuggestOracle.Callback callBackOracle;
Timer suggestionTimer = null;
int tempsAvantRequete = 500;
String urlRequete = "";
public AutoCompletionComboBoxPresenteur(Vue vue, String urlRequete) {
this.autoCompletionComboBoxVue = vue;
this.urlRequete = urlRequete;
gererEvenements();
}
public void go(HasWidgets composite) {
autoCompletionComboBoxVue.ajouterVue(composite);
}
public void gererEvenements() {
autoCompletionComboBoxVue.getSuggestBoxHasKeyPressHandlers().addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if(event.getUnicodeCharCode() != 0) {
gererTimer();
}
}
});
requeteOracle = new SuggestOracle.Request();
callBackOracle = new SuggestOracle.Callback() {
 
public void onSuggestionsReady(SuggestOracle.Request request, SuggestOracle.Response response) {
autoCompletionComboBoxVue.afficherListeDeroulante();
}
};
autoCompletionComboBoxVue.getSuggestBoxHasSelectionChangeHandlers().addSelectionHandler(new SelectionHandler<SuggestOracle.Suggestion>(){
@Override
public void onSelection(SelectionEvent<Suggestion> event) {
surSelectionSuggestion(event.getSelectedItem().getReplacementString());
}
});
}
public void gererTimer() {
if(suggestionTimer == null) {
suggestionTimer = new Timer() {
public void run() {
requeteSuggestions();
}
};
suggestionTimer.schedule(tempsAvantRequete);
} else {
suggestionTimer.schedule(tempsAvantRequete);
}
}
public void setTempsAvantRequete(int temps) {
tempsAvantRequete = temps;
}
public int getTempsAvantRequete(int temps) {
return tempsAvantRequete;
}
public String getValeur() {
return autoCompletionComboBoxVue.getValeur();
}
public void setValeur(String taxon) {
autoCompletionComboBoxVue.setValeur(taxon);
}
public void nettoyer() {
autoCompletionComboBoxVue.nettoyer();
}
public void requeteSuggestions() {
final String requete = autoCompletionComboBoxVue.getValeur();
String requeteAjax = effectuerPreTraitementChaineRequete(requete);
String urlProxy = URL.encode(urlRequete+requeteAjax);
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, urlProxy) ;
try {
rb.sendRequest(null, new RequestCallback() {
public void onError(final Request request, final Throwable exception) {
// TODO Auto-generated method stub
}
 
public void onResponseReceived(final Request request,
final Response response) {
surReponseRequete(requete, response);
}
}) ;
 
} catch (RequestException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void surReponseRequete(String requete, Response response) {
String[] valeurs = parserResultatRequete(response);
autoCompletionComboBoxVue.remplirListe(valeurs);
requeteOracle.setQuery(requete);
autoCompletionComboBoxVue.afficherSuggestions(requeteOracle, callBackOracle);
}
protected void surSelectionSuggestion(String suggestion) {
return;
}
/**
* Permet d'intervenir sur la chaine tapée par l'utilisateur avant que celle-ci ne soit passée
* à la requête asynchrone pour pouvoir la formater (pour mettre en minuscule, séparer des termes)
* par défaut renvoie la chaine telle quelle, à surcharger au besoin
* @param String requete chaine de recherche contenant ce que l'utilisateur à tapé
* @return String une chaine transformée
*/
protected String effectuerPreTraitementChaineRequete(String requete) {
return requete;
}
/**
* Parse les résultats de la requete afin de pouvoir les utiliser à implémenter par le
* composants qui crée la combobox selon le contexte et le web service appelé.
* @param Response la réponse à la requête asynchrone
* @return String[] le tableau des suggestions qui sera affiché dans la combobox
*/
protected abstract String[] parserResultatRequete(Response response);
 
public Vue getAutoCompletionComboBoxVue() {
return autoCompletionComboBoxVue;
}
}
/trunk/src/org/tela_botanica/del/client/composants/formulaires/autocompletion/AutoCompletionComboBoxVue.java
New file
0,0 → 1,74
package org.tela_botanica.del.client.composants.formulaires.autocompletion;
 
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.MultiWordSuggestOracle;
import com.google.gwt.user.client.ui.SuggestBox;
import com.google.gwt.user.client.ui.SuggestOracle;
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
import com.google.gwt.view.client.SelectionChangeEvent.HasSelectionChangedHandlers;
 
public class AutoCompletionComboBoxVue extends LayoutPanel implements AutoCompletionComboBoxPresenteur.Vue {
 
MultiWordSuggestOracle msu = new MultiWordSuggestOracle();
SuggestBox suggestions = new SuggestBox(msu);
 
public AutoCompletionComboBoxVue() {
add(suggestions);
//TODO: voir avec greg si la taille doit être définie ici
setHeight("25px");
setWidth("100%");
}
public SuggestBox getSuggestBox() {
return suggestions;
}
public void remplirListe(String[] listePropositions) {
msu.clear();
for (int i = 0; i < listePropositions.length; i++) {
msu.add(listePropositions[i]);
}
}
@Override
public void afficherSuggestions(SuggestOracle.Request requeteOracle, SuggestOracle.Callback callBackOracle) {
msu.requestSuggestions(requeteOracle, callBackOracle);
}
@Override
public void afficherListeDeroulante() {
suggestions.showSuggestionList();
}
public void nettoyer() {
suggestions.setText("");
}
public void setValeur(String taxon) {
suggestions.setValue(taxon);
}
 
@Override
public HasKeyPressHandlers getSuggestBoxHasKeyPressHandlers() {
return suggestions;
}
@Override
public HasSelectionHandlers<Suggestion> getSuggestBoxHasSelectionChangeHandlers() {
return suggestions;
}
 
@Override
public String getValeur() {
return suggestions.getText();
}
 
@Override
public void ajouterVue(HasWidgets composite) {
composite.add(this.asWidget());
}
}
/trunk/src/org/tela_botanica/del/client/composants/identification/FormulaireIdentificationVue.java
File deleted
/trunk/src/org/tela_botanica/del/client/composants/identification/identification.css
File deleted
\ No newline at end of file
/trunk/src/org/tela_botanica/del/client/composants/identification/FormulaireIdentificationVue.ui.xml
File deleted
\ No newline at end of file
/trunk/src/org/tela_botanica/del/client/composants/identification/FormulaireIdentificationPresenteur.java
File deleted
/trunk/src/org/tela_botanica/del/client/modeles/Observation.java
141,7 → 141,7
this.motsClefs.add(motsClefs);
}
 
public void addImageCelValidationData(PropositionDetermination observationValidation) {
public void ajouterPropositionDetermination(PropositionDetermination observationValidation) {
propositionsDetermination.add(observationValidation);
}
 
/trunk/src/org/tela_botanica/del/test/composants/moteurrecherche/MoteurRecherchePresenteurTest.java
5,7 → 5,7
import org.junit.Test;
import org.mockito.Mockito;
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.formulaires.AutoCompletionComboBoxPresenteur;
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxPresenteur;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRecherchePresenteur;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRecherchePresenteur.TypeMoteur;
import org.tela_botanica.del.client.config.Config;
/trunk/src/org/tela_botanica/del/test/composants/identification/FormulaireIdentificationPresenteurTest.java
5,8 → 5,8
import org.junit.Test;
import org.mockito.Mockito;
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.identification.FormulaireIdentificationPresenteur;
import org.tela_botanica.del.client.composants.identification.FormulaireIdentificationVue;
import org.tela_botanica.del.client.composants.formulaires.identification.FormulaireIdentificationPresenteur;
import org.tela_botanica.del.client.composants.formulaires.identification.FormulaireIdentificationVue;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.services.rest.UtilisateurService;
import org.tela_botanica.del.client.services.rest.UtilisateurServiceConcret;