You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2010/11/08 22:14:18 UTC

svn commit: r1032718 - in /felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver: Main.java Module.java WireHostImpl.java proto3/Proto3Resolver.java proto3/WrappedModule.java

Author: rickhall
Date: Mon Nov  8 21:14:17 2010
New Revision: 1032718

URL: http://svn.apache.org/viewvc?rev=1032718&view=rev
Log:
More fine tuning of fragment handling.

Added:
    felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/WireHostImpl.java
Modified:
    felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/Main.java
    felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/Module.java
    felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/proto3/Proto3Resolver.java
    felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/proto3/WrappedModule.java

Modified: felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/Main.java
URL: http://svn.apache.org/viewvc/felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/Main.java?rev=1032718&r1=1032717&r2=1032718&view=diff
==============================================================================
--- felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/Main.java (original)
+++ felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/Main.java Mon Nov  8 21:14:17 2010
@@ -105,6 +105,7 @@ public class Main
                 {
                     result = ex;
 System.out.println("EX " + ex);
+ex.printStackTrace();
                 }
                 compareResult(solution, result);
                 System.out.println("SUCCESS");
@@ -3002,4 +3003,66 @@ System.out.println("EX " + ex);
 
         return target;
     }
+
+    // SOLUTION:
+    // A: bar->D
+    private static Map<Module, List<Wire>> solution35(List<Module> modules)
+    {
+        Map<String, Module> moduleMap = new HashMap();
+        for (Module m : modules)
+        {
+            moduleMap.put(m.getName(), m);
+        }
+        Map<Module, List<Wire>> wireMap = new HashMap();
+
+        List<Wire> wires = new ArrayList();
+//        wires.add(
+//            new WireImpl(
+//                moduleMap.get("C"),
+//                moduleMap.get("C").getRequirements().get(0),
+//                moduleMap.get("A"),
+//                moduleMap.get("A").getCapabilities().get(1)));
+        wireMap.put(moduleMap.get("C"), wires);
+
+        return wireMap;
+    }
+
+    private static Module scenario35(List<Module> moduleList)
+    {
+        Module m, target;
+
+        // Bundle A1
+        moduleList.add(
+            (m = new Module("A1"))
+                .providing(new CapabilityImpl(m, Capability.HOST_NAMESPACE).with("bundle-symbolic-name=A").with("bundle-version=1"))
+                .providing(new CapabilityImpl(m, Capability.PACKAGE_NAMESPACE).with("package=foo")));
+        // Bundle A2
+        moduleList.add(
+            (m = new Module("A2"))
+                .providing(new CapabilityImpl(m, Capability.HOST_NAMESPACE).with("bundle-symbolic-name=A").with("bundle-version=2"))
+                .providing(new CapabilityImpl(m, Capability.PACKAGE_NAMESPACE).with("package=foo")));
+        // Bundle A2
+        moduleList.add(
+            (m = new Module("A3"))
+                .providing(new CapabilityImpl(m, Capability.HOST_NAMESPACE).with("bundle-symbolic-name=A").with("bundle-version=3"))
+                .providing(new CapabilityImpl(m, Capability.PACKAGE_NAMESPACE).with("package=foo")));
+        // Bundle B
+        moduleList.add(
+            (m = new Module("B"))
+                .providing(new CapabilityImpl(m, Capability.PACKAGE_NAMESPACE).with("package=bar").using("foo"))
+                .requiring(new RequirementImpl(m, Capability.HOST_NAMESPACE).with("bundle-symbolic-name=A").with("bundle-version=[1,2]")));
+        // Bundle C
+        moduleList.add(
+            (m = new Module("C"))
+                .providing(new CapabilityImpl(m, Capability.PACKAGE_NAMESPACE).with("package=woz").using("foo"))
+                .requiring(new RequirementImpl(m, Capability.HOST_NAMESPACE).with("bundle-symbolic-name=A").with("bundle-version=[2,3]")));
+        // Bundle D
+        moduleList.add(
+            target = (m = new Module("D"))
+                .requiring(new RequirementImpl(m, Capability.PACKAGE_NAMESPACE).with("package=foo"))
+                .requiring(new RequirementImpl(m, Capability.PACKAGE_NAMESPACE).with("package=bar"))
+                .requiring(new RequirementImpl(m, Capability.PACKAGE_NAMESPACE).with("package=woz")));
+
+        return target;
+    }
 }
