org.dspace.app.webui.cris.controller.ExportFormController.java Source code

Java tutorial

Introduction

Here is the source code for org.dspace.app.webui.cris.controller.ExportFormController.java

Source

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

import it.cilea.osd.jdyna.model.IContainable;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

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

import org.apache.commons.lang.StringUtils;
import org.apache.solr.client.solrj.util.ClientUtils;
import org.dspace.app.cris.discovery.CrisSearchService;
import org.dspace.app.cris.model.ResearcherPage;
import org.dspace.app.cris.model.jdyna.BoxResearcherPage;
import org.dspace.app.cris.model.jdyna.RPPropertiesDefinition;
import org.dspace.app.cris.model.jdyna.TabResearcherPage;
import org.dspace.app.cris.util.ImportExportUtils;
import org.dspace.app.webui.cris.dto.ExportParametersDTO;
import org.dspace.app.webui.util.UIUtil;
import org.dspace.authorize.AuthorizeException;
import org.dspace.authorize.AuthorizeManager;
import org.dspace.core.Context;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;

/**
 * This SpringMVC controller is responsible to handle request of export
 * 
 * @author cilea
 * 
 */
public class ExportFormController extends BaseFormController {

    private static final DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm");

    private CrisSearchService searchService;

    @Override
    protected Map referenceData(HttpServletRequest request) throws Exception {

        Map<String, Object> map = new HashMap<String, Object>();
        map.put("tabs", applicationService.getList(TabResearcherPage.class));
        return map;
    }

    @Override
    protected Object formBackingObject(HttpServletRequest request) throws Exception {
        Context context = UIUtil.obtainContext(request);
        if (!AuthorizeManager.isAdmin(context)) {
            throw new AuthorizeException("Only system administrator can access to the export functionality");
        }
        return super.formBackingObject(request);
    }

    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command,
            BindException errors) throws Exception {
        ExportParametersDTO exportParameters = (ExportParametersDTO) command;

        List<String> f = new LinkedList<String>();
        List<String> q = new LinkedList<String>();
        addToTempQuery("names", exportParameters.getNames(), f, q, !exportParameters.getAdvancedSyntax());

        addToTempQuery("dept", exportParameters.getDept(), f, q, !exportParameters.getAdvancedSyntax());

        addToTempQuery("interests", exportParameters.getInterests(), f, q, !exportParameters.getAdvancedSyntax());

        addToTempQuery("media", exportParameters.getMedia(), f, q, !exportParameters.getAdvancedSyntax());

        String[] temp_query = new String[] {};
        temp_query = q.toArray(temp_query);
        String[] temp_fields = new String[] {};
        temp_fields = f.toArray(temp_fields);
        List<ResearcherPage> list = null;
        try {
            //TODO
            //         list = searchService.search(temp_fields, temp_query,
            //               exportParameters.getStatus(),
            //               exportParameters.getCreationStart(),
            //               exportParameters.getCreationEnd(),
            //               exportParameters.getStaffNoStart(),
            //               exportParameters.getStaffNoEnd(),
            //               exportParameters.getRpIdStart(),
            //               exportParameters.getRpIdEnd(),
            //               exportParameters.getDefaultOperator(), ResearcherPage.class);
        } catch (Exception e) {
            errors.reject("jsp.layout.hku.export.validation.notvalid.query");
            return showForm(request, errors, getFormView());

        }

        // export all tab
        List<IContainable> containables = new LinkedList<IContainable>();
        if (exportParameters.getTabToExport() == null || exportParameters.getTabToExport().isEmpty()) {
            containables = applicationService.findAllContainables(RPPropertiesDefinition.class);
        } else {
            for (Integer tab : exportParameters.getTabToExport()) {
                for (BoxResearcherPage box : applicationService
                        .<BoxResearcherPage, TabResearcherPage>findPropertyHolderInTab(TabResearcherPage.class,
                                tab)) {
                    containables.addAll(box.getMask());
                    applicationService.findOtherContainablesInBoxByConfiguration(box.getShortName(), containables);
                }
            }
        }

        if (exportParameters.getMainMode() == null) {
            response.setContentType("application/excel");
            response.addHeader("Content-Disposition", "attachment; filename=rpdata.xls");
            ImportExportUtils.exportData(list, applicationService, response.getOutputStream(), containables);
            response.getOutputStream().flush();
            response.getOutputStream().close();
        } else {
            response.setContentType("application/xml;charset=UTF-8");
            response.addHeader("Content-Disposition", "attachment; filename=rpdata.xml");
            ImportExportUtils.exportXML(response.getWriter(), applicationService, containables, list);
            response.getWriter().flush();
            response.getWriter().close();
        }

        return null;
    }

    private void addToTempQuery(String fieldName, String value, List<String> f, List<String> q, boolean escape) {
        if (StringUtils.isNotBlank(value)) {
            q.add(escape ? ClientUtils.escapeQueryChars(value) : value);
            f.add(fieldName);
        }
    }

    public CrisSearchService getSearchService() {
        return searchService;
    }

    public void setSearchService(CrisSearchService searchService) {
        this.searchService = searchService;
    }
}