Author: marrs
Date: Tue Dec  8 08:58:40 2009
New Revision: 888294

URL: http://svn.apache.org/viewvc?rev=888294&view=rev
Log:
added some new adapters and a few fixes, work in progress

Added:
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterImpl.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterImpl.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterImpl.java
Modified:
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/dependencies/Dependency.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/BundleDependencyImpl.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ConfigurationDependencyImpl.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ResourceDependencyImpl.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/tracker/ServiceTracker.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/resources/BundleResourceRepository.java

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java?rev=888294&r1=888293&r2=888294&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/DependencyManager.java
 Tue Dec  8 08:58:40 2009
@@ -28,8 +28,11 @@
 import org.apache.felix.dm.dependencies.ResourceDependency;
 import org.apache.felix.dm.dependencies.ServiceDependency;
 import org.apache.felix.dm.dependencies.TemporalServiceDependency;
+import org.apache.felix.dm.impl.AdapterImpl;
 import org.apache.felix.dm.impl.AspectImpl;
+import org.apache.felix.dm.impl.BundleAdapterImpl;
 import org.apache.felix.dm.impl.Logger;
+import org.apache.felix.dm.impl.ResourceAdapterImpl;
 import org.apache.felix.dm.impl.ServiceImpl;
 import org.apache.felix.dm.impl.dependencies.BundleDependencyImpl;
 import org.apache.felix.dm.impl.dependencies.ConfigurationDependencyImpl;
@@ -165,6 +168,41 @@
                 .setCallbacks("added", "removed")
             );
     }
+    
+    //TODO rename iface en iface2 to adaptor en adaptee o.i.d.
+    public Service createAdapterService(Class iface, Class iface2, Class impl) 
{
+        return createService()
+            .setImplementation(new AdapterImpl(iface, iface2, impl))
+            .add(createServiceDependency()
+                .setService(iface)
+                .setAutoConfig(false)
+                .setCallbacks("added", "removed")
+                );
+    }
+    
+    // TODO note to self, there are Dependency's and DependencyCollections 
+    // (being a dependency on more than one, fi ServiceDendency, 
ResourceDependency
+    public Service createResourceAdapterService(String resourceFilter, Class 
iface2, Object impl) {
+        return createService()
+            .setImplementation(new ResourceAdapterImpl(impl, iface2))
+            .add(createResourceDependency()
+                .setFilter(resourceFilter)
+                .setAutoConfig(false)
+                .setCallbacks("added", "removed")
+                )
+                ;
+    }
+    
+    public Service createBundleAdapterService(int stateMask, String filter, 
Object impl, Class iface) {
+        return createService()
+            .setImplementation(new BundleAdapterImpl(stateMask, filter, impl, 
iface))
+            .add(createBundleDependency()
+                .setFilter(filter)
+                .setStateMask(stateMask)
+                .setCallbacks("added", "removed")
+                )
+            ;
+    }
 
     /**
      * Returns a list of services.

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/dependencies/Dependency.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/dependencies/Dependency.java?rev=888294&r1=888293&r2=888294&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/dependencies/Dependency.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/dependencies/Dependency.java
 Tue Dec  8 08:58:40 2009
@@ -18,6 +18,8 @@
  */
 package org.apache.felix.dm.dependencies;
 
+import org.apache.felix.dm.impl.dependencies.DependencyService;
+
 /**
  * Generic dependency for a service. A dependency can be required or not.
  * A dependency will be activated by the service it belongs to. The service
@@ -55,4 +57,51 @@
      * @return <code>true</code> if the dependency is instance bound
      */
     public boolean isInstanceBound();
+
+    /**
+     * Returns <code>true>code> if auto configuration is enabled for this 
dependency.
+     * Auto configuration means that a dependency is injected in the service 
instance
+     * when it's available, and if it's unavailable, a "null object" will be 
inserted
+     * instead.
+     * 
+     * @return <code>true>code> if auto configuration is enabled for this 
dependency
+     */
+    public boolean isAutoConfig();
+    
+    /**
+     * Returns the type of the instance that is injected.
+     * 
+     * @return the type of the instance that is injected
+     */
+    public Class getAutoConfigType();
+    
+    /**
+     * Returns the instance that is injected.
+     * 
+     * @return the instance that is injected
+     */
+    public Object getAutoConfigInstance();
+    
+    /**
+     * Returns the name of the member in the class of the service instance
+     * to inject into. If you specify this, not all members of the right
+     * type will be injected, only the member whose name matches.
+     * 
+     * @return
+     */
+    public String getAutoConfigName();
+    
+    /**
+     * Invoke the "added" callback on a required dependency.
+     * 
+     * @param service
+     */
+    public void invokeAdded(DependencyService service);
+    
+    /**
+     * Invoke the "removed" callback on a required dependency.
+     * 
+     * @param service
+     */
+    public void invokeRemoved(DependencyService service);
 }

