View Javadoc

1   /*
2    *
3    * Created on Oct 16, 2006, 2:03 PM
4    */
5   
6   package gov.bnl.gums.service;
7   
8   import gov.bnl.gums.account.*;
9   import gov.bnl.gums.configuration.Configuration;
10  import gov.bnl.gums.groupToAccount.*;
11  import gov.bnl.gums.hostToGroup.*;
12  import gov.bnl.gums.persistence.*;
13  import gov.bnl.gums.userGroup.*;
14  
15  import javax.servlet.http.HttpServletRequest;
16  
17  import java.rmi.Remote;
18  import java.util.Collection;
19  import java.util.Iterator;
20  import java.util.Properties;
21  
22  /** 
23   * Toolkit for providing configuration functionality for the web pages.
24   * @author Jay Packard
25   */
26  public class ConfigurationWebToolkit implements Remote {
27  	static public CertificateHostToGroupMapping parseHostToGroupMapping(HttpServletRequest request) throws Exception {
28  		CertificateHostToGroupMapping hostToGroupMapping = new CertificateHostToGroupMapping();
29  		String type = request.getParameter("hg_type").trim();
30  		if(type.equals("dn"))
31  			hostToGroupMapping.setDn( request.getParameter("name").trim() );
32  		else
33  			hostToGroupMapping.setCn( request.getParameter("name").trim() );			
34  		if (request.getParameter("description")!=null)	
35  			hostToGroupMapping.setDescription( request.getParameter("description").trim() );
36  		int counter = 0;
37  		while(request.getParameter("g2AM" + counter)!=null) {
38  			String g2AMName = request.getParameter("g2AM" + counter).trim();
39  			if (!g2AMName.equals(""))
40  				hostToGroupMapping.addGroupToAccountMapping(g2AMName);
41  			counter++;
42  		}
43  
44  		return hostToGroupMapping;
45  	}	
46  
47  	static public GroupToAccountMapping parseGroupToAccountMapping(HttpServletRequest request) throws Exception {
48  		GroupToAccountMapping groupToAccountMapping = new GroupToAccountMapping();
49  
50  		groupToAccountMapping.setName( request.getParameter("name").trim() );
51  		if (request.getParameter("description")!=null)
52  			groupToAccountMapping.setDescription( request.getParameter("description").trim() );
53  
54  		int counter = 0;
55  		while(request.getParameter("aM" + counter)!=null) {
56  			String accountMapperName = request.getParameter("aM" + counter).trim();
57  			if (!accountMapperName.equals(""))
58  				groupToAccountMapping.addAccountMapper(accountMapperName);
59  			counter++;
60  		}
61  
62  		counter = 0;
63  		while(request.getParameter("uG" + counter)!=null) {
64  			String userGroupName = request.getParameter("uG" + counter).trim();
65  			if (!userGroupName.equals(""))
66  				groupToAccountMapping.addUserGroup(userGroupName);
67  			counter++;
68  		}
69  
70  		if (request.getParameter("accVoSub")!=null && !request.getParameter("accVoSub").equals("")) {
71  			String trimmed = request.getParameter("accVoSub").trim();
72  			if (trimmed.indexOf(" ")!=-1)
73  				throw new RuntimeException("There cannot be a space in the accounting VO Subgroup");
74  			if (request.getParameter("accVo").equals(""))
75  				throw new RuntimeException("You must specify neither or both accounting VO subgroup and account VO");
76  			groupToAccountMapping.setAccountingVoSubgroup(trimmed);
77  
78  		}
79  
80  		if (request.getParameter("accVo")!=null && !request.getParameter("accVo").equals("")) {
81  			String trimmed = request.getParameter("accVo").trim();
82  			if (trimmed.indexOf(" ")!=-1)
83  				throw new RuntimeException("There cannot be a space in the accounting VO");
84  			if (request.getParameter("accVoSub").equals(""))
85  				throw new RuntimeException("You must specify neither or both accounting VO subgroup and account VO");
86  			groupToAccountMapping.setAccountingVo(trimmed);
87  
88  		}
89  
90  		return groupToAccountMapping;
91  	}		
92  
93  	static public AccountMapper parseAccountMapper(HttpServletRequest request) throws Exception {
94  		AccountMapper accountMapper = null;
95  
96  		String type = request.getParameter("am_type").trim();
97  
98  		if (type.equals(GroupAccountMapper.getTypeStatic())) {
99  			accountMapper = new GroupAccountMapper();
100 			accountMapper.setName( request.getParameter("name").trim() );
101 			if (request.getParameter("description")!=null)
102 				accountMapper.setDescription( request.getParameter("description").trim() );
103 			if (request.getParameter("accountName")!=null)
104 				((GroupAccountMapper)accountMapper).setAccountName( request.getParameter("accountName").trim() );
105 		}
106 		else if (type.equals(ManualAccountMapper.getTypeStatic())) {
107 			accountMapper = new ManualAccountMapper();
108 			accountMapper.setName( request.getParameter("name").trim() );
109 			if (request.getParameter("description")!=null)
110 				accountMapper.setDescription( request.getParameter("description").trim() );
111 			if (request.getParameter("persistenceFactory")!=null)
112 				((ManualAccountMapper)accountMapper).setPersistenceFactory( request.getParameter("persistenceFactory").trim() );
113 		}
114 		else if (type.equals(AccountPoolMapper.getTypeStatic())) {
115 			accountMapper = new AccountPoolMapper();
116 			accountMapper.setName( request.getParameter("name").trim() );
117 			if (request.getParameter("description")!=null)
118 				accountMapper.setDescription( request.getParameter("description").trim() );
119 			if (request.getParameter("accountPool")!=null)
120 				((AccountPoolMapper)accountMapper).setAccountPool( request.getParameter("accountPool").trim() );
121 			if (request.getParameter("persistenceFactory")!=null)
122 				((AccountPoolMapper)accountMapper).setPersistenceFactory( request.getParameter("persistenceFactory").trim() );
123 		}
124 		else if (type.equals(GecosLdapAccountMapper.getTypeStatic())) {
125 			accountMapper = new GecosLdapAccountMapper();
126 			accountMapper.setName( request.getParameter("name").trim() );
127 			if (request.getParameter("description")!=null)
128 				accountMapper.setDescription( request.getParameter("description").trim() );
129 			if (request.getParameter("serviceUrl")!=null)
130 				((GecosLdapAccountMapper)accountMapper).setJndiLdapUrl( request.getParameter("serviceUrl").trim() );
131 			if (request.getParameter("gecos")!=null)
132 				((GecosLdapAccountMapper)accountMapper).setGecosField( request.getParameter("gecos").trim() );
133 			if (request.getParameter("account")!=null)
134 				((GecosLdapAccountMapper)accountMapper).setAccountField( request.getParameter("account").trim() );
135 			if (request.getParameter("peopleObject")!=null)
136 				((GecosLdapAccountMapper)accountMapper).setPeopleObject( request.getParameter("peopleObject").trim() );
137 		}
138 		else if (type.equals(LdapAccountMapper.getTypeStatic())) {
139 			accountMapper = new LdapAccountMapper();
140 			accountMapper.setName( request.getParameter("name").trim() );
141 			if (request.getParameter("description")!=null)
142 				accountMapper.setDescription( request.getParameter("description").trim() );
143 			if (request.getParameter("serviceUrl")!=null)
144 				((LdapAccountMapper)accountMapper).setJndiLdapUrl( request.getParameter("serviceUrl").trim() );
145 			if (request.getParameter("dn")!=null)
146 				((LdapAccountMapper)accountMapper).setDnField( request.getParameter("dn").trim() );
147 			if (request.getParameter("account")!=null)
148 				((LdapAccountMapper)accountMapper).setAccountField( request.getParameter("account").trim() );
149 			if (request.getParameter("peopleObject")!=null)
150 				((LdapAccountMapper)accountMapper).setPeopleObject( request.getParameter("peopleObject").trim() );
151 		}
152 		else if (type.equals(GecosNisAccountMapper.getTypeStatic())) {
153 			accountMapper = new GecosNisAccountMapper();
154 			accountMapper.setName( request.getParameter("name").trim() );
155 			if (request.getParameter("description")!=null)
156 				accountMapper.setDescription( request.getParameter("description").trim() );
157 			if (request.getParameter("serviceUrl")!=null)
158 				((GecosNisAccountMapper)accountMapper).setJndiNisUrl( request.getParameter("serviceUrl").trim() );
159 			if (request.getParameter("gecos")!=null)
160 				((GecosNisAccountMapper)accountMapper).setGecosField( request.getParameter("gecos").trim() );
161 			if (request.getParameter("account")!=null)
162 				((GecosNisAccountMapper)accountMapper).setAccountField( request.getParameter("account").trim() );
163 		}
164 
165 		return accountMapper;
166 	}		
167 
168 	static public UserGroup parseUserGroup(HttpServletRequest request) throws Exception {
169 		UserGroup userGroup = null;
170 
171 		String type = request.getParameter("ug_type");
172 
173 		if (type.equals(ManualUserGroup.getTypeStatic())) {
174 			userGroup = new ManualUserGroup();
175 			userGroup.setName( request.getParameter("name").trim() );
176 			if (request.getParameter("description")!=null)
177 				userGroup.setDescription( request.getParameter("description").trim() );
178 			if (request.getParameter("access")!=null)
179 				userGroup.setAccess( request.getParameter("access").trim() );
180 			if (request.getParameter("persistenceFactory")!=null)
181 				((ManualUserGroup)userGroup).setPersistenceFactory( request.getParameter("persistenceFactory").trim() );
182 			if (request.getParameter("membersUri")!=null)
183 				((ManualUserGroup)userGroup).setMembersUri( request.getParameter("membersUri").trim() );
184 			if (request.getParameter("nonMembersUri")!=null)
185 				((ManualUserGroup)userGroup).setNonMembersUri( request.getParameter("nonMembersUri").trim() );
186 		} else if (type.equals(LDAPUserGroup.getTypeStatic())) {
187 			userGroup = new LDAPUserGroup();
188 			userGroup.setName( request.getParameter("name").trim() );
189 			if (request.getParameter("description")!=null)
190 				userGroup.setDescription( request.getParameter("description").trim() );
191 			if (request.getParameter("access")!=null)
192 				userGroup.setAccess( request.getParameter("access").trim() );
193 			if (request.getParameter("server")!=null)
194 				((LDAPUserGroup)userGroup).setServer( request.getParameter("server").trim() );
195 			if (request.getParameter("peopleTree")!=null)
196 				((LDAPUserGroup)userGroup).setPeopleTree( request.getParameter("peopleTree").trim() );
197 			if (request.getParameter("groupTree")!=null)
198 				((LDAPUserGroup)userGroup).setGroupTree( request.getParameter("groupTree").trim() );
199 			if (request.getParameter("persistenceFactory")!=null)
200 				((LDAPUserGroup)userGroup).setPersistenceFactory( request.getParameter("persistenceFactory").trim() );
201 			if (request.getParameter("certDNField")!=null)
202 				((LDAPUserGroup)userGroup).setCertDNField( request.getParameter("certDNField").trim() );
203 			if (request.getParameter("memberUidField")!=null)
204 				((LDAPUserGroup)userGroup).setMemberUidField( request.getParameter("memberUidField").trim() );
205 		} else if (type.equals(VOMSUserGroup.getTypeStatic())) {
206 			userGroup = new VOMSUserGroup();
207 			userGroup.setName( request.getParameter("name").trim() );
208 			if (request.getParameter("description")!=null)
209 				userGroup.setDescription( request.getParameter("description").trim() );
210 			if (request.getParameter("access")!=null)
211 				userGroup.setAccess( request.getParameter("access").trim() );
212 			if (request.getParameter("vOrg")!=null)
213 				((VOMSUserGroup)userGroup).setVomsServer( request.getParameter("vOrg").trim() );
214 			else if(request.getParameter("baseUrl")!=null && !request.getParameter("baseUrl").equals(""))
215 				((VOMSUserGroup)userGroup).setVomsServer( request.getParameter("name").trim() );
216 			if (request.getParameter("url")!=null)
217 				((VOMSUserGroup)userGroup).setRemainderUrl( request.getParameter("url").trim() );
218 			if (request.getParameter("nVOMS")!=null)
219 				((VOMSUserGroup)userGroup).setAcceptProxyWithoutFQAN( request.getParameter("nVOMS").trim().equals("true") );
220 			if (request.getParameter("matchFQAN")!=null)
221 				((VOMSUserGroup)userGroup).setMatchFQAN( request.getParameter("matchFQAN") );
222 			if (request.getParameter("vogroup")!=null)
223 				((VOMSUserGroup)userGroup).setVoGroup( request.getParameter("vogroup") );
224 			if (request.getParameter("role")!=null)
225 				((VOMSUserGroup)userGroup).setRole( request.getParameter("role") );
226 		}
227 
228 		return userGroup;
229 	}
230 
231 	static public VomsServer parseVomsServer(HttpServletRequest request) throws Exception {
232 		VomsServer vomsServer = new VomsServer();
233 		vomsServer.setName( request.getParameter("name").trim() );
234 		if (request.getParameter("description")!=null)
235 			vomsServer.setDescription( request.getParameter("description").trim() );
236 		if (request.getParameter("persistenceFactory")!=null)
237 			vomsServer.setPersistenceFactory( request.getParameter("persistenceFactory").trim() );
238 		if (request.getParameter("baseURL")!=null)
239 			vomsServer.setBaseUrl( request.getParameter("baseURL").trim() );
240 		if (request.getParameter("sslKey")!=null)
241 			vomsServer.setSslKey( request.getParameter("sslKey").trim() );
242 		if (request.getParameter("sslCert")!=null)
243 			vomsServer.setSslCertfile( request.getParameter("sslCert").trim() );
244 		if (request.getParameter("sslCA")!=null)
245 			vomsServer.setSslCAFiles( request.getParameter("sslCA").trim() );
246 		if (request.getParameter("sslKeyPW")!=null)
247 			vomsServer.setSslKeyPasswd( request.getParameter("sslKeyPW").trim() );
248 		return vomsServer;
249 	}	
250 
251 	static public PersistenceFactory parsePersistenceFactory(HttpServletRequest request) throws Exception {
252 		PersistenceFactory persistenceFactory = null;
253 
254 		String type = request.getParameter("type");
255 
256 		if (type.equals(HibernatePersistenceFactory.getTypeStatic())) {
257 			persistenceFactory = new HibernatePersistenceFactory();
258 			persistenceFactory.setName( request.getParameter("name").trim() );
259 			if (request.getParameter("description")!=null)
260 				persistenceFactory.setDescription( request.getParameter("description").trim() );
261 			if (request.getParameter("storeConfig")!=null)
262 				persistenceFactory.setStoreConfig( request.getParameter("storeConfig").trim().equals("on") );
263 			((HibernatePersistenceFactory)persistenceFactory).setProperties( getHibernateProperties(persistenceFactory, request, false) );
264 		} 
265 		else if (type.equals(LDAPPersistenceFactory.getTypeStatic())) {
266 			persistenceFactory = new LDAPPersistenceFactory();
267 			persistenceFactory.setName( request.getParameter("name").trim() );
268 			if (request.getParameter("description")!=null)
269 				persistenceFactory.setDescription( request.getParameter("description").trim() );
270 			if (request.getParameter("storeConfig")!=null)
271 				persistenceFactory.setStoreConfig( request.getParameter("storeConfig").trim().equals("on") );
272 			((LDAPPersistenceFactory)persistenceFactory).setSynch( request.getParameter("synch")!=null ? request.getParameter("synch").trim().equals("true") : false );
273 			((LDAPPersistenceFactory)persistenceFactory).setCaCertFile( request.getParameter("caCertFile")!=null ? request.getParameter("caCertFile").trim() : "" );
274 			((LDAPPersistenceFactory)persistenceFactory).setTrustStorePassword( request.getParameter("tsPassword")!=null ? request.getParameter("tsPassword").trim() : "" );
275 			if (request.getParameter("groupTree")!=null)
276 				((LDAPPersistenceFactory)persistenceFactory).setGroupTree( request.getParameter("groupTree") );
277 			if (request.getParameter("peopleTree")!=null)
278 				((LDAPPersistenceFactory)persistenceFactory).setPeopleTree( request.getParameter("peopleTree") );			
279 			if (request.getParameter("gumsTree")!=null)
280 				((LDAPPersistenceFactory)persistenceFactory).setPeopleTree( request.getParameter("gumsTree") );				
281 			if (request.getParameter("gidNumberField")!=null)
282 				((LDAPPersistenceFactory)persistenceFactory).setGroupIdField( request.getParameter("gidNumberField") );
283 			if (request.getParameter("groupCnField")!=null)
284 				((LDAPPersistenceFactory)persistenceFactory).setGroupCnField( request.getParameter("groupCnField") );			
285 			if (request.getParameter("uidField")!=null)
286 				((LDAPPersistenceFactory)persistenceFactory).setUidField( request.getParameter("uidField") );
287 			if (request.getParameter("memberUidField")!=null)
288 				((LDAPPersistenceFactory)persistenceFactory).setMemberUidField( request.getParameter("memberUidField") );
289 			if (request.getParameter("emailField")!=null)
290 				((LDAPPersistenceFactory)persistenceFactory).setEmailField( request.getParameter("emailField") );
291 			((LDAPPersistenceFactory)persistenceFactory).setProperties( getLdapProperties(persistenceFactory, request, false) );
292 		} 
293 		else if (type.equals(LocalPersistenceFactory.getTypeStatic())) {
294 			persistenceFactory = new LocalPersistenceFactory();
295 			persistenceFactory.setName( request.getParameter("name").trim() );
296 			if (request.getParameter("description")!=null)
297 				persistenceFactory.setDescription( request.getParameter("description").trim() );
298 			if (request.getParameter("storeConfig")!=null)
299 				persistenceFactory.setStoreConfig( request.getParameter("storeConfig").trim().equals("on") );
300 			((LocalPersistenceFactory)persistenceFactory).setSynch( request.getParameter("synch")!=null ? request.getParameter("synch").trim().equals("true") : false );
301 			((LocalPersistenceFactory)persistenceFactory).setCaCertFile( request.getParameter("caCertFile")!=null ? request.getParameter("caCertFile").trim() : "" );
302 			((LocalPersistenceFactory)persistenceFactory).setTrustStorePassword( request.getParameter("tsPassword")!=null ? request.getParameter("tsPassword").trim() : "" );
303 			if (request.getParameter("groupTree")!=null)
304 				((LocalPersistenceFactory)persistenceFactory).setGroupTree( request.getParameter("groupTree") );
305 			if (request.getParameter("peopleTree")!=null)
306 				((LocalPersistenceFactory)persistenceFactory).setPeopleTree( request.getParameter("peopleTree") );			
307 			if (request.getParameter("gumsTree")!=null)
308 				((LocalPersistenceFactory)persistenceFactory).setPeopleTree( request.getParameter("gumsTree") );			
309 			if (request.getParameter("gidNumberField")!=null)
310 				((LocalPersistenceFactory)persistenceFactory).setGroupIdField( request.getParameter("gidNumberField") );
311 			if (request.getParameter("groupCnField")!=null)
312 				((LocalPersistenceFactory)persistenceFactory).setGroupCnField( request.getParameter("groupCnField") );			
313 			if (request.getParameter("uidField")!=null)
314 				((LocalPersistenceFactory)persistenceFactory).setUidField( request.getParameter("uidField") );
315 			if (request.getParameter("memberUidField")!=null)
316 				((LocalPersistenceFactory)persistenceFactory).setMemberUidField( request.getParameter("memberUidField") );
317 			if (request.getParameter("emailField")!=null)
318 				((LocalPersistenceFactory)persistenceFactory).setEmailField( request.getParameter("emailField") );
319 			Properties properties = getHibernateProperties(persistenceFactory, request, true);
320 			properties.putAll(getLdapProperties(persistenceFactory, request, true));
321 			((LocalPersistenceFactory)persistenceFactory).setProperties( properties );
322 		}
323 
324 		return persistenceFactory;
325 	}
326 
327 	static public Properties getHibernateProperties(PersistenceFactory persistenceFactory, HttpServletRequest request, boolean includeMySql) {
328 		Properties properties = new Properties();
329 		properties.put((includeMySql?"mysql.":"") + "hibernate.connection.url", (request.getParameter("mySqlUrl")!=null ? request.getParameter("mySqlUrl").trim() : ""));
330 		properties.put((includeMySql?"mysql.":"") + "hibernate.connection.username", (request.getParameter("mySqlUsername")!=null ? request.getParameter("mySqlUsername").trim() : ""));
331 		properties.put((includeMySql?"mysql.":"") + "hibernate.connection.password", (request.getParameter("mySqlPassword")!=null ? request.getParameter("mySqlPassword").trim() : ""));
332 		properties.put((includeMySql?"mysql.":"") + "hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
333 		properties.put((includeMySql?"mysql.":"") + "hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
334 		properties.put((includeMySql?"mysql.":"") + "hibernate.c3p0.min_size", "3");
335 		properties.put((includeMySql?"mysql.":"") + "hibernate.c3p0.max_size", "20");
336 		properties.put((includeMySql?"mysql.":"") + "hibernate.c3p0.timeout", "180");
337 		properties.put((includeMySql?"mysql.":"") + "hibernate.connection.autoReconnect", "true");
338 		return properties;
339 	}
340 
341 	static public Properties getLdapProperties(PersistenceFactory persistenceFactory, HttpServletRequest request, boolean includeLdap) {
342 		Properties properties = new Properties();
343 		properties.put((includeLdap?"ldap.":"") + "java.naming.security.authentication", (request.getParameter("ldapAuthentication")!=null ? request.getParameter("ldapAuthentication").trim() : "simple"));
344 		properties.put((includeLdap?"ldap.":"") + "java.naming.security.principal", (request.getParameter("ldapPrincipal")!=null ? request.getParameter("ldapPrincipal").trim() : ""));
345 		properties.put((includeLdap?"ldap.":"") + "java.naming.security.credentials", (request.getParameter("ldapCredentials")!=null ? request.getParameter("ldapCredentials").trim() : ""));
346 		properties.put((includeLdap?"ldap.":"") + "java.naming.provider.url", (request.getParameter("ldapUrl")!=null ? request.getParameter("ldapUrl").trim() : ""));
347 		properties.put((includeLdap?"ldap.":"") + "java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");
348 		return properties;
349 	}
350 
351 	static public String getHostToGroupReferences(Configuration configuration, String g2AMappingName) {
352 		String retStr = null;
353 		Collection h2GMappings = configuration.getHostToGroupMappings();
354 		Iterator it = h2GMappings.iterator();
355 		while (it.hasNext()) {
356 			HostToGroupMapping h2GMapping = (HostToGroupMapping)it.next();
357 			Iterator it2 = h2GMapping.getGroupToAccountMappings().iterator();
358 			while (it2.hasNext()) {
359 				String thisG2AMapping = (String)it2.next();
360 				if (thisG2AMapping.equals(g2AMappingName)) {
361 					if (retStr==null) 
362 						retStr = "";
363 					retStr += "\"" + h2GMapping.getName() + "\", ";
364 					break;
365 				}
366 			}
367 		}
368 		if(retStr!=null)
369 			retStr = retStr.substring(0, retStr.length()-2);
370 		return retStr;
371 	}
372 
373 	static public String getGroupToAccountMappingReferences(Configuration configuration, String name, String className) {
374 		String retStr = null;
375 		Collection g2AMappings = configuration.getGroupToAccountMappings().values();
376 		Iterator it = g2AMappings.iterator();
377 		while (it.hasNext()) {
378 			GroupToAccountMapping g2AMapping = (GroupToAccountMapping)it.next();
379 			if(className.equals("gov.bnl.gums.account.AccountMapper")) {
380 				Iterator it2 = g2AMapping.getAccountMappers().iterator();
381 				while (it2.hasNext()) {
382 					String thisAccountMapper = (String)it2.next();
383 					if (thisAccountMapper.equals(name)) {
384 						if (retStr==null) 
385 							retStr = "";
386 						retStr += g2AMapping.getName() + ", ";
387 						break;
388 					}
389 				}
390 			}
391 			else if(className.equals("gov.bnl.gums.userGroup.UserGroup")) {
392 				Iterator it2 = g2AMapping.getUserGroups().iterator();
393 				while (it2.hasNext()) {
394 					String thisUserGroup = (String)it2.next();
395 					if (thisUserGroup.equals(name)) {
396 						if (retStr==null) 
397 							retStr = "";
398 						retStr += g2AMapping.getName() + ", ";
399 						break;
400 					}
401 				}
402 			}
403 		}
404 		if(retStr!=null)
405 			retStr = retStr.substring(0, retStr.length()-2);
406 		return retStr;
407 	}
408 
409 	static public String getVOMSUserGroupReferences(Configuration configuration, String vomsServer) {
410 		String retStr = null;
411 		Collection userGroups = configuration.getUserGroups().values();
412 		Iterator it = userGroups.iterator();
413 		while (it.hasNext()) {
414 			UserGroup userGroup = (UserGroup)it.next();
415 			if ( userGroup instanceof VOMSUserGroup && vomsServer.equals( ((VOMSUserGroup)userGroup).getVomsServer() ) ) {
416 				if (retStr==null) 
417 					retStr = "";
418 				retStr += userGroup.getName() + ", ";
419 				break;
420 			}
421 		}
422 		if(retStr!=null)
423 			retStr = retStr.substring(0, retStr.length()-2);
424 		return retStr;
425 	}	
426 
427 	static public String getReferencesForPersistenceFactory(Configuration configuration, String persistenceFactory) {
428 		String retStr = null;
429 		Iterator it;
430 
431 		it = configuration.getVomsServers().values().iterator();
432 		while (it.hasNext()) {
433 			VomsServer vomsServer = (VomsServer)it.next();
434 			if(vomsServer.getPersistenceFactory().equals(persistenceFactory)) {
435 				if (retStr==null) 
436 					retStr = "";
437 				retStr += "VOMS server " + vomsServer.getName() + ", ";
438 			}
439 		}
440 
441 		it = configuration.getUserGroups().values().iterator();
442 		while (it.hasNext()) {
443 			UserGroup userGroup = (UserGroup)it.next();
444 			if (userGroup instanceof LDAPUserGroup) {
445 				if (((LDAPUserGroup)userGroup).getPersistenceFactory().equals(persistenceFactory)) {
446 					if (retStr==null) 
447 						retStr = "";
448 					retStr += "user group " + userGroup.getName() + ", ";
449 				}
450 			} else if (userGroup instanceof ManualUserGroup) {
451 				if (((ManualUserGroup)userGroup).getPersistenceFactory().equals(persistenceFactory)) {
452 					if (retStr==null) 
453 						retStr = "";
454 					retStr += "user group " + userGroup.getName() + ", ";
455 				}
456 			}
457 		}
458 
459 		it = configuration.getAccountMappers().values().iterator();
460 		while (it.hasNext()) {
461 			AccountMapper accountMapper = (AccountMapper)it.next();
462 			if (accountMapper instanceof ManualAccountMapper) {
463 				if (((ManualAccountMapper)accountMapper).getPersistenceFactory().equals(persistenceFactory)) {
464 					if (retStr==null) 
465 						retStr = "";
466 					retStr += "account mapper " + accountMapper.getName() + ", ";
467 				}
468 			} else if (accountMapper instanceof AccountPoolMapper) {
469 				if (((AccountPoolMapper)accountMapper).getPersistenceFactory().equals(persistenceFactory)) {
470 					if (retStr==null) 
471 						retStr = "";
472 					retStr += "account mapper " + accountMapper.getName() + ", ";
473 				}
474 			}
475 		}
476 
477 		if(retStr!=null)
478 			retStr = retStr.substring(0, retStr.length()-2);
479 
480 		return retStr;
481 	}		
482 
483 	static public String createSelectBox(String name, Collection items, String selected, String javascript, boolean includeEmptySlot) {
484 		String retStr = "<select name=\""+name+"\" " + (javascript!=null?javascript:"") + ">";
485 		if (includeEmptySlot)
486 			retStr += "<option " + (selected==null?"selected":"") + "></option>";
487 		Iterator it = items.iterator();
488 		while(it.hasNext())
489 		{
490 			String curName = getName(it.next());
491 			if (curName.equals("_test") || curName.equals("/DC=com/DC=example/OU=Services/CN=example.site.com"))
492 				continue;
493 			if (curName.equals(selected))
494 				retStr += "<option selected>" + curName + "</option>";
495 			else
496 				retStr += "<option>" + curName + "</option>";
497 		}
498 		retStr += "</select> \n";
499 		return retStr;
500 	}
501 
502 	static public String createDoSubmit(Collection items, HttpServletRequest request) {
503 		String str = 
504 			"<script language=\"javascript\">"+
505 			"String.prototype.trim = function() { return this.replace(/^\\s+|\\s+$/g, \"\"); };"+
506 			"document.forms[0].elements['name'].value = document.forms[0].elements['name'].value.trim();"+
507 			"function doSubmit(str) {";
508 
509 		if ("add".equals(request.getParameter("command")) || "add".equals(request.getParameter("originalCommand"))) {
510 			str += "if ( document.forms[0].elements['name'].value == '' ){ alert('First field cannot be empty'); return false; }";
511 
512 			Iterator it = items.iterator();
513 			while(it.hasNext())
514 				str += "if ( document.forms[0].elements['name'].value == '" + getName(it.next()) + "'){ alert('Name already exists - please choose another name'); return false; }";
515 		}
516 
517 		str += 
518 			"document.forms[0].elements['command'].value='save'; return true;"+
519 			"return false;"+
520 			"}"+
521 			"</script>";
522 
523 		return str;
524 	}
525 	
526 	static public String createDoShortcutSubmit(Collection userGroups, Collection accountMappers, Collection g2aMappings, HttpServletRequest request) {
527 		String str = 
528 			"<script language=\"javascript\">"+
529 			"String.prototype.trim = function() { return this.replace(/^\\s+|\\s+$/g, \"\"); };"+
530 			"document.forms[0].elements['name'].value = document.forms[0].elements['name'].value.trim();"+
531 			"function doShortcutSubmit(str) {/*"+request.getParameter("command")+"*/";
532 
533 		str += "if ( document.forms[0].elements['name'].value == '' ){ alert('First field cannot be empty'); return false; }";
534 
535 		Iterator it = userGroups.iterator();
536 		while(it.hasNext())
537 			str += "if ( document.forms[0].elements['name'].value == '" + getName(it.next()) + "'){ alert('User group name already exists - please choose another name'); return false; }";
538 
539 		it = accountMappers.iterator();
540 		while(it.hasNext())
541 			str += "if ( document.forms[0].elements['name'].value == '" + getName(it.next()) + "'){ alert('Account mapper name already exists - please choose another name'); return false; }";
542 
543 		it = g2aMappings.iterator();
544 		while(it.hasNext())
545 			str += "if ( document.forms[0].elements['name'].value == '" + getName(it.next()) + "'){ alert('Group to account mapping name already exists - please choose another name'); return false; }";
546 
547 		str += 
548 			"return true;"+
549 			"}"+
550 			"</script>";
551 
552 		return str;
553 	}	
554 
555 	static private String getName(Object obj) {
556 		if(obj instanceof String)
557 			return (String)obj;
558 		else if(obj instanceof CertificateHostToGroupMapping)
559 			return ((CertificateHostToGroupMapping)obj).getName();
560 		else if(obj instanceof GroupToAccountMapping)
561 			return ((GroupToAccountMapping)obj).getName();
562 		else if(obj instanceof AccountMapper)
563 			return ((AccountMapper)obj).getName();
564 		else if(obj instanceof UserGroup)
565 			return ((UserGroup)obj).getName();
566 		else if(obj instanceof PersistenceFactory)
567 			return ((PersistenceFactory)obj).getName();
568 		else if(obj instanceof VomsServer)
569 			return ((VomsServer)obj).getName();
570 		else
571 			return "";
572 	}
573 
574 	static public String stripVo(String voGroup) {
575 		if(voGroup.length()>0 && voGroup.charAt(0)=='/') {
576 			String subStr = voGroup.substring(1);
577 			int index = subStr.indexOf("/");
578 			if (index!=-1)
579 				return subStr.substring(index+1);
580 		}
581 		return voGroup;
582 	}
583 
584 	static public String stripGroup(String voGroup) {
585 		if(voGroup.length()>0 && voGroup.charAt(0)=='/') {
586 			String subStr = voGroup.substring(1);
587 			int index = subStr.indexOf("/");
588 			if (index!=-1)
589 				return subStr.substring(0, index);
590 		}
591 		return voGroup;
592 	}	
593 }