edu.cornell.mannlib.vitro.webapp.controller.VitroRequest.java Source code

Java tutorial

Introduction

Here is the source code for edu.cornell.mannlib.vitro.webapp.controller.VitroRequest.java

Source

/* $This file is distributed under the terms of the license in /doc/license.txt$ */

package edu.cornell.mannlib.vitro.webapp.controller;

import static edu.cornell.mannlib.vitro.webapp.controller.MultipartRequestWrapper.ATTRIBUTE_FILE_ITEM_MAP;
import static edu.cornell.mannlib.vitro.webapp.controller.MultipartRequestWrapper.ATTRIBUTE_FILE_SIZE_EXCEPTION;
import static edu.cornell.mannlib.vitro.webapp.controller.MultipartRequestWrapper.ATTRIBUTE_IS_MULTIPART;
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.ASSERTIONS_ONLY;
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.CONTENT;
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.LANGUAGE_NEUTRAL;
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess.POLICY_NEUTRAL;
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelNames.DISPLAY;

import java.text.Collator;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.query.Dataset;

import edu.cornell.mannlib.vitro.webapp.beans.ApplicationBean;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector;
import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroModelSource.ModelName;
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess;
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelNames;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;

public class VitroRequest extends HttpServletRequestWrapper {

    final static Log log = LogFactory.getLog(VitroRequest.class);

    //Attribute in case of special model editing such as display model editing
    public static final String SPECIAL_WRITE_MODEL = "specialWriteModel";

    public static final String ID_FOR_WRITE_MODEL = "idForWriteModel";
    public static final String ID_FOR_TBOX_MODEL = "idForTboxModel";
    public static final String ID_FOR_ABOX_MODEL = "idForAboxModel";
    public static final String ID_FOR_DISPLAY_MODEL = "idForDisplayModel";

    private HttpServletRequest _req;

    public VitroRequest(HttpServletRequest _req) {
        super(_req);
        this._req = _req;
    }

    public RDFService getRDFService() {
        return ModelAccess.on(this).getRDFService();
    }

    public RDFService getUnfilteredRDFService() {
        return ModelAccess.on(this).getRDFService(CONTENT, LANGUAGE_NEUTRAL);
    }

    /** Gets WebappDaoFactory with appropriate filtering for the request */
    public WebappDaoFactory getWebappDaoFactory() {
        return ModelAccess.on(this).getWebappDaoFactory();
    }

    /** gets assertions+inference WebappDaoFactory with no policy filtering */
    public WebappDaoFactory getUnfilteredWebappDaoFactory() {
        return ModelAccess.on(this).getWebappDaoFactory(POLICY_NEUTRAL);
    }

    /** gets assertions-only WebappDaoFactory with no policy filtering */
    public WebappDaoFactory getUnfilteredAssertionsWebappDaoFactory() {
        return ModelAccess.on(this).getWebappDaoFactory(POLICY_NEUTRAL, ASSERTIONS_ONLY);
    }

    public Dataset getDataset() {
        return ModelAccess.on(this).getDataset(CONTENT);
    }

    public Dataset getUnfilteredDataset() {
        return ModelAccess.on(this).getDataset(CONTENT, LANGUAGE_NEUTRAL);
    }

    //Method that retrieves write model, returns special model in case of write model
    public OntModel getWriteModel() {
        //if special write model doesn't exist use get ont model 
        if (this.getAttribute(SPECIAL_WRITE_MODEL) != null) {
            return (OntModel) this.getAttribute(SPECIAL_WRITE_MODEL);
        } else {
            return getJenaOntModel();
        }
    }

    public OntModelSelector getOntModelSelector() {
        return ModelAccess.on(this).getOntModelSelector();
    }

    public OntModel getJenaOntModel() {
        return ModelAccess.on(this).getOntModel(ModelNames.FULL_UNION);
    }

    public OntModel getDisplayModel() {
        return ModelAccess.on(this).getOntModel(DISPLAY);
    }

    /**
     * Gets an identifier for the display model associated 
     * with this request.  It may have been switched from
     * the normal display model to a different one.
     * This could be a URI or a {@link ModelName}
     */
    public String getIdForDisplayModel() {
        return (String) getAttribute(ID_FOR_DISPLAY_MODEL);
    }

