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

Source Code of org.dspace.app.webui.cris.json.RelationPreferenceJSONController

/**
* 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.json;

import flexjson.JSONSerializer;
import it.cilea.osd.common.controller.BaseAbstractController;

import java.util.ArrayList;
import java.util.List;

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

import org.dspace.app.cris.discovery.CrisSearchService;
import org.dspace.app.cris.model.ACrisObject;
import org.dspace.app.cris.service.ApplicationService;
import org.dspace.app.webui.cris.dto.RelatedObject;
import org.dspace.app.webui.cris.dto.RelatedObjects;
import org.dspace.app.webui.cris.util.RelationPreferenceUtil;
import org.dspace.app.webui.cris.util.RelationPreferenceUtil.Sort;
import org.dspace.app.webui.util.UIUtil;
import org.dspace.core.Context;
import org.dspace.discovery.SearchService;
import org.dspace.utils.DSpace;
import org.springframework.web.servlet.ModelAndView;

public class RelationPreferenceJSONController extends BaseAbstractController
{
    private RelationPreferenceUtil relationPreferenceUtil;

    public void setRelationPreferenceUtil(
            RelationPreferenceUtil relationPreferenceUtil)
    {
        this.relationPreferenceUtil = relationPreferenceUtil;
    }

    private ApplicationService applicationService = new DSpace()
            .getServiceManager().getServiceByName("applicationService",
                    ApplicationService.class);

    private CrisSearchService crisSearchService = new DSpace()
            .getServiceManager().getServiceByName(
                    SearchService.class.getName(), CrisSearchService.class);

    private ACrisObject getCRISObject(HttpServletRequest request)
    {
        String uuid = getUUID(request);
        ACrisObject cris = applicationService.getEntityByUUID(uuid);
        return cris;
    }

    private String getUUID(HttpServletRequest request)
    {
        String pathInfo = request.getPathInfo();
        // example /uuid/XXXXXXXXX/relMgmt/publications
        String path = pathInfo.substring("/uuid/".length());
        String[] splitted = path.split("/");
        String uuid = splitted[0];
        return uuid;
    }

    private String getRelationType(HttpServletRequest request)
    {
        String pathInfo = request.getPathInfo();
        // example /uuid/XXXXXXXXX/relMgmt/publications.json
        String path = pathInfo.substring("/uuid/".length());
        String[] splitted = path.split("/");
        String type = splitted[2].split("\\.json")[0];
        return type;
    }

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception
    {
        Context context = UIUtil.obtainContext(request);
        ACrisObject cris = getCRISObject(request);
        String relationType = getRelationType(request);
        String fQuery = getSearchQuery(request);
        String status = getFilterStatus(request);
        List<Sort> sorts = getSorts(request);
        int rpp = getRpp(request);
        int offset = getOffset(request);
        int sEcho = getsEcho(request);

        RelatedObjects relatedObjects = relationPreferenceUtil
                .getRelatedObject(context, cris, relationType, fQuery, status,
                        sorts, rpp, offset);
        Response resp = new Response();
        resp.setRelatedObjects(relatedObjects.getObjects());
        resp.setiTotalRecords(relatedObjects.getTotalRecords());
        resp.setiTotalDisplayRecords(relatedObjects.getFilterRecords());
        resp.setsEcho(sEcho);
        JSONSerializer serializer = new JSONSerializer();
        serializer.exclude("class", "objects.class");
        serializer.deepSerialize(resp, response.getWriter());
        response.setContentType("application/json");
        return null;
    }

    private int getsEcho(HttpServletRequest request)
    {
        return UIUtil.getIntParameter(request, "sEcho");
    }

    private String getFilterStatus(HttpServletRequest request)
    {
        return request.getParameter("filterStatus");
    }

    private int getOffset(HttpServletRequest request)
    {
        int offset = UIUtil.getIntParameter(request, "iDisplayStart");
        return offset > 0 ? offset : 0;
    }

    private int getRpp(HttpServletRequest request)
    {
        int rpp = UIUtil.getIntParameter(request, "iDisplayLength");
        return rpp > 0 ? rpp : 20;
    }

    private List<Sort> getSorts(HttpServletRequest request)
    {
        List<Sort> sorts = new ArrayList<Sort>();
        int numSort = UIUtil.getIntParameter(request, "iSortingCols");
        if (numSort > 0)
        {
            for (int idx = 0; idx < numSort; idx++)
            {
                Sort sort = new Sort();
                // we need to remove 2 because the datatable structure has uuid
                // and relationPreference as first columns
                sort.col = UIUtil.getIntParameter(request, "iSortCol_"+idx)-2;
                sort.asc = "asc".equalsIgnoreCase(request.getParameter("sSortDir_"+idx));
                sorts.add(sort);
            }
        }
           
        return sorts;
    }

    private String getSearchQuery(HttpServletRequest request)
    {
        return request.getParameter("sSearch");
    }
   
    private class Response {
        private int sEcho;
        private int iTotalRecords;
        private int iTotalDisplayRecords;
        private List<RelatedObject> relatedObjects;
        public int getsEcho()
        {
            return sEcho;
        }
        public void setsEcho(int sEcho)
        {
            this.sEcho = sEcho;
        }
        public int getiTotalRecords()
        {
            return iTotalRecords;
        }
        public void setiTotalRecords(int iTotalRecords)
        {
            this.iTotalRecords = iTotalRecords;
        }
        public int getiTotalDisplayRecords()
        {
            return iTotalDisplayRecords;
        }
        public void setiTotalDisplayRecords(int iTotalDisplayRecords)
        {
            this.iTotalDisplayRecords = iTotalDisplayRecords;
        }
        public List<RelatedObject> getRelatedObjects()
        {
            return relatedObjects;
        }
        public void setRelatedObjects(List<RelatedObject> relatedObjects)
        {
            this.relatedObjects = relatedObjects;
        }
    }
}
TOP

Related Classes of org.dspace.app.webui.cris.json.RelationPreferenceJSONController

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.