Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 2076 → Rev 2094

/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/entete/liens/liens.css
New file
0,0 → 1,14
.zonePartageUrl {
display:inline-block;
width:150px;
float:right;
}
 
.aide {
float:right;
margin-left:5px;
}
 
.boutonParticiper {
margin-right:5px;
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/entete/liens/LiensVue.ui.xml
New file
0,0 → 1,32
<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: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="liens.css" />
<g:HTMLPanel>
<!-- Liens identiplante -->
<g:HTMLPanel styleName="limiteMax">
<!-- picto -->
<g:Anchor target="_blank" href="{constants.lienAidePictoflora}" ui:field="aidePictoflora"
text="{constants.accesAide}" title="{constants.accesAide}" styleName="acceder-aide {style.aide}"/>
<!-- identiplante -->
<g:Anchor ui:field="ajouterObservation" text="{constants.ajouterObservation}"
title="{constants.legendeAjouterObservation}" styleName="acceder-outil"
href="{constants.lienAppliSaisie}" target="_blank"/>
<g:Anchor href="{constants.lienAideIdentiplante}" ui:field="aide"
text="{constants.accesAide}" title="{constants.accesAide}"
styleName="acceder-aide {style.aide}" target="_blank" />
<!-- Commun -->
<g:HTMLPanel ui:field="zonePartageUrl" styleName="{style.zonePartageUrl}"></g:HTMLPanel>
<g:Anchor ui:field="participerProjet" text="Participer au projet"
title="{constants.legendeAjouterObservation}"
styleName="acceder-outil droite {style.boutonParticiper}" target="_blank"/>
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/entete/liens/LiensPresenteur.java
New file
0,0 → 1,72
package org.tela_botanica.del.client.vues.entete.liens;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlPresenteur;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
import org.tela_botanica.del.client.services.rest.ProtocoleServiceConcret;
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class LiensPresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public HasWidgets getZonePartageUrl();
}
private Vue vue;
public LiensPresenteur(Vue vue) {
this.vue = vue;
}
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
 
PartageUrlPresenteur partageUrl = new PartageUrlPresenteur(new PartageUrlVue());
partageUrl.go(vue.getZonePartageUrl());
gererProtocoles();
}
protected void gererProtocoles() {
//FIXME : ne doit pas etre concret ici ?
ProtocoleServiceConcret protocoleService = new ProtocoleServiceConcret();
if (CacheClient.getInstance().getProtocoleCourant() == null) {
if (CacheClient.getInstance().getListeProtocoles() == null || CacheClient.getInstance().getListeProtocoles().size() == 0) {
protocoleService.getProtocoles(new ProtocolesCallback() {
 
@Override
public void surRetour(ProtocoleServiceResultat protocolesRecus) {
CacheClient.getInstance().setListeProtocoles(protocolesRecus.getProtocoles());
if (protocolesRecus.getProtocoles().size() > 0) {
CacheClient.getInstance().setProtocoleCourant(protocolesRecus.getProtocoles().get(0));
} else {
// TODO afficher message indiquant que la liste des
// protocoles de votes n'est pas fourni
}
}
});
} else {
CacheClient.getInstance().setProtocoleCourant(CacheClient.getInstance().getListeProtocoles().get(0));
}
}
}
 
@Override
protected void gererEvenements() {
// TODO Auto-generated method stub
/*
* vue.getLienAjoutObservation().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("applisaisie"), "Saisie d'une nouvelle observation", null);
}
});
*/
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/entete/liens/LiensVue.java
New file
0,0 → 1,79
package org.tela_botanica.del.client.vues.entete.liens;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.GestionnaireEvenementChangementProtocole;
 
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.Window;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class LiensVue extends Composite implements LiensPresenteur.Vue {
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, LiensVue> {}
 
private static Binder binder = GWT.create(Binder.class);
@UiField Panel zonePartageUrl;
@UiField Anchor ajouterObservation, aidePictoflora, aide, participerProjet;
public LiensVue() {
initWidget(binder.createAndBindUi(this));
gererAffichageEnFonctionDeLaNavigation();
gererEvenements();
}
public HasWidgets getZonePartageUrl() {
return zonePartageUrl;
}
public void gererAffichageEnFonctionDeLaNavigation() {
String urlCourante = Window.Location.getHref();
Config config = new Config();
String urlAppliImg = config.getUrl("pictoflora");
if (urlCourante.contains(urlAppliImg)) {
//SI PICTO
ajouterObservation.setVisible(false);
aide.setVisible(false);
setLienSaisieProjet();
} else {
aidePictoflora.setVisible(false);
participerProjet.setVisible(false);
}
}
private void setLienSaisieProjet() {
participerProjet.setHref(formaterLienSaisieProjetUrl());
participerProjet.setTitle(I18n.getVocabulary().legendeAjouterImage());
}
private String formaterLienSaisieProjetUrl() {
String urlSaisieProjet = I18n.getVocabulary().lienAppliSaisie();
if(CacheClient.getInstance().getProtocoleCourant() != null) {
String tagProtocole = CacheClient.getInstance().getProtocoleCourant().getTag();
urlSaisieProjet = I18n.getVocabulary().lienAppliSaisieProjetUrl();
urlSaisieProjet = urlSaisieProjet.replace("{projet}", tagProtocole);
}
return urlSaisieProjet;
}
private void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
@Override
public void onChangementProtocole(EvenementChangementProtocole event) {
setLienSaisieProjet();
}
});
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/entete/entete.css
New file
0,0 → 1,13
.zoneIdentification {
float: right;
height: 129px;
width: 45%;
background: url("./img/carre_orange.png") no-repeat scroll -0px -8px transparent;
text-align:right;
padding-left:27px;
}
.zoneLiens {
clear: both;
height: 40px;
padding:10px 65px;
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/entete/EnteteVue.ui.xml
New file
0,0 → 1,13
<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: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="entete.css" />
<g:HTMLPanel>
<g:HTMLPanel ui:field="zoneIdentification" styleName="{style.zoneIdentification}"></g:HTMLPanel>
<g:HTMLPanel ui:field="zoneLiens" styleName="{style.zoneLiens}"></g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/entete/EntetePresenteur.java
New file
0,0 → 1,53
package org.tela_botanica.del.client.vues.entete;
 
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.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.services.rest.UtilisateurServiceConcret;
import org.tela_botanica.del.client.vues.entete.liens.LiensPresenteur;
import org.tela_botanica.del.client.vues.entete.liens.LiensVue;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
 
/**
* Classe pour le header de l'application affichant le formulaire de connexion, le titre, les logos
* */
public class EntetePresenteur extends Presenteur {
 
/**
* La vue du header
* */
public interface Vue extends IsWidget {
public HasWidgets getZoneIdentification();
public HasWidgets getZoneLiens();
}
private Vue vue;
 
public EntetePresenteur(Vue vue) {
this.vue = vue;
}
 
@Override
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
//Ajout de la zone identification
FormulaireIdentificationPresenteur identification = new FormulaireIdentificationPresenteur(new FormulaireIdentificationVue(), new UtilisateurServiceConcret());
identification.go(vue.getZoneIdentification());
LiensPresenteur liens = new LiensPresenteur(new LiensVue());
liens.go(vue.getZoneLiens());
}
 
@Override
protected void gererEvenements() {
// TODO Auto-generated method stub
}
public void ajouterLien(Widget lien) {
this.vue.getZoneLiens().add(lien);
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/entete/EnteteVue.java
New file
0,0 → 1,37
package org.tela_botanica.del.client.vues.entete;
 
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.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
import org.tela_botanica.del.client.vues.entete.EntetePresenteur;
 
public class EnteteVue extends Composite implements EntetePresenteur.Vue {
 
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, EnteteVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
@UiField
Panel zoneIdentification, zoneLiens;
public EnteteVue() {
initWidget(binder.createAndBindUi(this));
}
 
@Override
public HasWidgets getZoneIdentification() {
return zoneIdentification;
}
 
@Override
public HasWidgets getZoneLiens() {
return zoneLiens;
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/comparaisoneflore/ComparaisonEfloreVue.ui.xml
New file
0,0 → 1,77
<!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'>
 
<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="comparaisonEflore.css" />
<g:HTMLPanel >
<g:HTMLPanel ui:field="formulaireRecherche" styleName="{style.zoneComparaison}" />
<g:HorizontalPanel styleName="{style.zoneComparaison}" >
<g:VerticalPanel styleName="{style.photoPrincipale} arrondi">
<g:Label text="{constants.taxonADeterminer}" styleName="titre" />
<g:Label text="{constants.taxonADeterminer}" styleName="petit" />
<g:Image ui:field="imagePrincipale" />
 
<g:HTMLPanel styleName="{style.meta}">
<g:Label text="{constants.metadonneesPhoto}" styleName="titre" />
<g:Label ui:field="nomAuteurTitre" text="{constants.observateur}" styleName="petit" />
<g:Label ui:field="nomAuteur" />
<g:Label ui:field="dateObservationTitre" text="{constants.dateObservation}" styleName="petit" />
<g:Label ui:field="dateObservation" />
<g:Label ui:field="familleTitre" text="{constants.famille}" styleName="petit" />
<g:Label ui:field="famille" />
<g:Label ui:field="commentairesTitre" text="{constants.commentaires}" styleName="petit" />
<g:Label ui:field="commentaires" />
<g:Label ui:field="motsClefsTitre" text="{constants.motsClefs}" styleName="petit" />
<g:Label ui:field="motsClefs" />
<g:Label ui:field="nomRetenuTitre" text="{constants.nomRetenu}" styleName="petit" />
<g:Label ui:field="nomRetenu" />
<g:Label ui:field="nomCommunTitre" styleName="petit" text="{constants.nomCommun}" />
<g:Label ui:field="nomCommun" />
<g:Label ui:field="localiteTitre" styleName="petit" text="{constants.lieuDuReleve}" />
<g:Label ui:field="localite" />
<g:Label ui:field="milieuTitre" styleName="petit" text="{constants.milieu}" />
<g:Label ui:field="milieu"/>
</g:HTMLPanel>
</g:VerticalPanel>
<g:VerticalPanel styleName="{style.photoComparee} arrondi">
<g:Label text="{constants.imageEflore}" styleName="titre" />
<g:Label ui:field="texteEflore" text="{constants.imageEflore}" styleName="petit" />
 
<g:Image ui:field="imageEflore" />
<g:VerticalPanel ui:field="panneauChargement" styleName="{style.panneauChargement}" >
<g:Image url="./img/wait.gif" ></g:Image>
</g:VerticalPanel>
<g:HorizontalPanel styleName="{style.fleches}">
<g:Image ui:field="scrollLeftImage" resource='{res.arrowLeft}'
styleName="gauche" visible="false" />
<g:Image ui:field="scrollRightImage" resource='{res.arrowRight}'
styleName="droite" visible="false" />
</g:HorizontalPanel>
 
<g:HTMLPanel ui:field="metadonneesEflore" styleName="{style.meta}">
<g:Label text="{constants.metadonneesPhoto}" styleName="titre" />
 
<g:Label text="{constants.taxon}" styleName="petit" />
<g:Label ui:field="nomEspeceEflore" />
 
<g:Label text="{constants.localite}" styleName="petit" />
<g:Label ui:field="localiteEflore" />
 
<g:Label text="{constants.auteur}" styleName="petit" />
<g:Label ui:field="nomAuteurEflore" />
 
<g:Label text="{constants.publieLe}" styleName="petit" />
<g:Label ui:field="dateObservationEflore" />
</g:HTMLPanel>
</g:VerticalPanel>
</g:HorizontalPanel>
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/comparaisoneflore/ComparaisonEflorePresenteur.java
New file
0,0 → 1,183
package org.tela_botanica.del.client.vues.comparaisoneflore;
 
import java.util.ArrayList;
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulairerechercheeflore.FormulaireRechercheEflorePresenteur;
import org.tela_botanica.del.client.composants.images.DetailImagePresenteur;
import org.tela_botanica.del.client.composants.images.DetailImageVue;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ImageServiceResultat;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.comparaisoneflore.EvenementComparaisonEflore;
import org.tela_botanica.del.client.navigation.evenement.comparaisoneflore.GestionnaireEvenementComparaisonEflore;
import org.tela_botanica.del.client.services.rest.ImageService;
import org.tela_botanica.del.client.services.rest.async.ImagesParTaxonCallback;
 
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.user.client.Window;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ComparaisonEflorePresenteur {
 
public interface Vue extends IsWidget {
public void chargerImagePrincipale(org.tela_botanica.del.client.modeles.Image image);
 
public void chargerImagesEflore(List<org.tela_botanica.del.client.modeles.Image> observationsEflore, int indexImage);
 
public HasClickHandlers getScrollLeftImage();
 
public HasClickHandlers getScrollRightImage();
 
public int getCurrentIndexImages();
 
public void startChargement();
 
public void stopChargement();
 
public void afficherAucuneImageTrouvee();
 
public HTMLPanel getFormulaireRecherche();
public void setCurrentIndexImages(int index);
public com.google.gwt.user.client.ui.Image getImagePrincipale();
public com.google.gwt.user.client.ui.Image getImageEflore();
}
 
private Vue vue;
private final ImageService imageService;
 
private Image imagePrincipale;
private String nomTaxonComparaison;
private List<org.tela_botanica.del.client.modeles.Image> imagesEflore = new ArrayList<Image>();
private int page = 0;
private int nbImagesPreFetch = 10;
 
public ComparaisonEflorePresenteur(Vue vue, ImageService imageService) {
this.vue = vue;
this.imagePrincipale = CacheClient.getInstance().getImageCourante();
this.nomTaxonComparaison = CacheClient.getInstance().getTaxonPourRechercheEflore();
this.imageService = imageService;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
vue.chargerImagePrincipale(imagePrincipale);
chargerObservationsEflore();
gererEvenements();
new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRecherche());
}
 
public void chargerObservationsEflore() {
 
int debut = (page * nbImagesPreFetch) + 1;
int fin = (page + 1) * nbImagesPreFetch;
 
vue.startChargement();
 
InformationsRecherche informationsRecherche = new InformationsRecherche();
informationsRecherche.setTaxon(nomTaxonComparaison);
 
ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
 
@Override
public void surRetour(ImageServiceResultat imagesRecues) {
if (imagesRecues == null || imagesRecues.getImages() == null || imagesRecues.getImages().size() == 0) {
vue.afficherAucuneImageTrouvee();
} else {
addImagesEflore(imagesRecues.getImages());
vue.stopChargement();
vue.chargerImagesEflore(imagesEflore, vue.getCurrentIndexImages());
}
}
 
@Override
public void surErreur(String messageErreur) {
vue.afficherAucuneImageTrouvee();
Window.alert(messageErreur);
}
 
};
 
imageService.getImagesParTaxon(informationsRecherche, debut, fin, callback);
 
}
 
private void gererEvenements() {
vue.getScrollLeftImage().addClickHandler(new ClickHandler() {
 
@Override
public void onClick(ClickEvent event) {
vue.chargerImagesEflore(imagesEflore, vue.getCurrentIndexImages() - 1);
}
});
 
vue.getScrollRightImage().addClickHandler(new ClickHandler() {
 
@Override
public void onClick(ClickEvent event) {
 
if (vue.getCurrentIndexImages() == imagesEflore.size() - 1) {
page += 1;
vue.setCurrentIndexImages(vue.getCurrentIndexImages()+1);
chargerObservationsEflore();
} else {
vue.chargerImagesEflore(imagesEflore, vue.getCurrentIndexImages() + 1);
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementComparaisonEflore.TYPE, new GestionnaireEvenementComparaisonEflore() {
 
@Override
public void onComparaisonEflore(EvenementComparaisonEflore event) {
nomTaxonComparaison = event.getTaxonDemande();
page=0;
vue.setCurrentIndexImages(0);
getImagesEflore().clear();
chargerObservationsEflore();
}
});
vue.getImagePrincipale().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
FenetreOverlaySimplePresenteur presenteurGalerie = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
presenteurGalerie.ouvrirFenetreModaleDefilante(0, new DetailImagePresenteur(imagePrincipale, new DetailImageVue()));
presenteurGalerie.afficherBoutonsSuivantsPrecedents(false);
}
});
vue.getImageEflore().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
FenetreOverlaySimplePresenteur presenteurGalerie = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
presenteurGalerie.ouvrirFenetreModaleDefilante(0, new DetailImagePresenteur(imagesEflore.get(vue.getCurrentIndexImages()), new DetailImageVue()));
presenteurGalerie.afficherBoutonsSuivantsPrecedents(false);
}
});
}
 
public List<org.tela_botanica.del.client.modeles.Image> getImagesEflore() {
return imagesEflore;
}
 
public void addImagesEflore(List<org.tela_botanica.del.client.modeles.Image> imagesEflore) {
this.imagesEflore.addAll(imagesEflore);
}
 
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/comparaisoneflore/ComparaisonEfloreVue.java
New file
0,0 → 1,202
package org.tela_botanica.del.client.vues.comparaisoneflore;
 
import java.util.List;
 
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.utils.StringUtils;
 
import com.google.gwt.core.client.GWT;
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.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class ComparaisonEfloreVue extends Composite implements ComparaisonEflorePresenteur.Vue {
 
interface MyUiBinder extends UiBinder<Widget, ComparaisonEfloreVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private int currentIndexImages=0;
 
@UiField
Label nomAuteur, dateObservation, famille, motsClefs, nomRetenu, nomCommun, localite, milieu, commentaires, nomEspeceEflore, nomAuteurEflore, localiteEflore, dateObservationEflore, texteEflore;
 
@UiField
Label nomAuteurTitre, dateObservationTitre, familleTitre, motsClefsTitre, nomRetenuTitre, nomCommunTitre, localiteTitre, milieuTitre, commentairesTitre;
 
@UiField
Image imagePrincipale, imageEflore, scrollLeftImage, scrollRightImage;
 
@UiField
Panel panneauChargement;
 
@UiField
HTMLPanel formulaireRecherche, metadonneesEflore;
 
public ComparaisonEfloreVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
public void chargerImagePrincipale(org.tela_botanica.del.client.modeles.Image image) {
 
// mots clefs
String motsClefsConcatenes = "";
try {
for (String motClef : image.getObservation().getMotsClefs()) {
motsClefsConcatenes += motClef + ",";
}
motsClefsConcatenes = motsClefsConcatenes.subSequence(0, motsClefsConcatenes.lastIndexOf(",")).toString();
} catch (Exception e) {
// TODO: handle exception
}
 
if (StringUtils.checkStringNotNull(motsClefsConcatenes)) {
motsClefs.setText(motsClefsConcatenes);
} else {
motsClefs.setVisible(false);
motsClefsTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getAuteur())) {
nomAuteur.setText(image.getObservation().getAuteur());
} else {
nomAuteur.setVisible(false);
nomAuteurTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getUrl())) {
imagePrincipale.setUrl(image.getUrl());
}
if (StringUtils.checkStringNotNull(image.getObservation().getDateReleve())) {
dateObservation.setText(image.getObservation().getDateReleve());
} else {
dateObservation.setVisible(false);
dateObservationTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getFamille())) {
famille.setText(image.getObservation().getFamille());
} else {
famille.setVisible(false);
familleTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getNomRetenu())) {
nomRetenu.setText(image.getObservation().getNomRetenuFormateReferentiel());
} else {
nomRetenu.setVisible(false);
nomRetenuTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getNomCommun())) {
nomCommun.setText(image.getObservation().getNomCommun());
} else {
nomCommun.setVisible(false);
nomCommunTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getLocaliteAvecIdFormatee())) {
localite.setText(image.getObservation().getLocaliteAvecIdFormatee());
} else {
localite.setVisible(false);
localiteTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getMilieu())) {
milieu.setText(image.getObservation().getMilieu());
} else {
milieu.setVisible(false);
milieuTitre.setVisible(false);
}
if (StringUtils.checkStringNotNull(image.getObservation().getCommentaire())) {
commentaires.setText(image.getObservation().getCommentaire());
} else {
commentaires.setVisible(false);
commentairesTitre.setVisible(false);
}
 
}
 
public void chargerImagesEflore(List<org.tela_botanica.del.client.modeles.Image> observationsEflore, int indexImage) {
 
texteEflore.setText(I18n.getVocabulary().imageEflore());
 
if (indexImage >= 0 && indexImage < observationsEflore.size()) {
currentIndexImages = indexImage;
}
 
org.tela_botanica.del.client.modeles.Image observationEflore = observationsEflore.get(currentIndexImages);
 
nomEspeceEflore.setText(observationEflore.getObservation().getNomRetenuFormateReferentiel());
nomAuteurEflore.setText(observationEflore.getObservation().getAuteur());
imageEflore.setUrl(observationEflore.getUrl());
dateObservationEflore.setText(observationEflore.getObservation().getDateReleve());
localiteEflore.setText(observationEflore.getObservation().getLocalite());
metadonneesEflore.setVisible(true);
imageEflore.setVisible(true);
 
if (observationsEflore.size() > 1) {
scrollLeftImage.setVisible(true);
scrollRightImage.setVisible(true);
}
}
 
public void setScrollLeftImage(Image scrollLeftImage) {
this.scrollLeftImage = scrollLeftImage;
}
 
public int getCurrentIndexImages() {
return currentIndexImages;
}
 
@Override
public HasClickHandlers getScrollLeftImage() {
return scrollLeftImage;
}
 
@Override
public HasClickHandlers getScrollRightImage() {
return scrollRightImage;
}
 
public void startChargement() {
texteEflore.setText(I18n.getVocabulary().chargement());
metadonneesEflore.setVisible(false);
imageEflore.setVisible(false);
scrollLeftImage.setVisible(false);
scrollRightImage.setVisible(false);
panneauChargement.setVisible(true);
}
 
public void stopChargement() {
panneauChargement.setVisible(false);
}
 
public void afficherAucuneImageTrouvee() {
texteEflore.setText(I18n.getVocabulary().aucunResultat());
scrollLeftImage.setVisible(false);
scrollRightImage.setVisible(false);
panneauChargement.setVisible(false);
}
 
public Label getNomAuteur() {
return nomAuteur;
}
 
public Image getImagePrincipale() {
return imagePrincipale;
}
 
public HTMLPanel getFormulaireRecherche() {
return formulaireRecherche;
}
 
