- try {
- switch (event.getDtoModificationType()) {
- case CREATED: {
- vppEndpointCreated(event.getAfter().get()).get();
- updatePolicyExcludedEndpoints(event.getAfter().get(), true);
- }
- break;
- case UPDATED:
- vppEndpointUpdated(event.getBefore().get(), event.getAfter().get()).get();
- updatePolicyExcludedEndpoints(event.getBefore().get(), false);
- updatePolicyExcludedEndpoints(event.getAfter().get(), true);
- break;
- case DELETED:
- vppEndpointDeleted(event.getBefore().get()).get();
- updatePolicyExcludedEndpoints(event.getBefore().get(), false);
- break;
+ ListenableFuture<Void> modificationFuture;
+ ListenableFuture<Boolean> policyExcludedFuture;
+ String message;
+ final VppEndpoint oldVppEndpoint = event.getBefore().orNull();
+ final VppEndpoint newVppEndpoint = event.getAfter().orNull();
+ switch (event.getDtoModificationType()) {
+ case CREATED: {
+ Preconditions.checkNotNull(newVppEndpoint);
+ modificationFuture = vppEndpointCreated(newVppEndpoint);
+ message = String.format("Vpp endpoint %s on node %s and interface %s created",
+ newVppEndpoint.getAddress(), newVppEndpoint.getVppNodeId().getValue(),
+ newVppEndpoint.getVppInterfaceName());
+ policyExcludedFuture = updatePolicyExcludedEndpoints(newVppEndpoint, true);
+ }
+ break;
+ case UPDATED: {
+ Preconditions.checkNotNull(oldVppEndpoint);
+ Preconditions.checkNotNull(newVppEndpoint);
+ modificationFuture = vppEndpointUpdated(oldVppEndpoint, newVppEndpoint);
+ message = String.format("Vpp endpoint %s on node %s and interface %s updated",
+ newVppEndpoint.getAddress(), newVppEndpoint.getVppNodeId().getValue(),
+ newVppEndpoint.getVppInterfaceName());
+ final ListenableFuture<Boolean> partialOldPolicyExcludedFuture =
+ updatePolicyExcludedEndpoints(oldVppEndpoint, false);
+ policyExcludedFuture =
+ Futures.transform(partialOldPolicyExcludedFuture, (AsyncFunction<Boolean, Boolean>) input ->
+ updatePolicyExcludedEndpoints(newVppEndpoint, true));
+ }
+ break;
+ case DELETED: {
+ Preconditions.checkNotNull(oldVppEndpoint);
+ modificationFuture = vppEndpointDeleted(oldVppEndpoint);
+ message = String.format("Vpp endpoint %s on node %s and interface %s removed",
+ oldVppEndpoint.getAddress(), oldVppEndpoint.getVppNodeId().getValue(),
+ oldVppEndpoint.getVppInterfaceName());
+ policyExcludedFuture = updatePolicyExcludedEndpoints(event.getBefore().get(), false);
+ }
+ break;
+ default: {
+ message = "Unknown event modification type: " + event.getDtoModificationType();
+ modificationFuture = Futures.immediateFailedFuture(new VppRendererProcessingException(message));
+ policyExcludedFuture = Futures.immediateFailedFuture(new VppRendererProcessingException(message));