ProgramaController.java 4.19 KB
package br.com.centralit.controller;

import java.util.Collection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
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 br.com.centralit.api.model.Programa;
import br.com.centralit.api.service.ProgramaService;
import br.com.centralit.api.service.UsuarioService;
import br.com.centralit.api.viewHelper.ViewsContrato;
import br.com.centralit.framework.controller.GenericController;
import br.com.centralit.framework.json.ResponseBodyWrapper;
import br.com.centralit.framework.model.Usuario;

/**
 * <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> Monitor </p>
 *
 * <p><b>Description: </b></p>
 *
 * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">415</a></p>
 *
 * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
 *
 * @since 08/01/2015 - 10:17:58
 *
 * @version 1.0.0
 *
 * @author luis.camargo
 *
 */
@Controller
@RequestMapping("/rest/programa")
public class ProgramaController extends GenericController<Programa> {

	private ProgramaService programaService;

	@Autowired
	private UsuarioService usuarioService;


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

		super(programaService);

		this.programaService = programaService;
	}

	/**
	 * <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>
	 *
	 * Método responsável por trazer todos os programas da organizacao do usuário logado.
	 *
	 * @author luis.camargo
	 *
	 * @return
	 */
	@RequestMapping(value = "/findAllByOrganizacao", method = RequestMethod.GET, produces = "application/json")
	@ResponseBody
	public ResponseBodyWrapper findAllByOrganizacao() {

		Usuario usuarioLogado = (Usuario) usuarioService.find(( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId());
		Long organizacaoId = usuarioLogado.getOrganizacao().getId();

		final Collection<Programa> programas = this.programaService.findAllByOrganizacao(organizacaoId);

		ResponseBodyWrapper responseBody = new ResponseBodyWrapper(programas, ViewsContrato.ProgramaListView.class);

		return responseBody;
	}

	/**
	 * Método responsável por listar programas por numero ou nome e organizacao
	 *
	 * @author iago.almeida
	 *
	 * @param numeroOrNome
	 * @param idOrganizacao
	 *
	 * @return Collection<Programa>
	 */
	@RequestMapping(value = "/findAutoCompleteProgramaByNumeroOrNomeAndOrganizacao", method = RequestMethod.GET, produces = "application/json")
	@ResponseBody
	public ResponseBodyWrapper findAutoCompleteProgramaByNumeroOrNomeAndOrganizacao(@RequestParam(value = "numeroOrNome") String numeroOrNome, @RequestParam(value = "idOrganizacao") Long idOrganizacao) {

		ResponseBodyWrapper responseBody = new ResponseBodyWrapper(this.programaService.findAutoCompleteProgramaByNumeroOrNomeAndOrganizacao(numeroOrNome, idOrganizacao), ViewsContrato.ProgramaAutoCompleteView.class);

		return responseBody;
	}

	@RequestMapping(value = "/findByProgramaAcao", method = RequestMethod.GET, produces = "application/json")
	@ResponseBody
	public ResponseBodyWrapper getValorTotalOS(@RequestParam(value = "idProgramaAcao") Long idProgramaAcao) {
		ResponseBodyWrapper responseBody = new ResponseBodyWrapper(this.programaService.findByProgramaAcao(idProgramaAcao), ViewsContrato.ProgramaAutoCompleteView.class);
		return responseBody;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Class<ViewsContrato.ProgramaListView> getListView() {

		return ViewsContrato.ProgramaListView.class;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Class<ViewsContrato.ProgramaEditView> getEditView() {

		return ViewsContrato.ProgramaEditView.class;
	}
}