Subversion Repositories eFlore/Applications.coel

Rev

Rev 1468 | Rev 1516 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1468 Rev 1513
1
package org.tela_botanica.client.vues.publication;
1
package org.tela_botanica.client.vues.publication;
2
 
2
 
3
import java.util.ArrayList;
3
import java.util.ArrayList;
-
 
4
import java.util.HashMap;
4
import java.util.Iterator;
5
import java.util.Iterator;
5
import java.util.List;
6
import java.util.List;
6
 
7
 
7
import org.tela_botanica.client.ComposantClass;
8
import org.tela_botanica.client.ComposantClass;
8
import org.tela_botanica.client.Mediateur;
9
import org.tela_botanica.client.Mediateur;
9
import org.tela_botanica.client.composants.ChampComboBoxRechercheTempsReelPaginable;
10
import org.tela_botanica.client.composants.ChampComboBoxRechercheTempsReelPaginable;
-
 
11
import org.tela_botanica.client.composants.GrillePaginable;
10
import org.tela_botanica.client.composants.InfoLogger;
12
import org.tela_botanica.client.composants.InfoLogger;
11
import org.tela_botanica.client.composants.pagination.ProxyPersonnes;
13
import org.tela_botanica.client.composants.pagination.ProxyPersonnes;
-
 
14
import org.tela_botanica.client.composants.pagination.ProxyPersonnesAPublication;
12
import org.tela_botanica.client.composants.pagination.ProxyProjets;
15
import org.tela_botanica.client.composants.pagination.ProxyProjets;
-
 
16
import org.tela_botanica.client.composants.pagination.ProxyPublicationsAPersonne;
13
import org.tela_botanica.client.composants.pagination.ProxyStructures;
17
import org.tela_botanica.client.composants.pagination.ProxyStructures;
14
import org.tela_botanica.client.images.Images;
18
import org.tela_botanica.client.images.Images;
15
import org.tela_botanica.client.interfaces.Rafraichissable;
19
import org.tela_botanica.client.interfaces.Rafraichissable;
16
import org.tela_botanica.client.modeles.Information;
20
import org.tela_botanica.client.modeles.Information;
17
import org.tela_botanica.client.modeles.MenuApplicationId;
21
import org.tela_botanica.client.modeles.MenuApplicationId;
18
import org.tela_botanica.client.modeles.aDonnee;
22
import org.tela_botanica.client.modeles.aDonnee;
19
import org.tela_botanica.client.modeles.personne.Personne;
23
import org.tela_botanica.client.modeles.personne.Personne;
20
import org.tela_botanica.client.modeles.personne.PersonneListe;
24
import org.tela_botanica.client.modeles.personne.PersonneListe;
21
import org.tela_botanica.client.modeles.projet.Projet;
25
import org.tela_botanica.client.modeles.projet.Projet;
22
import org.tela_botanica.client.modeles.publication.Publication;
26
import org.tela_botanica.client.modeles.publication.Publication;
23
import org.tela_botanica.client.modeles.publication.PublicationAPersonne;
27
import org.tela_botanica.client.modeles.publication.PublicationAPersonne;
24
import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;
28
import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;
25
import org.tela_botanica.client.modeles.structure.Structure;
29
import org.tela_botanica.client.modeles.structure.Structure;
26
import org.tela_botanica.client.synchronisation.Sequenceur;
30
import org.tela_botanica.client.synchronisation.Sequenceur;
27
import org.tela_botanica.client.util.Debug;
31
import org.tela_botanica.client.util.Debug;
28
import org.tela_botanica.client.util.Pattern;
32
import org.tela_botanica.client.util.Pattern;
29
import org.tela_botanica.client.util.UtilArray;
33
import org.tela_botanica.client.util.UtilArray;
30
import org.tela_botanica.client.util.UtilString;
34
import org.tela_botanica.client.util.UtilString;
31
import org.tela_botanica.client.vues.FenetreForm;
35
import org.tela_botanica.client.vues.FenetreForm;
32
import org.tela_botanica.client.vues.Formulaire;
36
import org.tela_botanica.client.vues.Formulaire;
33
import org.tela_botanica.client.vues.FormulaireBarreValidation;
37
import org.tela_botanica.client.vues.FormulaireBarreValidation;
34
import org.tela_botanica.client.vues.personne.PersonneForm;
38
import org.tela_botanica.client.vues.personne.PersonneForm;
35
 
39
 
36
import com.extjs.gxt.ui.client.Style.Scroll;
40
import com.extjs.gxt.ui.client.Style.Scroll;
37
import com.extjs.gxt.ui.client.Style.SortDir;
41
import com.extjs.gxt.ui.client.Style.SortDir;
-
 
42
import com.extjs.gxt.ui.client.core.XTemplate;
38
import com.extjs.gxt.ui.client.data.ModelData;
43
import com.extjs.gxt.ui.client.data.ModelData;
39
import com.extjs.gxt.ui.client.data.ModelType;
44
import com.extjs.gxt.ui.client.data.ModelType;
40
import com.extjs.gxt.ui.client.event.BaseEvent;
45
import com.extjs.gxt.ui.client.event.BaseEvent;
41
import com.extjs.gxt.ui.client.event.ButtonEvent;
46
import com.extjs.gxt.ui.client.event.ButtonEvent;
42
import com.extjs.gxt.ui.client.event.Events;
47
import com.extjs.gxt.ui.client.event.Events;
43
import com.extjs.gxt.ui.client.event.Listener;
48
import com.extjs.gxt.ui.client.event.Listener;
44
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
49
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
45
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
50
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
46
import com.extjs.gxt.ui.client.event.SelectionListener;
51
import com.extjs.gxt.ui.client.event.SelectionListener;
47
import com.extjs.gxt.ui.client.store.ListStore;
52
import com.extjs.gxt.ui.client.store.ListStore;
48
import com.extjs.gxt.ui.client.store.Store;
53
import com.extjs.gxt.ui.client.store.Store;
49
import com.extjs.gxt.ui.client.store.StoreEvent;
54
import com.extjs.gxt.ui.client.store.StoreEvent;
50
import com.extjs.gxt.ui.client.widget.ContentPanel;
55
import com.extjs.gxt.ui.client.widget.ContentPanel;
51
import com.extjs.gxt.ui.client.widget.Info;
56
import com.extjs.gxt.ui.client.widget.Info;
52
import com.extjs.gxt.ui.client.widget.LayoutContainer;
57
import com.extjs.gxt.ui.client.widget.LayoutContainer;
53
import com.extjs.gxt.ui.client.widget.MessageBox;
58
import com.extjs.gxt.ui.client.widget.MessageBox;
54
import com.extjs.gxt.ui.client.widget.Text;
59
import com.extjs.gxt.ui.client.widget.Text;
55
import com.extjs.gxt.ui.client.widget.button.Button;
60
import com.extjs.gxt.ui.client.widget.button.Button;
56
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
61
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
57
import com.extjs.gxt.ui.client.widget.form.ComboBox;
62
import com.extjs.gxt.ui.client.widget.form.ComboBox;
58
import com.extjs.gxt.ui.client.widget.form.Field;
63
import com.extjs.gxt.ui.client.widget.form.Field;
59
import com.extjs.gxt.ui.client.widget.form.FieldSet;
64
import com.extjs.gxt.ui.client.widget.form.FieldSet;
60
import com.extjs.gxt.ui.client.widget.form.FormPanel;
65
import com.extjs.gxt.ui.client.widget.form.FormPanel;
61
import com.extjs.gxt.ui.client.widget.form.TextField;
66
import com.extjs.gxt.ui.client.widget.form.TextField;
62
import com.extjs.gxt.ui.client.widget.form.Validator;
67
import com.extjs.gxt.ui.client.widget.form.Validator;
63
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
68
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
64
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
69
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
65
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
70
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
66
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
71
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
67
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
72
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
68
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
73
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
-
 
74
import com.extjs.gxt.ui.client.widget.grid.RowExpander;
69
import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
75
import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
70
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
76
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
71
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
77
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
72
import com.extjs.gxt.ui.client.widget.layout.FormData;
78
import com.extjs.gxt.ui.client.widget.layout.FormData;
73
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
79
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
74
import com.extjs.gxt.ui.client.widget.layout.RowData;
80
import com.extjs.gxt.ui.client.widget.layout.RowData;
75
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
81
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
76
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
82
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
77
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
83
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
78
import com.google.gwt.core.client.GWT;
84
import com.google.gwt.core.client.GWT;
79
 
85
 
80
 
86
 
