Package presenter

Source Code of presenter.DuplicarCenarioPresenter

package presenter;

import business.CenarioVolume;
import business.Projeto;
import dao.ProjetoDAO;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import main.Main;
import org.jdesktop.swingx.JXErrorPane;
import org.jdesktop.swingx.error.ErrorInfo;
import org.netbeans.validation.api.Problem;
import org.netbeans.validation.api.Severity;
import org.netbeans.validation.api.Validator;
import org.netbeans.validation.api.builtin.Validators;
import org.netbeans.validation.api.ui.ValidationPanel;
import util.FixedLengthDocument;
import view.DuplicarCenarioView;

public class DuplicarCenarioPresenter {

    private DuplicarCenarioView view;
    private Main main;
    private ProjetoDAO projetoDAO;

    public DuplicarCenarioPresenter(Main main) {
        this.projetoDAO = new ProjetoDAO();
        view = new DuplicarCenarioView();
        this.main = main;
        view.setLocationRelativeTo(main);

        view.getCmbCenarioOrigem().addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                exibeDetalhes();
            }
        });

        view.getBtnDuplicar().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    duplicaColecao();
                } catch (Exception ex) {
                    ErrorInfo info = new ErrorInfo("Erro", ex.getMessage(), null, "category", ex, Level.SEVERE, null);
                    JXErrorPane.showDialog(null, info);
                }
            }
        });

        view.getBtnCancelar().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                view.setVisible(false);
                view.dispose();
            }
        });
        view.getTxtCenarioDestino().setDocument(new FixedLengthDocument(20));

        view.getTxtCenarioDestino().setName("Novo cenário");
        final ValidationPanel pnl = new ValidationPanel();
        view.setContentPane(pnl);
        pnl.setInnerComponent(view.getPnlCampos());

        // O campo Nome não pode ser vazio
        Validator<javax.swing.text.Document> vldVazio = Validators.forDocument(true, Validators.REQUIRE_NON_EMPTY_STRING);
        pnl.getValidationGroup().add(view.getTxtCenarioDestino(), vldVazio);
        pnl.addChangeListener(new ChangeListener() {

            public void stateChanged(ChangeEvent e) {
                Problem p = pnl.getProblem();
                boolean enable = p == null ? true : p.severity() != Severity.FATAL;

                view.getBtnDuplicar().setEnabled(enable);
            }
        });

        loadCenarios();
        exibeDetalhes();

        view.getTxtCenarioDestino().requestFocus();
        view.getBtnDuplicar().setEnabled(false);
        view.getTxtCenarioDestino().addKeyListener(new KeyAdapter() {

            @Override
            public void keyTyped(KeyEvent e) {
                view.getBtnDuplicar().setEnabled(true);
                view.getBtnCancelar().setText("Cancelar");
            }
        });
        view.setVisible(true);
    }

    private void loadCenarios() {
        try {
            view.getCmbCenarioOrigem().setModel(new DefaultComboBoxModel());
            DefaultComboBoxModel cbCenarios = new DefaultComboBoxModel();
            projetoDAO.connect();
            ArrayList<CenarioVolume> arvoreCollection = new ArrayList<>(main.getProjeto().getCenarios());
            for (CenarioVolume cenario : arvoreCollection) {
                cbCenarios.addElement(cenario.getNome());
            }
            view.getCmbCenarioOrigem().setModel(cbCenarios);
            projetoDAO.close();

        } catch (Exception ex) {
            Logger.getLogger(DuplicarCenarioPresenter.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void duplicaColecao() throws Exception {
        if (view.getCmbCenarioOrigem().getSelectedIndex() >= 0) {
            projetoDAO.connect();
            CenarioVolume from = main.getProjeto().getCenarioByName((view.getCmbCenarioOrigem().getSelectedItem().toString()));
            if (from.getTotalArvores() == 0) {
                projetoDAO.close();
                throw new Exception("Não existem árvores no cenário de origem.");
            } else {
                if (main.getProjeto().contains(view.getTxtCenarioDestino().getText())) {
                    view.getTxtCenarioDestino().setText(null);
                    projetoDAO.close();
                    throw new Exception("Existe um cenário com este nome. Selecione outro.");
                } else {
                    CenarioVolume novoCenario = new CenarioVolume(main.getProjeto().getNewCenarioVolumeId());
                    novoCenario.addArvores(new ArrayList<>(from.getArvores()));
                    novoCenario.setNome(view.getTxtCenarioDestino().getText());
                    Projeto projeto = projetoDAO.find(main.getProjeto().getId());
                    projeto.addCenario(novoCenario);
                    projetoDAO.update(projeto, false, projeto.getId());
                    projetoDAO.close();
                    main.setProjeto(projeto);
                    main.getViewState().updateTreeModel();
                    loadCenarios();
                    JOptionPane.showMessageDialog(view, "Cenário duplicado para " + view.getTxtCenarioDestino().getText() + ".");
                    view.getTxtCenarioDestino().setText(null);
                    view.getTxtCenarioDestino().requestFocus();
                    view.getBtnCancelar().setText("Fechar");
                }
            }
        } else {
            throw new UnsupportedOperationException("Selecione um cenário de origem.");
        }
    }

    private void exibeDetalhes() {
        projetoDAO.connect();
        view.getLblTotalArvores().setText(Integer.toString(main.getProjeto().getCenarioById(main.getProjeto().getCenarioByName((view.getCmbCenarioOrigem().getSelectedItem().toString())).getId()).getTotalArvores()));
        projetoDAO.close();
    }
}
TOP

Related Classes of presenter.DuplicarCenarioPresenter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.