Support for metadata in HA
[groupbasedpolicy.git] / groupbasedpolicy / src / main / java / org / opendaylight / groupbasedpolicy / renderer / RendererConfigurationBuilder.java
index a7ce6b192b10afa23099c8231e182a02d9682daf..7d2f0fab7cefea0f052f87dfe8d91b3831830230 100644 (file)
@@ -298,23 +298,31 @@ public class RendererConfigurationBuilder {
             Preconditions.checkArgument(potentialEp.isPresent());
             Optional<AddressEndpointLocation> potentionalEpLoc = epLocInfo.getAdressEndpointLocation(epKey);
             Preconditions.checkArgument(potentionalEpLoc.isPresent());
-            RendererName rendererName = resolveRendererName(potentionalEpLoc.get(), rendererByNode);
-            if (rendererName == null) {
+            Optional<RendererName> rendererName = resolveRendererName(potentionalEpLoc.get(), rendererByNode);
+            if (!rendererName.isPresent()) {
                 LOG.debug("Endpoint {} has no location, skipped", epKey);
                 continue;
             }
-            result.add(createEpWithLoc(potentialEp.get(), potentionalEpLoc.get(), rendererName, augmentors));
+            result.add(createEpWithLoc(potentialEp.get(), potentionalEpLoc.get(), rendererName.get(), augmentors));
         }
         return result;
     }
 
-    private static RendererName resolveRendererName(AddressEndpointLocation epLoc,
+    /**
+     * Renderer name can be resolved from absolute node location or any of relative node locations.
+     */
+    private static Optional<RendererName> resolveRendererName(AddressEndpointLocation epLoc,
             Map<InstanceIdentifier<?>, RendererName> rendererByNode) {
         Optional<InstanceIdentifier<?>> potentialAbsNodeLoc = EndpointLocationUtils.resolveAbsoluteNodeLocation(epLoc);
         if (potentialAbsNodeLoc.isPresent()) {
-            return rendererByNode.get(potentialAbsNodeLoc.get());
+            return Optional.of(rendererByNode.get(potentialAbsNodeLoc.get()));
         }
-        return null;
+        Optional<List<InstanceIdentifier<?>>> potentianRelativeLocation =
+                EndpointLocationUtils.resolveRelativeExternalNodeMountPointLocation(epLoc);
+        if (potentianRelativeLocation.isPresent()) {
+            return Optional.of(rendererByNode.get(potentianRelativeLocation.get().stream().findAny().get()));
+        }
+        return Optional.absent();
     }
 
     private static AddressEndpointWithLocation createEpWithLoc(AddressEndpoint ep, AddressEndpointLocation epLoc,