All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.appland.appmap.reflect.HttpServletRequest Maven / Gradle / Ivy

The newest version!
package com.appland.appmap.reflect;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import com.appland.appmap.process.hooks.http.ServletContext;

public class HttpServletRequest extends ReflectiveType implements HttpHeaders {
  // Needs to match
  // org.springframework.web.servlet.HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE
  private static final String RESOURCE_URL_PROVIDER = "org.springframework.web.servlet.resource.ResourceUrlProvider";

  private final HttpHeaderDelegate headerDelegate;

  private final String GET_METHOD = "getMethod";
  private final String GET_REQUEST_URI = "getRequestURI";
  private final String GET_PROTOCOL = "getProtocol";
  private final String GET_PARAMETER_MAP = "getParameterMap";
  private final String GET_ATTRIBUTE = "getAttribute";
  private final String SET_ATTRIBUTE = "setAttribute";
  private final String GET_ATTRIBUTE_NAMES = "getAttributeNames";
  private final String GET_SERVLET_CONTEXT = "getServletContext";
  private final String GET_SERVLET_PATH = "getServletPath";

  public HttpServletRequest(Object self) {
    super(self);
    this.headerDelegate = new HttpHeaderDelegate(self);
    
    addMethods(GET_METHOD, GET_REQUEST_URI, GET_PROTOCOL, GET_PARAMETER_MAP, GET_ATTRIBUTE_NAMES, GET_SERVLET_CONTEXT,
        GET_SERVLET_PATH);
    addMethod(GET_ATTRIBUTE, String.class);
    addMethod(SET_ATTRIBUTE, String.class, Object.class);
  }

  public String getMethod() {
    return invokeStringMethod(GET_METHOD);
  }

  public String getRequestURI() {
    return invokeStringMethod(GET_REQUEST_URI);
  }

  public String getProtocol() {
    return invokeStringMethod(GET_PROTOCOL);
  }

  public Map getParameterMap() {
    return invokeMethod(GET_PARAMETER_MAP, new HashMap());
  }

  public Object getAttribute(String name) {
    return invokeObjectMethod(GET_ATTRIBUTE, name);
  }

  public void setAttribute(String key, Object value) {
    invokeObjectMethod(SET_ATTRIBUTE, key, value);
  }
  
  @SuppressWarnings("unchecked")
  public Enumeration getAttributeNames() {
    return (Enumeration) invokeObjectMethod(GET_ATTRIBUTE_NAMES);
  }

  public ServletContext getServletContext() {
    return new ServletContext(invokeObjectMethod(GET_SERVLET_CONTEXT));
  }

  public String getServletPath() {
    return invokeStringMethod(GET_SERVLET_PATH);
  }

  @Override
  public HttpHeaderDelegate getHeaderDelegate() {
    return headerDelegate;
  }

  private static class ResourceUrlProvider extends ReflectiveType {
    private static String GET_FOR_LOOKUP_PATH = "getForLookupPath";

    public ResourceUrlProvider(Object self) {
      super(self);
      addMethod(GET_FOR_LOOKUP_PATH, String.class);
    }

    public String getForLookupPath(String path) {
      return invokeStringMethod(GET_FOR_LOOKUP_PATH, path);
    }
  }

  public boolean isForStaticResource() {
    Object obj = getAttribute(RESOURCE_URL_PROVIDER);
    if (obj == null) {
      return false;
    }
    ResourceUrlProvider provider = new ResourceUrlProvider(obj);
    return provider.getForLookupPath(getServletPath()) != null;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy