/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.security.user;
import org.apache.commons.lang.StringUtils;
import com.enonic.cms.api.client.model.user.UserInfo;
import com.enonic.cms.api.plugin.ext.userstore.UserStoreConfig;
import com.enonic.cms.api.plugin.ext.userstore.UserStoreConfigField;
import com.enonic.cms.api.plugin.ext.userstore.UserField;
import com.enonic.cms.api.plugin.ext.userstore.UserFieldType;
import com.enonic.cms.api.plugin.ext.userstore.UserFields;
import com.enonic.cms.core.user.field.UserInfoTransformer;
public class RequiredUserFieldsValidator
{
private UserStoreConfig userStoreConfig;
public RequiredUserFieldsValidator( UserStoreConfig userStoreConfig )
{
this.userStoreConfig = userStoreConfig;
}
public void validateAllRequiredFieldsArePresentAndNotEmpty( final UserInfo userInfo )
{
validateAllRequiredFieldsArePresentAndNotEmpty( new UserInfoTransformer().toUserFields( userInfo ) );
}
public void validateAllRequiredFieldsArePresentAndNotEmpty( final UserFields userFields )
{
for ( final UserStoreConfigField userFieldConfig : userStoreConfig.getUserFieldConfigs() )
{
final UserFieldType type = userFieldConfig.getType();
if ( userFieldConfig.isRequired() )
{
final UserField field = userFields.getField( type );
if ( field == null || isBlank( field ) )
{
throw new MissingRequiredUserFieldException( type );
}
}
}
}
public void validatePresentFieldsAreNotBlankIfRequired( final UserFields userFields )
{
for ( final UserStoreConfigField userFieldConfig : userStoreConfig.getUserFieldConfigs() )
{
final UserFieldType type = userFieldConfig.getType();
if ( userFieldConfig.isRequired() )
{
final UserField field = userFields.getField( type );
if ( field != null && isBlank( field ) )
{
throw new MissingRequiredUserFieldException( type );
}
}
}
}
private boolean isBlank( final UserField userField )
{
Object value = userField.getValue();
if ( value instanceof String )
{
return StringUtils.isBlank( (String) value );
}
else if ( value instanceof byte[] )
{
return ( (byte[]) value ).length == 0;
}
return value == null;
}
}