Subversion Repositories eFlore/Applications.coel

Rev

Rev 1661 | Rev 1764 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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