Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 1468 Rev 1613
1
package org.tela_botanica.client.vues.accueil;
1
package org.tela_botanica.client.vues.accueil;
2
 
2
 
3
import java.util.ArrayList;
3
import java.util.ArrayList;
4
import java.util.HashMap;
4
import java.util.HashMap;
5
import java.util.Iterator;
5
import java.util.Iterator;
6
import java.util.TreeMap;
6
import java.util.TreeMap;
7
 
7
 
8
import org.tela_botanica.client.Mediateur;
8
import org.tela_botanica.client.Mediateur;
9
import org.tela_botanica.client.composants.InfoLogger;
9
import org.tela_botanica.client.composants.InfoLogger;
10
import org.tela_botanica.client.i18n.Constantes;
10
import org.tela_botanica.client.i18n.Constantes;
11
import org.tela_botanica.client.images.Images;
11
import org.tela_botanica.client.images.Images;
12
import org.tela_botanica.client.interfaces.Rafraichissable;
12
import org.tela_botanica.client.interfaces.Rafraichissable;
13
import org.tela_botanica.client.modeles.Information;
13
import org.tela_botanica.client.modeles.Information;
14
import org.tela_botanica.client.util.Debug;
14
import org.tela_botanica.client.util.Debug;
15
 
-
 
16
import com.extjs.gxt.ui.client.GXT;
15
 
17
import com.extjs.gxt.ui.client.event.ButtonEvent;
16
import com.extjs.gxt.ui.client.event.ButtonEvent;
18
import com.extjs.gxt.ui.client.event.SelectionListener;
17
import com.extjs.gxt.ui.client.event.SelectionListener;
19
import com.extjs.gxt.ui.client.widget.ContentPanel;
18
import com.extjs.gxt.ui.client.widget.ContentPanel;
20
import com.extjs.gxt.ui.client.widget.Info;
-
 
21
import com.extjs.gxt.ui.client.widget.LayoutContainer;
19
import com.extjs.gxt.ui.client.widget.LayoutContainer;
22
import com.extjs.gxt.ui.client.widget.button.Button;
20
import com.extjs.gxt.ui.client.widget.button.Button;
23
import com.extjs.gxt.ui.client.widget.custom.Portal;
21
import com.extjs.gxt.ui.client.widget.custom.Portal;
24
import com.extjs.gxt.ui.client.widget.custom.Portlet;
22
import com.extjs.gxt.ui.client.widget.custom.Portlet;
25
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
23
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
26
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
24
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
27
import com.google.gwt.xml.client.Document;
25
import com.google.gwt.xml.client.Document;
28
import com.google.gwt.xml.client.Element;
26
import com.google.gwt.xml.client.Element;
29
import com.google.gwt.xml.client.Node;
27
import com.google.gwt.xml.client.Node;
30
import com.google.gwt.xml.client.NodeList;
28
import com.google.gwt.xml.client.NodeList;
31
import com.google.gwt.xml.client.XMLParser;
29
import com.google.gwt.xml.client.XMLParser;
32
 
30
 