81
public class PublicationForm extends Formulaire implements Rafraichissable {
87
public class PublicationForm extends Formulaire implements Rafraichissable {
82
	
88
	
83
	  //-------------//
89
	  //-------------//
84
	 //  ATTRIBUTS	//
90
	 //  ATTRIBUTS	//
85
	//-------------//
91
	//-------------//
86
	
92
	
87
	/** Publication **/
93
	/** Publication **/
88
	// on se sert d'un objet Publication lorsque l'on est en mode MODIFIER
94
	// on se sert d'un objet Publication lorsque l'on est en mode MODIFIER
89
	private Publication publication;
95
	private Publication publication;
90
	// on se sert de l'identifiant d'une publication lorsque l'on est en mode AJOUTER
96
	// on se sert de l'identifiant d'une publication lorsque l'on est en mode AJOUTER
91
	private String publicationId = null;
97
	private String publicationId = null;
92
	
98
	
93
	/** Auteurs **/
99
	/** Auteurs **/
94
	private PublicationAPersonneListe auteursInitialListe = null;
100
	private PublicationAPersonneListe auteursInitialListe = null;
95
	private PublicationAPersonneListe auteursAjoutes = null;
101
	private PublicationAPersonneListe auteursAjoutes = null;
96
	private PublicationAPersonneListe auteursSupprimes = null;
102
	private PublicationAPersonneListe auteursSupprimes = null;
97
	private PublicationAPersonneListe auteursModifies = null;
103
	private PublicationAPersonneListe auteursModifies = null;
98
	
104
	
99
	private ContentPanel auteursFieldset = null;
105
	private ContentPanel auteursFieldset = null;
100
	private ChampComboBoxRechercheTempsReelPaginable projetsCombo = null;
106
	private ChampComboBoxRechercheTempsReelPaginable projetsCombo = null;
101
	
107
	
102
	private FieldSet generalitesFieldset = null;
108
	private FieldSet generalitesFieldset = null;
103
	private TextField<String> titreChp = null;
109
	private TextField<String> titreChp = null;
104
	private TextField<String> collectionChp = null;
110
	private TextField<String> collectionChp = null;
105
	private TextField<String> uriChp = null;
111
	private TextField<String> uriChp = null;
106
	
112
	
107
	private FieldSet editionFieldset = null;
113
	private FieldSet editionFieldset = null;
108
	private ChampComboBoxRechercheTempsReelPaginable editeurCombobox = null;
114
	private ChampComboBoxRechercheTempsReelPaginable editeurCombobox = null;
109
	private TextField<String> datePublicationChp = null;
115
	private TextField<String> datePublicationChp = null;
110
	private TextField<String> tomeChp = null;
116
	private TextField<String> tomeChp = null;
111
	private TextField<String> fasciculeChp = null;
117
	private TextField<String> fasciculeChp = null;
112
	private TextField<String> pagesChp = null;
118
	private TextField<String> pagesChp = null;
113
	
119
	
114
	private LayoutContainer zoneHaut, zoneBas;
120
	private LayoutContainer zoneHaut, zoneBas;
115
	
121
	
116
	private ToolBar barreOutils = null;
122
	private ToolBar barreOutils = null;
117
	private EditorGrid<PublicationAPersonne> grilleAuteurs;
123
	private GrillePaginable<ModelData> grilleAuteurs;
118
	private ChampComboBoxRechercheTempsReelPaginable personnesSaisiesComboBox = null;
124
	private ChampComboBoxRechercheTempsReelPaginable personnesSaisiesComboBox = null;
119
	private Button personnesBoutonSupprimer = null;
125
	private Button personnesBoutonSupprimer = null;
120
	private Button personnesBoutonModifier = null;
126
	private Button personnesBoutonModifier = null;
121
	private Button boutonAuteurUp = null;
127
	private Button boutonAuteurUp = null;
122
	private Button boutonAuteurDown = null;
128
	private Button boutonAuteurDown = null;
123
	
129
	
124
	private FenetreForm fenetreFormulaire = null;
130
	private FenetreForm fenetreFormulaire = null;
125
	private Sequenceur sequenceur;
131
	private Sequenceur sequenceur;
126
	
132
	
127
	private String modeDeCreation = null;
133
	private String modeDeCreation = null;
128
	boolean changeOrderMarker = false;
134
	boolean changeOrderMarker = false;
129
	
135
	
130
	
136
	
131
	 //----------------------//
137
	 //----------------------//
132
	//    Constructeurs     //------------------------------------------------------------
138
	//    Constructeurs     //------------------------------------------------------------
133
	
139
	
134
	public PublicationForm(Mediateur mediateurCourrant, String publicationId) {
140
	public PublicationForm(Mediateur mediateurCourrant, String publicationId) {
135
		initialiserPublicationForm(mediateurCourrant, publicationId);
141
		initialiserPublicationForm(mediateurCourrant, publicationId);
136
	}
142
	}
137
 
143
 
138
	public PublicationForm(Mediateur mediateurCourrant, String publicationId, Rafraichissable vueARafraichirApresValidation) {
144
	public PublicationForm(Mediateur mediateurCourrant, String publicationId, Rafraichissable vueARafraichirApresValidation) {
139
		vueExterneARafraichirApresValidation = vueARafraichirApresValidation;
145
		vueExterneARafraichirApresValidation = vueARafraichirApresValidation;
140
		initialiserPublicationForm(mediateurCourrant, publicationId);
146
		initialiserPublicationForm(mediateurCourrant, publicationId);
141
	}
147
	}
142
 
148
 
143
	
149
	
144
	 //-----------------------//
150
	 //-----------------------//
145
	//    Initialisation     //------------------------------------------------------------
151
	//    Initialisation     //------------------------------------------------------------
146
	
152
	
147
	private void initialiserPublicationForm(Mediateur mediateurCourrant, String publicationId) {
153
	private void initialiserPublicationForm(Mediateur mediateurCourrant, String publicationId) {
148
		sequenceur = new Sequenceur();
154
		sequenceur = new Sequenceur();
149
		publication = new Publication();
155
		publication = new Publication();
150
		publication.setId(publicationId);
156
		publication.setId(publicationId);
151
		this.publicationId = publicationId;
157
		this.publicationId = publicationId;
152
		auteursInitialListe = new PublicationAPersonneListe();
158
		auteursInitialListe = new PublicationAPersonneListe();
153
		initialiserAuteurs();	// Crée les listes d'auteurs ajoutés et supprimés
159
		initialiserAuteurs();	// Crée les listes d'auteurs ajoutés et supprimés
154
		
160
		
155
		// Si 'publicationId' est vide alors on est en mode "AJOUTER", sinon on est en mode "MODIFIER" 
161
		// Si 'publicationId' est vide alors on est en mode "AJOUTER", sinon on est en mode "MODIFIER" 
156
		modeDeCreation = (UtilString.isEmpty(publicationId) ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);
162
		modeDeCreation = (UtilString.isEmpty(publicationId) ? Formulaire.MODE_AJOUTER : Formulaire.MODE_MODIFIER);
157
		initialiserFormulaire(mediateurCourrant, modeDeCreation, MenuApplicationId.PUBLICATION);
163
		initialiserFormulaire(mediateurCourrant, modeDeCreation, MenuApplicationId.PUBLICATION);
158
		panneauFormulaire.setLayout(new RowLayout());
164
		panneauFormulaire.setLayout(new RowLayout());
159
		panneauFormulaire.setStyleAttribute("padding", "0");
165
		panneauFormulaire.setStyleAttribute("padding", "0");
160
		
166
		
161
		zoneHaut = new LayoutContainer(new FitLayout());
167
		zoneHaut = new LayoutContainer(new FitLayout());
162
		zoneBas = new LayoutContainer(new FlowLayout());
168
		zoneBas = new LayoutContainer(new FlowLayout());
163
		panneauFormulaire.add(zoneHaut, new RowData(1, 0.3));
169
		panneauFormulaire.add(zoneHaut, new RowData(1, 0.3));
164
		panneauFormulaire.add(zoneBas, new RowData(1, 0.5));
170
		panneauFormulaire.add(zoneBas, new RowData(1, 0.5));
165
		panneauFormulaire.setScrollMode(Scroll.AUTO);
171
		panneauFormulaire.setScrollMode(Scroll.AUTO);
166
		genererTitreFormulaire();
172
		genererTitreFormulaire();
167
		
173
		
168
		creerZoneAuteurs();
174
		creerZoneAuteurs();
169
		zoneHaut.add(auteursFieldset);
175
		zoneHaut.add(auteursFieldset);
170
		
176
		
171
		creerZoneGeneralites();
177
		creerZoneGeneralites();
172
		zoneBas.add(generalitesFieldset);
178
		zoneBas.add(generalitesFieldset);
173
		
179
		
174
		creerZoneEdition();
180
		creerZoneEdition();
175
		zoneBas.add(editionFieldset);
181
		zoneBas.add(editionFieldset);
176
		
182
		
177
		if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {
183
		if (modeDeCreation.equals(Formulaire.MODE_MODIFIER)) {
178
			mediateurCourrant.selectionnerPublication(this, publicationId, sequenceur);
184
			mediateurCourrant.selectionnerPublication(this, publicationId, sequenceur);
179
			mediateurCourrant.selectionnerPublicationAPersonne(this, publicationId, null, PublicationAPersonne.ROLE_AUTEUR, sequenceur);
-
 
180
			sequenceur.enfilerRafraichissement(this, new Information("chargement_modifier_ok"));
185
			sequenceur.enfilerRafraichissement(this, new Information("chargement_modifier_ok"));
181
		}
186
		}
182
	}
187
	}
183
 
188
 
184
	private void initialiserAuteurs() {
189
	private void initialiserAuteurs() {
185
		auteursAjoutes = new PublicationAPersonneListe();
190
		auteursAjoutes = new PublicationAPersonneListe();
186
		auteursSupprimes = new PublicationAPersonneListe();
191
		auteursSupprimes = new PublicationAPersonneListe();
187
		auteursModifies = new PublicationAPersonneListe();
192
		auteursModifies = new PublicationAPersonneListe();
188
	}
193
	}
189
	
194
	
190
	 //-----------------------//
195
	 //-----------------------//
191
	//    User Interface     //------------------------------------------------------------
196
	//    User Interface     //------------------------------------------------------------
192
	
197
	
193
	private ToolBar creerBarreOutilsGrille() {
198
	private ToolBar creerBarreOutilsGrille() {
194
		ToolBar barreOutils = new ToolBar();  
199
		ToolBar barreOutils = new ToolBar();  
195
		
200
		
196
		Button ajouterBouton = creerBoutonAjouter();
201
		Button ajouterBouton = creerBoutonAjouter();
197
		barreOutils.add(ajouterBouton);
202
		barreOutils.add(ajouterBouton);
198
		
203
		
199
		barreOutils.add(new Text(" ou "));
204
		barreOutils.add(new Text(" ou "));
200
		
205
		
201
		creerComboBoxPersonnesSaisies();
206
		creerComboBoxPersonnesSaisies();
202
		barreOutils.add(personnesSaisiesComboBox);
207
		barreOutils.add(personnesSaisiesComboBox);
203
		
208
		
204
		barreOutils.add(new SeparatorToolItem());
209
		barreOutils.add(new SeparatorToolItem());
205
		
210
		
206
		personnesBoutonModifier = creerBoutonModifier();
211
		personnesBoutonModifier = creerBoutonModifier();
207
		barreOutils.add(personnesBoutonModifier);
212
		barreOutils.add(personnesBoutonModifier);
208
		
213
		
209
		barreOutils.add(new SeparatorToolItem());
214
		barreOutils.add(new SeparatorToolItem());
210
		
215
		
211
		personnesBoutonSupprimer = creerBoutonSupprimer();
216
		personnesBoutonSupprimer = creerBoutonSupprimer();
212
		barreOutils.add(personnesBoutonSupprimer);		
217
		barreOutils.add(personnesBoutonSupprimer);		
213
		
218
		
214
		barreOutils.add(new SeparatorToolItem());
219
		barreOutils.add(new SeparatorToolItem());
215
		
220
		
216
		Button rafraichirBouton = creerBoutonRafraichir();
221
		Button rafraichirBouton = creerBoutonRafraichir();
217
		barreOutils.add(rafraichirBouton);
222
		barreOutils.add(rafraichirBouton);
218
		
223
		
219
		barreOutils.add(new SeparatorToolItem());
224
		barreOutils.add(new SeparatorToolItem());
220
		
225
		
221
		barreOutils.add(new Text(i18nC.deplacerAuteur()));
226
		barreOutils.add(new Text(i18nC.deplacerAuteur()));
222
		boutonAuteurUp = creerBoutonAuteurUp();
227
		boutonAuteurUp = creerBoutonAuteurUp();
223
		barreOutils.add(boutonAuteurUp);
228
		barreOutils.add(boutonAuteurUp);
224
		boutonAuteurDown = creerBoutonAuteurDown();
229
		boutonAuteurDown = creerBoutonAuteurDown();
225
		barreOutils.add(boutonAuteurDown);
230
		barreOutils.add(boutonAuteurDown);
226
		
231
		
227
		return barreOutils;
232
		return barreOutils;
228
	}
233
	}
229
	
234
	
230
	public void actualiserEtatBoutonsBarreOutils() {
235
	public void actualiserEtatBoutonsBarreOutils() {
231
		// Activation des boutons si la grille contient un élément
236
		// Activation des boutons si la grille contient un élément
232
		if (grilleAuteurs.getStore().getCount() > 0) {  
237
		if (grilleAuteurs.getStore().getCount() > 0) {  
233
			personnesBoutonSupprimer.enable();
238
			personnesBoutonSupprimer.enable();
234
			personnesBoutonModifier.enable();
239
			personnesBoutonModifier.enable();
235
		}
240
		}
236
		// Désactivation des boutons si la grille ne contient plus d'élément
241
		// Désactivation des boutons si la grille ne contient plus d'élément
237
		if (grilleAuteurs.getStore().getCount() == 0) {  
242
		if (grilleAuteurs.getStore().getCount() == 0) {  
238
			personnesBoutonSupprimer.disable();
243
			personnesBoutonSupprimer.disable();
239
			personnesBoutonModifier.disable();
244
			personnesBoutonModifier.disable();
240
		}
245
		}
241
	}
246
	}
242
	
247
	
243
	private Button creerBoutonAuteurUp() {
248
	private Button creerBoutonAuteurUp() {
244
		Button bouton = new Button();
249
		Button bouton = new Button();
245
		bouton.setIcon(Images.ICONES.arrowUp());
250
		bouton.setIcon(Images.ICONES.arrowUp());
246
		bouton.setEnabled(false);
251
		bouton.setEnabled(false);
247
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {  
252
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
248
			public void componentSelected(ButtonEvent ce) {  
253
			public void componentSelected(ButtonEvent ce) {  
249
				if (grilleAuteurs.getSelectionModel().getSelectedItem() != null) {
254
				if (grilleAuteurs.getGrille().getSelectionModel().getSelectedItem() != null) {
250
					
255
					
251
					PublicationAPersonne pap = grilleAuteurs.getSelectionModel().getSelectedItem();
256
					ModelData publiAPersonneSelectionnee = grilleAuteurs.getSelectionModel().getSelectedItem();
252
					
257
					
253
					int index = grilleAuteurs.getStore().indexOf(pap);
258
					int index = grilleAuteurs.getStore().indexOf(publiAPersonneSelectionnee);
254
					int newIndex = index;
259
					int newIndex = index - 1; // l'auteur monte dans dans la liste donc son ordre diminue
255
					newIndex--;
260
					int newOrdre = newIndex + 1; // parce que index commence à zéro
256
					
261
					
257
					// le marqueur suivant est obligatoire sinon les évènements liés au magasin se
262
					// le marqueur suivant est obligatoire sinon les évènements liés au magasin se
258
					// déclenchent et posent problème
263
					// déclenchent et posent problème
259
					changeOrderMarker = true;
264
					changeOrderMarker = true;
-
 
265
					
260
					pap.setOrdreAuteurs(String.valueOf(newIndex+1));
266
					publiAPersonneSelectionnee.set("_ordre_", String.valueOf(newOrdre));
-
 
267
					
261
					PublicationAPersonne papSwitch = grilleAuteurs.getStore().getAt(index-1);
268
					ModelData publiAPersonneSwitch = grilleAuteurs.getStore().getAt(index-1);
262
					int newIndexPapSwitch = index + 1;
269
					int newOrdrePapSwitch = newOrdre + 1;
-
 
270
 
263
					papSwitch.setOrdreAuteurs(String.valueOf(newIndexPapSwitch));
271
					publiAPersonneSwitch.set("_ordre_", String.valueOf(newOrdrePapSwitch));			
-
 
272
					
264
					grilleAuteurs.getStore().update(papSwitch);
273
					grilleAuteurs.getStore().update(publiAPersonneSwitch);
265
					grilleAuteurs.getStore().remove(pap);
274
					grilleAuteurs.getStore().remove(publiAPersonneSelectionnee);
266
					grilleAuteurs.getStore().insert(pap, newIndex);
275
					grilleAuteurs.getStore().insert(publiAPersonneSelectionnee, newIndex);
267
					changeOrderMarker = false;
276
					changeOrderMarker = false;
268
					
277
					
269
					grilleAuteurs.getSelectionModel().select(newIndex, true);
278
					grilleAuteurs.getSelectionModel().select(newIndex, true);
270
				}
279
				}
271
			}  
280
			}  
272
		});
281
		});
273
		return bouton;
282
		return bouton;
274
	}
283
	}
275
	
284
	
276
	private Button creerBoutonAuteurDown() {
285
	private Button creerBoutonAuteurDown() {
277
		Button bouton = new Button();
286
		Button bouton = new Button();
278
		bouton.setIcon(Images.ICONES.arrowDown());
287
		bouton.setIcon(Images.ICONES.arrowDown());
279
		bouton.setEnabled(false);
288
		bouton.setEnabled(false);
280
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {  
289
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {  
281
			public void componentSelected(ButtonEvent ce) {  
290
			public void componentSelected(ButtonEvent ce) {  
282
				if (grilleAuteurs.getSelectionModel().getSelectedItem() != null) {
291
				if (grilleAuteurs.getSelectionModel().getSelectedItem() != null) {
283
					
292
					
284
					PublicationAPersonne pap = grilleAuteurs.getSelectionModel().getSelectedItem();
293
					ModelData publiAPersonneSelectionnee = grilleAuteurs.getSelectionModel().getSelectedItem();
285
					
294
					
286
					int index = grilleAuteurs.getStore().indexOf(pap);
295
					int index = grilleAuteurs.getStore().indexOf(publiAPersonneSelectionnee);
287
					int newIndex = index;
296
					int newIndex = index + 1; // l'auteur monte dans dans la liste donc son ordre diminue
288
					newIndex++;
297
					int newOrdre = newIndex + 1; // parce que index commence à zéro					
289
					
298
					
290
					// le marqueur suivant est obligatoire sinon les évènements liés au magasin se
299
					// le marqueur suivant est obligatoire sinon les évènements liés au magasin se
291
					// déclenchent et posent problème
300
					// déclenchent et posent problème
292
					changeOrderMarker = true;
301
					changeOrderMarker = true;
-
 
302
					
293
					pap.setOrdreAuteurs(String.valueOf(newIndex+1));
303
					publiAPersonneSelectionnee.set("_ordre_", String.valueOf(newOrdre));
-
 
304
					
294
					PublicationAPersonne papSwitch = grilleAuteurs.getStore().getAt(index+1);
305
					ModelData publiAPersonneSwitch = grilleAuteurs.getStore().getAt(index+1);
295
					int newIndexPapSwitch = index + 1;
306
					int newOrdrePapSwitch = index + 1;
-
 
307
 
296
					papSwitch.setOrdreAuteurs(String.valueOf(newIndexPapSwitch));
308
					publiAPersonneSwitch.set("_ordre_", String.valueOf(newOrdrePapSwitch));
-
 
309
					
297
					grilleAuteurs.getStore().update(papSwitch);
310
					grilleAuteurs.getStore().update(publiAPersonneSwitch);
298
					grilleAuteurs.getStore().remove(pap);
311
					grilleAuteurs.getStore().remove(publiAPersonneSelectionnee);
299
					grilleAuteurs.getStore().insert(pap, newIndex);
312
					grilleAuteurs.getStore().insert(publiAPersonneSelectionnee, newIndex);
300
					changeOrderMarker = false;
313
					changeOrderMarker = false;
301
					
314
					
302
					grilleAuteurs.getSelectionModel().select(newIndex, true);
315
					grilleAuteurs.getSelectionModel().select(newIndex, true);
303
				}
316
				}
304
			}  
317
			}  
305
		});
318
		});
