blob: 730995fc375d2813b111b546874df253a84961bc [file] [log] [blame]
Jake Slack03928ae2014-05-13 18:41:56 -07001//
2// ========================================================================
3// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
4// ------------------------------------------------------------------------
5// All rights reserved. This program and the accompanying materials
6// are made available under the terms of the Eclipse Public License v1.0
7// and Apache License v2.0 which accompanies this distribution.
8//
9// The Eclipse Public License is available at
10// http://www.eclipse.org/legal/epl-v10.html
11//
12// The Apache License v2.0 is available at
13// http://www.opensource.org/licenses/apache2.0.php
14//
15// You may elect to redistribute this code under either of these licenses.
16// ========================================================================
17//
18
19package org.eclipse.jetty.security;
20
21import java.util.Set;
22import java.util.concurrent.CopyOnWriteArraySet;
23
24/**
25 *
26 * Badly named class that holds the role and user data constraint info for a
27 * path/http method combination, extracted and combined from security
28 * constraints.
29 *
30 * @version $Rev: 4793 $ $Date: 2009-03-19 00:00:01 +0100 (Thu, 19 Mar 2009) $
31 */
32public class RoleInfo
33{
34 private boolean _isAnyRole;
35 private boolean _checked;
36 private boolean _forbidden;
37 private UserDataConstraint _userDataConstraint;
38
39 private final Set<String> _roles = new CopyOnWriteArraySet<String>();
40
41 public RoleInfo()
42 {
43 }
44
45 public boolean isChecked()
46 {
47 return _checked;
48 }
49
50 public void setChecked(boolean checked)
51 {
52 this._checked = checked;
53 if (!checked)
54 {
55 _forbidden=false;
56 _roles.clear();
57 _isAnyRole=false;
58 }
59 }
60
61 public boolean isForbidden()
62 {
63 return _forbidden;
64 }
65
66 public void setForbidden(boolean forbidden)
67 {
68 this._forbidden = forbidden;
69 if (forbidden)
70 {
71 _checked = true;
72 _userDataConstraint = null;
73 _isAnyRole=false;
74 _roles.clear();
75 }
76 }
77
78 public boolean isAnyRole()
79 {
80 return _isAnyRole;
81 }
82
83 public void setAnyRole(boolean anyRole)
84 {
85 this._isAnyRole=anyRole;
86 if (anyRole)
87 {
88 _checked = true;
89 _roles.clear();
90 }
91 }
92
93 public UserDataConstraint getUserDataConstraint()
94 {
95 return _userDataConstraint;
96 }
97
98 public void setUserDataConstraint(UserDataConstraint userDataConstraint)
99 {
100 if (userDataConstraint == null) throw new NullPointerException("Null UserDataConstraint");
101 if (this._userDataConstraint == null)
102 {
103 this._userDataConstraint = userDataConstraint;
104 }
105 else
106 {
107 this._userDataConstraint = this._userDataConstraint.combine(userDataConstraint);
108 }
109 }
110
111 public Set<String> getRoles()
112 {
113 return _roles;
114 }
115
116 public void addRole(String role)
117 {
118 _roles.add(role);
119 }
120
121 public void combine(RoleInfo other)
122 {
123 if (other._forbidden)
124 setForbidden(true);
125 else if (!other._checked) // TODO is this the right way around???
126 setChecked(true);
127 else if (other._isAnyRole)
128 setAnyRole(true);
129 else if (!_isAnyRole)
130 {
131 for (String r : other._roles)
132 _roles.add(r);
133 }
134
135 setUserDataConstraint(other._userDataConstraint);
136 }
137
138 @Override
139 public String toString()
140 {
141 return "{RoleInfo"+(_forbidden?",F":"")+(_checked?",C":"")+(_isAnyRole?",*":_roles)+"}";
142 }
143}