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++)