Package org.dspace.app.webui.cris.controller.json

Source Code of org.dspace.app.webui.cris.controller.json.MyRPJSONController$RPStatusInformation

/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* https://github.com/CILEA/dspace-cris/wiki/License
*/
package org.dspace.app.webui.cris.controller.json;

import java.io.IOException;
import java.sql.SQLException;

import flexjson.JSONSerializer;
import it.cilea.osd.jdyna.model.AccessLevelConstants;
import it.cilea.osd.jdyna.value.TextValue;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dspace.app.cris.model.ResearcherPage;
import org.dspace.app.cris.model.RestrictedField;
import org.dspace.app.cris.model.jdyna.RPPropertiesDefinition;
import org.dspace.app.cris.model.jdyna.RPProperty;
import org.dspace.app.cris.model.jdyna.VisibilityTabConstant;
import org.dspace.app.cris.service.ApplicationService;
import org.dspace.app.cris.util.ResearcherPageUtils;
import org.dspace.app.webui.util.UIUtil;
import org.dspace.core.Context;
import org.dspace.eperson.EPerson;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

/**
* Retrieve data on the researcher profile of the logged user to be used in a
* "My Researcher Page"
*
* @author cilea
*
*/
public class MyRPJSONController extends MultiActionController
{
    /**
     * the applicationService for query the RP db, injected by Spring IoC
     */
    private ApplicationService applicationService;

    public void setApplicationService(ApplicationService applicationService)
    {
        this.applicationService = applicationService;
    }

    public ModelAndView create(HttpServletRequest request,
            HttpServletResponse response) throws Exception
    {
        // authorization is checked by the getMyRP method
        ResearcherPage rp = getMyResearcherPage(request);
        if (rp == null)
        {
            rp = new ResearcherPage();
            rp.setEpersonID(getCurrentUser(request).getID());
            RPPropertiesDefinition fN = applicationService
                    .findPropertiesDefinitionByShortName(
                            RPPropertiesDefinition.class, "fullName");
            TextValue val = new TextValue();
            val.setOggetto(getCurrentUser(request).getFullName());
            RPProperty prop = rp.createProprieta(fN);
            prop.setValue(val);
            prop.setVisibility(1);
            applicationService.saveOrUpdate(ResearcherPage.class, rp);
        }
        returnStatusJSON(response, rp);
        return null;
    }

    private void returnStatusJSON(HttpServletResponse response,
            ResearcherPage rp) throws IOException
    {
        RPStatusInformation info = new RPStatusInformation();
        if (rp != null)
        {
            info.setActive(rp.getStatus() != null ? rp.getStatus() : false);
            info.setUrl("/cris/" + rp.getPublicPath() + "/"
                    + ResearcherPageUtils.getPersistentIdentifier(rp));
        }
        JSONSerializer serializer = new JSONSerializer();
        serializer.rootName("myrp");
        serializer.exclude("class");
        response.setContentType("application/json");
        serializer.deepSerialize(info, response.getWriter());
    }

    private ResearcherPage getMyResearcherPage(HttpServletRequest request)
            throws SQLException, ServletException
    {
        EPerson currUser = getCurrentUser(request);
        if (currUser == null)
        {
            throw new ServletException(
                    "Wrong data or configuration: access to the my rp servlet without a valid user: there is no user logged in");
        }

        int id = currUser.getID();
        ResearcherPage rp = applicationService.getResearcherPageByEPersonId(id);
        return rp;
    }

    private EPerson getCurrentUser(HttpServletRequest request)
            throws SQLException
    {
        Context context = UIUtil.obtainContext(request);
        EPerson currUser = context.getCurrentUser();
        return currUser;
    }

    public ModelAndView activate(HttpServletRequest request,
            HttpServletResponse response) throws Exception
    {
        ResearcherPage rp = getMyResearcherPage(request);
        if (rp.getStatus() == null || rp.getStatus() == false)
        {
            rp.setStatus(true);
            applicationService.saveOrUpdate(ResearcherPage.class, rp);
        }

        returnStatusJSON(response, rp);
        return null;
    }

    public ModelAndView hide(HttpServletRequest request,
            HttpServletResponse response) throws Exception
    {
        ResearcherPage rp = getMyResearcherPage(request);
        if (rp.getStatus() == null || rp.getStatus() == true)
        {
            rp.setStatus(false);
            applicationService.saveOrUpdate(ResearcherPage.class, rp);
        }

        returnStatusJSON(response, rp);
        return null;
    }

    public ModelAndView remove(HttpServletRequest request,
            HttpServletResponse response) throws Exception
    {
        ResearcherPage rp = getMyResearcherPage(request);
        if (rp != null)
        {
            applicationService.delete(ResearcherPage.class, rp.getId());
        }
        returnStatusJSON(response, null);
        return null;
    }

    public ModelAndView status(HttpServletRequest request,
            HttpServletResponse response) throws Exception
    {
        ResearcherPage rp = getMyResearcherPage(request);
        returnStatusJSON(response, rp);
        return null;
    }

    class RPStatusInformation
    {
        private boolean active;

        private String url;

        public boolean isActive()
        {
            return active;
        }

        public void setActive(boolean active)
        {
            this.active = active;
        }

        public String getUrl()
        {
            return url;
        }

        public void setUrl(String url)
        {
            this.url = url;
        }
    }
}
TOP

Related Classes of org.dspace.app.webui.cris.controller.json.MyRPJSONController$RPStatusInformation

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.