/*
* $Header: /cvshome/build/org.osgi.service.cm/src/org/osgi/service/cm/ConfigurationPermission.java,v 1.21 2006/06/16 16:31:28 hargrave Exp $
*
* Copyright (c) OSGi Alliance (2004, 2006). All Rights Reserved.
*
* Licensed 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.osgi.service.cm;
import java.security.*;
import java.util.Enumeration;
import java.util.NoSuchElementException;
/**
* Indicates a bundle's authority to configure bundles.
*
* This permission has only a single action: CONFIGURE.
*
* @version $Revision: 1.21 $
* @since 1.2
*/
public final class ConfigurationPermission extends BasicPermission {
static final long serialVersionUID = 5716868734811965383L;
/**
* The action string configure.
*/
public final static String CONFIGURE = "configure";
/**
* Create a new ConfigurationPermission.
*
* @param name Name must be "*".
* @param actions configure (canonical order).
*/
public ConfigurationPermission(String name, String actions) {
super(name);
if (!name.equals("*")) {
throw new IllegalArgumentException("name must be *");
}
actions = actions.trim();
if (actions.equalsIgnoreCase(CONFIGURE)||actions.equals("*"))
return;
throw new IllegalArgumentException("actions must be " + CONFIGURE);
}
/**
* Determines if a ConfigurationPermission object "implies"
* the specified permission.
*
* @param p The target permission to check.
* @return true if the specified permission is implied by
* this object; false otherwise.
*/
public boolean implies(Permission p) {
return p instanceof ConfigurationPermission;
}
/**
* Determines the equality of two ConfigurationPermission
* objects.
*
* Two ConfigurationPermission objects are equal.
*
* @param obj The object being compared for equality with this object.
* @return true if obj is equivalent to this
* ConfigurationPermission; false
* otherwise.
*/
public boolean equals(Object obj) {
return obj instanceof ConfigurationPermission;
}
/**
* Returns the hash code value for this object.
*
* @return Hash code value for this object.
*/
public int hashCode() {
return getName().hashCode() ^ getActions().hashCode();
}
/**
* Returns the canonical string representation of the
* ConfigurationPermission actions.
*
*
* Always returns present ConfigurationPermission actions in
* the following order: CONFIGURE
*
* @return Canonical string representation of the
* ConfigurationPermission actions.
*/
public String getActions() {
return CONFIGURE;
}
/**
* Returns a new PermissionCollection object suitable for
* storing ConfigurationPermissions.
*
* @return A new PermissionCollection object.
*/
public PermissionCollection newPermissionCollection() {
return new ConfigurationPermissionCollection();
}
}
/**
* Stores a set of ConfigurationPermission permissions.
*
* @see java.security.Permission
* @see java.security.Permissions
* @see java.security.PermissionCollection
*/
final class ConfigurationPermissionCollection extends PermissionCollection {
static final long serialVersionUID = -6917638867081695839L;
/**
* True if collection is non-empty.
*
* @serial
*/
private boolean hasElement;
/**
* Creates an empty ConfigurationPermissionCollection object.
*
*/
public ConfigurationPermissionCollection() {
hasElement = false;
}
/**
* Adds the specified permission to the
* ConfigurationPermissionCollection. The key for the hash is
* the interface name of the service.
*
* @param permission The Permission object to add.
*
* @exception IllegalArgumentException If the permission is not an
* ConfigurationPermission.
*
* @exception SecurityException If this ConfigurationPermissionCollection
* object has been marked read-only.
*/
public void add(Permission permission) {
if (!(permission instanceof ConfigurationPermission)) {
throw new IllegalArgumentException("invalid permission: "
+ permission);
}
if (isReadOnly())
throw new SecurityException("attempt to add a Permission to a "
+ "readonly PermissionCollection");
hasElement = true;
}
/**
* Determines if the specified set of permissions implies the permissions
* expressed in the parameter permission.
*
* @param p The Permission object to compare.
*
* @return true if permission is a proper subset of a permission in the set;
* false otherwise.
*/
public boolean implies(Permission p) {
return hasElement && (p instanceof ConfigurationPermission);
}
/**
* Returns an enumeration of an ConfigurationPermission object.
*
* @return Enumeration of an ConfigurationPermission object.
*/
public Enumeration elements() {
return new Enumeration() {
private boolean more = hasElement;
public boolean hasMoreElements() {
return more;
}
public Object nextElement() {
if (more) {
more = false;
return new ConfigurationPermission("*",
ConfigurationPermission.CONFIGURE);
}
else {
throw new NoSuchElementException();
}
}
};
}
}