public static FilterExecutor resolve(final FilterChainContext context) { switch (context.getOperation()) { case READ: return READ_EXECUTOR; case WRITE: return WRITE_EXECUTOR; case ACCEPT: return ACCEPT_EXECUTOR; case CLOSE: return CLOSE_EXECUTOR; case CONNECT: return CONNECT_EXECUTOR; case EVENT: return (context.getFilterIdx() == FilterChainContext.NO_FILTER_INDEX || context.getStartIdx() <= context.getEndIdx()) ? EVENT_UPSTREAM_EXECUTOR : EVENT_DOWNSTREAM_EXECUTOR; default: return null; } }