You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2014/10/29 23:43:35 UTC

svn commit: r1635323 - in /felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples: ./ src/org/apache/felix/dependencymanager/samples/customdep/

Author: pderop
Date: Wed Oct 29 22:43:34 2014
New Revision: 1635323

URL: http://svn.apache.org/r1635323
Log:
Added an example for a DM custom dependency

Added:
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/customdep.bnd
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/Activator.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependency.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathTracker.java

Added: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/customdep.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/customdep.bnd?rev=1635323&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/customdep.bnd (added)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/customdep.bnd Wed Oct 29 22:43:34 2014
@@ -0,0 +1,3 @@
+Private-Package:  \
+	org.apache.felix.dependencymanager.samples.customdep
+Bundle-Activator: org.apache.felix.dependencymanager.samples.customdep.Activator
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/Activator.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/Activator.java?rev=1635323&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/Activator.java (added)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/Activator.java Wed Oct 29 22:43:34 2014
@@ -0,0 +1,14 @@
+package org.apache.felix.dependencymanager.samples.customdep;
+
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+
+public class Activator extends DependencyActivatorBase {
+    @Override
+    public void init(BundleContext context, DependencyManager m) throws Exception {
+        m.add(createComponent()
+            .setImplementation(PathTracker.class)
+            .add(new PathDependency("/tmp").setCallbacks("add", "change", "remove")));
+    }
+}

Added: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependency.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependency.java?rev=1635323&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependency.java (added)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathDependency.java Wed Oct 29 22:43:34 2014
@@ -0,0 +1,120 @@
+package org.apache.felix.dependencymanager.samples.customdep;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardWatchEventKinds;
+import java.nio.file.WatchEvent;
+import java.nio.file.WatchKey;
+import java.nio.file.WatchService;
+import java.util.Dictionary;
+import java.util.List;
+
+import org.apache.felix.dm.context.AbstractDependency;
+import org.apache.felix.dm.context.DependencyContext;
+import org.apache.felix.dm.context.Event;
+
+public class PathDependency extends AbstractDependency<PathDependency> implements Runnable {
+    private final String m_path;
+    private volatile Thread m_thread;
+
+    public class PathEvent implements Event {
+        final String m_path;
+        public PathEvent(String path) {
+            m_path = path;
+        }
+
+        @Override
+        public boolean equals(Object e) {
+            if (e instanceof PathEvent) {
+                return m_path.equals(((PathEvent) e).m_path);
+            }
+            return false;
+        }
+
+        @Override
+        public int hashCode() {
+            return m_path.hashCode();
+        }
+
+        @Override
+        public int compareTo(Event o) {
+            return m_path.compareTo(((PathEvent) o).m_path);
+        }
+
+        @Override
+        public void close() {
+        }
+
+        @Override
+        public Object getEvent() {
+            return m_path;
+        }
+
+        @Override
+        public Dictionary<String, Object> getProperties() {
+            return EMPTY_PROPERTIES;
+        }
+    }
+
+    public PathDependency(String path) {
+        super.setRequired(true);
+        m_path = path;
+    }
+
+    public PathDependency(PathDependency prototype) {
+        super(prototype);
+        m_path = prototype.m_path;
+    }
+
+    @Override
+    public DependencyContext createCopy() {
+        return new PathDependency(this);
+    }
+
+    @Override
+    public String getName() {
+        return "" + isAvailable();
+    }
+
+    @Override
+    public String getType() {
+        return "file";
+    }
+
+    protected void startTracking() {
+        m_thread = new Thread(this);
+        m_thread.start();
+    }
+
+    protected void stopTracking() {
+        m_thread.interrupt();
+    }
+    
+    public boolean invoke(String method, Event e, Object[] instances) {
+        // specific for this type of dependency
+        return m_component.invokeCallbackMethod(instances, method, 
+            new Class[][] { {String.class}, 
+                            {}}, 
+            new Object[][] { { e.getEvent() }, 
+                            {}});
+    }
+
+    public void run() {
+        Path myDir = Paths.get(m_path);
+
+        try {
+            WatchService watcher = myDir.getFileSystem().newWatchService();
+            myDir.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);
+            WatchKey watckKey = watcher.take();
+            List<WatchEvent<?>> events = watckKey.pollEvents();
+
+            for (WatchEvent event : events) {
+                if (event.kind() == StandardWatchEventKinds.ENTRY_MODIFY) {
+                    add(new PathEvent(event.context().toString()));
+                }
+            }
+        } catch (Exception e) {
+            System.out.println("Error: " + e.toString());
+        }
+    }
+}
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathTracker.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathTracker.java?rev=1635323&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathTracker.java (added)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.samples/src/org/apache/felix/dependencymanager/samples/customdep/PathTracker.java Wed Oct 29 22:43:34 2014
@@ -0,0 +1,7 @@
+package org.apache.felix.dependencymanager.samples.customdep;
+
+public class PathTracker {
+    void add(String path) {
+        System.out.println("PathTracker.add: " + path);
+    }
+}