package org.frameworkset.web.servlet.mvc.mutiaction;
import java.util.Map;
import org.frameworkset.web.util.WebUtils;
public class InternalPathMethodNameResolver extends AbstractUrlMethodNameResolver {
private String prefix = "";
private String suffix = "";
/** Request URL path String --> method name String */
private Map methodNameCache = new java.util.concurrent.ConcurrentHashMap();
/**
* Specify a common prefix for handler method names.
* Will be prepended to the internal path found in the URL:
* e.g. internal path "baz", prefix "my" -> method name "mybaz".
*/
public void setPrefix(String prefix) {
this.prefix = (prefix != null ? prefix : "");
}
/**
* Return the common prefix for handler method names.
*/
protected String getPrefix() {
return this.prefix;
}
/**
* Specify a common suffix for handler method names.
* Will be appended to the internal path found in the URL:
* e.g. internal path "baz", suffix "Handler" -> method name "bazHandler".
*/
public void setSuffix(String suffix) {
this.suffix = (suffix != null ? suffix : "");
}
/**
* Return the common suffix for handler method names.
*/
protected String getSuffix() {
return this.suffix;
}
/**
* Extracts the method name indicated by the URL path.
* @see #extractHandlerMethodNameFromUrlPath
* @see #postProcessHandlerMethodName
*/
protected String getHandlerMethodNameForUrlPath(String urlPath) {
String methodName = (String) this.methodNameCache.get(urlPath);
if (methodName == null) {
methodName = extractHandlerMethodNameFromUrlPath(urlPath);
methodName = postProcessHandlerMethodName(methodName);
this.methodNameCache.put(urlPath, methodName);
}
return methodName;
}
/**
* Extract the handler method name from the given request URI.
* Delegates to <code>WebUtils.extractViewNameFromUrlPath(String)</code>.
* @param uri the request URI (e.g. "/index.html")
* @return the extracted URI filename (e.g. "index")
* @see WebUtils#extractFilenameFromUrlPath
*/
protected String extractHandlerMethodNameFromUrlPath(String uri) {
return WebUtils.extractFilenameFromUrlPath(uri);
}
/**
* Build the full handler method name based on the given method name
* as indicated by the URL path.
* <p>The default implementation simply applies prefix and suffix.
* This can be overridden, for example, to manipulate upper case
* / lower case, etc.
* @param methodName the original method name, as indicated by the URL path
* @return the full method name to use
* @see #getPrefix()
* @see #getSuffix()
*/
protected String postProcessHandlerMethodName(String methodName) {
return getPrefix() + methodName + getSuffix();
}
@Override
public void destroy() {
if(methodNameCache != null)
{
methodNameCache.clear();
methodNameCache = null;
}
}
}