Subversion Repositories eFlore/Applications.coel

Rev

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

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