Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 1238 → Rev 1239

/trunk/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImageVue.java
6,11 → 6,14
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.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.InlineHTML;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
18,14 → 21,14
public class MotsClesImageVue extends Composite implements MotsClesImagePresenteur.Vue {
@UiField
public Panel motsCles;
Panel motsCles, motsClesCel, saisieMotsCles, zoneIconesMotsCles;
 
@UiField
Image image;
@UiField
public Panel motsClesCel;
Button validerMotsCles;
@UiField
public Panel saisieMotsCles;
 
interface MyUiBinder extends UiBinder<Widget, MotsClesImageVue> {
}
67,7 → 70,22
HTML motCle = new InlineHTML(mot);
motCle.setStyleName("motCleCel");
motsClesCel.add(motCle);
}
}
}
 
@Override
public void setImage(String url) {
image.setUrl(url);
}
@Override
public HasWidgets getZoneIconesMotsCles() {
return zoneIconesMotsCles;
}
public HasClickHandlers getValiderMotCles() {
return validerMotsCles;
}
}
/trunk/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImage.css
17,4 → 17,27
 
.panneauSaisieMotsCles {
margin-bottom: 3px;
padding-top:30px;
}
 
.fenetreMotsCles {
z-index:1500;
padding: 5px 10px 10px 30px;
width:800px;
background:white;
margin:0 auto;
margin-top:5%;
}
 
.colonneDroite {
margin-left:20px;
}
 
.zoneIconesMotsCles {
padding:5px;
width:400px;
}
 
.listeMotsClesExistants {
max-width:350px;
}
/trunk/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotCle.css
5,7 → 5,7
 
