Add Multi-Realm class handling
[aaf/cadi.git] / shiro / src / main / java / org / onap / aaf / cadi / shiro / AAFPrincipalCollection.java
1 /**
2  * ============LICENSE_START====================================================
3  * org.onap.aaf
4  * ===========================================================================
5  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
6  * ===========================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END====================================================
19  *
20  */
21 package org.onap.aaf.cadi.shiro;
22
23 import java.security.Principal;
24 import java.util.ArrayList;
25 import java.util.Collection;
26 import java.util.HashSet;
27 import java.util.Iterator;
28 import java.util.List;
29 import java.util.Set;
30
31 import org.apache.shiro.subject.PrincipalCollection;
32
33 public class AAFPrincipalCollection implements PrincipalCollection {
34         
35         private static final long serialVersionUID = 558246013419818831L;
36         private static final Set<String> realmSet;
37         private final Principal principal;
38         private List<Principal> list=null;
39         private Set<Principal> set=null;
40
41         static {
42                 realmSet = new HashSet<String>();
43                 realmSet.add(AAFRealm.AAF_REALM);
44         }
45         
46         public AAFPrincipalCollection(Principal p) {
47                 principal = p;
48
49         }
50
51         public AAFPrincipalCollection(final String principalName) {
52                 principal =     new Principal() {
53                         private final String name = principalName;
54                         @Override
55                         public String getName() {
56                                 return name;
57                         }
58                 };
59         }
60
61         @Override
62         public Iterator<Principal> iterator() {
63                 return null;
64         }
65
66         @Override
67         public List<Principal> asList() {
68                 if(list==null) {
69                         list = new ArrayList<Principal>();
70                 }
71                 list.add(principal);
72                 return list;
73         }
74
75         @Override
76         public Set<Principal> asSet() {
77                 if(set==null) {
78                         set = new HashSet<Principal>();
79                 }
80                 set.add(principal);
81                 return set;
82         }
83
84         @SuppressWarnings("unchecked")
85         @Override
86         public <T> Collection<T> byType(Class<T> cls) {
87                 Collection<T> coll = new ArrayList<T>();
88                 if(cls.isAssignableFrom(Principal.class)) {
89                         coll.add((T)principal);
90                 }
91                 return coll;
92         }
93
94         @Override
95         public Collection<Principal> fromRealm(String realm) {
96                 if(AAFRealm.AAF_REALM.equals(realm)) {
97                         return asList();
98                 } else {
99                         return new ArrayList<Principal>();
100                 }
101         }
102
103         @Override
104         public Principal getPrimaryPrincipal() {
105                 return principal;
106         }
107
108         @Override
109         public Set<String> getRealmNames() {
110                 return realmSet;
111         }
112
113         @Override
114         public boolean isEmpty() {
115                 return principal==null;
116         }
117
118         @SuppressWarnings("unchecked")
119         @Override
120         public <T> T oneByType(Class<T> cls) {
121                 if(cls.isAssignableFrom(Principal.class)) {
122                         return (T)principal;
123                 }
124                 return null;
125         }
126
127 }