001/**
002 * Copyright 2005-2016 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.kuali.rice.kim.api.identity;
017
018import org.kuali.rice.core.api.criteria.QueryByCriteria;
019import org.kuali.rice.core.api.exception.RiceIllegalArgumentException;
020import org.kuali.rice.core.api.exception.RiceIllegalStateException;
021import org.kuali.rice.kim.api.KimConstants;
022import org.kuali.rice.kim.api.identity.address.EntityAddress;
023import org.kuali.rice.kim.api.identity.affiliation.EntityAffiliation;
024import org.kuali.rice.kim.api.identity.affiliation.EntityAffiliationType;
025import org.kuali.rice.kim.api.identity.citizenship.EntityCitizenship;
026import org.kuali.rice.kim.api.identity.email.EntityEmail;
027import org.kuali.rice.kim.api.identity.employment.EntityEmployment;
028import org.kuali.rice.kim.api.identity.entity.Entity;
029import org.kuali.rice.kim.api.identity.entity.EntityDefault;
030import org.kuali.rice.kim.api.identity.entity.EntityDefaultQueryResults;
031import org.kuali.rice.kim.api.identity.entity.EntityQueryResults;
032import org.kuali.rice.kim.api.identity.external.EntityExternalIdentifier;
033import org.kuali.rice.kim.api.identity.external.EntityExternalIdentifierType;
034import org.kuali.rice.kim.api.identity.name.EntityName;
035import org.kuali.rice.kim.api.identity.personal.EntityBioDemographics;
036import org.kuali.rice.kim.api.identity.personal.EntityEthnicity;
037import org.kuali.rice.kim.api.identity.phone.EntityPhone;
038import org.kuali.rice.kim.api.identity.principal.EntityNamePrincipalName;
039import org.kuali.rice.kim.api.identity.principal.Principal;
040import org.kuali.rice.kim.api.identity.principal.PrincipalQueryResults;
041import org.kuali.rice.kim.api.identity.privacy.EntityPrivacyPreferences;
042import org.kuali.rice.kim.api.identity.residency.EntityResidency;
043import org.kuali.rice.kim.api.identity.type.EntityTypeContactInfo;
044import org.kuali.rice.kim.api.identity.visa.EntityVisa;
045import org.springframework.cache.annotation.CacheEvict;
046import org.springframework.cache.annotation.Cacheable;
047
048import javax.jws.WebMethod;
049import javax.jws.WebParam;
050import javax.jws.WebResult;
051import javax.jws.WebService;
052import javax.jws.soap.SOAPBinding;
053import java.util.List;
054import java.util.Map;
055
056/**
057 * This service provides operations to query for principal and identity data.
058 *
059 * <p>A principal represents an identity that can authenticate.  In essence, a principal can be
060 * thought of as an "account" or as an identity's authentication credentials.  A principal has
061 * an id which is used to uniquely identify it.  It also has a name which represents the
062 * principal's username and is typically what is entered when authenticating.  All principals
063 * are associated with one and only one identity.
064 *
065 * <p>An identity represents a person or system.  Additionally, other "types" of entities can
066 * be defined in KIM.  Information like name, phone number, etc. is associated with an identity.
067 * It is the representation of a concrete person or system.  While an identity will typically
068 * have a single principal associated with it, it is possible for an identity to have more than
069 * one principal or even no principals at all (in the case where the identity does not actually
070 * authenticate).
071 *
072 * <p>This service also provides operations for querying various pieces of reference data, such as
073 * address types, affiliation types, phone types, etc.
074 *
075 *
076 * @author Kuali Rice Team (rice.collab@kuali.org)
077 *
078 */
079@WebService(name = "identityService", targetNamespace = KimConstants.Namespaces.KIM_NAMESPACE_2_0)
080@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
081public interface IdentityService {
082
083    /**
084     * This method finds EntityDefault data based on a query criteria.  The criteria cannot be null.
085     *
086     * @param query the criteria.  Cannot be null.
087     * @return query results.  will never return null.
088     * @throws RiceIllegalArgumentException if the queryByCriteria is null
089     */
090    @WebMethod(operationName = "findEntityDefaults")
091    @WebResult(name = "results")
092        EntityDefaultQueryResults findEntityDefaults(@WebParam(name = "query") QueryByCriteria query)  throws RiceIllegalArgumentException;
093
094    /**
095     * This method finds Entities based on a query criteria.  The criteria cannot be null.
096     *
097     * @param query the criteria.  Cannot be null.
098     * @return query results.  will never return null.
099     * @throws RiceIllegalArgumentException if the queryByCriteria is null
100     */
101    @WebMethod(operationName = "findEntities")
102    @WebResult(name = "results")
103        EntityQueryResults findEntities(@WebParam(name = "query") QueryByCriteria query)  throws RiceIllegalArgumentException;
104
105
106    /**
107     * Gets a {@link org.kuali.rice.kim.api.identity.entity.Entity} from an id.
108     *
109     * <p>
110     *   This method will return null if the Entity does not exist.
111     * </p>
112     *
113     * @param id the unique id to retrieve the entity by. cannot be null.
114     * @return a {@link org.kuali.rice.kim.api.identity.entity.Entity} or null
115     * @throws RiceIllegalArgumentException if the id is blank
116     */
117    @WebMethod(operationName = "getEntity")
118    @WebResult(name = "entity")
119    @Cacheable(value= Entity.Cache.NAME, key="'id=' + #p0")
120        Entity getEntity( @WebParam(name="id") String id )  throws RiceIllegalArgumentException;
121
122        /**
123     * Gets a {@link org.kuali.rice.kim.api.identity.entity.Entity} from a principalId.
124     *
125     * <p>
126     *   This method will return null if the Entity does not exist.
127     * </p>
128     *
129     * @param principalId the unique id to retrieve the entity by. cannot be null.
130     * @return a {@link org.kuali.rice.kim.api.identity.entity.Entity} or null
131     * @throws RiceIllegalArgumentException if the principalId is blank
132     */
133    @WebMethod(operationName = "getEntityByPrincipalId")
134    @WebResult(name = "entity")
135    @Cacheable(value= Entity.Cache.NAME, key="'principalId=' + #p0")
136        Entity getEntityByPrincipalId(@WebParam(name = "principalId") String principalId)  throws RiceIllegalArgumentException;
137
138        /**
139     * Gets a {@link org.kuali.rice.kim.api.identity.entity.Entity} from a principalName.
140     *
141     * <p>
142     *   This method will return null if the Entity does not exist.
143     * </p>
144     *
145     * @param principalName the unique id to retrieve the entity by. cannot be null.
146     * @return a {@link org.kuali.rice.kim.api.identity.entity.Entity} or null
147     * @throws RiceIllegalArgumentException if the id is blank
148     */
149    @WebMethod(operationName = "getEntityByPrincipalName")
150    @WebResult(name = "entity")
151    @Cacheable(value= Entity.Cache.NAME, key="'principalName=' + #p0")
152        Entity getEntityByPrincipalName(@WebParam(name = "principalName") String principalName)  throws RiceIllegalArgumentException;
153
154    /**
155     * Gets a {@link org.kuali.rice.kim.api.identity.entity.Entity} from a employeeId.
156     *
157     * <p>
158     *   This method will return null if the Entity does not exist.
159     * </p>
160     *
161     * @param employeeId the unique id to retrieve the entity by. cannot be null.
162     * @return a {@link org.kuali.rice.kim.api.identity.entity.Entity} or null
163     * @throws RiceIllegalArgumentException if the employeeId is blank
164     */
165    @WebMethod(operationName = "getEntityByEmployeeId")
166    @WebResult(name = "entity")
167    @Cacheable(value= Entity.Cache.NAME, key="'employeeId=' + #p0")
168    Entity getEntityByEmployeeId(@WebParam(name = "employeeId") String employeeId)  throws RiceIllegalArgumentException;
169
170
171    /**
172     * This will create a {@link org.kuali.rice.kim.api.identity.entity.Entity} exactly like the entity passed in.
173     *
174     * @param entity the entity to create
175     * @return the newly created Entity object.
176     * @throws RiceIllegalArgumentException if the entity is null
177     * @throws RiceIllegalStateException if the entity already exists in the system
178     */
179    @WebMethod(operationName="createEntity")
180    @WebResult(name = "entity")
181    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
182    Entity createEntity(@WebParam(name = "entity") Entity entity)
183        throws RiceIllegalArgumentException, RiceIllegalStateException;
184
185    /**
186     * This will update a {@link org.kuali.rice.kim.api.identity.entity.Entity}.
187     *
188     * @param entity the entity to update
189     * @return the updated Entity object.
190     * @throws RiceIllegalArgumentException if the entity is null
191     * @throws RiceIllegalStateException if the entity does not already exist in the system
192     */
193    @WebMethod(operationName="updateEntity")
194    @WebResult(name = "entity")
195    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME, EntityNamePrincipalName.Cache.NAME}, allEntries = true)
196    Entity updateEntity(@WebParam(name = "entity") Entity entity)
197        throws RiceIllegalArgumentException, RiceIllegalStateException;
198
199    /**
200     * This will inactivate a {@link org.kuali.rice.kim.api.identity.entity.Entity}.
201     *
202     * @param id the unique id of the entity to inactivate
203     * @return the inactivated Entity object.
204     * @throws RiceIllegalArgumentException if the entity is null
205     * @throws RiceIllegalStateException if the entity does not already exist in the system
206     */
207    @WebMethod(operationName="inactivateEntity")
208    @WebResult(name = "entity")
209    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
210    Entity inactivateEntity(@WebParam(name = "id") String id)
211        throws RiceIllegalArgumentException, RiceIllegalStateException;
212
213
214
215    /**
216     * Gets a {@link org.kuali.rice.kim.api.identity.entity.EntityDefault} from an id.
217     * {@link org.kuali.rice.kim.api.identity.entity.EntityDefault} is a condensed version of {@link org.kuali.rice.kim.api.identity.entity.Entity} that contains
218     * default values of its subclasses
219     *
220     * <p>
221     *   This method will return null if the Entity does not exist.
222     * </p>
223     *
224     * @param id the unique id to retrieve the entity by. cannot be null.
225     * @return a {@link org.kuali.rice.kim.api.identity.entity.EntityDefault} or null
226     * @throws RiceIllegalArgumentException if the id is blank
227     */
228    @WebMethod(operationName = "getEntityDefault")
229    @WebResult(name = "entityDefault")
230    @Cacheable(value= EntityDefault.Cache.NAME, key="'id=' + #p0")
231        EntityDefault getEntityDefault(@WebParam(name = "id") String id)  throws RiceIllegalArgumentException;
232
233        /**
234     * Gets a {@link org.kuali.rice.kim.api.identity.entity.EntityDefault} from an principalId.
235     * {@link org.kuali.rice.kim.api.identity.entity.EntityDefault} is a condensed version of {@link org.kuali.rice.kim.api.identity.entity.Entity} that contains
236     * default values of its subclasses
237     *
238     * <p>
239     *   This method will return null if the Entity does not exist.
240     * </p>
241     *
242     * @param principalId the unique id to retrieve the entity by. cannot be null.
243     * @return a {@link org.kuali.rice.kim.api.identity.entity.EntityDefault} or null
244     * @throws RiceIllegalArgumentException if the principalId is blank
245     */
246    @WebMethod(operationName = "getEntityDefaultByPrincipalId")
247    @WebResult(name = "entityDefault")
248    @Cacheable(value= EntityDefault.Cache.NAME, key="'principalId=' + #p0")
249        EntityDefault getEntityDefaultByPrincipalId(@WebParam(name = "principalId") String principalId)  throws RiceIllegalArgumentException;
250
251        /**
252     * Gets a {@link org.kuali.rice.kim.api.identity.entity.EntityDefault} from an principalName.
253     * {@link org.kuali.rice.kim.api.identity.entity.EntityDefault} is a condensed version of {@link org.kuali.rice.kim.api.identity.entity.Entity} that contains
254     * default values of its subclasses
255     *
256     * <p>
257     *   This method will return null if the Entity does not exist.
258     * </p>
259     *
260     * @param principalName the unique id to retrieve the entity by. cannot be null.
261     * @return a {@link org.kuali.rice.kim.api.identity.entity.EntityDefault} or null
262     * @throws RiceIllegalArgumentException if the principalId is blank
263     */
264    @WebMethod(operationName = "getEntityDefaultByPrincipalName")
265    @WebResult(name = "entityDefault")
266    @Cacheable(value= EntityDefault.Cache.NAME, key="'principalName=' + #p0")
267        EntityDefault getEntityDefaultByPrincipalName(@WebParam(name = "principalName") String principalName)  throws RiceIllegalArgumentException;
268
269    /**
270     * Gets a {@link org.kuali.rice.kim.api.identity.entity.EntityDefault} from an employeeId.
271     * {@link org.kuali.rice.kim.api.identity.entity.EntityDefault} is a condensed version of {@link org.kuali.rice.kim.api.identity.entity.Entity} that contains
272     * default values of its subclasses
273     *
274     * <p>
275     *   This method will return null if the Entity does not exist.
276     * </p>
277     *
278     * @param employeeId the unique id to retrieve the entity by. cannot be null.
279     * @return a {@link org.kuali.rice.kim.api.identity.entity.EntityDefault} or null
280     * @throws RiceIllegalArgumentException if the employeeId is blank
281     */
282    @WebMethod(operationName = "getEntityDefaultByEmployeeId")
283    @WebResult(name = "entityDefault")
284    @Cacheable(value= EntityDefault.Cache.NAME, key="'employeeId=' + #p0")
285    EntityDefault getEntityDefaultByEmployeeId(@WebParam(name = "employeeId") String employeeId)  throws RiceIllegalArgumentException;
286
287
288    /**
289     * Gets a {@link org.kuali.rice.kim.api.identity.principal.Principal} from an principalId.
290     *
291     * <p>
292     *   This method will return null if the Principal does not exist.
293     * </p>
294     *
295     * @param principalId the unique id to retrieve the principal by. cannot be null.
296     * @return a {@link org.kuali.rice.kim.api.identity.principal.Principal} or null
297     * @throws RiceIllegalArgumentException if the principalId is blank
298     */
299    @WebMethod(operationName = "getPrincipal")
300    @WebResult(name = "principal")
301    @Cacheable(value= Principal.Cache.NAME, key="'principalId=' + #p0")
302    Principal getPrincipal( @WebParam(name="principalId") String principalId )  throws RiceIllegalArgumentException;
303
304
305    /**
306     * Gets a list of {@link org.kuali.rice.kim.api.identity.principal.Principal} from a string list of principalId.
307     *
308     * <p>
309     *   This method will only return principals that exist.
310     * </p>
311     *
312     * @param principalIds the unique id to retrieve the principal by. cannot be null.
313     * @return a list of {@link org.kuali.rice.kim.api.identity.principal.Principal}
314     * @throws RiceIllegalArgumentException if the principalId is blank
315     */
316    @WebMethod(operationName = "getPrincipals")
317    @WebResult(name = "ret")
318    List<Principal> getPrincipals( @WebParam(name="principalIds") List<String> principalIds)  ;
319
320    /**
321     * Gets a list of {@link org.kuali.rice.kim.api.identity.principal.Principal} from an entityId.
322     *
323     * <p>
324     *   This method will only return principals that exist.
325     * </p>
326     *
327     * @param entityId the unique id to retrieve the principals by. cannot be null.
328     * @return a list of {@link org.kuali.rice.kim.api.identity.principal.Principal}
329     * @throws RiceIllegalArgumentException if the entityId is blank
330     */
331    @WebMethod(operationName = "getPrincipalsByEntityId")
332    @WebResult(name = "principals")
333    List<Principal> getPrincipalsByEntityId( @WebParam(name="entityId") String entityId)  ;
334
335    /**
336     * Gets a list of {@link org.kuali.rice.kim.api.identity.principal.Principal} from an employeeId
337     *
338     * <p>
339     *   This method will only return principals that exist.
340     * </p>
341     *
342     * @param employeeId the employee id to retrieve the principals by. cannot be null.
343     * @return a list of {@link org.kuali.rice.kim.api.identity.principal.Principal}
344     * @throws RiceIllegalArgumentException if the employeeId is blank
345     */
346    @WebMethod(operationName = "getPrincipalsByEmployeeId")
347    @WebResult(name = "principals")
348    List<Principal> getPrincipalsByEmployeeId( @WebParam(name="employeeId") String employeeId)  ;
349
350    /**
351     * Gets a {@link org.kuali.rice.kim.api.identity.principal.Principal} from an principalName.
352     *
353     * <p>
354     *   This method will return null if the Principal does not exist.
355     * </p>
356     *
357     * @param principalName the unique id to retrieve the principal by. cannot be null.
358     * @return a {@link org.kuali.rice.kim.api.identity.principal.Principal} or null
359     */
360    @WebMethod(operationName = "getPrincipalByPrincipalName")
361    @WebResult(name = "principal")
362    @Cacheable(value= Principal.Cache.NAME, key="'principalName=' + #p0")
363    Principal getPrincipalByPrincipalName( @WebParam(name="principalName") String principalName )  throws RiceIllegalArgumentException;
364
365    /**
366     * Gets a {@link org.kuali.rice.kim.api.identity.principal.Principal} from an principalName and password.
367     *
368     * <p>
369     *   This method will return null if the Principal does not exist or the password is incorrect.
370     * </p>
371     *
372     * @param principalName the unique id to retrieve the principal by. cannot be null.
373     * @param password the password for the principal
374     * @return a {@link org.kuali.rice.kim.api.identity.principal.Principal} or null
375     * @throws RiceIllegalArgumentException if the principalName is blank
376     */
377    @WebMethod(operationName = "getPrincipalByPrincipalNameAndPassword")
378    @WebResult(name = "principal")
379    @Cacheable(value= Principal.Cache.NAME, key="'principalName=' + #p0 + '|' + 'password=' + #p1")
380    Principal getPrincipalByPrincipalNameAndPassword( @WebParam(name="principalName") String principalName,  @WebParam(name="password") String password )  throws RiceIllegalArgumentException;
381
382    /**
383     * This will create a {@link org.kuali.rice.kim.api.identity.principal.Principal} exactly like the principal passed in.
384     *
385     * The principal object passed in must be populated with an entityId and a principalName
386     *
387     * @param principal the principal to create
388     * @return the newly created Principal object.
389     * @throws RiceIllegalArgumentException if the principal is null
390     * @throws RiceIllegalStateException if the principal already exists in the system or the principal object is not populated with entityId and principalName
391     */
392    @WebMethod(operationName="addPrincipalToEntity")
393    @WebResult(name = "principal")
394    @CacheEvict(value = {Principal.Cache.NAME, Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
395    Principal addPrincipalToEntity(@WebParam(name = "principal") Principal principal)
396        throws RiceIllegalArgumentException, RiceIllegalStateException;
397
398    /**
399     * This will update a {@link org.kuali.rice.kim.api.identity.principal.Principal} exactly like the principal passed in.
400     *
401     *
402     * @param principal the principal to update
403     * @return the updated Principal object.
404     * @throws RiceIllegalArgumentException if the principal is null
405     * @throws RiceIllegalStateException if the principal does not exist in the system.
406     */
407    @WebMethod(operationName="updatePrincipal")
408    @WebResult(name = "principal")
409    @CacheEvict(value = {Principal.Cache.NAME, Entity.Cache.NAME, EntityDefault.Cache.NAME, EntityNamePrincipalName.Cache.NAME}, allEntries = true)
410    Principal updatePrincipal(@WebParam(name = "principal") Principal principal)
411        throws RiceIllegalArgumentException, RiceIllegalStateException;
412
413    /**
414     * This will inactivate a {@link org.kuali.rice.kim.api.identity.principal.Principal}.
415     *
416     *
417     * @param principalId the unique id of the principal to inactivate
418     * @return the inactivated Principal object.
419     * @throws RiceIllegalArgumentException if the principal is null
420     * @throws RiceIllegalStateException if the principal does not exist in the system.
421     */
422    @WebMethod(operationName="inactivatePrincipal")
423    @WebResult(name = "principal")
424    @CacheEvict(value = {Principal.Cache.NAME, Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
425    Principal inactivatePrincipal(@WebParam(name = "principalId") String principalId)
426        throws RiceIllegalArgumentException, RiceIllegalStateException;
427
428    /**
429     * This will inactivate a {@link org.kuali.rice.kim.api.identity.principal.Principal}.
430     *
431     *
432     * @param principalName the unique principalName of the principal to inactivate
433     * @return the inactivated Principal object.
434     * @throws RiceIllegalArgumentException if the principal is null
435     * @throws RiceIllegalStateException if the principal does not exist in the system.
436     */
437    @WebMethod(operationName="inactivatePrincipalByName")
438    @WebResult(name = "principal")
439    @CacheEvict(value = {Principal.Cache.NAME, Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
440    Principal inactivatePrincipalByName(@WebParam(name = "principalName") String principalName)
441        throws RiceIllegalArgumentException, RiceIllegalStateException;
442
443
444    /**
445     * This will create a {@link org.kuali.rice.kim.api.identity.type.EntityTypeContactInfo} exactly like the entityTypeContactInfo passed in.
446     *
447     * The EntityTypeContactInfo object passed in must be populated with an entityId and a entityTypeCode
448     *
449     * @param entityTypeContactInfo the EntityTypeContactInfo to create
450     * @return the newly created EntityTypeContactInfo object.
451     * @throws RiceIllegalArgumentException if the entityTypeContactInfo is null
452     * @throws RiceIllegalStateException if the entityTypeContactInfo already exists in the system or the EntityTypeContactInfo object is not populated with entityId and entityTypeCode
453     */
454    @WebMethod(operationName="addEntityTypeContactInfoToEntity")
455    @WebResult(name = "entityTypeContactInfo")
456    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
457    EntityTypeContactInfo addEntityTypeContactInfoToEntity(
458            @WebParam(name = "entityTypeContactInfo") EntityTypeContactInfo entityTypeContactInfo)
459        throws RiceIllegalArgumentException, RiceIllegalStateException;
460
461    /**
462     * This will update a {@link org.kuali.rice.kim.api.identity.type.EntityTypeContactInfo} exactly like the entityTypeContactInfo passed in.
463     *
464     *
465     * @param entityTypeContactInfo the EntityTypeContactInfo to update
466     * @return the updated EntityTypeContactInfo object.
467     * @throws RiceIllegalArgumentException if the entityTypeContactInfo is null
468     * @throws RiceIllegalStateException if the entityTypeContactInfo does not exist in the system.
469     */
470    @WebMethod(operationName="updateEntityTypeContactInfo")
471    @WebResult(name = "entityTypeContactInfo")
472    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
473    EntityTypeContactInfo updateEntityTypeContactInfo(@WebParam(name = "entityTypeContactInfo") EntityTypeContactInfo entityTypeContactInfo)
474        throws RiceIllegalArgumentException, RiceIllegalStateException;
475
476    /**
477     * This will inactivate a {@link org.kuali.rice.kim.api.identity.type.EntityTypeContactInfo} with the passed in parameters.
478     *
479     *
480     * @param entityId the entityId of the EntityTypeContactInfo to inactivate
481     * @param entityTypeCode the entityTypeCode of the EntityTypeContactInfo to inactivate
482     * @return the inactivated EntityTypeContactInfo object.
483     * @throws RiceIllegalArgumentException if the entityId or entityTypeCode passed in is null
484     * @throws RiceIllegalStateException if the EntityTypeContactInfo does not exist in the system.
485     */
486    @WebMethod(operationName="inactivateEntityTypeContactInfo")
487    @WebResult(name = "entityTypeContactInfo")
488    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
489    EntityTypeContactInfo inactivateEntityTypeContactInfo(@WebParam(name = "entityId") String entityId,
490            @WebParam(name = "entityTypeCode") String entityTypeCode)
491        throws RiceIllegalArgumentException, RiceIllegalStateException;
492
493    /**
494     * This will create a {@link org.kuali.rice.kim.api.identity.address.EntityAddress} exactly like the address passed in.
495     *
496     * The EntityAddress object passed in must be populated with an entityId and a entityTypeCode
497     *
498     * @param address the EntityAddress to create
499     * @return the newly created EntityAddress object.
500     * @throws RiceIllegalArgumentException if the address is null
501     * @throws RiceIllegalStateException if the address already exists in the system or address is not populated with entityId and entityTypeCode
502     */
503    @WebMethod(operationName="addAddressToEntity")
504    @WebResult(name = "address")
505    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
506    EntityAddress addAddressToEntity(@WebParam(name = "address") EntityAddress address)
507        throws RiceIllegalArgumentException, RiceIllegalStateException;
508
509    /**
510     * This will update a {@link org.kuali.rice.kim.api.identity.address.EntityAddress} exactly like the address passed in.
511     *
512     *
513     * @param address the EntityAddress to update
514     * @return the updated EntityAddress object.
515     * @throws IllegalArgumentException if the address is null
516     * @throws RiceIllegalArgumentException if the address does not exist in the system.
517     */
518    @WebMethod(operationName="updateAddress")
519    @WebResult(name = "address")
520    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
521    EntityAddress updateAddress(@WebParam(name = "address")EntityAddress address)
522        throws RiceIllegalArgumentException, RiceIllegalStateException;
523
524    /**
525     * This will inactivate a {@link org.kuali.rice.kim.api.identity.address.EntityAddress} with the id passed in.
526     *
527     *
528     * @param id the unique id of the EntityAddress to inactivate
529     * @return the updated EntityAddress object.
530     * @throws RiceIllegalArgumentException if the id is null
531     * @throws RiceIllegalStateException if the address does not exist in the system.
532     */
533    @WebMethod(operationName="inactivateAddress")
534    @WebResult(name = "address")
535    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
536    EntityAddress inactivateAddress(@WebParam(name = "id") String id)
537        throws RiceIllegalArgumentException, RiceIllegalStateException;
538
539    /**
540     * This will create a {@link org.kuali.rice.kim.api.identity.email.EntityEmail} exactly like the email passed in.
541     *
542     * The EntityEmail object passed in must be populated with an entityId and a entityTypeCode
543     *
544     * @param email the EntityEmail to create
545     * @return the newly created EntityEmail object.
546     * @throws RiceIllegalArgumentException if the email is null
547     * @throws RiceIllegalStateException if the email already exists in the system or email is not populated with entityId and entityTypeCode
548     */
549    @WebMethod(operationName="addEmailToEntity")
550    @WebResult(name = "email")
551    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
552    EntityEmail addEmailToEntity(@WebParam(name = "email") EntityEmail email)
553        throws RiceIllegalArgumentException, RiceIllegalStateException;
554
555    /**
556     * This will update a {@link org.kuali.rice.kim.api.identity.email.EntityEmail} exactly like the email passed in.
557     *
558     *
559     * @param email the EntityEmail to update
560     * @return the updated EntityEmail object.
561     * @throws RiceIllegalArgumentException if the email is null
562     * @throws RiceIllegalStateException if the email does not exist in the system.
563     */
564    @WebMethod(operationName="updateEmail")
565    @WebResult(name = "email")
566    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
567    EntityEmail updateEmail(@WebParam(name = "email") EntityEmail email)
568        throws RiceIllegalArgumentException, RiceIllegalStateException;
569
570    /**
571     * This will inactivate the {@link org.kuali.rice.kim.api.identity.email.EntityEmail} with the passed in id.
572     *
573     *
574     * @param id the unique id of the EntityEmail to inactivate
575     * @return the inactivated EntityEmail object.
576     * @throws RiceIllegalArgumentException if the id is null
577     * @throws RiceIllegalStateException if the email does not exist in the system.
578     */
579    @WebMethod(operationName="inactivateEmail")
580    @WebResult(name = "email")
581    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
582    EntityEmail inactivateEmail(@WebParam(name = "id") String id)
583        throws RiceIllegalArgumentException, RiceIllegalStateException;
584
585    /**
586     * This will create a {@link org.kuali.rice.kim.api.identity.phone.EntityPhone} exactly like the phone passed in.
587     *
588     * The EntityPhone object passed in must be populated with an entityId and a entityTypeCode
589     *
590     * @param phone the EntityPhone to create
591     * @return the newly created EntityPhone object.
592     * @throws RiceIllegalArgumentException if the phone is null
593     * @throws RiceIllegalStateException if the phone already exists in the system or phone is not populated with entityId and entityTypeCode
594     */
595    @WebMethod(operationName="addPhoneToEntity")
596    @WebResult(name = "phone")
597    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
598    EntityPhone addPhoneToEntity(@WebParam(name = "phone") EntityPhone phone)
599        throws RiceIllegalArgumentException, RiceIllegalStateException;
600
601    /**
602     * This will update a {@link org.kuali.rice.kim.api.identity.phone.EntityPhone} exactly like the phone passed in.
603     *
604     *
605     * @param phone the EntityPhone to update
606     * @return the updated EntityPhone object.
607     * @throws RiceIllegalArgumentException if the phone is null
608     * @throws RiceIllegalStateException if the phone does not exist in the system.
609     */
610    @WebMethod(operationName="updatePhone")
611    @WebResult(name = "phone")
612    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
613    EntityPhone updatePhone(@WebParam(name = "phone") EntityPhone phone)
614            throws RiceIllegalArgumentException, RiceIllegalStateException;
615
616    /**
617     * This will inactivate the {@link org.kuali.rice.kim.api.identity.phone.EntityPhone} with the passed in id.
618     *
619     *
620     * @param id the unique id of the EntityPhone to inactivate
621     * @return the inactivated EntityPhone object.
622     * @throws RiceIllegalArgumentException if the id is null
623     * @throws RiceIllegalStateException if the phone does not exist in the system.
624     */
625    @WebMethod(operationName="inactivatePhone")
626    @WebResult(name = "phone")
627    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
628    EntityPhone inactivatePhone(@WebParam(name = "id") String id)
629        throws RiceIllegalArgumentException, RiceIllegalStateException;
630
631
632    /**
633     * This will create a {@link org.kuali.rice.kim.api.identity.external.EntityExternalIdentifier} exactly like the externalId passed in.
634     *
635     * The EntityExternalIdentifier object passed in must be populated with an entityId and a externalIdentifierTypeCode
636     *
637     * @param externalId the EntityExternalIdentifier to create
638     * @return the newly created EntityExternalIdentifier object.
639     * @throws RiceIllegalArgumentException if the externalId is null
640     * @throws RiceIllegalStateException if the externalId already exists in the system or externalId is not populated with entityId and externalIdentifierTypeCode
641     */
642    @WebMethod(operationName="addExternalIdentifierToEntity")
643    @WebResult(name = "externalId")
644    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
645    EntityExternalIdentifier addExternalIdentifierToEntity(@WebParam(name = "externalId") EntityExternalIdentifier externalId)
646        throws RiceIllegalArgumentException, RiceIllegalStateException;
647
648    /**
649     * This will update a {@link org.kuali.rice.kim.api.identity.external.EntityExternalIdentifier} exactly like the externalId passed in.
650     *
651     *
652     * @param externalId the EntityExternalIdentifier to update
653     * @return the updated EntityExternalIdentifier object.
654     * @throws RiceIllegalArgumentException if the externalId is null
655     * @throws RiceIllegalStateException if the externalId does not exist in the system.
656     */
657    @WebMethod(operationName="updateExternalIdentifier")
658    @WebResult(name = "externalId")
659    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
660    EntityExternalIdentifier updateExternalIdentifier(@WebParam(name = "externalId") EntityExternalIdentifier externalId)
661        throws RiceIllegalArgumentException, RiceIllegalStateException;
662
663    /**
664     * This will create a {@link org.kuali.rice.kim.api.identity.affiliation.EntityAffiliation} exactly like the affiliation passed in.
665     *
666     * The EntityAffiliation object passed in must be populated with an entityId and a affiliationType
667     *
668     * @param affiliation the EntityAffiliation to create
669     * @return the newly created EntityAffiliation object.
670     * @throws RiceIllegalArgumentException if the affiliation is null
671     * @throws RiceIllegalStateException if the affiliation already exists in the system or affiliation is not populated with entityId and affiliationType
672     */
673    @WebMethod(operationName="addAffiliationToEntity")
674    @WebResult(name = "affiliation")
675    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
676    EntityAffiliation addAffiliationToEntity(@WebParam(name = "affiliation") EntityAffiliation affiliation)
677        throws RiceIllegalArgumentException, RiceIllegalStateException;
678
679    /**
680     * This will update a {@link org.kuali.rice.kim.api.identity.affiliation.EntityAffiliation} exactly like the affiliation passed in.
681     *
682     *
683     * @param affiliation the EntityAffiliation to update
684     * @return the updated EntityAffiliation object.
685     * @throws RiceIllegalArgumentException if the affiliation is null
686     * @throws RiceIllegalStateException if the affiliation does not exist in the system.
687     */
688    @WebMethod(operationName="updateAffiliation")
689    @WebResult(name = "affiliation")
690    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
691    EntityAffiliation updateAffiliation(@WebParam(name = "affiliation") EntityAffiliation affiliation)
692        throws RiceIllegalArgumentException, RiceIllegalStateException;
693
694    /**
695     * This will inactivate a {@link org.kuali.rice.kim.api.identity.affiliation.EntityAffiliation} with the id passed in.
696     *
697     *
698     * @param id the unique id of the  EntityAffiliation to inactivate
699     * @return the updated EntityAffiliation object.
700     * @throws RiceIllegalArgumentException if the affiliation is null
701     * @throws RiceIllegalStateException if the affiliation does not exist in the system.
702     */
703    @WebMethod(operationName="inactivateAffiliation")
704    @WebResult(name = "affiliation")
705    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
706    EntityAffiliation inactivateAffiliation(@WebParam(name = "id") String id)
707        throws RiceIllegalArgumentException, RiceIllegalStateException;
708
709    /**
710     * This returns the display name information for the given principal
711     * without loading the full person object.
712     *
713     * @param principalId The principal ID to find the name information for
714     * @return The default name information for the principal
715     */
716    @WebMethod(operationName="getDefaultNamesForPrincipalId")
717    @WebResult(name="entityNamePrincipalName")
718    @Cacheable(value = EntityNamePrincipalName.Cache.NAME, key = "'principalId=' + #p0")
719    public EntityNamePrincipalName getDefaultNamesForPrincipalId(@WebParam(name = "principalId") String principalId);
720
721    /**
722     * This returns the display name information for the given principals without loading the full person object.
723     *
724     * @param principalIds A list of principal IDs to find the name information for
725     * @return A Map which is keyed by principal ID and the value is the default
726     *         name for that principal.  If an active, default name cannot be
727     *         found for a principal in the list it will be in the map with a null value.
728     */
729    @WebMethod(operationName="getDefaultNamesForPrincipalIds")
730    @WebResult(name="entityNamePrincipalNames")
731    public Map<String, EntityNamePrincipalName> getDefaultNamesForPrincipalIds(@WebParam(name = "principalIds") List<String> principalIds);
732
733    /**
734     * Returns the privacy preferences for the given principal id or null if the principal id is not valid.  Note method
735     *   converts list to a <code>HashSet</code> to ensure no duplicate look ups occur.
736     * @param principalId the principal id
737     * @return The privacy preferences for the given principal id, or null if the principal id is invalid.
738     */
739    @WebMethod(operationName="getPrivacyPreferencesForPrincipalId")
740    @WebResult(name="entityPrivacyPreferences")
741    @Cacheable(value = EntityPrivacyPreferences.Cache.NAME, key = "'principalId=' + #p0")
742    public EntityPrivacyPreferences getPrivacyPreferencesForPrincipalId(@WebParam(name = "principalId")String principalId);
743
744    /**
745     * This will create a {@link org.kuali.rice.kim.api.identity.name.EntityName} exactly like the name passed in.
746     *
747     * The EntityName object passed in must be populated with an entityId and a nameType
748     *
749     * @param name the EntityName to create
750     * @return the newly created EntityName object.
751     * @throws RiceIllegalArgumentException if the name is null
752     * @throws RiceIllegalStateException if the name already exists in the system or name is not populated with entityId and nameType
753     */
754    @WebMethod(operationName="addNameToEntity")
755    @WebResult(name = "name")
756    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME, EntityNamePrincipalName.Cache.NAME}, allEntries = true)
757    EntityName addNameToEntity(@WebParam(name = "name") EntityName name)
758        throws RiceIllegalArgumentException, RiceIllegalStateException;
759
760    /**
761     * This will update a {@link org.kuali.rice.kim.api.identity.name.EntityName} exactly like the name passed in.
762     *
763     *
764     * @param name the EntityName to update
765     * @return the updated EntityName object.
766     * @throws RiceIllegalArgumentException if the name is null
767     * @throws RiceIllegalStateException if the name does not exist in the system.
768     */
769    @WebMethod(operationName="updateName")
770    @WebResult(name = "name")
771    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME, EntityNamePrincipalName.Cache.NAME}, allEntries = true)
772    EntityName updateName(@WebParam(name = "name") EntityName name)
773        throws RiceIllegalArgumentException, RiceIllegalStateException;
774
775    /**
776     * This will inactivate a {@link org.kuali.rice.kim.api.identity.name.EntityName} with the passed in id.
777     *
778     *
779     * @param id the unique id of the EntityName to inactivate
780     * @return the inactivated EntityName object.
781     * @throws RiceIllegalArgumentException if the id is null
782     * @throws RiceIllegalStateException if the name with the id does not exist in the system.
783     */
784    @WebMethod(operationName="inactivateName")
785    @WebResult(name = "name")
786    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
787    EntityName inactivateName(@WebParam(name = "id") String id)
788        throws RiceIllegalArgumentException, RiceIllegalStateException;
789
790    /**
791     * This will create a {@link org.kuali.rice.kim.api.identity.employment.EntityEmployment} exactly like the employment passed in.
792     *
793     * The EntityEmployment object passed in must be populated with an entityId and a employmentType
794     *
795     * @param employment the EntityEmployment to create
796     * @return the newly created EntityName object.
797     * @throws RiceIllegalArgumentException if the employment is null
798     * @throws RiceIllegalStateException if the employment already exists in the system or employment is not populated with entityId and employmentType
799     */
800    @WebMethod(operationName="addEmploymentToEntity")
801    @WebResult(name = "employment")
802    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
803    EntityEmployment addEmploymentToEntity(@WebParam(name = "employment") EntityEmployment employment)
804        throws RiceIllegalArgumentException, RiceIllegalStateException;
805
806    /**
807     * This will update a {@link org.kuali.rice.kim.api.identity.employment.EntityEmployment} exactly like the employment passed in.
808     *
809     *
810     * @param employment the EntityEmployment to update
811     * @return the updated EntityEmployment object.
812     * @throws RiceIllegalArgumentException if the employment is null
813     * @throws RiceIllegalStateException if the employment does not exist in the system.
814     */
815    @WebMethod(operationName="updateEmployment")
816    @WebResult(name = "employment")
817    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
818    EntityEmployment updateEmployment(@WebParam(name = "employment") EntityEmployment employment)
819        throws RiceIllegalArgumentException, RiceIllegalStateException;
820
821    /**
822     * This will inactivate a {@link org.kuali.rice.kim.api.identity.employment.EntityEmployment} with the passed in id.
823     *
824     *
825     * @param id the unique id of the EntityEmployment to inactivate
826     * @return the inactivated EntityEmployment object.
827     * @throws RiceIllegalArgumentException if the id is null
828     * @throws RiceIllegalStateException if the employment with the id does not exist in the system.
829     */
830    @WebMethod(operationName="inactivateEmployment")
831    @WebResult(name = "employment")
832    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
833    EntityEmployment inactivateEmployment(@WebParam(name = "id") String id)
834        throws RiceIllegalArgumentException, RiceIllegalStateException;
835
836    /**
837     * This will create a {@link org.kuali.rice.kim.api.identity.personal.EntityBioDemographics} exactly like the bioDemographics passed in.
838     *
839     * The EntityBioDemographics object passed in must be populated with an entityId
840     *
841     * @param bioDemographics the EntityBioDemographics to create
842     * @return the newly created EntityBioDemographics object.
843     * @throws RiceIllegalArgumentException if the bioDemographics is null
844     * @throws RiceIllegalStateException if the bioDemographics already exists in the system or bioDemographics is not populated with entityId
845     */
846    @WebMethod(operationName="addBioDemographicsToEntity")
847    @WebResult(name = "bioDemographics")
848    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
849    EntityBioDemographics addBioDemographicsToEntity(@WebParam(name = "bioDemographics") EntityBioDemographics bioDemographics)
850        throws RiceIllegalArgumentException, RiceIllegalStateException;
851
852    /**
853     * This will update a {@link org.kuali.rice.kim.api.identity.personal.EntityBioDemographics} exactly like the bioDemographics passed in.
854     *
855     *
856     * @param bioDemographics the EntityBioDemographics to update
857     * @return the updated EntityBioDemographics object.
858     * @throws RiceIllegalArgumentException if the bioDemographics is null
859     * @throws RiceIllegalStateException if the bioDemographics does not exist in the system.
860     */
861    @WebMethod(operationName="updateBioDemographics")
862    @WebResult(name = "bioDemographics")
863    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
864    EntityBioDemographics updateBioDemographics(@WebParam(name = "bioDemographics") EntityBioDemographics bioDemographics)
865        throws RiceIllegalArgumentException, RiceIllegalStateException;
866
867    /**
868     * Gets a {@link org.kuali.rice.kim.api.identity.privacy.EntityPrivacyPreferences} for a given id.
869     *
870     * <p>
871     *   This method will return null if the EntityPrivacyPreferences does not exist.
872     * </p>
873     *
874     * @param id the unique id to retrieve the EntityPrivacyPreferences by. Cannot be null.
875     * @return a {@link org.kuali.rice.kim.api.identity.privacy.EntityPrivacyPreferences} or null
876     * @throws RiceIllegalArgumentException if the entityId is blank
877     */
878    @WebMethod(operationName = "getEntityPrivacyPreferences")
879    @WebResult(name = "privacyPreferences")
880    @Cacheable(value= EntityPrivacyPreferences.Cache.NAME, key="'id=' + #p0")
881        EntityPrivacyPreferences getEntityPrivacyPreferences( @WebParam(name="id") String id )  throws RiceIllegalArgumentException;
882
883    /**
884     * This will create a {@link org.kuali.rice.kim.api.identity.privacy.EntityPrivacyPreferences} exactly like the privacyPreferences passed in.
885     *
886     * The EntityPrivacyPreferences object passed in must be populated with an entityId
887     *
888     * @param privacyPreferences the EntityPrivacyPreferences to create
889     * @return the newly created EntityPrivacyPreferences object.
890     * @throws RiceIllegalArgumentException if the privacyPreferences is null
891     * @throws RiceIllegalStateException if the privacyPreferences already exists in the system or privacyPreferences is not populated with entityId
892     */
893    @WebMethod(operationName="addPrivacyPreferencesToEntity")
894    @WebResult(name = "privacyPreferences")
895    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME, EntityPrivacyPreferences.Cache.NAME}, allEntries = true)
896    EntityPrivacyPreferences addPrivacyPreferencesToEntity(@WebParam(name = "privacyPreferences") EntityPrivacyPreferences privacyPreferences)
897        throws RiceIllegalArgumentException, RiceIllegalStateException;
898
899    /**
900     * This will update a {@link org.kuali.rice.kim.api.identity.privacy.EntityPrivacyPreferences} exactly like the privacyPreferences passed in.
901     *
902     *
903     * @param privacyPreferences the EntityPrivacyPreferences to update
904     * @return the updated EntityPrivacyPreferences object.
905     * @throws RiceIllegalArgumentException if the privacyPreferences is null
906     * @throws RiceIllegalStateException if the privacyPreferences does not exist in the system.
907     */
908    @WebMethod(operationName="updatePrivacyPreferences")
909    @WebResult(name = "privacyPreferences")
910    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME, EntityPrivacyPreferences.Cache.NAME}, allEntries = true)
911    EntityPrivacyPreferences updatePrivacyPreferences(@WebParam(name = "privacyPreferences") EntityPrivacyPreferences privacyPreferences)
912        throws RiceIllegalArgumentException, RiceIllegalStateException;
913
914
915    /**
916     * This will create a {@link org.kuali.rice.kim.api.identity.citizenship.EntityCitizenship} exactly like the citizenship passed in.
917     *
918     * The EntityCitizenship object passed in must be populated with an entityId and a status
919     *
920     * @param citizenship the EntityCitizenship to create
921     * @return the newly created EntityCitizenship object.
922     * @throws RiceIllegalArgumentException if the citizenship is null
923     * @throws RiceIllegalStateException if the citizenship already exists in the system or citizenship is not populated with entityId and status
924     */
925    @WebMethod(operationName="addCitizenshipToEntity")
926    @WebResult(name = "citizenship")
927    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
928    EntityCitizenship addCitizenshipToEntity(@WebParam(name = "citizenship") EntityCitizenship citizenship)
929        throws RiceIllegalArgumentException, RiceIllegalStateException;
930
931    /**
932     * This will update a {@link org.kuali.rice.kim.api.identity.citizenship.EntityCitizenship} exactly like the citizenship passed in.
933     *
934     *
935     * @param citizenship the EntityCitizenship to update
936     * @return the updated EntityCitizenship object.
937     * @throws RiceIllegalArgumentException if the citizenship is null
938     * @throws RiceIllegalStateException if the citizenship does not exist in the system.
939     */
940    @WebMethod(operationName="updateCitizenship")
941    @WebResult(name = "citizenship")
942    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
943    EntityCitizenship updateCitizenship(@WebParam(name = "citizenship") EntityCitizenship citizenship)
944        throws RiceIllegalArgumentException, RiceIllegalStateException;
945
946    /**
947     * This will inactivate a {@link org.kuali.rice.kim.api.identity.citizenship.EntityCitizenship} with the unique id passed in.
948     *
949     *
950     * @param id the id of the EntityCitizenship to inactivate
951     * @return the inactivated EntityCitizenship object.
952     * @throws RiceIllegalArgumentException if the citizenship is null
953     * @throws RiceIllegalStateException if the citizenship does not exist in the system.
954     */
955    @WebMethod(operationName="inactivateCitizenship")
956    @WebResult(name = "citizenship")
957    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
958    EntityCitizenship inactivateCitizenship(@WebParam(name = "id") String id)
959        throws RiceIllegalArgumentException, RiceIllegalStateException;
960
961    /**
962     * This will create a {@link EntityEthnicity} exactly like the ethnicity passed in.
963     *
964     * The EntityEthnicity object passed in must be populated with an entityId and a ethnicity code
965     *
966     * @param ethnicity the EntityEthnicity to create
967     * @return the newly created EntityEthnicity object.
968     * @throws RiceIllegalArgumentException if the ethnicity is null
969     * @throws RiceIllegalStateException if the ethnicity already exists in the system or ethnicity is not populated with entityId and ethnicity code
970     */
971    @WebMethod(operationName="addEthnicityToEntity")
972    @WebResult(name = "ethnicity")
973    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
974    EntityEthnicity addEthnicityToEntity(@WebParam(name = "ethnicity") EntityEthnicity ethnicity)
975        throws RiceIllegalArgumentException, RiceIllegalStateException;
976
977    /**
978     * This will update a {@link EntityEthnicity} exactly like the ethnicity passed in.
979     *
980     *
981     * @param ethnicity the EntityEthnicity to update
982     * @return the updated EntityEthnicity object.
983     * @throws RiceIllegalArgumentException if the ethnicity is null
984     * @throws RiceIllegalStateException if the ethnicity does not exist in the system.
985     */
986    @WebMethod(operationName="updateEthnicity")
987    @WebResult(name = "ethnicity")
988    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
989    EntityEthnicity updateEthnicity(@WebParam(name = "ethnicity") EntityEthnicity ethnicity)
990        throws RiceIllegalArgumentException, RiceIllegalStateException;
991
992    /**
993     * This will create a {@link org.kuali.rice.kim.api.identity.residency.EntityResidency} exactly like the residency passed in.
994     *
995     * The EntityResidency object passed in must be populated with an entityId
996     *
997     * @param residency the EntityResidency to create
998     * @return the newly created EntityResidency object.
999     * @throws RiceIllegalArgumentException if the residency is null
1000     * @throws RiceIllegalStateException if the residency already exists in the system or residency is not populated with entityId
1001     */
1002    @WebMethod(operationName="addResidencyToEntity")
1003    @WebResult(name = "residency")
1004    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
1005    EntityResidency addResidencyToEntity(@WebParam(name = "residency") EntityResidency residency)
1006        throws RiceIllegalArgumentException, RiceIllegalStateException;
1007
1008    /**
1009     * This will update a {@link org.kuali.rice.kim.api.identity.residency.EntityResidency} exactly like the residency passed in.
1010     *
1011     *
1012     * @param residency the EntityResidency to update
1013     * @return the updated EntityResidency object.
1014     * @throws RiceIllegalArgumentException if the residency is null
1015     * @throws RiceIllegalStateException if the residency does not exist in the system.
1016     */
1017    @WebMethod(operationName="updateResidency")
1018    @WebResult(name = "residency")
1019    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
1020    EntityResidency updateResidency(@WebParam(name = "residency") EntityResidency residency)
1021        throws RiceIllegalArgumentException, RiceIllegalStateException;
1022
1023
1024    /**
1025     * This will create a {@link org.kuali.rice.kim.api.identity.visa.EntityVisa} exactly like the visa passed in.
1026     *
1027     * The EntityVisa object passed in must be populated with an entityId and a visaTypeKey
1028     *
1029     * @param visa the EntityVisa to create
1030     * @return the newly created EntityVisa object.
1031     * @throws RiceIllegalArgumentException if the visa is null
1032     * @throws RiceIllegalStateException if the visa already exists in the system or visa is not populated with entityId and a visaTypeKey
1033     */
1034    @WebMethod(operationName="addVisaToEntity")
1035    @WebResult(name = "visa")
1036    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
1037    EntityVisa addVisaToEntity(@WebParam(name = "visa") EntityVisa visa)
1038        throws RiceIllegalArgumentException, RiceIllegalStateException;
1039
1040    /**
1041     * This will update a {@link org.kuali.rice.kim.api.identity.visa.EntityVisa} exactly like the visa passed in.
1042     *
1043     *
1044     * @param visa the EntityVisa to update
1045     * @return the updated EntityVisa object.
1046     * @throws RiceIllegalArgumentException if the visa is null
1047     * @throws RiceIllegalStateException if the visa does not exist in the system.
1048     */
1049    @WebMethod(operationName="updateVisa")
1050    @WebResult(name = "visa")
1051    @CacheEvict(value={Entity.Cache.NAME, EntityDefault.Cache.NAME}, allEntries = true)
1052    EntityVisa updateVisa(@WebParam(name = "visa") EntityVisa visa)
1053        throws RiceIllegalArgumentException, RiceIllegalStateException;
1054
1055    /**
1056     * Gets the {@link org.kuali.rice.kim.api.identity.CodedAttribute} for a given EntityType code.
1057     *
1058     * <p>
1059     *   This method will return null if the code does not exist.
1060     * </p>
1061     *
1062     * @param code the unique id to retrieve the Type by. Cannot be null.
1063     * @return a {@link org.kuali.rice.kim.api.identity.CodedAttribute} or null
1064     * @throws RiceIllegalArgumentException if the code is blank
1065     */
1066    @WebMethod(operationName = "getEntityType")
1067    @WebResult(name = "type")
1068    @Cacheable(value= CodedAttribute.Cache.NAME + "{EntityType}", key="'code=' + #p0")
1069        CodedAttribute getEntityType( @WebParam(name="code") String code ) throws RiceIllegalArgumentException;
1070
1071    /**
1072     * Finds all EntityTypes
1073     *
1074     * @since 2.0.1
1075     * @return a list of {@link org.kuali.rice.kim.api.identity.CodedAttribute}
1076     */
1077    @WebMethod(operationName = "findAllEntityTypes")
1078    @WebResult(name = "types")
1079    @Cacheable(value= CodedAttribute.Cache.NAME + "{EntityType}", key="'all'")
1080    List<CodedAttribute> findAllEntityTypes();
1081
1082    /**
1083     * Gets the {@link org.kuali.rice.kim.api.identity.CodedAttribute} for a given EntityAddressType code.
1084     *
1085     * <p>
1086     *   This method will return null if the code does not exist.
1087     * </p>
1088     *
1089     * @param code the unique id to retrieve the Type by. Cannot be null.
1090     * @return a {@link org.kuali.rice.kim.api.identity.CodedAttribute} or null
1091     * @throws RiceIllegalArgumentException if the code is blank
1092     */
1093    @WebMethod(operationName = "getAddressType")
1094    @WebResult(name = "type")
1095    @Cacheable(value= CodedAttribute.Cache.NAME + "{AddressType}", key="'code=' + #p0")
1096        CodedAttribute getAddressType( @WebParam(name="code") String code ) throws RiceIllegalArgumentException;
1097
1098    /**
1099     * Finds all EntityAddressTypes
1100     *
1101     * @since 2.0.1
1102     * @return a list of {@link org.kuali.rice.kim.api.identity.CodedAttribute}
1103     */
1104    @WebMethod(operationName = "findAllAddressTypes")
1105    @WebResult(name = "types")
1106    @Cacheable(value= CodedAttribute.Cache.NAME + "{AddressType}", key="'all'")
1107    List<CodedAttribute> findAllAddressTypes();
1108
1109
1110    /**
1111     * Gets the {@link org.kuali.rice.kim.api.identity.affiliation.EntityAffiliationType} for a given EntityAffiliationType code.
1112     *
1113     * <p>
1114     *   This method will return null if the code does not exist.
1115     * </p>
1116     *
1117     * @param code the unique id to retrieve the EntityAffiliationType by. Cannot be null.
1118     * @return a {@link org.kuali.rice.kim.api.identity.affiliation.EntityAffiliationType} or null
1119     * @throws RiceIllegalArgumentException if the code is blank
1120     */
1121    @WebMethod(operationName = "getAffiliationType")
1122    @WebResult(name = "affiliationType")
1123    @Cacheable(value= CodedAttribute.Cache.NAME + "{AffiliationType}", key="'code=' + #p0")
1124        EntityAffiliationType getAffiliationType( @WebParam(name="code") String code )  throws RiceIllegalArgumentException;
1125
1126    /**
1127     * Finds all EntityAffiliationTypes
1128     *
1129     * @since 2.0.1
1130     * @return a list of {@link org.kuali.rice.kim.api.identity.affiliation.EntityAffiliationType}
1131     */
1132    @WebMethod(operationName = "findAllAffiliationTypes")
1133    @WebResult(name = "types")
1134    @Cacheable(value= CodedAttribute.Cache.NAME + "{AffiliationType}", key="'all'")
1135    List<EntityAffiliationType> findAllAffiliationTypes();
1136
1137    /**
1138     * Gets the {@link org.kuali.rice.kim.api.identity.CodedAttribute} for a given EntityCitizenship status code.
1139     *
1140     * <p>
1141     *   This method will return null if the code does not exist.
1142     * </p>
1143     *
1144     * @param code the unique id to retrieve the Type by. Cannot be null.
1145     * @return a {@link org.kuali.rice.kim.api.identity.CodedAttribute} or null
1146     * @throws RiceIllegalArgumentException if the code is blank
1147     */
1148    @WebMethod(operationName = "getCitizenshipStatus")
1149    @WebResult(name = "type")
1150    @Cacheable(value= CodedAttribute.Cache.NAME + "{CitizenshipStatus}", key="'code=' + #p0")
1151        CodedAttribute getCitizenshipStatus( @WebParam(name="code") String code ) throws RiceIllegalArgumentException;
1152
1153    /**
1154     * Finds all EntityCitizenshipStatuses
1155     *
1156     * @since 2.0.1
1157     * @return a list of {@link org.kuali.rice.kim.api.identity.CodedAttribute}
1158     */
1159    @WebMethod(operationName = "findAllCitizenshipStatuses")
1160    @WebResult(name = "types")
1161    @Cacheable(value= CodedAttribute.Cache.NAME + "{CitizenshipStatus}", key="'all'")
1162    List<CodedAttribute> findAllCitizenshipStatuses();
1163
1164    /**
1165     * Gets the {@link org.kuali.rice.kim.api.identity.CodedAttribute} for a given EntityEmployment type code.
1166     *
1167     * <p>
1168     *   This method will return null if the code does not exist.
1169     * </p>
1170     *
1171     * @param code the unique id to retrieve the Type by. Cannot be null.
1172     * @return a {@link org.kuali.rice.kim.api.identity.CodedAttribute} or null
1173     * @throws RiceIllegalArgumentException if the code is blank
1174     */
1175    @WebMethod(operationName = "getEmploymentType")
1176    @WebResult(name = "type")
1177    @Cacheable(value= CodedAttribute.Cache.NAME + "{EmploymentType}", key="'code=' + #p0")
1178        CodedAttribute getEmploymentType( @WebParam(name="code") String code ) throws RiceIllegalArgumentException;
1179
1180    /**
1181     * Finds all EntityEmploymentTypes
1182     *
1183     * @since 2.0.1
1184     * @return a list of {@link org.kuali.rice.kim.api.identity.CodedAttribute}
1185     */
1186    @WebMethod(operationName = "findAllEmploymentTypes")
1187    @WebResult(name = "types")
1188    @Cacheable(value= CodedAttribute.Cache.NAME + "{EmploymentType}", key="'all'")
1189    List<CodedAttribute> findAllEmploymentTypes();
1190
1191    /**
1192     * Gets the {@link org.kuali.rice.kim.api.identity.CodedAttribute} for a given EntityEmployment status code.
1193     *
1194     * <p>
1195     *   This method will return null if the code does not exist.
1196     * </p>
1197     *
1198     * @param code the unique id to retrieve the Type by. Cannot be null.
1199     * @return a {@link org.kuali.rice.kim.api.identity.CodedAttribute} or null
1200     * @throws RiceIllegalArgumentException if the code is blank
1201     */
1202    @WebMethod(operationName = "getEmploymentStatus")
1203    @WebResult(name = "type")
1204    @Cacheable(value= CodedAttribute.Cache.NAME + "{EmploymentStatus}", key="'code=' + #p0")
1205        CodedAttribute getEmploymentStatus( @WebParam(name="code") String code ) throws RiceIllegalArgumentException;
1206
1207    /**
1208     * Finds all EntityEmploymentStatuses
1209     *
1210     * @since 2.0.1
1211     * @return a list of {@link org.kuali.rice.kim.api.identity.CodedAttribute}
1212     */
1213    @WebMethod(operationName = "findAllEmploymentStatuses")
1214    @WebResult(name = "types")
1215    @Cacheable(value= CodedAttribute.Cache.NAME + "{EmploymentStatus}", key="'all'")
1216    List<CodedAttribute> findAllEmploymentStatuses();
1217
1218    /**
1219     * Gets the {@link org.kuali.rice.kim.api.identity.external.EntityExternalIdentifierType} for a given type code.
1220     *
1221     * <p>
1222     *   This method will return null if the code does not exist.
1223     * </p>
1224     *
1225     * @param code the unique id to retrieve the EntityExternalIdentifierType by. Cannot be null.
1226     * @return a {@link org.kuali.rice.kim.api.identity.CodedAttribute} or null
1227     * @throws RiceIllegalArgumentException if the code is blank
1228     */
1229    @WebMethod(operationName = "getExternalIdentifierType")
1230    @WebResult(name = "type")
1231    @Cacheable(value= CodedAttribute.Cache.NAME + "{ExternalIdentifierType}", key="'code=' + #p0")
1232        EntityExternalIdentifierType getExternalIdentifierType( @WebParam(name="code") String code )  throws RiceIllegalArgumentException;
1233
1234    /**
1235     * Finds all ExternalIdentifierTypes
1236     *
1237     * @since 2.0.1
1238     * @return a list of {@link org.kuali.rice.kim.api.identity.external.EntityExternalIdentifierType}
1239     */
1240    @WebMethod(operationName = "findAllExternalIdentifierTypeTypes")
1241    @WebResult(name = "types")
1242    @Cacheable(value= CodedAttribute.Cache.NAME + "{ExternalIdentifierType}", key="'all'")
1243    List<EntityExternalIdentifierType> findAllExternalIdendtifierTypes();
1244
1245    /**
1246     * Gets the {@link org.kuali.rice.kim.api.identity.CodedAttribute} for a given EntityName type code.
1247     *
1248     * <p>
1249     *   This method will return null if the code does not exist.
1250     * </p>
1251     *
1252     * @param code the unique id to retrieve the Type by. Cannot be null.
1253     * @return a {@link org.kuali.rice.kim.api.identity.CodedAttribute} or null
1254     * @throws RiceIllegalArgumentException if the code is blank
1255     */
1256    @WebMethod(operationName = "getNameType")
1257    @WebResult(name = "type")
1258    @Cacheable(value= CodedAttribute.Cache.NAME + "{NameType}", key="'code=' + #p0")
1259        CodedAttribute getNameType(@WebParam(name = "code") String code) throws RiceIllegalArgumentException;
1260
1261    /**
1262     * Finds all EntityNameTypes
1263     *
1264     * @since 2.0.1
1265     * @return a list of {@link org.kuali.rice.kim.api.identity.CodedAttribute}
1266     */
1267    @WebMethod(operationName = "findAllNameTypes")
1268    @WebResult(name = "types")
1269    @Cacheable(value= CodedAttribute.Cache.NAME + "{NameType}", key="'all'")
1270    List<CodedAttribute> findAllNameTypes();
1271
1272    /**
1273     * Gets the {@link org.kuali.rice.kim.api.identity.CodedAttribute} for a given EntityPhone type code.
1274     *
1275     * <p>
1276     *   This method will return null if the code does not exist.
1277     * </p>
1278     *
1279     * @param code the unique id to retrieve the Type by. Cannot be null.
1280     * @return a {@link org.kuali.rice.kim.api.identity.CodedAttribute} or null
1281     * @throws RiceIllegalArgumentException if the code is blank
1282     */
1283    @WebMethod(operationName = "getPhoneType")
1284    @WebResult(name = "type")
1285    @Cacheable(value= CodedAttribute.Cache.NAME + "{PhoneType}", key="'code=' + #p0")
1286        CodedAttribute getPhoneType( @WebParam(name="code") String code ) throws RiceIllegalArgumentException;
1287
1288    /**
1289     * Finds all EntityPhoneTypes
1290     *
1291     * @since 2.0.1
1292     * @return a list of {@link org.kuali.rice.kim.api.identity.CodedAttribute}
1293     */
1294    @WebMethod(operationName = "findAllPhoneTypes")
1295    @WebResult(name = "types")
1296    @Cacheable(value= CodedAttribute.Cache.NAME + "{PhoneType}", key="'all'")
1297    List<CodedAttribute> findAllPhoneTypes();
1298
1299    /**
1300     * Gets the {@link org.kuali.rice.kim.api.identity.CodedAttribute} for a given EntityEmail type code.
1301     *
1302     * <p>
1303     *   This method will return null if the code does not exist.
1304     * </p>
1305     *
1306     * @param code the unique id to retrieve the Type by. Cannot be null.
1307     * @return a {@link org.kuali.rice.kim.api.identity.CodedAttribute} or null
1308     * @throws RiceIllegalArgumentException if the code is blank
1309     */
1310    @WebMethod(operationName = "getEmailType")
1311    @WebResult(name = "type")
1312    @Cacheable(value= CodedAttribute.Cache.NAME + "{EmailType}", key="'code=' + #p0")
1313        CodedAttribute getEmailType( @WebParam(name="code") String code ) throws RiceIllegalArgumentException;
1314
1315    /**
1316     * Finds all EntityEmailTypes
1317     *
1318     * @since 2.0.1
1319     * @return a list of {@link org.kuali.rice.kim.api.identity.CodedAttribute}
1320     */
1321    @WebMethod(operationName = "findAllEmailTypes")
1322    @WebResult(name = "types")
1323    @Cacheable(value= CodedAttribute.Cache.NAME + "{EmailType}", key="'all'")
1324    List<CodedAttribute> findAllEmailTypes();
1325
1326    /**
1327     * This method finds Principals based on a query criteria.  The criteria cannot be null.
1328     *
1329     * @since 2.0.1
1330     * @param query the criteria.  Cannot be null.
1331     * @return query results.  will never return null.
1332     * @throws IllegalArgumentException if the queryByCriteria is null
1333     */
1334    @WebMethod(operationName = "findPrincipals")
1335    @WebResult(name = "results")
1336    PrincipalQueryResults findPrincipals(@WebParam(name = "query") QueryByCriteria query)  throws RiceIllegalArgumentException;
1337}