.motCle {
border: 1px solid grey;
background-color: #555;
background-color: #DDD;
padding: 2px;
line-height: 25px;
border-radius:5px;
/trunk/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImageVue.ui.xml
1,22 → 1,31
<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: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="MotsClesImage.css" />
<g:HTMLPanel>
<g:HTML styleName="{style.titrePanneau}" text="{constants.motsCles}"></g:HTML>
<g:HTMLPanel>
<g:HTMLPanel styleName="{style.panneauSaisieMotsCles}" ui:field="saisieMotsCles"></g:HTMLPanel>
<g:HTMLPanel styleName="{style.fenetreMotsCles}">
<g:Label text="Saisir des mots clés" styleName="titre"/>
<g:Image ui:field="image" styleName="gauche" />
<g:HTMLPanel styleName="gauche {style.colonneDroite}">
<g:HTML styleName="{style.titrePanneau}" text="{constants.motsCles}"></g:HTML>
<g:HTMLPanel ui:field="zoneIconesMotsCles" styleName="{style.zoneIconesMotsCles}">
</g:HTMLPanel>
<g:HTMLPanel styleName="nettoyage">
<g:HTMLPanel styleName="{style.panneauSaisieMotsCles}" ui:field="saisieMotsCles"></g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="{style.listeMotsClesExistants}">
<g:HTMLPanel>
<g:HTMLPanel styleName="gwt-HTML" ui:field="motsClesCel"></g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel>
<g:HTMLPanel styleName="gwt-HTML" ui:field="motsCles"></g:HTMLPanel>
</g:HTMLPanel>
</g:HTMLPanel>
<g:Button ui:field="validerMotsCles">Valider l'ajout des mots clés et fermer la fenetre</g:Button>
</g:HTMLPanel>
<g:HTMLPanel>
<g:HTMLPanel styleName="gwt-HTML" ui:field="motsClesCel"></g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel>
<g:HTMLPanel styleName="gwt-HTML" ui:field="motsCles"></g:HTMLPanel>
</g:HTMLPanel>
<g:HTMLPanel styleName="nettoyage"></g:HTMLPanel>
</g:HTMLPanel>
</ui:UiBinder>
/trunk/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotClePropositionVue.java
New file
0,0 → 1,61
package org.tela_botanica.del.client.composants.motsclesimages.propositions;
 
import org.tela_botanica.del.client.config.Config;
 
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.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.Widget;
 
public class MotClePropositionVue extends Composite implements MotClePropositionPresenteur.Vue {
@UiField
CheckBox ajouterMotCle;
@UiField
Image iconeTag;
@UiField
FocusPanel lienMotCle;
interface MyUiBinder extends UiBinder<Widget, MotClePropositionVue> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
 
public MotClePropositionVue() {
// sets listBox
initWidget(uiBinder.createAndBindUi(this));
}
 
@Override
public void setMotCle(String motcle) {
ajouterMotCle.setText(motcle);
iconeTag.setUrl((new Config()).getUrl("iconeBaseUrl") + motcle + ".png");
}
public HasClickHandlers getLienMotCle() {
return lienMotCle;
}
public void toggleCb() {
boolean val = ajouterMotCle.getValue();
ajouterMotCle.setValue(!ajouterMotCle.getValue());
}
public boolean estAAjouter() {
return ajouterMotCle.getValue();
}
public void setEstAAjouter() {
ajouterMotCle.setValue(true);
}
public HasClickHandlers getAjouterMotCle() {
return ajouterMotCle;
}
}
/trunk/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotCleProposition.css
New file
0,0 → 1,23
.logoTag {
width:30px;
height:30px;
margin:0 5px;
}
 
.motCle {
width:80px;
margin:5px;
}
 
.lienMotCle {
background: none repeat scroll 0 0 #DDDDDD;
border-radius: 9px 9px 9px 9px;
height: 40px;
margin: 2px;
padding: 3px;
width: 120px;
}
 
.lienMotCle:hover {
background: #AAA;
}
/trunk/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotClePropositionVue.ui.xml
New file
0,0 → 1,14
<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="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" />
 
<ui:style src="MotCleProposition.css" />
<g:FocusPanel styleName="{style.lienMotCle} gauche" ui:field="lienMotCle">
<g:HTMLPanel>
<g:CheckBox ui:field="ajouterMotCle" text="motcle" styleName=" {style.motCle}"></g:CheckBox>
<g:Image styleName="{style.logoTag}" ui:field="iconeTag"/>
</g:HTMLPanel>
</g:FocusPanel>
</ui:UiBinder>
/trunk/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotClePropositionPresenteur.java
New file
0,0 → 1,80
package org.tela_botanica.del.client.composants.motsclesimages.propositions;
 
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
 
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.ui.HasWidgets;
import com.google.gwt.user.client.ui.IsWidget;
 
public class MotClePropositionPresenteur extends Presenteur{
 
public interface Vue extends IsWidget {
public void setMotCle(String motcle);
public HasClickHandlers getLienMotCle();
public void toggleCb();
public boolean estAAjouter();
public void setEstAAjouter();
public HasClickHandlers getAjouterMotCle();
}
private Vue vue;
private String motcle;
public MotClePropositionPresenteur(Vue vue, String motCle) {
this.vue = vue;
this.motcle = motCle;
vue.setMotCle(motCle);
}
@Override
public void go(HasWidgets composite) {
composite.add(vue.asWidget());
gererEvenements();
}
 
@Override
protected void gererEvenements() {
/* Attention : dans la gestion des évènements, comme la case à cocher est contenu dans
* le lien Mot Cle, lorsque je clique sur la case directement, l'application :
* - change la valeur de la case suite à l'évènement sur la case
* - rechange la valeur de la case suite à l'évènement sur le lien
* Il est donc impossible de changer la valeur de la case !
*
* La solution consiste à ajouter un changement de valeur lorsqu'on clique sur la case :
*/
vue.getAjouterMotCle().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
vue.toggleCb();
}
});
// Ajout du changement de valeur de la case lors du clic sur la case
vue.getLienMotCle().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
vue.toggleCb();
}
});
}
 
