package org.opendaylight.groupbasedpolicy.endpoint;
+import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
LOG.info("Unregistered {}", regImp.getClass().getName());
}
- public static Class<?> getAugmentationContextType(
- final Augmentation<?> augmentation) {
- if (augmentation == null) {
- return null;
- }
- final Class<?>[] augmentationInterfaces = augmentation.getClass()
- .getInterfaces();
- if (augmentationInterfaces.length == 1) {
- return augmentationInterfaces[0];
- }
- /*
- * if here, then the way YANG tools generate augmentation code has
- * changed, hence augmentation classes are not implemented by single
- * interface anymore. This is very unlikely to happen, but if it did, we
- * need to know about it in order to update this method.
- */
- LOG.error(
- "YANG Generated Code has Changed -- augmentation object {} is NOT implemented by one interface anymore",
- augmentation);
- return null;
- }
-
/**
* Constructor
*
for (Entry<String, EpRendererAugmentation> entry : registeredRenderers
.entrySet()) {
try {
- Augmentation<Endpoint> augmentation = entry.getValue()
- .buildEndpointAugmentation(input);
- if (augmentation != null) {
- @SuppressWarnings("unchecked")
- Class<? extends Augmentation<Endpoint>> augmentationType = (Class<? extends Augmentation<Endpoint>>) getAugmentationContextType(augmentation);
- eb.addAugmentation(augmentationType, augmentation);
+ Map.Entry<Class<? extends Augmentation<Endpoint>>, Augmentation<Endpoint>> augmentationEntry =
+ entry.getValue().buildEndpointAugmentation(input);
+ if (augmentationEntry != null) {
+ eb.addAugmentation(augmentationEntry.getKey(), augmentationEntry.getValue());
}
} catch (Exception e) {
LOG.warn("Endpoint Augmentation error while processing "
for (Entry<String, EpRendererAugmentation> entry : registeredRenderers
.entrySet()) {
try {
- Augmentation<EndpointL3> augmentation = entry.getValue()
- .buildEndpointL3Augmentation(input);
- if (augmentation != null) {
- @SuppressWarnings("unchecked")
- Class<? extends Augmentation<EndpointL3>> augmentationType = (Class<? extends Augmentation<EndpointL3>>) getAugmentationContextType(augmentation);
- eb.addAugmentation(augmentationType, augmentation);
+ Map.Entry<Class<? extends Augmentation<EndpointL3>>, Augmentation<EndpointL3>> augmentationEntry =
+ entry.getValue().buildEndpointL3Augmentation(input);
+ if (augmentationEntry != null) {
+ eb.addAugmentation(augmentationEntry.getKey(), augmentationEntry.getValue());
}
} catch (Exception e) {
LOG.warn("L3 endpoint Augmentation error while processing "
for (Entry<String, EpRendererAugmentation> entry : registeredRenderers
.entrySet()) {
try {
- entry.getValue().buildL3PrefixEndpointAugmentation(eb, input);
+ Map.Entry<Class<? extends Augmentation<EndpointL3Prefix>>, Augmentation<EndpointL3Prefix>> augmentationEntry =
+ entry.getValue().buildL3PrefixEndpointAugmentation(input);
+ if (augmentationEntry != null) {
+ eb.addAugmentation(augmentationEntry.getKey(), augmentationEntry.getValue());
+ }
} catch (Exception e) {
LOG.warn("L3 endpoint Augmentation error while processing "
+ entry.getKey() + ". Reason: ", e);
/*
- * Copyright (c) 2015 Huawei Technologies and others. All rights reserved.
+ * Copyright (c) 2015 Huawei Technologies and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
*/
package org.opendaylight.groupbasedpolicy.endpoint;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3PrefixBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Prefix;
import org.opendaylight.yangtools.yang.binding.Augmentation;
public interface EpRendererAugmentation {
- Augmentation<Endpoint> buildEndpointAugmentation(RegisterEndpointInput input);
+ /**
+ * Creates pair of Endpoint augmentation, specific for renderer and augmentation type (class
+ * name).
+ *
+ * @param input input data for Endpoint creation
+ * @return pair of augmentation type and augmentation
+ */
+ @Nullable Map.Entry<Class<? extends Augmentation<Endpoint>>, Augmentation<Endpoint>> buildEndpointAugmentation(
+ RegisterEndpointInput input);
- Augmentation<EndpointL3> buildEndpointL3Augmentation(RegisterEndpointInput input);
+ /**
+ * Creates pair of EndpointL3 augmentation, specific for renderer and augmentation type (class
+ * name).
+ *
+ * @param input input data for EndpointL3 creation
+ * @return pair of augmentation type and augmentation
+ */
+ @Nullable Map.Entry<Class<? extends Augmentation<EndpointL3>>, Augmentation<EndpointL3>> buildEndpointL3Augmentation(
+ RegisterEndpointInput input);
- void buildL3PrefixEndpointAugmentation(EndpointL3PrefixBuilder eb,
+ /**
+ * Creates pair of EndpointL3Prefix augmentation, specific for renderer and augmentation type (class
+ * name).
+ *
+ * @param input input data for EndpointL3Prefix creation
+ * @return pair of augmentation type and augmentation
+ */
+ @Nullable Map.Entry<Class<? extends Augmentation<EndpointL3Prefix>>, Augmentation<EndpointL3Prefix>> buildL3PrefixEndpointAugmentation(
RegisterL3PrefixEndpointInput input);
-
}
package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint;
-
+import java.util.AbstractMap.SimpleImmutableEntry;
+import java.util.Map;
import java.util.concurrent.ExecutionException;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3PrefixBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Prefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContextInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayL3Context;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayL3ContextBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
}
@Override
- public Augmentation<Endpoint> buildEndpointAugmentation(RegisterEndpointInput input) {
+ public Map.Entry<Class<? extends Augmentation<Endpoint>>, Augmentation<Endpoint>> buildEndpointAugmentation(
+ RegisterEndpointInput input) {
// In order to support both the port-name and the data-path information, allow
// an EP to register without the augmentations, and resolve later.
OfOverlayContextBuilder ictx = checkAugmentation(input);
if (ictx != null) {
- return ictx.build();
+ return new SimpleImmutableEntry<Class<? extends Augmentation<Endpoint>>, Augmentation<Endpoint>>(
+ OfOverlayContext.class, ictx.build());
}
return null;
}
@Override
- public Augmentation<EndpointL3> buildEndpointL3Augmentation(RegisterEndpointInput input) {
+ public Map.Entry<Class<? extends Augmentation<EndpointL3>>, Augmentation<EndpointL3>> buildEndpointL3Augmentation(
+ RegisterEndpointInput input) {
OfOverlayContextBuilder ictx = checkAugmentation(input);
if (ictx != null) {
- return new OfOverlayL3ContextBuilder(ictx.build()).build();
+ return new SimpleImmutableEntry<Class<? extends Augmentation<EndpointL3>>, Augmentation<EndpointL3>>(
+ OfOverlayL3Context.class, new OfOverlayL3ContextBuilder(ictx.build()).build());
}
return null;
}
@Override
- public void buildL3PrefixEndpointAugmentation(EndpointL3PrefixBuilder eb, RegisterL3PrefixEndpointInput input) {
- // TODO Auto-generated method stub
-
+ public Map.Entry<Class<? extends Augmentation<EndpointL3Prefix>>, Augmentation<EndpointL3Prefix>> buildL3PrefixEndpointAugmentation(
+ RegisterL3PrefixEndpointInput input) {
+ return null;
}
private OfOverlayContextBuilder checkAugmentation(RegisterEndpointInput input) {
return ictxBuilder;
}
- /*
- * In the case where they've provided just the port name, go see if
- * we can find the NodeId and NodeConnectorId from inventory.
- */
+ /*
+ * In the case where they've provided just the port name, go see if
+ * we can find the NodeId and NodeConnectorId from inventory.
+ */
if (ictx.getPortName() != null) {
NodeInfo augmentation = fetchAugmentation(ictx.getPortName().getValue());
if (augmentation != null) {
Optional<Nodes> result;
try {
- result = dataProvider.newReadOnlyTransaction()
- .read(LogicalDatastoreType.OPERATIONAL, nodesIid)
- .get();
+ result = dataProvider.newReadOnlyTransaction().read(LogicalDatastoreType.OPERATIONAL, nodesIid).get();
if (result.isPresent()) {
Nodes nodes = result.get();
for (Node node : nodes.getNode()) {
package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.endpoint;
+import java.util.AbstractMap.SimpleImmutableEntry;
+import java.util.Map;
+
import org.opendaylight.groupbasedpolicy.endpoint.EndpointRpcRegistry;
import org.opendaylight.groupbasedpolicy.endpoint.EpRendererAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3PrefixBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Prefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayL3Nat;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayL3NatBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayL3NatInput;
import org.opendaylight.yangtools.yang.binding.Augmentation;
}
@Override
- public Augmentation<Endpoint> buildEndpointAugmentation(RegisterEndpointInput input) {
+ public Map.Entry<Class<? extends Augmentation<Endpoint>>, Augmentation<Endpoint>> buildEndpointAugmentation(
+ RegisterEndpointInput input) {
// TODO Auto-generated method stub
return null;
}
@Override
- public Augmentation<EndpointL3> buildEndpointL3Augmentation(RegisterEndpointInput input) {
+ public Map.Entry<Class<? extends Augmentation<EndpointL3>>, Augmentation<EndpointL3>> buildEndpointL3Augmentation(
+ RegisterEndpointInput input) {
if (input.getAugmentation(OfOverlayL3NatInput.class) != null) {
- return new OfOverlayL3NatBuilder(input.getAugmentation(OfOverlayL3NatInput.class)).build();
+ return new SimpleImmutableEntry<Class<? extends Augmentation<EndpointL3>>, Augmentation<EndpointL3>>(
+ OfOverlayL3Nat.class,
+ new OfOverlayL3NatBuilder(input.getAugmentation(OfOverlayL3NatInput.class)).build());
}
return null;
}
@Override
- public void buildL3PrefixEndpointAugmentation(EndpointL3PrefixBuilder eb, RegisterL3PrefixEndpointInput input) {
- // TODO Auto-generated method stub
-
+ public Map.Entry<Class<? extends Augmentation<EndpointL3Prefix>>, Augmentation<EndpointL3Prefix>> buildL3PrefixEndpointAugmentation(
+ RegisterL3PrefixEndpointInput input) {
+ return null;
}
@Override