package de.escalon.hypermedia.spring; import de.escalon.hypermedia.affordance.ActionInputParameter; import org.springframework.util.Assert; import java.beans.Introspector; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * Provides documentation URLs by applying an URL prefix. Created by Dietrich on 27.04.2016. */ public class UrlPrefixDocumentationProvider implements DocumentationProvider { private String defaultUrlPrefix; public UrlPrefixDocumentationProvider(String defaultUrlPrefix) { Assert.isTrue(defaultUrlPrefix.endsWith("/") || defaultUrlPrefix.endsWith("#"), "URL prefix should end with " + "separator / or #"); this.defaultUrlPrefix = defaultUrlPrefix; } public UrlPrefixDocumentationProvider() { defaultUrlPrefix = ""; } @Override public String getDocumentationUrl(ActionInputParameter annotatedParameter, Object content) { return defaultUrlPrefix + annotatedParameter.getParameterName(); } @Override public String getDocumentationUrl(Field field, Object content) { return defaultUrlPrefix + field.getName(); } @Override public String getDocumentationUrl(Method getter, Object content) { String methodName = getter.getName(); String propertyName = Introspector.decapitalize(methodName.substring(methodName.startsWith("is") ? 2 : 3)); return defaultUrlPrefix + propertyName; } @Override public String getDocumentationUrl(Class clazz, Object content) { return defaultUrlPrefix + clazz.getSimpleName(); } @Override public String getDocumentationUrl(String name, Object content) { return defaultUrlPrefix + name; } }