/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.security.userstore.connector.config;
import com.enonic.cms.core.security.userstore.config.AbstractPolicyConfig;
import java.util.ArrayList;
import java.util.List;
public final class GroupPolicyConfig
extends AbstractPolicyConfig
{
static final String POLICY_ALL = "all";
static final String POLICY_NONE = "none";
static final String POLICY_LOCAL = "local";
static final String POLICY_READ = "read";
static final String POLICY_CREATE = "create";
static final String POLICY_UPDATE = "update";
static final String POLICY_DELETE = "delete";
private boolean local = false;
private boolean read = false;
private boolean create = false;
private boolean update = false;
private boolean delete = false;
public final static GroupPolicyConfig ALL_FALSE = new GroupPolicyConfig();
private GroupPolicyConfig()
{
}
public GroupPolicyConfig( final String configName, final String policies )
{
final List<String> policyList = parsePolicies( policies );
if ( policyList.size() == 0 )
{
throw new InvalidUserStoreConnectorConfigException( configName, "No group policy found (at least one must be specified)" );
}
final List<String> supportedPolicies = getSupportedPolicies();
for ( final String policy : policyList )
{
if ( !supportedPolicies.contains( policy ) )
{
throw new InvalidUserStoreConnectorConfigException( configName, "Group policy '" + policy + "' not supported" );
}
}
if ( policyList.contains( POLICY_ALL ) && policyList.size() != 1 )
{
throw new InvalidUserStoreConnectorConfigException( configName, "Group policy '" + POLICY_ALL +
"' cannot be combined with other policies" );
}
if ( policyList.contains( POLICY_NONE ) && policyList.size() != 1 )
{
throw new InvalidUserStoreConnectorConfigException( configName, "Group policy '" + POLICY_NONE +
"' cannot be combined with other policies" );
}
if ( policyList.contains( POLICY_LOCAL ) && policyList.size() != 1 )
{
throw new InvalidUserStoreConnectorConfigException( configName, "Group policy '" + POLICY_LOCAL +
"' cannot be combined with other policies" );
}
if ( policyList.contains( POLICY_LOCAL ) )
{
if ( policyList.size() != 1 )
{
throw new InvalidUserStoreConnectorConfigException( configName, "Group policy '" + POLICY_LOCAL +
"' cannot be combined with other policies" );
}
local = true;
create = true;
update = true;
delete = true;
}
if ( policyList.contains( POLICY_ALL ) || policyList.contains( POLICY_READ ) )
{
read = true;
}
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_DELETE ) )
{
delete = true;
}
}
private static List<String> getSupportedPolicies()
{
final List<String> supportedPolicies = new ArrayList<String>();
supportedPolicies.add( POLICY_ALL );
supportedPolicies.add( POLICY_NONE );
supportedPolicies.add( POLICY_LOCAL );
supportedPolicies.add( POLICY_READ );
supportedPolicies.add( POLICY_CREATE );
supportedPolicies.add( POLICY_UPDATE );
supportedPolicies.add( POLICY_DELETE );
return supportedPolicies;
}
public boolean useLocal()
{
return local;
}
public boolean useRemote()
{
return !local;
}
public boolean canRead()
{
return read;
}
public boolean canCreate()
{
return create;
}
public boolean canUpdate()
{
return update;
}
public boolean canDelete()
{
return delete;
}
}