Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 1645 Rev 1680
1
package org.tela_botanica.client.vues.publication;
1
package org.tela_botanica.client.vues.publication;
2
 
2
 
3
import java.util.ArrayList;
3
import java.util.ArrayList;
4
import java.util.Iterator;
4
import java.util.Iterator;
5
import java.util.List;
5
import java.util.List;
6
 
6
 
7
import org.tela_botanica.client.Mediateur;
7
import org.tela_botanica.client.Mediateur;
8
import org.tela_botanica.client.RegistreId;
8
import org.tela_botanica.client.RegistreId;
9
import org.tela_botanica.client.composants.ChampFiltreRecherche;
9
import org.tela_botanica.client.composants.ChampFiltreRecherche;
10
import org.tela_botanica.client.composants.InfoLogger;
10
import org.tela_botanica.client.composants.InfoLogger;
11
import org.tela_botanica.client.i18n.Constantes;
11
import org.tela_botanica.client.i18n.Constantes;
12
import org.tela_botanica.client.images.Images;
12
import org.tela_botanica.client.images.Images;
13
import org.tela_botanica.client.interfaces.Rafraichissable;
13
import org.tela_botanica.client.interfaces.Rafraichissable;
14
import org.tela_botanica.client.modeles.Information;
14
import org.tela_botanica.client.modeles.Information;
15
import org.tela_botanica.client.modeles.Utilisateur;
15
import org.tela_botanica.client.modeles.Utilisateur;
16
import org.tela_botanica.client.modeles.publication.Publication;
16
import org.tela_botanica.client.modeles.publication.Publication;
17
import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;
17
import org.tela_botanica.client.modeles.publication.PublicationAPersonneListe;
18
import org.tela_botanica.client.modeles.publication.PublicationListe;
18
import org.tela_botanica.client.modeles.publication.PublicationListe;
19
import org.tela_botanica.client.modeles.structure.StructureListe;
19
import org.tela_botanica.client.modeles.structure.StructureListe;
20
import org.tela_botanica.client.util.Debug;
20
import org.tela_botanica.client.util.Debug;
21
import org.tela_botanica.client.vues.BarrePaginationVue;
21
import org.tela_botanica.client.vues.BarrePaginationVue;
22
 
22
 
23
import com.extjs.gxt.ui.client.Registry;
23
import com.extjs.gxt.ui.client.Registry;
24
import com.extjs.gxt.ui.client.Style.SortDir;
24
import com.extjs.gxt.ui.client.Style.SortDir;
25
import com.extjs.gxt.ui.client.event.BaseEvent;
25
import com.extjs.gxt.ui.client.event.BaseEvent;
26
import com.extjs.gxt.ui.client.event.ButtonEvent;
26
import com.extjs.gxt.ui.client.event.ButtonEvent;
27
import com.extjs.gxt.ui.client.event.Events;
27
import com.extjs.gxt.ui.client.event.Events;
28
import com.extjs.gxt.ui.client.event.Listener;
28
import com.extjs.gxt.ui.client.event.Listener;
29
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
29
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
30
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
30
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
31
import com.extjs.gxt.ui.client.event.SelectionListener;
31
import com.extjs.gxt.ui.client.event.SelectionListener;
32
import com.extjs.gxt.ui.client.store.ListStore;
32
import com.extjs.gxt.ui.client.store.ListStore;
33
import com.extjs.gxt.ui.client.widget.ContentPanel;
33
import com.extjs.gxt.ui.client.widget.ContentPanel;
34
import com.extjs.gxt.ui.client.widget.button.Button;
34
import com.extjs.gxt.ui.client.widget.button.Button;
35
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
35
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
36
import com.extjs.gxt.ui.client.widget.grid.ColumnData;
36
import com.extjs.gxt.ui.client.widget.grid.ColumnData;
37
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
37
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
38
import com.extjs.gxt.ui.client.widget.grid.Grid;
38
import com.extjs.gxt.ui.client.widget.grid.Grid;
39
import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
39
import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
40
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
40
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel;
41
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
41
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
42
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
42
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
43
import com.google.gwt.core.client.GWT;
43
import com.google.gwt.core.client.GWT;
44
 
