@Override
  public Resposta<Pacote> criar(Usuario autor, Pacote pacote, Projeto projetoSelecionado) {
    List<String> inconsistencias = validarEntradasCriacao(pacote, autor, projetoSelecionado);
    if (!inconsistencias.isEmpty()) {
      return UtilsNegocio.criarRespostaComErro(inconsistencias);
    }
    String recursoId = "recursoId-criar";
    AutorizadorDeAcesso autorizador = new AutorizadorDeAcesso(recursoId, autor, projetoSelecionado);
    if (!autorizador.isAutorizado()) {
      return UtilsNegocio.criarRespostaComErro(autorizador.getDetalhes());
    }

    pacote.setAbandonado(false);
    pacote.setDataCriacao(UtilsNegocio.buscarDataAtual());
    pacote.setProjeto(projetoSelecionado);
    pacote.setIdProjeto(projetoSelecionado.getId());

    inconsistencias = pacote.validar();
    if (!inconsistencias.isEmpty()) {
      String menssagemErro = "Pacote inconsistente";
      Logger.getLogger(GestorDePacotes.class.getName()).log(Level.SEVERE, null, menssagemErro);
      return UtilsNegocio.criarRespostaComErro(inconsistencias);
    }

    Andamento andamento = new Andamento();
    andamento.setDataModificacao(pacote.getDataCriacao());
    andamento.setDataPrevistaConclusao(pacote.getDataPrevistaRealizacao());
    andamento.setDescricao("Criação do pacote");
    andamento.setEstado(pacote.getEstado());
    andamento.setPacote(pacote);
    andamento.setUsuarioDestinatario(null);
    andamento.setUsuarioRemetente(autor);
    inconsistencias = andamento.validar();
    if (!inconsistencias.isEmpty()) {
      String menssagemErro = "Pacote inconsistente";
      Logger.getLogger(GestorDePacotes.class.getName()).log(Level.SEVERE, null, menssagemErro);
      return UtilsNegocio.criarRespostaComErro(inconsistencias);
    }

    IDaoAndamento daoAndamento = new DaoAndamento();
    IDaoPacote daoPacote = new DaoPacote();

    Transacao transacao = null;
    try {
      transacao = Transacao.getInstance();
      daoPacote.salvar(pacote, transacao);
      andamento.setIdPacote(pacote.getId());
      daoAndamento.salvar(andamento, transacao);
      transacao.confirmar();
    } catch (SQLException ex) {
      UtilsNegocio.fecharTransacao(getClass(), transacao, ex);
    }
    return UtilsNegocio.criarRespostaValida(pacote);
  }
  @Override
  public Resposta<List<Pacote>> pesquisarPacotesNovos(Usuario autor, long projetoSelecionado) {
    if (autor == null || autor.getId() < 1) {
      return UtilsNegocio.criarRespostaComErro("Usuário não informado");
    }
    if (projetoSelecionado < 1) {
      return UtilsNegocio.criarRespostaComErro("Projeto não informado");
    }

    Pesquisa pesquisa = new Pesquisa(Pacote.class);
    pesquisa.adicionarFiltroNumerico("idProjeto", OperacaoFiltroNumerico.IGUAL, projetoSelecionado);

    Resposta<List<Pacote>> resposta;
    IDaoPacote daoPacote = new DaoPacote();
    try {
      List<Pacote> pacotes = daoPacote.pesquisar(pesquisa);
      resposta = UtilsNegocio.criarRespostaValida(pacotes);
    } catch (SQLException ex) {
      Logger.getLogger(GestorDePacotes.class.getName()).log(Level.SEVERE, null, ex);
      resposta = UtilsNegocio.criarRespostaComErro("Falha no sistema");
    }
    return resposta;
  }