/* | |
* Licensed to the Apache Software Foundation (ASF) under one or more | |
* contributor license agreements. See the NOTICE file distributed with | |
* this work for additional information regarding copyright ownership. | |
* The ASF licenses this file to You under the Apache License, Version 2.0 | |
* (the "License"); you may not use this file except in compliance with | |
* the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
package org.apache.harmony.security.tests.support.acl; | |
import java.security.Principal; | |
import java.security.acl.Group; | |
import java.util.Enumeration; | |
import java.util.Vector; | |
/** | |
* Additional class for verification Group interface | |
*/ | |
public class GroupImpl implements Group { | |
private Vector groupMembers; | |
private String group; | |
public GroupImpl(String s) { | |
groupMembers = new Vector(50, 100); | |
group = s; | |
} | |
public boolean addMember(Principal principal) { | |
if(groupMembers.contains(principal)) | |
return false; | |
if(group.equals(principal.toString())) { | |
throw new IllegalArgumentException(); | |
} else { | |
groupMembers.addElement(principal); | |
return true; | |
} | |
} | |
public boolean removeMember(Principal principal) { | |
return groupMembers.removeElement(principal); | |
} | |
public Enumeration members() { | |
return groupMembers.elements(); | |
} | |
public boolean equals(Object obj) { | |
if(this == obj) | |
return true; | |
if(!(obj instanceof Group)) { | |
return false; | |
} else { | |
Group group1 = (Group)obj; | |
return group.equals(group1.toString()); | |
} | |
} | |
public boolean equals(Group group1) { | |
return equals(group1); | |
} | |
public String toString() { | |
return group; | |
} | |
public int hashCode() { | |
return group.hashCode(); | |
} | |
public boolean isMember(Principal principal) { | |
if(groupMembers.contains(principal)) { | |
return true; | |
} else { | |
Vector vector = new Vector(10); | |
return isMemberRecurse(principal, vector); | |
} | |
} | |
public String getName() { | |
return group; | |
} | |
boolean isMemberRecurse(Principal principal, Vector vector) { | |
for(Enumeration enumeration = members(); enumeration.hasMoreElements();) { | |
boolean flag = false; | |
Principal principal1 = (Principal)enumeration.nextElement(); | |
if(principal1.equals(principal)) | |
return true; | |
if(principal1 instanceof GroupImpl) { | |
GroupImpl groupimpl = (GroupImpl)principal1; | |
vector.addElement(this); | |
if(!vector.contains(groupimpl)) | |
flag = groupimpl.isMemberRecurse(principal, vector); | |
} else if(principal1 instanceof Group) { | |
Group group1 = (Group)principal1; | |
if(!vector.contains(group1)) flag = group1.isMember(principal); | |
} | |
if(flag) return flag; | |
} | |
return false; | |
} | |
} |