306
		return bouton;
319
		return bouton;
307
	}
320
	}
308
 
321
 
309
	private Button creerBoutonAjouter() {
322
	private Button creerBoutonAjouter() {
310
		Button bouton = new Button(i18nC.ajouter());
323
		Button bouton = new Button(i18nC.ajouter());
311
		bouton.setIcon(Images.ICONES.vcardAjouter());
324
		bouton.setIcon(Images.ICONES.vcardAjouter());
312
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {  
325
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {  
313
			public void componentSelected(ButtonEvent ce) {  
326
			public void componentSelected(ButtonEvent ce) {  
314
				fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_AJOUTER);
327
				fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_AJOUTER);
315
				fenetreFormulaire.show();
328
				fenetreFormulaire.show();
316
			}  
329
			}  
317
		});
330
		});
318
		return bouton;
331
		return bouton;
319
	}
332
	}
320
	
333
	
321
	private Button creerBoutonModifier() {
334
	private Button creerBoutonModifier() {
322
		Button bouton = new Button(i18nC.modifier());
335
		Button bouton = new Button(i18nC.modifier());
323
		bouton.setIcon(Images.ICONES.vcardModifier());
336
		bouton.setIcon(Images.ICONES.vcardModifier());
324
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {  
337
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {  
325
			public void componentSelected(ButtonEvent ce) {  
338
			public void componentSelected(ButtonEvent ce) {  
326
				Personne personneSaisieSelectionnee = grilleAuteurs.getSelectionModel().getSelectedItem().getPersonne();
339
				Personne personneSaisieSelectionnee = new PublicationAPersonne(grilleAuteurs.getSelectionModel().getSelectedItem(), false).getPersonne();
327
				
340
				
328
				if (personneSaisieSelectionnee == null) {
341
				if (personneSaisieSelectionnee == null) {
329
					InfoLogger.display(i18nC.informationTitreGenerique(), i18nC.selectionnerPublication());
342
					InfoLogger.display(i18nC.informationTitreGenerique(), i18nC.selectionnerPublication());
330
				} else {
343
				} else {
331
					fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_MODIFIER);
344
					fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(Formulaire.MODE_MODIFIER);
332
					fenetreFormulaire.show();
345
					fenetreFormulaire.show();
333
				}
346
				}
334
			}  
347
			}  
335
		});
348
		});
336
		return bouton;
349
		return bouton;
337
	}
350
	}
338
	
351
	
339
	private FenetreForm creerFenetreModaleAvecFormulairePersonne(String mode) {
352
	private FenetreForm creerFenetreModaleAvecFormulairePersonne(String mode) {
340
		String personneId = null;
353
		String personneId = null;
341
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
354
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
342
			Personne personneSaisieSelectionnee = grilleAuteurs.getSelectionModel().getSelectedItem().getPersonne();
355
			Personne personneSaisieSelectionnee = new PublicationAPersonne(grilleAuteurs.getSelectionModel().getSelectedItem(), false).getPersonne();
343
			personneId = personneSaisieSelectionnee.getId();
356
			personneId = personneSaisieSelectionnee.getId();
344
		}
357
		}
345
		
358
		
346
		final FenetreForm fenetre = new FenetreForm("");
359
		final FenetreForm fenetre = new FenetreForm("");
347
		final PersonneForm formulaire = creerFormulairePersonne(fenetre, personneId);
360
		final PersonneForm formulaire = creerFormulairePersonne(fenetre, personneId);
348
		fenetre.add(formulaire);
361
		fenetre.add(formulaire);
349
		return fenetre;
362
		return fenetre;
350
	}
363
	}
351
	
364
	
352
	private PersonneForm creerFormulairePersonne(final FenetreForm fenetre, final String personneId) {
365
	private PersonneForm creerFormulairePersonne(final FenetreForm fenetre, final String personneId) {
353
		PersonneForm formulairePersonne = new PersonneForm(mediateur, personneId, this);
366
		PersonneForm formulairePersonne = new PersonneForm(mediateur, personneId, this);
354
		FormPanel panneauFormulaire = formulairePersonne.getFormulaire();
367
		FormPanel panneauFormulaire = formulairePersonne.getFormulaire();
355
		fenetre.setHeading(panneauFormulaire.getHeading());
368
		fenetre.setHeading(panneauFormulaire.getHeading());
356
		panneauFormulaire.setHeaderVisible(false);
369
		panneauFormulaire.setHeaderVisible(false);
357
		panneauFormulaire.setTopComponent(null);
370
		panneauFormulaire.setTopComponent(null);
358
		
371
		
359
		// FIXME : avec GXT-2.1.0 la redéfinition du bottom component ne marche plus. Nous le cachons et en créeons un dans la fenêtre.
372
		// FIXME : avec GXT-2.1.0 la redéfinition du bottom component ne marche plus. Nous le cachons et en créeons un dans la fenêtre.
360
		panneauFormulaire.getBottomComponent().hide();
373
		panneauFormulaire.getBottomComponent().hide();
361
		SelectionListener<ButtonEvent> ecouteur = creerEcouteurValidationFormulairePersonne(fenetre, formulairePersonne);
374
		SelectionListener<ButtonEvent> ecouteur = creerEcouteurValidationFormulairePersonne(fenetre, formulairePersonne);
362
		final ButtonBar barreValidation = new FormulaireBarreValidation(ecouteur);
375
		final ButtonBar barreValidation = new FormulaireBarreValidation(ecouteur);
363
		fenetre.setBottomComponent(barreValidation);
376
		fenetre.setBottomComponent(barreValidation);
364
		
377
		
365
		return formulairePersonne;
378
		return formulairePersonne;
366
	}
379
	}
367
	
380
	
368
	private SelectionListener<ButtonEvent> creerEcouteurValidationFormulairePersonne(final FenetreForm fenetre, final PersonneForm formulaire) {
381
	private SelectionListener<ButtonEvent> creerEcouteurValidationFormulairePersonne(final FenetreForm fenetre, final PersonneForm formulaire) {
369
		SelectionListener<ButtonEvent> ecouteur = new SelectionListener<ButtonEvent>() {
382
		SelectionListener<ButtonEvent> ecouteur = new SelectionListener<ButtonEvent>() {
370
			public void componentSelected(ButtonEvent ce) {
383
			public void componentSelected(ButtonEvent ce) {
371
				String code = ((Button) ce.getComponent()).getData("code");
384
				String code = ((Button) ce.getComponent()).getData("code");
372
				if (code.equals(FormulaireBarreValidation.CODE_BOUTON_VALIDER)) {
385
				if (code.equals(FormulaireBarreValidation.CODE_BOUTON_VALIDER)) {
373
					if (formulaire.soumettreFormulaire()) {
386
					if (formulaire.soumettreFormulaire()) {
374
						fenetre.hide();
387
						fenetre.hide();
375
					}
388
					}
376
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_APPLIQUER)) {
389
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_APPLIQUER)) {
377
					formulaire.soumettreFormulaire();
390
					formulaire.soumettreFormulaire();
378
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_ANNULER)) {
391
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_ANNULER)) {
379
					fenetre.hide();
392
					fenetre.hide();
380
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_REINITIALISER)) {
393
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_REINITIALISER)) {
381
					fenetreFormulaire.hide();
394
					fenetreFormulaire.hide();
382
					fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(formulaire.mode);
395
					fenetreFormulaire = creerFenetreModaleAvecFormulairePersonne(formulaire.mode);
383
					fenetreFormulaire.show();
396
					fenetreFormulaire.show();
384
				}
397
				}
385
			}
398
			}
386
		};
399
		};
387
		
400
		
388
		return ecouteur;
401
		return ecouteur;
389
	}
402
	}
390
	
403
	
391
	private Button creerBoutonSupprimer() {
404
	private Button creerBoutonSupprimer() {
392
		Button bouton = new Button(i18nC.supprimer());
405
		Button bouton = new Button(i18nC.supprimer());
393
		bouton.setIcon(Images.ICONES.vcardSupprimer());
406
		bouton.setIcon(Images.ICONES.vcardSupprimer());
394
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {  
407
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {  
395
			public void componentSelected(ButtonEvent ce) {
408
			public void componentSelected(ButtonEvent ce) {
396
				PublicationAPersonne personneSelectionnee = grilleAuteurs.getSelectionModel().getSelectedItem();
409
				PublicationAPersonne personneSelectionnee = new PublicationAPersonne(grilleAuteurs.getSelectionModel().getSelectedItem(), false);
397
				if (personneSelectionnee == null) {
410
				if (personneSelectionnee == null) {
398
					InfoLogger.display(i18nC.informationTitreGenerique(), i18nC.selectionnerPublication());
411
					InfoLogger.display(i18nC.informationTitreGenerique(), i18nC.selectionnerPublication());
399
				} else {
412
				} else {
400
					supprimerDansGrille(personneSelectionnee);
413
					supprimerDansGrille(personneSelectionnee);
401
				}
414
				}
402
			}   
415
			}   
403
		});
416
		});
404
		return bouton;
417
		return bouton;
405
	}
418
	}
406
	
419
	
407
	private Button creerBoutonRafraichir() {
420
	private Button creerBoutonRafraichir() {
408
		Button bouton = new Button(i18nC.rafraichir());
421
		Button bouton = new Button(i18nC.rafraichir());
409
		bouton.setIcon(Images.ICONES.rafraichir());
422
		bouton.setIcon(Images.ICONES.rafraichir());
410
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {  
423
		bouton.addSelectionListener(new SelectionListener<ButtonEvent>() {  
411
			public void componentSelected(ButtonEvent ce) {
424
			public void componentSelected(ButtonEvent ce) {
412
				actualiserGrille();
425
				actualiserGrille();
413
			}   
426
			}   
414
		});
427
		});
415
		return bouton;
428
		return bouton;
416
	}
429
	}
417
	
430
	
418
	private void actualiserGrille() {
431
	private void actualiserGrille() {
419
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
432
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
420
			// FIXME : c'est la merde
433
			// FIXME : c'est la merde
421
			//mediateur.selectionner(this, null, personneSelectionnee.getId(), "%");
434
			//mediateur.selectionner(this, null, personneSelectionnee.getId(), "%");
422
		} else {
435
		} else {
423
			grilleAuteurs.getStore().removeAll();
436
			grilleAuteurs.getStore().removeAll();
424
			layout();
437
			layout();
425
		}
438
		}
426
	}
439
	}
427
	
440
	
428
	private void creerComboBoxPersonnesSaisies() {
441
	private void creerComboBoxPersonnesSaisies() {
429
		ModelType modelTypePersonnes = new ModelType();
442
		ModelType modelTypePersonnes = new ModelType();
430
		modelTypePersonnes.setRoot("personnes");
443
		modelTypePersonnes.setRoot("personnes");
431
		modelTypePersonnes.setTotalName("nbElements");
444
		modelTypePersonnes.setTotalName("nbElements");
432
		modelTypePersonnes.addField("cp_fmt_nom_complet");
445
		modelTypePersonnes.addField("cp_fmt_nom_complet");
433
		modelTypePersonnes.addField("cp_nom");
446
		modelTypePersonnes.addField("cp_nom");
434
		modelTypePersonnes.addField("cp_prenom");
447
		modelTypePersonnes.addField("cp_prenom");
435
		modelTypePersonnes.addField("cp_id_personne");
448
		modelTypePersonnes.addField("cp_id_personne");
436
		modelTypePersonnes.addField("cp_code_postal");
449
		modelTypePersonnes.addField("cp_code_postal");
437
		modelTypePersonnes.addField("cp_ville");
450
		modelTypePersonnes.addField("cp_ville");
438
		modelTypePersonnes.addField("cp_truk_courriel");
451
		modelTypePersonnes.addField("cp_truk_courriel");
439
		
452
		
440
		String displayNamePersonnes = "cp_fmt_nom_complet";
453
		String displayNamePersonnes = "cp_fmt_nom_complet";
441
		ProxyPersonnes<ModelData> proxyPersonnes = new ProxyPersonnes<ModelData>(null);
454
		ProxyPersonnes<ModelData> proxyPersonnes = new ProxyPersonnes<ModelData>(null);
442
		
455
		
443
		personnesSaisiesComboBox = new ChampComboBoxRechercheTempsReelPaginable(proxyPersonnes, modelTypePersonnes, displayNamePersonnes);
456
		personnesSaisiesComboBox = new ChampComboBoxRechercheTempsReelPaginable(proxyPersonnes, modelTypePersonnes, displayNamePersonnes);
444
		
457
		
445
		personnesSaisiesComboBox.getCombo().addListener(Events.Select, new Listener<BaseEvent>() {
458
		personnesSaisiesComboBox.getCombo().addListener(Events.Select, new Listener<BaseEvent>() {
446
			public void handleEvent(BaseEvent be) {		
459
			public void handleEvent(BaseEvent be) {		
447
				if (personnesSaisiesComboBox.getValeur() instanceof ModelData) {
460
				if (personnesSaisiesComboBox.getValeur() instanceof ModelData) {
448
					// N'ajouter l'auteur que s'il n'est pas déjà présent dans la grille et dans les valeurs initiales
461
					// N'ajouter l'auteur que s'il n'est pas déjà présent dans la grille et dans les valeurs initiales
449
					Personne personneSaisieSelectionnee = new Personne(personnesSaisiesComboBox.getValeur());
462
					Personne personneSaisieSelectionnee = new Personne(personnesSaisiesComboBox.getValeur());
450
					PublicationAPersonne pap = new PublicationAPersonne();
463
					PublicationAPersonne pap = new PublicationAPersonne(false);					
451
					pap.setPersonne(personneSaisieSelectionnee);
464
					pap.setPersonne(personneSaisieSelectionnee, true);
452
					pap.setOrdreAuteurs(String.valueOf(grilleAuteurs.getStore().getCount()+1));
465
					pap.setOrdreAuteurs(String.valueOf(grilleAuteurs.getStore().getCount()+1));
453
					if (modeDeCreation != Formulaire.MODE_AJOUTER) {
466
					if (modeDeCreation != Formulaire.MODE_AJOUTER) {
454
						pap.setPublicationLiee(publication);
467
						pap.setPublicationLiee(publication);
455
						pap.setIdPublication(publicationId);
468
						pap.setIdPublication(publicationId);
456
					}
469
					}
457
					if (grilleAuteurs.getStore().findModel(pap) != null)	{
470
					if (grilleAuteurs.getStore().findModel(pap) != null)	{
458
						Info.display("Information", "La personne est déjà présente dans la liste d'auteurs");
471
						Info.display("Information", "La personne est déjà présente dans la liste d'auteurs");
459
					} else {
472
					} else {
460
						ajouterDansGrille(pap);
473
						ajouterDansGrille(pap);
461
						personnesSaisiesComboBox.getCombo().setValue(null);
474
						personnesSaisiesComboBox.getCombo().setValue(null);
462
					}
475
					}
463
				}
476
				}
464
			}
477
			}
465
		});
478
		});
466
	}
479
	}