44
 
45
public class PublicationListeVue extends ContentPanel implements Rafraichissable {
45
public class PublicationListeVue extends ContentPanel implements Rafraichissable {
46
 
46
 
47
	private Mediateur mediateur = null;
47
	private Mediateur mediateur = null;
48
	private Constantes i18nC = null;
48
	private Constantes i18nC = null;
49
 
49
 
50
	private Grid<Publication> grille = null;
50
	private Grid<Publication> grille = null;
51
	private ListStore<Publication> store = null;
51
	private ListStore<Publication> store = null;
52
	private ColumnModel modeleDesColonnes = null;
52
	private ColumnModel modeleDesColonnes = null;
53
 
53
 
54
	private Button ajouter;
54
	private Button ajouter;
55
	private Button modifier;
55
	private Button modifier;
56
	private Button supprimer;
56
	private Button supprimer;
57
	
57
	
58
	private ChampFiltreRecherche champFiltreRecherche = null;
58
	private ChampFiltreRecherche champFiltreRecherche = null;
59
	private BarrePaginationVue pagination = null;
59
	private BarrePaginationVue pagination = null;
60
	
60
	
61
	private int indexElementSelectionne = 0;
61
	private int indexElementSelectionne = 0;
62
	private Publication publicationSelectionnee = null;
62
	private Publication publicationSelectionnee = null;
63
	
63
	
64
	public PublicationListeVue(Mediateur mediateurCourant) {
64
	public PublicationListeVue(Mediateur mediateurCourant) {
65
		mediateur = mediateurCourant;
65
		mediateur = mediateurCourant;
66
		i18nC = Mediateur.i18nC;
66
		i18nC = Mediateur.i18nC;
67
		
67
		
68
		setLayout(new FitLayout());
68
		setLayout(new FitLayout());
69
		setHeading(i18nC.menuPublication());
69
		setHeadingHtml(i18nC.menuPublication());
70
		
70
		
71
		// Gestion de la barre d'outil
71
		// Gestion de la barre d'outil
72
		ToolBar toolBar = new ToolBar();
72
		ToolBar toolBar = new ToolBar();
73
		ajouter = new Button(i18nC.ajouter());
73
		ajouter = new Button(i18nC.ajouter());
74
		ajouter.setIcon(Images.ICONES.ajouter());
74
		ajouter.setIcon(Images.ICONES.ajouter());
75
		ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {  
75
		ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {  
76
			public void componentSelected(ButtonEvent be) {  
76
			public void componentSelected(ButtonEvent be) {  
77
				mediateur.clicAjouterPublication();
77
				mediateur.clicAjouterPublication();
78
			}  
78
			}  
79
		});
79
		});
80
		ajouter.setToolTip(i18nC.indicationCreerUneFiche()+" "+i18nC.publicationSingulier());
80
		ajouter.setToolTip(i18nC.indicationCreerUneFiche()+" "+i18nC.publicationSingulier());
81
		toolBar.add(ajouter);
81
		toolBar.add(ajouter);
82
 
82
 
83
		modifier = new Button(i18nC.modifier());
83
		modifier = new Button(i18nC.modifier());
84
		modifier.setIcon(Images.ICONES.formModifier());
84
		modifier.setIcon(Images.ICONES.formModifier());
85
		modifier.addSelectionListener(new SelectionListener<ButtonEvent>() {  
85
		modifier.addSelectionListener(new SelectionListener<ButtonEvent>() {  
86
			public void componentSelected(ButtonEvent be) { 
86
			public void componentSelected(ButtonEvent be) { 
87
				mediateur.clicModifierPublication(grille.getSelectionModel().getSelectedItems());
87
				mediateur.clicModifierPublication(grille.getSelectionModel().getSelectedItems());
88
			}  
88
			}  
89
		});
89
		});
90
		modifier.setToolTip(i18nC.indicationModifierUneFiche());
90
		modifier.setToolTip(i18nC.indicationModifierUneFiche());
91
		toolBar.add(modifier);
91
		toolBar.add(modifier);
92
		
92
		
93
		supprimer = new Button(i18nC.supprimer());
93
		supprimer = new Button(i18nC.supprimer());
94
		supprimer.setIcon(Images.ICONES.supprimer());
94
		supprimer.setIcon(Images.ICONES.supprimer());
95
		supprimer.addSelectionListener(new SelectionListener<ButtonEvent>() {  
95
		supprimer.addSelectionListener(new SelectionListener<ButtonEvent>() {  
96
			public void componentSelected(ButtonEvent be) { 
96
			public void componentSelected(ButtonEvent be) { 
97
				mediateur.clicSupprimerPublication(grille.getSelectionModel().getSelectedItems());
97
				mediateur.clicSupprimerPublication(grille.getSelectionModel().getSelectedItems());
98
			}  
98
			}  
99
		});
99
		});
100
		supprimer.setToolTip(i18nC.indicationSupprimerUneFiche());
100
		supprimer.setToolTip(i18nC.indicationSupprimerUneFiche());
101
		toolBar.add(supprimer);
101
		toolBar.add(supprimer);
102
		setTopComponent(toolBar);
102
		setTopComponent(toolBar);
103
 
103
 
104
		// Gestion de la grille
104
		// Gestion de la grille
105
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
105
		List<ColumnConfig> colonnes = new ArrayList<ColumnConfig>();
106
		// ATTENTION : les noms des colonnes doivent correspondre aux noms variables de la classe utilisée dans la liste
106
		// ATTENTION : les noms des colonnes doivent correspondre aux noms variables de la classe utilisée dans la liste
107
		colonnes.add(new ColumnConfig("fmt_auteur", i18nC.publicationAuteurs(), 200));
107
		colonnes.add(new ColumnConfig("fmt_auteur", i18nC.publicationAuteurs(), 200));
108
		colonnes.add(new ColumnConfig("titre", i18nC.publicationTitre(), 150));
108
		colonnes.add(new ColumnConfig("titre", i18nC.publicationTitre(), 150));
109
		colonnes.add(new ColumnConfig("collection", i18nC.publicationRevueCollection(), 110));
109
		colonnes.add(new ColumnConfig("collection", i18nC.publicationRevueCollection(), 110));
110
		colonnes.add(creerColonneEditeur());
110
		colonnes.add(creerColonneEditeur());
111
		colonnes.add(creerColonneAnneePublication());
111
		colonnes.add(creerColonneAnneePublication());
112
		colonnes.add(new ColumnConfig("indication_nvt", i18nC.publicationNvt(), 35));
112
		colonnes.add(new ColumnConfig("indication_nvt", i18nC.publicationNvt(), 35));
113
		colonnes.add(new ColumnConfig("fascicule", i18nC.publicationFascicule(), 35));
113
		colonnes.add(new ColumnConfig("fascicule", i18nC.publicationFascicule(), 35));
114
		colonnes.add(new ColumnConfig("truk_pages", i18nC.publicationPage(), 35));
114
		colonnes.add(new ColumnConfig("truk_pages", i18nC.publicationPage(), 35));
115
		modeleDesColonnes = new ColumnModel(colonnes);
115
		modeleDesColonnes = new ColumnModel(colonnes);
116
 
116
 
117
		GridSelectionModel<Publication> modeleDeSelection = new GridSelectionModel<Publication>();
117
		GridSelectionModel<Publication> modeleDeSelection = new GridSelectionModel<Publication>();
118
		modeleDeSelection.addSelectionChangedListener(new SelectionChangedListener<Publication>() {
118
		modeleDeSelection.addSelectionChangedListener(new SelectionChangedListener<Publication>() {
119
			public void selectionChanged(SelectionChangedEvent<Publication> event) {
119
			public void selectionChanged(SelectionChangedEvent<Publication> event) {
120
				publicationSelectionnee = (Publication) event.getSelectedItem();
120
				publicationSelectionnee = (Publication) event.getSelectedItem();
121
				indexElementSelectionne = store.indexOf(publicationSelectionnee);
121
				indexElementSelectionne = store.indexOf(publicationSelectionnee);
122
				clicListe(publicationSelectionnee);
122
				clicListe(publicationSelectionnee);
123
			}
123
			}
124
		});
124
		});
125
		
125
		
126
		store = new ListStore<Publication>();
126
		store = new ListStore<Publication>();
127
		store.sort("titre", SortDir.ASC);
127
		store.sort("titre", SortDir.ASC);
128
		
128
		
129
		grille = new Grid<Publication>(store, modeleDesColonnes);
129
		grille = new Grid<Publication>(store, modeleDesColonnes);
130
		grille.setWidth("100%");
130
		grille.setWidth("100%");
131
		grille.setAutoExpandColumn("titre");
131
		grille.setAutoExpandColumn("titre");
132
		grille.getView().setAutoFill(true);
132
		grille.getView().setAutoFill(true);
133
		grille.getView().setForceFit(true);
133
		grille.getView().setForceFit(true);
134
		grille.setSelectionModel(modeleDeSelection);
134
		grille.setSelectionModel(modeleDeSelection);
135
		grille.addListener(Events.ViewReady, new Listener<BaseEvent>() {
135
		grille.addListener(Events.ViewReady, new Listener<BaseEvent>() {
136
			public void handleEvent(BaseEvent be) {
136
			public void handleEvent(BaseEvent be) {
137
				grille.getSelectionModel().select(0, false);
137
				grille.getSelectionModel().select(0, false);
138
			}
138
			}
139
		});
139
		});
140
		grille.addListener(Events.OnDoubleClick, new Listener<BaseEvent>(){
140
		grille.addListener(Events.OnDoubleClick, new Listener<BaseEvent>(){
141
			public void handleEvent(BaseEvent be) {
141
			public void handleEvent(BaseEvent be) {
142
				modifier.fireEvent(Events.Select);
142
				modifier.fireEvent(Events.Select);
143
			}
143
			}
144
		});
144
		});
145
		add(grille);
145
		add(grille);
146
		
146
		
147
		PublicationListe publicationListe = new PublicationListe();
147
		PublicationListe publicationListe = new PublicationListe();
148
		champFiltreRecherche = new ChampFiltreRecherche(mediateurCourant, toolBar, publicationListe);
148
		champFiltreRecherche = new ChampFiltreRecherche(mediateurCourant, toolBar, publicationListe);
149
		// Définition de la barre de pagination
149
		// Définition de la barre de pagination
150
		pagination = new BarrePaginationVue(publicationListe, mediateur);
150
		pagination = new BarrePaginationVue(publicationListe, mediateur);
151
		setBottomComponent(pagination);
151
		setBottomComponent(pagination);
152
	}
152
	}
