Modernize AutoCloseableEventExecutor
[controller.git] / opendaylight / config / netty-event-executor-config / src / main / java / org / opendaylight / controller / config / yang / netty / eventexecutor / AutoCloseableEventExecutor.java
index d3f43da4bfc42535c7b35da350414470c985f814..a7b931be62589f003c08112493a01075477a5a08 100644 (file)
@@ -10,42 +10,32 @@ package org.opendaylight.controller.config.yang.netty.eventexecutor;
 import com.google.common.reflect.AbstractInvocationHandler;
 import com.google.common.reflect.Reflection;
 import io.netty.util.concurrent.EventExecutor;
+import io.netty.util.concurrent.GlobalEventExecutor;
+import io.netty.util.concurrent.ImmediateEventExecutor;
 import java.lang.reflect.Method;
 import java.util.concurrent.TimeUnit;
 
 public interface AutoCloseableEventExecutor extends EventExecutor, AutoCloseable {
+    static AutoCloseableEventExecutor globalEventExecutor() {
+        return createCloseableProxy(GlobalEventExecutor.INSTANCE);
+    }
 
+    static AutoCloseableEventExecutor immediateEventExecutor() {
+        return createCloseableProxy(ImmediateEventExecutor.INSTANCE);
+    }
 
-    public static class CloseableEventExecutorMixin implements AutoCloseable {
-        public static final int DEFAULT_SHUTDOWN_SECONDS = 1;
-        private final EventExecutor eventExecutor;
-
-        public CloseableEventExecutorMixin(EventExecutor eventExecutor) {
-            this.eventExecutor = eventExecutor;
-        }
-
-        @Override
-        public void close() {
-            eventExecutor.shutdownGracefully(0, DEFAULT_SHUTDOWN_SECONDS, TimeUnit.SECONDS);
-        }
-
-
-        public static AutoCloseable createCloseableProxy(final EventExecutor eventExecutor) {
-            final CloseableEventExecutorMixin closeableGlobalEventExecutorMixin =
-                    new CloseableEventExecutorMixin(eventExecutor);
-            return Reflection.newProxy(AutoCloseableEventExecutor.class, new AbstractInvocationHandler() {
-                @Override
-                protected Object handleInvocation(Object proxy, Method method, Object[] args) throws Throwable {
-                    if (method.getName().equals("close")) {
-                        closeableGlobalEventExecutorMixin.close();
-                        return null;
-                    } else {
-                        return method.invoke(eventExecutor, args);
-                    }
+    private static AutoCloseableEventExecutor createCloseableProxy(final EventExecutor eventExecutor) {
+        return Reflection.newProxy(AutoCloseableEventExecutor.class, new AbstractInvocationHandler() {
+            @Override
+            protected Object handleInvocation(final Object proxy, final Method method, final Object[] args)
+                throws Throwable {
+                if (method.getName().equals("close")) {
+                    eventExecutor.shutdownGracefully(0, 1, TimeUnit.SECONDS);
+                    return null;
+                } else {
+                    return method.invoke(eventExecutor, args);
                 }
-            });
-        }
-
-
+            }
+        });
     }
-}
\ No newline at end of file
+}