467
	
480
	
468
	private void ajouterDansGrille(PublicationAPersonne pap) {
481
	private void ajouterDansGrille(PublicationAPersonne pap) {
469
		ajouterDansGrille(pap, grilleAuteurs.getStore().getCount());
482
		ajouterDansGrille(pap, grilleAuteurs.getStore().getCount());
470
	}
483
	}
471
	
484
	
472
	private void ajouterDansGrille(PublicationAPersonne pap, int index) {
485
	private void ajouterDansGrille(PublicationAPersonne pap, int index) {
473
		if (pap != null) {
486
		if (pap != null) {
474
			if (!grilleAuteurs.getStore().contains(pap))	{
487
			if (!grilleAuteurs.getStore().contains(pap))	{
475
				//1) si elle ne fait pas partie des initiaux, ajouter à la liste à ajouter
488
				//1) si elle ne fait pas partie des initiaux, ajouter à la liste à ajouter
476
				if (!auteursInitialListe.containsValue(pap))	{
489
				if (!auteursInitialListe.containsValue(pap))	{
477
					auteursAjoutes.put(pap.getId(), pap);
490
					auteursAjoutes.put(pap.getId(), pap);
478
				}
491
				}
479
				
492
				
480
				// L'enlever de la liste à supprimer
493
				// L'enlever de la liste à supprimer
481
				if (auteursSupprimes.containsValue(pap))	{
494
				if (auteursSupprimes.containsValue(pap))	{
482
					auteursSupprimes.remove(pap);
495
					auteursSupprimes.remove(pap);
483
				}
496
				}
484
				//2) Ajouter a la grille
497
				//2) Ajouter a la grille
485
				grilleAuteurs.getStore().insert(pap, index);
498
				grilleAuteurs.getStore().insert(pap, index);
486
				grilleAuteurs.getSelectionModel().select(index, false);
499
				grilleAuteurs.getSelectionModel().select(index, false);
487
			} else {
500
			} else {
488
				InfoLogger.display("Information", "La personne choisie existe déjà dans la liste.");
501
				InfoLogger.display("Information", "La personne choisie existe déjà dans la liste.");
489
			}
502
			}
490
		}
503
		}
491
	}
504
	}
492
	
505
	
493
	/**
506
	/**
494
	 * Met à jour la grille avec les informations contenus dans la variable listePublicationsLiees
507
	 * Met à jour la grille avec les informations contenus dans la variable listePublicationsLiees
495
	 */
508
	 */
496
	/*
509
	/*
497
	private void mettreAJourGrille()	{
510
	private void mettreAJourGrille()	{
498
		grille.getStore().removeAll();
511
		grille.getStore().removeAll();
499
		grille.getStore().add(listePersonne.toList());
512
		grille.getStore().add(listePersonne.toList());
500
	}*/
513
	}*/
501
	
514
	
502
	private void supprimerDansGrille(PublicationAPersonne pap) {
515
	private void supprimerDansGrille(PublicationAPersonne pap) {
503
		if (pap != null) {
516
		if (pap != null) {
504
			// 1) Ajouter a la liste des personne à supprimer uniquement si est présente dans la liste initiale
517
			// 1) Ajouter a la liste des personne à supprimer uniquement si est présente dans la liste initiale
505
			if (auteursInitialListe.containsValue(pap)) {
518
			if (auteursInitialListe.containsValue(pap)) {
506
				auteursSupprimes.put(pap.getId(), pap);
519
				auteursSupprimes.put(pap.getId(), pap);
507
			}
520
			}
508
			
521
			
509
			if (auteursAjoutes.containsValue(pap))	{
522
			if (auteursAjoutes.containsValue(pap))	{
510
				auteursAjoutes.remove(pap);
523
				auteursAjoutes.remove(pap);
511
			}
524
			}
512
			
525
			
513
			if (auteursModifies.containsValue(pap))	{
526
			if (auteursModifies.containsValue(pap))	{
514
				auteursModifies.remove(pap);
527
				auteursModifies.remove(pap);
515
			}
528
			}
516
			
529
			
517
			// 2) Supprimer la personne de la liste
530
			// 2) Supprimer la personne de la liste
518
			grilleAuteurs.getStore().remove(pap);
531
			grilleAuteurs.getStore().remove(pap);
519
		} else {
532
		} else {
520
			Info.display("Information", "Vous devez sélectionner une personne");
533
			Info.display("Information", "Vous devez sélectionner une personne");
521
		}
534
		}
522
	}
535
	}
523
	
536
	
-
 
537
	private GrillePaginable<ModelData> creerGrilleAuteurs() {
-
 
538
		
524
	private EditorGrid<PublicationAPersonne> creerGrilleAuteurs() {
539
		// ModelType
-
 
540
		ModelType modelTypePersonnesAPublication = new ModelType();
-
 
541
		modelTypePersonnesAPublication.setRoot("publicationsAPersonne");
-
 
542
		modelTypePersonnesAPublication.setTotalName("nbElements");
-
 
543
		modelTypePersonnesAPublication.addField("cpuap_id_personne");
-
 
544
		modelTypePersonnesAPublication.addField("cpuap_id_publication");
-
 
545
		modelTypePersonnesAPublication.addField("cpuap_id_role");
-
 
546
		modelTypePersonnesAPublication.addField("cpuap_ordre");
-
 
547
		modelTypePersonnesAPublication.addField("cp_id_personne");
-
 
548
		modelTypePersonnesAPublication.addField("cp_fmt_nom_complet");
-
 
549
		modelTypePersonnesAPublication.addField("cp_nom");
-
 
550
		modelTypePersonnesAPublication.addField("cp_prenom");
-
 
551
		modelTypePersonnesAPublication.addField("cp_id_personne");
-
 
552
		modelTypePersonnesAPublication.addField("cp_code_postal");
-
 
553
		modelTypePersonnesAPublication.addField("cp_ville");
-
 
554
		modelTypePersonnesAPublication.addField("cp_truk_courriel");
-
 
555
		
-
 
556
		// Proxy
-
 
557
		ProxyPersonnesAPublication<ModelData> proxyPersonnesAPublication = new ProxyPersonnesAPublication<ModelData>(null, publicationId);		
-
 
558
 
-
 
559
		// Colonnes
-
 
560
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
-
 
561
		ColumnConfig columnOrdre = new ColumnConfig("_ordre_", i18nC.ordre(), 15);
-
 
562
		colonnes.add(columnOrdre);
-
 
563
		colonnes.add(new ColumnConfig("cp_fmt_nom_complet", i18nC.personneNomComplet(), 150));
-
 
564
		colonnes.add(new ColumnConfig("cp_code_postal", i18nC.personneCodePostal(), 150));
-
 
565
		colonnes.add(new ColumnConfig("cp_ville", i18nC.personneVille(), 75));
-
 
566
		colonnes.add(new ColumnConfig("cp_truk_courriel", i18nC.personneCourriel(), 75));		
-
 
567
		
-
 
568
		// Champs de traitement
-
 
569
		HashMap<String, String> virtualFields = new HashMap<String, String>();
525
		
570
		virtualFields.put("_ordre_", "cpuap_ordre");
526
		ListStore<PublicationAPersonne> storeGrilleAuteurs = new ListStore<PublicationAPersonne>();
571
		
527
		
572
		// Modele de selection
-
 
573
		GridSelectionModel<ModelData> modeleDeSelection = new GridSelectionModel<ModelData>();
528
		// ADD Listener ------------------------------------------------------------------------------------
574
		modeleDeSelection.addListener(Events.SelectionChange, new SelectionChangedListener<ModelData>() {
529
		storeGrilleAuteurs.addListener(Store.Add, new Listener<StoreEvent<PublicationAPersonne>>() {
575
			public void selectionChanged(SelectionChangedEvent<ModelData> se) {
-
 
576
				ModelData papSelectionnee = grilleAuteurs.getGrille().getSelectionModel().getSelectedItem();
530
			public void handleEvent(StoreEvent<PublicationAPersonne> ce) {
577
				int index = grilleAuteurs.getStore().indexOf(papSelectionnee);
531
				if (!changeOrderMarker) {
578
				
-
 
579
				if (index >= 1) boutonAuteurUp.setEnabled(true);
-
 
580
				else boutonAuteurUp.setEnabled(false);
532
					
581
				if ((index+1) < grilleAuteurs.getStore().getCount()) boutonAuteurDown.setEnabled(true);
533
					// Bug de GXT : Pour récupérer l'élément modifié, j'ai dû faire comme suit
-
 
534
					ListStore<PublicationAPersonne> auteursStore = (ListStore<PublicationAPersonne>)ce.getSource();
-
 
535
					PublicationAPersonne pap = auteursStore.getAt(ce.getIndex());
-
 
536
					
582
				else boutonAuteurDown.setEnabled(false);
537
					// Lorsque l'on reçoit une liste d'auteurs, on leur affecte l'état "modifié", puis
-
 
-
 
583
			}
-
 
584
		});
-
 
585
		
-
 
586
		ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
-
 
587
		
-
 
588
		// Grille
-
 
589
		// ATTENTION : le constructure de cette grille est à vérifier!
-
 
590
		final GrillePaginable<ModelData> grilleAuteurs = new GrillePaginable<ModelData>(modelTypePersonnesAPublication, virtualFields, proxyPersonnesAPublication, colonnes, modeleDeColonnes);		
-
 
591
		grilleAuteurs.getGrille().setHeight("100%");
-
 
592
		grilleAuteurs.getGrille().setBorders(true);
-
 
593
		grilleAuteurs.getGrille().setSelectionModel(modeleDeSelection);
-
 
594
		grilleAuteurs.getGrille().getView().setForceFit(true);
-
 
595
		grilleAuteurs.getGrille().setAutoExpandColumn("fmt_nom_complet");
-
 
596
		grilleAuteurs.getGrille().setStripeRows(true);
-
 
597
		grilleAuteurs.getGrille().setTrackMouseOver(true);
538
					// on les ajoute au magasin mais puisque chaque élément ajouté au magasin déclenche
598
		
539
					// l'évènement Store.Add, on est obligé de vérifier si l'objet n'a pas déjà un état
599
		// Rajouter des écouteurs
540
					// sinon l'évènement écrase l'état précédent
600
		grilleAuteurs.getStore().addListener(Store.Add, new Listener<StoreEvent<ModelData>>() {
541
					if (pap.get("_etat_") == null) pap.set("_etat_", aDonnee.ETAT_AJOUTE);
601
			public void handleEvent(StoreEvent<ModelData> ce) {
542
					
602
				if (!changeOrderMarker) {					
543
					actualiserEtatBoutonsBarreOutils();
603
					actualiserEtatBoutonsBarreOutils();
544
				}
604
				}
545
			}
605
			}
546
		});
606
		});
547
		
-
 
548
		// REMOVE Listener ------------------------------------------------------------------------------------
-
 
549
		storeGrilleAuteurs.addListener(Store.Remove, new Listener<StoreEvent<PublicationAPersonne>>() {
607
		grilleAuteurs.getStore().addListener(Store.Remove, new Listener<StoreEvent<ModelData>>() {
550
			public void handleEvent(StoreEvent<PublicationAPersonne> ce) {
608
			public void handleEvent(StoreEvent<ModelData> ce) {
551
				if (!changeOrderMarker) {					
609
				if (!changeOrderMarker) {					
552
					actualiserEtatBoutonsBarreOutils();
610
					actualiserEtatBoutonsBarreOutils();
553
				}
611
				}
554
			}
612
			}
555
		});
613
		});
556
		
-
 
557
		// UPDATE Listener ------------------------------------------------------------------------------------
-
 
558
		storeGrilleAuteurs.addListener(Store.Update, new Listener<StoreEvent<PublicationAPersonne>>() {
614
		grilleAuteurs.getStore().addListener(Store.Update, new Listener<StoreEvent<ModelData>>() {
559
			public void handleEvent(StoreEvent<PublicationAPersonne> ce) {
615
			public void handleEvent(StoreEvent<ModelData> ce) {
560
				if (!changeOrderMarker) {
616
				if (!changeOrderMarker) {
561
					
-
 
562
					if (ce.getRecord().isModified("ordre")) {
617
					if (ce.getRecord().isModified("_ordre_")) {
563
						/** s'il s'agit d'un auteur que l'on vient d'ajouter à la liste, alors on a pas besoin
618
						// s'il s'agit d'un auteur que l'on vient d'ajouter à la liste, alors on a pas besoin
564
						de faire quoique ce soit car l'auteur est déjà dans la liste des auteurs ajoutés **/
619
						// de faire quoique ce soit car l'auteur est déjà dans la liste des auteurs ajoutés
565
						if (ce.getModel().get("_etat_").equals(aDonnee.ETAT_AJOUTE)) {
620
						if (ce.getModel().get("_etat_").equals(aDonnee.ETAT_AJOUTE)) {
566
							// ... do nothing
621
							// ... do nothing
567
						/** s'il s'agit d'un auteur qui était déjà présent dans la liste initiale, il faut
622
						// s'il s'agit d'un auteur qui était déjà présent dans la liste initiale, il faut
568
						ajouter cet auteur à la liste des auteurs modifiés **/
623
						// ajouter cet auteur à la liste des auteurs modifiés
569
						} else {
624
						} else {
570
							if (ce.getModel() instanceof PublicationAPersonne) {
-
 
571
								PublicationAPersonne pap = ce.getModel();
625
							PublicationAPersonne pap = new PublicationAPersonne(ce.getModel(), false);
572
								auteursModifies.put(pap.getId(), pap);
626
							auteursModifies.put(pap.getId(), pap);
573
							}
627
						}	
574
						}	
628
					}
575
					}
629
				}
576
				}
630
			}
577
			}
-
 
578
		});
631
		});		
579
		
-
 
580
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
-
 
581
		ColumnConfig columnOrdre = new ColumnConfig("ordre", i18nC.ordre(), 15);
-
 
582
		/*
-
 
583
		final TextField<String> ordre = new TextField<String>(); 
-
 
584
		ordre.setValidator(new Validator(){
-
 
585
			public String validate(Field<?> field, String value) {
-
 
586
				if (value.matches("[0-9]*")) return null;
-
 
587
				else return "[Erreur] Le champ 'ordre' doit être un nombre entier.";
-
 
588
			}
-
 
589
		});
-
 
590
		*/
-
 
591
 
-
 
592
		colonnes.add(columnOrdre);
-
 
593
		colonnes.add(new ColumnConfig("fmt_nom_complet", i18nC.personneNomComplet(), 150));
-
 
594
		colonnes.add(new ColumnConfig("code_postal", i18nC.personneCodePostal(), 150));
-
 
595
		colonnes.add(new ColumnConfig("ville", i18nC.personneVille(), 75));
-
 
596
		colonnes.add(new ColumnConfig("truk_courriel", i18nC.personneCourriel(), 75));
-
 
597
 
-
 
598
		
-
 
599
		GridSelectionModel<PublicationAPersonne> modeleDeSelection = new GridSelectionModel<PublicationAPersonne>();
-
 
600
		
-
 
601
		ColumnModel modeleDeColonnes = new ColumnModel(colonnes);
-
 
602
		
-
 
603
		EditorGrid<PublicationAPersonne> grilleDesAuteurs = new EditorGrid<PublicationAPersonne>(storeGrilleAuteurs, modeleDeColonnes);
-
 
604
		
-
 
605
		modeleDeSelection.addListener(Events.SelectionChange, new SelectionChangedListener<PublicationAPersonne>() {
-
 
606
			public void selectionChanged(SelectionChangedEvent<PublicationAPersonne> se) {
-
 
607
				PublicationAPersonne papSelectionnee = grilleAuteurs.getSelectionModel().getSelectedItem();
-
 
608
				int index = grilleAuteurs.getStore().indexOf(papSelectionnee);
-
 
609
				
-
 
610
				if (index >= 1) boutonAuteurUp.setEnabled(true);
-
 
611
				else boutonAuteurUp.setEnabled(false);
-
 
612
				if ((index+1) < grilleAuteurs.getStore().getCount()) boutonAuteurDown.setEnabled(true);
-
 
613
				else boutonAuteurDown.setEnabled(false);
-
 
614
			}
-
 
615
		});
-
 
616
		
-
 
617
		grilleDesAuteurs.setHeight("100%");
-
 
618
		grilleDesAuteurs.setBorders(true);
-
 
619
		grilleDesAuteurs.setSelectionModel(modeleDeSelection);
-
 
620
		grilleDesAuteurs.getView().setForceFit(true);
-
 
621
		grilleDesAuteurs.setAutoExpandColumn("fmt_nom_complet");
-
 
622
		grilleDesAuteurs.setStripeRows(true);
-
 
623
		grilleDesAuteurs.setTrackMouseOver(true);
-
 
624
		
632
		
625
		return grilleDesAuteurs;
633
		return grilleAuteurs;
626
	}
634
	}