\ No newline at end of file

Modified: felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/Module.java
URL: http://svn.apache.org/viewvc/felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/Module.java?rev=1032718&r1=1032717&r2=1032718&view=diff
==============================================================================
--- felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/Module.java (original)
+++ felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/Module.java Mon Nov  8 21:14:17 2010
@@ -89,6 +89,6 @@ public class Module
 
     public String toString()
     {
-        return m_name;
+        return getName();
     }
 }
\ No newline at end of file

Added: felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/WireHostImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/WireHostImpl.java?rev=1032718&view=auto
==============================================================================
--- felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/WireHostImpl.java (added)
+++ felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/WireHostImpl.java Mon Nov  8 21:14:17 2010
@@ -0,0 +1,70 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.felix.resolver;
+
+import org.apache.felix.resolver.cs.Capability;
+import org.apache.felix.resolver.cs.Requirement;
+
+public class WireHostImpl implements Wire
+{
+    private final Module m_importer;
+    private final Requirement m_req;
+    private final Module m_exporter;
+    private final Capability m_cap;
+
+    public WireHostImpl(Module importer, Requirement ip, Module exporter, Capability ep)
+    {
+        m_importer = importer;
+        m_req = ip;
+        m_exporter = exporter;
+        m_cap = ep;
+    }
+
+    public Module getImporter()
+    {
+        return m_importer;
+    }
+
+    public Requirement getRequirement()
+    {
+        return m_req;
+    }
+
+    public Module getExporter()
+    {
+        return m_exporter;
+    }
+
+    public Capability getCapability()
+    {
+        return m_cap;
+    }
+
+    public String toString()
+    {
+        return m_importer
+            + " -> HOSTED BY -> "
+            + m_exporter;
+    }
+
+    public boolean hasPackage(String pkgName)
+    {
+        return false;
+    }
+}
\ No newline at end of file

Modified: felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/proto3/Proto3Resolver.java
URL: http://svn.apache.org/viewvc/felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/proto3/Proto3Resolver.java?rev=1032718&r1=1032717&r2=1032718&view=diff
==============================================================================
--- felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/proto3/Proto3Resolver.java (original)
+++ felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/proto3/Proto3Resolver.java Mon Nov  8 21:14:17 2010
@@ -35,6 +35,7 @@ import org.apache.felix.resolver.Resolve
 import org.apache.felix.resolver.Resolver;
 import org.apache.felix.resolver.Resolver.ResolverState;
 import org.apache.felix.resolver.Wire;
+import org.apache.felix.resolver.WireHostImpl;
 import org.apache.felix.resolver.WireImpl;
 import org.apache.felix.resolver.WireModuleImpl;
 import org.apache.felix.resolver.cs.Attribute;
@@ -714,18 +715,6 @@ System.out.println("+++ FRAGMENTS: " + f
         return wrappedHosts;
     }
 
