    001    /*****************************************************************************
    002     * Copyright (C) NanoContainer Organization. All rights reserved.            *
    003     * ------------------------------------------------------------------------- *
    004     * The software in this package is published under the terms of the BSD      *
    005     * style license a copy of which has been included with this distribution in *
    006     * the LICENSE.txt file.                                                     *
    007     *****************************************************************************/
    008    package org.nanocontainer;
    009
    010    import java.io.Serializable;
    011    import java.net.URL;
    012    import java.security.Permission;
    013    import java.security.PermissionCollection;
    014    import java.security.Permissions;
    015    import java.util.ArrayList;
    016    import java.util.List;
    017
    018    /**
    019     * ClassPathElement denotes an element in a classpath allowing to grant permissions.
    020     *
    021     * @author Paul Hammant
    022     */
    023    public class ClassPathElement implements Serializable {
    024
    025        private final URL url;
    026        private PermissionCollection permissionCollection;
    027        private final List permissions = new ArrayList();
    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 PermissionCollection getPermissionCollection() {
    046            if (permissionCollection == null) {
    047                permissionCollection = new Permissions();
    048                for (int i = 0; i < permissions.size(); i++) {
    049                    Permission permission = (Permission) permissions.get(i);
    050                    permissionCollection.add(permission);
    051                }
    052            }
    053            return permissionCollection;
    054        }
    055
    056        public String toString() {
    057            return "[" + System.identityHashCode(this) + " " + url + " " + permissions.size() +"]";
    058        }
    059
    060    }