627
	
635
	
628
	private void genererTitreFormulaire() {
636
	private void genererTitreFormulaire() {
629
		String titre = i18nC.publicationTitreFormAjout();
637
		String titre = i18nC.publicationTitreFormAjout();
630
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
638
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
631
			 titre = i18nC.publicationTitreFormModif();
639
			 titre = i18nC.publicationTitreFormModif();
632
			 if (publication != null) {
640
			 if (publication != null) {
633
				 titre += " - "+i18nC.id()+": "+publication.getId()+" - "+publication.getTitre();
641
				 titre += " - "+i18nC.id()+": "+publication.getId()+" - "+publication.getTitre();
634
			 }
642
			 }
635
		}
643
		}
636
		panneauFormulaire.setHeading(titre);
644
		panneauFormulaire.setHeading(titre);
637
	}
645
	}
638
 
646
 
639
	
647
	
640
	private void creerZoneAuteurs() {
648
	private void creerZoneAuteurs() {
641
		auteursFieldset = new ContentPanel();
649
		auteursFieldset = new ContentPanel();
642
		auteursFieldset.setLayout(new FitLayout());
650
		auteursFieldset.setLayout(new FitLayout());
643
		auteursFieldset.setHeading("Auteurs");
651
		auteursFieldset.setHeading("Auteurs");
644
		
652
		
645
		creerChampsAuteur();
653
		creerChampsAuteur();
646
	}
654
	}
647
	
655
	
648
	private void creerChampsAuteur() {
656
	private void creerChampsAuteur() {
649
		auteursFieldset.removeAll();
657
		auteursFieldset.removeAll();
650
		barreOutils = creerBarreOutilsGrille();
658
		barreOutils = creerBarreOutilsGrille();
651
		auteursFieldset.setTopComponent(barreOutils);
659
		auteursFieldset.setTopComponent(barreOutils);
652
		grilleAuteurs = creerGrilleAuteurs();
660
		grilleAuteurs = creerGrilleAuteurs();
653
		auteursFieldset.add(grilleAuteurs);
661
		auteursFieldset.add(grilleAuteurs);
654
		auteursFieldset.layout();
662
		auteursFieldset.layout();
655
	}
663
	}
656
	
664
	
657
	private void creerZoneGeneralites() {
665
	private void creerZoneGeneralites() {
658
		FormLayout layout = new FormLayout();
666
		FormLayout layout = new FormLayout();
659
		layout.setLabelWidth(200);
667
		layout.setLabelWidth(200);
660
		
668
		
661
		// Fieldset Infos Générales
669
		// Fieldset Infos Générales
662
		generalitesFieldset = new FieldSet();
670
		generalitesFieldset = new FieldSet();
663
		generalitesFieldset.setHeading("Informations générales");
671
		generalitesFieldset.setHeading("Informations générales");
664
		generalitesFieldset.setCollapsible(true);
672
		generalitesFieldset.setCollapsible(true);
665
		generalitesFieldset.setLayout(layout);
673
		generalitesFieldset.setLayout(layout);
666
 
674
 
667
		ModelType modelTypeProjets = new ModelType();
675
		ModelType modelTypeProjets = new ModelType();
668
		modelTypeProjets.setRoot("projets");
676
		modelTypeProjets.setRoot("projets");
669
		modelTypeProjets.setTotalName("nbElements");
677
		modelTypeProjets.setTotalName("nbElements");
670
		modelTypeProjets.addField("cpr_nom");
678
		modelTypeProjets.addField("cpr_nom");
671
		modelTypeProjets.addField("cpr_id_projet");
679
		modelTypeProjets.addField("cpr_id_projet");
672
		
680
		
673
		String displayNameProjets = "cpr_nom";
681
		String displayNameProjets = "cpr_nom";
674
		ProxyProjets<ModelData> proxyProjets = new ProxyProjets<ModelData>(null);
682
		ProxyProjets<ModelData> proxyProjets = new ProxyProjets<ModelData>(null);
675
		
683
		
676
		projetsCombo = new ChampComboBoxRechercheTempsReelPaginable(proxyProjets, modelTypeProjets, displayNameProjets);
684
		projetsCombo = new ChampComboBoxRechercheTempsReelPaginable(proxyProjets, modelTypeProjets, displayNameProjets);
677
		projetsCombo.setWidth(200, 600);
685
		projetsCombo.setWidth(200, 600);
678
		projetsCombo.getCombo().setTabIndex(tabIndex++);
686
		projetsCombo.getCombo().setTabIndex(tabIndex++);
679
		projetsCombo.getCombo().setFieldLabel(i18nC.projetChamp());
687
		projetsCombo.getCombo().setFieldLabel(i18nC.projetChamp());
680
		projetsCombo.getCombo().setForceSelection(true);
688
		projetsCombo.getCombo().setForceSelection(true);
681
		projetsCombo.getCombo().addStyleName(ComposantClass.OBLIGATOIRE);
689
		projetsCombo.getCombo().addStyleName(ComposantClass.OBLIGATOIRE);
682
		projetsCombo.getCombo().addListener(Events.Valid, Formulaire.creerEcouteurChampObligatoire());
690
		projetsCombo.getCombo().addListener(Events.Valid, Formulaire.creerEcouteurChampObligatoire());
683
		
691
		
684
		projetsCombo.getCombo().setValidator(new Validator() {
692
		projetsCombo.getCombo().setValidator(new Validator() {
685
			public String validate(Field<?> field, String value) {
693
			public String validate(Field<?> field, String value) {
686
				String retour = null;
694
				String retour = null;
687
				if (field.getRawValue().equals("")) {
695
				if (field.getRawValue().equals("")) {
688
					field.setValue(null);
696
					field.setValue(null);
689
				} else if (projetsCombo.getStore().findModel("cpr_nom", field.getRawValue()) == null) {
697
				} else if (projetsCombo.getStore().findModel("cpr_nom", field.getRawValue()) == null) {
690
					String contenuBrut = field.getRawValue();
698
					String contenuBrut = field.getRawValue();
691
					field.setValue(null);
699
					field.setValue(null);
692
					field.setRawValue(contenuBrut);
700
					field.setRawValue(contenuBrut);
693
					retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
701
					retour = "Veuillez sélectionner une valeur ou laisser le champ vide";
694
				}
702
				}
695
				return retour;
703
				return retour;
696
			}
704
			}
697
		});	
705
		});	
698
		generalitesFieldset.add(projetsCombo, new FormData(600, 0));
706
		generalitesFieldset.add(projetsCombo, new FormData(600, 0));
699
		
707
		
700
		titreChp = new TextField<String>();
708
		titreChp = new TextField<String>();
701
		titreChp.setName("cpu");
709
		titreChp.setName("cpu");
702
		titreChp.setFieldLabel("Titre de l'article ou de l'ouvrage");
710
		titreChp.setFieldLabel("Titre de l'article ou de l'ouvrage");
703
		titreChp.addStyleName(ComposantClass.OBLIGATOIRE);
711
		titreChp.addStyleName(ComposantClass.OBLIGATOIRE);
704
		titreChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
712
		titreChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
705
		generalitesFieldset.add(titreChp, new FormData(450, 0));
713
		generalitesFieldset.add(titreChp, new FormData(450, 0));
706
		
714
		
707
		collectionChp = new TextField<String>();
715
		collectionChp = new TextField<String>();
708
		collectionChp.setFieldLabel("Intitulé de la revue ou de la collection");
716
		collectionChp.setFieldLabel("Intitulé de la revue ou de la collection");
709
		generalitesFieldset.add(collectionChp, new FormData(450, 0));
717
		generalitesFieldset.add(collectionChp, new FormData(450, 0));
710
		
718
		
711
		uriChp = new TextField<String>();
719
		uriChp = new TextField<String>();
712
		uriChp.setFieldLabel("URL de la publication");
720
		uriChp.setFieldLabel("URL de la publication");
713
		generalitesFieldset.add(uriChp, new FormData(450, 0));
721
		generalitesFieldset.add(uriChp, new FormData(450, 0));
714
	}
722
	}
715
	
723
	
