com.revolsys.ui.web.config.HttpServletRequestJexlContext.java Source code

Java tutorial

Introduction

Here is the source code for com.revolsys.ui.web.config.HttpServletRequestJexlContext.java

Source

/*
 * Copyright 2004-2005 Revolution Systems Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.revolsys.ui.web.config;

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

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.jexl.JexlContext;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.util.UrlPathHelper;

public class HttpServletRequestJexlContext implements JexlContext {

    private final ThreadLocal<Map<String, Object>> localAttributes = new ThreadLocal<>();

    private final ServletContext servletContext;

    private final UrlPathHelper urlPathHelper = new UrlPathHelper();

    public HttpServletRequestJexlContext(final ServletContext servletContext) {
        this.servletContext = servletContext;
    }

    public void clearAttributes() {
        this.localAttributes.remove();
    }

    public Object getAttribute(final String key) {
        final Map<String, Object> attributes = getAttributes();
        return attributes.get(key);
    }

    private Map<String, Object> getAttributes() {
        Map<String, Object> attributes = this.localAttributes.get();
        if (attributes == null) {
            attributes = new HashMap<>();
            this.localAttributes.set(attributes);
        }
        return attributes;
    }

    private HttpServletRequest getRequest() {
        final ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
        final HttpServletRequest request = requestAttributes.getRequest();
        return request;
    }

    @Override
    public Map getVars() {
        return new AbstractMap<String, Object>() {
            @Override
            @SuppressWarnings("unchecked")
            public Set<Entry<String, Object>> entrySet() {
                final HttpServletRequest request = getRequest();
                final Map<String, Object> map = new HashMap<>();
                map.putAll(request.getParameterMap());
                for (final Enumeration<String> names = request.getAttributeNames(); names.hasMoreElements();) {
                    final String name = names.nextElement();
                    map.put(name, request.getAttribute(name));
                }
                if (HttpServletRequestJexlContext.this.servletContext != null) {
                    for (final Enumeration<String> names = HttpServletRequestJexlContext.this.servletContext
                            .getAttributeNames(); names.hasMoreElements();) {
                        final String name = names.nextElement();
                        map.put(name, HttpServletRequestJexlContext.this.servletContext.getAttribute(name));
                    }
                }
                final Map<String, Object> attributes = HttpServletRequestJexlContext.this.localAttributes.get();
                if (attributes != null) {
                    map.putAll(attributes);
                }
                map.put("request", request);
                map.put("requestURI",
                        HttpServletRequestJexlContext.this.urlPathHelper.getOriginatingRequestUri(request));
                return map.entrySet();
            }
        };
    }

    public void setAttribute(final String key, final Object value) {
        final Map<String, Object> attributes = getAttributes();
        attributes.put(key, value);
    }

    public void setAttributes(final Map<String, ? extends Object> parameters) {
        getAttributes().putAll(parameters);
    }

    @Override
    public void setVars(final Map arg0) {
    }
}