public void setCurrentIndexImages(int index){
currentIndexImages=index;
}
 
public Image getImageEflore() {
return imageEflore;
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/comparaisoneflore/comparaisonEflore.css
New file
0,0 → 1,49
.zoneComparaison {
width: 50%;
margin: 0 auto;
height: 100%
}
 
.photoComparee {
width: 500px;
margin-left: 5px;
padding: 20px;
border: #DDD solid 1px;
}
 
.photoPrincipale img,.photoComparee img {
-moz-box-shadow: 4px 4px 2px #AAA;
cursor: pointer;
}
 
.panneauChargement img{
-moz-box-shadow: none;
}
 
.photoPrincipale {
width: 500px;
border: #DDD solid 1px;
padding: 20px;
height: 100%
}
 
.fleches {
position: absolute;
margin-left: -20px;
padding: 20px;
margin-top: -50px;
width: 500px;
}
 
.fleches img {
cursor: pointer;
-moz-box-shadow: 0px 0px 0px #000
}
 
.meta {
color: white;
background: #333;
padding: 10px;
opacity: 0.8em;
margin-top: 5px
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/ligneProtocole/LigneProtocoleVue.java
New file
0,0 → 1,30
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination.ligneProtocole;
 
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.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.Widget;
 
public class LigneProtocoleVue extends Composite implements LigneProtocolePresenteur.Vue {
@UiField
Panel zoneVote;
interface LigneProtocoleUIiBinder extends UiBinder<Widget, LigneProtocoleVue> {
};
 
private static LigneProtocoleUIiBinder uiBinder = GWT.create(LigneProtocoleUIiBinder.class);
 
public LigneProtocoleVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
@Override
public HasWidgets getZoneVote() {
return this.zoneVote;
}
 
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/ligneProtocole/ligneProtocole.css
New file
0,0 → 1,7
.nomProtocole {
font-size: 11px;
overflow: hidden;
text-overflow: ellipsis;
width: 87px;
margin-bottom:15px;
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/ligneProtocole/LigneProtocoleVue.ui.xml
New file
0,0 → 1,10
<!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:forum="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:style src="ligneProtocole.css" />
<g:HorizontalPanel styleName="vote">
<g:HTMLPanel ui:field="zoneVote" />
</g:HorizontalPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/ligneProtocole/LigneProtocolePresenteur.java
New file
0,0 → 1,59
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination.ligneProtocole;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVotePresenteur;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVoteVue;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
import org.tela_botanica.del.client.services.rest.VoteProtocoleServiceConcret;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class LigneProtocolePresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
 
HasWidgets getZoneVote();
}
 
private Vue vue;
private Protocole protocole;
 
public LigneProtocolePresenteur(Protocole protocole, Vue vue) {
this.vue = vue;
this.protocole = protocole;
chargerValeursProtocolePourImageCourante();
}
public void chargerValeursProtocolePourImageCourante(){
vue.getZoneVote().clear();
Image imageCourante = CacheClient.getInstance().getImageCourante();
MoyenneVotePresenteur votePresenteur = new MoyenneVotePresenteur(imageCourante, protocole, new MoyenneVoteVue(), new VoteProtocoleServiceConcret());
votePresenteur.go(vue.getZoneVote());
}
 
public Vue getVue() {
return vue;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
gererEvenements();
}
 
@Override
protected void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
 
@Override
public void onChangementImage(EvenementChangementImageValidation event) {
chargerValeursProtocolePourImageCourante();
}
});
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/determinationVue.css
New file
0,0 → 1,120
.pageDetermination {
}
.metadonnees {
margin-bottom:10px;
margin-top:10px;
display:inline-block;
}
.limiteZoneMenu {
max-width:840px;
margin-bottom:10px;
}
.limiteZoneMetadonnees {
width:840px;
}
.zoneVote {
margin-left: 5px;
height: 100%;
display:inline-block;
vertical-align:top;
border-left: solid 1px #DDD;
border-right: solid 1px #DDD;
padding-left: 10px;
padding-right:10px;
text-align:left;
}
.taxonPlusProbable {
float: left;
}
.zoneBarreRepartition {
border: solid 1px #DDD;
padding: 15px;
}
.zoneDetailImage {
height: 100%;
width: 255px;
display:inline-block;
vertical-align:top;
text-align:left;
clear: left;
}
.zoneImage {
margin-bottom: 10px;
margin-right: 15px
}
.zoneImage div {
clear: left;
padding-top: 5px;
}
.zoneImage div img {
float: left;
padding: 0 5px 5px 0;
}
.boutonProposer {
float: left;
padding: 5px;
cursor: pointer;
background:#8EB533;
border:none;
margin-right:10px;
margin-top:10px;
}
.boutonValiderTaxon {
margin-top: -7px;
}
.zoneOutils {
width: 15%;
padding-left:10px;
display:inline-block;
vertical-align:top;
text-align:left;
}
.boutons {
margin-bottom:15px;
}
.lienProposerObservation {
margin-left:65px;
margin-top:10px;
margin-bottom:10px;
}
.nomTaxonProbable {
padding-left:3px;
}
.taxonProbable {
background: none repeat scroll 0 0 #F8F8C3;
clear: left;
font-size: 15px;
margin-bottom: 5px;
padding: 13px 9px;
}
.voteProtocole div {
margin-bottom:10px;
}
.voteProtocole div div {
margin-bottom:0px;
border:solid 0px red
}
.autreOutils {
margin-top:15px;
}
.zonerss {
margin-top:5px;
}
.lienProposerImage {
margin-top:20px;
margin-left:70px;
margin-bottom:10px;
}
.lienAide {
margin-right:70px;
padding:4px 15px;
margin-top:10px;
float:right;
color:white;
}
.btnDepublierObs {
background:url("./img/16x16/depublier.png") 5px 5px no-repeat;
padding: 5px 5px 5px 23px;
}
.btnDepublierObs:hover {
background:#8EB533 url("./img/16x16/depublier_actif.png") 5px 5px no-repeat;
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/IdentiplanteDeterminationVue.ui.xml
New file
0,0 → 1,53
<!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:forum="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="determinationVue.css" />
<g:HTMLPanel styleName="{style.pageDetermination}">
<g:HTMLPanel styleName="limiteMax">
<g:HTMLPanel styleName="{style.limiteZoneMenu}">
<g:Hyperlink ui:field="lienRetour" styleName="lienRetour">Retour</g:Hyperlink>
<g:HTMLPanel ui:field="zoneActionsObs">
<g:Button ui:field="btnDepublierObs" text="{constants.depublierObs}" styleName="droite bouton {style.btnDepublierObs}" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.limiteZoneMetadonnees}">
<g:HTMLPanel ui:field="metadonnees" styleName="{style.metadonnees}" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="contenuCentre">
<g:HTMLPanel styleName="{style.zoneDetailImage}">
<g:VerticalPanel ui:field="detailImageObservation" styleName="{style.zoneImage}" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneVote}">
<g:Label styleName="titre" text="{constants.titreDetermination}" />
<g:HTMLPanel styleName="nettoyage {style.boutons}">
<g:Button text="{constants.proposerSaDetermination}" ui:field="boutonAjoutProposition" styleName="bouton" />
<g:Button text="{constants.ajouterCommentaire}" ui:field="boutonAjoutCommentaire" styleName="bouton" />
<g:HTMLPanel ui:field="zoneRss" styleName="droite {style.zonerss}"></g:HTMLPanel>
</g:HTMLPanel>
<g:VerticalPanel ui:field="forum" />
<g:HTMLPanel styleName="nettoyage {style.boutons}">
<g:Button text="{constants.proposerSaDetermination}" ui:field="boutonAjoutPropositionBas" styleName="bouton" />
<g:Button text="{constants.ajouterCommentaire}" ui:field="boutonAjoutCommentaireBas" styleName="bouton" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneOutils}">
<g:Label text="Pour vous aider : " styleName="titre3"></g:Label>
<g:VerticalPanel ui:field="formulaireRechercheEflore"/>
<g:Label styleName="{style.autreOutils} sousTitre">Vérifier sa détermination</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienEflore">eFlore</g:Label>
<g:Label styleName="{style.autreOutils} sousTitre">Autres outils en ligne</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienOuvrages">Flores numérisées</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienBonnier">Flore Bonnier interactive</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienCles">Clés de détermination</g:Label>
</g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/IdentiplanteDeterminationPresenteur.java
New file
0,0 → 1,325
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination;
 
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
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.composants.metadonnees.MetadonneesEnLigneVue;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
import org.tela_botanica.del.client.composants.observations.ObservationImagesPresenteur;
import org.tela_botanica.del.client.composants.observations.ObservationImagesVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.rss.RssPresenteur;
import org.tela_botanica.del.client.composants.rss.RssVue;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
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.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
import org.tela_botanica.del.client.navigation.evenement.depublierObs.EvenementDepublierObs;
import org.tela_botanica.del.client.navigation.evenement.depublierObs.GestionnaireEvenementDepublierObs;
import org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination.EvenementValidationPropositionDetermination;
import org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination.GestionnaireEvenementValidationPropositionDetermination;
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.services.rest.CommentaireServiceConcret;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
import org.tela_botanica.del.client.services.rest.async.DepublicationObservationCallBack;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
import org.tela_botanica.del.client.services.rest.async.ValidationPropositionCallback;
import org.tela_botanica.del.client.utils.ModerationUtils;
import org.tela_botanica.del.client.utils.URLUtils;
import org.tela_botanica.del.client.navigation.evenement.rechercheobservation.EvenementRechercheObservation;
import org.tela_botanica.del.client.composants.formulairerechercheeflore.FormulaireRechercheEflorePresenteur;
import org.tela_botanica.del.client.composants.forum.ForumPresenteur;
import org.tela_botanica.del.client.composants.forum.ForumVue;
 
import com.google.gwt.core.shared.GWT;
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.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Panel;
 
public class IdentiplanteDeterminationPresenteur extends Presenteur {
 
/**
* Vue de l'interface de détermination
* */
public interface Vue extends IsWidget {
public HasWidgets getForum();
 
public HasWidgets getDetailImageObservation();
 
public HasWidgets getFormulaireRechercheEflore();
 
public HasClickHandlers getBoutonAjoutProposition();
 
public HasClickHandlers getBoutonAjoutCommentaire();
 
public HasClickHandlers getBoutonAjoutPropositionBas();
 
public HasClickHandlers getBoutonAjoutCommentaireBas();
public HasClickHandlers getBoutonDepublierObs();
 
public HasWidgets getMetadonnees();
public HasClickHandlers getLienOuvrages();
public HasClickHandlers getLienBonnier();
public HasClickHandlers getLienCles();
public HasClickHandlers getLienEflore();
public HasWidgets getZoneRss();
 
public void viderMetadonnees();
public void viderForum();
void afficherZoneActionsObs();
void cacherZoneActionsObs();
}
 
private Observation observation;
private Vue vue;
private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
 
// Déclaration des services à utiliser
private ObservationService observationService;
 
private CacheClient cache = CacheClient.getInstance();
 
public IdentiplanteDeterminationPresenteur(Vue vue, ObservationService observationService) {
this.vue = vue;
this.observationService = observationService;
}
 
public void go(final HasWidgets composite) {
// TODO afficher une icone de chargement si le chargement devient trop
// long car tout l'écran est asynchrone ici
String observationId = URLUtils.getURLSpecialParameterValue();
observationService.getObservation(observationId, new ObservationsCallback() {
@Override
public void surRetour(ObservationServiceResultat objetRetour) {
observation = cache.getObservationCourante();
afficherRss(cache.getObservationCourante());
// trouve l'image courante si elle n'est pas deja en cache
List<Image> listeImages = cache.getObservationCourante().getImages();
if (listeImages.size() > 0) {
CacheClient.getInstance().setImageCourante(listeImages.get(0));
} else {
CacheClient.getInstance().setImageCourante(null);
}
new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
new ForumPresenteur(new ForumVue()).go(vue.getForum());
new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRechercheEflore());
 
composite.add(vue.asWidget());
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur + " - l'identifiant d'observation est incorrect; l'observation a peut-être été supprimée");
}
});
afficherZoneActionsObs();
gererEvenements();
}
 
public void afficherRss(Observation observation) {
new RssPresenteur(new RssVue(), observation, "Suivre cette observation").go(vue.getZoneRss());
}
 
public void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
@Override
public void onAjoutDetermination(EvenementAjoutDetermination event) {
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
@Override
public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
@Override
public void onChangementImage(EvenementChangementImageValidation event) {
vue.getDetailImageObservation().clear();
new ObservationImagesPresenteur(
new ObservationImagesVue(),
cache.getObservationCourante(),
CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
}
});
 
ClickHandler clicAjoutProposition = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
}
};
vue.getBoutonAjoutProposition().addClickHandler(clicAjoutProposition);
vue.getBoutonAjoutPropositionBas().addClickHandler(clicAjoutProposition);
 
ClickHandler clicAjoutCommentaire = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(cache.getObservationCourante(), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
}
};
vue.getBoutonAjoutCommentaire().addClickHandler(clicAjoutCommentaire);
vue.getBoutonAjoutCommentaireBas().addClickHandler(clicAjoutCommentaire);
 
vue.getLienOuvrages().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("ouvragesFlore"), "Flores numérisées", config.getInfo("popupOptions"));
}
});
 
vue.getLienBonnier().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("bonnierPda"), "Flore Bonnier PDA", config.getInfo("popupOptions"));
}
});
vue.getLienCles().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("clesDetermination"), "Clés de determination", config.getInfo("popupOptions"));
}
});
vue.getLienEflore().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("eflore"), "eFlore", config.getInfo("popupOptions"));
}
});
vue.getBoutonDepublierObs().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
GWT.log("Lancer evnt : EvenementDepublierObs");
if (Window.confirm(I18n.getVocabulary().confirmationDepublicationObs())) {
BusEvenementiel.getInstance().fireEvent(new EvenementDepublierObs(observation.getId()));
}
}
});
BusEvenementiel.getInstance().addHandler(EvenementDepublierObs.TYPE, new GestionnaireEvenementDepublierObs() {
@Override
public void onDepublicationObs(EvenementDepublierObs event) {
GWT.log("Attraper evnt : EvenementDepublierObs (obs:"+event.getIdObs()+")");
if (event.getIdObs().equals(observation.getId())) {
depublierObs();
}
}
});
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
@Override
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
afficherZoneActionsObs();
}
});
BusEvenementiel.getInstance().addHandler(EvenementValidationPropositionDetermination.TYPE, new GestionnaireEvenementValidationPropositionDetermination() {
@Override
public void onValidationPropositionDetermination(EvenementValidationPropositionDetermination event) {
String observationId = URLUtils.getURLSpecialParameterValue();
observationService.getObservation(observationId, new ObservationsCallback() {
 
@Override
public void surRetour(ObservationServiceResultat objetRetour) {
vue.viderMetadonnees();
new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
rechargerForum();
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
}
});
}
});
}
private void rechargerForum() {
vue.viderForum();
new ForumPresenteur(new ForumVue()).go(vue.getForum());
}
private void depublierObs() {
if (ModerationUtils.utilisateurPeutDepublierObs(CacheClient.getInstance().getUtilisateur())) {
GWT.log("depublierObs :"+observation.getId());
observationService.depublier(observation, new DepublicationObservationCallBack() {
@Override
public void surRetour(String depublicationOk) {
GWT.log("Dépublication obs "+observation.getId()+" "+depublicationOk);
if (depublicationOk.equals("OK")) {
BusEvenementiel.getInstance().fireEvent(new EvenementRechercheObservation());
}
}
});
}
}
private void afficherZoneActionsObs() {
if (ModerationUtils.utilisateurPeutDepublierObs(CacheClient.getInstance().getUtilisateur())) {
vue.afficherZoneActionsObs();
} else {
vue.cacherZoneActionsObs();
}
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/detail/DetailImageObservationVue.java
New file
0,0 → 1,38
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination.detail;
 
 
 
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.Composite;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
 
public class DetailImageObservationVue extends Composite implements DetailImageObservationPresenteur.Vue {
 
@UiField
protected Image imageObservation;
 
@UiField
protected Label nomObservateur, nomRetenu, dateObservation, famille, localite;
 
private static DetailImageObservationUIiBinder uiBinder = GWT.create(DetailImageObservationUIiBinder.class);
 
interface DetailImageObservationUIiBinder extends UiBinder<Widget, DetailImageObservationVue> {
};
 
public DetailImageObservationVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
public void chargerInformationsObservation(org.tela_botanica.del.client.modeles.Image image) {
imageObservation.setUrl(image.getUrl());
nomObservateur.setText(image.getObservation().getAuteur());
nomRetenu.setText(image.getObservation().getNomRetenuFormateReferentiel());
famille.setText(image.getObservation().getFamille());
localite.setText(image.getObservation().getLocalite());
dateObservation.setText(image.getObservation().getDateReleve());
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/detail/detailObservation.css
New file
0,0 → 1,27
.detailObservation {
font-size: 11px;
position: absolute;
padding: 5px;
color: white;
background: #333;
opacity: 0.8;
margin-top: -80px;
width: 230px;
}
 
.observateur td {
font-size: 11px;
white-space: nowrap
}
 
.date {
}
 
.nomRetenu {
font-weight: bold
}
 
.dateObservation {
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/detail/DetailImageObservationVue.ui.xml
New file
0,0 → 1,36
<!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'>
 
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="detailObservation.css" />
<g:VerticalPanel>
<g:Image ui:field="imageObservation"/>
<g:VerticalPanel ui:field="detailObservation" styleName="{style.detailObservation}">
<g:HorizontalPanel styleName="{style.observateur}">
<!-- g:Label text="{constants.observateur} : "/ -->
<g:Label ui:field="nomObservateur" /><g:HTML>&nbsp;-&nbsp;</g:HTML><g:Label ui:field="localite" /><g:HTML>&nbsp;-&nbsp;</g:HTML><g:Label ui:field="dateObservation" />
</g:HorizontalPanel>
<g:HorizontalPanel>
<!-- <g:Label text="{constants.nom_retenu} : "/> -->
<g:Label ui:field="nomRetenu" styleName="{style.nomRetenu}"/>
</g:HorizontalPanel>
<g:HorizontalPanel styleName="{style.date}">
<!-- <g:Label text="{constants.date_observation} : "/> -->
</g:HorizontalPanel>
<g:HorizontalPanel>
<!-- <g:Label text="{constants.famille} : "/> -->
<g:HorizontalPanel><g:Label ui:field="famille" /></g:HorizontalPanel>
</g:HorizontalPanel>
<g:HorizontalPanel>
<!-- <g:Label text="{constants.localite} : "/> -->
</g:HorizontalPanel>
</g:VerticalPanel>
</g:VerticalPanel>
 
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/detail/DetailImageObservationPresenteur.java
New file
0,0 → 1,24
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination.detail;
 
import org.tela_botanica.del.client.cache.CacheClient;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class DetailImageObservationPresenteur {
public interface Vue extends IsWidget {
public void chargerInformationsObservation(org.tela_botanica.del.client.modeles.Image image);
}
 
private Vue vue;
public DetailImageObservationPresenteur(Vue vue) {
this.vue = vue;
}
 
public void go(HasWidgets composite) {
vue.chargerInformationsObservation(CacheClient.getInstance().getImageCourante());
composite.add(vue.asWidget());
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/plateformedetermination/IdentiplanteDeterminationVue.java
New file
0,0 → 1,126
package org.tela_botanica.del.client.vues.identiplante.plateformedetermination;
 
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
 
import com.google.gwt.core.client.GWT;
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.HasWidgets;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class IdentiplanteDeterminationVue extends Composite implements IdentiplanteDeterminationPresenteur.Vue {
 
@UiField
Panel forum, detailImageObservation, formulaireRechercheEflore, zoneRss, zoneActionsObs;
@UiField
Label lienOuvrages, lienEflore, lienBonnier, lienCles;
@UiField
Hyperlink lienRetour;
@UiField
Button btnDepublierObs, boutonAjoutProposition, boutonAjoutPropositionBas, boutonAjoutCommentaire, boutonAjoutCommentaireBas;
@UiField
Panel metadonnees;
 
interface DeterminationUIiBinder extends UiBinder<Widget, IdentiplanteDeterminationVue> {
};
 
private static DeterminationUIiBinder uiBinder = GWT.create(DeterminationUIiBinder.class);
 
public IdentiplanteDeterminationVue() {
initWidget(uiBinder.createAndBindUi(this));
lienRetour.setTargetHistoryToken(ConstantesNavigation.HOME);
}
 
public Panel getForum() {
return forum;
}
 
public Panel getDetailImageObservation() {
return detailImageObservation;
}
 
public Panel getFormulaireRechercheEflore() {
return formulaireRechercheEflore;
}
 
public Button getBoutonAjoutProposition() {
return boutonAjoutProposition;
}
public Button getBoutonAjoutPropositionBas() {
return boutonAjoutPropositionBas;
}
@Override
public HasClickHandlers getBoutonDepublierObs() {
return btnDepublierObs;
}
public Panel getMetadonnees() {
return metadonnees;
}
 
public Button getBoutonAjoutCommentaire() {
return boutonAjoutCommentaire;
}
public Button getBoutonAjoutCommentaireBas() {
return boutonAjoutCommentaireBas;
}
 
@Override
public HasClickHandlers getLienOuvrages() {
return lienOuvrages;
}
 
@Override
public HasClickHandlers getLienBonnier() {
return lienBonnier;
}
@Override
public HasClickHandlers getLienCles() {
return lienCles;
}
 
@Override
public HasClickHandlers getLienEflore() {
return lienEflore;
}
@Override
public HasWidgets getZoneRss() {
return zoneRss;
}
 
@Override
public void viderMetadonnees() {
metadonnees.clear();
}
@Override
public void cacherZoneActionsObs() {
zoneActionsObs.setVisible(false);
}
@Override
public void afficherZoneActionsObs() {
zoneActionsObs.setVisible(true);
}
 
@Override
public void viderForum() {
forum.clear();
}
}
 
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/ResultatsIdentiplante.css
New file
0,0 → 1,48
 
.zoneObservation {
width: 100%;
clear: left;
margin-top: 10px;
}
 
.barreNavigation {
margin-top: 0;
padding-bottom: 20px;
}
 
.votes {
padding-left: 10px;
cursor: pointer;
}
 
.date {
padding-left: 10px;
cursor: pointer;
}
 
.zoneTri {
padding-left: 10px;
}
 
.boutonTriAsc, .boutonTriDesc {
border:none;
cursor:pointer;
}
.boutonTriAsc:hover, .boutonTriDesc:hover {
border-bottom:dotted 1px #8EB533
}
 
.boutonTriAsc {
height: 19px;
background: url(./img/fleche-haut.png) no-repeat
}
 
.boutonTriDesc {
height: 19px;
background: url(./img/fleche-bas.png) no-repeat
}
 
.aucunResultat{
text-align: left;
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observations/observation.css
New file
0,0 → 1,109
.observation {
width:580px;
padding:10px;
margin-right:5px;
border:solid 1px #DDD;
}
.titrePropositions {
margin-top:0;
background:none;
}
.listePropositions {
background:none repeat scroll 0 0 #FAFAF0;
border-color:#DDDDDD;
border-radius:10px;
border-style:solid;
border-width:1px;
box-shadow:2px 2px 2px #DDDDDD;
min-height:250px;
padding:10px;
width:370px;
}
.nomEspece {
padding:7px;
font-size:15px;
font-weight:bold;
background:rgba(100,100,100,0.5);
color:white;
cursor:pointer;
position:absolute;
width:236px;
}
.nomEspece:hover {
background:#8EB533;
}
.colonneImages {
width: 300px;
background:url(./img/pasdephoto.jpg) no-repeat;
}
.description {
border:solid 1px #EEE;
border-width:0 1px 0 0;
width:270px;
padding:10px;
margin:0 1px 5px 0;
height:150px
}
.determination {
padding:10px;
margin:0 1px 5px 0;
height:150px
}
.photoPrincipale {
height:20px;
float:left;
padding:5px;
margin-bottom:15px;
cursor:pointer
}
.panneauDeterminations {
text-align:right
}
.lienDetermination {
text-align:center;
padding:5px;
color:blue;
cursor:pointer;
float:right;
margin:5px;
text-decoration:underline;
}
.miniatures img {
height:30px
}
.metadonnees {
width:280px;
}
.boutonDetermination {
background:url("./img/add.png") no-repeat scroll 5px 7px #DDDDDD;
border:1px solid #AAAAAA;
cursor:pointer;
float:right;
margin-bottom:5px;
margin-right:5px;
margin-top:10px;
padding:5px 5px 5px 25px;
}
.ligneObservation {
margin-bottom:20px;
}
.boutonDetermination:hover {
background-color:#AAA
}
.accesOutil {
margin-top:15px;
}
.ajouterProposition {
margin-top:10px;
}
.plusDeDetails {
width: 130px;
}
.evenements {
background-color: #eaedcd;
border: 1px solid #eaedcd;
border-radius: 5px;
margin-bottom: 3px;
padding: 4px;
font-size: 14px;
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observations/ObservationVue.ui.xml
New file
0,0 → 1,41
<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="observation.css" />
<g:HTMLPanel styleName="{style.ligneObservation} limiteMin">
<g:HTML styleName="{style.evenements}" ui:field="messageEvenements"></g:HTML>
<g:HTMLPanel styleName="gauche ombre-faible arrondi {style.observation}">
<g:HTMLPanel styleName="colonne {style.colonneImages}">
<g:Label ui:field="nomEspece" styleName="{style.nomEspece}"></g:Label>
<g:HTMLPanel ui:field="imagesPanel" />
</g:HTMLPanel>
<g:HTMLPanel styleName="colonne">
<g:HTMLPanel ui:field="metadonnees" styleName="{style.metadonnees}" />
</g:HTMLPanel>
<g:HTML>
<br class="nettoyage" />
</g:HTML>
</g:HTMLPanel>
<g:HTMLPanel styleName="gauche {style.listePropositions}">
<g:HTMLPanel styleName="{style.panneauDeterminations}">
<g:Label styleName="titre2 {style.titrePropositions}">Propositions des membres du réseau</g:Label>
<g:HTMLPanel ui:field="determinationsPanel" />
<g:HTMLPanel styleName="nettoyage">
<g:Button ui:field="boutonAjoutProposition" styleName="bouton-petit {style.ajouterProposition}"
text="{constants.proposerSaDetermination}" />
<g:Button ui:field="boutonAjoutCommentaire" styleName="bouton-petit"
text="{constants.ajouterCommentaire}" />
<g:Button ui:field="boutonPlusDeDetails" styleName="bouton-petit {style.ajouterProposition} {style.plusDeDetails}"
text="Voir tous les commentaires" />
</g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
<hr class="nettoyage" />
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observations/ObservationPresenteur.java
New file
0,0 → 1,192
package org.tela_botanica.del.client.vues.identiplante.resultats.observations;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesVue;
import org.tela_botanica.del.client.composants.observations.ObservationImagesPresenteur;
import org.tela_botanica.del.client.composants.observations.ObservationImagesVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.modeles.EvenementObs;
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.ajoutcommentaire.EvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
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.navigation.evenement.validationobservation.EvenementValidation;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
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.gestionhistorique.ConstantesNavigation;
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
import org.tela_botanica.del.client.utils.StringUtils;
import org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations.ObservationDeterminationPresenteur;
import org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations.ObservationDeterminationVue;
 
import com.gargoylesoftware.htmlunit.html.Util;
import com.google.gwt.core.shared.GWT;
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.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ObservationPresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public HasClickHandlers getBoutonAjoutProposition();
 
public HasWidgets getDeterminationsPanel();
 
public HasWidgets getImagesPanel();
 
public HasWidgets getMetadonneesPanel();
public HasClickHandlers getNomEspece();
 
public void setNomEspece(String nomEspece);
public void setNbCommentaires(String nbCommentaires);
public HasClickHandlers getBoutonAjoutCommentaire();
public HasClickHandlers getBoutonPlusDeDetails();
 
public void afficherEvenementsObservation(String evenementsObs);
 
public void cacherEvenementsObservation();
 
public void mettreEnValeurEvenementsObs();
}
 
private Vue vue;
 
private Observation observation;
private Image imagePrincipale;
 
private ObservationDeterminationPresenteur observationDeterminationPresenteur;
 
private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
 
public ObservationPresenteur(Vue vue, Observation observation, Image imagePrincipale) {
this.observation = observation;
this.vue = vue;
this.imagePrincipale=imagePrincipale;
chargerObservation();
}
 
public void chargerObservation() {
new ObservationImagesPresenteur(new ObservationImagesVue(), observation, imagePrincipale).go(vue.getImagesPanel());
new MetadonneesPresenteur(new MetadonneesVue(), observation, ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonneesPanel());
observationDeterminationPresenteur = new ObservationDeterminationPresenteur(new ObservationDeterminationVue(), observation.getPropositionDeterminations());
observationDeterminationPresenteur.go(vue.getDeterminationsPanel());
vue.setNomEspece(observation.getNomRetenu());
vue.setNbCommentaires(observation.getNbCommentaires());
gererAffichageEvenementsObs();
gererEvenements();
}
 
private void gererAffichageEvenementsObs() {
if(!observation.getEvenementsAssocies().isEmpty()) {
List<EvenementObs> evts = observation.getEvenementsAssocies();
StringBuilder stb = new StringBuilder();
stb.append("<ul class=\"listeEvenementsObs\">");
for (Iterator<EvenementObs> iterator = evts.iterator(); iterator.hasNext();) {
EvenementObs evt = iterator.next();
stb.append("<li>");
stb.append(StringUtils.getCorrespondanceChaineEvenementObs(evt.getType()));
if(!evt.getInfosComplementaires().isEmpty()) {
String infos = StringUtils.ellipsize(evt.getInfosComplementaires(), 50, 10);
String classeEvt = StringUtils.getClasseEvenementObs(evt.getType());
stb.append("&nbsp;<span class=\"evtObsinfosComplementaires "+classeEvt+"\">"+infos+"</span>");
}
stb.append("</li>");
}
stb.append("</ul>");
vue.afficherEvenementsObservation(stb.toString());
} else {
vue.cacherEvenementsObservation();
}
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
}
 
protected void gererEvenements() {
 
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
@Override
public void onAjoutDetermination(EvenementAjoutDetermination event) {
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
ajouterPropositionDetermination(event.getPropositionDetermination());
}
}
});
 
vue.getBoutonAjoutProposition().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
List<Image> images = observation.getImages();
if (images.size() > 0) {
CacheClient.getInstance().setImageCourante(images.get(0));
} else {
CacheClient.getInstance().setImageCourante(null);
}
CacheClient.getInstance().setObservationCourante(observation);
fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
}
});
ClickHandler versDetails = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
BusEvenementiel.getInstance().fireEvent(new EvenementValidation(observation));
}
};
vue.getNomEspece().addClickHandler(versDetails);
vue.getBoutonPlusDeDetails().addClickHandler(versDetails);
vue.getBoutonAjoutCommentaire().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(observation, new CommentaireServiceConcret(), new FormulaireCommentaireVue());
fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
}
});
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
 