716
	private void creerZoneEdition() {
724
	private void creerZoneEdition() {
717
		FormLayout layout = new FormLayout();
725
		FormLayout layout = new FormLayout();
718
		layout.setLabelWidth(200);
726
		layout.setLabelWidth(200);
719
 
727
 
720
		// Fieldset Edition
728
		// Fieldset Edition
721
		editionFieldset = new FieldSet();
729
		editionFieldset = new FieldSet();
722
		editionFieldset.setHeading("Édition");
730
		editionFieldset.setHeading("Édition");
723
		editionFieldset.setCollapsible(true);
731
		editionFieldset.setCollapsible(true);
724
		editionFieldset.setLayout(layout);
732
		editionFieldset.setLayout(layout);
725
		
733
		
726
		/*****************************************************/
734
		/*****************************************************/
727
		/**			Champ 'Editeur de la publication'		**/
735
		/**			Champ 'Editeur de la publication'		**/
728
		/*****************************************************/		
736
		/*****************************************************/		
729
		ModelType modelTypeStructures = new ModelType();
737
		ModelType modelTypeStructures = new ModelType();
730
		modelTypeStructures.setRoot("structures");
738
		modelTypeStructures.setRoot("structures");
731
		modelTypeStructures.setTotalName("nbElements");
739
		modelTypeStructures.setTotalName("nbElements");
732
		modelTypeStructures.addField("cs_nom");
740
		modelTypeStructures.addField("cs_nom");
733
		modelTypeStructures.addField("cs_id_structure");
741
		modelTypeStructures.addField("cs_id_structure");
734
		
742
		
735
		String displayNameStructures = "cs_nom";
743
		String displayNameStructures = "cs_nom";
736
		ProxyStructures<ModelData> proxyStructures = new ProxyStructures<ModelData>(null);
744
		ProxyStructures<ModelData> proxyStructures = new ProxyStructures<ModelData>(null);
737
		
745
		
738
		editeurCombobox = new ChampComboBoxRechercheTempsReelPaginable(proxyStructures, modelTypeStructures, displayNameStructures);
746
		editeurCombobox = new ChampComboBoxRechercheTempsReelPaginable(proxyStructures, modelTypeStructures, displayNameStructures);
739
		editeurCombobox.setWidth(200, 600);
747
		editeurCombobox.setWidth(200, 600);
740
		editeurCombobox.getCombo().setTabIndex(tabIndex++);
748
		editeurCombobox.getCombo().setTabIndex(tabIndex++);
741
		editeurCombobox.getCombo().setEmptyText("Sélectionner un éditeur...");
749
		editeurCombobox.getCombo().setEmptyText("Sélectionner un éditeur...");
742
		editeurCombobox.getCombo().setFieldLabel("Éditeur de la publication");
750
		editeurCombobox.getCombo().setFieldLabel("Éditeur de la publication");
743
		editeurCombobox.getCombo().setEditable(true);
751
		editeurCombobox.getCombo().setEditable(true);
744
		editionFieldset.add(editeurCombobox, new FormData(600, 0));
752
		editionFieldset.add(editeurCombobox, new FormData(600, 0));
745
		
753
		
746
		/*********************************************/
754
		/*********************************************/
747
		/**			Champ 'Date de publication'		**/
755
		/**			Champ 'Date de publication'		**/
748
		/*********************************************/			
756
		/*********************************************/			
749
		datePublicationChp = new TextField<String>();
757
		datePublicationChp = new TextField<String>();
750
		datePublicationChp.setMaxLength(4);
758
		datePublicationChp.setMaxLength(4);
751
		datePublicationChp.setMinLength(4);
759
		datePublicationChp.setMinLength(4);
752
		datePublicationChp.setFieldLabel("Année de publication");
760
		datePublicationChp.setFieldLabel("Année de publication");
753
		datePublicationChp.addStyleName(ComposantClass.OBLIGATOIRE);
761
		datePublicationChp.addStyleName(ComposantClass.OBLIGATOIRE);
754
		datePublicationChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
762
		datePublicationChp.addListener(Events.Valid, creerEcouteurChampObligatoire());
755
		editionFieldset.add(datePublicationChp, new FormData(40, 0));
763
		editionFieldset.add(datePublicationChp, new FormData(40, 0));
756
		
764
		
757
		/*****************************/
765
		/*********************************/
758
		/**			Champ ''		**/
766
		/**			Champ 'Tome'		**/
759
		/*****************************/	
767
		/*********************************/	
760
		tomeChp = new TextField<String>();
768
		tomeChp = new TextField<String>();
761
		tomeChp.setFieldLabel("Série de la revue ou tome");
769
		tomeChp.setFieldLabel("Série de la revue ou tome");
762
		editionFieldset.add(tomeChp, new FormData(75, 0));
770
		editionFieldset.add(tomeChp, new FormData(75, 0));
763
 
771
 
764
		/*****************************/
772
		/*************************************/
765
		/**			Champ ''		**/
773
		/**			Champ 'Fascicule'		**/
766
		/*****************************/	
774
		/*************************************/	
767
		fasciculeChp = new TextField<String>();
775
		fasciculeChp = new TextField<String>();
768
		fasciculeChp.setFieldLabel("Fascicule de la revue");
776
		fasciculeChp.setFieldLabel("Fascicule de la revue");
769
		editionFieldset.add(fasciculeChp, new FormData(75, 0));
777
		editionFieldset.add(fasciculeChp, new FormData(75, 0));
770
 
778
 
771
		/*****************************/
779
		/*********************************/
772
		/**			Champ ''		**/
780
		/**			Champ 'Pages'		**/
773
		/*****************************/	
781
		/*********************************/	
774
		pagesChp = new TextField<String>();
782
		pagesChp = new TextField<String>();
775
		pagesChp.setFieldLabel("Pages");
783
		pagesChp.setFieldLabel("Pages");
776
		pagesChp.setToolTip("Fomat : NBRE ou NBRE-NBRE. ('NBRE' correspond à une suite de chiffres arabes ou romains ou à un point d'interrogation '?' dans le cas d'une donnée inconnue)");
784
		pagesChp.setToolTip("Fomat : NBRE ou NBRE-NBRE. ('NBRE' correspond à une suite de chiffres arabes ou romains ou à un point d'interrogation '?' dans le cas d'une donnée inconnue)");
777
		editionFieldset.add(pagesChp, new FormData(100, 0));
785
		editionFieldset.add(pagesChp, new FormData(100, 0));
778
	}
786
	}
779
	
787
	
780
	
788
	
781
	 //-------------------------//
789
	 //-------------------------//
782
	//    Méthodes privées     //------------------------------------------------------------
790
	//    Méthodes privées     //------------------------------------------------------------
783
	
791
	
784
	private void miseAJourAuteursInitialListe() {
792
	private void miseAJourAuteursInitialListe() {
785
		Iterator<String> clesAjoutees = auteursAjoutes.keySet().iterator();
793
		Iterator<String> clesAjoutees = auteursAjoutes.keySet().iterator();
786
		while (clesAjoutees.hasNext()) {
794
		while (clesAjoutees.hasNext()) {
787
			PublicationAPersonne auteurAjoute = auteursAjoutes.get(clesAjoutees.next());
795
			PublicationAPersonne auteurAjoute = auteursAjoutes.get(clesAjoutees.next());
788
			auteursInitialListe.put(auteurAjoute.getId(), auteurAjoute);
796
			auteursInitialListe.put(auteurAjoute.getId(), auteurAjoute);
789
		}
797
		}
790
		
798
		
791
		Iterator<String> clesSupprimees = auteursSupprimes.keySet().iterator();
799
		Iterator<String> clesSupprimees = auteursSupprimes.keySet().iterator();
792
		while (clesSupprimees.hasNext()) {
800
		while (clesSupprimees.hasNext()) {
793
			PublicationAPersonne auteurSupprime = auteursSupprimes.get(clesSupprimees.next());
801
			PublicationAPersonne auteurSupprime = auteursSupprimes.get(clesSupprimees.next());
794
			auteursInitialListe.remove(auteurSupprime.getId());
802
			auteursInitialListe.remove(auteurSupprime.getId());
795
		}
803
		}
796
	}
804
	}
797
	
805
	
798
	public boolean soumettreFormulaire() {
806
	public boolean soumettreFormulaire() {
799
		boolean formulaireValideOk = verifierFormulaire();
807
		boolean formulaireValideOk = verifierFormulaire();
800
		if (formulaireValideOk) {
808
		if (formulaireValideOk) {
801
			soumettrePublication();
809
			soumettrePublication();
802
		}
810
		}
803
		return formulaireValideOk;
811
		return formulaireValideOk;
804
	}
812
	}
805
 
813
 
806
	private void soumettrePublication() {
814
	private void soumettrePublication() {
807
		Publication publicationCollectee = collecterPublication();
815
		Publication publicationCollectee = collecterPublication();
808
		if (publicationCollectee != null) {
816
		if (publicationCollectee != null) {
809
			// Pour l'enregistrement des publications, on utilise le séquenceur
817
			// Pour l'enregistrement des publications, on utilise le séquenceur
810
			// Il doit attendre le retour de l'enregistrement pour poursuivre
818
			// Il doit attendre le retour de l'enregistrement pour poursuivre
811
			sequenceur = new Sequenceur();
819
			sequenceur = new Sequenceur();
812
			int seqId = sequenceur.lancerRequeteSynchrone(this);
820
			int seqId = sequenceur.lancerRequeteSynchrone(this);
813
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
821
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
814
				mediateur.ajouterPublication(sequenceur, publicationCollectee, seqId);
822
				mediateur.ajouterPublication(sequenceur, publicationCollectee, seqId);
815
			} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
823
			} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
816
				mediateur.modifierPublication(sequenceur, publicationCollectee, seqId);
824
				mediateur.modifierPublication(sequenceur, publicationCollectee, seqId);
817
			}
825
			}
818
			
826
			
819
		// si l'on est en mode MODIFIER, on soumet les auteurs meme si les informations de la publication
827
		// si l'on est en mode MODIFIER, on soumet les auteurs meme si les informations de la publication
820
		// restent inchangées car il se peut que les auteurs aient été modifiés
828
		// restent inchangées car il se peut que les auteurs aient été modifiés
821
		} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
829
		} else if (mode.equals(Formulaire.MODE_MODIFIER)) {
822
			soumettreAuteurs();
830
			soumettreAuteurs();
823
		}
831
		}
824
	}
832
	}
825
	
833
	
826
	private void soumettreAuteurs() {
834
	private void soumettreAuteurs() {
827
		
835
		
828
		formaterOrdreAuteurs();
836
		formaterOrdreAuteurs();
829
		
837
		
830
		//1) Auteurs ajoutés : 
838
		//1) Auteurs ajoutés : 
831
		PublicationAPersonneListe listeAuteursAAjouter = new PublicationAPersonneListe();
839
		PublicationAPersonneListe listeAuteursAAjouter = new PublicationAPersonneListe();
832
		Iterator<String> itAuteur = auteursAjoutes.keySet().iterator();
840
		Iterator<String> itAuteur = auteursAjoutes.keySet().iterator();
833
		while (itAuteur.hasNext())	{			
841
		while (itAuteur.hasNext())	{			
834
			String cle = itAuteur.next();
842
			String cle = itAuteur.next();
835
			PublicationAPersonne publiAPersonne = auteursAjoutes.get(cle);			
843
			PublicationAPersonne publiAPersonne = auteursAjoutes.get(cle);			
836
			publiAPersonne.setIdPublication(this.publicationId);
844
			publiAPersonne.setIdPublication(this.publicationId);
837
			publiAPersonne.setOrdreAuteurs(publiAPersonne.getOrdreAuteurs());
845
			publiAPersonne.setOrdreAuteurs(publiAPersonne.getOrdreAuteurs());
838
			listeAuteursAAjouter.put(cle, publiAPersonne);
846
			listeAuteursAAjouter.put(cle, publiAPersonne);
839
		}
847
		}
840
		
848
		
841
		// - envoyer au mediateur SSI personnes à ajouter
849
		// - envoyer au mediateur SSI personnes à ajouter
842
		if (listeAuteursAAjouter.size() > 0)	{
850
		if (listeAuteursAAjouter.size() > 0)	{
843
			int seqId = sequenceur.lancerRequeteSynchrone(this);
851
			int seqId = sequenceur.lancerRequeteSynchrone(this);
844
			mediateur.ajouterPublicationAPersonne(sequenceur, this.publicationId, listeAuteursAAjouter, PublicationAPersonne.ROLE_AUTEUR, seqId);
852
			mediateur.ajouterPublicationAPersonne(sequenceur, this.publicationId, listeAuteursAAjouter, PublicationAPersonne.ROLE_AUTEUR, seqId);
845
		}
853
		}
846
		
854
		
847
		//2) Auteurs supprimés : 
855
		//2) Auteurs supprimés : 
848
		PublicationAPersonneListe listeAuteursASupprimer = new PublicationAPersonneListe();
856
		PublicationAPersonneListe listeAuteursASupprimer = new PublicationAPersonneListe();
849
		itAuteur = auteursSupprimes.keySet().iterator();
857
		itAuteur = auteursSupprimes.keySet().iterator();
850
		while (itAuteur.hasNext())	{
858
		while (itAuteur.hasNext())	{
851
			String cle = itAuteur.next();
859
			String cle = itAuteur.next();
852
			PublicationAPersonne publiAPersonne = auteursSupprimes.get(cle);
860
			PublicationAPersonne publiAPersonne = auteursSupprimes.get(cle);
853
			listeAuteursASupprimer.put(cle, publiAPersonne);
861
			listeAuteursASupprimer.put(cle, publiAPersonne);
854
		}
862
		}
855
		
863
		
856
		// - Envoyer au médiateur SSI personnes à supprimer
864
		// - Envoyer au médiateur SSI personnes à supprimer
857
		if (listeAuteursASupprimer.size() > 0) {
865
		if (listeAuteursASupprimer.size() > 0) {
858
			// Pour une suppression des auteurs, on a pas besoin d'attendre le retour
866
			// Pour une suppression des auteurs, on a pas besoin d'attendre le retour
859
			mediateur.supprimerPublicationAPersonne(this, listeAuteursASupprimer);
867
			mediateur.supprimerPublicationAPersonne(this, listeAuteursASupprimer);
860
		}
868
		}
861
		
869
		
862
		//3) Auteurs modifiés : 
870
		//3) Auteurs modifiés : 
863
		PublicationAPersonneListe listeAuteursAModifier = new PublicationAPersonneListe();
871
		PublicationAPersonneListe listeAuteursAModifier = new PublicationAPersonneListe();
864
		itAuteur = auteursModifies.keySet().iterator();
872
		itAuteur = auteursModifies.keySet().iterator();
865
		while (itAuteur.hasNext())	{
873
		while (itAuteur.hasNext())	{
866
			String cle = itAuteur.next();
874
			String cle = itAuteur.next();
867
			PublicationAPersonne publiAPersonne = auteursModifies.get(cle);
875
			PublicationAPersonne publiAPersonne = auteursModifies.get(cle);
868
			listeAuteursAModifier.put(cle, publiAPersonne);
876
			listeAuteursAModifier.put(cle, publiAPersonne);
869
		}
877
		}
870
		
878
		
871
		// - Envoyer au médiateur SSI personnes à modifier
879
		// - Envoyer au médiateur SSI personnes à modifier
872
		if (listeAuteursAModifier.size() > 0) {
880
		if (listeAuteursAModifier.size() > 0) {
873
			int seqId = sequenceur.lancerRequeteSynchrone(this);
881
			int seqId = sequenceur.lancerRequeteSynchrone(this);
874
			mediateur.modifierPublicationAPersonne(sequenceur, this.publicationId, listeAuteursAModifier, PublicationAPersonne.ROLE_AUTEUR, seqId);
882
			mediateur.modifierPublicationAPersonne(sequenceur, this.publicationId, listeAuteursAModifier, PublicationAPersonne.ROLE_AUTEUR, seqId);
875
		}
883
		}
876
		
884
		
877
		sequenceur.enfilerRafraichissement(this, new Information("auteurs_enregistres"));
885
		sequenceur.enfilerRafraichissement(this, new Information("auteurs_enregistres"));
878
	}
886
	}
879
	
887
	
