org.opentestsystem.delivery.testreg.rest.TemplateDownloadController.java Source code

Java tutorial

Introduction

Here is the source code for org.opentestsystem.delivery.testreg.rest.TemplateDownloadController.java

Source

/*******************************************************************************
 * Educational Online Test Delivery System
 * Copyright (c) 2013 American Institutes for Research
 *
 * Distributed under the AIR Open Source License, Version 1.0
 * See accompanying file AIR-License-1_0.txt or at
 * http://www.smarterapp.org/documents/American_Institutes_for_Research_Open_Source_Software_License.pdf
 ******************************************************************************/

package org.opentestsystem.delivery.testreg.rest;

import com.google.common.net.MediaType;
import org.apache.commons.io.IOUtils;
import org.opentestsystem.delivery.testreg.domain.FormatType;
import org.opentestsystem.shared.web.AbstractRestController;
import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

import static com.google.common.net.HttpHeaders.*;
import static org.apache.commons.io.FilenameUtils.*;
import static org.springframework.http.HttpStatus.*;

@Controller
public class TemplateDownloadController extends AbstractRestController {

    @Resource(name = "templateDownloadCreators")
    private Map<FileType, TemplateCreator> templateDownloadCreators;

    @RequestMapping(value = "/template/{filename:.+}", method = RequestMethod.GET)
    @Secured({ "ROLE_Template Download" })
    public void templatePage(@PathVariable final String filename, HttpServletResponse response) throws Exception {

        MediaType mediaType = determineMediaType(filename);
        if (mediaType != null) {
            response.setHeader(CONTENT_DISPOSITION, "attachment; filename=" + getTemplateFilename(filename));
            response.setContentType(mediaType.toString());

            FormatType formatType = FormatType.valueOf(getBaseName(filename).toUpperCase());
            ServletOutputStream out = response.getOutputStream();
            IOUtils.copy(templateDownloadCreators.get(FileType.findByFilename(filename)).createTemplate(formatType),
                    out);
            out.flush();

        } else {
            response.setStatus(UNSUPPORTED_MEDIA_TYPE.value());
        }
    }

    private MediaType determineMediaType(String fileName) {
        switch (FileType.findByFilename(fileName)) {
        case XLS:
        case XLSX:
            return MediaType.MICROSOFT_EXCEL;
        case CSV:
            return MediaType.CSV_UTF_8;
        case TXT:
            return MediaType.TSV_UTF_8;
        }
        return null;
    }

    private String getTemplateFilename(String filename) {
        return getBaseName(filename) + "_template." + getExtension(filename);
    }
}