@Override
public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
}
 
private void ajouterPropositionDetermination(PropositionDetermination propositionDetermination) {
observationDeterminationPresenteur.setPropositions(observation.getPropositionDeterminations());
}
 
public void mettreEnValeurEvenementsObs() {
vue.mettreEnValeurEvenementsObs();
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observations/ObservationVue.java
New file
0,0 → 1,98
package org.tela_botanica.del.client.vues.identiplante.resultats.observations;
 
 
import com.google.gwt.core.client.GWT;
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.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class ObservationVue extends Composite implements ObservationPresenteur.Vue {
 
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, ObservationVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
 
@UiField
Button boutonAjoutProposition, boutonAjoutCommentaire, boutonPlusDeDetails;
 
@UiField
Panel determinationsPanel, imagesPanel, metadonnees;
@UiField Label nomEspece;
@UiField HTML messageEvenements;
 
public ObservationVue() {
initWidget(binder.createAndBindUi(this));
}
 
@Override
public HasClickHandlers getBoutonAjoutProposition() {
return boutonAjoutProposition;
}
@Override
public HasClickHandlers getBoutonAjoutCommentaire() {
return boutonAjoutCommentaire;
}
@Override
public HasClickHandlers getBoutonPlusDeDetails() {
return boutonPlusDeDetails;
}
 
public Panel getDeterminationsPanel() {
return determinationsPanel;
}
 
public void setDeterminationsPanel(Panel determinationsPanel) {
this.determinationsPanel = determinationsPanel;
}
 
public Panel getImagesPanel() {
return imagesPanel;
}
public Panel getMetadonneesPanel() {
return metadonnees;
}
 
@Override
public HasClickHandlers getNomEspece() {
return nomEspece;
}
 
@Override
public void setNomEspece(String nomEspece) {
this.nomEspece.setText(nomEspece);
}
 
@Override
public void setNbCommentaires(String nbCommentaires) {
boutonPlusDeDetails.setText(boutonPlusDeDetails.getText()+" ("+nbCommentaires+")");
}
 
@Override
public void afficherEvenementsObservation(String evenementsObs) {
messageEvenements.setHTML(evenementsObs);
messageEvenements.setVisible(true);
}
 
public void cacherEvenementsObservation() {
messageEvenements.setVisible(false);
}
 
@Override
public void mettreEnValeurEvenementsObs() {
messageEvenements.addStyleName("evenementsNouveaux");
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/votes/DetailVoteObservationVue.java
New file
0,0 → 1,40
package org.tela_botanica.del.client.vues.identiplante.resultats.votes;
 
 
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.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class DetailVoteObservationVue extends Composite implements DetailVoteObservationPresenteur.Vue {
 
interface Binder extends UiBinder<Widget, DetailVoteObservationVue> {}
 
private static Binder binder = GWT.create(Binder.class);
 
protected @UiField Panel zoneCertitude, zoneCommentaires, zoneNomEspece, zoneVoter;
public DetailVoteObservationVue() {
initWidget(binder.createAndBindUi(this));
}
public HasWidgets getZoneCertitude() {
return zoneCertitude;
}
public HasWidgets getZoneCommentaires() {
return zoneCommentaires;
}
public HasWidgets getZoneNomEspece() {
return zoneNomEspece;
}
public HasWidgets getZoneVoter() {
return zoneVoter;
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/votes/DetailVoteObservationVue.ui.xml
New file
0,0 → 1,12
<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"/>
 
<g:HTMLPanel>
<g:HTMLPanel ui:field="zoneCertitude" />
<g:HTMLPanel ui:field="zoneCommentaires" />
<g:HTMLPanel ui:field="zoneNomEspece" />
<g:HTMLPanel ui:field="zoneVoter" />
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/votes/DetailVoteObservationPresenteur.java
New file
0,0 → 1,41
package org.tela_botanica.del.client.vues.identiplante.resultats.votes;
 
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVotePresenteur;
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVoteVue;
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.services.CalculVoteDeterminationService;
import org.tela_botanica.del.client.services.rest.VoteDeterminationServiceConcret;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class DetailVoteObservationPresenteur {
 
public interface Vue extends IsWidget {
public HasWidgets getZoneCertitude();
 
public HasWidgets getZoneCommentaires();
 
public HasWidgets getZoneNomEspece();
 
public HasWidgets getZoneVoter();
}
 
private Vue vue;
private PropositionDetermination proposition;
 
public DetailVoteObservationPresenteur(Vue vue, PropositionDetermination proposition) {
this.vue = vue;
this.proposition = proposition;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
BarreRepartitionVotePresenteur presenteurVote = new BarreRepartitionVotePresenteur(new BarreRepartitionVoteVue(), new VoteDeterminationServiceConcret());
MoyenneVote moyenne = CalculVoteDeterminationService.calculerVoteDetermination(proposition);
presenteurVote.afficherVotes(moyenne);
presenteurVote.go(vue.getZoneCertitude());
}
 
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/ObservationDeterminationPresenteur.java
New file
0,0 → 1,90
package org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations;
 
import java.util.Collections;
import java.util.List;
 
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
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.utils.ComparateurPropositionDetermination;
import org.tela_botanica.del.client.vues.identiplante.resultats.votes.DetailVoteObservationPresenteur;
import org.tela_botanica.del.client.vues.identiplante.resultats.votes.DetailVoteObservationVue;
 
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ObservationDeterminationPresenteur {
public abstract interface Vue extends IsWidget {
public void viderTableau();
public HasWidgets getTableauPropositions();
 
void setNbVotes(int index, int nbVotes);
 
void setNbCommentaires(int index, int nbCommentaires);
 
int getIndexLigneProposition(LignePropositionVue lignePropositionVue);
 
public void masquerPropositions();
}
private Vue vue;
private List<PropositionDetermination> propositions;
FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
 
public ObservationDeterminationPresenteur(Vue vue, List<PropositionDetermination> propositions) {
this.propositions = propositions;
this.vue = vue;
 
BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
@Override
public void onVoteDetermination(VoteDetermination event) {
surVoteDetermination(event);
}
});
}
public void classerPropositions(List<PropositionDetermination> propositions) {
Collections.sort(propositions, new ComparateurPropositionDetermination());
}
 
public void chargerPropositions() {
vue.viderTableau();
int nbPropositions = 0;
classerPropositions(propositions);
for (PropositionDetermination proposition : propositions) {
nbPropositions++;
HTMLPanel panneau = new HTMLPanel("");
DetailVoteObservationPresenteur presenteurVote = new DetailVoteObservationPresenteur(new DetailVoteObservationVue(), proposition);
presenteurVote.go(panneau);
LignePropositionVue lignePropositionVue = new LignePropositionVue(panneau);
LignePropositionPresenteur lignePropositionPresenteur = new LignePropositionPresenteur(lignePropositionVue, proposition);
lignePropositionPresenteur.go(vue.getTableauPropositions());
}
if (nbPropositions <= 0) {
vue.masquerPropositions();
}
}
 
public void setPropositions(List<PropositionDetermination> propositions) {
this.propositions = propositions;
chargerPropositions();
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
chargerPropositions();
}
 
public void surVoteDetermination(VoteDetermination voteDetermination) {
int indexProposition = propositions.indexOf(voteDetermination.getPropositionDetermination());
if (indexProposition != -1) {
chargerPropositions();
}
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/ObservationDeterminationVue.java
New file
0,0 → 1,59
package org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations;
 
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.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Widget;
 
public class ObservationDeterminationVue extends Composite implements ObservationDeterminationPresenteur.Vue {
 
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, ObservationDeterminationVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
 
@UiField
HTMLPanel tableauPropositions, zonePropositions;
 
public HTMLPanel getTableauPropositions() {
return tableauPropositions;
}
 
public ObservationDeterminationVue() {
initWidget(binder.createAndBindUi(this));
}
 
@Override
public int getIndexLigneProposition(LignePropositionVue lignePropositionVue) {
return tableauPropositions.getWidgetIndex(lignePropositionVue);
}
 
@Override
public void setNbVotes(int index, int nbVotes) {
// cette conversion ne devrait jamais poser de problème, car le tableau
// ne doit contenir que ça
LignePropositionVue lignePropositionVue = (LignePropositionVue) tableauPropositions.getWidget(index);
lignePropositionVue.setNbVotes(nbVotes);
}
 
@Override
public void setNbCommentaires(int index, int nbCommentaires) {
// cette conversion ne devrait jamais poser de problème, car le tableau
// ne doit contenir que ça
LignePropositionVue lignePropositionVue = (LignePropositionVue) tableauPropositions.getWidget(index);
lignePropositionVue.setNbVotes(nbCommentaires);
}
 
@Override
public void viderTableau() {
tableauPropositions.clear();
}
public void masquerPropositions() {
this.zonePropositions.setVisible(false);
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/LignePropositionVue.ui.xml
New file
0,0 → 1,19
<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="observationdetermination.css" />
<g:HTMLPanel styleName="{style.ligneProposition}">
<g:HTMLPanel ui:field="conteneurPanneauDeterminations" />
<g:FocusPanel ui:field="conteneurPanneauVotes" styleName="{style.nombreVotes}">
<g:HTML ui:field="nbVotesHtml" styleName="{style.infobulle}"/>
</g:FocusPanel>
<g:FocusPanel ui:field="conteneurPanneauCommentaires" styleName="{style.commentaires}">
<g:HTML ui:field="nbCommentairesHtml" styleName="{style.infobulle} {style.infobulleCommentaire}"/>
</g:FocusPanel>
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/LignePropositionPresenteur.java
New file
0,0 → 1,129
package org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations;
 
import org.tela_botanica.del.client.composants.commentaires.DetailCommentairePresenteur;
import org.tela_botanica.del.client.composants.commentaires.DetailCommentaireVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.votes.details.DetailListeVotesDeterminationPresenteur;
import org.tela_botanica.del.client.composants.votes.details.DetailListeVotesDeterminationVue;
import org.tela_botanica.del.client.modeles.PropositionDetermination;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
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.rest.CommentaireServiceConcret;
 
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.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class LignePropositionPresenteur {
 
private int nbCommentaires, nbVotes;
 
public abstract interface Vue extends IsWidget {
public HasClickHandlers getZoneNbVotes();
 
public HasClickHandlers getZoneNbCommentaires();
 
public void setNbVotes(int nbVotes);
 
public void setNbCommentaires(int nbCommentaires);
 
public void enleverLienCommentaires();
 
public void enleverLienVotes();
public void ajouterLienVotes();
public void setPropositionRetenue(boolean propositionRetenue);
}
 
private Vue vue;
 
private PropositionDetermination propositionDetermination;
 
public LignePropositionPresenteur(Vue vue,
PropositionDetermination propositionDetermination) {
this.vue = vue;
this.propositionDetermination = propositionDetermination;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
chargerPropositionDetermination();
gererEvenements();
}
 
public void chargerPropositionDetermination() {
this.nbCommentaires = propositionDetermination.getTotalCommentaires();
this.nbVotes = propositionDetermination.getVotesDeterminations().size();
vue.setNbCommentaires(nbCommentaires);
vue.setNbVotes(nbVotes);
vue.setPropositionRetenue(propositionDetermination.estPropositionRetenue());
}
 
public void gererEvenements() {
gererEvenementsVotes();
if (nbCommentaires > 0) {
vue.getZoneNbCommentaires().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (nbCommentaires > 0) {
FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(
new FenetreOverlayDefilanteVue());
DetailCommentairePresenteur detailCommentairePresenteur = new DetailCommentairePresenteur(
new DetailCommentaireVue(),
new CommentaireServiceConcret(),
propositionDetermination);
fenetreOverlaySimplePresenteur
.ouvrirFenetreModale(detailCommentairePresenteur);
detailCommentairePresenteur.afficherCommentaires();
}
}
});
} else {
vue.enleverLienCommentaires();
}
BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
@Override
public void onVoteDetermination(VoteDetermination event) {
if(event.getPropositionDetermination() == propositionDetermination) {
if(nbVotes == 0) {
nbVotes++;
gererEvenementsVotes();
}
vue.setNbVotes(nbVotes);
}
}
});
}
 
private void gererEvenementsVotes() {
if (nbVotes > 0) {
vue.getZoneNbVotes().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (nbVotes > 0) {
FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(
new FenetreOverlayDefilanteVue());
DetailListeVotesDeterminationPresenteur detailListeVotesDeterminationPresenteur = new DetailListeVotesDeterminationPresenteur(
new DetailListeVotesDeterminationVue());
fenetreOverlaySimplePresenteur
.ouvrirFenetreModale(detailListeVotesDeterminationPresenteur);
detailListeVotesDeterminationPresenteur
.afficherVotes(propositionDetermination);
}
}
});
vue.ajouterLienVotes();
} else {
vue.enleverLienVotes();
}
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/LignePropositionVue.java
New file
0,0 → 1,86
package org.tela_botanica.del.client.vues.identiplante.resultats.observationdeterminations;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.core.client.GWT;
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.Window;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
 
public class LignePropositionVue extends Composite implements LignePropositionPresenteur.Vue {
 
// Gestion d'UiBinder
interface MyUiBinder extends UiBinder<Widget, LignePropositionVue> {
}
 
private static MyUiBinder uibinder = GWT.create(MyUiBinder.class);
@UiField
HTMLPanel conteneurPanneauDeterminations;
 
@UiField
FocusPanel conteneurPanneauVotes, conteneurPanneauCommentaires;
 
@UiField
HTML nbVotesHtml, nbCommentairesHtml;
 
public LignePropositionVue(IsWidget panneauDeterminations) {
initWidget(uibinder.createAndBindUi(this));
conteneurPanneauDeterminations.add(panneauDeterminations);
conteneurPanneauVotes.setTitle(I18n.getVocabulary().voirDetailVotes());
conteneurPanneauCommentaires.setTitle(I18n.getVocabulary().voirDetailCommentaires());
}
 
public HasClickHandlers getZoneNbVotes() {
return conteneurPanneauVotes;
}
 
public HasClickHandlers getZoneNbCommentaires() {
return conteneurPanneauCommentaires;
}
 
public void setNbVotes(int nbVotes) {
nbVotesHtml.setHTML(nbVotes + "");
if (nbVotes == 0) {
nbVotesHtml.setVisible(false);
}
}
 
public void setNbCommentaires(int nbCommentaires) {
nbCommentairesHtml.setHTML(nbCommentaires + "");
if (nbCommentaires == 0) {
nbCommentairesHtml.setVisible(false);
}
}
public void enleverLienCommentaires() {
conteneurPanneauCommentaires.setVisible(false);
}
public void enleverLienVotes() {
nbVotesHtml.setVisible(false);
conteneurPanneauVotes.removeStyleName("nombreVotes");
}
public void ajouterLienVotes() {
nbVotesHtml.setVisible(true);
conteneurPanneauVotes.addStyleName("nombreVotes");
}
 
@Override
public void setPropositionRetenue(boolean propositionRetenue) {
if(propositionRetenue) {
addStyleName("propositionRetenuePetit");
} else {
removeStyleName("propositionRetenuePetit");
}
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/observationdetermination.css
New file
0,0 → 1,76
.determinationOriginale {
padding-top:3px;
}
.lignePropositionRetenue {
}
.determInitiale, .especesProposees {
padding-left:10px;
}
.headerTableau {
display:inline;
}
.gauche {
float:left;
}
.milieu {
margin:0 0 0 115px;
float:left
}
.droite {
float:right;
}
.determination {
margin:-23px 1px 5px 0;
}
.especesProposees {
margin-top:15px;
}
.determination>div {
padding-top: 3px;
}
.ligneProposition {
clear:both;
}
.ligneProposition>div {
display:block;
float:left;
}
.nombreVotes {
width:15px;
height:16px;
padding-left:10px;
margin-left:13px;
margin-top:1px;
}
.commentaires {
background:url("./img/comment.png") no-repeat scroll 0 0 transparent;
cursor:pointer;
height:20px;
padding-left:20px;
margin-left:13px;
}
.infobulle {
background:none repeat scroll 0 0 #1A5AC3;
color:white;
font-size:11px;
height:11px;
line-height:0.9;
margin-left:2px;
margin-top:8px;
min-width:7px;
padding:1px;
position:absolute;
}
.infobulleCommentaire {
margin-left:-9px;
}
.zonePropositions {
height:130px;
text-align:left;
margin-top:60px;
}
.rss {
position:absolute;
margin-top:-25px;
margin-left:446px;
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/observationdeterminations/ObservationDeterminationVue.ui.xml
New file
0,0 → 1,18
<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="observationdetermination.css" />
<g:HTMLPanel>
<g:HTML><br class="nettoyage"></br></g:HTML>
<g:HTMLPanel styleName="{style.determinationOriginale}" ui:field="zonePropositions">
<g:Label styleName="petit {style.headerTableau} {style.gauche}">Score</g:Label>
<g:Label styleName="petit {style.headerTableau} {style.gauche} {style.determInitiale}">Espèces proposées</g:Label>
<g:HTMLPanel styleName="{style.determination}" ui:field="tableauPropositions" />
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/ResultatsIdentiplanteVue.ui.xml
New file
0,0 → 1,37
<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="ResultatsIdentiplante.css" />
<g:HTMLPanel>
<g:HTMLPanel styleName="{style.barreNavigation}">
<g:VerticalPanel ui:field="zonePaginationHaut" styleName="gauche" />
<g:HTMLPanel ui:field="zoneTri" styleName="droite {style.zoneTri} petit">
<g:Label text="{constants.tri}" styleName="gauche"/>
<g:HTMLPanel ui:field="triParDate" styleName="gauche">
<g:Label text="{constants.triParDateObs}" title="{constants.triParDateObsTooltip}" styleName="gauche {style.date}" ui:field="labelDateObservation"/>
<g:Button title="{constants.triParDateObsAscendant}" ui:field="triParDateObservationAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParDateObsDescendant}" ui:field="triParDateObservationDescendant" styleName="{style.boutonTriDesc} gauche" />
<g:Label text="{constants.triParDatePubli}" title="{constants.triParDatePubliTooltip}" styleName="gauche {style.date}" ui:field="labelDatePublication"/>
<g:Button title="{constants.triParDatePubliAscendant}" ui:field="triParDatePublicationAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParDatePubliDescendant}" ui:field="triParDatePublicationDescendant" styleName="{style.boutonTriDesc} gauche" />
<g:Label text="{constants.triParNbCommentaires}" title="{constants.triParDatePubliTooltip}" styleName="gauche {style.date}" ui:field="labelNbCommentaires"/>
<g:Button title="{constants.triParDatePubliAscendant}" ui:field="triParNbCommentairesAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParDatePubliDescendant}" ui:field="triParNbCommentairesDescendant" styleName="{style.boutonTriDesc} gauche" />
</g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel>
<g:HTMLPanel ui:field="panneauChargement">
<g:Image url="./img/wait.gif"></g:Image>
</g:HTMLPanel>
<g:Label ui:field="aucunResultat" styleName="{style.aucunResultat}" text="{constants.aucunResultat}" visible="false" />
<g:HTMLPanel ui:field="zoneObservations" styleName="{style.zoneObservation}" />
<g:VerticalPanel ui:field="zonePaginationBas" />
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/ResultatsIdentiplantePresenteur.java
New file
0,0 → 1,401
package org.tela_botanica.del.client.vues.identiplante.resultats;
 
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur;
import org.tela_botanica.del.client.composants.pagination.PaginationVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
import org.tela_botanica.del.client.modeles.ActiviteUtilisateur;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.ModeTri;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.services.rest.UtilisateurServiceConcret;
import org.tela_botanica.del.client.services.rest.async.ActiviteUtilisateurCallback;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
import org.tela_botanica.del.client.utils.StringUtils;
import org.tela_botanica.del.client.vues.identiplante.resultats.observations.ObservationPresenteur;
import org.tela_botanica.del.client.vues.identiplante.resultats.observations.ObservationVue;
 
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.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
 
public class ResultatsIdentiplantePresenteur extends Presenteur {
 
/**
* Interface vue : création des composants graphiques
* */
public abstract interface Vue extends IsWidget {
public HasWidgets getZoneObservations();
 
public HasWidgets getZonePaginationHaut();
 
public HasWidgets getZonePaginationBas();
 
public void startChargement();
 
public void stopChargement();
 
public void nettoyer();
 
public HasClickHandlers getTriParDateObservationAscendant();
 
public HasClickHandlers getTriParDateObservationDescendant();
public HasClickHandlers getTriParDatePublicationAscendant();
 
public HasClickHandlers getTriParDatePublicationDescendant();
public HasClickHandlers getTriParNbCommentairesAscendant();
 
public HasClickHandlers getTriParNbCommentairesDescendant();
 
public void afficherElementsAucunResultatTrouve();
 
public void afficherElementsResultatsTrouves();
 
public HasClickHandlers getLabelDateObservation();
public HasClickHandlers getLabelDatePublication();
public HasClickHandlers getLabelNbCommentaires();
 
void setModeTriPublication(ModeTri mode);
 
void setModeTriObservation(ModeTri mode);
 
void setModeTriNbCommentaires(ModeTri mode);
void afficherCacherZoneTri(boolean afficher);
}
 
private Vue vue;
private ObservationService serviceObs;
private ModeTri triCourantDatePublication = ModeTri.TRI_DESCENDANT;
private ModeTri triCourantDateObservation = ModeTri.PAS_DE_TRI;
private ModeTri triCourantNbCommentaires = ModeTri.PAS_DE_TRI;
private CacheClient cache = CacheClient.getInstance();
private String statut;
 
/**
* Constructeur de la classe
*
* @param ObservationService
* serviceObs le service pour récupérer les observations
* @Vue Vue l'objet implémentant l'interface
* */
public ResultatsIdentiplantePresenteur(ObservationService serviceObs, Vue vue) {
String statut = CacheClient.getInstance().getFiltreStatut();
this.vue = vue;
InformationsRecherche infos = CacheClient.getInstance().getInformationsRechercheObservation();
if (infos.getTriParDatePublication() != ModeTri.PAS_DE_TRI) {
triCourantDatePublication = infos.getTriParDatePublication();
vue.setModeTriPublication(triCourantDatePublication);
}
if (infos.getTriParDateObservation() != ModeTri.PAS_DE_TRI) {
triCourantDateObservation = infos.getTriParDateObservation();
vue.setModeTriObservation(triCourantDatePublication);
}
if (infos.getTriParNbCommentaires() != ModeTri.PAS_DE_TRI) {
triCourantNbCommentaires = infos.getTriParNbCommentaires();
vue.setModeTriNbCommentaires(triCourantNbCommentaires);
}
this.serviceObs = serviceObs;
this.statut = statut;
}
 
/**
* Lancer l'affichage de la recherche dans le composant passé en paramètre
*
* @param HasWidgets composite le conteneur de widgets dans lequel ajouter la vue
* */
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
lancerRechercheEtCreerWidgetPagination();
gererEvenements();
}
 
/**
* Initier un callback pour créer le widget de pagination et afficher les
* observations recues et lancer la recherche avec le service
* */
public void lancerRechercheEtCreerWidgetPagination() {
int debut = (cache.getPageCouranteRechercheObservations() - 1) * cache.getPasPagination();
int fin = cache.getPageCouranteRechercheObservations() * cache.getPasPagination();
 
ObservationsCallback callback = new ObservationsCallback() {
 
@Override
public void surRetour(ObservationServiceResultat observationsRecues) {
creerWidgetPagination(observationsRecues.getNbTotalObservationsPourLaRecherche());
afficherObservations(observationsRecues);
 
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
 
}
};
 
serviceObs.getObservations(cache.getInformationsRechercheObservation(), debut, fin, statut, callback);
}
 
/**
* Créer les widgets de pagination en fonction du nombre d'observation
*
* @param int nbObservations le nombre d'observations à afficher
* */
private void creerWidgetPagination(int nbObservations) {
vue.getZonePaginationHaut().clear();
PaginationPresenteur paginationPresenteurHaut = creerPresenteurPagination(nbObservations);
paginationPresenteurHaut.setGroupePagination("pagination_observations");
paginationPresenteurHaut.go(vue.getZonePaginationHaut());
 
vue.getZonePaginationBas().clear();
PaginationPresenteur paginationPresenteurBas = creerPresenteurPagination(nbObservations);
paginationPresenteurBas.setGroupePagination("pagination_observations");
paginationPresenteurBas.go(vue.getZonePaginationBas());
}
 
/**
* Créer un présenteur du widget pagination
*
* @param int nbObservations le nombre total d'observation à afficher
* */
private PaginationPresenteur creerPresenteurPagination(int nbObservations) {
PaginationPresenteur presenteur = new PaginationPresenteur(new PaginationVue(), nbObservations, cache.getPasPagination(), cache.getPageCouranteRechercheObservations()) {
 
@Override
public void chargerElements(int debut, int fin) {
chargerEtAfficherObservations(debut, fin);
cache.setPageCouranteRechercheObservations(getPageCourante());
}
 
@Override
public void actualiserPasCache(int pas) {
cache.setPasPagination(pas);
}
 
};
return presenteur;
}
 
/**
* Gestion des évènements de la vue recherche Observation
* */
protected void gererEvenements() {
 
ClickHandler surClicDateObservation = new ClickHandler() {
/**
* Gestion du clic sur l'option de tri par date d'observation Masque
* les éléments de tri qui sont en cours et affiche les autres
* */
public void onClick(ClickEvent event) {
toggleModeTriObservation();
 
InformationsRecherche informationsRechercheObservations = cache.getInformationsRechercheObservation();
informationsRechercheObservations.setTriParDatePublication(ModeTri.PAS_DE_TRI);
informationsRechercheObservations.setTriParNbCommentaires(ModeTri.PAS_DE_TRI);
informationsRechercheObservations.setTriParDateObservation(triCourantDateObservation);
chercherEtAfficherObservationsPageEnCours();
}
};
ClickHandler surClicDatePublication = new ClickHandler() {
/**
* Gestion du clic sur l'option de tri par date d'observation Masque
* les éléments de tri qui sont en cours et affiche les autres
* */
public void onClick(ClickEvent event) {
toggleModeTriPublication();
 
InformationsRecherche informationsRechercheObservations = cache.getInformationsRechercheObservation();
informationsRechercheObservations.setTriParDateObservation(ModeTri.PAS_DE_TRI);
informationsRechercheObservations.setTriParNbCommentaires(ModeTri.PAS_DE_TRI);
informationsRechercheObservations.setTriParDatePublication(triCourantDatePublication);
 
chercherEtAfficherObservationsPageEnCours();
}
};
ClickHandler surClicNbCommentaires = new ClickHandler() {
/**
* Même comportement qu'au dessus mais pour le tri par nb de commentaires
*/
public void onClick(ClickEvent event) {
toggleModeTriNbCommentaires();
 
InformationsRecherche informationsRechercheObservations = cache.getInformationsRechercheObservation();
informationsRechercheObservations.setTriParDateObservation(ModeTri.PAS_DE_TRI);
informationsRechercheObservations.setTriParDatePublication(ModeTri.PAS_DE_TRI);
informationsRechercheObservations.setTriParNbCommentaires(triCourantNbCommentaires);
chercherEtAfficherObservationsPageEnCours();
}
};
 
vue.getLabelDateObservation().addClickHandler(surClicDateObservation);
vue.getTriParDateObservationAscendant().addClickHandler(surClicDateObservation);
vue.getTriParDateObservationDescendant().addClickHandler(surClicDateObservation);
vue.getLabelDatePublication().addClickHandler(surClicDatePublication);
vue.getTriParDatePublicationAscendant().addClickHandler(surClicDatePublication);
vue.getTriParDatePublicationDescendant().addClickHandler(surClicDatePublication);
vue.getLabelNbCommentaires().addClickHandler(surClicNbCommentaires);
vue.getTriParNbCommentairesAscendant().addClickHandler(surClicNbCommentaires);
vue.getTriParNbCommentairesDescendant().addClickHandler(surClicNbCommentaires);
}
 
/**
* Inverser le mode de tri en fonction du précédent
* */
public void toggleModeTriPublication() {
if (triCourantDatePublication == ModeTri.TRI_ASCENDANT) {
triCourantDatePublication = ModeTri.TRI_DESCENDANT;
} else if(triCourantDatePublication == ModeTri.TRI_DESCENDANT) {
triCourantDatePublication = ModeTri.TRI_ASCENDANT;
} else {
triCourantDatePublication = ModeTri.TRI_DESCENDANT;
}
triCourantDateObservation = ModeTri.PAS_DE_TRI;
triCourantNbCommentaires = ModeTri.PAS_DE_TRI;
 
vue.setModeTriPublication(triCourantDatePublication);
}
/**
* Inverser le mode de tri en fonction du précédent
* */
public void toggleModeTriObservation() {
if (triCourantDateObservation == ModeTri.TRI_ASCENDANT) {
triCourantDateObservation = ModeTri.TRI_DESCENDANT;
} else if(triCourantDateObservation == ModeTri.TRI_DESCENDANT) {
triCourantDateObservation = ModeTri.TRI_ASCENDANT;
} else {
triCourantDateObservation = ModeTri.TRI_DESCENDANT;
}
triCourantDatePublication = ModeTri.PAS_DE_TRI;
triCourantNbCommentaires = ModeTri.PAS_DE_TRI;
 
vue.setModeTriObservation(triCourantDateObservation);
}
/**
* Inverser le mode de tri en fonction du précédent
* */
public void toggleModeTriNbCommentaires() {
if (triCourantNbCommentaires == ModeTri.TRI_ASCENDANT) {
triCourantNbCommentaires = ModeTri.TRI_DESCENDANT;
} else if(triCourantNbCommentaires == ModeTri.TRI_DESCENDANT) {
triCourantNbCommentaires = ModeTri.TRI_ASCENDANT;
} else {
triCourantNbCommentaires = ModeTri.TRI_DESCENDANT;
}
triCourantDateObservation = ModeTri.PAS_DE_TRI;
triCourantDatePublication = ModeTri.PAS_DE_TRI;
 
vue.setModeTriNbCommentaires(triCourantNbCommentaires);
}
 
/**
* Initialiser les variable de début et fin et lancer le chargement des
* observations
* */
public void chercherEtAfficherObservationsPageEnCours() {
int debut = (cache.getPageCouranteRechercheObservations() - 1) * cache.getPasPagination();
int fin = (cache.getPageCouranteRechercheObservations()) * cache.getPasPagination();
chargerEtAfficherObservations(debut, fin);
}
 
/**
* Lancer le service pour charger les observations entre debut et fin et les
* afficher
*
* @param int debut l'entier de départ de la requete
* @param int fin l'entier de limite de la requete
* */
public void chargerEtAfficherObservations(int debut, int fin) {
vue.startChargement();
vue.nettoyer();
 
ObservationsCallback surReceptionObservation = new ObservationsCallback() {
 
@Override
public void surRetour(ObservationServiceResultat observationsRecues) {
afficherObservations(observationsRecues);
 
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
 
}
};
serviceObs.getObservations(cache.getInformationsRechercheObservation(), debut, fin, statut, surReceptionObservation);
}
 
/**
* Parcrourir les résultats de la recherche pour initier l'affichage de
* chaque observation
*
* @param ObservationServiceResultat
* resultats les résultats issus de la requête
* */
private void afficherObservations(ObservationServiceResultat resultats) {
vue.nettoyer();
 
if (resultats.getObservations() == null || resultats.getObservations().size() == 0) {
vue.afficherElementsAucunResultatTrouve();
} else {
vue.afficherElementsResultatsTrouves();
// Si on consulte l'onglet mon activité, on cache le tri qui n'a pas de sens ici car c'est une timeline
vue.afficherCacherZoneTri(!cache.getFiltreStatut().equals(ConstantesNavigation.PARAM_TYPE_MONACTIVITE));
// S'il y a de nouveau évènements sur l'obs, elle doit être mise en valeur
// les x premieres obs sont affichées un peu différemment (où x est le nombre de nouveaux évènements)
int i = 0;
int nbEvents = CacheClient.getInstance().getUtilisateur().getActivite().getNbEvenementsInt();
for (Observation observation : resultats.getObservations()) {
List<Image> listeImagesObs = observation.getImages();
Image imagePrincipale = null;
if(listeImagesObs != null && listeImagesObs.size() > 0) {
imagePrincipale = listeImagesObs.get(0);
}
ObservationPresenteur presenteur = new ObservationPresenteur(new ObservationVue(), observation, imagePrincipale);
presenteur.go(vue.getZoneObservations());
// La taille de la page s'étant adaptée au nombre de nouveaux évènements, on applique
// uniquement la mise en valeur sur la premiere
if(nbEvents != 0 && i < nbEvents && cache.getPageCouranteRechercheObservations() == 1) {
presenteur.mettreEnValeurEvenementsObs();
}
i++;
}
}
CacheClient.getInstance().mettreAjourUrlCourante();
vue.stopChargement();
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/resultats/ResultatsIdentiplanteVue.java
New file
0,0 → 1,195
package org.tela_botanica.del.client.vues.identiplante.resultats;
 
import org.tela_botanica.del.client.modeles.ModeTri;
 
import com.google.gwt.core.client.GWT;
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.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class ResultatsIdentiplanteVue extends Composite implements ResultatsIdentiplantePresenteur.Vue {
 
@UiField
Panel panneauChargement;
 
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, ResultatsIdentiplanteVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
 
@UiField
Panel zoneObservations, zonePaginationHaut, zonePaginationBas, zoneTri;
 
@UiField
Button triParDateObservationAscendant, triParDateObservationDescendant,
triParDatePublicationAscendant, triParDatePublicationDescendant,
triParNbCommentairesAscendant, triParNbCommentairesDescendant;
 
@UiField
Label aucunResultat, labelDateObservation, labelDatePublication, labelNbCommentaires;
 
// Constructeur de la vue
public ResultatsIdentiplanteVue() {
initWidget(binder.createAndBindUi(this));
}
@Override
public HasWidgets getZoneObservations() {
return zoneObservations;
}
 
@Override
public HasWidgets getZonePaginationHaut() {
return zonePaginationHaut;
}
 
@Override
public HasWidgets getZonePaginationBas() {
return zonePaginationBas;
}
 
/**
* Nettoie et remet à zéro les composants du panneau qui doivent l'être
* */
@Override
public void nettoyer() {
zoneObservations.clear();
}
 
@Override
public void startChargement() {
panneauChargement.setHeight(zoneObservations.getOffsetHeight() + "px");
panneauChargement.setVisible(true);
}
 
@Override
public void stopChargement() {
panneauChargement.setVisible(false);
}
 
public void afficherElementsAucunResultatTrouve() {
nettoyer();
aucunResultat.setVisible(true);
zonePaginationHaut.setVisible(false);
zonePaginationBas.setVisible(false);
zoneTri.setVisible(false);
}
 
public void afficherElementsResultatsTrouves() {
aucunResultat.setVisible(false);
zonePaginationHaut.setVisible(true);
zonePaginationBas.setVisible(true);
zoneTri.setVisible(true);
}
public void afficherCacherZoneTri(boolean afficher) {
zoneTri.setVisible(afficher);
}
 
public Button getTriParDateObservationAscendant() {
return triParDateObservationAscendant;
}
 
public Button getTriParDateObservationDescendant() {
return triParDateObservationDescendant;
}
public Button getTriParDatePublicationAscendant() {
return triParDatePublicationAscendant;
}
 
public Button getTriParDatePublicationDescendant() {
return triParDatePublicationDescendant;
}
@Override
public Label getLabelDateObservation() {
return labelDateObservation;
}
@Override
public Label getLabelDatePublication() {
return labelDatePublication;
}
@Override
public Label getLabelNbCommentaires() {
return labelNbCommentaires;
}
@Override
public HasClickHandlers getTriParNbCommentairesAscendant() {
return triParNbCommentairesAscendant;
}
 
@Override
public HasClickHandlers getTriParNbCommentairesDescendant() {
return triParNbCommentairesDescendant;
}
private void cacherTris() {
triParDateObservationAscendant.setVisible(false);
triParDateObservationDescendant.setVisible(false);
triParDatePublicationDescendant.setVisible(false);
triParDatePublicationAscendant.setVisible(false);
triParNbCommentairesAscendant.setVisible(false);
triParNbCommentairesDescendant.setVisible(false);
}
/**
* En fonction du sens du tri (ascendant ou descendant), on change l'affichage des
* boutons de tri pour masquer que celui qui doit être cliquable.
* @param ModeTri le mode Ascendant ou Descendant
* */
@Override
public void setModeTriPublication(ModeTri mode) {
cacherTris();
if (mode == ModeTri.TRI_ASCENDANT) {
triParDatePublicationAscendant.setVisible(true);
triParDatePublicationDescendant.setVisible(false);
} else {
triParDatePublicationDescendant.setVisible(true);
triParDatePublicationAscendant.setVisible(false);
}
}
/**
* En fonction du sens du tri (ascendant ou descendant), on change l'affichage des
* boutons de tri pour masquer que celui qui doit être cliquable.
* @param ModeTri le mode Ascendant ou Descendant
* */
@Override
public void setModeTriObservation(ModeTri mode) {
cacherTris();
if (mode == ModeTri.TRI_ASCENDANT) {
triParDateObservationAscendant.setVisible(true);
triParDateObservationDescendant.setVisible(false);
} else {
triParDateObservationDescendant.setVisible(true);
triParDateObservationAscendant.setVisible(false);
}
}
 
@Override
public void setModeTriNbCommentaires(ModeTri mode) {
cacherTris();
if (mode == ModeTri.TRI_ASCENDANT) {
triParNbCommentairesAscendant.setVisible(true);
triParNbCommentairesDescendant.setVisible(false);
} else {
triParNbCommentairesDescendant.setVisible(true);
triParNbCommentairesAscendant.setVisible(false);
}
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/moteur/MoteurIdentiplante.css
New file
0,0 → 1,35
.entrerMotClef {
margin-bottom: 10px;
font-size:12px
}
 
.lienProposerObservation {
margin-left:65px;
margin-top:10px;
margin-bottom:10px;
}
.zoneStatut {
margin-top:;
}
 
.zoneStatut span {
padding-right:10px;
}
 
.zoneStatut label {
padding-left:2px;
}
 
 
.titreRechercheObs {
margin-top:5px;
}
 
.lienAide {
margin-right:70px;
padding:4px 15px;
margin-top:9px;
float:right;
color:white;
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/moteur/MoteurIdentiplanteVue.ui.xml
New file
0,0 → 1,29
<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: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="MoteurIdentiplante.css" />
<g:HTMLPanel styleName="limiteMaxResultat">
<g:HTMLPanel styleName="limiteMax importance1">
<g:Label text="{constants.rechercherObservation}" styleName="titre {style.titreRechercheObs}" />
<g:Label text="{constants.entrerMotClef}" styleName="gris {style.entrerMotClef}" />
<g:HTMLPanel ui:field="zoneRecherche" />
</g:HTMLPanel>
<g:HTMLPanel styleName="zone-onglets">
<g:Label styleName="onglet onglet-actif" text="{constants.ongletTous}" ui:field="ongletTout"></g:Label>
<g:Label styleName="onglet" text="{constants.ongletADeterminer}" ui:field="ongletADeterminer"></g:Label>
<g:Label styleName="onglet" text="{constants.ongletAConfirmer}" ui:field="ongletAConfirmer"></g:Label>
<!-- terme Validées/Vérifiées sujet à changement, "Vérifiées" en texte, "Validées" partout ailleurs dans le code -->
<g:Label styleName="onglet" text="{constants.ongletVerifiees}" ui:field="ongletValidees"></g:Label>
<!-- terme Validées/Vérifiées sujet à changement, "Vérifiées" en texte, "Validées" partout ailleurs dans le code -->
<g:HTML styleName="onglet ongletMonActivite" text=" " ui:field="ongletMonActivite"></g:HTML>
</g:HTMLPanel>
<g:HTMLPanel>
<g:HTMLPanel ui:field="zoneResultats" />
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/moteur/MoteurIdentiplantePresenteur.java
New file
0,0 → 1,201
package org.tela_botanica.del.client.vues.identiplante.moteur;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRecherchePresenteur;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRechercheVue;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlPresenteur;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
import org.tela_botanica.del.client.modeles.ActiviteUtilisateur;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.services.rest.ObservationServiceConcret;
import org.tela_botanica.del.client.services.rest.UtilisateurServiceConcret;
import org.tela_botanica.del.client.services.rest.async.ActiviteUtilisateurCallback;
import org.tela_botanica.del.client.vues.identiplante.resultats.ResultatsIdentiplantePresenteur;
import org.tela_botanica.del.client.vues.identiplante.resultats.ResultatsIdentiplanteVue;
 
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.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Panel;
 
public class MoteurIdentiplantePresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public HasWidgets getZoneRecherche();
 
public HasWidgets getZoneResultats();
 
public HasClickHandlers getOngletAConfirmer();
public HasClickHandlers getOngletADeterminer();
public HasClickHandlers getOngletTout();
 
public HasClickHandlers getOngletValidees();
public HasClickHandlers getOngletMonActivite();
public void setOngletADeterminerActif();
public void setOngletToutActif();
public void setOngletAConfirmerActif();
 
public void setOngletValideesActif();
 
void afficherCacherOngletMonActivite(boolean afficher);
 
void setOngletMonActiviteActif();
 
void setOngletActif(String onglet);
 
public void afficherNbEvenements(String nbEvenements);
public void cacherNbEvenements();
}
 
private Vue vue;
private Timer timerRequeteActiviteUtilisateur = null;
 
public MoteurIdentiplantePresenteur(ObservationService serviceObs, Vue vue) {
this.vue = vue;
}
 
public void go(HasWidgets composite) {
 
composite.add(vue.asWidget());
ajouterMoteurRechercheAvancee();
gererEvenements();
gererAffichageOngletMonActivite();
gererTimerRequeteActiviteUtilisateur();
}
 
private void gererAffichageOngletMonActivite() {
vue.afficherCacherOngletMonActivite(CacheClient.getInstance().getUtilisateur().estIdentifie());
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
@Override
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
vue.afficherCacherOngletMonActivite(utilisateur.estIdentifie());
vue.cacherNbEvenements();
if(!utilisateur.estIdentifie()) {
activerOnglet("tous");
} else {
if(utilisateur.getActivite().getNbEvenementsInt() > 0) {
vue.afficherNbEvenements(utilisateur.getActivite().getNbEvenements());
CacheClient.ajouterAuTitreOngletNavigateur(" ("+utilisateur.getActivite().getNbEvenements()+")");
}
}
}
});
}
 
protected void ajouterMoteurRechercheAvancee() {
MoteurRecherchePresenteur presenteur = new MoteurRecherchePresenteur(new MoteurRechercheVue("") {
}, ModeRecherche.MODE_OBSERVATION) {
 
@Override
public void lancerRecherche() {
chercherObservations();
}
};
presenteur.go(vue.getZoneRecherche());
}
 
public void chercherObservations() {
vue.getZoneResultats().clear();
CacheClient.getInstance().mettreAjourUrlCourante();
new ResultatsIdentiplantePresenteur(new ObservationServiceConcret(), new ResultatsIdentiplanteVue()).go(vue.getZoneResultats());
}
 
protected void gererEvenements() {
// Gestion du clic sur les onglets
vue.getOngletTout().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
activerOnglet("tous");
}
});
vue.getOngletADeterminer().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
activerOnglet("adeterminer");
}
});
vue.getOngletAConfirmer().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
activerOnglet("aconfirmer");
}
});
 
