org.ambraproject.action.BaseActionSupport.java Source code

Java tutorial

Introduction

Here is the source code for org.ambraproject.action.BaseActionSupport.java

Source

/*
 * Copyright (c) 2006-2013 by Public Library of Science
 *
 * http://plos.org
 * http://ambraproject.org
 *
 * 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.ambraproject.action;

import com.opensymphony.xwork2.ActionSupport;
import org.ambraproject.Constants;
import org.ambraproject.models.UserRole;
import org.ambraproject.service.permission.PermissionsService;
import org.ambraproject.web.VirtualJournalContext;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.RequestAware;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Required;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Base class for all actions.
 */
public abstract class BaseActionSupport extends ActionSupport implements RequestAware {
    private static final Logger log = LoggerFactory.getLogger(BaseActionSupport.class);

    protected PermissionsService permissionsService;
    protected Configuration configuration;
    protected Map requestAttributes;

    private static final String FEED_DEFAULT_NAME = "ambra.services.feed.defaultName";
    private static final String FEED_BASE_PATH = "ambra.services.feed.basePath";
    private static final String FEED_DEFAULT_FILE = "ambra.services.feed.defaultFile";

    public void setRequest(Map map) {
        requestAttributes = map;
    }

    public UserRole.Permission[] getPermissions() {
        String authId = getAuthId();

        if (authId != null) {
            Set<UserRole.Permission> perms = this.permissionsService.getPermissions(authId);
            return perms.toArray(new UserRole.Permission[perms.size()]);
        } else {
            return new UserRole.Permission[] {};
        }
    }

    /**
     * This overrides the deprecated super implementation and returns an empty implementation as we
     * want to avoid JSON serializing the deprecated implementation when it tries to serialize
     * an Action when the result type is ajaxJSON.
     *
     * @return a empty list
     */
    @Override
    public Collection getErrorMessages() {
        return Collections.EMPTY_LIST;
    }

    /**
     * This overrides the deprecated super inplementation and returns an empty implementation as we
     * want to avoid JSON serializing the deprecated implementation when it tries to serialize
     * an Action when the result type is ajaxJSON.
     *
     * @return a empty map
     */
    @Override
    public Map getErrors() {
        return Collections.EMPTY_MAP;
    }

    /**
     * Return the number of fields with errors.
     * @return number of fields with errors
     */
    public int getNumFieldErrors() {
        return getFieldErrors().size();
    }

    /**
     * @return the name of the rss feed for a page (will be prefixed by the journal name)
     */
    public String getRssName() {
        return configuration.getString(FEED_DEFAULT_NAME, "New Articles");
    }

    /**
     * @return the URL path for the rss feed for a page
     */
    public String getRssPath() {
        return configuration.getString(FEED_BASE_PATH, "/article/")
                + configuration.getString(FEED_DEFAULT_FILE, "feed");
    }

    /**
     * Setter method for configuration. Injected through Spring.
     * 
     * @param configuration Ambra configuration
     */
    @Required
    public void setAmbraConfiguration(Configuration configuration) {
        this.configuration = configuration;
    }

    /**
     * Setter method for the permissions service
     *
     * @param permissionsService
     */
    @Required
    public void setPermissionsService(PermissionsService permissionsService) {
        this.permissionsService = permissionsService;
    }

    /**
     * Add profane words together into a message.
     * @param profaneWords profaneWords
     * @param fieldName fieldName
     * @param readableFieldName readableFieldName
     */
    protected void addProfaneMessages(final List<String> profaneWords, final String fieldName,
            final String readableFieldName) {
        if (!profaneWords.isEmpty()) {
            addFieldError(fieldName, "Your comment triggered a profanity filter. Please reword your comment.");
        }
    }

    /**
     * Retrieve VirtualJournalContext that is bound to the request by VirtualJournalContextFilter
     * @see org.ambraproject.web.VirtualJournalContextFilter
     * @return Virtual journal context
     */
    protected VirtualJournalContext getVirtualJournalContext() {
        return (VirtualJournalContext) requestAttributes.get(VirtualJournalContext.PUB_VIRTUALJOURNAL_CONTEXT);
    }

    /**
     * Returns key of the current journal based on the request url
     * @return Journal key, NULL if no journal context
     */
    public String getCurrentJournal() {
        VirtualJournalContext context = getVirtualJournalContext();
        return (context == null) ? null : context.getJournal();
    }

    public String getAuthId() {
        HttpServletRequest request = ServletActionContext.getRequest();

        if (request == null) {
            throw new RuntimeException("HttpServletRequest is null");
        }

        HttpSession httpSession = request.getSession(true);

        if (httpSession == null) {
            throw new RuntimeException("HttpSession is null");
        }

        return (String) httpSession.getAttribute(Constants.AUTH_KEY);
    }

    /**
     * get the URL info
     * @return
     */
    public String getURL() {
        HttpServletRequest request = ServletActionContext.getRequest();

        if (request == null) {
            throw new RuntimeException("HttpServletRequest is null");
        }

        return request.getParameter("uri");
    }
}