blob: 5091d6b91e321e4b7bb93f63f8ab55c809a25fa7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.osgi.framework.internal.core;
import java.security.Permission;
import java.security.PermissionCollection;
import java.util.*;
/**
* Holds permissions which are of an unknown type when a
* policy file is read
*
*/
final class UnresolvedPermissionCollection extends PermissionCollection {
/** hash of permission class names => Vectors of UnresolvedPermissions for that class */
Hashtable permissions = new Hashtable(8);
UnresolvedPermissionCollection() {
super();
}
public void add(Permission permission) {
if (isReadOnly()) {
throw new IllegalStateException();
}
String name = permission.getName();
Vector elements;
synchronized (permissions) {
elements = (Vector) permissions.get(name);
if (elements == null) {
elements = new Vector(10, 10);
permissions.put(name, elements);
}
}
elements.addElement(permission);
}
public Enumeration elements() {
return (new Enumeration() {
Enumeration vEnum, pEnum = permissions.elements();
Object next = findNext();
private Object findNext() {
if (vEnum != null) {
if (vEnum.hasMoreElements())
return (vEnum.nextElement());
}
if (!pEnum.hasMoreElements())
return (null);
vEnum = ((Vector) pEnum.nextElement()).elements();
return (vEnum.nextElement());
}
public boolean hasMoreElements() {
return (next != null);
}
public Object nextElement() {
Object result = next;
next = findNext();
return (result);
}
});
}
public boolean implies(Permission permission) {
return false;
}
Vector getPermissions(String name) {
return (Vector) permissions.get(name);
}
}