Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
DefaultUserImpl |
|
| 1.3846153846153846;1,385 |
1 | package org.apache.turbine.om.security; | |
2 | ||
3 | /* | |
4 | * Licensed to the Apache Software Foundation (ASF) under one | |
5 | * or more contributor license agreements. See the NOTICE file | |
6 | * distributed with this work for additional information | |
7 | * regarding copyright ownership. The ASF licenses this file | |
8 | * to you under the Apache License, Version 2.0 (the | |
9 | * "License"); you may not use this file except in compliance | |
10 | * with the License. You may obtain a copy of the License at | |
11 | * | |
12 | * http://www.apache.org/licenses/LICENSE-2.0 | |
13 | * | |
14 | * Unless required by applicable law or agreed to in writing, | |
15 | * software distributed under the License is distributed on an | |
16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
17 | * KIND, either express or implied. See the License for the | |
18 | * specific language governing permissions and limitations | |
19 | * under the License. | |
20 | */ | |
21 | ||
22 | import java.io.ByteArrayOutputStream; | |
23 | import java.io.PrintWriter; | |
24 | import java.util.Date; | |
25 | import java.util.HashMap; | |
26 | import java.util.Map; | |
27 | import java.util.Set; | |
28 | ||
29 | import javax.servlet.http.HttpSessionBindingEvent; | |
30 | ||
31 | import org.apache.fulcrum.security.model.turbine.entity.TurbineUser; | |
32 | import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole; | |
33 | import org.apache.turbine.services.security.TurbineSecurity; | |
34 | import org.apache.turbine.util.ObjectUtils; | |
35 | ||
36 | /** | |
37 | * This is the Default user implementation. It is a wrapper around | |
38 | * a TurbineUser object | |
39 | * | |
40 | * @author <a href="mailto:tv@apache.org">Thomas Vandahl</a> | |
41 | * @version $Id: TorqueUser.java 1199856 2011-11-09 17:06:04Z tv $ | |
42 | */ | |
43 | ||
44 | public class DefaultUserImpl implements User | |
45 | { | |
46 | /** Serial version */ | |
47 | private static final long serialVersionUID = -1866504873085624111L; | |
48 | ||
49 | /** The date on which the user last accessed the application. */ | |
50 | 8 | private Date lastAccessDate = null; |
51 | ||
52 | /** This is data that will survive a servlet engine restart. */ | |
53 | 8 | private Map<String, Object> permStorage = null; |
54 | ||
55 | /** This is data that will not survive a servlet engine restart. */ | |
56 | 8 | private Map<String, Object> tempStorage = null; |
57 | ||
58 | /** The Fulcrum user instance to delegate to */ | |
59 | 8 | private TurbineUser userDelegate = null; |
60 | ||
61 | /** | |
62 | * Constructor | |
63 | * | |
64 | * @param user the user object to wrap | |
65 | */ | |
66 | public DefaultUserImpl(TurbineUser user) | |
67 | { | |
68 | 8 | super(); |
69 | 8 | this.userDelegate = user; |
70 | 8 | setCreateDate(new Date()); |
71 | 8 | tempStorage = new HashMap<String, Object>(10); |
72 | 8 | setHasLoggedIn(Boolean.FALSE); |
73 | 8 | } |
74 | ||
75 | /** | |
76 | * Implement this method if you wish to be notified when the User | |
77 | * has been Bound to the session. | |
78 | * | |
79 | * @param hsbe Indication of value/session binding. | |
80 | */ | |
81 | @Override | |
82 | public void valueBound(HttpSessionBindingEvent hsbe) | |
83 | { | |
84 | // Currently we have no need for this method. | |
85 | 0 | } |
86 | ||
87 | /** | |
88 | * Implement this method if you wish to be notified when the User | |
89 | * has been Unbound from the session. | |
90 | * | |
91 | * @param hsbe Indication of value/session unbinding. | |
92 | */ | |
93 | @Override | |
94 | public void valueUnbound(HttpSessionBindingEvent hsbe) | |
95 | { | |
96 | try | |
97 | { | |
98 | 0 | if (hasLoggedIn()) |
99 | { | |
100 | 0 | TurbineSecurity.saveOnSessionUnbind(this); |
101 | } | |
102 | } | |
103 | 0 | catch (Exception e) |
104 | { | |
105 | //Log.error("TorqueUser.valueUnbound(): " + e.getMessage(), e); | |
106 | ||
107 | // To prevent messages being lost in case the logging system | |
108 | // goes away before sessions get unbound on servlet container | |
109 | // shutdown, print the stacktrace to the container's console. | |
110 | 0 | ByteArrayOutputStream ostr = new ByteArrayOutputStream(); |
111 | 0 | e.printStackTrace(new PrintWriter(ostr, true)); |
112 | 0 | String stackTrace = ostr.toString(); |
113 | 0 | System.out.println(stackTrace); |
114 | 0 | } |
115 | 0 | } |
116 | ||
117 | /** | |
118 | * Get the Name of the SecurityEntity. | |
119 | * | |
120 | * @return The Name of the SecurityEntity. | |
121 | */ | |
122 | @Override | |
123 | public String getName() | |
124 | { | |
125 | 24 | return userDelegate.getName(); |
126 | } | |
127 | ||
128 | /** | |
129 | * Sets the Name of the SecurityEntity. | |
130 | * | |
131 | * @param name | |
132 | * Name of the SecurityEntity. | |
133 | */ | |
134 | @Override | |
135 | public void setName(String name) | |
136 | { | |
137 | 5 | userDelegate.setName(name); |
138 | 5 | } |
139 | ||
140 | /** | |
141 | * Get the Id of the SecurityEntity. | |
142 | * | |
143 | * @return The Id of the SecurityEntity. | |
144 | */ | |
145 | @Override | |
146 | public Object getId() | |
147 | { | |
148 | 3 | return userDelegate.getId(); |
149 | } | |
150 | ||
151 | /** | |
152 | * Sets the Id of the SecurityEntity. | |
153 | * | |
154 | * @param id | |
155 | * The new Id of the SecurityEntity | |
156 | */ | |
157 | @Override | |
158 | public void setId(Object id) | |
159 | { | |
160 | 1 | userDelegate.setId(id); |
161 | 1 | } |
162 | ||
163 | /** | |
164 | * Returns the user's password. This method should not be used by | |
165 | * the application directly, because it's meaning depends upon | |
166 | * the implementation of UserManager that manages this particular | |
167 | * user object. Some implementations will use this attribute for | |
168 | * storing a password encrypted in some way, other will not use | |
169 | * it at all, when user entered password is presented to some external | |
170 | * authority (like NT domain controller) to validate it. | |
171 | * See also {@link org.apache.turbine.services.security.UserManager#authenticate(User,String)}. | |
172 | * | |
173 | * @return A String with the password for the user. | |
174 | */ | |
175 | @Override | |
176 | public String getPassword() | |
177 | { | |
178 | 2 | return userDelegate.getPassword(); |
179 | } | |
180 | ||
181 | /** | |
182 | * Set password. Application should not use this method | |
183 | * directly, see {@link #getPassword()}. | |
184 | * See also {@link org.apache.turbine.services.security.UserManager#changePassword(User,String,String)}. | |
185 | * | |
186 | * @param password The new password. | |
187 | */ | |
188 | @Override | |
189 | public void setPassword(String password) | |
190 | { | |
191 | 1 | userDelegate.setPassword(password); |
192 | 1 | } |
193 | ||
194 | /** | |
195 | * Returns the first name for this user. | |
196 | * | |
197 | * @return A String with the user's first name. | |
198 | */ | |
199 | ||
200 | @Override | |
201 | public String getFirstName() | |
202 | { | |
203 | 0 | return userDelegate.getFirstName(); |
204 | } | |
205 | ||
206 | /** | |
207 | * Sets the first name for this user. | |
208 | * | |
209 | * @param firstName User's first name. | |
210 | */ | |
211 | @Override | |
212 | public void setFirstName(String firstName) | |
213 | { | |
214 | 0 | userDelegate.setFirstName(firstName); |
215 | 0 | } |
216 | ||
217 | /** | |
218 | * Returns the last name for this user. | |
219 | * | |
220 | * @return A String with the user's last name. | |
221 | */ | |
222 | @Override | |
223 | public String getLastName() | |
224 | { | |
225 | 0 | return userDelegate.getLastName(); |
226 | } | |
227 | ||
228 | /** | |
229 | * Sets the last name for this user. | |
230 | * | |
231 | * @param lastName User's last name. | |
232 | */ | |
233 | @Override | |
234 | public void setLastName(String lastName) | |
235 | { | |
236 | 0 | userDelegate.setLastName(lastName); |
237 | 0 | } |
238 | ||
239 | /** | |
240 | * Returns the email address for this user. | |
241 | * | |
242 | * @return A String with the user's email address. | |
243 | */ | |
244 | @Override | |
245 | public String getEmail() | |
246 | { | |
247 | 0 | return userDelegate.getEmail(); |
248 | } | |
249 | ||
250 | /** | |
251 | * Sets the email address. | |
252 | * | |
253 | * @param address The email address. | |
254 | */ | |
255 | @Override | |
256 | public void setEmail(String address) | |
257 | { | |
258 | 0 | userDelegate.setEmail(address); |
259 | 0 | } |
260 | ||
261 | /** | |
262 | * Returns the value of the objectdata for this user. | |
263 | * Objectdata is a storage area used | |
264 | * to store the permanent storage table from the User | |
265 | * object. | |
266 | * | |
267 | * @return The bytes in the objectdata for this user | |
268 | */ | |
269 | @Override | |
270 | public byte[] getObjectdata() | |
271 | { | |
272 | 9 | return userDelegate.getObjectdata(); |
273 | } | |
274 | ||
275 | /** | |
276 | * Sets the value of the objectdata for the user | |
277 | * | |
278 | * @param objectdata The new permanent storage for the user | |
279 | */ | |
280 | @Override | |
281 | public void setObjectdata(byte[] objectdata) | |
282 | { | |
283 | 0 | userDelegate.setObjectdata(objectdata); |
284 | 0 | } |
285 | ||
286 | /** | |
287 | * Get the User/Group/Role set associated with this entity | |
288 | * | |
289 | * @return a set of User/Group/Role relations | |
290 | */ | |
291 | @Override | |
292 | public <T extends TurbineUserGroupRole> Set<T> getUserGroupRoleSet() | |
293 | { | |
294 | 1 | return userDelegate.getUserGroupRoleSet(); |
295 | } | |
296 | ||
297 | /** | |
298 | * Set the User/Group/Role set associated with this entity | |
299 | * | |
300 | * @param userGroupRoleSet | |
301 | * a set of User/Group/Role relations | |
302 | */ | |
303 | @Override | |
304 | public <T extends TurbineUserGroupRole> void setUserGroupRoleSet(Set<T> userGroupRoleSet) | |
305 | { | |
306 | 0 | userDelegate.setUserGroupRoleSet(userGroupRoleSet); |
307 | 0 | } |
308 | ||
309 | /** | |
310 | * Add a User/Group/Role relation to this entity | |
311 | * | |
312 | * @param userGroupRole | |
313 | * a User/Group/Role relation to add | |
314 | */ | |
315 | @Override | |
316 | public void addUserGroupRole(TurbineUserGroupRole userGroupRole) | |
317 | { | |
318 | 0 | userDelegate.addUserGroupRole(userGroupRole); |
319 | 0 | } |
320 | ||
321 | /** | |
322 | * Remove a User/Group/Role relation from this entity | |
323 | * | |
324 | * @param userGroupRole | |
325 | * a User/Group/Role relation to remove | |
326 | */ | |
327 | @Override | |
328 | public void removeUserGroupRole(TurbineUserGroupRole userGroupRole) | |
329 | { | |
330 | 0 | userDelegate.removeUserGroupRole(userGroupRole); |
331 | 0 | } |
332 | ||
333 | /** | |
334 | * Gets the access counter for a user from perm storage. | |
335 | * | |
336 | * @return The access counter for the user. | |
337 | */ | |
338 | @Override | |
339 | public int getAccessCounter() | |
340 | { | |
341 | try | |
342 | { | |
343 | 1 | return ((Integer) getPerm(User.ACCESS_COUNTER)).intValue(); |
344 | } | |
345 | 1 | catch (Exception e) |
346 | { | |
347 | 1 | return 0; |
348 | } | |
349 | } | |
350 | ||
351 | /** | |
352 | * Gets the access counter for a user during a session. | |
353 | * | |
354 | * @return The access counter for the user for the session. | |
355 | */ | |
356 | @Override | |
357 | public int getAccessCounterForSession() | |
358 | { | |
359 | try | |
360 | { | |
361 | 1 | return ((Integer) getTemp(User.SESSION_ACCESS_COUNTER)).intValue(); |
362 | } | |
363 | 1 | catch (Exception e) |
364 | { | |
365 | 1 | return 0; |
366 | } | |
367 | } | |
368 | ||
369 | /** | |
370 | * Increments the permanent hit counter for the user. | |
371 | */ | |
372 | @Override | |
373 | public void incrementAccessCounter() | |
374 | { | |
375 | // Ugh. Race city, here I come... | |
376 | 1 | setAccessCounter(getAccessCounter() + 1); |
377 | 1 | } |
378 | ||
379 | /** | |
380 | * Increments the session hit counter for the user. | |
381 | */ | |
382 | @Override | |
383 | public void incrementAccessCounterForSession() | |
384 | { | |
385 | 1 | setAccessCounterForSession(getAccessCounterForSession() + 1); |
386 | 1 | } |
387 | ||
388 | /** | |
389 | * Sets the access counter for a user, saved in perm storage. | |
390 | * | |
391 | * @param cnt The new count. | |
392 | */ | |
393 | @Override | |
394 | public void setAccessCounter(int cnt) | |
395 | { | |
396 | 1 | setPerm(User.ACCESS_COUNTER, Integer.valueOf(cnt)); |
397 | 1 | } |
398 | ||
399 | /** | |
400 | * Sets the session access counter for a user, saved in temp | |
401 | * storage. | |
402 | * | |
403 | * @param cnt The new count. | |
404 | */ | |
405 | @Override | |
406 | public void setAccessCounterForSession(int cnt) | |
407 | { | |
408 | 1 | setTemp(User.SESSION_ACCESS_COUNTER, Integer.valueOf(cnt)); |
409 | 1 | } |
410 | ||
411 | /** | |
412 | * Gets the last access date for this User. This is the last time | |
413 | * that the user object was referenced. | |
414 | * | |
415 | * @return A Java Date with the last access date for the user. | |
416 | */ | |
417 | @Override | |
418 | public java.util.Date getLastAccessDate() | |
419 | { | |
420 | 0 | if (lastAccessDate == null) |
421 | { | |
422 | 0 | setLastAccessDate(); |
423 | } | |
424 | 0 | return lastAccessDate; |
425 | } | |
426 | ||
427 | /** | |
428 | * Sets the last access date for this User. This is the last time | |
429 | * that the user object was referenced. | |
430 | */ | |
431 | @Override | |
432 | public void setLastAccessDate() | |
433 | { | |
434 | 1 | lastAccessDate = new java.util.Date(); |
435 | 1 | } |
436 | ||
437 | /** | |
438 | * Returns the permanent storage. This is implemented | |
439 | * as a Map | |
440 | * | |
441 | * @return A Map. | |
442 | */ | |
443 | @Override | |
444 | public Map<String, Object> getPermStorage() | |
445 | { | |
446 | 11 | if (permStorage == null) |
447 | { | |
448 | 8 | byte [] objectdata = getObjectdata(); |
449 | ||
450 | 8 | if (objectdata != null) |
451 | { | |
452 | 0 | permStorage = ObjectUtils.deserialize(objectdata); |
453 | } | |
454 | ||
455 | 8 | if (permStorage == null) |
456 | { | |
457 | 8 | permStorage = new HashMap<String, Object>(); |
458 | } | |
459 | } | |
460 | ||
461 | 11 | return permStorage; |
462 | } | |
463 | ||
464 | /** | |
465 | * This should only be used in the case where we want to make the | |
466 | * data persistent. | |
467 | * | |
468 | * @param permStorage A Map. | |
469 | */ | |
470 | @Override | |
471 | public void setPermStorage(Map<String, Object> permStorage) | |
472 | { | |
473 | 0 | if (permStorage != null) |
474 | { | |
475 | 0 | this.permStorage = permStorage; |
476 | } | |
477 | 0 | } |
478 | ||
479 | /** | |
480 | * Returns the temporary storage. This is implemented | |
481 | * as a Map | |
482 | * | |
483 | * @return A Map. | |
484 | */ | |
485 | @Override | |
486 | public Map<String, Object> getTempStorage() | |
487 | { | |
488 | 24 | if (tempStorage == null) |
489 | { | |
490 | 0 | tempStorage = new HashMap<String, Object>(); |
491 | } | |
492 | 24 | return tempStorage; |
493 | } | |
494 | ||
495 | /** | |
496 | * This should only be used in the case where we want to save the | |
497 | * data to the database. | |
498 | * | |
499 | * @param tempStorage A Map. | |
500 | */ | |
501 | @Override | |
502 | public void setTempStorage(Map<String, Object> tempStorage) | |
503 | { | |
504 | 0 | if (tempStorage != null) |
505 | { | |
506 | 0 | this.tempStorage = tempStorage; |
507 | } | |
508 | 0 | } |
509 | ||
510 | /** | |
511 | * Get an object from permanent storage. | |
512 | * | |
513 | * @param name The object's name. | |
514 | * @return An Object with the given name. | |
515 | */ | |
516 | @Override | |
517 | public Object getPerm(String name) | |
518 | { | |
519 | 1 | return getPermStorage().get(name); |
520 | } | |
521 | ||
522 | /** | |
523 | * Get an object from permanent storage; return default if value | |
524 | * is null. | |
525 | * | |
526 | * @param name The object's name. | |
527 | * @param def A default value to return. | |
528 | * @return An Object with the given name. | |
529 | */ | |
530 | @Override | |
531 | public Object getPerm(String name, Object def) | |
532 | { | |
533 | try | |
534 | { | |
535 | 0 | Object val = getPermStorage().get(name); |
536 | 0 | return (val == null ? def : val); |
537 | } | |
538 | 0 | catch (Exception e) |
539 | { | |
540 | 0 | return def; |
541 | } | |
542 | } | |
543 | ||
544 | /** | |
545 | * Put an object into permanent storage. | |
546 | * | |
547 | * @param name The object's name. | |
548 | * @param value The object. | |
549 | */ | |
550 | @Override | |
551 | public void setPerm(String name, Object value) | |
552 | { | |
553 | 10 | getPermStorage().put(name, value); |
554 | 10 | } |
555 | ||
556 | /** | |
557 | * Get an object from temporary storage. | |
558 | * | |
559 | * @param name The object's name. | |
560 | * @return An Object with the given name. | |
561 | */ | |
562 | @Override | |
563 | public Object getTemp(String name) | |
564 | { | |
565 | 10 | return getTempStorage().get(name); |
566 | } | |
567 | ||
568 | /** | |
569 | * Get an object from temporary storage; return default if value | |
570 | * is null. | |
571 | * | |
572 | * @param name The object's name. | |
573 | * @param def A default value to return. | |
574 | * @return An Object with the given name. | |
575 | */ | |
576 | @Override | |
577 | public Object getTemp(String name, Object def) | |
578 | { | |
579 | Object val; | |
580 | try | |
581 | { | |
582 | 0 | val = getTempStorage().get(name); |
583 | 0 | if (val == null) |
584 | { | |
585 | 0 | val = def; |
586 | } | |
587 | } | |
588 | 0 | catch (Exception e) |
589 | { | |
590 | 0 | val = def; |
591 | 0 | } |
592 | 0 | return val; |
593 | } | |
594 | ||
595 | /** | |
596 | * Put an object into temporary storage. | |
597 | * | |
598 | * @param name The object's name. | |
599 | * @param value The object. | |
600 | */ | |
601 | @Override | |
602 | public void setTemp(String name, Object value) | |
603 | { | |
604 | 14 | getTempStorage().put(name, value); |
605 | 14 | } |
606 | ||
607 | /** | |
608 | * Remove an object from temporary storage and return the object. | |
609 | * | |
610 | * @param name The name of the object to remove. | |
611 | * @return An Object. | |
612 | */ | |
613 | @Override | |
614 | public Object removeTemp(String name) | |
615 | { | |
616 | 0 | return getTempStorage().remove(name); |
617 | } | |
618 | ||
619 | /** | |
620 | * Returns the confirm value of the user | |
621 | * | |
622 | * @return The confirm value of the user | |
623 | */ | |
624 | @Override | |
625 | public String getConfirmed() | |
626 | { | |
627 | 0 | return (String) getPerm(User.CONFIRM_VALUE); |
628 | } | |
629 | ||
630 | /** | |
631 | * Sets the new confirm value of the user | |
632 | * | |
633 | * @param confirm The new confirm value of the user | |
634 | */ | |
635 | @Override | |
636 | public void setConfirmed(String confirm) | |
637 | { | |
638 | 0 | setPerm(User.CONFIRM_VALUE, confirm); |
639 | 0 | } |
640 | ||
641 | /** | |
642 | * Returns the creation date of the user | |
643 | * | |
644 | * @return The creation date of the user | |
645 | */ | |
646 | @Override | |
647 | public java.util.Date getCreateDate() | |
648 | { | |
649 | 0 | return (java.util.Date)getPerm(CREATE_DATE, new java.util.Date()); |
650 | } | |
651 | ||
652 | /** | |
653 | * Sets the new creation date of the user | |
654 | * | |
655 | * @param createDate The new creation date of the user | |
656 | */ | |
657 | @Override | |
658 | public void setCreateDate(java.util.Date createDate) | |
659 | { | |
660 | 8 | setPerm(CREATE_DATE, createDate); |
661 | 8 | } |
662 | ||
663 | /** | |
664 | * Returns the date of the last login of the user | |
665 | * | |
666 | * @return The date of the last login of the user | |
667 | */ | |
668 | @Override | |
669 | public java.util.Date getLastLogin() | |
670 | { | |
671 | 0 | return (java.util.Date) getPerm(User.LAST_LOGIN); |
672 | } | |
673 | ||
674 | /** | |
675 | * Sets the new date of the last login of the user | |
676 | * | |
677 | * @param lastLogin The new the date of the last login of the user | |
678 | */ | |
679 | @Override | |
680 | public void setLastLogin(java.util.Date lastLogin) | |
681 | { | |
682 | 1 | setPerm(User.LAST_LOGIN, lastLogin); |
683 | 1 | } |
684 | ||
685 | /** | |
686 | * The user is considered logged in if they have not timed out. | |
687 | * | |
688 | * @return Whether the user has logged in. | |
689 | */ | |
690 | @Override | |
691 | public boolean hasLoggedIn() | |
692 | { | |
693 | 9 | Boolean loggedIn = (Boolean) getTemp(User.HAS_LOGGED_IN); |
694 | 9 | return (loggedIn != null && loggedIn.booleanValue()); |
695 | } | |
696 | ||
697 | /** | |
698 | * This sets whether or not someone has logged in. hasLoggedIn() | |
699 | * returns this value. | |
700 | * | |
701 | * @param value Whether someone has logged in or not. | |
702 | */ | |
703 | @Override | |
704 | public void setHasLoggedIn(Boolean value) | |
705 | { | |
706 | 13 | setTemp(User.HAS_LOGGED_IN, value); |
707 | 13 | } |
708 | ||
709 | /** | |
710 | * This method reports whether or not the user has been confirmed | |
711 | * in the system by checking the User.CONFIRM_VALUE | |
712 | * column in the users record to see if it is equal to | |
713 | * User.CONFIRM_DATA. | |
714 | * | |
715 | * @return True if the user has been confirmed. | |
716 | */ | |
717 | @Override | |
718 | public boolean isConfirmed() | |
719 | { | |
720 | 0 | String value = getConfirmed(); |
721 | 0 | return (value != null && value.equals(User.CONFIRM_DATA)); |
722 | } | |
723 | ||
724 | /** | |
725 | * Updates the last login date in the database. | |
726 | * | |
727 | * @exception Exception A generic exception. | |
728 | */ | |
729 | @Override | |
730 | public void updateLastLogin() | |
731 | throws Exception | |
732 | { | |
733 | 1 | setLastLogin(new java.util.Date()); |
734 | 1 | } |
735 | ||
736 | /** | |
737 | * Get the delegated user | |
738 | * | |
739 | * @return the userDelegate | |
740 | */ | |
741 | public TurbineUser getUserDelegate() | |
742 | { | |
743 | 0 | return userDelegate; |
744 | } | |
745 | ||
746 | /** | |
747 | * Set the delegated user | |
748 | * | |
749 | * @param userDelegate the userDelegate to set | |
750 | */ | |
751 | public void setUserDelegate(TurbineUser userDelegate) | |
752 | { | |
753 | 0 | this.userDelegate = userDelegate; |
754 | 0 | } |
755 | } |