153
	
153
	
154
	private ColumnConfig creerColonneEditeur() {
154
	private ColumnConfig creerColonneEditeur() {
155
		GridCellRenderer<Publication> editeurRendu = new GridCellRenderer<Publication>() {
155
		GridCellRenderer<Publication> editeurRendu = new GridCellRenderer<Publication>() {
156
			public String render(Publication model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<Publication> store, Grid<Publication> grid) {
156
			public String render(Publication model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<Publication> store, Grid<Publication> grid) {
157
				String editeur = model.getNomEditeur();
157
				String editeur = model.getNomEditeur();
158
				model.set("_editeur_", editeur);
158
				model.set("_editeur_", editeur);
159
				return editeur;
159
				return editeur;
160
			}
160
			}
161
		};
161
		};
162
		ColumnConfig editeurColonne = new ColumnConfig("_editeur_", i18nC.publicationEditeur(), 135);
162
		ColumnConfig editeurColonne = new ColumnConfig("_editeur_", i18nC.publicationEditeur(), 135);
163
		editeurColonne.setRenderer(editeurRendu);
163
		editeurColonne.setRenderer(editeurRendu);
164
		return editeurColonne;
164
		return editeurColonne;
165
	}
165
	}
166
	
166
	
167
	private ColumnConfig creerColonneAnneePublication() {
167
	private ColumnConfig creerColonneAnneePublication() {
168
		GridCellRenderer<Publication> datePublicationRendu = new GridCellRenderer<Publication>() {
168
		GridCellRenderer<Publication> datePublicationRendu = new GridCellRenderer<Publication>() {
169
			public String render(Publication model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<Publication> store, Grid<Publication> grid) {
169
			public String render(Publication model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<Publication> store, Grid<Publication> grid) {
170
				String annee = model.getAnneeParution();
170
				String annee = model.getAnneeParution();
171
				model.set("_annee_", annee);
171
				model.set("_annee_", annee);
172
				return annee;
172
				return annee;
173
			}
173
			}
174
		};
174
		};
175
		ColumnConfig datePublicationColonne = new ColumnConfig("_annee_", i18nC.publicationDateParution(), 75);
175
		ColumnConfig datePublicationColonne = new ColumnConfig("_annee_", i18nC.publicationDateParution(), 75);
176
		datePublicationColonne.setRenderer(datePublicationRendu);
176
		datePublicationColonne.setRenderer(datePublicationRendu);
177
		return datePublicationColonne;
177
		return datePublicationColonne;
178
	}
178
	}
