/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/formulairesaisiemotclesimages/FormulaireMotsClesImage.css |
---|
New file |
0,0 → 1,16 |
.espece { |
font-size: 12px; |
font-weight: bold; |
color: white; |
padding-left: 5px; |
padding-right: 1px; |
} |
.aideSaisie p { |
padding: 0px; |
margin: 0px; |
overflow: hidden; |
text-overflow: ellipsis; |
white-space: pre; |
min-height: 13px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/formulairesaisiemotclesimages/FormulaireSaisieMotsClesImageVue.ui.xml |
---|
New file |
0,0 → 1,15 |
<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="FormulaireMotsClesImage.css" /> |
<g:HTMLPanel> |
<g:HTML styleName="petit {style.aideSaisie}" text="{constants.aideSaisieMotCle}"></g:HTML> |
<g:TextBox ui:field="saisieMotsCles"></g:TextBox> |
<g:Button text="{constants.ok}" ui:field="valider"></g:Button> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/formulairesaisiemotclesimages/FormulaireSaisieMotsClesImagePresenteur.java |
---|
New file |
0,0 → 1,81 |
package org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.ajoutmotcleimage.EvenementAjoutMotCleImage; |
import org.tela_botanica.del.client.services.rest.MotsClesService; |
import org.tela_botanica.del.client.services.rest.async.AjoutMotsClesImageCallback; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.event.dom.client.KeyCodes; |
import com.google.gwt.event.dom.client.KeyPressEvent; |
import com.google.gwt.event.dom.client.KeyPressHandler; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class FormulaireSaisieMotsClesImagePresenteur { |
private MotsClesService motsClesService; |
private String idImage; |
public interface Vue extends IsWidget { |
public HasClickHandlers getBoutonValider(); |
public HasText getSaisieMotsCles(); |
public HasKeyPressHandlers getSaisieMotsClesHasKeyPressHandlers(); |
public void focuserChampSaisie(); |
} |
private Vue vue; |
public FormulaireSaisieMotsClesImagePresenteur(String idImage, MotsClesService motsClesService, Vue vue) { |
this.vue = vue; |
this.motsClesService = motsClesService; |
this.idImage = idImage; |
gererEvenements(); |
} |
public void go(HasWidgets composite) { |
composite.add(vue.asWidget()); |
} |
private void gererEvenements() { |
vue.getBoutonValider().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
validerSaisie(); |
} |
}); |
vue.getSaisieMotsClesHasKeyPressHandlers().addKeyPressHandler(new KeyPressHandler() { |
public void onKeyPress(KeyPressEvent event) { |
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) { |
validerSaisie(); |
} |
} |
}); |
} |
private void validerSaisie() { |
String texte = vue.getSaisieMotsCles().getText(); |
if(texte != null && !texte.isEmpty()) { |
motsClesService.ajouterMotCleImage(idImage, vue.getSaisieMotsCles().getText(), new AjoutMotsClesImageCallback() { |
@Override |
public void surRetour(Void objetRetour) { |
EvenementAjoutMotCleImage event = new EvenementAjoutMotCleImage(idImage); |
BusEvenementiel.getInstance().fireEvent(event); |
} |
}); |
} |
} |
public void viderChampSaisie() { |
vue.getSaisieMotsCles().setText(""); |
} |
public void focuserChampSaisie() { |
vue.focuserChampSaisie(); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/formulairesaisiemotclesimages/FormulaireSaisieMotsClesImageVue.java |
---|
New file |
0,0 → 1,52 |
package org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.uibinder.client.UiBinder; |
import com.google.gwt.uibinder.client.UiField; |
import com.google.gwt.user.client.ui.Button; |
import com.google.gwt.user.client.ui.Composite; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.TextBox; |
import com.google.gwt.user.client.ui.Widget; |
public class FormulaireSaisieMotsClesImageVue extends Composite implements FormulaireSaisieMotsClesImagePresenteur.Vue { |
@UiField |
public TextBox saisieMotsCles; |
@UiField |
public Button valider; |
interface MyUiBinder extends UiBinder<Widget, FormulaireSaisieMotsClesImageVue> { |
} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
public FormulaireSaisieMotsClesImageVue() { |
// sets listBox |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public HasClickHandlers getBoutonValider() { |
return valider; |
} |
@Override |
public HasText getSaisieMotsCles() { |
return saisieMotsCles; |
} |
@Override |
public HasKeyPressHandlers getSaisieMotsClesHasKeyPressHandlers() { |
return saisieMotsCles; |
} |
@Override |
public void focuserChampSaisie() { |
saisieMotsCles.setFocus(true); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImage.css |
---|
New file |
0,0 → 1,43 |
.titrePanneau p { |
padding: 0px; |
margin: 0px; |
overflow: hidden; |
text-overflow: ellipsis; |
white-space: pre; |
min-height: 13px; |
} |
.titrePanneau { |
font-size: 12px; |
font-weight: bold; |
color: white; |
padding-left: 5px; |
padding-right: 1px; |
} |
.panneauSaisieMotsCles { |
margin-bottom: 3px; |
padding-top:30px; |
} |
.fenetreMotsCles { |
z-index:1500; |
padding: 5px 10px 10px 30px; |
width:860px; |
background:white; |
margin:0 auto; |
margin-top:75px; |
} |
.colonneDroite { |
margin-left: 14px; |
} |
.zoneIconesMotsCles { |
padding:5px; |
width:535px; |
} |
.listeMotsClesExistants { |
max-width:350px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotClePresenteur.java |
---|
New file |
0,0 → 1,71 |
package org.tela_botanica.del.client.composants.motsclesimages.motcle; |
import com.google.gwt.event.dom.client.BlurEvent; |
import com.google.gwt.event.dom.client.BlurHandler; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.FocusEvent; |
import com.google.gwt.event.dom.client.FocusHandler; |
import com.google.gwt.event.dom.client.HasBlurHandlers; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasFocusHandlers; |
import com.google.gwt.event.dom.client.HasMouseOutHandlers; |
import com.google.gwt.event.dom.client.HasMouseOverHandlers; |
import com.google.gwt.event.dom.client.MouseOutEvent; |
import com.google.gwt.event.dom.client.MouseOutHandler; |
import com.google.gwt.event.dom.client.MouseOverEvent; |
import com.google.gwt.event.dom.client.MouseOverHandler; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public abstract class MotClePresenteur { |
String motCle; |
String idMotCle; |
public interface Vue extends IsWidget { |
HasClickHandlers getZoneSuppressionMotCle(); |
void afficherZoneSuppression(); |
void cacherZoneSuppression(); |
HasMouseOverHandlers getZoneMotCleMouseHover(); |
HasMouseOutHandlers getZoneMotCleMouseOut(); |
} |
private Vue vue; |
public MotClePresenteur(Vue vue, String motCleText, String motCleId) { |
this.vue = vue; |
this.idMotCle = motCleId; |
} |
public void go(HasWidgets composite) { |
composite.add(vue.asWidget()); |
gererEvenements(); |
} |
public void gererEvenements() { |
vue.getZoneSuppressionMotCle().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
surSuppression(idMotCle); |
} |
}); |
vue.getZoneMotCleMouseHover().addMouseOverHandler(new MouseOverHandler() { |
@Override |
public void onMouseOver(MouseOverEvent event) { |
vue.afficherZoneSuppression(); |
} |
}); |
vue.getZoneMotCleMouseOut().addMouseOutHandler(new MouseOutHandler() { |
@Override |
public void onMouseOut(MouseOutEvent event) { |
vue.cacherZoneSuppression(); |
} |
}); |
} |
public abstract void surSuppression(String idMotCle); |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotCleVue.java |
---|
New file |
0,0 → 1,69 |
package org.tela_botanica.del.client.composants.motsclesimages.motcle; |
import org.tela_botanica.del.client.i18n.I18n; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.HasBlurHandlers; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasFocusHandlers; |
import com.google.gwt.event.dom.client.HasMouseOutHandlers; |
import com.google.gwt.event.dom.client.HasMouseOverHandlers; |
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.HTMLPanel; |
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; |
public class MotCleVue extends Composite implements MotClePresenteur.Vue { |
@UiField |
public InlineHTML motCle; |
@UiField |
public FocusPanel suppressionMotCle; |
@UiField |
public FocusPanel conteneurMotCle; |
interface MyUiBinder extends UiBinder<Widget, MotCleVue> { |
} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
public MotCleVue(String mot) { |
initWidget(uiBinder.createAndBindUi(this)); |
motCle.setText(mot); |
suppressionMotCle.setTitle(I18n.getVocabulary().indiceSupprimerMotCle()); |
} |
@Override |
public HasClickHandlers getZoneSuppressionMotCle() { |
return suppressionMotCle; |
} |
@Override |
public void afficherZoneSuppression() { |
suppressionMotCle.removeStyleName("invisible"); |
} |
@Override |
public void cacherZoneSuppression() { |
suppressionMotCle.addStyleName("invisible"); |
} |
@Override |
public HasMouseOverHandlers getZoneMotCleMouseHover() { |
return conteneurMotCle; |
} |
@Override |
public HasMouseOutHandlers getZoneMotCleMouseOut() { |
return conteneurMotCle; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotCle.css |
---|
New file |
0,0 → 1,31 |
.conteneurMotCle { |
display: inline-block; |
margin-right: 3px; |
} |
.motCle { |
border: 1px solid grey; |
background-color: #DDD; |
padding: 2px; |
line-height: 25px; |
border-radius:5px; |
} |
.suppressionMotCle { |
display: inline; |
border: 1px solid grey; |
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 { |
background-color: #888; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotCleVue.ui.xml |
---|
New file |
0,0 → 1,11 |
<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="MotCle.css" /> |
<g:FocusPanel styleName="{style.conteneurMotCle}" ui:field="conteneurMotCle"><g:HTMLPanel><g:InlineHTML styleName="{style.motCle}" ui:field="motCle" /><g:FocusPanel styleName="invisible {style.suppressionMotCle}" ui:field="suppressionMotCle" ><g:InlineHTML>X</g:InlineHTML></g:FocusPanel></g:HTMLPanel></g:FocusPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImageVue.ui.xml |
---|
New file |
0,0 → 1,31 |
<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 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 styleName="nettoyage"></g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotClePropositionPresenteur.java |
---|
New file |
0,0 → 1,81 |
package org.tela_botanica.del.client.composants.motsclesimages.propositions; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
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(); |
event.stopPropagation(); |
} |
}); |
// 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(); |
event.stopPropagation(); |
} |
}); |
} |
public boolean estAAjouter() { |
return vue.estAAjouter(); |
} |
public void setEstAAjouter() { |
vue.setEstAAjouter(); |
} |
public String getTag() { |
return this.motcle; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotClePropositionVue.java |
---|
New file |
0,0 → 1,68 |
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.Window; |
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()); |
if(ajouterMotCle.getValue()) { |
addStyleName("motClePictoCoche"); |
} else { |
removeStyleName("motClePictoCoche"); |
} |
} |
public boolean estAAjouter() { |
return ajouterMotCle.getValue(); |
} |
public void setEstAAjouter() { |
ajouterMotCle.setValue(true); |
addStyleName("motClePictoCoche"); |
} |
public HasClickHandlers getAjouterMotCle() { |
return ajouterMotCle; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotCleProposition.css |
---|
New file |
0,0 → 1,21 |
.logoTag { |
width:30px; |
height:30px; |
margin:0 5px; |
float:right; |
} |
.motCle { |
width:80px; |
margin:5px; |
cursor:pointer; |
} |
.lienMotCle { |
background: none repeat scroll 0 0 #DDDDDD; |
border-radius: 9px 9px 9px 9px; |
height: 40px; |
margin: 2px; |
padding: 3px; |
width: 160px; |
} |
/branches/v1.5-carbone/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 motclesPicto" ui:field="lienMotCle" title="{constants.aideLiaisonMotCle}"> |
<g:HTMLPanel> |
<g:CheckBox ui:field="ajouterMotCle" text="motcle" styleName=" {style.motCle} texteMotClePicto"></g:CheckBox> |
<g:Image styleName="{style.logoTag}" ui:field="iconeTag"/> |
</g:HTMLPanel> |
</g:FocusPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImagePresenteur.java |
---|
New file |
0,0 → 1,255 |
package org.tela_botanica.del.client.composants.motsclesimages; |
import java.util.ArrayList; |
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.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; |
import org.tela_botanica.del.client.navigation.evenement.ajoutmotcleimage.GestionnaireEvenementAjoutMotCleImage; |
import org.tela_botanica.del.client.navigation.evenement.fermermotcleimage.EvenementFermerMotCleImage; |
import org.tela_botanica.del.client.navigation.evenement.supressionmotcleimage.EvenementSuppressionMotCleImage; |
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.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 extends Presenteur { |
Image image; |
List<MotCle> motsCles; |
List<String> motClesProtocoleAFiltrer = new ArrayList<String>(); |
FormulaireSaisieMotsClesImagePresenteur formulaireSaisieMotsClesPresenteur; |
final List<MotClePropositionPresenteur> presenteursMotsCles = new ArrayList<MotClePropositionPresenteur>(); |
MotsClesService motsClesService; |
int nbRetours = 0; |
int retourCourant = 0; |
int nb = 0; |
//Déclaration de la vue |
public interface Vue extends IsWidget { |
public HasWidgets getZoneMotsCles(); |
HasWidgets getZoneSaisieMotsCles(); |
void viderZoneMotsCles(); |
HasWidgets getZoneMotsClesCel(); |
public void afficherMotsClesProtocole(List<String> motsClesCelImages, List<String> motClesCelAFiltrer); |
public void setImage(String url); |
public HasWidgets getZoneIconesMotsCles(); |
public HasClickHandlers getValiderMotCles(); |
} |
private 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()); |
initialiserMotsClesProtocoleAFiltrer(); |
afficherMotsClesProtocole(); |
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) { |
vue.viderZoneMotsCles(); |
MotsClesService motsClesService = new MotsClesServiceConcret(); |
motsClesService.getMotsClesImage(image.getIdImage(), |
new ListeMotsClesImageCallBack() { |
@Override |
public void surRetour(List<MotCle> objetRetour) { |
motsCles = objetRetour; |
afficherMotsCles(objetRetour); |
} |
}); |
} |
} |
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]; |
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()); |
} |
} |
} |
protected void afficherMotsClesProtocole() { |
List<String> motsClesCelImages = image.getMotsClefs(); |
vue.afficherMotsClesProtocole(motsClesCelImages, motClesProtocoleAFiltrer); |
} |
// Mettre le focus sur le champ de saisie, appelé par le module pictoflora |
public void focuserChampsSaisie() { |
formulaireSaisieMotsClesPresenteur.focuserChampSaisie(); |
} |
protected void initialiserMotsClesProtocoleAFiltrer() { |
//TODO voir si le cache client est bien approprié plutot que passer les infos |
// de protocole dans le constructeur |
String chaineMotsClesCelAFiltrer = CacheClient.getInstance().getProtocoleCourant().getMotsClesProtocole(); |
this.motClesProtocoleAFiltrer = new ArrayList<String>(); |
String[] tabMotsClesCelAFiltrer = chaineMotsClesCelAFiltrer.split(","); |
if(tabMotsClesCelAFiltrer.length > 0 && !tabMotsClesCelAFiltrer[0].trim().isEmpty()) { |
for (int i = 0; i < tabMotsClesCelAFiltrer.length; i++) { |
String motCle = StringUtils.normaliser(tabMotsClesCelAFiltrer[i]); |
this.motClesProtocoleAFiltrer.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; |
} |
//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(); |
MotCle motcle = trouverMotCleDorigine(tag); |
if (motcle == null) { |
motsClesService.ajouterMotCleImage(image.getIdImage(), tag, new AjoutMotsClesImageCallback() { |
@Override |
public void surRetour(Void objetRetour) { |
} |
}); |
} |
} 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) { |
} |
}); |
} |
} |
} |
if (nb == 0) { |
BusEvenementiel.getInstance().fireEvent(new EvenementFermerMotCleImage(image.getIdImage())); |
nb++; |
} |
} |
}); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImageVue.java |
---|
New file |
0,0 → 1,91 |
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.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; |
public class MotsClesImageVue extends Composite implements MotsClesImagePresenteur.Vue { |
@UiField |
Panel motsCles, motsClesCel, saisieMotsCles, zoneIconesMotsCles; |
@UiField |
Image image; |
@UiField |
Button validerMotsCles; |
interface MyUiBinder extends UiBinder<Widget, MotsClesImageVue> { |
} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
public MotsClesImageVue() { |
// sets listBox |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public void viderZoneMotsCles() { |
motsCles.clear(); |
} |
@Override |
public HasWidgets getZoneMotsCles() { |
return motsCles; |
} |
@Override |
public HasWidgets getZoneMotsClesCel() { |
return motsClesCel; |
} |
@Override |
public HasWidgets getZoneSaisieMotsCles() { |
return saisieMotsCles; |
} |
@Override |
public void afficherMotsClesProtocole(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); |
} |
} |
} |
@Override |
public void setImage(String url) { |
image.setUrl(url); |
} |
@Override |
public HasWidgets getZoneIconesMotsCles() { |
return zoneIconesMotsCles; |
} |
public HasClickHandlers getValiderMotCles() { |
return validerMotsCles; |
} |
} |