vue.getOngletValidees().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
activerOnglet("validees");
}
});
vue.getOngletMonActivite().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// S'il y a de nouveau évènements sur l'obs, on les affichera tous sur la même page (dans la limite de 50)
int nbEvents = CacheClient.getInstance().getUtilisateur().getActivite().getNbEvenementsInt();
nbEvents = Math.min(nbEvents, 50);
if(CacheClient.getInstance().getPasPagination() < nbEvents) {
CacheClient.getInstance().setPasPagination(nbEvents);
}
activerOnglet("monactivite");
vue.cacherNbEvenements();
CacheClient.reinitialiserTitreOngletNavigateur();
}
});
}
public void gererTimerRequeteActiviteUtilisateur() {
timerRequeteActiviteUtilisateur = new Timer() {
@Override
public void run() {
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
if(utilisateur.estIdentifie()) {
UtilisateurServiceConcret serviceUtilisateur = new UtilisateurServiceConcret();
serviceUtilisateur.obtenirActiviteUtilisateur(utilisateur.getId(), new ActiviteUtilisateurCallback() {
@Override
public void surRetour(ActiviteUtilisateur activite) {
CacheClient.getInstance().getUtilisateur().setActivite(activite);
if(activite.getNbEvenementsInt() > 0) {
vue.afficherNbEvenements(activite.getNbEvenements());
CacheClient.ajouterAuTitreOngletNavigateur(" ("+activite.getNbEvenements()+")");
}
}
});
}
}
};
timerRequeteActiviteUtilisateur.scheduleRepeating(30000);
}
protected void activerOnglet(String onglet) {
CacheClient.getInstance().setFiltreStatut(onglet);
CacheClient.getInstance().setPageCouranteRechercheObservations(1);
chercherObservations();
vue.setOngletActif(onglet);
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/identiplante/moteur/MoteurIdentiplanteVue.java
New file
0,0 → 1,146
package org.tela_botanica.del.client.vues.identiplante.moteur;
 
import org.tela_botanica.del.client.cache.CacheClient;
 
import com.google.gwt.core.client.GWT;
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.Composite;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.HTML;
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.Widget;
 
public class MoteurIdentiplanteVue extends Composite implements MoteurIdentiplantePresenteur.Vue {
 
// Gestion d'UiBinder
interface Binder extends UiBinder<Widget, MoteurIdentiplanteVue> {
}
 
private static Binder binder = GWT.create(Binder.class);
 
@UiField
Panel zoneRecherche, zoneResultats;
 
@UiField
Label ongletTout, ongletADeterminer, ongletAConfirmer, ongletValidees;
@UiField
HTML ongletMonActivite;
 
public HasWidgets getZoneRecherche() {
return zoneRecherche;
}
// Constructeur de la vue
public MoteurIdentiplanteVue() {
initWidget(binder.createAndBindUi(this));
mettreAJourOngletEnFonctionDuCache();
}
 
public Panel getZoneResultats() {
return zoneResultats;
}
@Override
public HasClickHandlers getOngletAConfirmer() {
return ongletAConfirmer;
}
 
@Override
public HasClickHandlers getOngletADeterminer() {
return ongletADeterminer;
}
 
@Override
public HasClickHandlers getOngletTout() {
return ongletTout;
}
 
@Override
public HasClickHandlers getOngletValidees() {
return ongletValidees;
}
@Override
public void afficherCacherOngletMonActivite(boolean afficher) {
ongletMonActivite.setVisible(afficher);
}
 
@Override
public HasClickHandlers getOngletMonActivite() {
return ongletMonActivite;
}
 
@Override
public void setOngletADeterminerActif() {
nettoyerOngletsActifs();
ongletADeterminer.addStyleName("onglet-actif");
}
 
@Override
public void setOngletToutActif() {
nettoyerOngletsActifs();
ongletTout.addStyleName("onglet-actif");
}
 
@Override
public void setOngletAConfirmerActif() {
nettoyerOngletsActifs();
ongletAConfirmer.addStyleName("onglet-actif");
}
 
@Override
public void setOngletValideesActif() {
nettoyerOngletsActifs();
ongletValidees.addStyleName("onglet-actif");
}
@Override
public void setOngletMonActiviteActif() {
nettoyerOngletsActifs();
ongletMonActivite.addStyleName("onglet-actif");
}
public void nettoyerOngletsActifs() {
ongletTout.removeStyleName("onglet-actif");
ongletADeterminer.removeStyleName("onglet-actif");
ongletAConfirmer.removeStyleName("onglet-actif");
ongletValidees.removeStyleName("onglet-actif");
ongletMonActivite.removeStyleName("onglet-actif");
}
@Override
public void setOngletActif(String onglet) {
if (onglet == null || onglet.equals("tous")) {
setOngletToutActif();
} else if (onglet.equals("adeterminer")) {
setOngletADeterminerActif();
} else if (onglet.equals("aconfirmer")) {
setOngletAConfirmerActif();
} else if (onglet.equals("validees")) {
setOngletValideesActif();
} else if (onglet.equals("monactivite")) {
setOngletMonActiviteActif();
}
}
public void mettreAJourOngletEnFonctionDuCache() {
String statut = CacheClient.getInstance().getFiltreStatut();
setOngletActif(statut);
}
 
@Override
public void afficherNbEvenements(String nbEvenements) {
String HtmlIndication = "<div class=\"nbEvenementsMonActivite\">"+nbEvenements+"</div>";
ongletMonActivite.setHTML(HtmlIndication);
}
 
@Override
public void cacherNbEvenements() {
ongletMonActivite.setHTML("");
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/ResultatPictoflora.css
New file
0,0 → 1,68
.contenuResultat {
text-align: center;
}
 
.barreNavigation {
max-width: 810px;
margin-top: -15px;
padding-bottom: 20px
}
 
.moyenneArithmetique, .points, .date, .tag {
padding-left: 10px;
padding-top: 3px;
cursor: pointer;
}
 
.zoneTri {
padding-left: 10px;
float: right;
}
 
.labeltri {
padding-top: 3px;
}
 
.protocoles {
padding-left: 10px;
}
 
.paginationHaut {
}
 
.images {
width: 100%;
clear: left;
margin-top: 10px;
margin-left:15px;
}
 
.images>div {
float: left;
margin: 0 20px 50px 0px
}
 
.boutonTriAsc,.boutonTriDesc {
border: none;
cursor: pointer;
}
 
.boutonTriAsc:hover,.boutonTriDesc:hover {
border:dotted 1px #8EB533;
border-width:0 0 1px 0;
}
 
.boutonTriAsc {
height: 19px;
background: url(./img/fleche-haut.png) no-repeat
}
 
.boutonTriDesc {
height: 19px;
background: url(./img/fleche-bas.png) no-repeat
}
 
.aucunResultat {
text-align: left;
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/ResultatPictofloraVue.ui.xml
New file
0,0 → 1,48
<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:style src="ResultatPictoflora.css" />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<g:HTMLPanel styleName="{style.contenuResultat}">
<g:HTMLPanel styleName="{style.barreNavigation} limiteMax limiteMin">
<g:VerticalPanel ui:field="panneauPaginationHaut" styleName="gauche {style.paginationHaut}" />
<g:HTMLPanel ui:field="zoneTri" styleName="gauche {style.zoneTri} petit">
<g:Label text="{constants.tri}" styleName="gauche {style.labeltri}"/>
<g:HTMLPanel ui:field="triParDate" styleName="gauche">
<g:Label text="{constants.triParDatePubli}" title="{constants.triParDatePubliTooltip}" styleName="gauche {style.date}" ui:field="labelDate"/>
<g:Button title="{constants.triParDatePubliAscendant}" ui:field="triParDateAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParDatePubliDescendant}" ui:field="triParDateDescendant" styleName="{style.boutonTriDesc} gauche" />
</g:HTMLPanel>
<g:HTMLPanel ui:field="triParMoyenneArithmetique" styleName="gauche">
<g:Label text="{constants.triParMoyenneArithmetique}" title="{constants.triParMoyenneArithmetiqueTooltip}" styleName="gauche {style.moyenneArithmetique}" ui:field="labelMoyenneArithmetique"/>
<g:Button title="{constants.triParMoyenneArithmetiqueAscendant}" ui:field="triParMoyenneArithmetiqueAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParMoyenneArithmetiqueDescendant}" ui:field="triParMoyenneArithmetiqueDescendant" styleName="{style.boutonTriDesc} gauche" />
</g:HTMLPanel>
<g:HTMLPanel ui:field="triParPoints" styleName="gauche">
<g:Label text="{constants.triParNbPoints}" title="{constants.triParNbPointsTooltip}" styleName="gauche {style.points}" ui:field="labelPoints"/>
<g:Button title="{constants.triParNbPointsAscendant}" ui:field="triParPointsAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParNbPointsDescendant}" ui:field="triParPointsDescendant" styleName="{style.boutonTriDesc} gauche" />
</g:HTMLPanel>
<g:HTMLPanel ui:field="triParNbTags" styleName="gauche">
<g:Label text="{constants.triParNbTags}" title="{constants.triParNbTagsTooltip}" styleName="gauche {style.tag}" ui:field="labelTag"/>
<g:Button title="{constants.triParNbTagsAscendant}" ui:field="triParNbTagsAscendant" styleName="{style.boutonTriAsc} gauche" />
<g:Button title="{constants.triParNbTagsDescendant}" ui:field="triParNbTagsDescendant" styleName="{style.boutonTriDesc} gauche" />
</g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
<g:VerticalPanel ui:field="panneauChargement">
<g:Image url="./img/wait.gif"></g:Image>
</g:VerticalPanel>
<g:Label ui:field="aucunResultat" styleName="{style.aucunResultat}" text="{constants.aucunResultat}" visible="false" />
<g:HTMLPanel ui:field="imageTable" styleName="{style.images}" />
<g:HTMLPanel styleName="nettoyage"></g:HTMLPanel>
<g:VerticalPanel ui:field="panneauPagination" styleName="limiteMax limiteMin"/>
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/ResultatPictofloraPresenteur.java
New file
0,0 → 1,434
package org.tela_botanica.del.client.vues.pictoflora.resultats;
 
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur;
import org.tela_botanica.del.client.composants.pagination.PaginationVue;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ImageServiceResultat;
import org.tela_botanica.del.client.modeles.InformationsRecherche;
import org.tela_botanica.del.client.modeles.ModeTri;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.GestionnaireEvenementChangementProtocole;
import org.tela_botanica.del.client.services.rest.ImageService;
import org.tela_botanica.del.client.services.rest.ProtocoleService;
import org.tela_botanica.del.client.services.rest.async.ImagesParTaxonCallback;
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
import org.tela_botanica.del.client.vues.pictoflora.resultats.images.ImagePresenteur;
import org.tela_botanica.del.client.vues.pictoflora.resultats.images.ImageVue;
 
import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.dom.client.OptionElement;
import com.google.gwt.dom.client.SelectElement;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.ListBox;
 
public class ResultatPictofloraPresenteur {
public interface Vue extends IsWidget {
public void startChargement();
 
public void nettoyer();
 
public void creerPanneauxObservations(int size);
 
public void stopChargement();
 
public List<HasWidgets> getPanneauxImages();
 
public HasWidgets getPanneauPagination();
 
public HasWidgets getPanneauPaginationHaut();
 
public HasClickHandlers getTriParMoyenneArithmetiqueAscendant();
 
public HasClickHandlers getTriParMoyenneArithmetiqueDescendant();
 
public HasClickHandlers getTriParPointsAscendant();
 
public HasClickHandlers getTriParPointsDescendant();
 
public HasClickHandlers getTriParDateAscendant();
 
public HasClickHandlers getTriParDateDescendant();
public HasClickHandlers getTriParNbTagsAscendant();
 
public HasClickHandlers getTriParNbTagsDescendant();
 
public void afficherElementsAucunResultatTrouve();
 
public void afficherElementsResultatsTrouve();
 
public HTMLPanel getImageTable();
 
public HasClickHandlers getLabelMoyenneArithmetique();
 
public void masquerMoyenneArithmetiqueAscendant();
 
public void masquerMoyenneArithmetiqueDescendant();
 
public void afficherMoyenneArithmetiqueAscendant();
 
public void afficherMoyenneArithmetiqueDescendant();
 
public HasClickHandlers getLabelDate();
 
public void masquerDateAscendant();
 
public void masquerDateDescendant();
 
public void afficherDateAscendant();
 
public void afficherDateDescendant();
public HasClickHandlers getLabelTag();
 
public void masquerTagAscendant();
 
public void afficherTagDescendant();
 
public void masquerTagDescendant();
 
public void afficherTagAscendant();
 
public HasClickHandlers getLabelPoints();
 
public void afficherPointsAscendant();
 
public void afficherPointsDescendant();
 
public void masquerPointsAscendant();
 
public void masquerPointsDescendant();
 
}
 
private Vue vue;
private ImageService imageService;
private ModeTri triCourantMoyenneArithmetique = ModeTri.TRI_ASCENDANT;
private ModeTri triCourantPoints = ModeTri.TRI_ASCENDANT;
private ModeTri triCourantDate = ModeTri.TRI_DESCENDANT;
private ModeTri triCourantTag = ModeTri.TRI_DESCENDANT;
 
public ResultatPictofloraPresenteur(ImageService imageService, ProtocoleService protocoleService, Vue vue) {
this.vue = vue;
this.imageService = imageService;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
vue.startChargement();
rechercherImagesEtCreerWidgetPagination();
gererEvenements();
vue.masquerMoyenneArithmetiqueDescendant();
vue.masquerMoyenneArithmetiqueAscendant();
vue.masquerDateDescendant();
vue.masquerDateAscendant();
vue.masquerTagAscendant();
vue.masquerTagDescendant();
vue.masquerPointsAscendant();
vue.masquerPointsDescendant();
initialiserAPartirInfosCache();
}
private void initialiserAPartirInfosCache() {
InformationsRecherche infos = CacheClient.getInstance().getInformationsRechercheImage();
if (infos.getTriParDatePublication() != ModeTri.PAS_DE_TRI) {
triCourantDate = infos.getTriParDatePublication();
mettreAJourAffichageTriDate();
}
if (infos.getTriParMoyenneArithmetique() != ModeTri.PAS_DE_TRI) {
triCourantMoyenneArithmetique = infos.getTriParMoyenneArithmetique();
mettreAJourAffichageTriMoyenneArithmetique();
}
if (infos.getTriParNbPoints() != ModeTri.PAS_DE_TRI) {
triCourantPoints = infos.getTriParNbPoints();
mettreAJourAffichageTriPoints();
}
if (infos.getTriParNbTags() != ModeTri.PAS_DE_TRI) {
triCourantTag = infos.getTriParNbTags();
mettreAjourAffichageTriTag();
}
}
 
public void gererEvenements() {
ClickHandler surClicTriMoyenneArithmetique = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
surClicTriMoyenneArithmetique();
}
};
 
vue.getLabelMoyenneArithmetique().addClickHandler(surClicTriMoyenneArithmetique);
vue.getTriParMoyenneArithmetiqueAscendant().addClickHandler(surClicTriMoyenneArithmetique);
vue.getTriParMoyenneArithmetiqueDescendant().addClickHandler(surClicTriMoyenneArithmetique);
 
ClickHandler surClicTriPoints = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
surClicTriPoints();
}
};
 
vue.getLabelPoints().addClickHandler(surClicTriPoints);
vue.getTriParPointsAscendant().addClickHandler(surClicTriPoints);
vue.getTriParPointsDescendant().addClickHandler(surClicTriPoints);
 
ClickHandler surClicTriDate = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
surClicTriDate();
}
};
 
