    001    /*******************************************************************************
    002     * Copyright (C) PicoContainer Organization. All rights reserved.
    003     * ---------------------------------------------------------------------------
    004     * The software in this package is published under the terms of the BSD style
    005     * license a copy of which has been included with this distribution in the
    006     * LICENSE.txt file.
    007     ******************************************************************************/
    008    package org.picocontainer.classname;
    009
    010    import java.io.Serializable;
    011    import java.net.URL;
    012    import java.security.Permission;
    013    import java.security.Permissions;
    014    import java.util.ArrayList;
    015    import java.util.List;
    016
    017    /**
    018     * ClassPathElement denotes an element in a classpath allowing to grant permissions.
    019     *
    020     * @author Paul Hammant
    021     */
    022    @SuppressWarnings("serial")
    023    public class ClassPathElement implements Serializable {
    024
    025        private final URL url;
    026        private Permissions permissionCollection;
    027        private final List<Permission> permissions = new ArrayList<Permission>();
    028
    029        public ClassPathElement(URL url) {
    030            this.url = url;
    031        }
    032
    033        public Permission grantPermission(Permission permission) {
    034            if (permission == null) {
    035                throw new NullPointerException();
    036            }
    037            permissions.add(permission);
    038            return permission;
    039        }
    040
    041        public URL getUrl() {
    042            return url;
    043        }
    044
    045        public Permissions getPermissionCollection() {
    046            if (permissionCollection == null) {
    047                permissionCollection = new Permissions();
    048                for (Permission permission : permissions) {
    049                    permissionCollection.add(permission);
    050                }
    051            }
    052            return permissionCollection;
    053        }
    054
    055        public String toString() {
    056            return "[" + System.identityHashCode(this) + " " + url + " " + permissions.size() +"]";
    057        }
    058
    059    }