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 2006/10/25 16:24:49 UTC
svn commit: r467664 - in
/incubator/felix/sandbox/rickhall/framework-require-bundle/src/main/java/org/apache/felix/framework/searchpolicy:
R4SearchPolicyCore.java R4WireModule.java
Author: rickhall
Date: Wed Oct 25 07:24:48 2006
New Revision: 467664
URL: http://svn.apache.org/viewvc?view=rev&rev=467664
Log:
Added support for "module wires", which now allows loading from classes
using require-bundle. This has only been tested on a simple example, but
it appears to work in a preliminary way. There is still a long way to go
to get this polished and into the trunk...it is a lot of work for a feature
that we will encourage people not to use. :-( Oh well.
Added:
incubator/felix/sandbox/rickhall/framework-require-bundle/src/main/java/org/apache/felix/framework/searchpolicy/R4WireModule.java (with props)
Modified:
incubator/felix/sandbox/rickhall/framework-require-bundle/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
Modified: incubator/felix/sandbox/rickhall/framework-require-bundle/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
URL: http://svn.apache.org/viewvc/incubator/felix/sandbox/rickhall/framework-require-bundle/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java?view=diff&rev=467664&r1=467663&r2=467664
==============================================================================
--- incubator/felix/sandbox/rickhall/framework-require-bundle/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java (original)
+++ incubator/felix/sandbox/rickhall/framework-require-bundle/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java Wed Oct 25 07:24:48 2006
@@ -602,7 +602,6 @@
// this map will be resolved, only the target module and
// any candidates selected to resolve its imports and the
// transitive imports this implies.
-try {
populateResolverMap(resolverMap, rootModule);
// The next step is to use the resolver map to determine if
@@ -627,11 +626,6 @@
// The resolved module wire map maps a module to its array of
// wires.
resolvedModuleWireMap = createWires(resolverMap, rootModule);
-} catch (NullPointerException ex) {
- System.out.println("GOT IT");
- ex.printStackTrace();
- throw ex;
-}
//dumpAvailablePackages();
//dumpUsedPackages();
@@ -1242,11 +1236,11 @@
return pkgMap;
}
- private class PackageSource
+ protected class PackageSource
{
public String m_name = null;
public List m_sourceList = new ArrayList();
- public Map m_impliedMap = new HashMap();
+
public PackageSource(String name)
{
m_name = name;
@@ -1266,8 +1260,6 @@
ResolverCandidate rc2 = (ResolverCandidate) ps.m_sourceList.get(i);
if (rc1.m_module != rc2.m_module)
{
-System.out.println(rc1.m_capability.getProperties().get(ICapability.PACKAGE_PROPERTY)
- + " " +rc1.m_module + " != " + rc2.m_module);
return false;
}
}
@@ -1295,20 +1287,6 @@
ResolverCandidate rc = (ResolverCandidate) m_sourceList.get(i);
sb.append(rc.m_module);
}
- if (m_impliedMap.size() > 0)
- {
- sb.append("\n");
- sb.append(padding);
- sb.append("IMPLIES:\n");
- for (Iterator i = m_impliedMap.values().iterator(); i.hasNext(); )
- {
- ((PackageSource) i.next()).toString(padding + " ", sb);
- if (i.hasNext())
- {
- sb.append("\n");
- }
- }
- }
return sb;
}
}
@@ -1400,7 +1378,7 @@
{
ICapability[] inUseCaps = (ICapability[]) m_inUseCapMap.get(module);
inUseCaps = addCapabilityToArray(inUseCaps, caps[capIdx]);
- m_inUseCapMap.put(module, inUseCaps);
+ m_inUseCapMap.put(module, inUseCaps);
}
}
}
@@ -1432,10 +1410,23 @@
ResolverNode node = (ResolverNode) nodeList.get(nodeIdx);
// Add the candidate to the list of wires.
- wires[nodeIdx] = new R4Wire(
- importer,
- node.m_candidates[node.m_idx].m_module,
- node.m_candidates[node.m_idx].m_capability);
+ if (node.m_requirement.getNamespace().equals(ICapability.MODULE_NAMESPACE))
+ {
+ // TODO: ML - This is recalculating the package sources for the provider module,
+ // which could be avoided since this was already calculated once.
+ wires[nodeIdx] = new R4WireModule(
+ importer,
+ node.m_candidates[node.m_idx].m_module,
+ node.m_candidates[node.m_idx].m_capability,
+ calculateModulePackages(node.m_candidates[node.m_idx].m_module, resolverMap));
+ }
+ else
+ {
+ wires[nodeIdx] = new R4Wire(
+ importer,
+ node.m_candidates[node.m_idx].m_module,
+ node.m_candidates[node.m_idx].m_capability);
+ }
// Create the wires for the selected candidate module.
wireMap = populateWireMap(
Added: incubator/felix/sandbox/rickhall/framework-require-bundle/src/main/java/org/apache/felix/framework/searchpolicy/R4WireModule.java
URL: http://svn.apache.org/viewvc/incubator/felix/sandbox/rickhall/framework-require-bundle/src/main/java/org/apache/felix/framework/searchpolicy/R4WireModule.java?view=auto&rev=467664
==============================================================================
--- incubator/felix/sandbox/rickhall/framework-require-bundle/src/main/java/org/apache/felix/framework/searchpolicy/R4WireModule.java (added)
+++ incubator/felix/sandbox/rickhall/framework-require-bundle/src/main/java/org/apache/felix/framework/searchpolicy/R4WireModule.java Wed Oct 25 07:24:48 2006
@@ -0,0 +1,146 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed 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.framework.searchpolicy;
+
+import java.net.URL;
+import java.util.Iterator;
+import java.util.Map;
+import org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.PackageSource;
+import org.apache.felix.framework.searchpolicy.R4SearchPolicyCore.ResolverCandidate;
+
+import org.apache.felix.framework.util.Util;
+import org.apache.felix.moduleloader.*;
+
+public class R4WireModule implements IWire
+{
+ private IModule m_importer = null;
+ private IModule m_exporter = null;
+ private ICapability m_capability = null;
+ private Map m_pkgMap = null;
+
+ public R4WireModule(IModule importer, IModule exporter, ICapability capability, Map pkgMap)
+ {
+ m_importer = importer;
+ m_exporter = exporter;
+ m_capability = capability;
+ m_pkgMap = pkgMap;
+
+ System.out.println("Package source for wire:");
+ for (Iterator i = pkgMap.entrySet().iterator(); i.hasNext(); )
+ {
+ Map.Entry entry = (Map.Entry) i.next();
+ PackageSource ps = (PackageSource) entry.getValue();
+ System.out.println(ps);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.felix.framework.searchpolicy.IWire#getImportingModule()
+ */
+ public IModule getImporter()
+ {
+ return m_importer;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.felix.framework.searchpolicy.IWire#getExportingModule()
+ */
+ public IModule getExporter()
+ {
+ return m_exporter;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.felix.framework.searchpolicy.IWire#getExport()
+ */
+ public ICapability getCapability()
+ {
+ return m_capability;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.felix.framework.searchpolicy.IWire#getClass(java.lang.String)
+ */
+ public Class getClass(String name) throws ClassNotFoundException
+ {
+ if (m_capability.getNamespace().equals(ICapability.MODULE_NAMESPACE))
+ {
+ Class clazz = null;
+
+ // Get the package of the target class.
+ String pkgName = Util.getClassPackage(name);
+
+ PackageSource ps = (PackageSource) m_pkgMap.get(pkgName);
+ for (int srcIdx = 0; (ps != null) && (srcIdx < ps.m_sourceList.size()); srcIdx++)
+ {
+ ResolverCandidate rc = (ResolverCandidate) ps.m_sourceList.get(srcIdx);
+ if ((rc.m_module == m_importer) ||
+ ((rc.m_capability instanceof R4ExportCapability) &&
+ ((R4ExportCapability) rc.m_capability).isIncluded(name)))
+ {
+ clazz = rc.m_module.getContentLoader().getClass(name);
+ if (clazz != null)
+ {
+ return clazz;
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.felix.framework.searchpolicy.IWire#getResource(java.lang.String)
+ */
+ public URL getResource(String name) throws ResourceNotFoundException
+ {
+ URL url = null;
+
+ // Get the package of the target class.
+ String pkgName = Util.getResourcePackage(name);
+
+ // Only check when the package of the target resource is
+ // the same as the package for the wire.
+ if (m_capability.getNamespace().equals(ICapability.PACKAGE_NAMESPACE) &&
+ m_capability.getProperties().get(ICapability.PACKAGE_PROPERTY).equals(pkgName))
+ {
+ url = m_exporter.getContentLoader().getResource(name);
+
+ // If no resource was found, then we must throw an exception
+ // since the exporter for this package did not contain the
+ // requested class.
+ if (url == null)
+ {
+ throw new ResourceNotFoundException(name);
+ }
+ }
+
+ return url;
+ }
+
+ public String toString()
+ {
+ if (m_capability.getNamespace().equals(ICapability.PACKAGE_NAMESPACE))
+ {
+ return m_importer + " -> "
+ + m_capability.getProperties().get(ICapability.PACKAGE_PROPERTY)
+ + " -> " + m_exporter;
+ }
+ return m_importer + " -> " + m_capability + " -> " + m_exporter;
+ }
+}
\ No newline at end of file
Propchange: incubator/felix/sandbox/rickhall/framework-require-bundle/src/main/java/org/apache/felix/framework/searchpolicy/R4WireModule.java
------------------------------------------------------------------------------
svn:eol-style = native