in src/main/java/org/apache/directory/fortress/core/impl/UserDAO.java [379:523]
User update( User entity ) throws UpdateException
{
LdapConnection ld = null;
String userDn = getDn( entity.getUserId(), entity.getContextId() );
boolean setRelaxControl = false;
try
{
List<Modification> mods = new ArrayList<Modification>();
if ( StringUtils.isNotEmpty( entity.getCn() ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, SchemaConstants.CN_AT,
entity.getCn() ) );
}
if ( StringUtils.isNotEmpty( entity.getSn() ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, SchemaConstants.SN_AT,
entity.getSn() ) );
}
if ( StringUtils.isNotEmpty( entity.getOu() ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, SchemaConstants.OU_AT,
entity.getOu() ) );
}
if ( StringUtils.isNotEmpty( entity.getPassword() ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, SchemaConstants
.USER_PASSWORD_AT, entity.getPassword() ) );
}
if ( StringUtils.isNotEmpty( entity.getDescription() ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, SchemaConstants
.DESCRIPTION_AT, entity.getDescription() ) );
}
if ( StringUtils.isNotEmpty( entity.getEmployeeType() ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, EMPLOYEE_TYPE, entity
.getEmployeeType() ) );
}
if ( StringUtils.isNotEmpty( entity.getDisplayName() ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, SchemaConstants.DISPLAY_NAME_AT, entity.getDisplayName() ) );
}
if ( StringUtils.isNotEmpty( entity.getTitle() ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, SchemaConstants.TITLE_AT,
entity.getTitle() ) );
}
// If password policy is set and either openldap or apacheds in use:
if ( ( Config.getInstance().isOpenldap() || Config.getInstance().isApacheds() ) && StringUtils.isNotEmpty( entity.getPwPolicy() ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, OPENLDAP_POLICY_SUBENTRY,
PolicyDAO.getPolicyDn( entity ) ) );
setRelaxControl = true;
}
if ( entity.isSystem() != null )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, SYSTEM_USER, entity
.isSystem().toString().toUpperCase() ) );
}
if ( entity.isTemporalSet() )
{
// map the userid to the name field in constraint:
entity.setName( entity.getUserId() );
String szRawData = ConstraintUtil.setConstraint( entity );
if ( StringUtils.isNotEmpty( szRawData ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, GlobalIds.CONSTRAINT,
szRawData ) );
}
}
if ( PropUtil.isNotEmpty( entity.getProperties() ) )
{
loadProperties( entity.getProperties(), mods, GlobalIds.PROPS, true );
}
loadAddress( entity.getAddress(), mods );
// These are multi-valued attributes, use the util function to load:
loadAttrs( entity.getPhones(), mods, SchemaConstants.TELEPHONE_NUMBER_AT );
loadAttrs( entity.getMobiles(), mods, MOBILE );
loadAttrs( entity.getEmails(), mods, SchemaConstants.MAIL_AT );
if ( ArrayUtils.isNotEmpty( entity.getJpegPhoto() ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, JPEGPHOTO, entity
.getJpegPhoto() ) );
}
// These are the posixAccount attributes specified by RFC2307bis (proposed) IETF standard:
if ( IS_RFC2307 )
{
if ( StringUtils.isNotEmpty( entity.getUidNumber() ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, GlobalIds.UID_NUMBER,
entity.getUidNumber() ) );
}
if ( StringUtils.isNotEmpty( entity.getGidNumber() ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, GlobalIds.GID_NUMBER,
entity.getGidNumber() ) );
}
// if not set, generate:
if ( StringUtils.isNotEmpty( entity.getHomeDirectory() ) )
{
mods.add( new DefaultModification( ModificationOperation.REPLACE_ATTRIBUTE, HOME_DIRECTORY,
entity.getHomeDirectory() ) );
}
}
if ( mods.size() > 0 )
{
ld = getAdminConnection();
modify( ld, userDn, mods, entity, setRelaxControl );
entity.setDn( userDn );
}
entity.setDn( userDn );
}
catch ( LdapException e )
{
String error = "update userId [" + entity.getUserId() + "] caught LDAPException=" + e;
throw new UpdateException( GlobalErrIds.USER_UPDATE_FAILED, error, e );
}
finally
{
closeAdminConnection( ld );
}
return entity;
}