content: package com.github.aesteve.vertx.nubes.routing;
  
  import com.github.aesteve.vertx.nubes.annotations.routing.http.*;
  import io.vertx.core.http.HttpMethod;
  
  import java.lang.annotation.Annotation;
  import java.lang.reflect.Method;
  import java.util.Arrays;
  import java.util.EnumMap;
  import java.util.List;
  import java.util.Map;
  
  public final class HttpMethodFactory {
  
    private static List<Class<? extends Annotation>> annotClasses = Arrays.asList(
        CONNECT.class,
        DELETE.class,
        GET.class,
        HEAD.class,
        OPTIONS.class,
        PATCH.class,
        POST.class,
        PUT.class,
        TRACE.class
    );
  
    private HttpMethodFactory() {}
  
    public static Map<HttpMethod, String> fromAnnotatedMethod(Method method) {
      Map<HttpMethod, String> methods = new EnumMap<>(HttpMethod.class);
      for (Annotation annot : method.getDeclaredAnnotations()) {
        Class<? extends Annotation> annotClass = annot.annotationType();
        putIfHttpMethod(methods, annot, annotClass);
      }
      return methods;
    }
  
    public static boolean isRouteMethod(Method method) {
      return annotClasses.stream().anyMatch(method::isAnnotationPresent);
    }
  
    private static void putIfHttpMethod(Map<HttpMethod, String> methods, Annotation annot, Class<? extends Annotation> annotClass) {
      if (annotClass.equals(CONNECT.class)) {
        CONNECT connect = (CONNECT) annot;
        methods.put(HttpMethod.CONNECT, connect.value());
      }
      if (annotClass.equals(DELETE.class)) {
        DELETE delete = (DELETE) annot;
        methods.put(HttpMethod.DELETE, delete.value());
      }
      if (annotClass.equals(GET.class)) {
        GET get = (GET) annot;
        methods.put(HttpMethod.GET, get.value());
      }
      if (annotClass.equals(HEAD.class)) {
        HEAD head = (HEAD) annot;
        methods.put(HttpMethod.HEAD, head.value());
      }
      if (annotClass.equals(OPTIONS.class)) {
        OPTIONS options = (OPTIONS) annot;
        methods.put(HttpMethod.OPTIONS, options.value());
      }
      if (annotClass.equals(PATCH.class)) {
        PATCH patch = (PATCH) annot;
        methods.put(HttpMethod.PATCH, patch.value());
      }
      if (annotClass.equals(POST.class)) {
        POST post = (POST) annot;
        methods.put(HttpMethod.POST, post.value());
      }
      if (annotClass.equals(PUT.class)) {
        PUT put = (PUT) annot;
        methods.put(HttpMethod.PUT, put.value());
      }
      if (annotClass.equals(TRACE.class)) {
        TRACE trace = (TRACE) annot;
        methods.put(HttpMethod.TRACE, trace.value());
      }
    }
  
  }
  