33
public class AccueilVue  extends LayoutContainer implements Rafraichissable {
31
public class AccueilVue  extends LayoutContainer implements Rafraichissable {
34
	
32
	
35
	private Mediateur mediateur = null;
33
	private Mediateur mediateur = null;
36
	private Constantes i18nC = null;
34
	private Constantes i18nC = null;
37
	private Portal portail = null;
35
	private Portal portail = null;
38
	private static boolean enregistrementEnCours = false;
36
	private static boolean enregistrementEnCours = false;
39
	
37
	
40
	public AccueilVue(Mediateur mediateurCourant) {
38
	public AccueilVue(Mediateur mediateurCourant) {
41
		mediateur = mediateurCourant;
39
		mediateur = mediateurCourant;
42
		i18nC = Mediateur.i18nC;
40
		i18nC = Mediateur.i18nC;
43
		setLayout(new FitLayout());
41
		setLayout(new FitLayout());
44
		
42
		
45
		ContentPanel panneauPrincipal = new ContentPanel();
43
		ContentPanel panneauPrincipal = new ContentPanel();
46
		panneauPrincipal.setLayout(new FitLayout());
44
		panneauPrincipal.setLayout(new FitLayout());
47
		panneauPrincipal.setHeading("Accueil");
45
		panneauPrincipal.setHeading("Accueil");
48
		panneauPrincipal.setBorders(false);
46
		panneauPrincipal.setBorders(false);
49
		
47
		
50
		ToolBar barreOutils = new ToolBar();
48
		ToolBar barreOutils = new ToolBar();
51
		Button ajouter = new Button(i18nC.ajouter());
49
		Button ajouter = new Button(i18nC.ajouter());
52
		ajouter.setIcon(Images.ICONES.ajouter());
50
		ajouter.setIcon(Images.ICONES.ajouter());
53
		ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {  
51
		ajouter.addSelectionListener(new SelectionListener<ButtonEvent>() {  
54
			public void componentSelected(ButtonEvent be) {  
52
			public void componentSelected(ButtonEvent be) {  
55
				ajouterPortlet();
53
				ajouterPortlet();
56
			}  
54
			}  
57
		});
55
		});
58
		barreOutils.add(ajouter);
56
		barreOutils.add(ajouter);
59
		
57
		
60
		Button enregistrer = new Button("Enregistrer");
58
		Button enregistrer = new Button("Enregistrer");
61
		enregistrer.setIcon(Images.ICONES.appliquer());
59
		enregistrer.setIcon(Images.ICONES.appliquer());
62
		enregistrer.addSelectionListener(new SelectionListener<ButtonEvent>() {  
60
		enregistrer.addSelectionListener(new SelectionListener<ButtonEvent>() {  
63
			public void componentSelected(ButtonEvent be) {  
61
			public void componentSelected(ButtonEvent be) {  
64
				if (enregistrementEnCours == false) {
62
				if (enregistrementEnCours == false) {
65
					enregistrerParametres();
63
					enregistrerParametres();
66
				} else {
64
				} else {
67
					InfoLogger.display(i18nC.accueilEnregistrement(), i18nC.accueilEnregistrementEnCours());
65
					InfoLogger.display(i18nC.accueilEnregistrement(), i18nC.accueilEnregistrementEnCours());
68
				}
66
				}
69
			}  
67
			}  
70
		});
68
		});
71
		barreOutils.add(enregistrer);
69
		barreOutils.add(enregistrer);
72
		
70
		
73
		panneauPrincipal.setTopComponent(barreOutils);
71
		panneauPrincipal.setTopComponent(barreOutils);
74
		
72
		
75
		portail = creerPortail();
73
		portail = creerPortail();
76
		panneauPrincipal.add(portail);
74
		panneauPrincipal.add(portail);
77
		
75
				
78
		chargerParametres();
-
 
79
 
-
 
80
		add(panneauPrincipal);
76
		add(panneauPrincipal);
81
		mediateur.desactiverChargement(this);
77
		mediateur.desactiverChargement(this);
82
	}
78
	}
83
	
79
	
84
	private Portal creerPortail() {
80
	private Portal creerPortail() {
85
		Portal portail  = new Portal(3);
81
		Portal portail  = new Portal(3);
86
		portail.setBorders(true);
82
		portail.setBorders(true);
87
		portail.setStyleAttribute("backgroundColor", "white");
83
		portail.setStyleAttribute("backgroundColor", "white");
88
		portail.setShadow(true);
84
		portail.setShadow(true);
89
		portail.setColumnWidth(0, .33);
85
		portail.setColumnWidth(0, .33);
90
		portail.setColumnWidth(1, .33);
86
		portail.setColumnWidth(1, .33);
91
		portail.setColumnWidth(2, .33);
87
		portail.setColumnWidth(2, .33);
92
		return portail;
88
		return portail;
93
	}
89
	}
94
	
90
	
95
	// INFO: Les items d'une classse portal correspondent aux colonnes. Pour vider une Portal, il faut donc vider les éléments de chaque item du Portal.
91
	// INFO: Les items d'une classse portal correspondent aux colonnes. Pour vider une Portal, il faut donc vider les éléments de chaque item du Portal.
96
	private void viderPortail() {
92
	private void viderPortail() {
97
		portail.getItem(0).removeAll();
93
		portail.getItem(0).removeAll();
98
		portail.getItem(1).removeAll();
94
		portail.getItem(1).removeAll();
99
		portail.getItem(2).removeAll();
95
		portail.getItem(2).removeAll();
100
	}
96
	}
101
	
97
	
102
	private void chargerParametres() {	
98
	private void chargerParametres() {	
103
		viderPortail();
99
		viderPortail();
104
		
-
 
105
		Document paramXml = XMLParser.parse(mediateur.getUtilisateur().getParametre());
100
		Document paramXml = XMLParser.parse(mediateur.getUtilisateur().getParametre());
106
		NodeList listeAccueilNoeud = paramXml.getElementsByTagName("accueil");
101
		NodeList listeAccueilNoeud = paramXml.getElementsByTagName("accueil");
107
		int nbreAccueilNoeud = listeAccueilNoeud.getLength();
102
		int nbreAccueilNoeud = listeAccueilNoeud.getLength();
108
 
103
 
109
		// Récupération du noeud accueil
104
		// Récupération du noeud accueil
110
		Node accueilNoeud = null;
105
		Node accueilNoeud = null;
111
		if (nbreAccueilNoeud == 0) {		
106
		if (nbreAccueilNoeud == 0) {		
112
			ajouterPortlet();
107
			ajouterPortletsDefaut();
113
		} else if (nbreAccueilNoeud == 1) {
108
		} else if (nbreAccueilNoeud == 1) {
114
			accueilNoeud = listeAccueilNoeud.item(0);
109
			accueilNoeud = listeAccueilNoeud.item(0);
115
			
-
 
116
			// Lecture des noeuds "applette"
-
 
117
			NodeList listeAppletteNoeud = accueilNoeud.getChildNodes();
110
			NodeList listeAppletteNoeud = accueilNoeud.getChildNodes();
-
 
111
			// un noeud de type vide indique que l'utilisateur a explicité effacé les applettes de la page d'accueil
-
 
112
			if(listeAppletteNoeud.getLength() > 0 && !listeAppletteNoeud.item(0).getNodeName().equals("vide")) {		
-
 
113
				// Lecture des noeuds "applette"
118
			int nbreAppletteNoeud = listeAppletteNoeud.getLength();
114
				int nbreAppletteNoeud = listeAppletteNoeud.getLength();
119
			TreeMap<String, HashMap<String, String>> tableApplettes = new TreeMap<String, HashMap<String, String>>(); 				
115
				TreeMap<String, HashMap<String, String>> tableApplettes = new TreeMap<String, HashMap<String, String>>(); 				
120
			for (int i = 0; i < nbreAppletteNoeud ; i++) {
116
				for (int i = 0; i < nbreAppletteNoeud ; i++) {
121
				Element appletteNoeud = (Element) listeAppletteNoeud.item(i);
117
					Element appletteNoeud = (Element) listeAppletteNoeud.item(i);
122
				int colonne = Integer.parseInt(appletteNoeud.getAttribute("colonne"));
118
					int colonne = Integer.parseInt(appletteNoeud.getAttribute("colonne"));
123
				int index = Integer.parseInt(appletteNoeud.getAttribute("index"));
119
					int index = Integer.parseInt(appletteNoeud.getAttribute("index"));
124
				HashMap<String, String> infoApplette = new HashMap<String, String>();
120
					HashMap<String, String> infoApplette = new HashMap<String, String>();
125
				infoApplette.put("reduite", appletteNoeud.getAttribute("reduite"));
121
					infoApplette.put("reduite", appletteNoeud.getAttribute("reduite"));
126
				infoApplette.put("epingle", appletteNoeud.getAttribute("epingle"));
122
					infoApplette.put("epingle", appletteNoeud.getAttribute("epingle"));
127
				infoApplette.put("type", appletteNoeud.getAttribute("type"));
123
					infoApplette.put("type", appletteNoeud.getAttribute("type"));
128
				infoApplette.put("colonne", appletteNoeud.getAttribute("colonne"));
124
					infoApplette.put("colonne", appletteNoeud.getAttribute("colonne"));
129
				infoApplette.put("index", appletteNoeud.getAttribute("index"));
125
					infoApplette.put("index", appletteNoeud.getAttribute("index"));
130
				infoApplette.put("contenu", appletteNoeud.getAttribute("contenu"));
126
					infoApplette.put("contenu", appletteNoeud.getAttribute("contenu"));
131
				tableApplettes.put(colonne+"-"+index, infoApplette);
127
					tableApplettes.put(colonne+"-"+index, infoApplette);
132
			}
128
				}
133
			Iterator<String> it = tableApplettes.keySet().iterator();
129
				Iterator<String> it = tableApplettes.keySet().iterator();
134
			while (it.hasNext()) {
130
				while (it.hasNext()) {
135
				String id = it.next();
131
					String id = it.next();
136
				HashMap<String, String> infoApplette = tableApplettes.get(id);
132
					HashMap<String, String> infoApplette = tableApplettes.get(id);
137
				boolean reduite = (infoApplette.get("reduite") != null && infoApplette.get("reduite").equals("true")) ? true : false;
133
					boolean reduite = (infoApplette.get("reduite") != null && infoApplette.get("reduite").equals("true")) ? true : false;
138
				boolean epingle = (infoApplette.get("epingle") != null && infoApplette.get("epingle").equals("true")) ? true : false;
134
					boolean epingle = (infoApplette.get("epingle") != null && infoApplette.get("epingle").equals("true")) ? true : false;
139
				int index = Integer.parseInt(infoApplette.get("index"));
135
					int index = Integer.parseInt(infoApplette.get("index"));
140
				int colonne = Integer.parseInt(infoApplette.get("colonne"));			
136
					int colonne = Integer.parseInt(infoApplette.get("colonne"));			
141
				ajouterPortlet(reduite, epingle, infoApplette.get("type"), colonne, index, infoApplette.get("contenu"));				
137
					ajouterPortlet(reduite, epingle, infoApplette.get("type"), colonne, index, infoApplette.get("contenu"));				
-
 
138
				}
-
 
139
			} else if(listeAppletteNoeud.getLength() == 0) {
-
 
140
				ajouterPortletsDefaut();
142
			}
141
			}
143
		}
142
		}
144
		layout();		
143
		layout();		
145
	}
144
	}
146
	
145
	
147
	private void enregistrerParametres() {
146
	private void enregistrerParametres() {
148
		ArrayList<Portlet> applettes = getPortlets();
147
		ArrayList<Portlet> applettes = getPortlets();
149
		
148
		
150
		Iterator<Portlet>  it = applettes.iterator();
149
		Iterator<Portlet>  it = applettes.iterator();
151
		
150
		
152
		Document paramXml = XMLParser.parse(mediateur.getUtilisateur().getParametre());
151
		Document paramXml = XMLParser.parse(mediateur.getUtilisateur().getParametre());
153
		NodeList listeAccueilNoeud = paramXml.getElementsByTagName("accueil");
152
		NodeList listeAccueilNoeud = paramXml.getElementsByTagName("accueil");
154
		int nbreAccueilNoeud = listeAccueilNoeud.getLength();
153
		int nbreAccueilNoeud = listeAccueilNoeud.getLength();
155
 
154
 
156
		// Suppression des noeuds "accueil" existant car il ne devrait y en avoir qu'un
155
		// Suppression des noeuds "accueil" existant car il ne devrait y en avoir qu'un
157
		if (nbreAccueilNoeud > 1) {
156
		if (nbreAccueilNoeud > 1) {
158
			for (int i = 0; i < nbreAccueilNoeud ; i++) {
157
			for (int i = 0; i < nbreAccueilNoeud ; i++) {
159
				paramXml.getDocumentElement().removeChild(listeAccueilNoeud.item(i));
158
				paramXml.getDocumentElement().removeChild(listeAccueilNoeud.item(i));
160
			}
159
			}
161
			nbreAccueilNoeud = 0;
160
			nbreAccueilNoeud = 0;
162
		}
161
		}
163
		
162
		
164
		// Création du nouveau noeud accueil
163
		// Création du nouveau noeud accueil
165
		Node accueilNoeud = null;
164
		Node accueilNoeud = null;
166
		Element accueilElement = paramXml.createElement("accueil");
165
		Element accueilElement = paramXml.createElement("accueil");
167
		if (nbreAccueilNoeud == 0) {
166
		if (nbreAccueilNoeud == 0) {
168
			accueilNoeud = paramXml.getDocumentElement().appendChild(accueilElement);
167
			accueilNoeud = paramXml.getDocumentElement().appendChild(accueilElement);
169
		} else if (nbreAccueilNoeud == 1) {
168
		} else if (nbreAccueilNoeud == 1) {
170
			accueilNoeud = listeAccueilNoeud.item(0);
169
			accueilNoeud = listeAccueilNoeud.item(0);
171
			paramXml.getDocumentElement().replaceChild(accueilElement, accueilNoeud);
170
			paramXml.getDocumentElement().replaceChild(accueilElement, accueilNoeud);
172
			accueilNoeud = paramXml.getElementsByTagName("accueil").item(0);
171
			accueilNoeud = paramXml.getElementsByTagName("accueil").item(0);
173
		}
172
		}
-
 
173
		
-
 
174
		// si il existe des applettes ouvertes
174
		
175
		if(it.hasNext()) {
175
		// Ajout des noeuds "applette" au noeud "accueil"
176
			// Ajout des noeuds "applette" au noeud "accueil"
176
		while (it.hasNext()) {
177
			while (it.hasNext()) {
177
			Portlet applette = it.next();
178
				Portlet applette = it.next();
178
			String reduite = (applette.isCollapsed() ? "true" : "false");
179
				String reduite = (applette.isCollapsed() ? "true" : "false");
179
			String epingle = (applette.isPinned() ? "true" : "false");
180
				String epingle = (applette.isPinned() ? "true" : "false");
180
			String index = Integer.toString(portail.getPortletIndex(applette));
181
				String index = Integer.toString(portail.getPortletIndex(applette));
181
			String colonne = Integer.toString(portail.getPortletColumn(applette));
182
				String colonne = Integer.toString(portail.getPortletColumn(applette));
182
			String contenu = applette.getData("contenu");
183
				String contenu = applette.getData("contenu");
183
			
184
				
184
			Element appletteElement = paramXml.createElement("applette");
185
				Element appletteElement = paramXml.createElement("applette");
185
			appletteElement.setAttribute("reduite", reduite);
186
				appletteElement.setAttribute("reduite", reduite);
186
			appletteElement.setAttribute("epingle", epingle);
187
				appletteElement.setAttribute("epingle", epingle);
187
			appletteElement.setAttribute("type", "statistique");
188
				appletteElement.setAttribute("type", "statistique");
188
			appletteElement.setAttribute("colonne", colonne);
189
				appletteElement.setAttribute("colonne", colonne);
189
			appletteElement.setAttribute("index", index);
190
				appletteElement.setAttribute("index", index);
190
			appletteElement.setAttribute("contenu", contenu);
191
				appletteElement.setAttribute("contenu", contenu);
191
			
192
				
-
 
193
				accueilNoeud.appendChild(appletteElement);
-
 
194
			}
-
 
195
		} else {
-
 
196
			// sinon ajout d'un noeud vide
-
 
197
			Element videElement = paramXml.createElement("vide");
192
			accueilNoeud.appendChild(appletteElement);
198
			accueilNoeud.appendChild(videElement);
193
		}
199
		}
194
		
200
		
195
		enregistrementEnCours = true;
201
		enregistrementEnCours = true;
196
		mediateur.getUtilisateur().setParametre(paramXml.toString());
202
		mediateur.getUtilisateur().setParametre(paramXml.toString());
197
		mediateur.modifierUtilisateur();
203
		mediateur.modifierUtilisateur();
198
	}
204
	}
199
	
205
	
200
	private ArrayList<Portlet> getPortlets() {
206
	private ArrayList<Portlet> getPortlets() {
201
		ArrayList<Portlet> applettes = new ArrayList<Portlet>();
207
		ArrayList<Portlet> applettes = new ArrayList<Portlet>();
202
		for (int i = 0; i < 3; i++) {
208
		for (int i = 0; i < 3; i++) {
203
			int nbreApplette = portail.getItem(i).getItemCount();
209
			int nbreApplette = portail.getItem(i).getItemCount();
204
			if (nbreApplette > 0) {
210
			if (nbreApplette > 0) {
205
				for (int j = 0; j < nbreApplette; j++) {
211
				for (int j = 0; j < nbreApplette; j++) {
206
					applettes.add((Portlet) portail.getItem(i).getItem(j));
212
					applettes.add((Portlet) portail.getItem(i).getItem(j));
207
				}
213
				}
208
			}
214
			}
209
		}
215
		}
210
		return applettes;
216
		return applettes;
211
	}
217
	}
212
	
218
	
213
	private void ajouterPortlet() {
219
	private void ajouterPortlet() {
214
		ajouterPortlet(false, false, "statistique", 0, 0, null);
220
		ajouterPortlet(false, false, "statistique", 0, 0, null);
215
	}
221
	}
216
	
222
	
217
	private void ajouterPortlet(boolean reduite, boolean epingle, String type, int colonne, int index, String contenu) {
223
	private void ajouterPortlet(boolean reduite, boolean epingle, String type, int colonne, int index, String contenu) {
218
		Applette applette = null;
224
		Applette applette = null;
219
		if (type.equals("statistique")) {		
225
		if (type.equals("statistique")) {		
220
			applette = new AppletteStatistique(mediateur, contenu);
226
			applette = new AppletteStatistique(mediateur, contenu);
221
		}
227
		}
222
		if (reduite) {
228
		if (reduite) {
223
			applette.collapse();
229
			applette.collapse();
224
		}
230
		}
225
		portail.insert(applette, index, colonne);		
231
		portail.insert(applette, index, colonne);		
226
		applette.setEpingler(epingle);	
232
		applette.setEpingler(epingle);	
227
		layout();
233
		layout();
-
 
234
	}
-
 
235
	
-
 
236
	private void ajouterPortletsDefaut() {
-
 
237
		//TODO créer une énum des différents types de portlet puis faire une boucle
-
 
238
		// dessus
-
 
239
		Applette applette = new AppletteStatistique(mediateur, "NombreDonnees");
-
 
240
		portail.insert(applette, 0, 0);		
-
 
241
		applette.setEpingler(true);	
-
 
242
		
-
 
243
		applette = new AppletteStatistique(mediateur, "MesDonnees");
-
 
244
		portail.insert(applette, 0, 1);	
-
 
245
		
-
 
246
		applette = new AppletteStatistique(mediateur, "TypeDepot");
-
 
247
		portail.insert(applette, 0, 2);	
-
 
248
		
-
 
249
		applette = new AppletteStatistique(mediateur, "NombreCollectionParStructure");
-
 
250
		portail.insert(applette, 1, 0);	
-
 
251
		layout();
228
	}
252
	}
229
	
253
	
230
	public void rafraichir(Object nouvellesDonnees) {	
254
	public void rafraichir(Object nouvellesDonnees) {	
231
		if (nouvellesDonnees instanceof Information) {
255
		if (nouvellesDonnees instanceof Information) {
232
			Information info = (Information) nouvellesDonnees;
256
			Information info = (Information) nouvellesDonnees;
233
			String type = info.getType(); 
257
			String type = info.getType(); 
234
			if (type.equals("maj_utilisateur")) {
258
			if (type.equals("maj_utilisateur")) {
235
				if (enregistrementEnCours == true) {
259
				if (enregistrementEnCours == true) {
236
					enregistrementEnCours = false;
260
					enregistrementEnCours = false;
237
					InfoLogger.display(i18nC.accueilEnregistrement(), i18nC.accueilEnregistrementSucces());
261
					InfoLogger.display(i18nC.accueilEnregistrement(), i18nC.accueilEnregistrementSucces());
238
				} else {
262
				} else {
239
					chargerParametres();
263
					chargerParametres();
240
					InfoLogger.display(i18nC.accueil(), i18nC.accueilChargementSucces());
264
					InfoLogger.display(i18nC.accueil(), i18nC.accueilChargementSucces());
241
				}
265
				}
242
			}
266
			}
243
		} else {
267
		} else {
244
			Debug.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()));
268
			Debug.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()));
245
		}
269
		}
246
	}
270
	}
247
}
271
}