public boolean estAAjouter() {
return vue.estAAjouter();
}
public void setEstAAjouter() {
vue.setEstAAjouter();
}
public String getTag() {
return this.motcle;
}
}
/trunk/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImagePresenteur.java
1,17 → 1,20
package org.tela_botanica.del.client.composants.motsclesimages;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
import org.tela_botanica.del.client.cache.CacheClient;
import org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages.FormulaireSaisieMotsClesImagePresenteur;
import org.tela_botanica.del.client.composants.motsclesimages.motcle.MotClePresenteur;
import org.tela_botanica.del.client.composants.motsclesimages.motcle.MotCleVue;
import org.tela_botanica.del.client.composants.motsclesimages.propositions.MotClePropositionPresenteur;
import org.tela_botanica.del.client.composants.motsclesimages.propositions.MotClePropositionVue;
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
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.MotCle;
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.ajoutmotcleimage.EvenementAjoutMotCleImage;
import org.tela_botanica.del.client.navigation.evenement.ajoutmotcleimage.GestionnaireEvenementAjoutMotCleImage;
import org.tela_botanica.del.client.navigation.evenement.supressionmotcleimage.EvenementSuppressionMotCleImage;
18,122 → 21,235
import org.tela_botanica.del.client.navigation.evenement.supressionmotcleimage.GestionnaireEvenementSuppressionMotCleImage;
import org.tela_botanica.del.client.services.rest.MotsClesService;
import org.tela_botanica.del.client.services.rest.MotsClesServiceConcret;
import org.tela_botanica.del.client.services.rest.async.AjoutMotsClesImageCallback;
import org.tela_botanica.del.client.services.rest.async.ListeMotsClesImageCallBack;
import org.tela_botanica.del.client.services.rest.async.SuppressionMotCleImageCallback;
import org.tela_botanica.del.client.utils.StringUtils;
 
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 MotsClesImagePresenteur {
public class MotsClesImagePresenteur extends Presenteur {
 
Image image;
List<MotCle> motsCles;
List<String> motClesCelAFiltrer;
FormulaireSaisieMotsClesImagePresenteur formulaireSaisieMotsClesPresenteur;
final List<MotClePropositionPresenteur> presenteursMotsCles = new ArrayList<MotClePropositionPresenteur>();
MotsClesService motsClesService;
Image image;
int nbRetours = 0;
int retourCourant = 0;
//Déclaration de la vue
public interface Vue extends IsWidget {
public HasWidgets getZoneMotsCles();
 
HasWidgets getZoneSaisieMotsCles();
 
void viderZoneMotsCles();
 
HasWidgets getZoneMotsClesCel();
 
public void afficherMotsClesCel(List<String> motsClesCelImages, List<String> motClesCelAFiltrer);
 
public void setImage(String url);
 
public HasWidgets getZoneIconesMotsCles();
 
public HasClickHandlers getValiderMotCles();
}
 
private Vue vue;
public MotsClesImagePresenteur(Image image ,MotsClesService motsClesService, FormulaireSaisieMotsClesImagePresenteur formulaireSaisieMotsClesPresenteur, Vue vue) {
 
// Constructeur de l'application
public MotsClesImagePresenteur(Image image, MotsClesService motsClesService, FormulaireSaisieMotsClesImagePresenteur formulaireSaisieMotsClesPresenteur, Vue vue) {
this.formulaireSaisieMotsClesPresenteur = formulaireSaisieMotsClesPresenteur;
this.vue = vue;
this.motsClesService = motsClesService;
this.image = image;
vue.setImage(image.getUrl());
initialiserMotsClesCelAFiltrer();
gererEvemenements();
afficherMotsClesCel();
gererEvenements();
}
 
//Afficher la vue
public void go(HasWidgets composite) {
formulaireSaisieMotsClesPresenteur.go(vue.getZoneSaisieMotsCles());
composite.add(vue.asWidget());
}
 
protected boolean cocherMotClePropositionPresenteur(String motcle) {
boolean motCleCoche = false;
for (MotClePropositionPresenteur presenteurCourant : presenteursMotsCles) {
String tagCourant = presenteurCourant.getTag();
if (tagCourant.equals(motcle)) {
presenteurCourant.setEstAAjouter();
motCleCoche = true;
}
}
return motCleCoche;
}
//Charger les mots clés à l'aide du service
public void chargerMotsCles() {
if(motsCles == null) {
if (motsCles == null) {
vue.viderZoneMotsCles();
MotsClesService motsClesService = new MotsClesServiceConcret();
motsClesService.getMotsClesImage(image.getIdImage(), new ListeMotsClesImageCallBack() {
@Override
public void surRetour(List<MotCle> objetRetour) {
motsCles = objetRetour;
afficherMotsCles(objetRetour);
}
});
motsClesService.getMotsClesImage(image.getIdImage(),
new ListeMotsClesImageCallBack() {
@Override
public void surRetour(List<MotCle> objetRetour) {
motsCles = objetRetour;
afficherMotsCles(objetRetour);
}
});
}
}
public void gererEvemenements() {
BusEvenementiel.getInstance().addHandler(EvenementAjoutMotCleImage.TYPE, new GestionnaireEvenementAjoutMotCleImage() {
@Override
public void onAjoutMotCleImage(EvenementAjoutMotCleImage event) {
if(image != null && image.getIdImage() != null && image.getIdImage().equals(event.getIdImage())) {
motsCles = null;
chargerMotsCles();
formulaireSaisieMotsClesPresenteur.viderChampSaisie();
}
}
});
BusEvenementiel.getInstance().addHandler(EvenementSuppressionMotCleImage.TYPE, new GestionnaireEvenementSuppressionMotCleImage() {
@Override
public void onSuppressionMotCleImage(EvenementSuppressionMotCleImage event) {
if(image != null && image.getIdImage() != null && image.getIdImage().equals(event.getIdImage())) {
motsCles = null;
chargerMotsCles();
}
}
});
}
public void afficherMotsCles(List<MotCle> listeMotsCles) {
 
 
protected void afficherMotsCles(List<MotCle> listeMotsCles) {
this.motsCles = listeMotsCles;
nbRetours = listeMotsCles.size();
Object[] tabMotsCles = motsCles.toArray();
for (int i = 0; i < motsCles.toArray().length; i++) {
MotCle motCleEnCours = (MotCle)tabMotsCles[i];
MotClePresenteur mcP = new MotClePresenteur(new MotCleVue(motCleEnCours.getMotCle()), motCleEnCours.getMotCle(), motCleEnCours.getIdMotCle()) {
public void surSuppression(String idMotCle) {
if(Window.confirm(I18n.getVocabulary().indiceSupprimerMotCle()+" ?")) {
motsClesService.supprimerMotCleImage(idMotCle, new SuppressionMotCleImageCallback() {
@Override
public void surRetour(String objetRetour) {
motsCles = null;
chargerMotsCles();
}
});
}
MotCle motCleEnCours = (MotCle) tabMotsCles[i];
if (!cocherMotClePropositionPresenteur(motCleEnCours.getMotCle())) {
MotClePresenteur mcP = new MotClePresenteur(new MotCleVue(motCleEnCours.getMotCle()), motCleEnCours.getMotCle(), motCleEnCours.getIdMotCle()) {
public void surSuppression(String idMotCle) {
if (Window.confirm(I18n.getVocabulary().indiceSupprimerMotCle() + " ?")) {
motsClesService.supprimerMotCleImage(idMotCle, new SuppressionMotCleImageCallback() {
@Override
public void surRetour(String objetRetour) {
motsCles = null;
chargerMotsCles();
}
});
}
};
};
};
mcP.go(vue.getZoneMotsCles());
mcP.go(vue.getZoneMotsCles());
}
}
}
public void afficherMotsClesCel() {
 
protected void afficherMotsClesCel() {
List<String> motsClesCelImages = image.getMotsClefs();
vue.afficherMotsClesCel(motsClesCelImages, motClesCelAFiltrer);
}
 
// Mettre le focus sur le champ de saisie, appelé par le module pictoflora
public void focuserChampsSaisie() {
formulaireSaisieMotsClesPresenteur.focuserChampSaisie();
}
private void initialiserMotsClesCelAFiltrer() {
 
protected void initialiserMotsClesCelAFiltrer() {
Config config = new Config();
String chaineMotsClesCelAFiltrer = config.getInfo("motsclescel");
this.motClesCelAFiltrer = new ArrayList<String>();
String[] tabMotsClesCelAFiltrer = chaineMotsClesCelAFiltrer.split(",");
for (int i = 0; i < tabMotsClesCelAFiltrer.length; i++) {
this.motClesCelAFiltrer.add(StringUtils.normaliser(tabMotsClesCelAFiltrer[i]));
String motCle = StringUtils.normaliser(tabMotsClesCelAFiltrer[i]);
this.motClesCelAFiltrer.add(motCle);
// ajouter à la vue
MotClePropositionPresenteur presenteurMotCle = new MotClePropositionPresenteur(new MotClePropositionVue(), motCle);
presenteurMotCle.go(vue.getZoneIconesMotsCles());
presenteursMotsCles.add(presenteurMotCle);
}
}
/***
* trouver le mot cle dans les mots clés d'origine
* @param String motcle le mot à chercher
* @return MotCle l'objet trouvé
**/
protected MotCle trouverMotCleDorigine(String motCle) {
MotCle motCleRetour = null;
for (MotCle motCleCourant : motsCles) {
String tagCourant = motCleCourant.getMotCle();
if (tagCourant.equals(motCle)) {
motCleRetour = motCleCourant;
}
}
return motCleRetour;
}
protected void gererRetour() {
GWT.log("retour" + retourCourant);
retourCourant++;
if (nbRetours == retourCourant) {
BusEvenementiel.getInstance().fireEvent(new EvenementAjoutMotCleImage(image.getIdImage()));
}
}
//Gérer les évènements
protected void gererEvenements() {
BusEvenementiel.getInstance().addHandler(EvenementAjoutMotCleImage.TYPE, new GestionnaireEvenementAjoutMotCleImage() {
@Override
public void onAjoutMotCleImage(EvenementAjoutMotCleImage event) {
if (image != null && image.getIdImage() != null && image.getIdImage().equals(event.getIdImage())) {
motsCles = null;
chargerMotsCles();
formulaireSaisieMotsClesPresenteur.viderChampSaisie();
}
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementSuppressionMotCleImage.TYPE, new GestionnaireEvenementSuppressionMotCleImage() {
@Override
public void onSuppressionMotCleImage(
EvenementSuppressionMotCleImage event) {
if (image != null && image.getIdImage() != null && image.getIdImage().equals(event.getIdImage())) {
motsCles = null;
chargerMotsCles();
}
}
});
 
vue.getValiderMotCles().addClickHandler(new ClickHandler() {
 
@Override
public void onClick(ClickEvent event) {
 
MotsClesService motsClesService = new MotsClesServiceConcret();
// récupérer les valeur de toutes les cases à cocher
for (MotClePropositionPresenteur presenteur : presenteursMotsCles) {
 
if (presenteur.estAAjouter()) {
String tag = presenteur.getTag();
motsClesService.ajouterMotCleImage(image.getIdImage(), tag, new AjoutMotsClesImageCallback() {
@Override
public void surRetour(Void objetRetour) {
//gererRetour();
}
});
} else {
// il faut vérifier que le mot clé est à supprimer
String tag = presenteur.getTag();
MotCle motcle = trouverMotCleDorigine(tag);
if (motcle != null) {
motsClesService.supprimerMotCleImage(motcle.getIdMotCle(), new SuppressionMotCleImageCallback() {
@Override
public void surRetour(String objetRetour) {
//gererRetour();
}
});
}
}
}
 
}
});
}
 
}