AnexoGedController.java 3.55 KB
package br.com.centralit.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import br.com.centralit.api.model.AnexoGed;
import br.com.centralit.api.service.AnexoGedService;
import br.com.centralit.framework.controller.GenericController;
import br.com.centralit.framework.service.arquitetura.GedFileService;

/**
 * <p>
 * <img src="http://centralit.com.br/images/logo_central.png">
 * </p>
 * 
 * <p>
 * <b>Company: </b> Central IT - Governança Corporativa -
 * </p>
 * 
 * <p>
 * <b>Title: </b>
 * </p>
 * 
 * <p>
 * <b>Description: </b>
 * </p>
 * 
 * <p>
 * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
 * </p>
 * 
 * <p>
 * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
 * </p>
 * 
 * @since 16/12/2015 - 15:42:02
 * 
 * @version 1.0.0
 * 
 * @author rogerio.costa
 * 
 */
@Controller
@RequestMapping("/rest/anexoGed")
public class AnexoGedController extends GenericController<AnexoGed> {

	/** Atributo anexoGedService. */
	private AnexoGedService anexoGedService;

	@Autowired
	private GedFileService gedFileService;

	/**
	 * Responsável pela criação de novas instâncias desta classe.
	 * 
	 * @param anexoGedService
	 */
	@Autowired
	public AnexoGedController( AnexoGedService anexoGedService ) {

		super(anexoGedService);

		this.anexoGedService = anexoGedService;
	}

	/**
	 * Método responsável por realizar o upload dos anexos que estão ligadas a entidade documento
	 * 
	 * @author rogerio.costa
	 * 
	 * @param name
	 * @param file
	 * @param idAnexo
	 */
	@RequestMapping(value = "/uploadAnexo", method = RequestMethod.POST)
	public @ResponseBody
	void uploadAnexo(@RequestParam(value = "filename", required = false) String name, @RequestParam("file") MultipartFile file, @RequestParam(value = "idDocumento", required = false) Long idDocumento) {

		this.anexoGedService.saveAnexo(file, idDocumento);
	}

	/**
	 * 
	 * Método responsável por visualizar anexo
	 * 
	 * @author rogerio.costa
	 * 
	 * @param idAnexo
	 * @param response
	 * @return
	 */
	@RequestMapping(value = "/visualizar", method = RequestMethod.GET)
	public @ResponseBody
	ResponseEntity<byte[]> visualizar(@RequestParam(value = "idAnexo") Long idAnexo, HttpServletResponse response) {

		AnexoGed anexo = this.anexoGedService.find(idAnexo);

		HttpHeaders headers = new HttpHeaders();

		headers.add("content-disposition", "inline;filename=" + anexo.getDescricao());

		headers.setContentType(MediaType.parseMediaType(anexo.getDominioTipoAnexo().getDescricao()));

		ResponseEntity<byte[]> resp = null;

		try {

			File file = this.gedFileService.restoreFile(anexo);
			file.length();
			FileInputStream input = new FileInputStream(file);
			resp = new ResponseEntity<byte[]>(IOUtils.toByteArray(input), headers, HttpStatus.OK);

		} catch (IOException e) {

			e.printStackTrace();

		} catch (Exception e) {

			e.printStackTrace();
		}

		return resp;

	}

}