    /**
     * Gets an identifier for the a-box model associated 
     * with this request.  It may have been switched from
     * the standard one to a different one.
     * This could be a URI or a {@link ModelName}
     */
    public String getNameForABOXModel() {
        return (String) getAttribute(ID_FOR_ABOX_MODEL);
    }

    /**
     * Gets an identifier for the t-box model associated 
     * with this request.  It may have been switched from
     * the standard one to a different one.
     * This could be a URI or a {@link ModelName}
     */
    public String getNameForTBOXModel() {
        return (String) getAttribute(ID_FOR_TBOX_MODEL);
    }

    /**
     * Gets an identifier for the write model associated 
     * with this request.  It may have been switched from
     * the standard one to a different one.
     * This could be a URI or a {@link ModelName}
     */
    public String getNameForWriteModel() {
        return (String) getAttribute(ID_FOR_WRITE_MODEL);
    }

    public ApplicationBean getAppBean() {
        return getWebappDaoFactory().getApplicationDao().getApplicationBean();
    }

    /**
     * Gets the the ip of the client.
     * This will be X-forwarded-for header or, if that header is not
     * set, getRemoteAddr(). This still may not be the client's address
     * as they may be using a proxy. 
     * 
     */
    public String getClientAddr() {
        String xff = getHeader("x-forwarded-for");
        return (xff == null || xff.trim().isEmpty()) ? getRemoteAddr() : xff;
    }

    @SuppressWarnings("unchecked")
    @Override
    public Map<String, String[]> getParameterMap() {
        return _req.getParameterMap();
    }

    @Override
    public String getParameter(String name) {
        return _req.getParameter(name);
    }

    @Override
    public String[] getParameterValues(String name) {
        return _req.getParameterValues(name);
    }

    public OntModel getLanguageNeutralUnionFullModel() {
        return ModelAccess.on(this).getOntModel(ModelNames.FULL_UNION, LANGUAGE_NEUTRAL);
    }

    public void setCollator(Collator collator) {
        setAttribute("collator", collator);
    }

    public Collator getCollator() {
        return (Collator) getAttribute("collator");
    }

    public WebappDaoFactory getLanguageNeutralWebappDaoFactory() {
        // It is also policy neutral, because that's how it was originally
        // implemented, and at least some of the client code expects it that
        // way.
        return ModelAccess.on(this).getWebappDaoFactory(LANGUAGE_NEUTRAL, POLICY_NEUTRAL);
    }

    // ----------------------------------------------------------------------
    // Deal with parsed multipart requests.
    // ----------------------------------------------------------------------

    public boolean isMultipart() {
        return getAttribute(ATTRIBUTE_IS_MULTIPART) != null;
    }

    @SuppressWarnings("unchecked")
    public Map<String, List<FileItem>> getFiles() {
        Map<String, List<FileItem>> map;
        map = (Map<String, List<FileItem>>) getAttribute(ATTRIBUTE_FILE_ITEM_MAP);
        if (map == null) {
            return Collections.emptyMap();
        } else {
            return map;
        }
    }

    /**
     * There may be more than one file item with the given name. If the first
     * one is empty (size is zero), keep looking for a non-empty one.
     */
    public FileItem getFileItem(String name) {
        Map<String, List<FileItem>> map = getFiles();
        List<FileItem> items = map.get(name);
        if (items == null) {
            return null;
        }
        for (FileItem item : items) {
            if (item.getSize() > 0L) {
                return item;
            }
        }
        return null;
    }

    /**
     * If the uploaded file exceeded the maximum size, and if the strategy said
     * to stash the exception, it will be stored as a request attribute.
     */
    public boolean hasFileSizeException() {
        return getFileSizeException() != null;
    }

    /**
     * Could be either FileSizeLimitExceededException or
     * SizeLimitExceededException, so return their common ancestor.
     */
    public FileUploadException getFileSizeException() {
        Object e = getAttribute(ATTRIBUTE_FILE_SIZE_EXCEPTION);
        if (e instanceof FileUploadException) {
            return (FileUploadException) e;
        } else {
            return null;
        }
    }

}