179
	
179
	
180
	private void clicListe(Publication publication) {
180
	private void clicListe(Publication publication) {
181
		if (publication != null && store.getCount() > 0) {
181
		if (publication != null && store.getCount() > 0) {
182
			mediateur.clicListePublication(publication);
182
			mediateur.clicListePublication(publication);
183
		}
183
		}
184
	}
184
	}
185
 
185
 
186
	private void gererEtatActivationBouton() {
186
	private void gererEtatActivationBouton() {
187
		int nbreElementDuMagazin = store.getCount();
187
		int nbreElementDuMagazin = store.getCount();
188
		ajouter.enable();
188
		ajouter.enable();
189
		if (nbreElementDuMagazin <= 0) {
189
		if (nbreElementDuMagazin <= 0) {
190
			supprimer.disable();
190
			supprimer.disable();
191
			modifier.disable();
191
			modifier.disable();
192
		} else if (nbreElementDuMagazin > 0) {
192
		} else if (nbreElementDuMagazin > 0) {
193
			modifier.enable();
193
			modifier.enable();
194
			if (((Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT)).isIdentifie()) {
194
			if (((Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT)).isIdentifie()) {
195
				supprimer.enable();
195
				supprimer.enable();
196
			}
196
			}
197
		}
197
		}
198
	}
198
	}
