package org.jsondoc.springmvc.scanner.builder;
import java.lang.reflect.Method;
import java.util.LinkedHashSet;
import java.util.Set;
import org.jsondoc.core.pojo.ApiVerb;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
public class SpringVerbBuilder {
/**
* From Spring's documentation: When [RequestMapping method is] used at the type level, all method-level mappings inherit this HTTP method restriction
* @param method
* @param controller
* @return
*/
public static Set<ApiVerb> buildVerb(Method method) {
Set<ApiVerb> apiVerbs = new LinkedHashSet<ApiVerb>();
Class<?> controller = method.getDeclaringClass();
if(controller.isAnnotationPresent(RequestMapping.class)) {
RequestMapping requestMapping = controller.getAnnotation(RequestMapping.class);
getApiVerbFromRequestMapping(apiVerbs, requestMapping);
}
if(method.isAnnotationPresent(RequestMapping.class)) {
RequestMapping requestMapping = method.getAnnotation(RequestMapping.class);
getApiVerbFromRequestMapping(apiVerbs, requestMapping);
}
if(apiVerbs.isEmpty()) {
apiVerbs.add(ApiVerb.GET);
}
return apiVerbs;
}
private static void getApiVerbFromRequestMapping(Set<ApiVerb> apiVerbs, RequestMapping requestMapping) {
if(requestMapping.method().length > 0) {
for (RequestMethod requestMethod : requestMapping.method()) {
apiVerbs.add(ApiVerb.valueOf(requestMethod.name()));
}
}
}
}