Bump MRI upstreams
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / services / AbstractService.java
index 3c267c9b42ef2db5655d2458320641c1dad002f8..d916cd35685e042feb322354a4ade970bd050f7d 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -12,11 +12,9 @@ import com.google.common.base.Verify;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
-import java.math.BigInteger;
-import java.util.Objects;
 import java.util.function.Function;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueue;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
@@ -31,17 +29,21 @@ import org.opendaylight.openflowplugin.impl.services.util.RequestContextUtil;
 import org.opendaylight.openflowplugin.impl.services.util.ServiceException;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
-import org.opendaylight.yangtools.yang.common.RpcError;
+import org.opendaylight.yangtools.yang.common.ErrorTag;
+import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint64;
+import org.opendaylight.yangtools.yang.common.Uint8;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public abstract class AbstractService<I, O> {
     private static final Logger LOG = LoggerFactory.getLogger(AbstractService.class);
 
-    private final short version;
-    private final BigInteger datapathId;
+    private final Uint8 version;
+    private final Uint64 datapathId;
     private final RequestContextStack requestContextStack;
     private final DeviceContext deviceContext;
     private final MessageSpy messageSpy;
@@ -69,11 +71,11 @@ public abstract class AbstractService<I, O> {
         this.eventIdentifier = eventIdentifier;
     }
 
-    public short getVersion() {
+    public final Uint8 getVersion() {
         return version;
     }
 
-    public BigInteger getDatapathId() {
+    public final Uint64 getDatapathId() {
         return datapathId;
     }
 
@@ -106,54 +108,62 @@ public abstract class AbstractService<I, O> {
 
     protected abstract FutureCallback<OfHeader> createCallback(RequestContext<O> context, Class<?> requestType);
 
-    public ListenableFuture<RpcResult<O>> handleServiceCall(@Nonnull final I input) {
+    public ListenableFuture<RpcResult<O>> handleServiceCall(@NonNull final I input) {
         return handleServiceCall(input, null);
     }
 
-    public ListenableFuture<RpcResult<O>> handleServiceCall(@Nonnull final I input,
+    public ListenableFuture<RpcResult<O>> handleServiceCall(@NonNull final I input,
             @Nullable final Function<OfHeader, Boolean> isComplete) {
         Preconditions.checkNotNull(input);
 
         final Class<?> requestType = input instanceof DataContainer
-            ? DataContainer.class.cast(input).getImplementedInterface()
+            ? ((DataContainer) input).implementedInterface()
             : input.getClass();
 
-        getMessageSpy().spyMessage(requestType, MessageSpy.STATISTIC_GROUP.TO_SWITCH_ENTERED);
+        getMessageSpy().spyMessage(requestType, MessageSpy.StatisticsGroup.TO_SWITCH_ENTERED);
 
         LOG.trace("Handling general service call");
         final RequestContext<O> requestContext = requestContextStack.createRequestContext();
 
-        if (Objects.isNull(requestContext)) {
+        if (requestContext == null) {
             LOG.trace("Request context refused.");
-            getMessageSpy().spyMessage(AbstractService.class, MessageSpy.STATISTIC_GROUP.TO_SWITCH_DISREGARDED);
+            getMessageSpy().spyMessage(AbstractService.class, MessageSpy.StatisticsGroup.TO_SWITCH_DISREGARDED);
             return Futures.immediateFuture(RpcResultBuilder
                     .<O>failed()
-                    .withError(RpcError.ErrorType.APPLICATION, "", "Request quota exceeded")
+                    .withError(ErrorType.APPLICATION, ErrorTag.ACCESS_DENIED, "Request quota exceeded")
                     .build());
         }
 
-        if (Objects.isNull(requestContext.getXid())) {
-            getMessageSpy().spyMessage(requestContext.getClass(), MessageSpy.STATISTIC_GROUP.TO_SWITCH_RESERVATION_REJECTED);
-            return RequestContextUtil.closeRequestContextWithRpcError(requestContext, "Outbound queue wasn't able to reserve XID.");
+        if (requestContext.getXid() == null) {
+            getMessageSpy().spyMessage(requestContext.getClass(),
+                                       MessageSpy.StatisticsGroup.TO_SWITCH_RESERVATION_REJECTED);
+            return RequestContextUtil
+                    .closeRequestContextWithRpcError(requestContext, "Outbound queue wasn't able to reserve XID.");
         }
 
-        getMessageSpy().spyMessage(requestContext.getClass(), MessageSpy.STATISTIC_GROUP.TO_SWITCH_READY_FOR_SUBMIT);
+        getMessageSpy().spyMessage(requestContext.getClass(), MessageSpy.StatisticsGroup.TO_SWITCH_READY_FOR_SUBMIT);
 
         final Xid xid = requestContext.getXid();
         OfHeader request = null;
         try {
             request = buildRequest(xid, input);
-            Verify.verify(xid.getValue().equals(request.getXid()), "Expected XID %s got %s", xid.getValue(), request.getXid());
-        } catch (Exception ex) {
+            Verify.verify(xid.getValue().equals(request.getXid()),
+                          "Expected XID %s got %s",
+                          xid.getValue(),
+                          request.getXid());
+        } catch (ServiceException ex) {
             LOG.error("Failed to build request for {}, forfeiting request {}", input, xid.getValue(), ex);
-            RequestContextUtil.closeRequestContextWithRpcError(requestContext, "failed to build request input: " + ex.getMessage());
+            RequestContextUtil.closeRequestContextWithRpcError(requestContext,
+                                                               "failed to build request input: " + ex.getMessage());
         } finally {
-            final OutboundQueue outboundQueue = getDeviceContext().getPrimaryConnectionContext().getOutboundQueueProvider();
+            final OutboundQueue outboundQueue =
+                    getDeviceContext().getPrimaryConnectionContext().getOutboundQueueProvider();
 
-            if (Objects.nonNull(isComplete)) {
-                outboundQueue.commitEntry(xid.getValue(), request, createCallback(requestContext, requestType), isComplete);
+            final Uint32 queueXid = xid.getValue();
+            if (isComplete != null) {
+                outboundQueue.commitEntry(queueXid, request, createCallback(requestContext, requestType), isComplete);
             } else {
-                outboundQueue.commitEntry(xid.getValue(), request, createCallback(requestContext, requestType));
+                outboundQueue.commitEntry(queueXid, request, createCallback(requestContext, requestType));
             }
         }