DisciplinaBean.java

Atributos utilizados pela classe:

private List<Disciplina> disciplinas;
private Disciplina disciplina = new Disciplina();
private Disciplina disciplinaSelecionada = new Disciplina();
private String msgConfirmacao = "Tem certeza?";
private int larguraPopupConfirma = 200;
  • A lista "disciplinas" do tipo Disciplina será utilizada para preencher a tabela principal com todos os registros, na visualização da página web de gerenciamento desta entidade.
  • O objeto "disciplina" será utilizado na inserção de novos registros.
  • O objeto "disciplinaSelecionada" será utilizado para armazenar o registro da tabela que deseja-se fazer alguma alteração.
  • O inteiro "larguraPopupConfirma" representa a largura da caixa de mensagem de confirmação.

Método que popula a lista de disciplinas com registros atualizados:

public void atualizaListaDisciplinas() {
    disciplinas = EManager.getInstance().createNamedQuery("Disciplina.findAll").getResultList();
}

Nesta linha de código, fazemos uma requisição ao EntityManager para retornar todos as disciplinas cadastradas.

(Obs: NamedQuery Disciplina.findAll = SELECT * FROM Disciplina).

Método que trata a inserção de novas disciplinas na tabela:

public void novoCadastro() {
        EManager.getInstance().getTransaction().begin();
        EManager.getInstance().persist(this.disciplina);
        EManager.getInstance().getTransaction().commit();
        this.disciplina = new Disciplina();
        atualizaListaDisciplinas();
}

Neste método, utilizamos a instância do objeto disciplina criado no início da classe (this.disciplina) como objeto base para receber as informações da nova disciplina.

Então iniciamos uma transação com o banco de dados através da unidade de persistência (gerenciada pelo EntityManager) e "persistimos" a entidade disciplina - Isto indica que esta entidade será inserida como um novo registro. Por fim, é feito o "commit", que grava as mudanças realizadas durante a transação.

Após a inserção, re-instanciamos nosso objeto disciplina para prevenir que existam dados remanescentes de transações anteriores, e então atualizamos a lista - para obter o novo registro junto com os demais.

Método que trata a modificação de registros de disciplinas na tabela:

public void modificaDisciplina() {
        EManager.getInstance().getTransaction().begin();
        EManager.getInstance().merge(this.disciplinaSelecionada);
        EManager.getInstance().getTransaction().commit();
        atualizaListaDisciplinas();
}

Utilizamos a mesma metodologia empregada na parte de inserção de disciplinas, porém aqui ocorre uma mudança durante a transação - chamamos o método "merge", passando para ele o objeto "disciplinaSelecionada", que segura os valores do registro clicado na tabela durante a exibição na página web. Este método indica para o EntityManager que estaremos fazendo mudanças em registros já existentes.

Método que trata a remoção de registros de disciplinas na tabela:

public void deletaDisciplina() {
        List<Matricula> m = EManager.getInstance().createNamedQuery("Matricula.findByDisciplina").setParameter("idDisciplina", this.disciplinaSelecionada.getId()).getResultList();
        EManager.getInstance().getTransaction().begin();
        for (int i = 0; i < m.size(); i++) {
            EManager.getInstance().remove(m.get(i));
        }
        EManager.getInstance().remove(this.disciplinaSelecionada);
        EManager.getInstance().getTransaction().commit();
        atualizaListaDisciplinas();
}

Utilizamos aqui o mesmo processo, diferenciando-se dos outros com o método "remove", que indica para o EntityManager que estamos apagando um registro da tabela.

Vale ressaltar que, todas estas operações ocorrem com base no id do registro que deseja-se manipular - sendo na inserção adicionado um id gerado automaticamente pelo banco SQL (pois utilizamos auto increment), e na modificação e exclusão utilizamos o id do registro já existente.

Método que irá repassar o objeto Disciplina escolhido na tabela (pela página web) para nosso objeto instanciado anteriormente.

public void enviaDisciplina(Disciplina a) {
    this.disciplinaSelecionada = a;
    List<Matricula> m = EManager.getInstance().createNamedQuery("Matricula.findByDisciplina").setParameter("idDisciplina", this.disciplinaSelecionada.getId()).getResultList();
    if (m.size() > 0) {
        this.msgConfirmacao = "Tem certeza? A remoção da disciplina acarretará na exclusão de todas as respectivas matrículas.";
        this.larguraPopupConfirma = 400;
    } else {
        this.msgConfirmacao = "Tem certeza?";
        this.larguraPopupConfirma = 200;
        }
}

Desta forma recebemos o registro completo, incluindo seu id.

Também verificamos se a disciplina está vinculada à matricula de algum aluno, para atualizar a mensagem de confirmação de exclusão (caso clicado) para alertar o usuário da consequência de tal ação - adicionalmente modificamos a largura do pop-up, para se adequar ao tamanho do novo texto.

Método que inicializa a tabela preenchida com os registros, de forma automática ao carregar a página:

@PostConstruct
public void init() {
    atualizaListaDisciplinas();
}

Aqui apenas utilizamos o método atualizaListaDisciplinas() descrito anteriormente, com a anotação @PostConstruct (sua funcionalidade é descrita na seção anterior).

E então adicionamos todos os getters e setters (dica: utilize o atalho Alt+Insert para inserção automática).

public List<Disciplina> getDisciplinas() {
    return disciplinas;
}

public void setDisciplinas(List<Disciplina> disciplinas) {
    this.disciplinas = disciplinas;
}

public Disciplina getDisciplina() {
    return disciplina;
}

public void setDisciplina(Disciplina disciplina) {
    this.disciplina = disciplina;
}

public Disciplina getDisciplinaSelecionada() {
    return disciplinaSelecionada;
}

public void setDisciplinaSelecionada(Disciplina disciplinaSelecionada) {
    this.disciplinaSelecionada = disciplinaSelecionada;
}

public String getMsgConfirmacao() {
    return msgConfirmacao;
}

public void setMsgConfirmacao(String msgConfirmacao) {
    this.msgConfirmacao = msgConfirmacao;
}

public int getLarguraPopupConfirma() {
    return larguraPopupConfirma;
}

public void setLarguraPopupConfirma(int larguraPopupConfirma) {
    this.larguraPopupConfirma = larguraPopupConfirma;
}

Link para download da classe DisciplinaBean.java: https://gist.github.com/quisen/f8933141f19ffdb2a80a0c3551b5a863

results matching ""

    No results matching ""