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 ******************************************************************************/
008package org.picocontainer.classname;
009
010import java.io.Serializable;
011import java.net.URL;
012import java.security.Permission;
013import java.security.Permissions;
014import java.util.ArrayList;
015import 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")
023public 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}