Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 310 → Rev 311

/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/RechercheImageVue.java
File deleted
/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/RechercheImageVue.ui.xml
File deleted
/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/RechercheImagePresenteur.java
File deleted
/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/resultats/images/ImagePresenteur.java
9,18 → 9,38
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.validationobservation.EvenementValidation;
import org.tela_botanica.del.client.utils.MockDatasource;
import org.tela_botanica.del.client.vues.rechercheimages.MoteurRechercheImage.Vue;
import org.tela_botanica.del.client.vues.rechercheimages.resultats.ResultatRechercheImagePresenteur;
import org.tela_botanica.del.client.vues.rechercheimages.vote.MoyenneVotePresenteur;
import org.tela_botanica.del.client.vues.rechercheobservations.DetailImagePresenteur;
import org.tela_botanica.del.client.vues.rechercheobservations.DetailImageVue;
 
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.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
 
public class ImagePresenteur extends Presenteur {
 
public interface Vue extends IsWidget {
public abstract void loadImage(Image image);
public abstract HasClickHandlers getImagePrincipale();
public abstract HasClickHandlers getEnSavoirPlus();
public abstract HasClickHandlers getAjoutValidation();
public abstract void cacherZoneCache();
public abstract void afficherZoneCache();
public abstract HasWidgets getZoneVoter();
}
private Vue vue;
private final MockDatasource validationService = MockDatasource.getInstance();
private final Image image;
private boolean detailsOpen = false;
27,15 → 47,14
 
private Protocole protocole;
 
public ImagePresenteur(Image image, Protocole protocole) {
super(new ImageVue());
public ImagePresenteur(Image image, Protocole protocole, Vue vue) {
this.image = image;
this.protocole = protocole;
this.vue = vue;
}
 
public void go(HasWidgets composite) {
ImageVue vue = (ImageVue) this.getVue();
composite.add(vue);
composite.add(vue.asWidget());
vue.loadImage(image);
loadValidationData();
gererEvenements();
42,24 → 61,20
}
 
private void loadValidationData() {
ImageVue vue = (ImageVue) this.getVue();
List<VoteProtocole> observationValidationDatas = validationService.getVoteByImageAndProtocol(image.getIdImage(), protocole.getNom());
new MoyenneVotePresenteur(observationValidationDatas).go(vue.voter);
new MoyenneVotePresenteur(observationValidationDatas).go(vue.getZoneVoter());
}
 
@Override
protected void gererEvenements() {
ImageVue vue = (ImageVue) this.getVue();
vue.imagePrincipale.addClickHandler(new ClickHandler() {
vue.getImagePrincipale().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
com.google.gwt.user.client.ui.Image photo = (com.google.gwt.user.client.ui.Image) event.getSource();
ouvrirFenetreModale(new DetailImagePresenteur(photo.getTitle(), photo.getAltText()));
ouvrirFenetreModale(new DetailImagePresenteur(photo.getTitle(), photo.getAltText(), new DetailImageVue()));
}
});
vue.enSavoirPlus.addClickHandler(new ClickHandler() {
vue.getEnSavoirPlus().addClickHandler(new ClickHandler() {
 
@Override
public void onClick(ClickEvent event) {
72,7 → 87,7
}
});
 
vue.ajoutValidation.addClickHandler(new ClickHandler() {
vue.getAjoutValidation().addClickHandler(new ClickHandler() {
 
@Override
public void onClick(ClickEvent event) {
82,24 → 97,14
}
 
public void cacherDetails() {
ImageVue vue = (ImageVue) this.getVue();
VerticalPanel zoneCache = vue.zoneCache;
Label enSavoirPlus = vue.enSavoirPlus;
 
zoneCache.setVisible(false);
 
vue.cacherZoneCache();
detailsOpen = false;
}
 
public void afficherDetails() {
ImageVue vue = (ImageVue) this.getVue();
ResultatRechercheImagePresenteur.getInstance().fermerTousPanneauxDetailsObservations();
vue.afficherZoneCache();
 
VerticalPanel zoneCache = vue.zoneCache;
Label enSavoirPlus = vue.enSavoirPlus;
 
zoneCache.setVisible(true);
 
detailsOpen = true;
}
 
/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/resultats/images/ImageVue.java
1,9 → 1,11
package org.tela_botanica.del.client.vues.rechercheimages.resultats.images;
 
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.HasWidgets;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
10,7 → 12,7
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
 
public class ImageVue extends Composite {
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")
39,8 → 41,20
initWidget(uiBinder.createAndBindUi(this));
}
 
protected void loadImage(org.tela_botanica.del.client.modeles.Image image) {
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);
nomEspece.setText(image.getObservation().getSpecies());
nomAuteur.setText(image.getObservation().getAuteur());
56,4 → 70,19
 
}
 
@Override
public HasClickHandlers getImagePrincipale() {
return imagePrincipale;
}
 
@Override
public HasClickHandlers getEnSavoirPlus() {
return enSavoirPlus;
}
 
@Override
public HasClickHandlers getAjoutValidation() {
return ajoutValidation;
}
 
}
/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/resultats/ResultatRechercheImagePresenteur.java
8,6 → 8,7
import org.tela_botanica.del.client.modeles.Image;
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur;
import org.tela_botanica.del.client.vues.rechercheimages.resultats.images.ImagePresenteur;
import org.tela_botanica.del.client.vues.rechercheimages.resultats.images.ImageVue;
 
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
24,22 → 25,16
}
 
public void go(HasWidgets composite) {
composite.add(vue);
createPaginationWidget(CacheClient.getInstance().getImages().size());
reactualiserImagesEtMoyenneVoteProtocole(0, CacheClient.getInstance().getPaginationPasRechercheImage());
 
actualiserImagesEtMoyenneVoteProtocole(0, CacheClient.getInstance().getPasPagination());
}
 
private void reactualiserImagesEtMoyenneVoteProtocole(int premier, int dernier) {
private void actualiserImagesEtMoyenneVoteProtocole(int premier, int dernier) {
 
// Remise à zéro du panneau d'affichage et des composants
vue.nettoyer();
 
// TODO : créer une méthode globale pour l'application ? voir
// superclasse présenteur ?
// FIXME : ne s'affiche pas
vue.startChargement();
 
List<Panel> panneauxImagesAffichees = new ArrayList<Panel>();
List<Image> imagesAffichees = CacheClient.getInstance().getSousListeImages(premier, dernier);
vue.creerPanneauxObservations(imagesAffichees.size());
47,7 → 42,7
Iterator<Panel> panelIterator = vue.getPanneauxImages().iterator();
for (Image image : imagesAffichees) {
Panel imagePanel = panelIterator.next();
ImagePresenteur imagePresenteur = new ImagePresenteur(image, CacheClient.getInstance().getProtocoleCourant());
ImagePresenteur imagePresenteur = new ImagePresenteur(image, CacheClient.getInstance().getProtocoleCourant(), new ImageVue());
imagePresenteur.go(imagePanel);
panneauxImagesAffichees.add(imagePanel);
observationPresenteurs.add(imagePresenteur);
68,17 → 63,17
 
private void createPaginationWidget(int nbImages) {
 
PaginationPresenteur pagination = new PaginationPresenteur(nbImages, CacheClient.getInstance().getPaginationPasRechercheImage()) {
PaginationPresenteur pagination = new PaginationPresenteur(nbImages, CacheClient.getInstance().getPasPagination()) {
 
@Override
public void changerPage(int debut, int fin) {
showImagePanels(debut, fin);
CacheClient.getInstance().setNumPageRechercheImage(getPageCourante());
CacheClient.getInstance().setPageCouranteRecherche(getPageCourante());
}
@Override
public void actualiserPasCache(int pas) {
CacheClient.getInstance().setPaginationPasRerchercheImage(pas);
CacheClient.getInstance().setPasPagination(pas);
}
};
pagination.go(vue.getPanneauPagination());
85,7 → 80,7
}
 
public void showImagePanels(int first, int last) {
reactualiserImagesEtMoyenneVoteProtocole(first, last);
actualiserImagesEtMoyenneVoteProtocole(first, last);
}
 
public ResultatRechercheImageVue getView() {
/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/MoteurRechercheImage.java
New file
0,0 → 1,113
package org.tela_botanica.del.client.vues.rechercheimages;
 
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
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.ajoutdetermination.EvenementAjoutDetermination;
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole;
import org.tela_botanica.del.client.navigation.evenement.rechercheimage.EvenementRechercheImage;
import org.tela_botanica.del.client.services.rest.ProtocoleService;
import org.tela_botanica.del.client.utils.MockDatasource;
 
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.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class MoteurRechercheImage {
 
public interface Vue extends IsWidget {
public abstract void ajouterProtocole(String protocole);
public abstract void selectionnerProtocole(int index);
public abstract HasClickHandlers getBoutonChercher();
public abstract HasKeyPressHandlers getChampEspece();
public abstract HasChangeHandlers getListeProtocoles();
public abstract HasWidgets getZoneResultats();
public abstract String getValeurEspece();
}
private Vue vue;
// private final ImageService imageService = MockDatasource.getInstance();
private final ProtocoleService protocoleService = MockDatasource.getInstance();
private List<Protocole> protocoles;
//TODO : passer ça en cache
private String protocoleParDefaut = Protocole.IDENTIFICATION_AUTOMATIQUE;
/**
* Constructeur
* */
public MoteurRechercheImage(Vue vue) {
this.vue = vue;
if (CacheClient.getInstance().getProtocoleCourant() == null) {
CacheClient.getInstance().setProtocoleCourant(protocoleService.getProtocole(protocoleParDefaut));
}
}
 
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
gererEvenements();
chargerProtocoles();
}
 
private void chargerProtocoles() {
protocoles = protocoleService.getProtocoles();
for (Protocole protocole : protocoles) {
vue.ajouterProtocole(protocole.getNom());
}
vue.selectionnerProtocole(protocoles.indexOf(CacheClient.getInstance().getProtocoleCourant()));
}
 
public void gererEvenements() {
 
vue.getBoutonChercher().addClickHandler(new ClickHandler() {
 
@Override
public void onClick(ClickEvent event) {
lancerRechercheImage();
}
});
 
vue.getChampEspece().addKeyPressHandler(new KeyPressHandler() {
 
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
lancerRechercheImage();
}
}
});
 
vue.getListeProtocoles().addChangeHandler(new ChangeHandler() {
 
@Override
public void onChange(ChangeEvent event) {
Protocole protocoleCourant = (Protocole) event.getSource();
EvenementChangementProtocole evenement = new EvenementChangementProtocole(protocoleCourant);
BusEvenementiel.getInstance().fireEvent(evenement);
}
});
}
public void lancerRechercheImage() {
CacheClient.getInstance().setEspeceRecherche(vue.getValeurEspece());
BusEvenementiel.getInstance().fireEvent(new EvenementRechercheImage());
}
public HasWidgets getZoneResultats() {
return vue.getZoneResultats();
}
}
/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/MoteurRechercheImageVue.java
New file
0,0 → 1,87
package org.tela_botanica.del.client.vues.rechercheimages;
 
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HasText;
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.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
 
public class MoteurRechercheImageVue extends Composite implements MoteurRechercheImage.Vue {
 
private final VerticalPanel mainPanel = new VerticalPanel();
private final Panel panneauChargement = new FlowPanel();
 
interface MyUiBinder extends UiBinder<Widget, MoteurRechercheImageVue> {}
 
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
 
@UiField TextBox nomEspece;
@UiField Panel panneauResultats;
@UiField Button boutonChercher;
@UiField Label protocoleLabel;
@UiField ListBox listeProtocoles;
 
// Constructeur
public MoteurRechercheImageVue() {
initWidget(uiBinder.createAndBindUi(this));
nomEspece.setFocus(true);
 
}
 
public Panel getPanneauChargement() {
return panneauChargement;
}
 
public void setListeProtocoles(ListBox listeProtocoles) {
this.listeProtocoles = listeProtocoles;
}
 
public void setProtocoleLabel(Label protocoleLabel) {
this.protocoleLabel = protocoleLabel;
}
 
// Cette méthode est public car appelé dans GestionnaireHistorique
public Panel getZoneResultats() {
return panneauResultats;
}
 
public void setPanneauResultats(Panel panneauResultats) {
this.panneauResultats = panneauResultats;
}
 
public HasClickHandlers getBoutonChercher() {
return boutonChercher;
}
 
public HasKeyPressHandlers getChampEspece() {
return nomEspece;
}
 
public HasChangeHandlers getListeProtocoles() {
return listeProtocoles;
}
public void ajouterProtocole(String protocole) {
listeProtocoles.addItem(protocole);
}
public void selectionnerProtocole(int index) {
listeProtocoles.setSelectedIndex(index);
}
 
public String getValeurEspece() {
return nomEspece.getText();
}
}
/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/MoteurRechercheImageVue.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:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default">
 
<ui:with field='res' type='org.tela_botanica.del.client.Ressources' />
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
<ui:style src="rechercheImage.css" />
<g:HTMLPanel>
<g:HTMLPanel styleName="{style.observationsRecherche}">
<g:Label text="{constants.rechercherImage}" styleName="titre" />
<g:HorizontalPanel styleName="{style.moteurRecherche}">
<g:TextBox ui:field="nomEspece" text="apifera"/>
<g:Button text="{constants.rechercherTaxon}" ui:field="boutonChercher" />
<g:Label ui:field="protocoleLabel" text="{constants.protocole}" styleName="{style.labelProtocole}"/>
<g:ListBox ui:field="listeProtocoles" />
</g:HorizontalPanel>
<g:Label text="{constants.entrerMotClef}" styleName="gris" />
 
</g:HTMLPanel>
<g:HTMLPanel ui:field="panneauResultats" />
</g:HTMLPanel>
</ui:UiBinder>
/trunk/src/org/tela_botanica/del/client/gestionhistorique/GestionnaireHistorique.java
4,8 → 4,8
import org.tela_botanica.del.client.vues.comparaisoneflore.ComparaisonEfloreVue;
import org.tela_botanica.del.client.vues.plateformedetermination.DeterminationPresenteur;
import org.tela_botanica.del.client.vues.plateformedetermination.DeterminationVue;
import org.tela_botanica.del.client.vues.rechercheimages.RechercheImagePresenteur;
import org.tela_botanica.del.client.vues.rechercheimages.RechercheImageVue;
import org.tela_botanica.del.client.vues.rechercheimages.MoteurRechercheImage;
import org.tela_botanica.del.client.vues.rechercheimages.MoteurRechercheImageVue;
import org.tela_botanica.del.client.vues.rechercheimages.resultats.ResultatRechercheImagePresenteur;
import org.tela_botanica.del.client.vues.rechercheobservations.RechercheObservationsPresenteur;
import org.tela_botanica.del.client.vues.rechercheobservations.RechercheObservationsVue;
32,10 → 32,10
new PresenteurInitial().go(RootPanel.get("navigation"));
} else if (event.getValue().equals(ConstantesNavigation.PAGE_RECHERCHE_IMAGES)) {
RootPanel.get("contenu").clear();
new RechercheImagePresenteur(new RechercheImageVue()).go(RootPanel.get("contenu"));
new MoteurRechercheImage(new MoteurRechercheImageVue()).go(RootPanel.get("contenu"));
} else if (event.getValue().equals(ConstantesNavigation.PAGE_RESULTAT_RECHERCHE_IMAGES)) {
RootPanel.get("contenu").clear();
RechercheImagePresenteur presenteur = new RechercheImagePresenteur(new RechercheImageVue());
MoteurRechercheImage presenteur = new MoteurRechercheImage(new MoteurRechercheImageVue());
presenteur.go(RootPanel.get("contenu"));
new ResultatRechercheImagePresenteur().go(presenteur.getZoneResultats());
} else if (event.getValue().equals(ConstantesNavigation.PAGE_VALIDATION)) {
/trunk/src/org/tela_botanica/del/client/navigation/evenement/BusEvenementiel.java
56,7 → 56,7
 
@Override
public void onRechercheImage(EvenementRechercheImage event) {
doRechercheImage(event.getImages());
doRechercheImage();
}
});
 
82,8 → 82,7
History.fireCurrentHistoryState();
}
 
private void doRechercheImage(List<Image> images) {
CacheClient.getInstance().setImages(images);
private void doRechercheImage() {
History.newItem(ConstantesNavigation.PAGE_RESULTAT_RECHERCHE_IMAGES, true);
History.fireCurrentHistoryState();
}
/trunk/src/org/tela_botanica/del/client/navigation/evenement/rechercheimage/EvenementRechercheImage.java
9,10 → 9,8
public class EvenementRechercheImage extends GwtEvent<GestionnaireEvenementRechercheImage> {
 
public static com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementRechercheImage> TYPE = new com.google.gwt.event.shared.GwtEvent.Type<GestionnaireEvenementRechercheImage>();
private List<Image> images;
 
public EvenementRechercheImage(List<Image> images) {
this.images = images;
public EvenementRechercheImage() {
}
 
@Override
25,12 → 23,4
return TYPE;
}
 
public List<Image> getImages() {
return images;
}
 
public void setImages(List<Image> images) {
this.images = images;
}
 
}
/trunk/src/org/tela_botanica/del/client/cache/CacheClient.java
14,7 → 14,11
private Protocole protocoleCourant;
private List<Image> images;
private int numPageRechercheImage = 0;
private int paginationPasRechercheImage = 10;
private int pasPagination = 10;
private int pageCouranteRecherche = 0;
private String especeRecherche = "";
private static CacheClient instance;
 
private CacheClient() {
48,17 → 52,30
return numPageRechercheImage;
}
 
public void setNumPageRechercheImage(int numPageRechercheImage) {
this.numPageRechercheImage = numPageRechercheImage;
//Pour la recherche :
public int getPasPagination() {
return pasPagination;
}
 
public int getPaginationPasRechercheImage() {
return paginationPasRechercheImage;
public void setPasPagination(int pasPagination) {
this.pasPagination = pasPagination;
}
 
public void setPaginationPasRerchercheImage(int paginationPas) {
this.paginationPasRechercheImage = paginationPas;
public String getEspeceRecherche() {
return especeRecherche;
}
public void setEspeceRecherche(String especeRecherche) {
this.especeRecherche = especeRecherche;
}
public void setPageCouranteRecherche(int pageCouranteRecherche) {
this.pageCouranteRecherche = pageCouranteRecherche;
}
public int getPageCouranteRecherche() {
return this.pageCouranteRecherche;
}
 
public List<Image> getImages() {
return images;