blob: 730995fc375d2813b111b546874df253a84961bc [file] [log] [blame]
//
// ========================================================================
// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
//
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
//
package org.eclipse.jetty.security;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
/**
*
* Badly named class that holds the role and user data constraint info for a
* path/http method combination, extracted and combined from security
* constraints.
*
* @version $Rev: 4793 $ $Date: 2009-03-19 00:00:01 +0100 (Thu, 19 Mar 2009) $
*/
public class RoleInfo
{
private boolean _isAnyRole;
private boolean _checked;
private boolean _forbidden;
private UserDataConstraint _userDataConstraint;
private final Set<String> _roles = new CopyOnWriteArraySet<String>();
public RoleInfo()
{
}
public boolean isChecked()
{
return _checked;
}
public void setChecked(boolean checked)
{
this._checked = checked;
if (!checked)
{
_forbidden=false;
_roles.clear();
_isAnyRole=false;
}
}
public boolean isForbidden()
{
return _forbidden;
}
public void setForbidden(boolean forbidden)
{
this._forbidden = forbidden;
if (forbidden)
{
_checked = true;
_userDataConstraint = null;
_isAnyRole=false;
_roles.clear();
}
}
public boolean isAnyRole()
{
return _isAnyRole;
}
public void setAnyRole(boolean anyRole)
{
this._isAnyRole=anyRole;
if (anyRole)
{
_checked = true;
_roles.clear();
}
}
public UserDataConstraint getUserDataConstraint()
{
return _userDataConstraint;
}
public void setUserDataConstraint(UserDataConstraint userDataConstraint)
{
if (userDataConstraint == null) throw new NullPointerException("Null UserDataConstraint");
if (this._userDataConstraint == null)
{
this._userDataConstraint = userDataConstraint;
}
else
{
this._userDataConstraint = this._userDataConstraint.combine(userDataConstraint);
}
}
public Set<String> getRoles()
{
return _roles;
}
public void addRole(String role)
{
_roles.add(role);
}
public void combine(RoleInfo other)
{
if (other._forbidden)
setForbidden(true);
else if (!other._checked) // TODO is this the right way around???
setChecked(true);
else if (other._isAnyRole)
setAnyRole(true);
else if (!_isAnyRole)
{
for (String r : other._roles)
_roles.add(r);
}
setUserDataConstraint(other._userDataConstraint);
}
@Override
public String toString()
{
return "{RoleInfo"+(_forbidden?",F":"")+(_checked?",C":"")+(_isAnyRole?",*":_roles)+"}";
}
}