1 36 package org.ungoverned.oscar; 37 38 import org.osgi.framework.Bundle; 39 import org.osgi.service.packageadmin.ExportedPackage; 40 import org.osgi.service.packageadmin.PackageAdmin; 41 42 class PackageAdminImpl implements PackageAdmin, Runnable 43 { 44 private Oscar m_oscar = null; 45 private Bundle[][] m_reqBundles = null; 46 47 public PackageAdminImpl(Oscar oscar) 48 { 49 m_oscar = oscar; 50 51 Thread t = new Thread (this, "OscarPackageAdmin"); 53 t.setDaemon(true); 54 t.start(); 55 } 56 57 64 public ExportedPackage getExportedPackage(String name) 65 { 66 return m_oscar.getExportedPackage(name); 67 } 68 69 76 public ExportedPackage[] getExportedPackages(Bundle b) 77 { 78 return m_oscar.getExportedPackages(b); 79 } 80 81 88 public synchronized void refreshPackages(Bundle[] bundles) 89 throws SecurityException 90 { 91 if (m_reqBundles == null) 93 { 94 m_reqBundles = new Bundle[][] { bundles }; 95 } 96 else 97 { 98 Bundle[][] newReqBundles = new Bundle[m_reqBundles.length + 1][]; 99 System.arraycopy(m_reqBundles, 0, 100 newReqBundles, 0, m_reqBundles.length); 101 newReqBundles[m_reqBundles.length] = bundles; 102 m_reqBundles = newReqBundles; 103 } 104 notifyAll(); 105 } 106 107 112 public void run() 113 { 114 Bundle[] bundles = null; 117 while (true) 118 { 119 synchronized (this) 120 { 121 while (m_reqBundles == null) 123 { 124 try 125 { 126 wait(); 127 } 128 catch (InterruptedException ex) 129 { 130 } 131 } 132 133 if (m_reqBundles != null) 136 { 137 bundles = m_reqBundles[0]; 138 } 139 } 140 141 m_oscar.refreshPackages(bundles); 143 144 synchronized (this) 146 { 147 if (m_reqBundles.length == 1) 148 { 149 m_reqBundles = null; 150 } 151 else 152 { 153 Bundle[][] newReqBundles = new Bundle[m_reqBundles.length - 1][]; 154 System.arraycopy(m_reqBundles, 1, 155 newReqBundles, 0, m_reqBundles.length - 1); 156 m_reqBundles = newReqBundles; 157 } 158 } 159 } 160 } 161 } | Popular Tags |