vue.getLabelDate().addClickHandler(surClicTriDate);
vue.getTriParDateAscendant().addClickHandler(surClicTriDate);
vue.getTriParDateDescendant().addClickHandler(surClicTriDate);
ClickHandler surClicTriTag = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
surClicTriTag();
}
};
vue.getLabelTag().addClickHandler(surClicTriTag);
vue.getTriParNbTagsAscendant().addClickHandler(surClicTriTag);
vue.getTriParNbTagsDescendant().addClickHandler(surClicTriTag);
 
BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
@Override
public void onChangementProtocole(EvenementChangementProtocole event) {
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
if (informationsRechercheImages.getTriParMoyenneArithmetique() != ModeTri.PAS_DE_TRI) {
informationsRechercheImages.setIdProtocoleSelectionne(event.getProtocole().getId() + "");
chargerEtAfficherImagesPageEnCours();
}
}
});
}
 
protected void surClicTriTag() {
triCourantTag = (triCourantTag == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
mettreAjourAffichageTriTag();
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
informationsRechercheImages.setTriParNbTags(triCourantTag);
informationsRechercheImages.setTriParDatePublication(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
chargerEtAfficherImagesPageEnCours();
}
private void mettreAjourAffichageTriTag() {
vue.masquerDateDescendant();
vue.masquerDateAscendant();
vue.masquerMoyenneArithmetiqueDescendant();
vue.masquerMoyenneArithmetiqueAscendant();
vue.masquerPointsAscendant();
vue.masquerPointsDescendant();
if (triCourantTag == ModeTri.TRI_ASCENDANT) {
vue.masquerTagDescendant();
vue.afficherTagAscendant();
} else {
vue.masquerTagAscendant();
vue.afficherTagDescendant();
}
}
 
public void surClicTriMoyenneArithmetique() {
triCourantMoyenneArithmetique = (triCourantMoyenneArithmetique == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
mettreAJourAffichageTriMoyenneArithmetique();
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
int IdProtocole = CacheClient.getInstance().getProtocoleCourant().getId();
informationsRechercheImages.setTriParMoyenneArithmetique(triCourantMoyenneArithmetique);
informationsRechercheImages.setIdProtocoleSelectionne(IdProtocole + "");
informationsRechercheImages.setTriParDatePublication(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
chargerEtAfficherImagesPageEnCours();
}
private void mettreAJourAffichageTriMoyenneArithmetique() {
vue.masquerDateDescendant();
vue.masquerDateAscendant();
vue.masquerTagAscendant();
vue.masquerTagDescendant();
vue.masquerPointsAscendant();
vue.masquerPointsDescendant();
if (triCourantMoyenneArithmetique == ModeTri.TRI_ASCENDANT) {
vue.masquerMoyenneArithmetiqueDescendant();
vue.afficherMoyenneArithmetiqueAscendant();
} else {
vue.masquerMoyenneArithmetiqueAscendant();
vue.afficherMoyenneArithmetiqueDescendant();
}
}
 
public void surClicTriPoints() {
triCourantPoints = (triCourantPoints == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
mettreAJourAffichageTriPoints();
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
int IdProtocole = CacheClient.getInstance().getProtocoleCourant().getId();
informationsRechercheImages.setTriParNbPoints(triCourantPoints);
informationsRechercheImages.setIdProtocoleSelectionne(IdProtocole + "");
informationsRechercheImages.setTriParDatePublication(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
chargerEtAfficherImagesPageEnCours();
}
private void mettreAJourAffichageTriPoints() {
vue.masquerDateDescendant();
vue.masquerDateAscendant();
vue.masquerTagAscendant();
vue.masquerTagDescendant();
vue.masquerMoyenneArithmetiqueAscendant();
vue.masquerMoyenneArithmetiqueDescendant();
if (triCourantPoints == ModeTri.TRI_ASCENDANT) {
vue.masquerPointsDescendant();
vue.afficherPointsAscendant();
} else {
vue.masquerPointsAscendant();
vue.afficherPointsDescendant();
}
}
 
public void surClicTriDate() {
triCourantDate = (triCourantDate == ModeTri.TRI_ASCENDANT) ? ModeTri.TRI_DESCENDANT : ModeTri.TRI_ASCENDANT;
mettreAJourAffichageTriDate();
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage();
informationsRechercheImages.setTriParDatePublication(triCourantDate);
informationsRechercheImages.setTriParMoyenneArithmetique(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI);
informationsRechercheImages.setTriParNbPoints(ModeTri.PAS_DE_TRI);
chargerEtAfficherImagesPageEnCours();
}
private void mettreAJourAffichageTriDate() {
vue.masquerTagAscendant();
vue.masquerTagDescendant();
vue.masquerMoyenneArithmetiqueDescendant();
vue.masquerMoyenneArithmetiqueAscendant();
vue.masquerPointsAscendant();
vue.masquerPointsDescendant();
if (triCourantDate == ModeTri.TRI_ASCENDANT) {
vue.masquerDateDescendant();
vue.afficherDateAscendant();
} else {
vue.masquerDateAscendant();
vue.afficherDateDescendant();
}
}
 
public void rechercherImagesEtCreerWidgetPagination() {
// appel du service d'image pour avoir le nb total d'elements pour la
// pagination
ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
 
@Override
public void surRetour(ImageServiceResultat imagesRecues) {
creerWidgetPagination(imagesRecues.getNbTotalImagesPourLaRecherche());
afficherImages(imagesRecues);
 
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
 
}
};
final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination();
final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination();
imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), debut, fin, callback);
}
 
private void chargerEtAfficherImages(final int premier, final int dernier) {
vue.startChargement();
vue.nettoyer();
ImagesParTaxonCallback callback = new ImagesParTaxonCallback() {
 
@Override
public void surRetour(ImageServiceResultat imagesRecues) {
afficherImages(imagesRecues);
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
}
 
};
imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), premier, dernier, callback);
}
 
public void afficherImages(ImageServiceResultat imageServiceResult) {
List<Image> images = imageServiceResult.getImages();
if (images == null || images.size() == 0) {
vue.afficherElementsAucunResultatTrouve();
} else {
vue.afficherElementsResultatsTrouve();
for (Image image : images) {
ImagePresenteur imagePresenteur = new ImagePresenteur(image, imageService, CacheClient.getInstance().getProtocoleCourant(), new ImageVue());
imagePresenteur.go(vue.getImageTable());
}
}
CacheClient.getInstance().mettreAjourUrlCourante();
vue.stopChargement();
}
 
private void creerWidgetPagination(int nbImages) {
PaginationPresenteur imagesPaginationPresenteurHaut = creerPresenteurPagination(nbImages);
PaginationPresenteur imagesPaginationPresenteurBas = creerPresenteurPagination(nbImages);
imagesPaginationPresenteurHaut.setGroupePagination("pagination_images");
imagesPaginationPresenteurBas.setGroupePagination("pagination_images");
imagesPaginationPresenteurHaut.go(vue.getPanneauPaginationHaut());
imagesPaginationPresenteurBas.go(vue.getPanneauPagination());
}
 
public PaginationPresenteur creerPresenteurPagination(int nbImages) {
PaginationPresenteur imagesPaginationPresenteur = new PaginationPresenteur(new PaginationVue(), nbImages, CacheClient.getInstance().getPasPagination(), CacheClient.getInstance().getPageCouranteRechercheImage()) {
@Override
public void chargerElements(int debut, int fin) {
chargerEtAfficherImages(debut, fin);
CacheClient.getInstance().setPageCouranteRechercheImages(getPageCourante());
}
 
@Override
public void actualiserPasCache(int pas) {
CacheClient.getInstance().setPasPagination(pas);
}
};
return imagesPaginationPresenteur;
}
 
public void chargerEtAfficherImagesPageEnCours() {
final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination();
final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination();
chargerEtAfficherImages(debut, fin);
}
 
public Vue getVue() {
return vue;
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/images/ImageVue.ui.xml
New file
0,0 → 1,45
<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="image.css" />
<g:HTMLPanel styleName="{style.observations}">
<g:HTMLPanel styleName="{style.zoneDetail}">
<g:HTMLPanel ui:field="cadreBtnVoirInfoObs" styleName="{style.cadreBtnVoirInfoObs}">
<g:PushButton ui:field="btnVoirInfoObs" text=" " styleName="{style.btnVoirInfoObs}"/>
</g:HTMLPanel>
 
<g:HTMLPanel ui:field="cadreBtnVoirTags" styleName="{style.cadreBtnVoirTags}">
<g:PushButton ui:field="btnVoirTags" styleName="{style.btnVoirTags}"/>
</g:HTMLPanel>
<g:HTMLPanel ui:field="zoneActionsImage" styleName="{style.zoneActionsImg}">
<g:HTMLPanel ui:field="cadreBtnSupprImage" styleName="{style.cadreBtnSupprImg}">
<g:PushButton ui:field="btnSupprImg" styleName="{style.btnSupprImg}"/>
</g:HTMLPanel>
</g:HTMLPanel>
 
<g:HTMLPanel styleName="{style.zoneCache}" ui:field="zoneCache">
<g:HTMLPanel ui:field="metadonnees" styleName="{style.metadonnees}"/>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneMotsCles}" ui:field="zoneMotsCles">
<g:Button ui:field="boutonFermer" styleName="{style.boutonFermer}"/>
<g:HTMLPanel ui:field="motsCles" styleName="{style.motsCles}"/>
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneImage}">
<g:Image ui:field="imagePrincipale" resource="{res.logo}" />
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zonePlus}" ui:field="zonePlus">
<g:HTML ui:field="nomAuteur" styleName="petit {style.auteur}">Auteur</g:HTML>
<g:HTML ui:field="nomEspece" styleName="{style.espece}"></g:HTML>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneVoter} arrondi-faible" ui:field="zoneVoter">
<g:HorizontalPanel ui:field="voter"/>
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/images/ImagePresenteur.java
New file
0,0 → 1,334
package org.tela_botanica.del.client.vues.pictoflora.resultats.images;
 