Added: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterImpl.java?rev=888294&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterImpl.java
 (added)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AdapterImpl.java
 Tue Dec  8 08:58:40 2009
@@ -0,0 +1,60 @@
+/*
+ * 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.dm.impl;
+
+import java.util.List;
+
+import org.apache.felix.dm.DependencyManager;
+import org.apache.felix.dm.service.Service;
+import org.osgi.framework.ServiceReference;
+
+public class AdapterImpl {
+       private volatile DependencyManager m_manager;
+       private volatile Service m_service;
+       private final Class m_iface;
+       private final Class m_iface2;
+       private final Class m_impl;
+       
+       // TODO adapts a "dependency" ... making it sort of a decorator factory
+       public AdapterImpl(Class iface, Class iface2, Class impl) {
+               m_iface = iface;
+               m_iface2 = iface2;
+               m_impl = impl;
+       }
+       
+       public void added(ServiceReference ref, Object service) {
+               // TODO decorator be smarter:
+               
+               // get any "global" dependencies
+               List dependencies = m_service.getDependencies();
+
+               m_manager.add(m_manager.createService()
+                       .setInterface(m_iface2.getName(), null)
+                       .setImplementation(m_impl)
+                       .add(dependencies)
+                       .add(m_manager.createServiceDependency()
+                               .setService(m_iface, ref)
+                               .setRequired(true)
+                               )
+                       );
+       }
+
+       public void removed(ServiceReference ref, Object service) {
+       }
+}

Added: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterImpl.java?rev=888294&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterImpl.java
 (added)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterImpl.java
 Tue Dec  8 08:58:40 2009
@@ -0,0 +1,53 @@
+/*
+ * 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.dm.impl;
+
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.Bundle;
+
+public class BundleAdapterImpl {
+       private final int m_stateMask;
+       private final String m_filter;
+       private final Object m_impl;
+       private volatile DependencyManager m_manager;
+       private final Class m_iface;
+
+       public BundleAdapterImpl(int stateMask, String filter, Object impl, 
Class iface) {
+               m_stateMask = stateMask;
+               m_filter = filter;
+               m_impl = impl;
+               m_iface = iface;
+       }
+       
+       public void added(Bundle bundle) {
+               // TODO decorator be smarter:
+               m_manager.add(m_manager.createService()
+                       .setInterface(m_iface.getName(), null)
+                       .setImplementation(m_impl)
+                       .add(m_manager.createBundleDependency()
+                               .setBundle(bundle)
+                               .setStateMask(m_stateMask)
+                               .setRequired(true)
+                               )
+                       );
+       }
+
+       public void removed(Bundle bundle) {
+       }
+}

Added: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterImpl.java?rev=888294&view=auto
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterImpl.java
 (added)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterImpl.java
 Tue Dec  8 08:58:40 2009
@@ -0,0 +1,49 @@
+/*
+ * 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.dm.impl;
+
+import org.apache.felix.dm.DependencyManager;
+import org.apache.felix.dm.resources.Resource;
+
+public class ResourceAdapterImpl {
+       private volatile DependencyManager m_manager;
+       private final Object m_impl;
+       private final Class m_iface;
+
+       public ResourceAdapterImpl(Object impl, Class iface) {
+               m_impl = impl;
+               m_iface = iface;
+       }
+
+       public void added(Resource resource) {
+               System.out.println("ADDED " + resource);
+               m_manager.add(m_manager.createService()
+                       .setInterface(m_iface.getName(), null)
+                       .setImplementation(m_impl)
+                       .add(m_manager.createResourceDependency()
+                               .setResource(resource)
+                               .setRequired(true)
+                               )
+                       );
+       }
+
+       public void removed(Resource resource) {
+       }
+
+}

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java?rev=888294&r1=888293&r2=888294&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
 Tue Dec  8 08:58:40 2009
@@ -49,7 +49,6 @@
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.cm.ConfigurationException;
 
 /**
  * Service implementation.
@@ -923,72 +922,80 @@
         Iterator i = state.getDependencies().iterator();
         while (i.hasNext()) {
             Dependency dependency = (Dependency) i.next();
-            if (dependency instanceof ServiceDependencyImpl) {
-                ServiceDependencyImpl sd = (ServiceDependencyImpl) dependency;
-                if (sd.isAutoConfig()) {
-                    if (sd.isRequired()) {
-                        configureImplementation(sd.getInterface(), 
sd.getService(), sd.getAutoConfigName());
-                    }
-                    else {
-                        // for optional services, we do an "ad-hoc" lookup to 
inject the service if it is
-                        // already available even though the tracker has not 
yet been started
-                        configureImplementation(sd.getInterface(), 
sd.lookupService(), sd.getAutoConfigName());
-                    }
-                }
-                // for required dependencies, we invoke any callbacks here
-                if (sd.isRequired()) {
-                    sd.invokeAdded(this, sd.lookupServiceReference(), 
sd.lookupService());
-                }
-            }
-            else if (dependency instanceof BundleDependencyImpl) {
-                BundleDependencyImpl bd = (BundleDependencyImpl) dependency;
-                if (bd.isAutoConfig()) {
-                    if (bd.isRequired()) {
-                        configureImplementation(Bundle.class, bd.getBundle()); 
// TODO AutoConfigName support
-                    }
-                    else {
-                        // for optional services, we do an "ad-hoc" lookup to 
inject the service if it is
-                        // already available even though the tracker has not 
yet been started
-                        
-                        // TODO !!! configureImplementation(sd.getInterface(), 
sd.lookupService(), sd.getAutoConfigName());
-                    }
-                }
-                // for required dependencies, we invoke any callbacks here
-                if (bd.isRequired()) {
-                    bd.invokeAdded(this, bd.getBundle());
-                }
-            }
-            else if (dependency instanceof ResourceDependencyImpl) {
-                ResourceDependencyImpl bd = (ResourceDependencyImpl) 
dependency;
-                if (bd.isAutoConfig()) {
-                    if (bd.isRequired()) {
-                        configureImplementation(Resource.class, 
bd.getResource()); // TODO AutoConfigName support
-                    }
-                    else {
-                        // for optional services, we do an "ad-hoc" lookup to 
inject the service if it is
-                        // already available even though the tracker has not 
yet been started
-                        
-                        // TODO !!! configureImplementation(sd.getInterface(), 
sd.lookupService(), sd.getAutoConfigName());
-                    }
-                }
-                // for required dependencies, we invoke any callbacks here
-                if (bd.isRequired()) {
-                    bd.invokeAdded(this, bd.getResource());
-                }
+            if (dependency.isAutoConfig()) {
+                configureImplementation(dependency.getAutoConfigType(), 
dependency.getAutoConfigInstance(), dependency.getAutoConfigName());
             }
-            else if (dependency instanceof ConfigurationDependencyImpl) {
-                ConfigurationDependencyImpl cd = (ConfigurationDependencyImpl) 
dependency;
-                // for configuration dependencies, we invoke updated
-                try {
-                    cd.invokeUpdate(this, this.getService(), 
cd.getConfiguration());
-                }
-                catch (ConfigurationException e) {
-                    // if this happens, it's definitely an inconsistency
-                    // when sharing configuration dependencies between 
services, all implementations
-                    // should accept the same configurations
-                    e.printStackTrace();
-                }
+            if (dependency.isRequired()) {
+                dependency.invokeAdded(this);
             }
+            
+            
+//            if (dependency instanceof ServiceDependencyImpl) {
+//                ServiceDependencyImpl sd = (ServiceDependencyImpl) 
dependency;
+//                if (sd.isAutoConfig()) {
+//                    if (sd.isRequired()) {
+//                        configureImplementation(sd.getInterface(), 
sd.getService(), sd.getAutoConfigName());
+//                    }
+//                    else {
+//                        // for optional services, we do an "ad-hoc" lookup 
to inject the service if it is
+//                        // already available even though the tracker has not 
yet been started
+//                        configureImplementation(sd.getInterface(), 
sd.lookupService(), sd.getAutoConfigName());
+//                    }
+//                }
+//                // for required dependencies, we invoke any callbacks here
+//                if (sd.isRequired()) {
+//                    sd.invokeAdded(this, sd.lookupServiceReference(), 
sd.lookupService());
+//                }
+//            }
+//            else if (dependency instanceof BundleDependencyImpl) {
+//                BundleDependencyImpl bd = (BundleDependencyImpl) dependency;
+//                if (bd.isAutoConfig()) {
+//                    if (bd.isRequired()) {
+//                        configureImplementation(Bundle.class, 
bd.getBundle()); // TODO AutoConfigName support
+//                    }
+//                    else {
+//                        // for optional services, we do an "ad-hoc" lookup 
to inject the service if it is
+//                        // already available even though the tracker has not 
yet been started
+//                        
+//                        // TODO !!! 
configureImplementation(sd.getInterface(), sd.lookupService(), 
sd.getAutoConfigName());
+//                    }
+//                }
+//                // for required dependencies, we invoke any callbacks here
+//                if (bd.isRequired()) {
+//                    bd.invokeAdded(this, bd.getBundle());
+//                }
+//            }
+//            else if (dependency instanceof ResourceDependencyImpl) {
+//                ResourceDependencyImpl bd = (ResourceDependencyImpl) 
dependency;
+//                if (bd.isAutoConfig()) {
+//                    if (bd.isRequired()) {
+//                        configureImplementation(Resource.class, 
bd.getResource()); // TODO AutoConfigName support
+//                    }
+//                    else {
+//                        // for optional services, we do an "ad-hoc" lookup 
to inject the service if it is
+//                        // already available even though the tracker has not 
yet been started
+//                        
+//                        // TODO !!! 
configureImplementation(sd.getInterface(), sd.lookupService(), 
sd.getAutoConfigName());
+//                    }
+//                }
+//                // for required dependencies, we invoke any callbacks here
+//                if (bd.isRequired()) {
+//                    bd.invokeAdded(this, bd.getResource());
+//                }
+//            }
+//            else if (dependency instanceof ConfigurationDependencyImpl) {
+//                ConfigurationDependencyImpl cd = 
(ConfigurationDependencyImpl) dependency;
+//                // for configuration dependencies, we invoke updated
+//                try {
+//                    cd.invokeUpdate(this, this.getService(), 
cd.getConfiguration());
+//                }
+//                catch (ConfigurationException e) {
+//                    // if this happens, it's definitely an inconsistency
+//                    // when sharing configuration dependencies between 
services, all implementations
+//                    // should accept the same configurations
+//                    e.printStackTrace();
+//                }
+//            }
         }
     }
 
@@ -996,13 +1003,16 @@
         Iterator i = state.getDependencies().iterator();
         while (i.hasNext()) {
             Dependency dependency = (Dependency) i.next();
-            if (dependency instanceof ServiceDependencyImpl) {
-                ServiceDependencyImpl sd = (ServiceDependencyImpl) dependency;
-                // for required dependencies, we invoke any callbacks here
-                if (sd.isRequired()) {
-                    sd.invokeRemoved(this, sd.lookupServiceReference(), 
sd.lookupService());
-                }
+            if (dependency.isRequired()) {
+                dependency.invokeRemoved(this);
             }
+//            if (dependency instanceof ServiceDependencyImpl) {
+//                ServiceDependencyImpl sd = (ServiceDependencyImpl) 
dependency;
+//                // for required dependencies, we invoke any callbacks here
+//                if (sd.isRequired()) {
+//                    sd.invokeRemoved(this, sd.lookupServiceReference(), 
sd.lookupService());
+//                }
+//            }
         }
     }
 

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/BundleDependencyImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/BundleDependencyImpl.java?rev=888294&r1=888293&r2=888294&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/BundleDependencyImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/BundleDependencyImpl.java
 Tue Dec  8 08:58:40 2009
@@ -97,10 +97,12 @@
 
        public String getName() {
         StringBuilder sb = new StringBuilder();
-        sb.append(m_bundleInstance.getSymbolicName());
-        sb.append(' ');
-        sb.append(m_bundleInstance.getVersion());
-        sb.append(' ');
+        if (m_bundleInstance != null) {
+            sb.append(m_bundleInstance.getSymbolicName());
+            sb.append(' ');
+            sb.append(m_bundleInstance.getHeaders().get("Bundle-Version"));
+            sb.append(' ');
+        }
         sb.append(Integer.toString(m_stateMask, 2));
         if (m_filter != null) {
             sb.append(' ');
@@ -120,7 +122,8 @@
 
        public Object addingBundle(Bundle bundle, BundleEvent event) {
                // if we don't like a bundle, we could reject it here by 
returning null
-               if (m_bundleId >= 0 && m_bundleId != bundle.getBundleId()) {
+               long bundleId = bundle.getBundleId();
+        if (m_bundleId >= 0 && m_bundleId != bundleId) {
                        return null;
                }
                Filter filter = m_filter;
@@ -354,4 +357,36 @@
        }
        return null;
     }
+
+    public Object getAutoConfigInstance() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getAutoConfigName() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Class getAutoConfigType() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void invokeAdded(DependencyService service) {
+        // we remember these for future reference, needed for required service 
callbacks
+        if (m_isStarted) {
+            // use the tracker
+        }
+        else {
+            // do a manual lookup
+        }
+        m_bundleInstance = null; // TODO save what we looked up here
+        invokeAdded(service, m_bundleInstance);
+    }
+
+    public void invokeRemoved(DependencyService service) {
+        invokeRemoved(service, m_bundleInstance);
+        m_bundleInstance = null;
+    }
 }

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ConfigurationDependencyImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ConfigurationDependencyImpl.java?rev=888294&r1=888293&r2=888294&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ConfigurationDependencyImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ConfigurationDependencyImpl.java
 Tue Dec  8 08:58:40 2009
@@ -28,8 +28,6 @@
 import java.util.Set;
 
 import org.apache.felix.dm.dependencies.ConfigurationDependency;
-import org.apache.felix.dm.dependencies.Dependency;
-import org.apache.felix.dm.dependencies.ServiceDependency;
 import org.apache.felix.dm.impl.Logger;
 import org.apache.felix.dm.management.ServiceComponentDependency;
 import org.osgi.framework.BundleContext;
@@ -266,4 +264,38 @@
     public String getType() {
         return "configuration";
     }
+
+    public Object getAutoConfigInstance() {
+        return getConfiguration();
+    }
+
+    public String getAutoConfigName() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Class getAutoConfigType() {
+        return Dictionary.class;
+    }
+
+    public void invokeAdded(DependencyService service) {
+        try {
+            invokeUpdate(service, service.getService(), getConfiguration());
+        }
+        catch (ConfigurationException e) {
+            // if this happens, it's definitely an inconsistency, since we
+            // asked the instance the same question before (if this is a
+            // valid configuration) and then it was
+            e.printStackTrace();
+        }
+    }
+
+    public void invokeRemoved(DependencyService service) {
+        // TODO Auto-generated method stub
+    }
+
+    public boolean isAutoConfig() {
+        // TODO Auto-generated method stub
+        return false;
+    }
 }

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ResourceDependencyImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ResourceDependencyImpl.java?rev=888294&r1=888293&r2=888294&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ResourceDependencyImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ResourceDependencyImpl.java
 Tue Dec  8 08:58:40 2009
@@ -44,7 +44,6 @@
     private boolean m_autoConfig;
     private final Logger m_logger;
     private String m_autoConfigInstance;
-//    private DependencyService m_service;
     protected List m_services = new ArrayList();
        private boolean m_isRequired;
        private String m_resourceFilter;
@@ -363,6 +362,7 @@
     }
 
        public ResourceDependency setFilter(String resourceFilter) {
+        ensureNotActive();
                m_resourceFilter = resourceFilter;
                return this;
        }
@@ -374,4 +374,28 @@
        System.out.println("Fetching resource");
        return m_resource;
     }
+
+    public Object getAutoConfigInstance() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getAutoConfigName() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Class getAutoConfigType() {
+        return Resource.class;
+    }
+
+    public void invokeAdded(DependencyService service) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void invokeRemoved(DependencyService service) {
+        // TODO Auto-generated method stub
+        
+    }
 }

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java?rev=888294&r1=888293&r2=888294&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
 Tue Dec  8 08:58:40 2009
@@ -28,7 +28,6 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.felix.dm.dependencies.Dependency;
 import org.apache.felix.dm.dependencies.ServiceDependency;
 import org.apache.felix.dm.impl.DefaultNullObject;
 import org.apache.felix.dm.impl.Logger;
@@ -196,7 +195,7 @@
         if (m_isStarted) {
             service = m_tracker.getService();
         }
-        if (service == null) {
+        if (service == null && isAutoConfig()) {
             service = getDefaultImplementation();
             if (service == null) {
                 service = getNullObject();
@@ -208,7 +207,7 @@
     public Object lookupService() {
         Object service = null;
         if (m_isStarted) {
-            service = m_tracker.getService();
+            service = getService();
         }
         else {
             ServiceReference[] refs = null;
@@ -240,7 +239,7 @@
                 throw new IllegalStateException("Could not lookup dependency, 
no service name specified.");
             }
         }
-        if (service == null) {
+        if (service == null && isAutoConfig()) {
             service = getDefaultImplementation();
             if (service == null) {
                 service = getNullObject();
@@ -379,10 +378,6 @@
         if (!m_trackedServiceName.isInstance(service)) {
             return null;
         }
-            
-        // we remember these for future reference, needed for required service 
callbacks
-        m_reference = ref;
-        m_serviceInstance = service;
         return service;
     }
 
@@ -419,9 +414,6 @@
     }
 
     public void modifiedService(ServiceReference ref, Object service) {
-        m_reference = ref;
-        m_serviceInstance = service;
-        
         Object[] services;
         synchronized (this) {
             services = m_services.toArray();
@@ -722,6 +714,14 @@
     public String getAutoConfigName() {
         return m_autoConfigInstance;
     }
+    
+    public Object getAutoConfigInstance() {
+        return lookupService();
+    }
+    
+    public Class getAutoConfigType() {
+        return getInterface();
+    }
 
     public String getName() {
         StringBuilder sb = new StringBuilder();
@@ -740,4 +740,17 @@
     public String getType() {
         return "service";
     }
+
+    public void invokeAdded(DependencyService service) {
+        // we remember these for future reference, needed for required service 
callbacks
+        m_reference = lookupServiceReference();
+        m_serviceInstance = lookupService();
+        invokeAdded(service, m_reference, m_serviceInstance);
+    }
+
+    public void invokeRemoved(DependencyService service) {
+        invokeRemoved(service, m_reference, m_serviceInstance);
+        m_reference = null;
+        m_serviceInstance = null;
+    }
 }

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/tracker/ServiceTracker.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/tracker/ServiceTracker.java?rev=888294&r1=888293&r2=888294&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/tracker/ServiceTracker.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/tracker/ServiceTracker.java
 Tue Dec  8 08:58:40 2009
@@ -863,7 +863,7 @@
                                                }
                                        }
                                        break;
-                               case ServiceEvent.MODIFIED_ENDMATCH :
+                case 8 /* ServiceEvent.MODIFIED_ENDMATCH */ :
                                case ServiceEvent.UNREGISTERING :
                                        untrack(reference, event);
                                        /*

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/resources/BundleResourceRepository.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/resources/BundleResourceRepository.java?rev=888294&r1=888293&r2=888294&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/resources/BundleResourceRepository.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/resources/BundleResourceRepository.java
 Tue Dec  8 08:58:40 2009
@@ -56,7 +56,7 @@
                        URL entry = (URL) entries.nextElement();
 
                        Properties props = new Properties();
-                       props.setProperty(Resource.REPOSITORY, 
bundle.getSymbolicName() + "_" + bundle.getVersion());
+                       props.setProperty(Resource.REPOSITORY, 
bundle.getSymbolicName() + "_" + bundle.getHeaders().get("Bundle-Version"));
                        props.setProperty(Resource.PATH, entry.getPath());
                        props.setProperty(Resource.NAME, entry.getFile());
 
@@ -84,7 +84,7 @@
                        URL entry = (URL) entries.nextElement();
 
                        Properties props = new Properties();
-                       props.setProperty(Resource.REPOSITORY, 
bundle.getSymbolicName() + "_" + bundle.getVersion());
+                       props.setProperty(Resource.REPOSITORY, 
bundle.getSymbolicName() + "_" + bundle.getHeaders().get("Bundle-Version"));
                        props.setProperty(Resource.PATH, entry.getPath());
                        props.setProperty(Resource.NAME, entry.getFile());
 
@@ -112,7 +112,7 @@
 
                public String getRepository() {
 
-                       return bundle.getSymbolicName() + "_" + 
bundle.getVersion();
+                       return bundle.getSymbolicName() + "_" + 
bundle.getHeaders().get("Bundle-Version");
                }
 
                public InputStream openStream() throws IOException {


Reply via email to