-    private static boolean isFragment(Module m)
-    {
-        for (Requirement req : m.getRequirements())
-        {
-            if (req.getNamespace().equals(Capability.HOST_NAMESPACE))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
     private void calculatePackageSpaces(
         Module module,
         Map<Requirement, Set<Capability>> candidateMap,
@@ -1639,6 +1628,22 @@ System.out.println("+++ FRAGMENTS: " + f
             // Combine wires with module wires last.
             packageWires.addAll(moduleWires);
             wireMap.put(module, packageWires);
+
+            // Add host wire for any fragments.
+            if (module instanceof WrappedModule)
+            {
+                List<Module> fragments = ((WrappedModule) module).getFragments();
+                for (Module fragment : fragments)
+                {
+                    List<Wire> hostWires = wireMap.get(fragment);
+                    if (hostWires == null)
+                    {
+                        hostWires = new ArrayList<Wire>();
+                        wireMap.put(fragment, hostWires);
+                    }
+                    hostWires.add(new WireHostImpl(fragment, null, module, null));
+                }
+            }
         }
 
         return wireMap;

Modified: felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/proto3/WrappedModule.java
URL: http://svn.apache.org/viewvc/felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/proto3/WrappedModule.java?rev=1032718&r1=1032717&r2=1032718&view=diff
==============================================================================
--- felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/proto3/WrappedModule.java (original)
+++ felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/proto3/WrappedModule.java Mon Nov  8 21:14:17 2010
@@ -27,6 +27,7 @@ import org.apache.felix.resolver.cs.Requ
 
 class WrappedModule extends Module
 {
+    private final String m_name;
     private final Module m_module;
     private final List<Module> m_fragments = new ArrayList();
     private List<Capability> m_cachedCapabilities = null;
@@ -36,6 +37,7 @@ class WrappedModule extends Module
     public WrappedModule(Module module)
     {
         super(module.getName());
+        m_name = module.getName() + " [" + hashCode() + "]";
         m_module = module;
     }
 
@@ -49,18 +51,38 @@ class WrappedModule extends Module
         m_fragments.add(fragment);
     }
 
+    public List<Module> getFragments()
+    {
+        return m_fragments;
+    }
+
+    public String getName()
+    {
+        return m_name;
+    }
+
     public List<Capability> getCapabilities()
     {
         if (m_cachedCapabilities == null)
         {
-            List capList = (m_module.getCapabilities() == null)
-                ? new ArrayList<Capability>()
-                : new ArrayList<Capability>(m_module.getCapabilities());
+            List<Capability> capList = new ArrayList<Capability>();
+
+            // Wrap host capabilities.
+            List<Capability> caps = m_module.getCapabilities();
+            for (int capIdx = 0;
+                (caps != null) && (capIdx < caps.size());
+                capIdx++)
+            {
+                capList.add(
+                    new WrappedCapability(this, caps.get(capIdx)));
+            }
+
+            // Wrap fragment capabilities.
             for (int fragIdx = 0;
                 (m_fragments != null) && (fragIdx < m_fragments.size());
                 fragIdx++)
             {
-                List<Capability> caps = m_fragments.get(fragIdx).getCapabilities();
+                caps = m_fragments.get(fragIdx).getCapabilities();
                 for (int capIdx = 0;
                     (caps != null) && (capIdx < caps.size());
                     capIdx++)
@@ -81,13 +103,24 @@ class WrappedModule extends Module
     {
         if (m_cachedRequirements == null)
         {
-            List<Requirement> reqList = (m_module.getRequirements() == null)
-                ? new ArrayList() : new ArrayList(m_module.getRequirements());
+            List<Requirement> reqList = new ArrayList<Requirement>();
+
+            // Wrap host requirements.
+            List<Requirement> reqs = m_module.getRequirements();
+            for (int reqIdx = 0;
+                (reqs != null) && (reqIdx < reqs.size());
+                reqIdx++)
+            {
+                reqList.add(
+                    new WrappedRequirement(this, reqs.get(reqIdx)));
+            }
+
+            // Wrap fragment requirements.
             for (int fragIdx = 0;
                 (m_fragments != null) && (fragIdx < m_fragments.size());
                 fragIdx++)
             {
-                List<Requirement> reqs = m_fragments.get(fragIdx).getRequirements();
+                reqs = m_fragments.get(fragIdx).getRequirements();
                 for (int reqIdx = 0;
                     (reqs != null) && (reqIdx < reqs.size());
                     reqIdx++)