import java.util.HashMap;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.images.DetailImagePresenteur;
import org.tela_botanica.del.client.composants.images.DetailImageVue;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesVue;
import org.tela_botanica.del.client.composants.motsclesimages.MotsClesImagePresenteur;
import org.tela_botanica.del.client.composants.motsclesimages.MotsClesImageVue;
import org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages.FormulaireSaisieMotsClesImagePresenteur;
import org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages.FormulaireSaisieMotsClesImageVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVotePresenteur;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVoteVue;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.i18n.I18n;
import org.tela_botanica.del.client.modeles.Commentaire;
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.Protocole;
import org.tela_botanica.del.client.modeles.Utilisateur;
import org.tela_botanica.del.client.modeles.VoteProtocole;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.GestionnaireEvenementChangementProtocole;
import org.tela_botanica.del.client.navigation.evenement.fermermotcleimage.EvenementFermerMotCleImage;
import org.tela_botanica.del.client.navigation.evenement.fermermotcleimage.GestionnaireEvenementFermerMotCleImage;
import org.tela_botanica.del.client.navigation.evenement.rechercheimage.EvenementVoirDetailsImage;
import org.tela_botanica.del.client.navigation.evenement.rechercheimage.GestionnaireEvenementVoirDetailsImage;
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire;
import org.tela_botanica.del.client.navigation.evenement.supprimerImage.EvenementSupprimerImage;
import org.tela_botanica.del.client.navigation.evenement.supprimerImage.GestionnaireEvenementSupprimerImage;
import org.tela_botanica.del.client.navigation.evenement.validationobservationpictoflora.EvenementValidationPictoflora;
import org.tela_botanica.del.client.services.rest.ImageService;
import org.tela_botanica.del.client.services.rest.MotsClesServiceConcret;
import org.tela_botanica.del.client.services.rest.VoteProtocoleServiceConcret;
import org.tela_botanica.del.client.services.rest.async.SuppressionCommentaireCallback;
import org.tela_botanica.del.client.services.rest.async.SuppressionImageCallback;
 
import com.google.gwt.core.shared.GWT;
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.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class ImagePresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public abstract void loadImage(Image image);
 
public abstract HasClickHandlers getImagePrincipale();
 
public IsWidget getImagePrincipaleWidget();
 
public void setUrlImagePrincipale(String url);
 
public void setTitreImagePrincipale(String titre);
 
public void setAltTextImagePrincipale(String altText);
 
public String getUrlImagePrincipale();
 
public String getTitreImagePrincipale();
 
public String getAltTextImagePrincipale();
 
public abstract HasClickHandlers getEnSavoirPlus();
 
public abstract void cacherZoneCache();
 
public abstract void afficherZoneCache();
 
public abstract HasWidgets getZoneVoter();
 
public HasClickHandlers getNomAuteur();
 
public HasClickHandlers getNomEspece();
 
public HasWidgets getMetadonnees();
 
public HasClickHandlers getVoirMotsCles();
public HasWidgets getZoneMotsCles();
 
public void cacherZoneMotsCles();
 
public void afficherZoneMotsCles();
public HasClickHandlers getBoutonFermer();
public void ajouterStyleLienAuteur();
public HasClickHandlers getBoutonSupprimerImage();
public void cacherZoneActionsImage();
public void afficherZoneActionsImage();
}
 
private Vue vue;
 
private final Image image;
private ImageService imageService;
private boolean detailsOuverts = false;
 
private Protocole protocole;
 
private boolean motsClesOuverts = false;
private MotsClesImagePresenteur motsClesImagePresenteur;
 
final FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
public ImagePresenteur(Image image, ImageService imageService, Protocole protocole, Vue vue) {
this.image = image;
this.imageService = imageService;
this.protocole = protocole;
this.vue = vue;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
vue.loadImage(image);
try {
// pas de profil pour les non inscrits
Integer.parseInt(image.getObservation().getIdAuteur());
vue.ajouterStyleLienAuteur();
vue.getNomAuteur().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(new Config().getUrl("profil") + image.getObservation().getIdAuteur(), "Profil utilisateur", config.getInfo("popupOptions"));
}
});
} catch(Exception e) {
// pas de bol mon coco
}
new MetadonneesPresenteur(new MetadonneesVue(), image.getObservation(), ModeRecherche.MODE_IMAGE, true).go(vue.getMetadonnees());
chargerDonneesValidation();
afficherZoneActionsImage();
gererEvenements();
}
 
private void chargerDonneesValidation() {
vue.getZoneVoter().clear();
if (protocole != null) {
HashMap<String, VoteProtocole> observationValidationDatas = image.getVotesProtocoles(protocole.getId());
if (observationValidationDatas != null) {
new MoyenneVotePresenteur(image, protocole, new MoyenneVoteVue(), new VoteProtocoleServiceConcret()).go(vue.getZoneVoter());
}
}
}
 
private void lancerEvenementValidation() {
CacheClient.getInstance().setImageCourante(image);
final Observation obs = image.getObservation();
BusEvenementiel.getInstance().fireEvent(new EvenementValidationPictoflora(obs));
}
 
protected void gererEvenements() {
ClickHandler zoomeur = new ClickHandler() {
public void onClick(ClickEvent event) {
FenetreOverlaySimplePresenteur presenteurGalerie = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
presenteurGalerie.ouvrirFenetreModaleDefilante(0, new DetailImagePresenteur(image, new DetailImageVue()));
presenteurGalerie.afficherBoutonsSuivantsPrecedents(false);
}};
vue.getImagePrincipale().addClickHandler(zoomeur);
 
vue.getEnSavoirPlus().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
BusEvenementiel.getInstance().fireEvent(new EvenementVoirDetailsImage(image));
}
});
vue.getVoirMotsCles().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
CacheClient.getInstance().setImageCourante(image);
motsClesImagePresenteur = new MotsClesImagePresenteur(
image,
new MotsClesServiceConcret(),
new FormulaireSaisieMotsClesImagePresenteur(
image.getIdImage(),
new MotsClesServiceConcret(),
new FormulaireSaisieMotsClesImageVue()),
new MotsClesImageVue());
motsClesImagePresenteur.chargerMotsCles();
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(motsClesImagePresenteur);
}
});
vue.getBoutonFermer().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
cacherPanneauMotsCles();
}
});
BusEvenementiel.getInstance().addHandler(EvenementVoirDetailsImage.TYPE, new GestionnaireEvenementVoirDetailsImage() {
@Override
public void onVoirDetailsImage(EvenementVoirDetailsImage event) {
if (image.getIdImage().equals(event.getImage().getIdImage())) {
if (!detailsOuverts) {
afficherDetails();
} else {
cacherDetails();
}
} else {
cacherDetails();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() {
@Override
public void onChangementProtocole(EvenementChangementProtocole event) {
setProtocole(event.getProtocole());
chargerDonneesValidation();
}
});
BusEvenementiel.getInstance().addHandler(EvenementFermerMotCleImage.TYPE, new GestionnaireEvenementFermerMotCleImage() {
@Override
public void onFermerMotCleImage(EvenementFermerMotCleImage evenementFermerMotCleImage) {
if (evenementFermerMotCleImage.getIdImage().equals(image.getIdImage())) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
BusEvenementiel.getInstance().addHandler(EvenementSupprimerImage.TYPE, new GestionnaireEvenementSupprimerImage() {
@Override
public void onSuppressionImage(EvenementSupprimerImage event) {
GWT.log("Attraper evnt : EvenementSupprimerImage (img:"+image.getIdImage()+")");
if (event.getIdImage().equals(image.getIdImage())) {
supprimerImg();
}
}
});
vue.getBoutonSupprimerImage().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
GWT.log("Lancer evnt : EvenementSupprimerImage");
if (Window.confirm(I18n.getVocabulary().confirmationSuppressionImg())) {
BusEvenementiel.getInstance().fireEvent(new EvenementSupprimerImage(image.getIdImage()));
}
}
});
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() {
@Override
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) {
afficherZoneActionsImage();
}
});
}
 
private void supprimerImg() {
if (avoirUtilisateurAdmin()) {
GWT.log("supprimerImg :"+image.getIdImage());
imageService.supprimer(image, new SuppressionImageCallback() {
@Override
public void surRetour(String suppressionOk) {
GWT.log("Suppression image "+image.getIdImage()+" "+suppressionOk);
if (suppressionOk.equals("OK")) {
vue.asWidget().removeFromParent();
}
}
});
}
}
protected void afficherPanneauMotsCles() {
vue.afficherZoneMotsCles();
motsClesOuverts = true;
motsClesImagePresenteur.chargerMotsCles();
motsClesImagePresenteur.focuserChampsSaisie();
}
protected void cacherPanneauMotsCles() {
vue.cacherZoneMotsCles();
motsClesOuverts = false;
}
 
public void cacherDetails() {
vue.cacherZoneCache();
detailsOuverts = false;
}
 
public void afficherDetails() {
vue.afficherZoneCache();
detailsOuverts = true;
}
 
public boolean isDetailsOpen() {
return detailsOuverts;
}
 
public Protocole getProtocole() {
return protocole;
}
 