880
	private void formaterOrdreAuteurs() {
888
	private void formaterOrdreAuteurs() {
881
		ListStore<PublicationAPersonne> store = grilleAuteurs.getStore();
889
		ListStore<ModelData> store = grilleAuteurs.getStore();
882
		List<PublicationAPersonne> auteurs = grilleAuteurs.getStore().getModels();
890
		List<ModelData> auteurs = grilleAuteurs.getStore().getModels();
883
		
891
		
884
		Iterator<PublicationAPersonne> itAuteurs = auteurs.iterator();
892
		Iterator<ModelData> itAuteurs = auteurs.iterator();
885
		while (itAuteurs.hasNext())	{
893
		while (itAuteurs.hasNext())	{
-
 
894
			ModelData selection = itAuteurs.next();
-
 
895
			
886
			PublicationAPersonne pap = itAuteurs.next();
896
			PublicationAPersonne pap = new PublicationAPersonne(selection, false);
-
 
897
			int ordre = store.indexOf(selection) + 1;
887
			int ordre = store.indexOf(pap) + 1;
898
			
888
			if (pap.getOrdreAuteurs() != String.valueOf(ordre)) {
899
			if (pap.getOrdreAuteurs() != String.valueOf(ordre)) {
889
				pap.setOrdreAuteurs(String.valueOf(ordre));
900
				pap.setOrdreAuteurs(String.valueOf(ordre));				
890
				auteursModifies.put(pap.getId(), pap);
901
				auteursModifies.put(pap.getId(), pap);
891
			}
902
			}
892
		} 
903
		} 
893
	}
904
	}
894
	
905
	
895
	private void peuplerFormulaire() {
906
	private void peuplerFormulaire() {
896
		setValeurComboProjets();
907
		setValeurComboProjets();
897
		titreChp.setValue(publication.getTitre());
908
		titreChp.setValue(publication.getTitre());
898
		collectionChp.setValue(publication.getCollection());
909
		collectionChp.setValue(publication.getCollection());
899
		uriChp.setValue(publication.getURI());
910
		uriChp.setValue(publication.getURI());
900
		datePublicationChp.setValue(reduireDateParAnnee(publication.getDateParution()));
911
		datePublicationChp.setValue(reduireDateParAnnee(publication.getDateParution()));
901
		tomeChp.setValue(publication.getIndicationNvt());
912
		tomeChp.setValue(publication.getIndicationNvt());
902
		fasciculeChp.setValue(publication.getFascicule());
913
		fasciculeChp.setValue(publication.getFascicule());
903
		pagesChp.setValue(publication.getPages());
914
		pagesChp.setValue(publication.getPages());
904
		
915
		
905
		if (publication.getEditeur().matches("^[0-9]+$")) {
916
		if (publication.getEditeur().matches("^[0-9]+$")) {
906
			editeurCombobox.getCombo().setValue(editeurCombobox.getStore().findModel("cs_id_structure", publication.getEditeur()));
917
			editeurCombobox.getCombo().setValue(editeurCombobox.getStore().findModel("cs_id_structure", publication.getEditeur()));
907
		} else {
918
		} else {
908
			editeurCombobox.getCombo().setRawValue(publication.getEditeur());
919
			editeurCombobox.getCombo().setRawValue(publication.getEditeur());
909
		}
920
		}
910
	}
921
	}
911
	
922
	
912
	private Publication collecterPublication() {
923
	private Publication collecterPublication() {
913
 
924
 
914
		Publication publicationCollectee = (Publication) publication.cloner(new Publication());
925
		Publication publicationCollectee = (Publication) publication.cloner(new Publication());
915
		publicationCollectee.setIdProjet(getValeurComboProjets());
926
		publicationCollectee.setIdProjet(getValeurComboProjets());
916
		publicationCollectee.setAuteur(construireIntituleAuteur());
927
		publicationCollectee.setAuteur(construireIntituleAuteur());
917
		
928
		
918
		String titre = titreChp.getValue();
929
		String titre = titreChp.getValue();
919
		publicationCollectee.setTitre(titre);
930
		publicationCollectee.setTitre(titre);
920
		
931
		
921
		String collection = collectionChp.getValue();
932
		String collection = collectionChp.getValue();
922
		publicationCollectee.setCollection(collection);
933
		publicationCollectee.setCollection(collection);
923
		
934
		
924
		publicationCollectee.setNomComplet(construireNomComplet());
935
		publicationCollectee.setNomComplet(construireNomComplet());
925
		
936
		
926
		String uri = uriChp.getValue();
937
		String uri = uriChp.getValue();
927
		publicationCollectee.setUri(uri);
938
		publicationCollectee.setUri(uri);
928
		
939
		
929
		String editeur = "";
940
		String editeur = "";
930
		if (editeurCombobox.getValeur() != null) {
941
		if (editeurCombobox.getValeur() != null) {
931
			Structure structure = new Structure(editeurCombobox.getValeur());
942
			Structure structure = new Structure(editeurCombobox.getValeur());
932
			editeur = structure.getId();
943
			editeur = structure.getId();
933
			publicationCollectee.setStructureEditeur(structure);
944
			publicationCollectee.setStructureEditeur(structure);
934
		} else if (!UtilString.isEmpty(editeurCombobox.getCombo().getRawValue())) {
945
		} else if (!UtilString.isEmpty(editeurCombobox.getCombo().getRawValue())) {
935
			editeur = editeurCombobox.getCombo().getRawValue();
946
			editeur = editeurCombobox.getCombo().getRawValue();
936
		}
947
		}
937
		publicationCollectee.setEditeur(editeur);
948
		publicationCollectee.setEditeur(editeur);
938
		
949
		
939
		String anneePublication = datePublicationChp.getRawValue();
950
		String anneePublication = datePublicationChp.getRawValue();
940
		String datePublication = anneePublication+"-00-00";
951
		String datePublication = anneePublication+"-00-00";
941
		publicationCollectee.setDateParution(datePublication);
952
		publicationCollectee.setDateParution(datePublication);
942
		
953
		
943
		String tome = tomeChp.getValue();
954
		String tome = tomeChp.getValue();
944
		publicationCollectee.setIndicationNvt(tome);
955
		publicationCollectee.setIndicationNvt(tome);
945
		
956
		
946
		String fascicule = fasciculeChp.getValue();
957
		String fascicule = fasciculeChp.getValue();
947
		publicationCollectee.setFascicule(fascicule);
958
		publicationCollectee.setFascicule(fascicule);
948
		
959
		
949
		String pages = pagesChp.getValue();
960
		String pages = pagesChp.getValue();
950
		publicationCollectee.setPages(pages);
961
		publicationCollectee.setPages(pages);
951
		
962
		
952
		Publication publicationARetourner = null;
963
		Publication publicationARetourner = null;
953
		if (!publicationCollectee.comparer(publication)) {
964
		if (!publicationCollectee.comparer(publication)) {
954
			publicationARetourner = publication = publicationCollectee;
965
			publicationARetourner = publication = publicationCollectee;
955
		}
966
		}
956
		return publicationARetourner;
967
		return publicationARetourner;
957
	}
968
	}
958
	
969
	
959
	private String construireIntituleEditeur() {
970
	private String construireIntituleEditeur() {
960
		String editeur = "";
971
		String editeur = "";
961
		if (editeurCombobox.getValeur() != null) {
972
		if (editeurCombobox.getValeur() != null) {
962
			Structure structure = new Structure(editeurCombobox.getValeur());
973
			Structure structure = new Structure(editeurCombobox.getValeur());
963
			if (structure == null) editeur = editeurCombobox.getCombo().getRawValue();
974
			if (structure == null) editeur = editeurCombobox.getCombo().getRawValue();
964
			else editeur = structure.getNom();
975
			else editeur = structure.getNom();
965
		} else if (!UtilString.isEmpty(editeurCombobox.getCombo().getRawValue())) {
976
		} else if (!UtilString.isEmpty(editeurCombobox.getCombo().getRawValue())) {
966
			editeur = editeurCombobox.getCombo().getRawValue();
977
			editeur = editeurCombobox.getCombo().getRawValue();
967
		}
978
		}
968
		return editeur;
979
		return editeur;
969
	}
980
	}
970
	
981
	
971
	private String construireIntituleAuteur() {
982
	private String construireIntituleAuteur() {
972
		String intituleAuteur = "";
983
		String intituleAuteur = "";
973
		
984
		
974
		// ranger par ordre désigné par le champ 'cpuap_ordre' de la table PublicationAPersonne
985
		// rangé par ordre désigné par le champ 'cpuap_ordre' de la table PublicationAPersonne
975
		grilleAuteurs.getStore().sort("ordre", SortDir.ASC);
986
		grilleAuteurs.getStore().sort("_ordre_", SortDir.ASC);
-
 
987
		List<ModelData> auteurs = grilleAuteurs.getStore().getModels();
976
		List<PublicationAPersonne> auteurs = grilleAuteurs.getStore().getModels();
-
 
977
		
988
		Iterator<ModelData> itAuteurs = auteurs.iterator();
978
		Iterator<PublicationAPersonne> itAuteurs = auteurs.iterator();
989
				
979
		while (itAuteurs.hasNext())	{
990
		while (itAuteurs.hasNext())	{
980
			Personne personneCourante = itAuteurs.next().getPersonne();
991
			Personne personneCourante = new PublicationAPersonne(itAuteurs.next(), false).getPersonne();
981
			intituleAuteur += personneCourante.getNom().toUpperCase() + " " + personneCourante.getPrenom();
992
			intituleAuteur += personneCourante.getNom().toUpperCase() + " " + personneCourante.getPrenom();
982
			if (itAuteurs.hasNext())	{
993
			if (itAuteurs.hasNext())	{
983
				intituleAuteur+=", ";
994
				intituleAuteur+=", ";
984
			}
995
			}
985
		} 
996
		} 
986
		return intituleAuteur;
997
		return intituleAuteur;
987
	}
998
	}
988
	
999
	
989
	private String construireNomComplet() {
1000
	private String construireNomComplet() {
990
		// Intitulé de la publication complet : fmt_auteur, date_parution(année). titre. Editeur (nom), collection, fascicule, indication_nvt. pages.
1001
		// Intitulé de la publication complet : fmt_auteur, date_parution(année). titre. Editeur (nom), collection, fascicule, indication_nvt. pages.
991
		String nomComplet = "";
1002
		String nomComplet = "";
992
		String auteurs = construireIntituleAuteur();
1003
		String auteurs = construireIntituleAuteur();
993
		String annee = datePublicationChp.getRawValue();
1004
		String annee = datePublicationChp.getRawValue();
994
		String titre = titreChp.getValue();
1005
		String titre = titreChp.getValue();
995
		String editeur = construireIntituleEditeur();
1006
		String editeur = construireIntituleEditeur();
996
		
1007
		
997
		nomComplet += auteurs+", "+annee+". "+titre+".";
1008
		nomComplet += auteurs+", "+annee+". "+titre+".";
998
		
1009
		
999
		if (!UtilString.isEmpty(editeur)) {
1010
		if (!UtilString.isEmpty(editeur)) {
1000
			nomComplet += " Éditeur "+editeur+".";
1011
			nomComplet += " Éditeur "+editeur+".";
1001
		}
1012
		}
1002
		
1013
		
1003
		if (collectionChp.getValue() != null) {
1014
		if (collectionChp.getValue() != null) {
1004
			String revue = collectionChp.getValue();
1015
			String revue = collectionChp.getValue();
1005
			nomComplet += ", "+revue;
1016
			nomComplet += ", "+revue;
1006
		}
1017
		}
1007
		
1018
		
1008
		if (fasciculeChp.getValue() != null) {
1019
		if (fasciculeChp.getValue() != null) {
1009
			String fascicule = fasciculeChp.getValue();
1020
			String fascicule = fasciculeChp.getValue();
1010
			nomComplet += ", "+fascicule;
1021
			nomComplet += ", "+fascicule;
1011
		}
1022
		}
1012
		
1023
		
1013
		if (tomeChp.getValue() != null) {
1024
		if (tomeChp.getValue() != null) {
1014
			String tomaison = tomeChp.getValue();
1025
			String tomaison = tomeChp.getValue();
1015
			nomComplet += ", "+tomaison;
1026
			nomComplet += ", "+tomaison;
1016
		}
1027
		}
1017
		
1028
		
1018
		if (collectionChp.getValue() != null || fasciculeChp.getValue() != null || tomeChp.getValue() != null) {
1029
		if (collectionChp.getValue() != null || fasciculeChp.getValue() != null || tomeChp.getValue() != null) {
1019
			nomComplet += ".";	
1030
			nomComplet += ".";	
1020
		}
1031
		}
1021
		
1032
		
1022
		if (pagesChp.getValue() != null) {
1033
		if (pagesChp.getValue() != null) {
1023
			String pages = pagesChp.getValue();
1034
			String pages = pagesChp.getValue();
1024
			nomComplet += pages+".";
1035
			nomComplet += pages+".";
1025
		}
1036
		}
1026
		
1037
		
1027
		return nomComplet;
1038
		return nomComplet;
1028
	}
1039
	}
1029
	
1040
	
1030
	public void reinitialiserFormulaire() {
1041
	public void reinitialiserFormulaire() {
1031
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
1042
		if (mode.equals(Formulaire.MODE_MODIFIER)) {
1032
			mediateur.afficherFormPublication(publication.getId());
1043
			mediateur.afficherFormPublication(publication.getId());
1033
		} else {
1044
		} else {
1034
			mediateur.afficherFormPublication(null);
1045
			mediateur.afficherFormPublication(null);
1035
		}
1046
		}
1036
	}
1047
	}
1037
	
1048
	
1038
	private boolean etreDateValide(String anneePublication) {
1049
	private boolean etreDateValide(String anneePublication) {
1039
		boolean valide = true;
1050
		boolean valide = true;
1040
		if (!anneePublication.matches("^[0-2][0-9]{3}$")) {
1051
		if (!anneePublication.matches("^[0-2][0-9]{3}$")) {
1041
			valide = false;
1052
			valide = false;
1042
		}
1053
		}
1043
		return valide;
1054
		return valide;
1044
	}
1055
	}
1045
	
1056
	
1046
	private String reduireDateParAnnee(String datePar) {
1057
	private String reduireDateParAnnee(String datePar) {
1047
		if (datePar.matches("^[0-2][0-9]{3}(-[0-9]{2}){2}$")) {
1058
		if (datePar.matches("^[0-2][0-9]{3}(-[0-9]{2}){2}$")) {
1048
			return datePar.split("-")[0];
1059
			return datePar.split("-")[0];
1049
		} else {
1060
		} else {
1050
			return "";
1061
			return "";
1051
		}
1062
		}
1052
	}
1063
	}
1053
	
1064
	
1054
	 //---------------------------//
1065
	 //---------------------------//
1055
	//    Méthodes publiques     //------------------------------------------------------------
1066
	//    Méthodes publiques     //------------------------------------------------------------
1056
	
1067
	
