/trunk/src/org/tela_botanica/del/client/utils/StringUtils.java |
---|
9,4 → 9,20 |
return false; |
} |
public static String normaliser(String mot) { |
mot = mot.toLowerCase().trim().replace(" ", ""); |
// Le manque de support des librairies standard java |
// nous oblige à utiliser cette méthode un peu batarde |
char[] accents = {'à','á','â','ã','ä','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','À','Á','Â','Ã','Ä','Ç','È','É','Ê','Ë', 'Ì','Í','Î','Ï','Ñ','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý'}; |
char[] sansAccents = {'a','a','a','a','a','c', 'e','e','e','e','i','i','i','i','n','o','o','o','o','o','u','u','u','u', 'y','y','A','A','A','A','A','C','E','E','E','E','I','I','I','I','N','O','O','O','O','O','U','U','U','U','Y'}; |
for (int i = 0; i < accents.length; i++) { |
mot = mot.replace(accents[i], sansAccents[i]); |
} |
return mot; |
} |
} |
/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/resultats/images/ImagePresenteur.java |
---|
108,7 → 108,7 |
composite.add(vue.asWidget()); |
vue.loadImage(image); |
new MetadonneesPresenteur(new MetadonneesVue(), image.getObservation(), ModeRecherche.MODE_IMAGE, true).go(vue.getMetadonnees()); |
motsClesImagePresenteur = new MotsClesImagePresenteur(new MotsClesServiceConcret(), new FormulaireSaisieMotsClesImagePresenteur(image.getIdImage(), new MotsClesServiceConcret(), new FormulaireSaisieMotsClesImageVue()), new MotsClesImageVue()); |
motsClesImagePresenteur = new MotsClesImagePresenteur(image, new MotsClesServiceConcret(), new FormulaireSaisieMotsClesImagePresenteur(image.getIdImage(), new MotsClesServiceConcret(), new FormulaireSaisieMotsClesImageVue()), new MotsClesImageVue()); |
motsClesImagePresenteur.go(vue.getZoneMotsCles()); |
chargerDonneesValidation(); |
gererEvenements(); |
200,7 → 200,7 |
protected void afficherPanneauMotsCles() { |
vue.afficherZoneMotsCles(); |
motsClesOuverts = true; |
motsClesImagePresenteur.chargerMotsCles(image.getIdImage()); |
motsClesImagePresenteur.chargerMotsCles(); |
motsClesImagePresenteur.focuserChampsSaisie(); |
} |
/trunk/src/org/tela_botanica/del/client/config/Config.java |
---|
22,6 → 22,11 |
private LinkedHashMap<String, String> urls = new LinkedHashMap<String, String>(); |
/** |
* Tableau associatif contenant d'autres informations |
*/ |
private LinkedHashMap<String, String> infos = new LinkedHashMap<String, String>(); |
/** |
* Constructeur sans argument |
*/ |
public Config() { |
39,6 → 44,7 |
urls.put("ouvragesFlore", configuration.get("ouvragesFloreUrl")); |
urls.put("clesDetermination", configuration.get("clesDeterminationUrl")); |
urls.put("rss", configuration.get("rssUrl")); |
infos.put("motsclescel", configuration.get("motsClesListe")); |
} |
/** |
58,4 → 64,12 |
return url; |
} |
public String getInfo(String code) { |
String info = ""; |
if (infos.containsKey(code)) { |
info = infos.get(code); |
} |
return info; |
} |
} |
/trunk/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImageVue.java |
---|
1,10 → 1,17 |
package org.tela_botanica.del.client.composants.motsclesimages; |
import java.util.Iterator; |
import java.util.List; |
import org.tela_botanica.del.client.utils.StringUtils; |
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.HTML; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.InlineHTML; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.Widget; |
14,6 → 21,9 |
public Panel motsCles; |
@UiField |
public Panel motsClesCel; |
@UiField |
public Panel saisieMotsCles; |
interface MyUiBinder extends UiBinder<Widget, MotsClesImageVue> { |
38,7 → 48,26 |
} |
@Override |
public HasWidgets getZoneMotsClesCel() { |
return motsClesCel; |
} |
@Override |
public HasWidgets getZoneSaisieMotsCles() { |
return saisieMotsCles; |
} |
@Override |
public void afficherMotsClesCel(List<String> motsClesCelImages, List<String> motsClesCelAFiltrer) { |
for (Iterator<String> iterator = motsClesCelImages.iterator(); iterator |
.hasNext();) { |
String mot = (String) iterator.next(); |
String motNormalise = StringUtils.normaliser(mot); |
if(!mot.trim().isEmpty() && motsClesCelAFiltrer.contains(StringUtils.normaliser(motNormalise))) { |
HTML motCle = new InlineHTML(mot); |
motCle.setStyleName("motCleCel"); |
motsClesCel.add(motCle); |
} |
} |
} |
} |
/trunk/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotCle.css |
---|
8,6 → 8,7 |
background-color: #555; |
padding: 2px; |
line-height: 25px; |
border-radius:5px; |
} |
.suppressionMotCle { |
16,9 → 17,13 |
border-left: none; |
background-color: #555; |
padding: 2px; |
padding-left: 4px; |
margin-left: -3px; |
line-height: 25px; |
cursor: pointer; |
color: red; |
border-top-right-radius: 5px; |
border-bottom-right-radius: 5px; |
} |
.suppressionMotCle:hover { |
/trunk/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImageVue.ui.xml |
---|
13,6 → 13,9 |
<g:HTMLPanel styleName="{style.panneauSaisieMotsCles}" ui:field="saisieMotsCles"></g:HTMLPanel> |
</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> |
/trunk/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImagePresenteur.java |
---|
1,10 → 1,15 |
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.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.ajoutmotcleimage.EvenementAjoutMotCleImage; |
15,6 → 20,7 |
import org.tela_botanica.del.client.services.rest.MotsClesServiceConcret; |
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.user.client.Window; |
import com.google.gwt.user.client.ui.HasWidgets; |
23,23 → 29,29 |
public class MotsClesImagePresenteur { |
List<MotCle> motsCles; |
List<String> motClesCelAFiltrer; |
FormulaireSaisieMotsClesImagePresenteur formulaireSaisieMotsClesPresenteur; |
MotsClesService motsClesService; |
String idImage; |
Image image; |
public interface Vue extends IsWidget { |
public HasWidgets getZoneMotsCles(); |
HasWidgets getZoneSaisieMotsCles(); |
void viderZoneMotsCles(); |
HasWidgets getZoneMotsClesCel(); |
public void afficherMotsClesCel(List<String> motsClesCelImages, List<String> motClesCelAFiltrer); |
} |
private Vue vue; |
public MotsClesImagePresenteur(MotsClesService motsClesService, FormulaireSaisieMotsClesImagePresenteur formulaireSaisieMotsClesPresenteur, Vue vue) { |
public MotsClesImagePresenteur(Image image ,MotsClesService motsClesService, FormulaireSaisieMotsClesImagePresenteur formulaireSaisieMotsClesPresenteur, Vue vue) { |
this.formulaireSaisieMotsClesPresenteur = formulaireSaisieMotsClesPresenteur; |
this.vue = vue; |
this.motsClesService = motsClesService; |
this.image = image; |
initialiserMotsClesCelAFiltrer(); |
gererEvemenements(); |
afficherMotsClesCel(); |
} |
public void go(HasWidgets composite) { |
47,15 → 59,14 |
composite.add(vue.asWidget()); |
} |
public void chargerMotsCles(String idImage) { |
this.idImage = idImage; |
public void chargerMotsCles() { |
if(motsCles == null) { |
vue.viderZoneMotsCles(); |
MotsClesService motsClesService = new MotsClesServiceConcret(); |
motsClesService.getMotsClesImage(idImage, new ListeMotsClesImageCallBack() { |
motsClesService.getMotsClesImage(image.getIdImage(), new ListeMotsClesImageCallBack() { |
@Override |
public void surRetour(List<MotCle> objetRetour) { |
motsCles = objetRetour; |
vue.viderZoneMotsCles(); |
afficherMotsCles(objetRetour); |
} |
}); |
66,9 → 77,9 |
BusEvenementiel.getInstance().addHandler(EvenementAjoutMotCleImage.TYPE, new GestionnaireEvenementAjoutMotCleImage() { |
@Override |
public void onAjoutMotCleImage(EvenementAjoutMotCleImage event) { |
if(idImage != null && idImage.equals(event.getIdImage())) { |
if(image != null && image.getIdImage() != null && image.getIdImage().equals(event.getIdImage())) { |
motsCles = null; |
chargerMotsCles(idImage); |
chargerMotsCles(); |
formulaireSaisieMotsClesPresenteur.viderChampSaisie(); |
} |
} |
77,9 → 88,9 |
BusEvenementiel.getInstance().addHandler(EvenementSuppressionMotCleImage.TYPE, new GestionnaireEvenementSuppressionMotCleImage() { |
@Override |
public void onSuppressionMotCleImage(EvenementSuppressionMotCleImage event) { |
if(idImage != null && idImage.equals(event.getIdImage())) { |
if(image != null && image.getIdImage() != null && image.getIdImage().equals(event.getIdImage())) { |
motsCles = null; |
chargerMotsCles(idImage); |
chargerMotsCles(); |
} |
} |
}); |
97,7 → 108,7 |
@Override |
public void surRetour(String objetRetour) { |
motsCles = null; |
chargerMotsCles(idImage); |
chargerMotsCles(); |
} |
}); |
} |
107,7 → 118,23 |
} |
} |
public void afficherMotsClesCel() { |
List<String> motsClesCelImages = image.getMotsClefs(); |
motsClesCelImages.addAll(image.getObservation().getMotsClefs()); |
vue.afficherMotsClesCel(motsClesCelImages, motClesCelAFiltrer); |
} |
public void focuserChampsSaisie() { |
formulaireSaisieMotsClesPresenteur.focuserChampSaisie(); |
} |
private 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])); |
} |
} |
} |
/trunk/src/org/tela_botanica/del/test/composants/motsclesimage/MotsClesImageTest.java |
---|
New file |
0,0 → 1,81 |
package org.tela_botanica.del.test.composants.motsclesimage; |
import static org.junit.Assert.*; |
import java.util.ArrayList; |
import java.util.Iterator; |
import java.util.List; |
import org.junit.Before; |
import org.junit.Test; |
import org.tela_botanica.del.client.modeles.MotCle; |
import org.tela_botanica.del.client.utils.StringUtils; |
public class MotsClesImageTest { |
List<MotCle> motsCles; |
List<String> motClesCelAFiltrer; |
@Before |
public void setUp() { |
String chaineMotsClesCelAFiltrer = "fleur,feuille,ecorce,fruit,port,defiphoto"; |
this.motClesCelAFiltrer = new ArrayList<String>(); |
String[] tabMotsClesCelAFiltrer = chaineMotsClesCelAFiltrer.split(","); |
for (int i = 0; i < tabMotsClesCelAFiltrer.length; i++) { |
this.motClesCelAFiltrer.add(StringUtils.normaliser(tabMotsClesCelAFiltrer[i])); |
} |
motsCles = new ArrayList<MotCle>(); |
} |
@Test |
public void testFiltreMotClesCelAvecAccents() { |
MotCle mc1 = new MotCle("1", "1", "écorce"); |
MotCle mc2 = new MotCle("2", "1", "pôrt"); |
MotCle mc3 = new MotCle("3", "1", "ucorce"); |
MotCle mc4 = new MotCle("4", "1", "Défi Photo"); |
MotCle mc5 = new MotCle("5", "1", "FeuIlle"); |
MotCle mc6 = new MotCle("6", "1", "fruIT"); |
motsCles.add(mc1); |
motsCles.add(mc2); |
motsCles.add(mc3); |
motsCles.add(mc4); |
motsCles.add(mc5); |
motsCles.add(mc6); |
List<String> resultat = afficherMotsClesCel(motsCles, motClesCelAFiltrer); |
assertEquals(5, resultat.size()); |
} |
@Test |
public void testNormalisation() { |
String avecEspaces = "mot cle espaces"; |
String sansEspaces = "motcleespaces"; |
assertEquals(StringUtils.normaliser(avecEspaces), StringUtils.normaliser(sansEspaces)); |
String avecAccents = "motcléaccentué"; |
String sansAccents = "motcleaccentue"; |
assertEquals(StringUtils.normaliser(avecAccents), StringUtils.normaliser(sansAccents)); |
String avecEspacesAccents = "mot clé èspâces"; |
String sansEspacesAccents = "motcleespaces"; |
assertEquals(StringUtils.normaliser(avecEspacesAccents), StringUtils.normaliser(sansEspacesAccents)); |
} |
private List<String> afficherMotsClesCel(List<MotCle> motsClesCelImages, List<String> motsClesCelAFiltrer) { |
List<String> motsClesCel = new ArrayList<String>(); |
for (Iterator<MotCle> iterator = motsClesCelImages.iterator(); iterator.hasNext();) { |
String mot = iterator.next().getMotCle(); |
if(!mot.trim().isEmpty() && motsClesCelAFiltrer.contains(StringUtils.normaliser(mot))) { |
motsClesCel.add(mot); |
} |
} |
return motsClesCel; |
} |
} |
/trunk/war/del.css |
---|
554,3 → 554,16 |
.invisible { |
visibility:hidden; |
} |
.motCleCel { |
display: inline-block; |
margin-right: 3px; |
border: 1px solid grey; |
background-color: #B1BEBE; |
padding-left: 2px; |
padding-right: 2px; |
line-height: 20px; |
border-radius: 5px; |
opacity:1; |
color: black; |
} |