00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 package org.knopflerfish.framework.permissions;
00036
00037 import java.io.*;
00038 import java.net.URL;
00039 import java.security.*;
00040 import java.security.cert.Certificate;
00041 import java.util.ArrayList;
00042 import java.util.Enumeration;
00043 import java.util.HashMap;
00044 import java.util.Hashtable;
00045 import java.util.Vector;
00046
00047 import org.osgi.framework.AdminPermission;
00048 import org.osgi.framework.Bundle;
00049 import org.osgi.service.permissionadmin.PermissionInfo;
00050 import org.knopflerfish.framework.Framework;
00051 import org.knopflerfish.framework.Util;
00052
00053
00054 public class PermissionsHandle {
00055
00056 Framework framework;
00057
00058 private PermissionInfoStorage pinfos;
00059 private Hashtable pcCache = new Hashtable();
00060 private PermissionAdminImpl pa;
00061
00062
00063 public PermissionsHandle(Framework fw) {
00064 framework = fw;
00065 pinfos = new PermissionInfoStorage();
00066 pa = new PermissionAdminImpl(pinfos);
00067 Policy.setPolicy(new FrameworkPolicy(this));
00068 }
00069
00070
00076 public PermissionAdminImpl getPermissionAdminService() {
00077 return pa;
00078 }
00079
00080
00092 public PermissionCollection getPermissionCollection(Long bid) {
00093 return (PermissionCollection)pcCache.get(bid);
00094 }
00095
00096
00108 public PermissionCollection createPermissionCollection(String loc,
00109 Bundle b,
00110 InputStream localPerms) {
00111 Long bid = new Long(b.getBundleId());
00112 PermissionCollection pc = new PermissionsWrapper(framework, pinfos, loc, b, localPerms);
00113 pcCache.put(bid, pc);
00114 return pc;
00115 }
00116
00117
00126 public boolean purgePermissionCollection(Long bid, PermissionCollection pc) {
00127 pinfos.purgeCallback(pc);
00128 if (pcCache.get(bid) == pc) {
00129 pcCache.remove(bid);
00130 return true;
00131 }
00132 return false;
00133 }
00134
00135 }