1057
	public boolean verifierFormulaire() {
1068
	public boolean verifierFormulaire() {
1058
		boolean valide = true;
1069
		boolean valide = true;
1059
		ArrayList<String> messages = new ArrayList<String>();
1070
		ArrayList<String> messages = new ArrayList<String>();
1060
		
1071
		
1061
		// Tester si au moins un auteur est présent
1072
		// Tester si au moins un auteur est présent
1062
		if (grilleAuteurs.getStore().getModels().size() == 0) {
1073
		if (grilleAuteurs.getStore().getModels().size() == 0) {
1063
			messages.add("Veuillez saisir au moins un auteur.");
1074
			messages.add("Veuillez saisir au moins un auteur.");
1064
		}
1075
		}
1065
		
1076
		
1066
		String titre = titreChp.getValue();
1077
		String titre = titreChp.getValue();
1067
		if (titre == null || titre.equals("")) {
1078
		if (titre == null || titre.equals("")) {
1068
			messages.add("Veuillez saisir le titre de la publication !");
1079
			messages.add("Veuillez saisir le titre de la publication !");
1069
		}
1080
		}
1070
		
1081
		
1071
		String uri = uriChp.getValue();
1082
		String uri = uriChp.getValue();
1072
		if (uri != null && ! uri.isEmpty() && ! uri.matches(Pattern.url)) {
1083
		if (uri != null && ! uri.isEmpty() && ! uri.matches(Pattern.url)) {
1073
			messages.add("L'URL saisie n'est pas valide !");
1084
			messages.add("L'URL saisie n'est pas valide !");
1074
		}
1085
		}
1075
		
1086
		
1076
		String datePublication = datePublicationChp.getRawValue();
1087
		String datePublication = datePublicationChp.getRawValue();
1077
		if (datePublication == null || datePublication.equals("")) {
1088
		if (datePublication == null || datePublication.equals("")) {
1078
			messages.add("Veuillez saisir une année de parution !");
1089
			messages.add("Veuillez saisir une année de parution !");
1079
		} else {
1090
		} else {
1080
			if (!etreDateValide(datePublication)) {
1091
			if (!etreDateValide(datePublication)) {
1081
				messages.add("Le format de l'année saisie est incorrect !");
1092
				messages.add("Le format de l'année saisie est incorrect !");
1082
			}
1093
			}
1083
		}
1094
		}
1084
		
1095
		
1085
		String pages = pagesChp.getValue();
1096
		String pages = pagesChp.getValue();
1086
		String valeurPage = "(?:[0-9]+|[IVXLCDM]+|\\?)";
1097
		String valeurPage = "(?:[0-9]+|[IVXLCDM]+|\\?)";
1087
		if (pages != null && ! pages.matches("^(?:"+valeurPage+"|"+valeurPage+"-"+valeurPage+")$")) {
1098
		if (pages != null && ! pages.matches("^(?:"+valeurPage+"|"+valeurPage+"-"+valeurPage+")$")) {
1088
			messages.add("Le format des pages est incorrect !");
1099
			messages.add("Le format des pages est incorrect !");
1089
		}
1100
		}
1090
		
1101
		
1091
		if (messages.size() != 0) {
1102
		if (messages.size() != 0) {
1092
			String[] tableauDeMessages = {};
1103
			String[] tableauDeMessages = {};
1093
			tableauDeMessages = messages.toArray(tableauDeMessages);
1104
			tableauDeMessages = messages.toArray(tableauDeMessages);
1094
			MessageBox.alert("Erreurs de saisies", UtilArray.implode(tableauDeMessages, "<br />"), null);
1105
			MessageBox.alert("Erreurs de saisies", UtilArray.implode(tableauDeMessages, "<br />"), null);
1095
			valide = false;
1106
			valide = false;
1096
		}
1107
		}
1097
		return valide;		
1108
		return valide;		
1098
	}
1109
	}
1099
	
1110
	
1100
	
1111
	
1101
	 //-------------------//
1112
	 //-------------------//
1102
	//    Accesseurs     //------------------------------------------------------------
1113
	//    Accesseurs     //------------------------------------------------------------
1103
	
1114
	
1104
	private String getValeurComboProjets() {
1115
	private String getValeurComboProjets() {
1105
		String valeur = "";
1116
		String valeur = "";
1106
		if (projetsCombo.getValeur() != null) {
1117
		if (projetsCombo.getValeur() != null) {
1107
			Projet projet = new Projet(projetsCombo.getValeur());
1118
			Projet projet = new Projet(projetsCombo.getValeur());
1108
			valeur = projet.getId();
1119
			valeur = projet.getId();
1109
		}
1120
		}
1110
		return valeur;
1121
		return valeur;
1111
	}
1122
	}
1112
	private void setValeurComboProjets() {
1123
	private void setValeurComboProjets() {
1113
		if (projetsCombo.getStore() != null ) {
-
 
1114
			if (mode.equals(Formulaire.MODE_MODIFIER) && publication != null) {
1124
		if (mode.equals(Formulaire.MODE_MODIFIER) && publication != null) {
-
 
1125
			if (projetsCombo.getCombo().getStore() != null
-
 
1126
					&& publication != null
-
 
1127
					&& publication.getIdProjet() != null
-
 
1128
					&& !UtilString.isEmpty(publication.getIdProjet())) {
1115
				projetsCombo.getCombo().setValue(projetsCombo.getStore().findModel("cpr_id_projet", publication.getIdProjet()));
1129
				projetsCombo.chargerValeurInitiale(publication.getIdProjet(), "cpr_id_projet");
-
 
1130
			}
1116
			} else if (mode.equals(Formulaire.MODE_AJOUTER)) {
1131
		} else if (mode.equals(Formulaire.MODE_AJOUTER)) {
1117
				projetsCombo.getCombo().setValue(projetsCombo.getStore().findModel("cpr_id_projet", mediateur.getProjetId()));
1132
			projetsCombo.getCombo().setValue(projetsCombo.getStore().findModel("cpr_id_projet", mediateur.getProjetId()));
1118
			}
1133
		} else {
-
 
1134
			projetsCombo.getCombo().setValue(null);
1119
		}
1135
		}
1120
	}
1136
	}
1121
	
1137
	
1122
	 //-------------------//
1138
	 //-------------------//
1123
	//    Rafraichir     //------------------------------------------------------------
1139
	//    Rafraichir     //------------------------------------------------------------
1124
	
1140
	
1125
	public void rafraichir(Object nouvellesDonnees) {
1141
	public void rafraichir(Object nouvellesDonnees) {
1126
		if (nouvellesDonnees instanceof Publication) {
1142
		if (nouvellesDonnees instanceof Publication) {
1127
			publication = (Publication) nouvellesDonnees;
1143
			publication = (Publication) nouvellesDonnees;
1128
		} else if (nouvellesDonnees instanceof PublicationAPersonneListe) {
-
 
1129
			rafraichirListeAuteurs((PublicationAPersonneListe) nouvellesDonnees);
-
 
1130
		} else if (nouvellesDonnees instanceof Information) {
1144
		} else if (nouvellesDonnees instanceof Information) {
1131
			rafraichirInformation((Information) nouvellesDonnees);
1145
			rafraichirInformation((Information) nouvellesDonnees);
1132
		} else {
1146
		} else {
1133
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
1147
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
1134
		}
1148
		}
1135
	}
1149
	}
1136
	
-
 
1137
	private void rafraichirListeAuteurs(PublicationAPersonneListe auteurs) {
-
 
1138
		Iterator<String> it = auteurs.keySet().iterator();
-
 
1139
		while (it.hasNext()) {
-
 
1140
			PublicationAPersonne auteur = auteurs.get(it.next());
-
 
1141
			auteur.set("_etat_", aDonnee.ETAT_MODIFIE);
-
 
1142
			auteursInitialListe.put(auteur.getId(), auteur);
-
 
1143
		}
-
 
1144
		
-
 
1145
		grilleAuteurs.getStore().removeAll();
-
 
1146
		grilleAuteurs.getStore().add(auteursInitialListe.toList());
-
 
1147
		grilleAuteurs.getStore().sort("ordre", SortDir.ASC);
-
 
1148
		layout();
-
 
1149
	}
-
 
1150
	
1150
	
1151
	private void rafraichirInformation(Information info) {
-
 
-
 
1151
	private void rafraichirInformation(Information info) {
1152
		String type = info.getType();
1152
		
1153
		
1153
		String type = info.getType();
1154
		if (type.equals("auteurs_enregistres")) {
1154
		if (type.equals("auteurs_enregistres")) {
1155
			miseAJourAuteursInitialListe();
1155
			miseAJourAuteursInitialListe();
1156
			initialiserAuteurs();
1156
			initialiserAuteurs();
1157
			repandreRafraichissement();
1157
			repandreRafraichissement();
1158
			controlerFermeture();
1158
			controlerFermeture();
1159
		} else if (type.equals("chargement_modifier_ok"))	{
1159
		} else if (type.equals("chargement_modifier_ok"))	{
1160
			peuplerFormulaire();
1160
			peuplerFormulaire();
1161
			genererTitreFormulaire();
1161
			genererTitreFormulaire();
1162
		}
1162
		}
1163
 
1163
 
1164
		if (type.equals("personne_ajoutee")) {
1164
		if (type.equals("personne_ajoutee")) {
1165
			if (info.getDonnee(0) != null) {
1165
			if (info.getDonnee(0) != null) {
1166
				Personne personne = (Personne) info.getDonnee(0);
1166
				Personne personne = (Personne) info.getDonnee(0);
1167
				PublicationAPersonne pap = new PublicationAPersonne();
1167
				PublicationAPersonne pap = new PublicationAPersonne();
1168
				pap.setPersonne(personne);
1168
				pap.setPersonne(personne);
1169
				if (modeDeCreation != Formulaire.MODE_AJOUTER) pap.setPublicationLiee(publication);
1169
				if (modeDeCreation != Formulaire.MODE_AJOUTER) pap.setPublicationLiee(publication);
1170
				ajouterDansGrille(pap);
1170
				ajouterDansGrille(pap);
1171
			}
1171
			}
1172
		} else if (type.equals("personne_modifiee")) {
1172
		} else if (type.equals("personne_modifiee")) {
1173
			if (info.getDonnee(0) != null) {
1173
			if (info.getDonnee(0) != null) {
1174
				
1174
				
1175
				// créer la nouvelle entrée
1175
				// créer la nouvelle entrée
1176
				Personne personne = (Personne) info.getDonnee(0);
1176
				Personne personne = (Personne) info.getDonnee(0);
1177
				PublicationAPersonne pap = new PublicationAPersonne();
1177
				PublicationAPersonne pap = new PublicationAPersonne();
1178
				pap.setPersonne(personne);
1178
				pap.setPersonne(personne);
1179
				if (modeDeCreation != Formulaire.MODE_AJOUTER) pap.setPublicationLiee(publication);
1179
				if (modeDeCreation != Formulaire.MODE_AJOUTER) pap.setPublicationLiee(publication);
1180
				
1180
				
1181
				// supprimer l'entrée précédente
1181
				// supprimer l'entrée précédente
1182
				PublicationAPersonne personneDansGrille = grilleAuteurs.getStore().findModel("id_personne", personne.getId());
1182
				PublicationAPersonne personneDansGrille = new PublicationAPersonne(grilleAuteurs.getStore().findModel("cp_id_personne", personne.getId()), false);
1183
				int index = grilleAuteurs.getStore().indexOf(personneDansGrille);
1183
				int index = grilleAuteurs.getStore().indexOf(personneDansGrille);
1184
				grilleAuteurs.getStore().remove(personneDansGrille);
1184
				grilleAuteurs.getStore().remove(personneDansGrille);
1185
				
1185
				
1186
				// ajouter la nouvelle entrée dans la grille
1186
				// ajouter la nouvelle entrée dans la grille
1187
				ajouterDansGrille(pap, index);
1187
				ajouterDansGrille(pap, index);
1188
			}
1188
			}
1189
		} else if (info.getType().equals("modif_publication")) {
1189
		} else if (info.getType().equals("modif_publication")) {
1190
			InfoLogger.display("Modification d'une publication", info.toString());
1190
			InfoLogger.display("Modification d'une publication", info.toString());
1191
			soumettreAuteurs();
1191
			soumettreAuteurs();
1192
		} else if (info.getType().equals("ajout_publication")) {
1192
		} else if (info.getType().equals("ajout_publication")) {
1193
			if (info.getDonnee(0) != null && info.getDonnee(0) instanceof String && ((String) info.getDonnee(0)).matches("[0-9]+")) {
1193
			if (info.getDonnee(0) != null && info.getDonnee(0) instanceof String && ((String) info.getDonnee(0)).matches("[0-9]+")) {
1194
				String idPublication = (String) info.getDonnee(0);
1194
				String idPublication = (String) info.getDonnee(0);
1195
				this.publicationId = idPublication;
1195
				this.publicationId = idPublication;
1196
				this.publication.setId(idPublication);				
1196
				this.publication.setId(idPublication);				
1197
				soumettreAuteurs();
1197
				soumettreAuteurs();
1198
				InfoLogger.display("Ajout d'une publication", "La publication '"+publicationId+"' a bien été ajoutée");
1198
				InfoLogger.display("Ajout d'une publication", "La publication '"+publicationId+"' a bien été ajoutée");
1199
			} else {
1199
			} else {
1200
				InfoLogger.display("Ajout d'une publication", info.toString());
1200
				InfoLogger.display("Ajout d'une publication", info.toString());
1201
			}
1201
			}
1202
		}	
1202
		}		
1203
	}
1203
	}
1204
	
1204
	
1205
	private void repandreRafraichissement() {
1205
	private void repandreRafraichissement() {
1206
		if (vueExterneARafraichirApresValidation != null) {
1206
		if (vueExterneARafraichirApresValidation != null) {
1207
			String type = "publication_modifiee";
1207
			String type = "publication_modifiee";
1208
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
1208
			if (mode.equals(Formulaire.MODE_AJOUTER)) {
1209
				type = "publication_ajoutee";
1209
				type = "publication_ajoutee";
1210
			}
1210
			}
1211
			Information info = new Information(type);
1211
			Information info = new Information(type);
1212
			info.setDonnee(0, publication);
1212
			info.setDonnee(0, publication);
1213
			vueExterneARafraichirApresValidation.rafraichir(info);
1213
			vueExterneARafraichirApresValidation.rafraichir(info);
1214
		}
1214
		}
1215
	}
1215
	}
1216
	
1216
	
1217
}
1217
}