tom

Cleaned-up templates and added package.html files.

1 package org.onlab.onos.event; 1 package org.onlab.onos.event;
2 2
3 import org.slf4j.Logger; 3 import org.slf4j.Logger;
4 -import org.slf4j.LoggerFactory;
5 4
6 import java.util.Set; 5 import java.util.Set;
7 import java.util.concurrent.CopyOnWriteArraySet; 6 import java.util.concurrent.CopyOnWriteArraySet;
8 7
9 import static com.google.common.base.Preconditions.checkArgument; 8 import static com.google.common.base.Preconditions.checkArgument;
10 import static com.google.common.base.Preconditions.checkNotNull; 9 import static com.google.common.base.Preconditions.checkNotNull;
10 +import static org.slf4j.LoggerFactory.getLogger;
11 11
12 /** 12 /**
13 * Base implementation of a manager capable of tracking listeners and 13 * Base implementation of a manager capable of tracking listeners and
...@@ -16,7 +16,7 @@ import static com.google.common.base.Preconditions.checkNotNull; ...@@ -16,7 +16,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
16 public class AbstractListenerManager<E extends Event, L extends EventListener<E>> 16 public class AbstractListenerManager<E extends Event, L extends EventListener<E>>
17 implements EventSink<E> { 17 implements EventSink<E> {
18 18
19 - protected Logger log = LoggerFactory.getLogger(AbstractListenerManager.class); 19 + private final Logger log = getLogger(getClass());
20 20
21 private final Set<L> listeners = new CopyOnWriteArraySet<>(); 21 private final Set<L> listeners = new CopyOnWriteArraySet<>();
22 22
......
1 +<body>
2 +ONOS Core API definitions.
3 +</body>
...\ No newline at end of file ...\ No newline at end of file
1 package org.onlab.onos.event.impl; 1 package org.onlab.onos.event.impl;
2 2
3 +import org.apache.felix.scr.annotations.Activate;
3 import org.apache.felix.scr.annotations.Component; 4 import org.apache.felix.scr.annotations.Component;
5 +import org.apache.felix.scr.annotations.Deactivate;
4 import org.apache.felix.scr.annotations.Service; 6 import org.apache.felix.scr.annotations.Service;
7 +import org.onlab.onos.event.AbstractEvent;
8 +import org.onlab.onos.event.DefaultEventSinkBroker;
5 import org.onlab.onos.event.Event; 9 import org.onlab.onos.event.Event;
6 import org.onlab.onos.event.EventDispatchService; 10 import org.onlab.onos.event.EventDispatchService;
7 import org.onlab.onos.event.EventSink; 11 import org.onlab.onos.event.EventSink;
12 +import org.slf4j.Logger;
8 13
9 -import java.util.Set; 14 +import java.util.concurrent.BlockingQueue;
10 import java.util.concurrent.ExecutorService; 15 import java.util.concurrent.ExecutorService;
11 -import java.util.concurrent.Executors; 16 +import java.util.concurrent.LinkedBlockingQueue;
17 +
18 +import static java.util.concurrent.Executors.newSingleThreadExecutor;
19 +import static org.onlab.util.Tools.namedThreads;
20 +import static org.slf4j.LoggerFactory.getLogger;
12 21
13 /** 22 /**
14 * Simple implementation of an event dispatching service. 23 * Simple implementation of an event dispatching service.
15 */ 24 */
16 @Component(immediate = true) 25 @Component(immediate = true)
17 @Service 26 @Service
18 -public class SimpleEventDispatcher implements EventDispatchService { 27 +public class SimpleEventDispatcher extends DefaultEventSinkBroker
28 + implements EventDispatchService {
19 29
20 - private final ExecutorService executor = Executors.newSingleThreadExecutor(); 30 + private final Logger log = getLogger(getClass());
21 31
22 - @Override 32 + private final ExecutorService executor =
23 - public void post(Event event) { 33 + newSingleThreadExecutor(namedThreads("event-dispatch-%d"));
24 34
25 - } 35 + @SuppressWarnings("unchecked")
36 + private static final Event KILL_PILL = new AbstractEvent(null, 0) {
37 + };
26 38
27 - @Override 39 + private final BlockingQueue<Event> events = new LinkedBlockingQueue<>();
28 - public <E extends Event> void addSink(Class<E> eventClass, EventSink<E> sink) {
29 40
30 - } 41 + private volatile boolean stopped = false;
31 42
32 @Override 43 @Override
33 - public <E extends Event> void removeSink(Class<E> eventClass) { 44 + public void post(Event event) {
45 + events.add(event);
46 + }
34 47
48 + @Activate
49 + public void activate() {
50 + stopped = false;
51 + executor.execute(new DispatchLoop());
52 + log.info("Started");
35 } 53 }
36 54
37 - @Override 55 + @Deactivate
38 - public <E extends Event> EventSink<E> getSink(Class<E> eventClass) { 56 + public void deactivate() {
39 - return null; 57 + stopped = true;
58 + post(KILL_PILL);
59 + log.info("Stopped");
40 } 60 }
41 61
62 + // Auxiliary event dispatching loop that feeds off the events queue.
63 + private class DispatchLoop implements Runnable {
42 @Override 64 @Override
43 - public Set<Class<? extends Event>> getSinks() { 65 + @SuppressWarnings("unchecked")
44 - return null; 66 + public void run() {
67 + log.info("Dispatch loop initiated");
68 + while (!stopped) {
69 + try {
70 + // Fetch the next event and if it is the kill-pill, bail
71 + Event event = events.take();
72 + if (event == KILL_PILL) {
73 + break;
74 + }
75 +
76 + // Locate the sink for the event class and use it to
77 + // process the event
78 + EventSink sink = getSink(event.getClass());
79 + if (sink != null) {
80 + sink.process(event);
81 + } else {
82 + log.warn("No sink registered for event class {}",
83 + event.getClass());
84 + }
85 + } catch (Throwable e) {
86 + log.warn("Error encountered while dispatching event:", e);
45 } 87 }
88 + }
89 + log.info("Dispatch loop terminated");
90 + }
91 + }
92 +
46 } 93 }
......
...@@ -7,12 +7,12 @@ import org.apache.felix.scr.annotations.Deactivate; ...@@ -7,12 +7,12 @@ import org.apache.felix.scr.annotations.Deactivate;
7 import org.apache.felix.scr.annotations.Service; 7 import org.apache.felix.scr.annotations.Service;
8 import org.onlab.onos.GreetService; 8 import org.onlab.onos.GreetService;
9 import org.slf4j.Logger; 9 import org.slf4j.Logger;
10 -import org.slf4j.LoggerFactory;
11 10
12 import java.util.HashSet; 11 import java.util.HashSet;
13 import java.util.Set; 12 import java.util.Set;
14 13
15 import static com.google.common.base.Preconditions.checkNotNull; 14 import static com.google.common.base.Preconditions.checkNotNull;
15 +import static org.slf4j.LoggerFactory.getLogger;
16 16
17 /** 17 /**
18 * Trivial implementation of the seed service to demonstrate component and 18 * Trivial implementation of the seed service to demonstrate component and
...@@ -22,7 +22,7 @@ import static com.google.common.base.Preconditions.checkNotNull; ...@@ -22,7 +22,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
22 @Service 22 @Service
23 public class GreetManager implements GreetService { 23 public class GreetManager implements GreetService {
24 24
25 - private final Logger log = LoggerFactory.getLogger(getClass()); 25 + private final Logger log = getLogger(getClass());
26 26
27 private final Set<String> names = new HashSet<>(); 27 private final Set<String> names = new HashSet<>();
28 28
......
...@@ -7,7 +7,8 @@ import org.apache.felix.scr.annotations.Reference; ...@@ -7,7 +7,8 @@ import org.apache.felix.scr.annotations.Reference;
7 import org.apache.felix.scr.annotations.ReferenceCardinality; 7 import org.apache.felix.scr.annotations.ReferenceCardinality;
8 import org.onlab.onos.GreetService; 8 import org.onlab.onos.GreetService;
9 import org.slf4j.Logger; 9 import org.slf4j.Logger;
10 -import org.slf4j.LoggerFactory; 10 +
11 +import static org.slf4j.LoggerFactory.getLogger;
11 12
12 /** 13 /**
13 * Example of a component that does not provide any service, but consumes one. 14 * Example of a component that does not provide any service, but consumes one.
...@@ -15,7 +16,7 @@ import org.slf4j.LoggerFactory; ...@@ -15,7 +16,7 @@ import org.slf4j.LoggerFactory;
15 @Component(immediate = true) 16 @Component(immediate = true)
16 public class SomeOtherComponent { 17 public class SomeOtherComponent {
17 18
18 - private final Logger log = LoggerFactory.getLogger(SomeOtherComponent.class); 19 + private final Logger log = getLogger(getClass());
19 20
20 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 21 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
21 protected GreetService service; 22 protected GreetService service;
......
...@@ -3,6 +3,8 @@ package org.onlab.onos.net.trivial.impl; ...@@ -3,6 +3,8 @@ package org.onlab.onos.net.trivial.impl;
3 import org.apache.felix.scr.annotations.Activate; 3 import org.apache.felix.scr.annotations.Activate;
4 import org.apache.felix.scr.annotations.Component; 4 import org.apache.felix.scr.annotations.Component;
5 import org.apache.felix.scr.annotations.Deactivate; 5 import org.apache.felix.scr.annotations.Deactivate;
6 +import org.apache.felix.scr.annotations.Reference;
7 +import org.apache.felix.scr.annotations.ReferenceCardinality;
6 import org.apache.felix.scr.annotations.Service; 8 import org.apache.felix.scr.annotations.Service;
7 import org.onlab.onos.event.AbstractListenerManager; 9 import org.onlab.onos.event.AbstractListenerManager;
8 import org.onlab.onos.event.EventDispatchService; 10 import org.onlab.onos.event.EventDispatchService;
...@@ -22,11 +24,11 @@ import org.onlab.onos.net.device.PortDescription; ...@@ -22,11 +24,11 @@ import org.onlab.onos.net.device.PortDescription;
22 import org.onlab.onos.net.provider.AbstractProviderBroker; 24 import org.onlab.onos.net.provider.AbstractProviderBroker;
23 import org.onlab.onos.net.provider.AbstractProviderService; 25 import org.onlab.onos.net.provider.AbstractProviderService;
24 import org.slf4j.Logger; 26 import org.slf4j.Logger;
25 -import org.slf4j.LoggerFactory;
26 27
27 import java.util.List; 28 import java.util.List;
28 29
29 import static com.google.common.base.Preconditions.checkNotNull; 30 import static com.google.common.base.Preconditions.checkNotNull;
31 +import static org.slf4j.LoggerFactory.getLogger;
30 32
31 /** 33 /**
32 * Provides basic implementation of the device SB &amp; NB APIs. 34 * Provides basic implementation of the device SB &amp; NB APIs.
...@@ -42,24 +44,25 @@ public class SimpleDeviceManager ...@@ -42,24 +44,25 @@ public class SimpleDeviceManager
42 public static final String DEVICE_DESCRIPTION_NULL = "Device description cannot be null"; 44 public static final String DEVICE_DESCRIPTION_NULL = "Device description cannot be null";
43 public static final String PORT_DESCRIPTION_NULL = "Port description cannot be null"; 45 public static final String PORT_DESCRIPTION_NULL = "Port description cannot be null";
44 46
45 - private Logger log = LoggerFactory.getLogger(SimpleDeviceManager.class); 47 + private final Logger log = getLogger(getClass());
46 48
47 private final AbstractListenerManager<DeviceEvent, DeviceListener> 49 private final AbstractListenerManager<DeviceEvent, DeviceListener>
48 listenerManager = new AbstractListenerManager<>(); 50 listenerManager = new AbstractListenerManager<>();
49 51
50 - private EventDispatchService eventDispatcher;
51 -
52 private final DeviceStore store = new DeviceStore(); 52 private final DeviceStore store = new DeviceStore();
53 53
54 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
55 + private EventDispatchService eventDispatcher;
56 +
54 @Activate 57 @Activate
55 public void activate() { 58 public void activate() {
56 -// eventDispatcher.addSink(DeviceEvent.class, listenerManager); 59 + eventDispatcher.addSink(DeviceEvent.class, listenerManager);
57 log.info("Started"); 60 log.info("Started");
58 } 61 }
59 62
60 @Deactivate 63 @Deactivate
61 public void deactivate() { 64 public void deactivate() {
62 -// eventDispatcher.removeSink(DeviceEvent.class); 65 + eventDispatcher.removeSink(DeviceEvent.class);
63 log.info("Stopped"); 66 log.info("Stopped");
64 } 67 }
65 68
......
...@@ -3,56 +3,57 @@ package org.onlab.onos.net.trivial.impl; ...@@ -3,56 +3,57 @@ package org.onlab.onos.net.trivial.impl;
3 import org.apache.felix.scr.annotations.Activate; 3 import org.apache.felix.scr.annotations.Activate;
4 import org.apache.felix.scr.annotations.Component; 4 import org.apache.felix.scr.annotations.Component;
5 import org.apache.felix.scr.annotations.Deactivate; 5 import org.apache.felix.scr.annotations.Deactivate;
6 +import org.apache.felix.scr.annotations.Reference;
7 +import org.apache.felix.scr.annotations.ReferenceCardinality;
6 import org.apache.felix.scr.annotations.Service; 8 import org.apache.felix.scr.annotations.Service;
9 +import org.onlab.onos.event.AbstractListenerManager;
10 +import org.onlab.onos.event.EventDispatchService;
7 import org.onlab.onos.net.host.HostDescription; 11 import org.onlab.onos.net.host.HostDescription;
12 +import org.onlab.onos.net.host.HostEvent;
13 +import org.onlab.onos.net.host.HostListener;
8 import org.onlab.onos.net.host.HostProvider; 14 import org.onlab.onos.net.host.HostProvider;
9 import org.onlab.onos.net.host.HostProviderBroker; 15 import org.onlab.onos.net.host.HostProviderBroker;
10 import org.onlab.onos.net.host.HostProviderService; 16 import org.onlab.onos.net.host.HostProviderService;
11 import org.onlab.onos.net.provider.AbstractProviderBroker; 17 import org.onlab.onos.net.provider.AbstractProviderBroker;
12 import org.onlab.onos.net.provider.AbstractProviderService; 18 import org.onlab.onos.net.provider.AbstractProviderService;
13 import org.slf4j.Logger; 19 import org.slf4j.Logger;
14 -import org.slf4j.LoggerFactory; 20 +
21 +import static org.slf4j.LoggerFactory.getLogger;
15 22
16 /** 23 /**
17 * Provides basic implementation of the host SB &amp; NB APIs. 24 * Provides basic implementation of the host SB &amp; NB APIs.
18 */ 25 */
19 @Component(immediate = true) 26 @Component(immediate = true)
20 @Service 27 @Service
21 -public class SimpleHostManager implements HostProviderBroker { 28 +public class SimpleHostManager
29 + extends AbstractProviderBroker<HostProvider, HostProviderService>
30 + implements HostProviderBroker {
31 +
32 + private final Logger log = getLogger(getClass());
22 33
23 - private Logger log = LoggerFactory.getLogger(SimpleHostManager.class); 34 + private final AbstractListenerManager<HostEvent, HostListener>
35 + listenerManager = new AbstractListenerManager<>();
36 +
37 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
38 + private EventDispatchService eventDispatcher;
24 39
25 - private final HostProviderBroker broker = new InternalBroker();
26 40
27 @Activate 41 @Activate
28 public void activate() { 42 public void activate() {
43 + eventDispatcher.addSink(HostEvent.class, listenerManager);
29 log.info("Started"); 44 log.info("Started");
30 } 45 }
31 46
32 @Deactivate 47 @Deactivate
33 public void deactivate() { 48 public void deactivate() {
49 + eventDispatcher.removeSink(HostEvent.class);
34 log.info("Stopped"); 50 log.info("Stopped");
35 } 51 }
36 52
37 @Override 53 @Override
38 - public HostProviderService register(HostProvider provider) {
39 - return broker.register(provider);
40 - }
41 -
42 - @Override
43 - public void unregister(HostProvider provider) {
44 - broker.unregister(provider);
45 - }
46 -
47 - // Internal delegate for tracking various providers and issuing them a
48 - // personalized provider service.
49 - private class InternalBroker extends AbstractProviderBroker<HostProvider, HostProviderService>
50 - implements HostProviderBroker {
51 - @Override
52 protected HostProviderService createProviderService(HostProvider provider) { 54 protected HostProviderService createProviderService(HostProvider provider) {
53 return new InternalHostProviderService(provider); 55 return new InternalHostProviderService(provider);
54 } 56 }
55 - }
56 57
57 // Personalized host provider service issued to the supplied provider. 58 // Personalized host provider service issued to the supplied provider.
58 private class InternalHostProviderService extends AbstractProviderService<HostProvider> 59 private class InternalHostProviderService extends AbstractProviderService<HostProvider>
......
...@@ -3,56 +3,56 @@ package org.onlab.onos.net.trivial.impl; ...@@ -3,56 +3,56 @@ package org.onlab.onos.net.trivial.impl;
3 import org.apache.felix.scr.annotations.Activate; 3 import org.apache.felix.scr.annotations.Activate;
4 import org.apache.felix.scr.annotations.Component; 4 import org.apache.felix.scr.annotations.Component;
5 import org.apache.felix.scr.annotations.Deactivate; 5 import org.apache.felix.scr.annotations.Deactivate;
6 +import org.apache.felix.scr.annotations.Reference;
7 +import org.apache.felix.scr.annotations.ReferenceCardinality;
6 import org.apache.felix.scr.annotations.Service; 8 import org.apache.felix.scr.annotations.Service;
9 +import org.onlab.onos.event.AbstractListenerManager;
10 +import org.onlab.onos.event.EventDispatchService;
7 import org.onlab.onos.net.link.LinkDescription; 11 import org.onlab.onos.net.link.LinkDescription;
12 +import org.onlab.onos.net.link.LinkEvent;
13 +import org.onlab.onos.net.link.LinkListener;
8 import org.onlab.onos.net.link.LinkProvider; 14 import org.onlab.onos.net.link.LinkProvider;
9 import org.onlab.onos.net.link.LinkProviderBroker; 15 import org.onlab.onos.net.link.LinkProviderBroker;
10 import org.onlab.onos.net.link.LinkProviderService; 16 import org.onlab.onos.net.link.LinkProviderService;
11 import org.onlab.onos.net.provider.AbstractProviderBroker; 17 import org.onlab.onos.net.provider.AbstractProviderBroker;
12 import org.onlab.onos.net.provider.AbstractProviderService; 18 import org.onlab.onos.net.provider.AbstractProviderService;
13 import org.slf4j.Logger; 19 import org.slf4j.Logger;
14 -import org.slf4j.LoggerFactory; 20 +
21 +import static org.slf4j.LoggerFactory.getLogger;
15 22
16 /** 23 /**
17 * Provides basic implementation of the link SB &amp; NB APIs. 24 * Provides basic implementation of the link SB &amp; NB APIs.
18 */ 25 */
19 @Component(immediate = true) 26 @Component(immediate = true)
20 @Service 27 @Service
21 -public class SimpleLinkManager implements LinkProviderBroker { 28 +public class SimpleLinkManager
29 + extends AbstractProviderBroker<LinkProvider, LinkProviderService>
30 + implements LinkProviderBroker {
31 +
32 + private final Logger log = getLogger(getClass());
22 33
23 - private Logger log = LoggerFactory.getLogger(SimpleLinkManager.class); 34 + private final AbstractListenerManager<LinkEvent, LinkListener>
35 + listenerManager = new AbstractListenerManager<>();
24 36
25 - private final LinkProviderBroker broker = new InternalBroker(); 37 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
38 + private EventDispatchService eventDispatcher;
26 39
27 @Activate 40 @Activate
28 public void activate() { 41 public void activate() {
42 + eventDispatcher.addSink(LinkEvent.class, listenerManager);
29 log.info("Started"); 43 log.info("Started");
30 } 44 }
31 45
32 @Deactivate 46 @Deactivate
33 public void deactivate() { 47 public void deactivate() {
48 + eventDispatcher.removeSink(LinkEvent.class);
34 log.info("Stopped"); 49 log.info("Stopped");
35 } 50 }
36 51
37 @Override 52 @Override
38 - public LinkProviderService register(LinkProvider provider) {
39 - return broker.register(provider);
40 - }
41 -
42 - @Override
43 - public void unregister(LinkProvider provider) {
44 - broker.unregister(provider);
45 - }
46 -
47 - // Internal delegate for tracking various providers and issuing them a
48 - // personalized provider service.
49 - private class InternalBroker extends AbstractProviderBroker<LinkProvider, LinkProviderService>
50 - implements LinkProviderBroker {
51 - @Override
52 protected LinkProviderService createProviderService(LinkProvider provider) { 53 protected LinkProviderService createProviderService(LinkProvider provider) {
53 return new InternalLinkProviderService(provider); 54 return new InternalLinkProviderService(provider);
54 } 55 }
55 - }
56 56
57 // Personalized link provider service issued to the supplied provider. 57 // Personalized link provider service issued to the supplied provider.
58 private class InternalLinkProviderService extends AbstractProviderService<LinkProvider> 58 private class InternalLinkProviderService extends AbstractProviderService<LinkProvider>
......
1 +<body>
2 +ONOS local event dispatching mechanism.
3 +</body>
...\ No newline at end of file ...\ No newline at end of file
1 +<body>
2 +ONOS Core infrastructure implementations.
3 +</body>
...\ No newline at end of file ...\ No newline at end of file
...@@ -26,6 +26,11 @@ ...@@ -26,6 +26,11 @@
26 <groupId>com.google.guava</groupId> 26 <groupId>com.google.guava</groupId>
27 <artifactId>guava</artifactId> 27 <artifactId>guava</artifactId>
28 </dependency> 28 </dependency>
29 +
30 + <dependency>
31 + <groupId>org.onlab.onos</groupId>
32 + <artifactId>onlab-misc</artifactId>
33 + </dependency>
29 </dependencies> 34 </dependencies>
30 35
31 <build> 36 <build>
......
...@@ -112,6 +112,12 @@ ...@@ -112,6 +112,12 @@
112 <!-- ONOS related --> 112 <!-- ONOS related -->
113 <dependency> 113 <dependency>
114 <groupId>org.onlab.onos</groupId> 114 <groupId>org.onlab.onos</groupId>
115 + <artifactId>onlab-misc</artifactId>
116 + <version>${project.version}</version>
117 + </dependency>
118 +
119 + <dependency>
120 + <groupId>org.onlab.onos</groupId>
115 <artifactId>onos-api</artifactId> 121 <artifactId>onos-api</artifactId>
116 <version>${project.version}</version> 122 <version>${project.version}</version>
117 </dependency> 123 </dependency>
...@@ -260,13 +266,13 @@ ...@@ -260,13 +266,13 @@
260 <group> 266 <group>
261 <title>Network Model &amp; Services</title> 267 <title>Network Model &amp; Services</title>
262 <packages> 268 <packages>
263 - org.onlab.onos.* 269 + org.onlab.onos:org.onlab.onos.*
264 </packages> 270 </packages>
265 </group> 271 </group>
266 <group> 272 <group>
267 <title>Core Subsystems</title> 273 <title>Core Subsystems</title>
268 <packages> 274 <packages>
269 - org.onlab.onos.net.trivial.impl:org.onlab.onos.net.*.impl 275 + org.onlab.onos.net.trivial.impl:org.onlab.onos.net.*.impl:org.onlab.onos.impl:org.onlab.onos.event.impl
270 </packages> 276 </packages>
271 </group> 277 </group>
272 <group> 278 <group>
......
...@@ -12,8 +12,10 @@ import org.onlab.onos.net.device.DeviceProviderBroker; ...@@ -12,8 +12,10 @@ import org.onlab.onos.net.device.DeviceProviderBroker;
12 import org.onlab.onos.net.device.DeviceProviderService; 12 import org.onlab.onos.net.device.DeviceProviderService;
13 import org.onlab.onos.net.provider.AbstractProvider; 13 import org.onlab.onos.net.provider.AbstractProvider;
14 import org.onlab.onos.net.provider.ProviderId; 14 import org.onlab.onos.net.provider.ProviderId;
15 +import org.onlab.onos.of.controller.OpenFlowController;
15 import org.slf4j.Logger; 16 import org.slf4j.Logger;
16 -import org.slf4j.LoggerFactory; 17 +
18 +import static org.slf4j.LoggerFactory.getLogger;
17 19
18 /** 20 /**
19 * Provider which uses an OpenFlow controller to detect network 21 * Provider which uses an OpenFlow controller to detect network
...@@ -22,16 +24,15 @@ import org.slf4j.LoggerFactory; ...@@ -22,16 +24,15 @@ import org.slf4j.LoggerFactory;
22 @Component(immediate = true) 24 @Component(immediate = true)
23 public class OpenFlowDeviceProvider extends AbstractProvider implements DeviceProvider { 25 public class OpenFlowDeviceProvider extends AbstractProvider implements DeviceProvider {
24 26
25 - private final Logger log = LoggerFactory.getLogger(OpenFlowDeviceProvider.class); 27 + private final Logger log = getLogger(getClass());
26 28
27 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 29 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
28 protected DeviceProviderBroker providerBroker; 30 protected DeviceProviderBroker providerBroker;
29 31
30 - private DeviceProviderService providerService; 32 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
31 - 33 + protected OpenFlowController controller;
32 -// @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
33 -// protected OpenFlowController controller;
34 34
35 + private DeviceProviderService providerService;
35 36
36 /** 37 /**
37 * Creates an OpenFlow device provider. 38 * Creates an OpenFlow device provider.
......
...@@ -11,8 +11,10 @@ import org.onlab.onos.net.host.HostProviderBroker; ...@@ -11,8 +11,10 @@ import org.onlab.onos.net.host.HostProviderBroker;
11 import org.onlab.onos.net.host.HostProviderService; 11 import org.onlab.onos.net.host.HostProviderService;
12 import org.onlab.onos.net.provider.AbstractProvider; 12 import org.onlab.onos.net.provider.AbstractProvider;
13 import org.onlab.onos.net.provider.ProviderId; 13 import org.onlab.onos.net.provider.ProviderId;
14 +import org.onlab.onos.of.controller.OpenFlowController;
14 import org.slf4j.Logger; 15 import org.slf4j.Logger;
15 -import org.slf4j.LoggerFactory; 16 +
17 +import static org.slf4j.LoggerFactory.getLogger;
16 18
17 /** 19 /**
18 * Provider which uses an OpenFlow controller to detect network 20 * Provider which uses an OpenFlow controller to detect network
...@@ -21,15 +23,15 @@ import org.slf4j.LoggerFactory; ...@@ -21,15 +23,15 @@ import org.slf4j.LoggerFactory;
21 @Component(immediate = true) 23 @Component(immediate = true)
22 public class OpenFlowHostProvider extends AbstractProvider implements HostProvider { 24 public class OpenFlowHostProvider extends AbstractProvider implements HostProvider {
23 25
24 - private final Logger log = LoggerFactory.getLogger(OpenFlowHostProvider.class); 26 + private final Logger log = getLogger(getClass());
25 27
26 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 28 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
27 protected HostProviderBroker providerBroker; 29 protected HostProviderBroker providerBroker;
28 30
29 - private HostProviderService providerService; 31 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
32 + protected OpenFlowController controller;
30 33
31 -// @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 34 + private HostProviderService providerService;
32 -// protected OpenFlowController controller;
33 35
34 /** 36 /**
35 * Creates an OpenFlow host provider. 37 * Creates an OpenFlow host provider.
......
...@@ -10,8 +10,10 @@ import org.onlab.onos.net.link.LinkProviderBroker; ...@@ -10,8 +10,10 @@ import org.onlab.onos.net.link.LinkProviderBroker;
10 import org.onlab.onos.net.link.LinkProviderService; 10 import org.onlab.onos.net.link.LinkProviderService;
11 import org.onlab.onos.net.provider.AbstractProvider; 11 import org.onlab.onos.net.provider.AbstractProvider;
12 import org.onlab.onos.net.provider.ProviderId; 12 import org.onlab.onos.net.provider.ProviderId;
13 +import org.onlab.onos.of.controller.OpenFlowController;
13 import org.slf4j.Logger; 14 import org.slf4j.Logger;
14 -import org.slf4j.LoggerFactory; 15 +
16 +import static org.slf4j.LoggerFactory.getLogger;
15 17
16 /** 18 /**
17 * Provider which uses an OpenFlow controller to detect network 19 * Provider which uses an OpenFlow controller to detect network
...@@ -20,15 +22,15 @@ import org.slf4j.LoggerFactory; ...@@ -20,15 +22,15 @@ import org.slf4j.LoggerFactory;
20 @Component(immediate = true) 22 @Component(immediate = true)
21 public class OpenFlowLinkProvider extends AbstractProvider implements LinkProvider { 23 public class OpenFlowLinkProvider extends AbstractProvider implements LinkProvider {
22 24
23 - private final Logger log = LoggerFactory.getLogger(OpenFlowLinkProvider.class); 25 + private final Logger log = getLogger(getClass());
24 26
25 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 27 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
26 protected LinkProviderBroker providerBroker; 28 protected LinkProviderBroker providerBroker;
27 29
28 - private LinkProviderService providerService; 30 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
31 + protected OpenFlowController controller;
29 32
30 -// @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 33 + private LinkProviderService providerService;
31 -// protected OpenFlowController controller;
32 34
33 /** 35 /**
34 * Creates an OpenFlow link provider. 36 * Creates an OpenFlow link provider.
......
...@@ -24,7 +24,11 @@ ...@@ -24,7 +24,11 @@
24 <dependency> 24 <dependency>
25 <groupId>org.onlab.onos</groupId> 25 <groupId>org.onlab.onos</groupId>
26 <artifactId>onos-api</artifactId> 26 <artifactId>onos-api</artifactId>
27 - <version>${project.version}</version> 27 + </dependency>
28 +
29 + <dependency>
30 + <groupId>org.onlab.onos</groupId>
31 + <artifactId>onlab-misc</artifactId>
28 </dependency> 32 </dependency>
29 33
30 <dependency> 34 <dependency>
......
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project xmlns="http://maven.apache.org/POM/4.0.0"
3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
5 + <modelVersion>4.0.0</modelVersion>
6 +
7 + <parent>
8 + <groupId>org.onlab.onos</groupId>
9 + <artifactId>onlab-utils</artifactId>
10 + <version>1.0.0-SNAPSHOT</version>
11 + <relativePath>../pom.xml</relativePath>
12 + </parent>
13 +
14 + <artifactId>onlab-misc</artifactId>
15 + <packaging>bundle</packaging>
16 +
17 + <description>Miscellaneous ON.Lab utilities</description>
18 +
19 + <dependencies>
20 + </dependencies>
21 +
22 +</project>
1 -package org.onlab.util;
2 -
3 -public class Foo {
4 -}
1 +package org.onlab.util;
2 +
3 +import com.google.common.util.concurrent.ThreadFactoryBuilder;
4 +
5 +import java.util.concurrent.ThreadFactory;
6 +
7 +public abstract class Tools {
8 +
9 + private Tools() {
10 + }
11 +
12 + /**
13 + * Returns a thread factory that produces threads named according to the
14 + * supplied name pattern.
15 + *
16 + * @param pattern name pattern
17 + * @return thread factory
18 + */
19 + public static ThreadFactory namedThreads(String pattern) {
20 + return new ThreadFactoryBuilder().setNameFormat(pattern).build();
21 + }
22 +
23 +}