View Javadoc

1   /*
2    * ConfigurationWebToolkit.java
3    *
4    * Created on Oct 16, 2006, 2:03 PM
5    */
6   
7   package gov.bnl.gums.service;
8   
9   import gov.bnl.gums.account.*;
10  import gov.bnl.gums.configuration.Configuration;
11  import gov.bnl.gums.groupToAccount.*;
12  import gov.bnl.gums.hostToGroup.*;
13  import gov.bnl.gums.persistence.*;
14  import gov.bnl.gums.userGroup.*;
15  
16  import javax.servlet.http.HttpServletRequest;
17  
18  import java.rmi.Remote;
19  import java.util.Collection;
20  import java.util.Iterator;
21  import java.util.Properties;
22  
23  /** 
24   * Toolkit for providing configuration functionality for the web pages.
25   *
26   * @author Jay Packard
27   */
28  public class ConfigurationWebToolkit implements Remote {
29  	static public CertificateHostToGroupMapping parseHostToGroupMapping(HttpServletRequest request) throws Exception {
30  		CertificateHostToGroupMapping hostToGroupMapping = new CertificateHostToGroupMapping();
31  		String type = request.getParameter("type").trim();
32  		if(type.equals("cn"))
33  			hostToGroupMapping.setCn( request.getParameter("name").trim() );
34  		else if(type.equals("dn"))
35  			hostToGroupMapping.setDn( request.getParameter("name").trim() );
36  		hostToGroupMapping.setDescription( request.getParameter("description").trim() );
37  		int counter = 0;
38  		while(request.getParameter("g2AM" + counter)!=null) {
39  			String g2AMName = request.getParameter("g2AM" + counter).trim();
40  			if (!g2AMName.equals(""))
41  				hostToGroupMapping.addGroupToAccountMapping(g2AMName);
42  			counter++;
43  		}
44  		
45  		return hostToGroupMapping;
46  	}	
47  	
48  	static public GroupToAccountMapping parseGroupToAccountMapping(HttpServletRequest request) throws Exception {
49  		GroupToAccountMapping groupToAccountMapping = new GroupToAccountMapping();
50  
51  		groupToAccountMapping.setName( request.getParameter("name").trim() );
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("type").trim();
97  		
98  		if (type.equals(GroupAccountMapper.getTypeStatic())) {
99  			accountMapper = new GroupAccountMapper();
100 			accountMapper.setName( request.getParameter("name").trim() );
101 			accountMapper.setDescription( request.getParameter("description").trim() );
102 			if (request.getParameter("accountName")!=null)
103 				((GroupAccountMapper)accountMapper).setAccountName( request.getParameter("accountName").trim() );
104 		}
105 		else if (type.equals(ManualAccountMapper.getTypeStatic())) {
106 			accountMapper = new ManualAccountMapper();
107 			accountMapper.setName( request.getParameter("name").trim() );
108 			accountMapper.setDescription( request.getParameter("description").trim() );
109 			if (request.getParameter("persistenceFactory")!=null)
110 				((ManualAccountMapper)accountMapper).setPersistenceFactory( request.getParameter("persistenceFactory").trim() );
111 		}
112 		else if (type.equals(AccountPoolMapper.getTypeStatic())) {
113 			accountMapper = new AccountPoolMapper();
114 			accountMapper.setName( request.getParameter("name").trim() );
115 			accountMapper.setDescription( request.getParameter("description").trim() );
116 			if (request.getParameter("accountPool")!=null)
117 				((AccountPoolMapper)accountMapper).setAccountPool( request.getParameter("accountPool").trim() );
118 			if (request.getParameter("persistenceFactory")!=null)
119 				((AccountPoolMapper)accountMapper).setPersistenceFactory( request.getParameter("persistenceFactory").trim() );
120 		}
121 		else if (type.equals(GecosLdapAccountMapper.getTypeStatic())) {
122 			accountMapper = new GecosLdapAccountMapper();
123 			accountMapper.setName( request.getParameter("name").trim() );
124 			accountMapper.setDescription( request.getParameter("description").trim() );
125 			if (request.getParameter("serviceUrl")!=null)
126 				((GecosLdapAccountMapper)accountMapper).setJndiLdapUrl( request.getParameter("serviceUrl").trim() );
127 			if (request.getParameter("gecos")!=null)
128 				((GecosLdapAccountMapper)accountMapper).setGecosField( request.getParameter("gecos").trim() );
129 			if (request.getParameter("account")!=null)
130 				((GecosLdapAccountMapper)accountMapper).setAccountField( request.getParameter("account").trim() );
131 		}
132 		else if (type.equals(LdapAccountMapper.getTypeStatic())) {
133 			accountMapper = new LdapAccountMapper();
134 			accountMapper.setName( request.getParameter("name").trim() );
135 			accountMapper.setDescription( request.getParameter("description").trim() );
136 			if (request.getParameter("serviceUrl")!=null)
137 				((LdapAccountMapper)accountMapper).setJndiLdapUrl( request.getParameter("serviceUrl").trim() );
138 			if (request.getParameter("dn")!=null)
139 				((LdapAccountMapper)accountMapper).setDnField( request.getParameter("dn").trim() );
140 			if (request.getParameter("account")!=null)
141 				((LdapAccountMapper)accountMapper).setAccountField( request.getParameter("account").trim() );
142 		}
143 		else if (type.equals(GecosNisAccountMapper.getTypeStatic())) {
144 			accountMapper = new GecosNisAccountMapper();
145 			accountMapper.setName( request.getParameter("name").trim() );
146 			accountMapper.setDescription( request.getParameter("description").trim() );
147 			if (request.getParameter("serviceUrl")!=null)
148 				((GecosNisAccountMapper)accountMapper).setJndiNisUrl( request.getParameter("serviceUrl").trim() );
149 			if (request.getParameter("gecos")!=null)
150 				((GecosNisAccountMapper)accountMapper).setGecosField( request.getParameter("gecos").trim() );
151 			if (request.getParameter("account")!=null)
152 				((GecosNisAccountMapper)accountMapper).setAccountField( request.getParameter("account").trim() );
153 		}
154 
155 		return accountMapper;
156 	}		
157 
158 	static public UserGroup parseUserGroup(HttpServletRequest request) throws Exception {
159 		UserGroup userGroup = null;
160 
161 		String type = request.getParameter("type");
162 		
163 		if (type.equals(ManualUserGroup.getTypeStatic())) {
164 			userGroup = new ManualUserGroup();
165 			userGroup.setName( request.getParameter("name").trim() );
166 			userGroup.setDescription( request.getParameter("description").trim() );
167 			userGroup.setAccess( request.getParameter("access").trim() );
168 			if (request.getParameter("persistenceFactory")!=null)
169 				((ManualUserGroup)userGroup).setPersistenceFactory( request.getParameter("persistenceFactory").trim() );
170 		} else if (type.equals(LDAPUserGroup.getTypeStatic())) {
171 			userGroup = new LDAPUserGroup();
172 			userGroup.setName( request.getParameter("name").trim() );
173 			userGroup.setDescription( request.getParameter("description").trim() );
174 			userGroup.setAccess( request.getParameter("access").trim() );
175 			if (request.getParameter("server")!=null)
176 				((LDAPUserGroup)userGroup).setServer( request.getParameter("server").trim() );
177 			if (request.getParameter("query")!=null)
178 				((LDAPUserGroup)userGroup).setQuery( request.getParameter("query").trim() );
179 			if (request.getParameter("persistenceFactory")!=null)
180 				((LDAPUserGroup)userGroup).setPersistenceFactory( request.getParameter("persistenceFactory").trim() );
181 			if (request.getParameter("query")!=null)
182 				((LDAPUserGroup)userGroup).setQuery( request.getParameter("query").trim() );
183 			if (request.getParameter("persistenceFactory")!=null)
184 				((LDAPUserGroup)userGroup).setPersistenceFactory( request.getParameter("persistenceFactory").trim() );
185 			if (request.getParameter("certDNField")!=null)
186 				((LDAPUserGroup)userGroup).setCertDNField( request.getParameter("certDNField").trim() );
187 		} else if (type.equals(VOMSUserGroup.getTypeStatic())) {
188 			userGroup = new VOMSUserGroup();
189 			userGroup.setName( request.getParameter("name").trim() );
190 			userGroup.setDescription( request.getParameter("description").trim() );
191 			userGroup.setAccess( request.getParameter("access").trim() );
192 			if (request.getParameter("vOrg")!=null)
193 				((VOMSUserGroup)userGroup).setVomsServer( request.getParameter("vOrg").trim() );
194 			if (request.getParameter("url")!=null)
195 				((VOMSUserGroup)userGroup).setRemainderUrl( request.getParameter("url").trim() );
196 			if (request.getParameter("nVOMS")!=null)
197 				((VOMSUserGroup)userGroup).setAcceptProxyWithoutFQAN( request.getParameter("nVOMS").trim().equals("true") );
198 			if (request.getParameter("matchFQAN")!=null)
199 				((VOMSUserGroup)userGroup).setMatchFQAN( request.getParameter("matchFQAN") );
200 			if (request.getParameter("vogroup")!=null)
201 				((VOMSUserGroup)userGroup).setVoGroup( request.getParameter("vogroup") );
202 			if (request.getParameter("role")!=null)
203 				((VOMSUserGroup)userGroup).setRole( request.getParameter("role") );
204 		}
205 		
206 		return userGroup;
207 	}
208 
209 	static public VomsServer parseVomsServer(HttpServletRequest request) throws Exception {
210 		VomsServer vomsServer = new VomsServer();
211 		vomsServer.setName( request.getParameter("name").trim() );
212 		vomsServer.setDescription( request.getParameter("description").trim() );
213 		if (request.getParameter("persistenceFactory")!=null)
214 			vomsServer.setPersistenceFactory( request.getParameter("persistenceFactory").trim() );
215 		if (request.getParameter("baseURL")!=null)
216 			vomsServer.setBaseUrl( request.getParameter("baseURL").trim() );
217 		if (request.getParameter("sslKey")!=null)
218 			vomsServer.setSslKey( request.getParameter("sslKey").trim() );
219 		if (request.getParameter("sslCert")!=null)
220 			vomsServer.setSslCertfile( request.getParameter("sslCert").trim() );
221 		if (request.getParameter("sslCA")!=null)
222 			vomsServer.setSslCAFiles( request.getParameter("sslCA").trim() );
223 		if (request.getParameter("sslKeyPW")!=null)
224 			vomsServer.setSslKeyPasswd( request.getParameter("sslKeyPW").trim() );
225 		return vomsServer;
226 	}	
227 	
228 	static public PersistenceFactory parsePersistenceFactory(HttpServletRequest request) throws Exception {
229 		PersistenceFactory persistenceFactory = null;
230 		
231 		String type = request.getParameter("type");
232 		
233 		if (type.equals(HibernatePersistenceFactory.getTypeStatic())) {
234 			persistenceFactory = new HibernatePersistenceFactory();
235 			persistenceFactory.setName( request.getParameter("name").trim() );
236 			persistenceFactory.setDescription( request.getParameter("description").trim() );
237 			((HibernatePersistenceFactory)persistenceFactory).setProperties( getHibernateProperties(persistenceFactory, request, false) );
238 		} 
239 		else if (type.equals(LDAPPersistenceFactory.getTypeStatic())) {
240 			persistenceFactory = new LDAPPersistenceFactory();
241 			persistenceFactory.setName( request.getParameter("name").trim() );
242 			persistenceFactory.setDescription( request.getParameter("description").trim() );
243 			((LDAPPersistenceFactory)persistenceFactory).setSynchGroups( request.getParameter("synchGroups")!=null ? request.getParameter("synchGroups").trim().equals("true") : false );
244 			((LDAPPersistenceFactory)persistenceFactory).setCaCertFile( request.getParameter("caCertFile")!=null ? request.getParameter("caCertFile").trim() : "" );
245 			((LDAPPersistenceFactory)persistenceFactory).setTrustStorePassword( request.getParameter("tsPassword")!=null ? request.getParameter("tsPassword").trim() : "" );
246 			if (request.getParameter("groupIdField")!=null)
247 				((LDAPPersistenceFactory)persistenceFactory).setGroupIdField( request.getParameter("groupIdField") );
248 			if (request.getParameter("accountField")!=null)
249 				((LDAPPersistenceFactory)persistenceFactory).setAccountField( request.getParameter("accountField") );
250 			if (request.getParameter("memAccField")!=null)
251 				((LDAPPersistenceFactory)persistenceFactory).setMemberAccountField( request.getParameter("memAccField") );
252 			((LDAPPersistenceFactory)persistenceFactory).setProperties( getLdapProperties(persistenceFactory, request, false) );
253 		} 
254 		else if (type.equals(LocalPersistenceFactory.getTypeStatic())) {
255 			persistenceFactory = new LocalPersistenceFactory();
256 			persistenceFactory.setName( request.getParameter("name").trim() );
257 			persistenceFactory.setDescription( request.getParameter("description").trim() );
258 			((LocalPersistenceFactory)persistenceFactory).setSynchGroups( request.getParameter("synchGroups")!=null ? request.getParameter("synchGroups").trim().equals("true") : false );
259 			((LocalPersistenceFactory)persistenceFactory).setCaCertFile( request.getParameter("caCertFile")!=null ? request.getParameter("caCertFile").trim() : "" );
260 			((LocalPersistenceFactory)persistenceFactory).setTrustStorePassword( request.getParameter("tsPassword")!=null ? request.getParameter("tsPassword").trim() : "" );
261 			if (request.getParameter("groupIdField")!=null)
262 				((LocalPersistenceFactory)persistenceFactory).setGroupIdField( request.getParameter("groupIdField") );
263 			if (request.getParameter("accountField")!=null)
264 				((LocalPersistenceFactory)persistenceFactory).setAccountField( request.getParameter("accountField") );
265 			if (request.getParameter("memAccField")!=null)
266 				((LocalPersistenceFactory)persistenceFactory).setMemberAccountField( request.getParameter("memAccField") );
267 			Properties properties = getHibernateProperties(persistenceFactory, request, true);
268 			properties.putAll(getLdapProperties(persistenceFactory, request, true));
269 			((LocalPersistenceFactory)persistenceFactory).setProperties( properties );
270 		}
271 
272 		return persistenceFactory;
273 	}
274 	
275 	static public Properties getHibernateProperties(PersistenceFactory persistenceFactory, HttpServletRequest request, boolean includeMySql) {
276 		Properties properties = new Properties();
277 		properties.put((includeMySql?"mysql.":"") + "hibernate.connection.url", (request.getParameter("mySqlUrl")!=null ? request.getParameter("mySqlUrl").trim() : ""));
278 		properties.put((includeMySql?"mysql.":"") + "hibernate.connection.username", (request.getParameter("mySqlUsername")!=null ? request.getParameter("mySqlUsername").trim() : ""));
279 		properties.put((includeMySql?"mysql.":"") + "hibernate.connection.password", (request.getParameter("mySqlPassword")!=null ? request.getParameter("mySqlPassword").trim() : ""));
280 		properties.put((includeMySql?"mysql.":"") + "hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
281 		properties.put((includeMySql?"mysql.":"") + "hibernate.dialect", "net.sf.hibernate.dialect.MySQLDialect");
282 		properties.put((includeMySql?"mysql.":"") + "hibernate.c3p0.min_size", "3");
283 		properties.put((includeMySql?"mysql.":"") + "hibernate.c3p0.max_size", "20");
284 		properties.put((includeMySql?"mysql.":"") + "hibernate.c3p0.timeout", "180");
285 		properties.put((includeMySql?"mysql.":"") + "hibernate.connection.autoReconnect", "true");
286 		return properties;
287 	}
288 
289 	static public Properties getLdapProperties(PersistenceFactory persistenceFactory, HttpServletRequest request, boolean includeLdap) {
290 		Properties properties = new Properties();
291 		properties.put((includeLdap?"ldap.":"") + "java.naming.security.authentication", (request.getParameter("ldapAuthentication")!=null ? request.getParameter("ldapAuthentication").trim() : "simple"));
292 		properties.put((includeLdap?"ldap.":"") + "java.naming.security.principal", (request.getParameter("ldapPrincipal")!=null ? request.getParameter("ldapPrincipal").trim() : ""));
293 		properties.put((includeLdap?"ldap.":"") + "java.naming.security.credentials", (request.getParameter("ldapCredentials")!=null ? request.getParameter("ldapCredentials").trim() : ""));
294 		properties.put((includeLdap?"ldap.":"") + "java.naming.provider.url", (request.getParameter("ldapUrl")!=null ? request.getParameter("ldapUrl").trim() : ""));
295 		properties.put((includeLdap?"ldap.":"") + "java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");
296 		return properties;
297 	}
298 	
299 	static public String getHostToGroupReferences(Configuration configuration, String g2AMappingName) {
300 		String retStr = null;
301 		Collection h2GMappings = configuration.getHostToGroupMappings();
302 		Iterator it = h2GMappings.iterator();
303 		while (it.hasNext()) {
304 			HostToGroupMapping h2GMapping = (HostToGroupMapping)it.next();
305 			Iterator it2 = h2GMapping.getGroupToAccountMappings().iterator();
306 			while (it2.hasNext()) {
307 				String thisG2AMapping = (String)it2.next();
308 				if (thisG2AMapping.equals(g2AMappingName)) {
309 					if (retStr==null) 
310 						retStr = "";
311 					retStr += "\"" + h2GMapping.getName() + "\", ";
312 					break;
313 				}
314 			}
315 		}
316 		if(retStr!=null)
317 			retStr = retStr.substring(0, retStr.length()-2);
318 		return retStr;
319 	}
320 	
321 	static public String getGroupToAccountMappingReferences(Configuration configuration, String name, String className) {
322 		String retStr = null;
323 		Collection g2AMappings = configuration.getGroupToAccountMappings().values();
324 		Iterator it = g2AMappings.iterator();
325 		while (it.hasNext()) {
326 			GroupToAccountMapping g2AMapping = (GroupToAccountMapping)it.next();
327 			if(className.equals("gov.bnl.gums.account.AccountMapper")) {
328 				Iterator it2 = g2AMapping.getAccountMappers().iterator();
329 				while (it2.hasNext()) {
330 					String thisAccountMapper = (String)it2.next();
331 					if (thisAccountMapper.equals(name)) {
332 						if (retStr==null) 
333 							retStr = "";
334 						retStr += g2AMapping.getName() + ", ";
335 						break;
336 					}
337 				}
338 			}
339 			else if(className.equals("gov.bnl.gums.userGroup.UserGroup")) {
340 				Iterator it2 = g2AMapping.getUserGroups().iterator();
341 				while (it2.hasNext()) {
342 					String thisUserGroup = (String)it2.next();
343 					if (thisUserGroup.equals(name)) {
344 						if (retStr==null) 
345 							retStr = "";
346 						retStr += g2AMapping.getName() + ", ";
347 						break;
348 					}
349 				}
350 			}
351 		}
352 		if(retStr!=null)
353 			retStr = retStr.substring(0, retStr.length()-2);
354 		return retStr;
355 	}
356 	
357 	static public String getVOMSUserGroupReferences(Configuration configuration, String vomsServer) {
358 		String retStr = null;
359 		Collection userGroups = configuration.getUserGroups().values();
360 		Iterator it = userGroups.iterator();
361 		while (it.hasNext()) {
362 			UserGroup userGroup = (UserGroup)it.next();
363 			if ( userGroup instanceof VOMSUserGroup && vomsServer.equals( ((VOMSUserGroup)userGroup).getVomsServer() ) ) {
364 				if (retStr==null) 
365 					retStr = "";
366 				retStr += userGroup.getName() + ", ";
367 				break;
368 			}
369 		}
370 		if(retStr!=null)
371 			retStr = retStr.substring(0, retStr.length()-2);
372 		return retStr;
373 	}	
374 	
375 	static public String getReferencesForPersistenceFactory(Configuration configuration, String persistenceFactory) {
376 		String retStr = null;
377 		Iterator it;
378 		
379 		it = configuration.getVomsServers().values().iterator();
380 		while (it.hasNext()) {
381 			VomsServer vomsServer = (VomsServer)it.next();
382 			if(vomsServer.getPersistenceFactory().equals(persistenceFactory)) {
383 				if (retStr==null) 
384 					retStr = "";
385 				retStr += "VOMS server " + vomsServer.getName() + ", ";
386 			}
387 		}
388 
389 		it = configuration.getUserGroups().values().iterator();
390 		while (it.hasNext()) {
391 			UserGroup userGroup = (UserGroup)it.next();
392 			if (userGroup instanceof LDAPUserGroup) {
393 				if (((LDAPUserGroup)userGroup).getPersistenceFactory().equals(persistenceFactory)) {
394 					if (retStr==null) 
395 						retStr = "";
396 					retStr += "user group " + userGroup.getName() + ", ";
397 				}
398 			} else if (userGroup instanceof ManualUserGroup) {
399 				if (((ManualUserGroup)userGroup).getPersistenceFactory().equals(persistenceFactory)) {
400 					if (retStr==null) 
401 						retStr = "";
402 					retStr += "user group " + userGroup.getName() + ", ";
403 				}
404 			}
405 		}
406 
407 		it = configuration.getAccountMappers().values().iterator();
408 		while (it.hasNext()) {
409 			AccountMapper accountMapper = (AccountMapper)it.next();
410 			if (accountMapper instanceof ManualAccountMapper) {
411 				if (((ManualAccountMapper)accountMapper).getPersistenceFactory().equals(persistenceFactory)) {
412 					if (retStr==null) 
413 						retStr = "";
414 					retStr += "account mapper " + accountMapper.getName() + ", ";
415 				}
416 			} else if (accountMapper instanceof AccountPoolMapper) {
417 				if (((AccountPoolMapper)accountMapper).getPersistenceFactory().equals(persistenceFactory)) {
418 					if (retStr==null) 
419 						retStr = "";
420 					retStr += "account mapper " + accountMapper.getName() + ", ";
421 				}
422 			}
423 		}
424 
425 		if(retStr!=null)
426 			retStr = retStr.substring(0, retStr.length()-2);
427 		
428 		return retStr;
429 	}		
430 	
431 	static public String createSelectBox(String name, Collection items, String selected, String javascript, boolean includeEmptySlot) {
432 		String retStr = "<select name=\""+name+"\" " + (javascript!=null?javascript:"") + ">";
433 		if (includeEmptySlot)
434 			retStr += "<option " + (selected==null?"selected":"") + "></option>";
435 		Iterator it = items.iterator();
436 		while(it.hasNext())
437 		{
438 			String curName = getName(it.next());
439 			if (curName.equals(selected))
440 				retStr += "<option selected>" + curName + "</option>";
441 			else
442 				retStr += "<option>" + curName + "</option>";
443 		}
444 		retStr += "</select> \n";
445 		return retStr;
446 	}
447 	
448 	static public String createDoSubmit(Collection items, HttpServletRequest request) {
449 		String str = 
450 			"<script language=\"javascript\">"+
451 				"String.prototype.trim = function() { return this.replace(/^\\s+|\\s+$/g, \"\"); };"+
452 				"document.forms[0].elements['name'].value = document.forms[0].elements['name'].value.trim();"+
453 				"function doSubmit(str) {";
454 		
455 		if ("add".equals(request.getParameter("command")) || "add".equals(request.getParameter("originalCommand"))) {
456 			str += "if ( document.forms[0].elements['name'].value == '' ){ alert('First field cannot be empty'); return false; }";
457 	    			
458 		    Iterator it = items.iterator();
459 		    while(it.hasNext())
460 		    	str += "if ( document.forms[0].elements['name'].value == '" + getName(it.next()) + "'){ alert('Name already exists - please choose another name'); return false; }";
461 		}
462 
463 		str += 
464 	    			"document.forms[0].elements['command'].value='save'; return true;"+
465 					"return false;"+
466 				"}"+
467 			"</script>";
468 		
469 		return str;
470 	}
471 	
472 	static private String getName(Object obj) {
473 		if(obj instanceof String)
474 			return (String)obj;
475 		else if(obj instanceof CertificateHostToGroupMapping)
476 			return ((CertificateHostToGroupMapping)obj).getName();
477 		else if(obj instanceof GroupToAccountMapping)
478 			return ((GroupToAccountMapping)obj).getName();
479 		else if(obj instanceof AccountMapper)
480 			return ((AccountMapper)obj).getName();
481 		else if(obj instanceof UserGroup)
482 			return ((UserGroup)obj).getName();
483 		else if(obj instanceof PersistenceFactory)
484 			return ((PersistenceFactory)obj).getName();
485 		else if(obj instanceof VomsServer)
486 			return ((VomsServer)obj).getName();
487 		else
488 			return "";
489 	}
490 	
491 	static public String stripVo(String voGroup) {
492 		if(voGroup.length()>0 && voGroup.charAt(0)=='/') {
493 			String subStr = voGroup.substring(1);
494 			int index = subStr.indexOf("/");
495 			if (index!=-1)
496 				return subStr.substring(index+1);
497 		}
498 		return voGroup;
499 	}
500 	
501 	static public String stripGroup(String voGroup) {
502 		if(voGroup.length()>0 && voGroup.charAt(0)=='/') {
503 			String subStr = voGroup.substring(1);
504 			int index = subStr.indexOf("/");
505 			if (index!=-1)
506 				return subStr.substring(0, index);
507 		}
508 		return voGroup;
509 	}	
510 }