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