public void setProtocole(Protocole protocole) {
this.protocole = protocole;
}
private void afficherZoneActionsImage() {
if (avoirUtilisateurAdmin()) {
vue.afficherZoneActionsImage();
} else {
vue.cacherZoneActionsImage();
}
}
private boolean avoirUtilisateurAdmin() {
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur();
boolean etreAdmin = false;
if (utilisateur != null) {
etreAdmin = utilisateur.estIdentifie() && utilisateur.etreAdmin();
}
return etreAdmin;
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/images/ImageVue.java
New file
0,0 → 1,191
package org.tela_botanica.del.client.vues.pictoflora.resultats.images;
 
import org.tela_botanica.del.client.i18n.I18n;
 
import com.google.gwt.core.client.GWT;
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.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.Widget;
 
public class ImageVue extends Composite implements ImagePresenteur.Vue {
 
// Annotation can be used to change the name of the associated xml file
// @UiTemplate("ObservationVue.ui.xml")
interface MyUiBinder extends UiBinder<Widget, ImageVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
@UiField
protected HTML nomEspece, nomAuteur;
@UiField
protected HTMLPanel zoneVoter, zonePlus, zoneActionsImage;
 
@UiField
protected HorizontalPanel voter;
 
@UiField
protected Panel zoneCache, zoneMotsCles;
 
@UiField
Image imagePrincipale;
@UiField
PushButton btnSupprImg, btnVoirTags, btnVoirInfoObs;
@UiField
Button boutonFermer;
@UiField Panel metadonnees;
 
public ImageVue() {
// sets listBox
initWidget(uiBinder.createAndBindUi(this));
}
 
public HasWidgets getZoneVoter() {
return voter;
}
 
public void cacherZoneCache() {
zoneCache.setVisible(false);
}
 
public void afficherZoneCache() {
zoneCache.setVisible(true);
}
 
public void loadImage(org.tela_botanica.del.client.modeles.Image image) {
zoneCache.setVisible(false);
zoneMotsCles.setVisible(false);
nomEspece.setHTML("<p>"+image.getObservation().getNomRetenu()+"</p>");
 
nomAuteur.setHTML("<p>"+image.getObservation().getAuteur()+"</p>");
imagePrincipale.setUrl(image.getUrl());
imagePrincipale.setPixelSize(250, 250);
imagePrincipale.setTitle(I18n.getVocabulary().indicationActionClicImage());
imagePrincipale.setAltText(image.getObservation().getAuteur() + " - " + image.getObservation().getNomRetenu());
btnVoirTags.setTitle(I18n.getVocabulary().voirMotsCles());
btnVoirInfoObs.setTitle(I18n.getVocabulary().voirMetadonnees());
zoneActionsImage.setTitle(I18n.getVocabulary().supprimerImage());
}
 
@Override
public HasClickHandlers getImagePrincipale() {
return imagePrincipale;
}
 
@Override
public IsWidget getImagePrincipaleWidget() {
return imagePrincipale;
}
@Override
public HasClickHandlers getEnSavoirPlus() {
return btnVoirInfoObs;
}
@Override
public HasClickHandlers getVoirMotsCles() {
return btnVoirTags;
}
 
@Override
public void setUrlImagePrincipale(String url) {
imagePrincipale.setUrl(url);
}
 
@Override
public void setTitreImagePrincipale(String titre) {
imagePrincipale.setTitle(titre);
}
 
@Override
public void setAltTextImagePrincipale(String altText) {
imagePrincipale.setAltText(altText);
}
 
@Override
public String getUrlImagePrincipale() {
return imagePrincipale.getUrl();
}
 
@Override
public String getTitreImagePrincipale() {
return imagePrincipale.getTitle();
}
 
@Override
public String getAltTextImagePrincipale() {
return imagePrincipale.getAltText();
}
 
@Override
public HasClickHandlers getNomAuteur() {
return nomAuteur;
}
@Override
public HasClickHandlers getNomEspece() {
return nomEspece;
}
public HasWidgets getMetadonnees() {
return metadonnees;
}
 
@Override
public void cacherZoneMotsCles() {
zoneMotsCles.setVisible(false);
}
 
@Override
public void afficherZoneMotsCles() {
zoneMotsCles.setVisible(true);
}
 
@Override
public HasWidgets getZoneMotsCles() {
return zoneMotsCles;
}
 
@Override
public HasClickHandlers getBoutonFermer() {
return boutonFermer;
}
 
@Override
public void ajouterStyleLienAuteur() {
nomAuteur.addStyleName("lien");
}
@Override
public HasClickHandlers getBoutonSupprimerImage() {
return btnSupprImg;
}
@Override
public void cacherZoneActionsImage() {
zoneActionsImage.setVisible(false);
}
@Override
public void afficherZoneActionsImage() {
zoneActionsImage.setVisible(true);
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/images/image.css
New file
0,0 → 1,144
.observations {
width: 250px;
height: 250px;
margin-bottom: 50px;
}
.observations img {
width: 250px;
padding: 0;
}
.zoneCache {
position: absolute;
padding: 5px;
border: solid 1px #CCC;
background: #333;
opacity: 0.9;
color: white;
width: 238px;
z-index: 1000;
margin-top: 35px;
}
.zoneMotsCles {
position: absolute;
padding: 5px;
border: solid 1px #CCC;
background: #333;
opacity: 0.9;
color: white;
width: 239px;
z-index: 1000;
margin-top: 212px;
}
.zoneActionsImg {
position:absolute;
width:30px;
height:30px;
margin-top:3px;
margin-left:216px;
}
.cadreBtnSupprImg, .cadreBtnVoirTags, .cadreBtnVoirInfoObs {
width:30px;
height:30px;
cursor:pointer;
background-color:rgba(51,51,51, 0.7);
border-radius:5px;
}
.cadreBtnSupprImg:hover, .cadreBtnVoirTags:hover, .cadreBtnVoirInfoObs:hover {
background-color:rgba(0,0,0, 0.7);
border: 1px solid rgba(255,255,255, 0.7);
}
.cadreBtnVoirTags {
position: absolute;
margin-top: 180px;
margin-left: 216px;
}
.cadreBtnVoirInfoObs {
position: absolute;
margin-top: 3px;
margin-left: 3px;
}
.btnSupprImg, .btnVoirTags, .btnVoirInfoObs {
width:30px;
height:30px;
}
.btnSupprImg {
background:url(./img/24x24/delete.png) 3px 3px no-repeat;
}
.btnVoirTags {
background:url(./img/24x24/tagger.png) 3px 3px no-repeat;
}
.btnVoirInfoObs {
background:url(./img/24x24/plus.png) 3px 3px no-repeat;
}
.zoom {
background: url(./img/loupe.png);
width: 30px;
height: 30px;
cursor: pointer;
margin-top: 3px;
position: absolute;
margin-left: 217px;
}
.espece {
font-size: 12px;
font-weight: bold;
color: white;
padding-left: 5px;
padding-right: 1px;
}
.espece p,.auteur p {
padding: 0px;
margin: 0px;
overflow: hidden;
text-overflow: ellipsis;
white-space: pre;
min-height: 13px;
}
.zoneDetail {
position: absolute;
}
.zonePlus {
position: absolute;
width: 246px;
padding: 2px;
margin-top: -88px;
opacity: 0.9;
color: white;
text-align: left;
overflow: hidden;
text-overflow: ellipsis;
background:#333;
}
.zoneImage {
cursor: pointer;
height: 280px;
margin-bottom: 20px;
background: #DDD;
}
.zoneVoter {
margin-top: -48px;
text-align: center;
opacity: 0.9;
width: 240px;
position: absolute;
height: 35px;
padding: 5px;
}
.metadonnees, .motsCles {
text-align: left;
}
.auteur {
padding-left: 5px;
padding-right: 1px;
padding-top: 3px;
}
.boutonFermer {
background: url("./img/close.png") no-repeat scroll 5px 0 transparent;
border: medium none;
height: 30px;
margin-left: 104px;
margin-top: -20px;
position: absolute;
width: 40px;
cursor:pointer;
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/resultats/ResultatPictofloraVue.java
New file
0,0 → 1,263
package org.tela_botanica.del.client.vues.pictoflora.resultats;
 
import java.util.ArrayList;
import java.util.List;
 
import com.google.gwt.core.client.GWT;
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.HTMLPanel;
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.Widget;
 
public class ResultatPictofloraVue extends Composite implements ResultatPictofloraPresenteur.Vue {
 
@UiField
Panel panneauChargement;
private final List<HasWidgets> panneauxImages = new ArrayList<HasWidgets>();
private final int nbImagesPerPage = 10;
private int numImage = 0;
 
// Annotation can be used to change the name of the associated xml file
// @UiTemplate("ObservationRechercheVue.ui.xml")
interface MyUiBinder extends UiBinder<Widget, ResultatPictofloraVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
 
@UiField
Panel panneauPagination, panneauPaginationHaut, zoneTri;
 
@UiField
HTMLPanel imageTable;
 
@UiField
Button triParMoyenneArithmetiqueAscendant, triParMoyenneArithmetiqueDescendant, triParDateAscendant, triParDateDescendant, triParNbTagsAscendant, triParNbTagsDescendant, triParPointsAscendant, triParPointsDescendant;
 
@UiField
Label aucunResultat;
@UiField
Label labelMoyenneArithmetique, labelDate, labelTag, labelPoints;
// Constructeur
public ResultatPictofloraVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
/**
* Nettoie et remet à zéro les composants du panneau qui doivent l'être
* */
public void nettoyer() {
setNumImage(0);
imageTable.clear();
panneauxImages.clear();
}
 
public void creerPanneauxObservations(int taille) {
panneauxImages.clear();
for (int i = 0; i < taille; i++) {
Panel imagePanel = new HTMLPanel("");
panneauxImages.add(imagePanel);
}
}
 
public void afficherElementsAucunResultatTrouve() {
imageTable.clear();
aucunResultat.setVisible(true);
panneauPaginationHaut.setVisible(false);
panneauPagination.setVisible(false);
zoneTri.setVisible(false);
}
 
public void afficherElementsResultatsTrouve() {
aucunResultat.setVisible(false);
panneauPaginationHaut.setVisible(true);
panneauPagination.setVisible(true);
zoneTri.setVisible(true);
}
 
public void setNumImage(int numImage) {
this.numImage = numImage;
}
 
public void startChargement() {
panneauChargement.setHeight((this.getOffsetHeight() - (panneauPagination.getOffsetHeight() * 2)) + "px");
panneauChargement.setVisible(true);
}
 
public void stopChargement() {
panneauChargement.setVisible(false);
}
 
public HTMLPanel getImageTable() {
return imageTable;
}
 
public int getNumImage() {
return numImage;
}
 
public Panel getPanneauChargement() {
return panneauChargement;
}
 
public Panel getPanneauPagination() {
return panneauPagination;
}
 
public Panel getPanneauPaginationHaut() {
return panneauPaginationHaut;
}
 
public int getNbImagesPerPage() {
return nbImagesPerPage;
}
 
public List<HasWidgets> getPanneauxImages() {
return panneauxImages;
}
 
public Button getTriParMoyenneArithmetiqueAscendant() {
return triParMoyenneArithmetiqueAscendant;
}
 
public Button getTriParMoyenneArithmetiqueDescendant() {
return triParMoyenneArithmetiqueDescendant;
}
 
public Button getTriParDateAscendant() {
return triParDateAscendant;
}
 
public Button getTriParDateDescendant() {
return triParDateDescendant;
}
 
public Button getTriParPointsAscendant() {
return triParPointsAscendant;
}
 
public Button getTriParPointsDescendant() {
return triParPointsDescendant;
}
 
@Override
public Label getLabelMoyenneArithmetique() {
return labelMoyenneArithmetique;
}
 
@Override
public void masquerMoyenneArithmetiqueAscendant() {
triParMoyenneArithmetiqueAscendant.setVisible(false);
}
@Override
public void masquerMoyenneArithmetiqueDescendant() {
triParMoyenneArithmetiqueDescendant.setVisible(false);
}
@Override
public void afficherMoyenneArithmetiqueAscendant() {
triParMoyenneArithmetiqueAscendant.setVisible(true);
}
@Override
public void afficherMoyenneArithmetiqueDescendant() {
triParMoyenneArithmetiqueDescendant.setVisible(true);
}
 
@Override
public Label getLabelPoints() {
return labelPoints;
}
@Override
public void afficherPointsAscendant() {
triParPointsAscendant.setVisible(true);
}
@Override
public void afficherPointsDescendant() {
triParPointsDescendant.setVisible(true);
}
@Override
public void masquerPointsAscendant() {
triParPointsAscendant.setVisible(false);
}
@Override
public void masquerPointsDescendant() {
triParPointsDescendant.setVisible(false);
}
@Override
public Label getLabelDate() {
return labelDate;
}
@Override
public Label getLabelTag() {
return labelTag;
}
@Override
public void masquerDateAscendant() {
triParDateAscendant.setVisible(false);
}
@Override
public void masquerDateDescendant() {
triParDateDescendant.setVisible(false);
}
@Override
public void afficherDateAscendant() {
triParDateAscendant.setVisible(true);
}
@Override
public void afficherDateDescendant() {
triParDateDescendant.setVisible(true);
}
 
@Override
public HasClickHandlers getTriParNbTagsAscendant() {
return triParNbTagsAscendant;
}
 
@Override
public HasClickHandlers getTriParNbTagsDescendant() {
return triParNbTagsDescendant;
}
 
@Override
public void afficherTagAscendant() {
triParNbTagsAscendant.setVisible(true);
}
 
@Override
public void masquerTagAscendant() {
triParNbTagsAscendant.setVisible(false);
}
 
@Override
public void afficherTagDescendant() {
triParNbTagsDescendant.setVisible(true);
}
 
@Override
public void masquerTagDescendant() {
triParNbTagsDescendant.setVisible(false);
}
 
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/moteur/MoteurPictofloraPresenteur.java
New file
0,0 → 1,196
package org.tela_botanica.del.client.vues.pictoflora.moteur;
 
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRecherchePresenteur;
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRechercheVue;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
import org.tela_botanica.del.client.services.rest.ImageServiceConcret;
import org.tela_botanica.del.client.services.rest.ProtocoleService;
import org.tela_botanica.del.client.services.rest.ProtocoleServiceConcret;
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
import org.tela_botanica.del.client.vues.pictoflora.resultats.ResultatPictofloraPresenteur;
import org.tela_botanica.del.client.vues.pictoflora.resultats.ResultatPictofloraVue;
 
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.ListBox;
 
public class MoteurPictofloraPresenteur {
 
public interface Vue extends IsWidget {
public HasWidgets getZoneResultats();
 
public HasWidgets getZoneRecherche();
 
public void ajouterVue(HasWidgets composite);
 
public void setListeProtocoles(ListBox listeProtocoles);
public HasChangeHandlers getListeProtocoles();
public void ajouterProtocole(String NomProtocole, String idProtocole);
 
public void selectionnerProtocole(int index);
public void selectionnerProtocoleParProtocole(Protocole protocole);
public String getNomProtocoleSelectionne();
 
public int getIdProtocoleSelectionne();
 
public void ajouterProtocoles(List<Protocole> protocoles);
 
public void mettreAJourDescriptionProtocoleCourant(Protocole protocoleCourant);
}
 
private Vue vue;
private ProtocoleService protocoleService;
private List<Protocole> protocoles;
 
/**
* Constructeur
* */
public MoteurPictofloraPresenteur(Vue vue, ProtocoleService protocoleService) {
this.vue = vue;
this.protocoleService = protocoleService;
chargerProtocoles();
// TODO: le code ci dessous sert à ne pas recharger les protocoles
// à chaque fois, voir si on peut le factoriser quelque part
if (CacheClient.getInstance().getProtocoleCourant() == null) {
if (CacheClient.getInstance().getListeProtocoles() == null) {
protocoleService.getProtocoles(new ProtocolesCallback() {
 
@Override
public void surRetour(ProtocoleServiceResultat protocolesRecus) {
CacheClient.getInstance().setListeProtocoles(protocolesRecus.getProtocoles());
if (protocolesRecus.getProtocoles().size() > 0) {
if(protocoles == null) {
protocoles = protocolesRecus.getProtocoles();
}
//Vérifier qu'on n'a pas demandé un protocole particulier en paramètre
String parametre = CacheClient.getInstance().getIdProtocoleEnAttente();
if (parametre != null) {
for (Protocole protocoleCourant : protocoles) {
if (parametre.equals(String.valueOf(protocoleCourant.getId()))) {
CacheClient.getInstance().setProtocoleCourant(protocoleCourant);
}
}
CacheClient.getInstance().setIdProtocoleEnAttente(null);
} else {
CacheClient.getInstance().setProtocoleCourant(protocolesRecus.getProtocoles().get(0));
}
} else {
// TODO afficher message indiquant que la liste des
// protocoles de votes n'est pas fourni
}
}
});
} else {
CacheClient.getInstance().setProtocoleCourant(CacheClient.getInstance().getListeProtocoles().get(0));
}
}
gererEvenements();
}
private void gererEvenements() {
vue.getListeProtocoles().addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
surChangementProtocole();
}
});
}
private void chargerProtocoles() {
// test pour ne pas charger les protocoles déjà chargés
// TODO: faire un systeme de cache gérés par les web service eux même
if (CacheClient.getInstance().getListeProtocoles() == null) {
protocoleService.getProtocoles(new ProtocolesCallback() {
 
@Override
public void surRetour(ProtocoleServiceResultat protocolesRecus) {
protocoles = protocolesRecus.getProtocoles();
remplirListeProtocole(protocoles);
surChangementProtocole();
}
});
} else {
protocoles = CacheClient.getInstance().getListeProtocoles();
remplirListeProtocole(CacheClient.getInstance().getListeProtocoles());
}
}
public void surChangementProtocole() {
Protocole protocoleCourant = null;
for (Protocole protocole : protocoles) {
if (protocole.getId() == vue.getIdProtocoleSelectionne()) {
protocoleCourant = protocole;
}
}
vue.mettreAJourDescriptionProtocoleCourant(protocoleCourant);
CacheClient.getInstance().setProtocoleCourant(protocoleCourant);
EvenementChangementProtocole evenement = new EvenementChangementProtocole(protocoleCourant);
BusEvenementiel.getInstance().fireEvent(evenement);
CacheClient.getInstance().mettreAjourUrlCourante();
}
private void remplirListeProtocole(List<Protocole> protocoles) {
//si un paramètre est passé dans l'url, on sélectionne un protocole
String parametre = CacheClient.getInstance().getIdProtocoleEnAttente();
if (parametre != null) {
for (Protocole protocoleCourant : protocoles) {
if (parametre.equals(String.valueOf(protocoleCourant.getId()))) {
CacheClient.getInstance().setProtocoleCourant(protocoleCourant);
}
}
}
vue.ajouterProtocoles(protocoles);
if (CacheClient.getInstance().getProtocoleCourant() == null) {
vue.selectionnerProtocole(0);
vue.mettreAJourDescriptionProtocoleCourant(protocoles.get(0));
} else {
vue.selectionnerProtocoleParProtocole(CacheClient.getInstance().getProtocoleCourant());
vue.mettreAJourDescriptionProtocoleCourant(CacheClient.getInstance().getProtocoleCourant());
}
CacheClient.getInstance().mettreAjourUrlCourante();
}
 
public void go(HasWidgets composite) {
vue.ajouterVue(composite);
chargerMoteurRechercheAvancee();
}
 
public void chargerMoteurRechercheAvancee() {
MoteurRecherchePresenteur presenteurRecherche = new MoteurRecherchePresenteur(new MoteurRechercheVue(""), ModeRecherche.MODE_IMAGE) {
public void lancerRecherche() {
chercherImages();
}
};
presenteurRecherche.go(vue.getZoneRecherche());
}
 
public void chercherImages() {
vue.getZoneResultats().clear();
CacheClient.getInstance().mettreAjourUrlCourante();
new ResultatPictofloraPresenteur(new ImageServiceConcret(), new ProtocoleServiceConcret(), new ResultatPictofloraVue()).go(vue.getZoneResultats());
}
 
public HasWidgets getZoneResultats() {
return vue.getZoneResultats();
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/moteur/MoteurPictofloraVue.java
New file
0,0 → 1,118
package org.tela_botanica.del.client.vues.pictoflora.moteur;
 
import java.util.List;
 
import org.tela_botanica.del.client.modeles.Protocole;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.dom.client.OptionElement;
import com.google.gwt.dom.client.SelectElement;
import com.google.gwt.event.dom.client.HasChangeHandlers;
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.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class MoteurPictofloraVue extends Composite implements MoteurPictofloraPresenteur.Vue {
 
private final Panel panneauChargement = new FlowPanel();
 
interface MyUiBinder extends UiBinder<Widget, MoteurPictofloraVue> {
}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
 
@UiField
Panel panneauResultats, zoneRecherche;
@UiField
ListBox listeProtocoles;
// Constructeur
public MoteurPictofloraVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
public Panel getPanneauChargement() {
return panneauChargement;
}
 
// Cette méthode est public car appelé dans GestionnaireHistorique
public Panel getZoneResultats() {
return panneauResultats;
}
 
public void setPanneauResultats(Panel panneauResultats) {
this.panneauResultats = panneauResultats;
}
 
public HasWidgets getZoneRecherche() {
return zoneRecherche;
}
 
@Override
public void ajouterVue(HasWidgets composite) {
composite.add(this.asWidget());
}
public void setListeProtocoles(ListBox listeProtocoles) {
this.listeProtocoles = listeProtocoles;
}
public HasChangeHandlers getListeProtocoles() {
return listeProtocoles;
}
public void ajouterProtocole(String NomProtocole, String idProtocole) {
listeProtocoles.addItem(NomProtocole, idProtocole);
}
 
public void selectionnerProtocole(int index) {
listeProtocoles.setSelectedIndex(index);
}
@Override
public String getNomProtocoleSelectionne() {
return listeProtocoles.getItemText((listeProtocoles.getSelectedIndex()));
}
 
@Override
public int getIdProtocoleSelectionne() {
return Integer.parseInt(listeProtocoles.getValue((listeProtocoles.getSelectedIndex())));
}
@Override
public void ajouterProtocoles(List<Protocole> protocoles) {
SelectElement selectElement = SelectElement.as(listeProtocoles.getElement());
NodeList<OptionElement> options = selectElement.getOptions();
for (int i = 0; i < protocoles.size(); i++) {
listeProtocoles.addItem(protocoles.get(i).getNom(), protocoles.get(i).getId()+"");
options.getItem(i).setTitle(protocoles.get(i).getDescription());
}
}
 
@Override
public void mettreAJourDescriptionProtocoleCourant(
Protocole protocoleCourant) {
listeProtocoles.setTitle(protocoleCourant.getDescription());
}
 
@Override
public void selectionnerProtocoleParProtocole(Protocole protocole) {
int index = 0;
for (int i = 0; i < listeProtocoles.getItemCount(); i++) {
int id = Integer.parseInt(listeProtocoles.getValue(i));
if (id == protocole.getId()) {
index = i;
}
}
listeProtocoles.setSelectedIndex(index);
}
 
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/moteur/rechercheImage.css
New file
0,0 → 1,53
.zoneRecherche {
width: 100%
}
 
.protocoles {
margin-top:-61px;
margin-left:68px;
position:absolute;
}
 
.moteurRecherche {
margin-bottom: 10px;
}
 
.moteurRecherche button {
margin-left: 2px;
margin-top: -1px
}
 
.labelProtocole {
padding: 0 5px 0 0;
float: left
}
 
.chapeau {
min-height:70px;
}
 
.labelProtocole:after {
content: " :"
}
 
.entrerMotClef {
margin-bottom: 10px;
}
 
.lienProposerImage {
margin-top:20px;
margin-left:70px;
margin-bottom:10px;
}
 
.lienAide {
margin-right:70px;
padding:4px 15px;
margin-top:19px;
float:right;
color:white;
}
 
.titreRecherche {
margin:0;
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/moteur/MoteurPictofloraVue.ui.xml
New file
0,0 → 1,26
<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: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="rechercheImage.css" />
<g:HTMLPanel>
<g:HTMLPanel styleName="limiteMax">
<g:HorizontalPanel styleName="gauche {style.protocoles}">
<g:Label>Choisir un protocole : </g:Label>
<g:ListBox ui:field="listeProtocoles" />
</g:HorizontalPanel>
<g:HTMLPanel styleName="importance1">
<g:Label text="{constants.rechercherImage}" styleName="titre {style.titreRecherche}" />
<g:Label text="{constants.entrerMotClef}" styleName="gris {style.entrerMotClef}" />
<g:HTMLPanel ui:field="zoneRecherche" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel ui:field="panneauResultats" />
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/determinationVue.css
New file
0,0 → 1,120
.pageDetermination {
}
.metadonnees {
margin-bottom:10px;
margin-top:10px;
display:inline-block;
}
.zoneVote {
margin-left: 5px;
height: 100%;
display:inline-block;
vertical-align:top;
border-left: solid 1px #DDD;
border-right: solid 1px #DDD;
padding-left: 10px;
padding-right:10px;
text-align:left;
}
 
.taxonPlusProbable {
float: left;
}
 
.zoneBarreRepartition {
border: solid 1px #DDD;
padding: 15px;
}
 
.zoneDetailImage {
height: 100%;
width: 255px;
display:inline-block;
vertical-align:top;
text-align:left;
clear: left;
}
 
.zoneImage {
margin-bottom: 10px;
margin-right: 15px
}
 
.zoneImage div {
clear: left;
padding-top: 5px;
}
 
.zoneImage div img {
float: left;
padding: 0 5px 0 0;
}
 
.boutonProposer {
float: left;
padding: 5px;
cursor: pointer;
background:#8EB533;
border:none;
margin-right:10px;
margin-top:10px;
}
 
.zoneOutils {
width: 15%;
padding-left:10px;
display:inline-block;
vertical-align:top;
text-align:left;
}
 
.boutons {
margin-bottom:15px;
}
 
.lienProposerObservation {
margin-left: 575px;
}
 
.nomTaxonProbable{
padding-left:3px;
}
 
.taxonProbable {
background: none repeat scroll 0 0 #F8F8C3;
clear: left;
font-size: 15px;
margin-bottom: 5px;
padding: 13px 9px;
}
 
.voteProtocole div {
margin-bottom:10px;
}
 
.voteProtocole div div {
margin-bottom:0px;
border:solid 0px red
}
.autreOutils {
margin-top:15px;
}
 
.zonerss {
margin-top:5px;
}
 
.lienProposerImage {
margin-top:20px;
margin-left:70px;
margin-bottom:10px;
}
 
.lienAide {
margin-right:70px;
padding:4px 15px;
margin-top:19px;
float:right;
color:white;
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/PictofloraDeterminationVue.ui.xml
New file
0,0 → 1,55
<!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:forum="urn:import:org.tela_botanica.del.client.composants.forum">
 
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="determinationVue.css" />
 
<g:HTMLPanel styleName="{style.pageDetermination}">
<g:HTMLPanel styleName="limiteMax">
<g:Hyperlink ui:field="lienRetour" styleName="lien">Retour</g:Hyperlink>
<g:HTMLPanel ui:field="metadonnees" styleName="{style.metadonnees}"/>
</g:HTMLPanel>
<g:HTMLPanel styleName="contenuCentre">
<g:HTMLPanel styleName="{style.zoneDetailImage}">
<g:VerticalPanel ui:field="detailImageObservation" styleName="{style.zoneImage}"/>
<g:Label text="Votes associés à l'image" styleName="titre"></g:Label>
<g:HTMLPanel ui:field="voteProtocole" styleName="{style.voteProtocole}"/>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneVote}">
<g:Label styleName="titre" text="{constants.titreDetermination}" />
<g:HTMLPanel styleName="nettoyage {style.boutons}">
<g:Button text="{constants.proposerSaDetermination}" ui:field="boutonAjoutProposition" styleName="bouton" />
<g:Button text="{constants.ajouterCommentaire}" ui:field="boutonAjoutCommentaire" styleName="bouton" />
<g:HTMLPanel ui:field="zoneRss" styleName="droite {style.zonerss}"></g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.taxonProbable}">
<g:Label styleName="gauche" text="{constants.determinationPlusProbable}" />
<g:Label ui:field="nomTaxonProbable" styleName="gauche gras {style.nomTaxonProbable}"/>
<g:HTML><br /></g:HTML>
</g:HTMLPanel>
<g:VerticalPanel ui:field="forum" />
<g:HTMLPanel styleName="nettoyage {style.boutons}">
<g:Button text="{constants.proposerSaDetermination}" ui:field="boutonAjoutPropositionBas" styleName="bouton" />
<g:Button text="{constants.ajouterCommentaire}" ui:field="boutonAjoutCommentaireBas" styleName="bouton" />
</g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.zoneOutils}">
<g:Label text="Pour vous aider : " styleName="titre3"></g:Label>
<g:VerticalPanel ui:field="formulaireRechercheEflore"/>
<g:Label styleName="{style.autreOutils} sousTitre">Vérifier sa détermination</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienEflore">eFlore</g:Label>
<g:Label styleName="{style.autreOutils} sousTitre">Autres outils en ligne</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienOuvrages">Flores numérisées</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienBonnier">Flore Bonnier interactive</g:Label>
<g:Label styleName="lienListe labelLien" ui:field="lienCles">Clés de détermination</g:Label>
</g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/PictofloraDeterminationPresenteur.java
New file
0,0 → 1,294
package org.tela_botanica.del.client.vues.pictoflora.plateformedetermination;
 
import java.util.Iterator;
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue;
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur;
import org.tela_botanica.del.client.composants.formulairerechercheeflore.FormulaireRechercheEflorePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentairePresenteur;
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue;
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.composants.forum.ForumPresenteur;
import org.tela_botanica.del.client.composants.forum.ForumVue;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesEnLigneVue;
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur;
import org.tela_botanica.del.client.composants.observations.ObservationImagesPresenteur;
import org.tela_botanica.del.client.composants.observations.ObservationImagesVue;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlPresenteur;
import org.tela_botanica.del.client.composants.partageurl.PartageUrlVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.rss.RssPresenteur;
import org.tela_botanica.del.client.composants.rss.RssVue;
import org.tela_botanica.del.client.config.Config;
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.ModeRecherche;
import org.tela_botanica.del.client.modeles.MoyenneVote;
import org.tela_botanica.del.client.modeles.Observation;
import org.tela_botanica.del.client.modeles.ObservationServiceResultat;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat;
import org.tela_botanica.del.client.modeles.VoteDetermination;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire;
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire;
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.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
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.services.rest.CommentaireServiceConcret;
import org.tela_botanica.del.client.services.rest.ObservationService;
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret;
import org.tela_botanica.del.client.services.rest.ProtocoleService;
import org.tela_botanica.del.client.services.rest.async.ObservationsCallback;
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback;
import org.tela_botanica.del.client.utils.URLUtils;
import org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.ligneProtocole.LigneProtocolePresenteur;
import org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.ligneProtocole.LigneProtocoleVue;
 
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.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Panel;
 
public class PictofloraDeterminationPresenteur extends Presenteur {
 
/**
* Vue de l'interface de détermination
* */
public interface Vue extends IsWidget {
public Panel getForum();
 
public Panel getDetailImageObservation();
 
public Panel getFormulaireRechercheEflore();
 
public Panel getVoteProtocole();
 
public Button getBoutonAjoutProposition();
 
public Button getBoutonAjoutCommentaire();
 
public Button getBoutonAjoutPropositionBas();
 
public Button getBoutonAjoutCommentaireBas();
 
public HasWidgets getMetadonnees();
 
public HasWidgets getNouvelleLigneProtocole();
 
public void afficherNomTaxonProbable(String nomTaxon);
public HasClickHandlers getLienOuvrages();
public HasClickHandlers getLienBonnier();
public HasClickHandlers getLienCles();
public HasClickHandlers getLienEflore();
public HasWidgets getZoneRss();
}
 
private Vue vue;
private FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur;
 
// Déclaration des services à utiliser
private ProtocoleService protocoleService;
private ObservationService observationService;
 
private CacheClient cache = CacheClient.getInstance();
 
public PictofloraDeterminationPresenteur(Vue vue, ObservationService observationService, ProtocoleService protocoleService) {
this.vue = vue;
this.protocoleService = protocoleService;
this.observationService = observationService;
}
 
public void go(final HasWidgets composite) {
 
// TODO afficher une icone de chargement si le chargement devient trop
// long
// car tout l'écran est asynchrone ici
String observationId = URLUtils.getURLSpecialParameterValue();
 
observationService.getObservation(observationId, new ObservationsCallback() {
 
@Override
public void surRetour(ObservationServiceResultat objetRetour) {
afficherRss(cache.getObservationCourante());
// trouve l'image courante si elle n'est pas deja en cache
List<Image> listeImages = cache.getObservationCourante().getImages();
if (listeImages.size() > 0) {
CacheClient.getInstance().setImageCourante(listeImages.get(0));
} else {
CacheClient.getInstance().setImageCourante(null);
}
 
new MetadonneesPresenteur(new MetadonneesEnLigneVue(), cache.getObservationCourante(), ModeRecherche.MODE_OBSERVATION, false).go(vue.getMetadonnees());
new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
chargerEtAjouterLignesVotesProtocole();
new ForumPresenteur(new ForumVue()).go(vue.getForum());
new FormulaireRechercheEflorePresenteur().go(vue.getFormulaireRechercheEflore());
 
calculerEtAfficherVoteDeterminationPlusPopulaire();
composite.add(vue.asWidget());
 
}
 
@Override
public void surErreur(String messageErreur) {
Window.alert(messageErreur);
}
});
gererEvenements();
}
 
public void afficherRss(Observation observation) {
new RssPresenteur(new RssVue(), observation, "Suivre cette observation").go(vue.getZoneRss());
}
private void chargerEtAjouterLignesVotesProtocole() {
if (cache.getListeProtocoles() == null) {
protocoleService.getProtocoles(new ProtocolesCallback() {
 
@Override
public void surRetour(ProtocoleServiceResultat protocolesRecus) {
List<Protocole> listeProtocoles = protocolesRecus.getProtocoles();
ajouterLignesVotesProtocole(listeProtocoles);
}
});
} else {
List<Protocole> listeProtocoles = cache.getListeProtocoles();
ajouterLignesVotesProtocole(listeProtocoles);
}
}
 
private void ajouterLignesVotesProtocole(List<Protocole> listeProtocoles) {
for (Iterator<Protocole> iterator = listeProtocoles.iterator(); iterator.hasNext();) {
Protocole protocole = iterator.next();
LigneProtocolePresenteur presenteurLigneProtocole = new LigneProtocolePresenteur(protocole, new LigneProtocoleVue());
presenteurLigneProtocole.go(vue.getNouvelleLigneProtocole());
}
}
 
private void calculerEtAfficherVoteDeterminationPlusPopulaire() {
 
Observation observation = cache.getObservationCourante();
String nomTaxon = observation.getNomRetenu();
 
List<MoyenneVote> votesOrdonnes = CalculVoteDeterminationService.calculerVoteDeterminationPlusPopulaire(cache.getObservationCourante().getPropositionDeterminations());
if (votesOrdonnes.size() > 0) {
nomTaxon = votesOrdonnes.get(0).getIntituleAssocie();
}
 
vue.afficherNomTaxonProbable(nomTaxon);
}
 
public void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() {
@Override
public void onVoteDetermination(VoteDetermination event) {
calculerEtAfficherVoteDeterminationPlusPopulaire();
}
});
 
ClickHandler clicAjoutProposition = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(new FormulairePropositionPresenteur(new FormulairePropositionVue(), new PropositionDeterminationServiceConcret()));
}
};
vue.getBoutonAjoutProposition().addClickHandler(clicAjoutProposition);
vue.getBoutonAjoutPropositionBas().addClickHandler(clicAjoutProposition);
 
ClickHandler clicAjoutCommentaire = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(cache.getObservationCourante(), new CommentaireServiceConcret(), new FormulaireCommentaireVue());
fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue());
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur);
}
};
vue.getBoutonAjoutCommentaire().addClickHandler(clicAjoutCommentaire);
vue.getBoutonAjoutCommentaireBas().addClickHandler(clicAjoutCommentaire);
 
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() {
@Override
public void onAjoutDetermination(EvenementAjoutDetermination event) {
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() {
 
@Override
public void onAjoutCommentaire(EvenementAjoutCommentaire event) {
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) {
fenetreOverlaySimplePresenteur.fermerFenetreModale();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
 
@Override
public void onChangementImage(EvenementChangementImageValidation event) {
vue.getDetailImageObservation().clear();
vue.getVoteProtocole().clear();
new ObservationImagesPresenteur(new ObservationImagesVue(), cache.getObservationCourante(), CacheClient.getInstance().getImageCourante()).go(vue.getDetailImageObservation());
chargerEtAjouterLignesVotesProtocole();
}
});
vue.getLienOuvrages().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("ouvragesFlore"), "Flores numérisées", config.getInfo("popupOptions"));
}
});
 
