PageRenderTime 52ms CodeModel.GetById 14ms app.highlight 24ms RepoModel.GetById 1ms app.codeStats 0ms

/projects/ivatagroupware-0.11.3/addressbook/src/java/com/ivata/groupware/business/addressbook/AddressBookBean.java

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Java | 713 lines | 133 code | 36 blank | 544 comment | 0 complexity | 342d4d59562d9976108362e9f69dd9e7 MD5 | raw file
  1/*
  2 * Copyright (c) 2001 - 2005 ivata limited.
  3 * All rights reserved.
  4 * -----------------------------------------------------------------------------
  5 * ivata groupware may be redistributed under the GNU General Public
  6 * License as published by the Free Software Foundation;
  7 * version 2 of the License.
  8 *
  9 * These programs are free software; you can redistribute them and/or
 10 * modify them under the terms of the GNU General Public License
 11 * as published by the Free Software Foundation; version 2 of the License.
 12 *
 13 * These programs are distributed in the hope that they will be useful,
 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 16 *
 17 * See the GNU General Public License in the file LICENSE.txt for more
 18 * details.
 19 *
 20 * If you would like a copy of the GNU General Public License write to
 21 *
 22 * Free Software Foundation, Inc.
 23 * 59 Temple Place - Suite 330
 24 * Boston, MA 02111-1307, USA.
 25 *
 26 *
 27 * To arrange commercial support and licensing, contact ivata at
 28 *                  http://www.ivata.com/contact.jsp
 29 * -----------------------------------------------------------------------------
 30 * $Log: AddressBookBean.java,v $
 31 * Revision 1.4  2005/04/29 02:48:14  colinmacleod
 32 * Data bugfixes.
 33 * Changed primary key back to Integer.
 34 *
 35 * Revision 1.3  2005/04/10 20:09:34  colinmacleod
 36 * Added new themes.
 37 * Changed id type to String.
 38 * Changed i tag to em and b tag to strong.
 39 * Improved PicoContainerFactory with NanoContainer scripts.
 40 *
 41 * Revision 1.2  2005/04/09 17:19:06  colinmacleod
 42 * Changed copyright text to GPL v2 explicitly.
 43 *
 44 * Revision 1.1.1.1  2005/03/10 17:50:19  colinmacleod
 45 * Restructured ivata op around Hibernate/PicoContainer.
 46 * Renamed ivata groupware.
 47 *
 48 * Revision 1.10  2004/11/12 18:17:10  colinmacleod
 49 * Ordered imports.
 50 *
 51 * Revision 1.9  2004/11/12 15:56:47  colinmacleod
 52 * Removed dependencies on SSLEXT.
 53 * Moved Persistence classes to ivata masks.
 54 *
 55 * Revision 1.8  2004/11/03 15:36:48  colinmacleod
 56 * Changed relationship between person and address:
 57 * each person for now has exactly one address.
 58 *
 59 * Revision 1.7  2004/07/18 21:59:12  colinmacleod
 60 * Removed Person from User - now you need to use addressbook/persistence manager to find the person (makes the app run faster.)
 61 *
 62 * Revision 1.6  2004/07/13 19:41:13  colinmacleod
 63 * Moved project to POJOs from EJBs.
 64 * Applied PicoContainer to services layer (replacing session EJBs).
 65 * Applied Hibernate to persistence layer (replacing entity EJBs).
 66 *
 67 * Revision 1.5  2004/03/27 10:29:41  colinmacleod
 68 * Added getAddressBook implementation.
 69 *
 70 * Revision 1.4  2004/03/26 21:34:35  colinmacleod
 71 * Split off functionality into POJO.
 72 *
 73 * Revision 1.3  2004/03/21 21:16:05  colinmacleod
 74 * Shortened name to ivata op.
 75 *
 76 * Revision 1.2  2004/02/01 22:00:32  colinmacleod
 77 * Added full names to author tags
 78 *
 79 * Revision 1.1.1.1  2004/01/27 20:57:49  colinmacleod
 80 * Moved ivata openportal to SourceForge..
 81 *
 82 * Revision 1.6  2003/12/12 11:08:58  jano
 83 * fixing aaddressbook functionaality
 84 *
 85 * Revision 1.5  2003/11/03 11:28:24  jano
 86 * commiting addressbook,
 87 * tryinjg to fix deploying problem
 88 *
 89 * Revision 1.4  2003/10/17 12:36:12  jano
 90 * fixing problems with building
 91 * converting intranet -> portal
 92 * Eclipse building
 93 *
 94 * Revision 1.3  2003/10/15 13:36:47  jano
 95 * converting to XDoclet
 96 *
 97 * Revision 1.2  2003/10/15 13:18:02  colin
 98 * fixing for XDoclet
 99 *
100 * Revision 1.20  2003/08/21 09:49:22  jano
101 * removed unusing methods
102 *
103 * Revision 1.19  2003/08/20 16:23:59  jano
104 * fixing addressBook extension
105 *
106 * Revision 1.18  2003/08/19 14:53:30  jano
107 * *** empty log message ***
108 *
109 * Revision 1.17  2003/08/14 15:54:19  jano
110 * fixing bugs
111 *
112 * Revision 1.16  2003/08/14 08:19:59  jano
113 * fixing bug
114 *
115 * Revision 1.15  2003/08/13 13:32:16  jano
116 * addressBook exttension: next level
117 *
118 * Revision 1.14  2003/08/05 14:51:03  jano
119 * addressBook extension
120 *
121 * Revision 1.13  2003/08/05 05:54:06  jano
122 * new methods in addressbook
123 *
124 * Revision 1.12  2003/07/31 08:45:57  jano
125 * new method findAllPeople
126 * removing all similar methods
127 *
128 * Revision 1.10  2003/07/25 11:40:17  jano
129 * adding functionality for addressBook extension
130 *
131 * Revision 1.9  2003/06/18 14:20:43  jano
132 * fixing problem with removing user
133 *
134 * Revision 1.8  2003/05/23 13:04:46  peter
135 * uncommented email address validation
136 *
137 * Revision 1.7  2003/05/12 13:45:52  colin
138 * added new methods for finding rights
139 *
140 * Revision 1.6  2003/05/02 15:14:57  peter
141 * added email address validation
142 *
143 * Revision 1.5  2003/04/09 08:51:48  jano
144 * handling data of removing user
145 *
146 * Revision 1.4  2003/04/02 09:04:05  jano
147 * again, fixing bug with wrong keys in validate method
148 *
149 * Revision 1.3  2003/03/31 15:44:04  jano
150 * mistake in validate method, using wrong key of applicationResources
151 *
152 * Revision 1.2  2003/02/27 12:57:40  peter
153 * fixed the resouceBundle paths in validation methods
154 *
155 * Revision 1.1  2003/02/24 19:09:20  colin
156 * moved to business
157 *
158 * Revision 1.28  2003/02/21 09:23:17  colin
159 * fixed bug when fileAs values are the same (only 1 was shown)
160 *
161 * Revision 1.27  2003/02/20 20:49:53  colin
162 * changed checking of unique fileAs field to ValidaitonException
163 *
164 * Revision 1.26  2003/02/20 20:22:54  colin
165 * improved validation error handling
166 *
167 * Revision 1.25  2003/02/20 14:34:02  colin
168 * addGroupsToPerson no longer adds child groups to the person (just the parent)
169 *
170 * Revision 1.24  2003/02/18 11:11:27  colin
171 * first release of address book with Struts
172 *
173 * Revision 1.23  2003/02/14 07:57:07  colin
174 * changed finder in AddressBookBean so it finds all groups (rather than just parent groups)
175 *
176 * Revision 1.22  2003/02/04 17:43:44  colin
177 * copyright notice
178 *
179 * Revision 1.21  2003/01/30 15:29:38  colin
180 * added group validation
181 *
182 * Revision 1.20  2003/01/10 10:30:06  jano
183 * we need information about user who created group
184 *
185 * Revision 1.19  2003/01/09 13:31:49  jano
186 * we have fiield in Person called : createdBy - its name of user who created that contact
187 *
188 * Revision 1.18  2003/01/09 10:02:51  jano
189 * we are not storing group's rights in geoupDO now
190 * we are using methods in addressBookRightsBean
191 *
192 * Revision 1.17  2003/01/03 15:43:50  jano
193 * we don't need tempFindTarge...... method, we are using getTargetIdsByAUD
194 *
195 * Revision 1.16  2002/12/16 13:41:34  jano
196 * in there is not groupId we have to find only those contacts which we can see
197 *
198 * Revision 1.15  2002/12/12 15:03:28  jano
199 * rights for groups
200 *
201 * Revision 1.14  2002/12/03 15:42:19  jano
202 * if the person is user so put him to USER group if he is not there
203 *
204 * Revision 1.13  2002/10/11 12:51:10  colin
205 * added check for duplicate values of fileAs
206 *
207 * Revision 1.12  2002/09/30 12:51:34  jano
208 * trow exception if the group i main group for any people
209 *
210 * Revision 1.11  2002/09/27 14:18:19  jano
211 * when you want delete group contain sub groups throw exception
212 *
213 * Revision 1.10  2002/09/17 08:36:59  colin
214 * added checkDO to check the person before adding
215 *
216 * Revision 1.9  2002/09/09 08:38:10  colin
217 * moved user handling to new security bean
218 *
219 * Revision 1.8  2002/09/02 08:47:48  colin
220 * added country handling and sorting (comparator)
221 *
222 * Revision 1.7  2002/08/30 09:48:45  colin
223 * added employee EJB
224 *
225 * Revision 1.6  2002/08/29 14:33:43  colin
226 * changed AddressBook: added isUserEnabled method
227 *
228 * Revision 1.5  2002/07/26 13:07:21  colin
229 * split user rights off into separate class
230 * added mail server methods
231 *
232 * Revision 1.4  2002/06/28 13:15:22  colin
233 * first addressbook release
234 *
235 * Revision 1.3  2002/06/17 10:45:47  colin
236 * Tidied up the canUser... code
237 *
238 * Revision 1.2  2002/06/17 07:28:51  colin
239 * improved and extended javadoc documentation
240 * -----------------------------------------------------------------------------
241 */
242package com.ivata.groupware.business.addressbook;
243
244import java.util.List;
245
246import javax.ejb.CreateException;
247import javax.ejb.RemoveException;
248import javax.ejb.SessionBean;
249import javax.ejb.SessionContext;
250
251import org.picocontainer.PicoContainer;
252
253import com.ivata.groupware.admin.security.server.SecuritySession;
254import com.ivata.groupware.business.addressbook.address.AddressDO;
255import com.ivata.groupware.business.addressbook.address.country.CountryDO;
256import com.ivata.groupware.business.addressbook.person.PersonDO;
257import com.ivata.groupware.business.addressbook.person.group.GroupDO;
258import com.ivata.groupware.container.PicoContainerFactory;
259import com.ivata.mask.util.SystemException;
260import com.ivata.mask.validation.ValidationErrors;
261
262
263/**
264 * <p>This address book provides clients with access to the register of people
265 * within the ivata groupware system.</p>
266 *
267 * <p>Actions are here to retrieve people, change their details and enter new
268 * people into the system. This bean manages people's street and
269 * telecommunications addresses, together with which people are users and what
270 * group(s) each person is a member of.</p>
271 *
272 * <p>Furthermore, this bean is responsible for assigning and maintaining
273 * employee information.</p>
274 *
275 * <p><strong>Note</strong>, however that whilst the addressbook may react on which
276 * people are users (it checks those people always have an email address), this
277 * <em>EJB</em> is not responsible for adding, removing or amending users or their
278 * passwords. For that functionality, see the {@link com.ivata.groupware.admin.security.SecurityBean
279 * SecurityBean}.</p>
280 *
281 * @since 2002-05-12
282 * @author Colin MacLeod
283 * <a href='mailto:colin.macleod@ivata.com'>colin.macleod@ivata.com</a>
284 * @version $Revision: 1.4 $
285 * TODO: the employee and user methods need to check the user rights
286 *
287 * @ejb.bean
288 *      name="AddressBook"
289 *      display-name="AddressBook"
290 *      type="Stateless"
291 *      view-type="remote"
292 *      jndi-name="AddressBookRemote"
293 *
294 * @ejb.transaction
295 *      type = "Required"
296 *
297 *  @ejb.home
298 *      generate="false"
299 *      remote-class="com.ivata.groupware.business.addressbook.AddressBookRemoteHome"
300 *
301 *  @ejb.interface
302 *      remote-class="com.ivata.groupware.business.addressbook.AddressBookRemote"
303 */
304public class AddressBookBean implements SessionBean, AddressBook {
305    /**
306     * <p>Provides the session bean with container-specific information.</p>
307     */
308    SessionContext sessionContext;
309
310
311    /**
312     * <p>Add bew AddressBook.</p>
313     * @param userName
314     * @param groupDO
315     * @return
316     *
317     * @ejb.interface-method
318     *      view-type = "remote"
319     */
320    public GroupDO addAddressBook(final SecuritySession securitySession,
321            final GroupDO groupDO)
322            throws SystemException {
323        return getAddressBook().addAddressBook(securitySession, groupDO);
324    }
325
326    /**
327     * <p>Add a new group to the address book.</p>
328     *
329     * @param userName the name of the user who wants to add the group. This is
330     *     used to check user rights.
331     * @param groupDO a data object containing all the details
332     *     of the group to add.
333     * @exception com.ivata.groupware.ejb.entity.UserRightException if the user
334     *     provided is not entitled to add this group
335     * @exception com.ivata.groupware.ejb.entity.InvalidFieldValueException
336     *     if a field value in the new group contains an invalid value
337     * @return the new group data object, with the details as they
338     *     now are in the adressbook.
339     *
340     * @ejb.interface-method
341     *      view-type = "remote"
342     */
343    public GroupDO addGroup(final SecuritySession securitySession,
344            final GroupDO groupDO)
345            throws SystemException {
346        return getAddressBook().addGroup(securitySession, groupDO);
347    }
348
349    /**
350     * <p>Add a new person to the address book.</p>
351     *
352     * @param personDO data object containing the details of the
353     *     person you want to add.
354     * @return the new person data object, with the details as they
355     *     now are in the adressbook.
356     *
357     * @ejb.interface-method
358     *      view-type = "remote"
359     */
360    public PersonDO addPerson(final SecuritySession securitySession,
361            final PersonDO personDO)
362            throws SystemException {
363        return getAddressBook().addPerson(securitySession, personDO);
364    }
365
366    /**
367     * <p>add new userGroup.</p>
368     * @param userName
369     * @param groupDO
370     * @return
371     *
372     * @ejb.interface-method
373     *      view-type = "remote"
374     */
375    public GroupDO addUserGroup(final SecuritySession securitySession,
376            final GroupDO groupDO)
377            throws SystemException {
378        return getAddressBook().addUserGroup(securitySession, groupDO);
379    }
380
381    /**
382     * <p>Amend the details of a group in the public address book.</p>
383     *
384     * @param userName the name of the user who wants to amend the group. This
385     *     is used to check user rights.
386     * @param groupDO a data object containing all the details
387     *     of the group to amend.
388     * @exception com.ivata.groupware.ejb.entity.UserRightException if the user
389     *     provided is not entitled to amend this group.
390     * @exception com.ivata.groupware.ejb.entity.InvalidFieldValueException
391     *     if a field value in the new group contains an invalid value.
392     * @return the new group data object, with the details as they
393     *     now are in the adressbook.
394     *
395     * @ejb.interface-method
396     *      view-type = "remote"
397     */
398    public GroupDO amendGroup(final SecuritySession securitySession,
399            final GroupDO groupDO)
400            throws SystemException {
401        return getAddressBook().amendGroup(securitySession, groupDO);
402    }
403
404    /**
405     * <p>Change/update a person's details in the addressbook.</p>
406     *
407     * @param personDO data object containing the details of the
408     *     person you want to amend.
409     * @return the new person data object, with the details as they
410     *     now are in the adressbook.
411     *
412     * @ejb.interface-method
413     *      view-type = "remote"
414     */
415    public PersonDO amendPerson(final SecuritySession securitySession,
416            final PersonDO personDO)
417            throws SystemException {
418        return getAddressBook().amendPerson(securitySession, personDO);
419    }
420
421    /**
422     * <p>Called by the container to notify an entity object it has been
423     * activated.</p>
424     */
425    public void ejbActivate() {}
426
427    /**
428     * <p>Called by the container just after the bean has been created.</p>
429     *
430     * @exception CreateException if any error occurs. Never thrown by this
431     *     class.
432     *
433     * @ejb.create-method
434     */
435    public void ejbCreate() throws CreateException {}
436
437    /**
438     * <p>Called by the container to notify the entity object it will be
439     * deactivated. Called just before deactivation.</p>
440     */
441    public void ejbPassivate() {}
442
443    /**
444     * <p>This method is called by the container when the bean is about
445     * to be removed.</p>
446     *
447     * <p>This method will be called after a client calls the <code>remove</code>
448     * method of the remote/local home interface.</p>
449     *
450     * @throws RemoveException if any error occurs. Currently never thrown by
451     *     this class.
452     */
453    public final void ejbRemove() {}
454
455    /**
456     * <p>get Map of all address book names which are allowed with specific access.</p>
457     * @param userName
458     * @param access
459     * @return
460     *
461     * @ejb.interface-method
462     *      view-type = "remote"
463     */
464    public List findAddressBooks(final SecuritySession securitySession,
465            final boolean includePersonal)
466            throws SystemException {
467        return getAddressBook().findAddressBooks(securitySession, includePersonal);
468    }
469
470    /**
471     * <p>Find all of the countries in the system.</p>
472     *
473     * @return all of the coutries in the system as a <code>List</code>
474     * of {@link com.ivata.groupware.business.addressbook.address.country.CountryDO CountryDO}
475     * instances.
476     *
477     * @ejb.interface-method
478     *      view-type = "remote"
479     */
480    public List findAllCountries(final SecuritySession securitySession)
481            throws SystemException {
482        return getAddressBook().findAllCountries(securitySession);
483    }
484
485
486    /**
487     * <p>Find All People in a specific address book.</p
488     *
489     * @see com.ivata.groupware.business.addressbook.AddressBook#findAllPeople(com.ivata.groupware.admin.security.server.SecuritySession, Integer, Integer, String)
490     * @ejb.interface-method
491     *      view-type = "remote"
492     */
493    public List findAllPeopleInGroup(final SecuritySession securitySession,
494            final GroupDO group,
495            final String initialLetter) throws SystemException {
496        return getAddressBook().findAllPeopleInGroup(securitySession, group,
497            initialLetter);
498    }
499
500    /**
501     * <p>Find a single county identified by its two-letter country code.</p>
502     *
503     * @param countryCode two-letter internet country code.
504     * @return details of the country as an instance of
505     * {@link com.ivata.groupware.business.addressbook.address.country.CountryDO CountryDO),
506     * or <code>null</code> if no such country exists.
507     *
508     * @ejb.interface-method
509     *      view-type = "remote"
510     */
511    public CountryDO findCountryByCode(final SecuritySession securitySession,
512            final String countryCode)
513            throws SystemException {
514        return getAddressBook().findCountryByCode(securitySession, countryCode);
515    }
516
517    /**
518     * <p>Find a group in the address book by its unique identifier.</p>
519     *
520     * @param id the unique identifier of the group to find.
521     * @return the data object of the group which matches this unique
522     *      identifier.
523     *
524     * @ejb.interface-method
525     *      view-type = "remote"
526     */
527    public GroupDO findGroupByPrimaryKey(final SecuritySession securitySession,
528            final Integer id)
529            throws SystemException {
530        return getAddressBook().findGroupByPrimaryKey(securitySession, id);
531    }
532
533    /**
534     * <p>
535     * Find all groups which are siblings, identified by the parent group.
536     * </p>
537     * @see com.ivata.groupware.business.addressbook.AddressBook#findGroupsByParent(com.ivata.groupware.admin.security.server.SecuritySession, Integer)
538     */
539    public List findGroupsByParent(final SecuritySession securitySession,
540            final Integer parentId) throws SystemException {
541        return getAddressBook().findGroupsByParent(securitySession, parentId);
542    }
543
544    /**
545     * <p>Find Id of personal AddressBook.</p>
546     * @param userName
547     * @return
548     *
549     * @ejb.interface-method
550     *      view-type = "remote"
551     */
552    public GroupDO findPersonalAddressBook(final SecuritySession securitySession)
553            throws SystemException {
554        return getAddressBook().findPersonalAddressBook(securitySession);
555    }
556
557    /**
558     * <p>Find a person in the address book by their unique identifier.</p>
559     *
560     * @param id the unique identifier of the person to find.
561     * @return the person data object which matches this id, with the
562     *      details as they now are in the adressbook.
563     *
564     * @ejb.interface-method
565     *      view-type = "remote"
566     */
567    public PersonDO findPersonByPrimaryKey(final SecuritySession securitySession,
568            final String id)
569            throws SystemException {
570        return getAddressBook().findPersonByPrimaryKey(securitySession, id);
571    }
572
573    /**
574     * <p>Find a person in the address book by their user name.</p>
575     *
576     * @param userName Name of the user to find.
577     * @return the person data object which matches this user name.
578     * @see com.ivata.groupware.business.addressbook.AddressBook#findPersonByUserName(com.ivata.groupware.admin.security.server.SecuritySession, String)
579     */
580    public PersonDO findPersonByUserName(final SecuritySession securitySession,
581            final String userName) throws SystemException {
582        return getAddressBook().findPersonByUserName(securitySession, userName);
583    }
584
585    /**
586     * <p>get Map of all usergroup names which are allowed with specific access.</p>
587     * @param userName
588     * @param access
589     * @return
590     *
591     * @ejb.interface-method
592     *      view-type = "remote"
593     */
594    public List findUserGroups(final SecuritySession securitySession,
595            final boolean includeAdministrator)
596            throws SystemException {
597        return getAddressBook().findUserGroups(securitySession, includeAdministrator);
598    }
599
600    /**
601     * Get the addressbook implementation from the <code>PicoContainer</code>.
602     */
603    private AddressBook getAddressBook()
604            throws SystemException {
605        PicoContainer container = PicoContainerFactory.getInstance()
606            .getGlobalContainer();
607        return (AddressBook) container.getComponentInstance(AddressBook.class);
608    }
609
610    /**
611     * <p>Remove a group from the public address book.</p>
612     *
613     * @param userName the name of the user who wants to remove the group. This
614     *     is used to check user rights.
615     * @param groupDO a data object containing all the details
616     *     of the group to remove. The id of the group is used to identify which
617     *      group to remove.
618     * @exception com.ivata.groupware.ejb.entity.UserRightException if the user
619     *     provided is not entitled to remvoe this group.
620     * @exception com.ivata.groupware.ejb.entity.InvalidFieldValueException
621     *     if the id of the group contains an invalid value.
622     *
623     * @ejb.interface-method
624     *      view-type = "remote"
625     */
626    public void removeGroup(final SecuritySession securitySession,
627            final Integer id)
628            throws SystemException {
629        getAddressBook().removeGroup(securitySession, id);
630    }
631
632    /**
633     * <p>Remove a person from the address book.</p>
634     *
635     * @param personDO data object containing the details of the
636     *     person you want to remove. The id is used to locate and remove the
637     *     person.
638     *
639     * @ejb.interface-method
640     *      view-type = "remote"
641     */
642    public void removePerson(final SecuritySession securitySession,
643            final Integer id)
644            throws SystemException {
645        getAddressBook().removePerson(securitySession, id);
646    }
647
648    /**
649     * <p>Set up the context for this entity object. The session bean stores the
650     * context for later use.</p>
651     *
652     * @param sessionContext the new context which the session object should
653     *     store.
654     */
655    public final void setSessionContext(final SessionContext sessionContext) {
656        this.sessionContext = sessionContext;
657    }
658
659    /**
660     * <p>Confirm all of the elements of the person are address and valid,
661     * before the message is sent.</p>
662     *
663     * @param addressDO data object to check for consistency and
664     *     completeness.
665     * @return a collection of validation errors if any of the
666     *     mandatory fields are missing, or if fields contain invalid values.
667     *
668     * @ejb.interface-method
669     *      view-type = "remote"
670     */
671    public ValidationErrors validate(final SecuritySession securitySession,
672            final AddressDO addressDO)
673            throws SystemException {
674        return getAddressBook().validate(securitySession, addressDO);
675    }
676
677    /**
678     * <p>Confirm all of the elements of the group are present and valid,
679     * before the message is sent.</p>
680     *
681     * @param groupDO data object to check for consistency and
682     *     completeness.
683     * @return a collection of validation errors if any of the
684     *     mandatory fields are missing, or if fields contain invalid values.
685     *
686     * @ejb.interface-method
687     *      view-type = "remote"
688     */
689    public ValidationErrors validate(final SecuritySession securitySession,
690            final GroupDO groupDO)
691            throws SystemException {
692        return getAddressBook().validate(securitySession, groupDO);
693    }
694
695    /**
696     * <p>Confirm all of the elements of the person are present and valid,
697     * before the message is sent.</p>
698     *
699     * @param personDO data object to check for consistency and
700     *     completeness.
701     * @return a collection of validation errors if any of the
702     *     mandatory fields are missing, or if fields contain invalid values.
703     *
704     * @ejb.interface-method
705     *      view-type = "remote"
706     */
707    public ValidationErrors validate(final SecuritySession securitySession,
708            final PersonDO personDO)
709            throws SystemException {
710        return getAddressBook().validate(securitySession, personDO);
711    }
712
713}