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/01/21 18:30:09 UTC

svn commit: r901786 - /felix/sandbox/rickhall/framework-proto/src/main/java/org/apache/felix/framework/resolver/WireImpl.java

Author: rickhall
Date: Thu Jan 21 17:30:08 2010
New Revision: 901786

URL: http://svn.apache.org/viewvc?rev=901786&view=rev
Log:
The framework is working again in some capacity.

Modified:
    felix/sandbox/rickhall/framework-proto/src/main/java/org/apache/felix/framework/resolver/WireImpl.java

Modified: felix/sandbox/rickhall/framework-proto/src/main/java/org/apache/felix/framework/resolver/WireImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/rickhall/framework-proto/src/main/java/org/apache/felix/framework/resolver/WireImpl.java?rev=901786&r1=901785&r2=901786&view=diff
==============================================================================
--- felix/sandbox/rickhall/framework-proto/src/main/java/org/apache/felix/framework/resolver/WireImpl.java (original)
+++ felix/sandbox/rickhall/framework-proto/src/main/java/org/apache/felix/framework/resolver/WireImpl.java Thu Jan 21 17:30:08 2010
@@ -24,6 +24,7 @@
 import org.apache.felix.framework.capabilityset.Module;
 import org.apache.felix.framework.capabilityset.Requirement;
 import org.apache.felix.framework.capabilityset.Wire;
+import org.apache.felix.framework.util.Util;
 import org.apache.felix.moduleloader.ResourceNotFoundException;
 
 public class WireImpl implements Wire
@@ -66,23 +67,111 @@
         return m_req + " (" + m_importer + ") -> " + m_cap + " (" + m_exporter + ")";
     }
 
+    /* (non-Javadoc)
+     * @see org.apache.felix.framework.searchpolicy.IWire#getClass(java.lang.String)
+     */
     public boolean hasPackage(String pkgName)
     {
-        throw new UnsupportedOperationException("Not supported yet.");
+        return (m_cap.getNamespace().equals(Capability.PACKAGE_NAMESPACE) &&
+            m_cap.getAttribute(Capability.PACKAGE_ATTR).getValue().equals(pkgName));
     }
 
+    /* (non-Javadoc)
+     * @see org.apache.felix.framework.searchpolicy.IWire#getClass(java.lang.String)
+     */
     public Class getClass(String name) throws ClassNotFoundException
     {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
+        Class clazz = null;
+
+        // Get the package of the target class.
+        String pkgName = Util.getClassPackage(name);
 
+        // Only check when the package of the target class is
+        // the same as the package for the wire.
+        if (m_cap.getNamespace().equals(Capability.PACKAGE_NAMESPACE) &&
+            m_cap.getAttribute(Capability.PACKAGE_ATTR).getValue().equals(pkgName))
+        {
+            // Check the include/exclude filters from the target package
+            // to make sure that the class is actually visible. We delegate
+            // to the exporting module, rather than its content, so it can
+            // it can follow any internal wires it may have (e.g., if the
+            // package has multiple sources).
+// TODO: FELIX3 - Implement package filter!
+//            if (m_cap.isIncluded(name))
+            {
+                clazz = m_exporter.getClassByDelegation(name);
+            }
+
+            // If no class was found, then we must throw an exception
+            // since the exporter for this package did not contain the
+            // requested class.
+            if (clazz == null)
+            {
+                throw new ClassNotFoundException(name);
+            }
+        }
+
+        return clazz;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.felix.framework.searchpolicy.IWire#getResource(java.lang.String)
+     */
     public URL getResource(String name) throws ResourceNotFoundException
     {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
+        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_cap.getNamespace().equals(Capability.PACKAGE_NAMESPACE) &&
+            m_cap.getAttribute(Capability.PACKAGE_ATTR).getValue().equals(pkgName))
+        {
+            // Delegate to the exporting module, rather than its
+            // content, so that it can follow any internal wires it may have
+            // (e.g., if the package has multiple sources).
+            url = m_exporter.getResourceByDelegation(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;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.felix.framework.searchpolicy.IWire#getResources(java.lang.String)
+     */
     public Enumeration getResources(String name) throws ResourceNotFoundException
     {
-        throw new UnsupportedOperationException("Not supported yet.");
+        Enumeration urls = 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_cap.getNamespace().equals(Capability.PACKAGE_NAMESPACE) &&
+            m_cap.getAttribute(Capability.PACKAGE_ATTR).getValue().equals(pkgName))
+        {
+            urls = m_exporter.getResourcesByDelegation(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 (urls == null)
+            {
+                throw new ResourceNotFoundException(name);
+            }
+        }
+
+        return urls;
     }
 }
\ No newline at end of file