vue.getLienBonnier().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("bonnierPda"), "Flore Bonnier PDA", config.getInfo("popupOptions"));
}
});
vue.getLienCles().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("clesDetermination"), "Clés de determination", config.getInfo("popupOptions"));
}
});
vue.getLienEflore().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Config config = new Config();
Window.open(config.getUrl("eflore"), "eFlore", config.getInfo("popupOptions"));
}
});
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/detail/DetailImageObservationVue.ui.xml
New file
0,0 → 1,36
<!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'>
 
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<ui:style src="detailObservation.css" />
<g:VerticalPanel>
<g:Image ui:field="imageObservation"/>
<g:VerticalPanel ui:field="detailObservation" styleName="{style.detailObservation}">
<g:HorizontalPanel styleName="{style.observateur}">
<!-- g:Label text="{constants.observateur} : "/ -->
<g:Label ui:field="nomObservateur" /><g:HTML>&nbsp;-&nbsp;</g:HTML><g:Label ui:field="localite" /><g:HTML>&nbsp;-&nbsp;</g:HTML><g:Label ui:field="dateObservation" />
</g:HorizontalPanel>
<g:HorizontalPanel>
<!-- <g:Label text="{constants.nom_retenu} : "/> -->
<g:Label ui:field="nomRetenu" styleName="{style.nomRetenu}"/>
</g:HorizontalPanel>
<g:HorizontalPanel styleName="{style.date}">
<!-- <g:Label text="{constants.date_observation} : "/> -->
</g:HorizontalPanel>
<g:HorizontalPanel>
<!-- <g:Label text="{constants.famille} : "/> -->
<g:HorizontalPanel><g:Label ui:field="famille" /></g:HorizontalPanel>
</g:HorizontalPanel>
<g:HorizontalPanel>
<!-- <g:Label text="{constants.localite} : "/> -->
</g:HorizontalPanel>
</g:VerticalPanel>
</g:VerticalPanel>
 
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/detail/DetailImageObservationPresenteur.java
New file
0,0 → 1,24
package org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.detail;
 
import org.tela_botanica.del.client.cache.CacheClient;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class DetailImageObservationPresenteur {
public interface Vue extends IsWidget {
public void chargerInformationsObservation(org.tela_botanica.del.client.modeles.Image image);
}
 
private Vue vue;
public DetailImageObservationPresenteur(Vue vue) {
this.vue = vue;
}
 
public void go(HasWidgets composite) {
vue.chargerInformationsObservation(CacheClient.getInstance().getImageCourante());
composite.add(vue.asWidget());
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/detail/DetailImageObservationVue.java
New file
0,0 → 1,38
package org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.detail;
 
 
 
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.Composite;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
 
public class DetailImageObservationVue extends Composite implements DetailImageObservationPresenteur.Vue {
 
@UiField
protected Image imageObservation;
 
@UiField
protected Label nomObservateur, nomRetenu, dateObservation, famille, localite;
 
private static DetailImageObservationUIiBinder uiBinder = GWT.create(DetailImageObservationUIiBinder.class);
 
interface DetailImageObservationUIiBinder extends UiBinder<Widget, DetailImageObservationVue> {
};
 
public DetailImageObservationVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
public void chargerInformationsObservation(org.tela_botanica.del.client.modeles.Image image) {
imageObservation.setUrl(image.getUrl());
nomObservateur.setText(image.getObservation().getAuteur());
nomRetenu.setText(image.getObservation().getNomRetenuFormateReferentiel());
famille.setText(image.getObservation().getFamille());
localite.setText(image.getObservation().getLocalite());
dateObservation.setText(image.getObservation().getDateReleve());
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/detail/detailObservation.css
New file
0,0 → 1,27
.detailObservation {
font-size: 11px;
position: absolute;
padding: 5px;
color: white;
background: #333;
opacity: 0.8;
margin-top: -80px;
width: 230px;
}
 
.observateur td {
font-size: 11px;
white-space: nowrap
}
 
.date {
}
 
.nomRetenu {
font-weight: bold
}
 
.dateObservation {
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/PictofloraDeterminationVue.java
New file
0,0 → 1,117
package org.tela_botanica.del.client.vues.pictoflora.plateformedetermination;
 
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
 
import com.google.gwt.core.client.GWT;
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.HTMLPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class PictofloraDeterminationVue extends Composite implements PictofloraDeterminationPresenteur.Vue {
 
@UiField
Panel forum, detailImageObservation, formulaireRechercheEflore, voteProtocole, zoneRss;
@UiField
Label nomTaxonProbable, lienOuvrages, lienEflore, lienBonnier, lienCles;
@UiField
Hyperlink lienRetour;
@UiField
Button boutonAjoutProposition, boutonAjoutPropositionBas, boutonAjoutCommentaire, boutonAjoutCommentaireBas;
@UiField
Panel metadonnees;
 
interface DeterminationUIiBinder extends UiBinder<Widget, PictofloraDeterminationVue> {
};
 
private static DeterminationUIiBinder uiBinder = GWT.create(DeterminationUIiBinder.class);
 
public PictofloraDeterminationVue() {
initWidget(uiBinder.createAndBindUi(this));
lienRetour.setTargetHistoryToken(ConstantesNavigation.HOME);
}
 
public Panel getForum() {
return forum;
}
 
public Panel getDetailImageObservation() {
return detailImageObservation;
}
 
public Panel getFormulaireRechercheEflore() {
return formulaireRechercheEflore;
}
 
public Panel getVoteProtocole() {
return voteProtocole;
}
public Button getBoutonAjoutProposition() {
return boutonAjoutProposition;
}
public Button getBoutonAjoutPropositionBas() {
return boutonAjoutPropositionBas;
}
public Panel getMetadonnees() {
return metadonnees;
}
 
@Override
public void afficherNomTaxonProbable(String nomTaxon) {
this.nomTaxonProbable.setText(nomTaxon);
}
 
@Override
public HasWidgets getNouvelleLigneProtocole() {
HTMLPanel nouvelleLigne = new HTMLPanel("");
this.voteProtocole.add(nouvelleLigne);
return nouvelleLigne;
}
 
public Button getBoutonAjoutCommentaire() {
return boutonAjoutCommentaire;
}
public Button getBoutonAjoutCommentaireBas() {
return boutonAjoutCommentaireBas;
}
 
@Override
public HasClickHandlers getLienOuvrages() {
return lienOuvrages;
}
 
@Override
public HasClickHandlers getLienBonnier() {
return lienBonnier;
}
 
@Override
public HasClickHandlers getLienCles() {
return lienCles;
}
 
@Override
public HasClickHandlers getLienEflore() {
return lienEflore;
}
public HasWidgets getZoneRss() {
return zoneRss;
}
}
 
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/ligneProtocole/LigneProtocoleVue.ui.xml
New file
0,0 → 1,10
<!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:forum="urn:import:org.tela_botanica.del.client.composants.forum">
<ui:style src="ligneProtocole.css" />
<g:HorizontalPanel styleName="vote">
<g:HTMLPanel ui:field="zoneVote" />
</g:HorizontalPanel>
</ui:UiBinder>
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/ligneProtocole/LigneProtocolePresenteur.java
New file
0,0 → 1,59
package org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.ligneProtocole;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVotePresenteur;
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVoteVue;
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.modeles.Protocole;
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation;
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation;
import org.tela_botanica.del.client.services.rest.VoteProtocoleServiceConcret;
 
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class LigneProtocolePresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
 
HasWidgets getZoneVote();
}
 
private Vue vue;
private Protocole protocole;
 
public LigneProtocolePresenteur(Protocole protocole, Vue vue) {
this.vue = vue;
this.protocole = protocole;
chargerValeursProtocolePourImageCourante();
}
public void chargerValeursProtocolePourImageCourante(){
vue.getZoneVote().clear();
Image imageCourante = CacheClient.getInstance().getImageCourante();
MoyenneVotePresenteur votePresenteur = new MoyenneVotePresenteur(imageCourante, protocole, new MoyenneVoteVue(), new VoteProtocoleServiceConcret());
votePresenteur.go(vue.getZoneVote());
}
 
public Vue getVue() {
return vue;
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
gererEvenements();
}
 
@Override
protected void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() {
 
@Override
public void onChangementImage(EvenementChangementImageValidation event) {
chargerValeursProtocolePourImageCourante();
}
});
}
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/ligneProtocole/LigneProtocoleVue.java
New file
0,0 → 1,30
package org.tela_botanica.del.client.vues.pictoflora.plateformedetermination.ligneProtocole;
 
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.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.Widget;
 
public class LigneProtocoleVue extends Composite implements LigneProtocolePresenteur.Vue {
@UiField
Panel zoneVote;
interface LigneProtocoleUIiBinder extends UiBinder<Widget, LigneProtocoleVue> {
};
 
private static LigneProtocoleUIiBinder uiBinder = GWT.create(LigneProtocoleUIiBinder.class);
 
public LigneProtocoleVue() {
initWidget(uiBinder.createAndBindUi(this));
}
 
@Override
public HasWidgets getZoneVote() {
return this.zoneVote;
}
 
}
/tags/v1.10-sodium/src/org/tela_botanica/del/client/vues/pictoflora/plateformedetermination/ligneProtocole/ligneProtocole.css
New file
0,0 → 1,7
.nomProtocole {
font-size: 11px;
overflow: hidden;
text-overflow: ellipsis;
width: 87px;
margin-bottom:15px;
}