Mechanical code cleanup (config)
[controller.git] / opendaylight / config / netty-event-executor-config / src / main / java / org / opendaylight / controller / config / yang / netty / eventexecutor / AutoCloseableEventExecutor.java
index 69ea51f3a50eb5f5c762054e0988bf2cb6ee8fbf..b77126b16d00e0d53eed8ed0d69d4fb9b1572647 100644 (file)
@@ -10,14 +10,15 @@ 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 {
 
 
-    public static class CloseableEventExecutorMixin implements AutoCloseable {
+    class CloseableEventExecutorMixin implements AutoCloseable {
         public static final int DEFAULT_SHUTDOWN_SECONDS = 1;
         private final EventExecutor eventExecutor;
 
@@ -26,27 +27,43 @@ public interface AutoCloseableEventExecutor extends EventExecutor, AutoCloseable
         }
 
         @Override
-        public void close() {
+        public void close() throws Exception {
             eventExecutor.shutdownGracefully(0, DEFAULT_SHUTDOWN_SECONDS, TimeUnit.SECONDS);
         }
 
 
-        public static AutoCloseable createCloseableProxy(final EventExecutor eventExecutor) {
-            final CloseableEventExecutorMixin closeableGlobalEventExecutorMixin =
-                    new CloseableEventExecutorMixin(eventExecutor);
+        private static AutoCloseableEventExecutor createCloseableProxy(
+                final CloseableEventExecutorMixin closeableEventExecutorMixin) {
             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();
+                        closeableEventExecutorMixin.close();
                         return null;
                     } else {
-                        return method.invoke(eventExecutor, args);
+                        return method.invoke(closeableEventExecutorMixin.eventExecutor, args);
                     }
                 }
             });
         }
 
+        public static AutoCloseableEventExecutor globalEventExecutor() {
+            return createCloseableProxy(new CloseableEventExecutorMixin(GlobalEventExecutor.INSTANCE));
+        }
+
+        public static AutoCloseableEventExecutor immediateEventExecutor() {
+            return createCloseableProxy(new CloseableEventExecutorMixin(ImmediateEventExecutor.INSTANCE));
+        }
 
+        public static AutoCloseableEventExecutor forwardingEventExecutor(final EventExecutor eventExecutor,
+                final AutoCloseable closeable) {
+            return createCloseableProxy(new CloseableEventExecutorMixin(eventExecutor) {
+                @Override
+                public void close() throws Exception {
+                    // Intentional no-op.
+                    closeable.close();
+                }
+            });
+        }
     }
 }
\ No newline at end of file