Author: rickhall
Date: Tue Jun 15 19:20:46 2010
New Revision: 955011

URL: http://svn.apache.org/viewvc?rev=955011&view=rev
Log:
Add support for reinstalling virtual bundles.

Modified:
    
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/BundleContextImpl.java
    
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/BundleImpl.java
    
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/Felix.java
    
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/UnmanagedModuleImpl.java

Modified: 
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/BundleContextImpl.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/BundleContextImpl.java?rev=955011&r1=955010&r2=955011&view=diff
==============================================================================
--- 
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/BundleContextImpl.java
 (original)
+++ 
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/BundleContextImpl.java
 Tue Jun 15 19:20:46 2010
@@ -124,7 +124,7 @@ class BundleContextImpl implements Felix
     public VirtualModuleContext reinstallBundle(Bundle bundle, VirtualModule 
vm)
         throws BundleException
     {
-        return null;
+        return m_felix.reinstallBundle(m_bundle, (BundleImpl) bundle, vm);
     }
 
     public Bundle getBundle(long id)

Modified: 
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/BundleImpl.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/BundleImpl.java?rev=955011&r1=955010&r2=955011&view=diff
==============================================================================
--- 
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/BundleImpl.java
 (original)
+++ 
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/BundleImpl.java
 Tue Jun 15 19:20:46 2010
@@ -1046,7 +1046,7 @@ class BundleImpl implements Bundle
         boolean used = false;
         for (int i = 0; !unresolved && !used && (i < m_modules.size()); i++)
         {
-            List<Module> dependents = ((ModuleImpl) 
m_modules.get(i)).getDependents();
+            List<Module> dependents = ((AbstractModuleImpl) 
m_modules.get(i)).getDependents();
             for (int j = 0; (dependents != null) && (j < dependents.size()) && 
!used; j++)
             {
                 if (dependents.get(j) != m_modules.get(i))

Modified: 
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/Felix.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/Felix.java?rev=955011&r1=955010&r2=955011&view=diff
==============================================================================
--- 
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/Felix.java
 (original)
+++ 
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/Felix.java
 Tue Jun 15 19:20:46 2010
@@ -2788,6 +2788,49 @@ ex.printStackTrace();
         return new VirtualModuleContextImpl(bundle);
     }
 
+    VirtualModuleContext reinstallBundle(BundleImpl manager, BundleImpl vb, 
VirtualModule vm)
+        throws BundleException
+    {
+        // Acquire bundle lock.
+        try
+        {
+            acquireBundleLock(vb, Bundle.INSTALLED);
+        }
+        catch (IllegalStateException ex)
+        {
+            throw new BundleException(
+                "Bundle " + vb
+                + " cannot be reinstalled, since it is not in INSTALLED 
state.");
+        }
+
+        try
+        {
+            Throwable rethrow = null;
+
+            if (vb.getCurrentModule() instanceof UnmanagedModuleImpl)
+            {
+                ((UnmanagedModuleImpl) 
vb.getCurrentModule()).setVirtualModule(vm);
+            }
+            else
+            {
+                throw new BundleException(
+                    "Cannot reinstall bundle "
+                    + vb + " since it is not a virtual bundle.");
+            }
+        }
+        finally
+        {
+            // Always release bundle lock.
+            releaseBundleLock(vb);
+        }
+
+        // Fire bundle event.
+        fireBundleEvent(BundleEvent.INSTALLED, vb);
+
+        // Return virtual module context.
+        return new VirtualModuleContextImpl(vb);
+    }
+
     /**
      * Retrieves a bundle from its location.
      *

Modified: 
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/UnmanagedModuleImpl.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/UnmanagedModuleImpl.java?rev=955011&r1=955010&r2=955011&view=diff
==============================================================================
--- 
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/UnmanagedModuleImpl.java
 (original)
+++ 
felix/sandbox/rickhall/vb/framework-vb/src/main/java/org/apache/felix/framework/UnmanagedModuleImpl.java
 Tue Jun 15 19:20:46 2010
@@ -45,7 +45,7 @@ import org.osgi.framework.Version;
 
 public class UnmanagedModuleImpl extends AbstractModuleImpl
 {
-    private final VirtualModule m_vm;
+    private VirtualModule m_vm;
 
     public UnmanagedModuleImpl(
         Logger logger, Map configMap,
@@ -56,11 +56,16 @@ public class UnmanagedModuleImpl extends
         m_vm = vm;
     }
 
-    public VirtualModule getVirtualModule()
+    public synchronized VirtualModule getVirtualModule()
     {
         return m_vm;
     }
 
+    public synchronized void setVirtualModule(VirtualModule vm)
+    {
+        m_vm = vm;
+    }
+
     public Content getContent()
     {
         return null;


Reply via email to