Java tutorial
/******************************************************************************* * 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); } }