/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.security.userstore.connector.config;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import com.enonic.cms.core.security.userstore.config.AbstractPolicyConfig;
public final class UserPolicyConfig
extends AbstractPolicyConfig
{
static final String POLICY_ALL = "all";
static final String POLICY_CREATE = "create";
static final String POLICY_UPDATE = "update";
static final String POLICY_UPDATE_PASSWORD = "updatepassword";
static final String POLICY_DELETE = "delete";
/**
* Read is always true for a remote user store connector
*/
private boolean read = true;
private boolean create = false;
private boolean update = false;
private boolean updatePassword = false;
private boolean delete = false;
public static final UserPolicyConfig ALL_FALSE = new UserPolicyConfig();
private UserPolicyConfig()
{
}
public UserPolicyConfig( final String configName, final String policies )
throws InvalidUserStoreConnectorConfigException
{
final List<String> policyList = parsePolicies( policies );
final List<String> supportedPolicies = getSupportedPolicies();
for ( final String policy : policyList )
{
if ( StringUtils.isBlank( policy ) )
{
continue;
}
if ( !supportedPolicies.contains( policy ) )
{
throw new InvalidUserStoreConnectorConfigException( configName, "User policy '" + policy + "' not supported" );
}
}
if ( policyList.contains( POLICY_ALL ) && policyList.size() > 1 )
{
throw new InvalidUserStoreConnectorConfigException( configName,
"User policy '" + POLICY_ALL + "' cannot be combined with other policies" );
}
if ( policyList.contains( POLICY_ALL ) || policyList.contains( POLICY_CREATE ) )
{
create = true;
}
if ( policyList.contains( POLICY_ALL ) || policyList.contains( POLICY_UPDATE ) )
{
update = true;
}
if ( policyList.contains( POLICY_ALL ) || policyList.contains( POLICY_UPDATE_PASSWORD ) )
{
updatePassword = true;
}
if ( policyList.contains( POLICY_ALL ) || policyList.contains( POLICY_DELETE ) )
{
delete = true;
}
}
private static List<String> getSupportedPolicies()
{
final List<String> supportedPolicies = new ArrayList<String>();
supportedPolicies.add( POLICY_ALL );
supportedPolicies.add( POLICY_CREATE );
supportedPolicies.add( POLICY_UPDATE );
supportedPolicies.add( POLICY_UPDATE_PASSWORD );
supportedPolicies.add( POLICY_DELETE );
return supportedPolicies;
}
public boolean canCreate()
{
return create;
}
public boolean canUpdate()
{
return update;
}
public boolean canUpdatePassword()
{
return updatePassword;
}
public boolean canDelete()
{
return delete;
}
}