Fix NPE in AbstractPathService.

Was triggering NPE when used in plain PathManager

- implement PathService to inherit interface javadoc

Change-Id: I345ec84ed3e61a383574fd58679fb00291b4bba0
diff --git a/core/api/src/main/java/org/onosproject/net/topology/AbstractPathService.java b/core/api/src/main/java/org/onosproject/net/topology/AbstractPathService.java
index 82c9895..d718d15 100644
--- a/core/api/src/main/java/org/onosproject/net/topology/AbstractPathService.java
+++ b/core/api/src/main/java/org/onosproject/net/topology/AbstractPathService.java
@@ -18,9 +18,6 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DefaultDisjointPath;
 import org.onosproject.net.DefaultEdgeLink;
@@ -46,9 +43,12 @@
 
 /**
  * Helper class for path service.
+ * <p>
+ * Class inheriting this must manually initialize {@code topologyService}
+ * and {@code hostService} fields.
  */
-@Component(componentAbstract = true)
-public abstract class AbstractPathService {
+public abstract class AbstractPathService
+    implements PathService {
 
     private static final String ELEMENT_ID_NULL = "Element ID cannot be null";
     private static final EdgeLink NOT_HOST = new NotHost();
@@ -56,12 +56,11 @@
     private static final ProviderId PID = new ProviderId("core", "org.onosproject.core");
     private static final PortNumber P0 = PortNumber.portNumber(0);
 
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected TopologyService topologyService;
 
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected HostService hostService;
 
+    @Override
     public Set<Path> getPaths(ElementId src, ElementId dst, LinkWeight weight) {
         checkNotNull(src, ELEMENT_ID_NULL);
         checkNotNull(dst, ELEMENT_ID_NULL);
@@ -94,6 +93,7 @@
         return edgeToEdgePaths(srcEdge, dstEdge, paths);
     }
 
+    @Override
     public Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst, LinkWeight weight) {
         checkNotNull(src, ELEMENT_ID_NULL);
         checkNotNull(dst, ELEMENT_ID_NULL);
@@ -126,6 +126,7 @@
         return edgeToEdgePathsDisjoint(srcEdge, dstEdge, paths);
     }
 
+    @Override
     public Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst, LinkWeight weight,
                                               Map<Link, Object> riskProfile) {
         checkNotNull(src, ELEMENT_ID_NULL);
diff --git a/core/net/src/main/java/org/onosproject/net/topology/impl/PathManager.java b/core/net/src/main/java/org/onosproject/net/topology/impl/PathManager.java
index 9a04fff..5c41ff4 100644
--- a/core/net/src/main/java/org/onosproject/net/topology/impl/PathManager.java
+++ b/core/net/src/main/java/org/onosproject/net/topology/impl/PathManager.java
@@ -18,13 +18,17 @@
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 import org.onosproject.net.DisjointPath;
 import org.onosproject.net.ElementId;
 import org.onosproject.net.Link;
 import org.onosproject.net.Path;
+import org.onosproject.net.host.HostService;
 import org.onosproject.net.topology.LinkWeight;
 import org.onosproject.net.topology.PathService;
+import org.onosproject.net.topology.TopologyService;
 import org.onosproject.net.topology.AbstractPathService;
 import org.slf4j.Logger;
 
@@ -45,11 +49,19 @@
 @Service
 public class PathManager extends AbstractPathService implements PathService {
 
-
     private final Logger log = getLogger(getClass());
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected TopologyService topologyService;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected HostService hostService;
+
     @Activate
     public void activate() {
+        // initialize AbstractPathService
+        super.topologyService = this.topologyService;
+        super.hostService = this.hostService;
         log.info("Started");
     }