199
	
199
	
200
	public void rafraichir(Object nouvellesDonnees) {		
200
	public void rafraichir(Object nouvellesDonnees) {		
201
		if (nouvellesDonnees instanceof PublicationListe) {
201
		if (nouvellesDonnees instanceof PublicationListe) {
202
			PublicationListe publications = (PublicationListe) nouvellesDonnees;
202
			PublicationListe publications = (PublicationListe) nouvellesDonnees;
203
			
203
			
204
			champFiltreRecherche.setListePaginable(publications);
204
			champFiltreRecherche.setListePaginable(publications);
205
			pagination.setlistePaginable(publications);
205
			pagination.setlistePaginable(publications);
206
			pagination.rafraichir(publications.getPageTable());
206
			pagination.rafraichir(publications.getPageTable());
207
			
207
			
208
			if (publications != null) {
208
			if (publications != null) {
209
				List<Publication> liste = publications.toList();
209
				List<Publication> liste = publications.toList();
210
				store.removeAll();
210
				store.removeAll();
211
				store.add(liste);
211
				store.add(liste);
212
				
212
				
213
				mediateur.actualiserPanneauCentral();
213
				mediateur.actualiserPanneauCentral();
214
			}
214
			}
215
		} else if (nouvellesDonnees instanceof Information) {
215
		} else if (nouvellesDonnees instanceof Information) {
216
			Information info = (Information) nouvellesDonnees;
216
			Information info = (Information) nouvellesDonnees;
217
			if (info.getType().equals("maj_utilisateur")) {
217
			if (info.getType().equals("maj_utilisateur")) {
218
				gererEtatActivationBouton();
218
				gererEtatActivationBouton();
219
			} else if (info.getType().equals("publication_modifiee")) {
219
			} else if (info.getType().equals("publication_modifiee")) {
220
				if(publicationSelectionnee != null) {
220
				if(publicationSelectionnee != null) {
221
					
221
					
222
					store.remove(indexElementSelectionne);
222
					store.remove(indexElementSelectionne);
223
					publicationSelectionnee = null;
223
					publicationSelectionnee = null;
224
				}
224
				}
225
				Publication publiModifee = (Publication)info.getDonnee(0);
225
				Publication publiModifee = (Publication)info.getDonnee(0);
226
				// au cas ou le bouton appliquer aurait été cliqué avant de valider
226
				// au cas ou le bouton appliquer aurait été cliqué avant de valider
227
				store.remove(publiModifee);
227
				store.remove(publiModifee);
228
				store.insert(publiModifee, indexElementSelectionne);				
228
				store.insert(publiModifee, indexElementSelectionne);				
229
				publicationSelectionnee = publiModifee;
229
				publicationSelectionnee = publiModifee;
230
				int indexElementSelectionne = store.indexOf(publicationSelectionnee);
230
				int indexElementSelectionne = store.indexOf(publicationSelectionnee);
231
				grille.getSelectionModel().select(indexElementSelectionne, false);
231
				grille.getSelectionModel().select(indexElementSelectionne, false);
232
				grille.getView().focusRow(indexElementSelectionne);
232
				grille.getView().focusRow(indexElementSelectionne);
233
				clicListe(publicationSelectionnee);
233
				clicListe(publicationSelectionnee);
234
			} else if (info.getType().equals("suppression_publication")) {
234
			} else if (info.getType().equals("suppression_publication")) {
235
				InfoLogger.display(i18nC.publicationTitreSuppression(), info.getMessages().toString());
235
				InfoLogger.display(i18nC.publicationTitreSuppression(), info.getMessages().toString());
236
				supprimerPublicationsSelectionnees();
236
				supprimerPublicationsSelectionnees();
237
				gererEtatActivationBouton();
237
				gererEtatActivationBouton();
238
			}
238
			}
239
		} else {
239
		} else {
240
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
240
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
241
		}
241
		}
242
		
242
		
243
		layout();
243
		layout();
244
	}
244
	}
245
 
245
 
246
	private void supprimerPublicationsSelectionnees() {
246
	private void supprimerPublicationsSelectionnees() {
247
		List<Publication> publicationsSelectionnees = grille.getSelectionModel().getSelectedItems();
247
		List<Publication> publicationsSelectionnees = grille.getSelectionModel().getSelectedItems();
248
		Iterator<Publication> it = publicationsSelectionnees.iterator();
248
		Iterator<Publication> it = publicationsSelectionnees.iterator();
249
		while (it.hasNext()) {
249
		while (it.hasNext()) {
250
			grille.getStore().remove(it.next());
250
			grille.getStore().remove(it.next());
251
		}
251
		}
252
		layout(true);
252
		layout(true);
253
	}
253
	}
254
	
254
	
255
}
255
}