Package org.grails.web.api

Source Code of org.grails.web.api.CommonWebApi

/*
* Copyright 2010 the original author or authors.
*
* 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 org.grails.web.api;

import java.io.Serializable;

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

import grails.core.GrailsApplication;
import grails.plugins.GrailsPluginManager;
import grails.core.support.GrailsApplicationAware;
import org.grails.encoder.CodecLookupHelper;
import org.grails.encoder.Encoder;
import grails.web.mvc.FlashScope;
import grails.web.util.GrailsApplicationAttributes;
import grails.web.servlet.mvc.GrailsParameterMap;
import org.grails.web.servlet.mvc.GrailsWebRequest;
import org.codehaus.groovy.runtime.InvokerHelper;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.web.context.ServletContextAware;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.support.WebApplicationContextUtils;

/**
* API shared by controllers, tag libraries and any other web artifact.
*
* @author Graeme Rocher
* @since 2.0
*/
public class CommonWebApi implements GrailsApplicationAware, ServletContextAware, ApplicationContextAware, Serializable{
    private static final long serialVersionUID = 1;
    public static final String RAW_CODEC_NAME = "org.grails.encoder.impl.RawCodec";

    private transient GrailsPluginManager pluginManager;
    private transient GrailsApplication grailsApplication;
    private transient ServletContext servletContext;
    private transient ApplicationContext applicationContext;
    private transient Encoder rawEncoder;

    public CommonWebApi(GrailsPluginManager pluginManager) {
        this.pluginManager = pluginManager;
    }

    public CommonWebApi() {
    }

    /**
     * Marks the given value to be output in raw form without encoding
     *
     * @param instance The instance
     * @param value The value
     * @return The raw unencoded value
     * @since 2.3
     */
    public Object raw(Object instance, Object value) {
        Encoder encoder = getRawEncoder(instance);
        if(encoder != null) {
            return encoder.encode(value);
        }
        else {
            return InvokerHelper.invokeMethod(value, "encodeAsRaw", null);
        }
    }

    private Encoder getRawEncoder(GrailsApplication application) {
        if(application != null) {
            return CodecLookupHelper.lookupEncoder(application, "Raw");
        }
        return null;
    }
    private Encoder getRawEncoder(Object instance) {
        if(rawEncoder == null) {
            GrailsApplication application = getGrailsApplication(instance);
            rawEncoder = getRawEncoder(application);
        }
        return rawEncoder;
    }

    /**
     * Obtains the Grails parameter map
     *
     * @return The GrailsParameterMap instance
     */
    public GrailsParameterMap getParams(Object instance) {
        return currentRequestAttributes().getParams();
    }

    /**
     * Obtains the Grails FlashScope instance
     *
     * @return The FlashScope instance
     */
    public FlashScope getFlash(Object instance) {
        return currentRequestAttributes().getFlashScope();
    }

    /**
     * Obtains the HttpSession instance
     *
     * @return The HttpSession instance
     */
    public HttpSession getSession(Object instance) {
        return currentRequestAttributes().getSession();
    }

    /**
     * Obtains the HttpServletRequest instance
     *
     * @return The HttpServletRequest instance
     */
    public HttpServletRequest getRequest(Object instance) {
        return currentRequestAttributes().getCurrentRequest();
    }

    /**
     * Obtains the ServletContext instance
     *
     * @return The ServletContext instance
     */
    public ServletContext getServletContext(Object instance) {
        if (servletContext == null) {
            servletContext = currentRequestAttributes().getServletContext();
        }
        return servletContext;
    }

    /**
     * Obtains the HttpServletResponse instance
     *
     * @return The HttpServletResponse instance
     */
    public HttpServletResponse getResponse(Object instance) {
        return currentRequestAttributes().getCurrentResponse();
    }

    /**
     * Obtains the GrailsApplicationAttributes instance
     *
     * @return The GrailsApplicationAttributes instance
     */
    public GrailsApplicationAttributes getGrailsAttributes(Object instance) {
        return currentRequestAttributes().getAttributes();
    }

    /**
     * Obtains the GrailsApplication instance
     * @return The GrailsApplication instance
     */
    public GrailsApplication getGrailsApplication(Object instance) {
        if (grailsApplication == null) {
            grailsApplication = getGrailsAttributes(instance).getGrailsApplication();
        }
        return grailsApplication;
    }

    /**
     * Obtains the ApplicationContext instance
     * @return The ApplicationContext instance
     */
    public ApplicationContext getApplicationContext(Object instance) {
        if (applicationContext == null) {
            applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext(instance));
        }
        return applicationContext;
    }

    /**
     * Obtains the currently executing action name
     * @return The action name
     */
    public String getActionName(Object instance) {
        return currentRequestAttributes().getActionName();
    }

    /**
     * Obtains the currently executing controller name
     * @return The controller name
     */
    public String getControllerName(Object instance) {
        return currentRequestAttributes().getControllerName();
    }

    /**
     * Obtains the currently executing controller namespace
     * @return The controller name
     */
    public String getControllerNamespace(Object instance) {
        return currentRequestAttributes().getControllerNamespace();
    }

    /**
     * Obtains the currently executing controllerClass
     * @return The controller class
     */
    public Object getControllerClass(Object instance) {
        return currentRequestAttributes().getControllerClass();
    }

    /**
     * Obtains the currently executing web request
     *
     * @return The GrailsWebRequest instance
     */
    public GrailsWebRequest getWebRequest(Object instance) {
        return currentRequestAttributes();
    }

    /**
     * Obtains the pluginContextPath
     *
     * @param delegate The object the method is being invoked on
     * @return The plugin context path
     */
    public String getPluginContextPath(Object delegate) {
        GrailsPluginManager manager = getPluginManagerInternal(delegate);
        final String pluginPath = manager != null ? manager.getPluginPathForInstance(delegate) : null;
        return pluginPath !=null ? pluginPath : "";
    }

    private GrailsPluginManager getPluginManagerInternal(Object delegate) {
        if (pluginManager == null) {
            ApplicationContext ctx = getApplicationContext(delegate);
            pluginManager = ctx != null ? ctx.getBean(GrailsPluginManager.BEAN_NAME, GrailsPluginManager.class) : null;
        }
        return pluginManager;
    }

    public void setGrailsApplication(GrailsApplication grailsApplication) {
        this.grailsApplication = grailsApplication;
        this.rawEncoder = getRawEncoder(grailsApplication);
    }

    public void setServletContext(ServletContext servletContext) {
        this.servletContext = servletContext;
    }

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    protected GrailsWebRequest currentRequestAttributes() {
        return (GrailsWebRequest)RequestContextHolder.currentRequestAttributes();
    }
}
TOP

Related Classes of org.grails.web.api.CommonWebApi

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.