cesardl/facultad-sample-app

View on GitHub
src/main/java/org/sanmarcux/view/JDialogStudent.java

Summary

Maintainability
D
2 days
Test Coverage
B
87%
/*
 * JDialogStudent.java
 *
 * Created on 12/07/2009, 05:13:31 PM
 */
package org.sanmarcux.view;

import org.apache.log4j.Logger;
import org.sanmarcux.beans.Student;
import org.sanmarcux.beans.Teacher;
import org.sanmarcux.beans.etc.Gender;
import org.sanmarcux.controller.DialogAction;
import org.sanmarcux.controller.StudentController;
import org.sanmarcux.view.etc.JDialogFormBase;
import org.sanmarcux.view.etc.Toast;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 * @author Cesardl
 */
@Component
public class JDialogStudent extends JDialogFormBase<Student> {

    private static final long serialVersionUID = -8277040414653880047L;

    private static final Logger LOG = Logger.getLogger(JDialogStudent.class);

    private final transient StudentController studentController;

    private String address;
    private String phone;
    private Gender gender;
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JComboBox<Teacher> comboBoxSelectTeacher;
    private com.toedter.calendar.JDateChooser dateChooserBirthday;
    private javax.swing.JRadioButton radioButtonFemale;
    private javax.swing.JRadioButton radioButtonMale;
    private javax.swing.JTextField textFieldAddress;
    private javax.swing.JTextField textFieldCode;
    private javax.swing.JTextField textFieldNames;
    private javax.swing.JTextField textFieldPhone;

    @Autowired
    public JDialogStudent(StudentController studentController) {
        this.studentController = studentController;
    }

    @Override
    public boolean validateData() {
        code = textFieldCode.getText().trim();
        names = textFieldNames.getText().trim();
        birthday = dateChooserBirthday.getDate();
        gender = radioButtonMale.isSelected() ? Gender.MALE : Gender.FEMALE;
        address = textFieldAddress.getText().trim();
        phone = textFieldPhone.getText().trim();

        String key;
        if (code.length() == 0) {
            key = "app.warning.student.code.empty";
            LOG.warn(key);
            Toast.makeText(this, bundle.getString(key), Toast.Style.WARNING).display();
            selectTextField(textFieldCode);
            return false;
        }
        if (DialogAction.INSERT.equals(dialogAction) && studentController.existsCode(code)) {
            key = "app.warning.student.code.already.exists";
            LOG.warn(key);
            Toast.makeText(this, bundle.getString(key), Toast.Style.WARNING).display();
            selectTextField(textFieldCode);
            return false;
        }
        if (names.length() == 0) {
            key = "app.warning.student.name.empty";
            LOG.warn(key);
            Toast.makeText(this, bundle.getString(key), Toast.Style.WARNING).display();
            selectTextField(textFieldNames);
            return false;
        }
        if (birthday == null) {
            key = "app.warning.student.birthday.empty";
            LOG.warn(key);
            Toast.makeText(this, bundle.getString(key), Toast.Style.WARNING).display();
            dateChooserBirthday.requestFocusInWindow();
            return false;
        }
        if (address.length() == 0) {
            key = "app.warning.student.address.empty";
            LOG.warn(key);
            Toast.makeText(this, bundle.getString(key), Toast.Style.WARNING).display();
            selectTextField(textFieldAddress);
            return false;
        }

        return true;
    }

    @Override
    public void setData() {
        code = entity.getCode();
        names = entity.getNames();
        birthday = entity.getBirthday();
        gender = entity.getGender();
        address = entity.getAddress();
        phone = entity.getPhone();

        int size = comboBoxSelectTeacher.getItemCount();
        for (int i = 0; i < size; i++) {
            Teacher p = comboBoxSelectTeacher.getItemAt(i);
            if (p.getId() == entity.getTeacherId()) {
                comboBoxSelectTeacher.setSelectedIndex(i);
                break;
            }
        }

        textFieldCode.setText(code);
        textFieldCode.setEnabled(false);
        textFieldNames.setText(names);
        dateChooserBirthday.setDate(birthday);
        if (Gender.MALE.equals(gender)) {
            radioButtonMale.setSelected(true);
        } else {
            radioButtonFemale.setSelected(true);
        }
        textFieldAddress.setText(address);
        textFieldPhone.setText(phone);
    }

    @Override
    public Student getEntity() {
        return entity;
    }

    @Override
    public void setEntity(Student entity) {
        this.entity = entity;

        setData();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    @PostConstruct
    private void initComponents() {

        javax.swing.ButtonGroup buttonGroup = new javax.swing.ButtonGroup();
        javax.swing.JPanel panel = new javax.swing.JPanel();
        javax.swing.JLabel labelCode = new javax.swing.JLabel();
        javax.swing.JLabel labelNames = new javax.swing.JLabel();
        javax.swing.JLabel labelBirthday = new javax.swing.JLabel();
        javax.swing.JLabel labelGender = new javax.swing.JLabel();
        javax.swing.JLabel labelAddress = new javax.swing.JLabel();
        javax.swing.JLabel labelPhone = new javax.swing.JLabel();
        javax.swing.JLabel labelSelectTeacher = new javax.swing.JLabel();
        textFieldCode = new javax.swing.JTextField();
        textFieldNames = new javax.swing.JTextField();
        dateChooserBirthday = new com.toedter.calendar.JDateChooser();
        radioButtonMale = new javax.swing.JRadioButton();
        radioButtonFemale = new javax.swing.JRadioButton();
        textFieldAddress = new javax.swing.JTextField();
        textFieldPhone = new javax.swing.JTextField();
        comboBoxSelectTeacher = new javax.swing.JComboBox<>();
        javax.swing.JButton buttonAccept = new javax.swing.JButton();
        javax.swing.JButton buttonCancel = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        setTitle(bundle.getString("app.title")); // NOI18N
        setResizable(false);

        panel.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("app.dialog.border.title"))); // NOI18N

        labelCode.setText(bundle.getString("dictionary.code")); // NOI18N

        labelNames.setText(bundle.getString("dictionary.names")); // NOI18N

        labelBirthday.setText(bundle.getString("dictionary.birthday")); // NOI18N

        labelGender.setText(bundle.getString("dictionary.sex")); // NOI18N

        labelAddress.setText(bundle.getString("dictionary.address")); // NOI18N

        labelPhone.setText(bundle.getString("dictionary.phone")); // NOI18N

        labelSelectTeacher.setText(bundle.getString("app.select.teacher")); // NOI18N

        buttonGroup.add(radioButtonMale);
        radioButtonMale.setSelected(true);
        radioButtonMale.setText(bundle.getString("dictionary.male")); // NOI18N

        buttonGroup.add(radioButtonFemale);
        radioButtonFemale.setText(bundle.getString("dictionary.female")); // NOI18N

        comboBoxSelectTeacher.setModel(new javax.swing.DefaultComboBoxModel<>(teacherController.getNames()));

        javax.swing.GroupLayout panelLayout = new javax.swing.GroupLayout(panel);
        panel.setLayout(panelLayout);
        panelLayout.setHorizontalGroup(
                panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(panelLayout.createSequentialGroup()
                                .addContainerGap()
                                .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                        .addComponent(labelSelectTeacher, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                                .addComponent(labelCode, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                                .addComponent(labelBirthday, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                                .addComponent(labelGender, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                                .addComponent(labelAddress, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                                .addComponent(labelPhone, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                        .addComponent(labelNames, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(textFieldAddress, javax.swing.GroupLayout.DEFAULT_SIZE, 323, Short.MAX_VALUE)
                                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelLayout.createSequentialGroup()
                                                .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                                        .addComponent(dateChooserBirthday, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                                        .addComponent(textFieldCode, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 215, Short.MAX_VALUE)
                                                        .addComponent(textFieldNames, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 215, Short.MAX_VALUE))
                                                .addGap(108, 108, 108))
                                        .addComponent(comboBoxSelectTeacher, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addGroup(panelLayout.createSequentialGroup()
                                                .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                        .addGroup(panelLayout.createSequentialGroup()
                                                                .addComponent(radioButtonMale)
                                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                                .addComponent(radioButtonFemale))
                                                        .addComponent(textFieldPhone, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE))
                                                .addGap(0, 0, Short.MAX_VALUE)))
                                .addContainerGap())
        );
        panelLayout.setVerticalGroup(
                panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(panelLayout.createSequentialGroup()
                                .addContainerGap()
                                .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                                        .addComponent(labelCode)
                                        .addComponent(textFieldCode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(18, 18, 18)
                                .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                                        .addComponent(textFieldNames, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(labelNames))
                                .addGap(18, 18, 18)
                                .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                                        .addComponent(dateChooserBirthday, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(labelBirthday))
                                .addGap(18, 18, 18)
                                .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                                        .addComponent(radioButtonFemale)
                                        .addComponent(radioButtonMale)
                                        .addComponent(labelGender))
                                .addGap(18, 18, 18)
                                .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                                        .addComponent(labelAddress)
                                        .addComponent(textFieldAddress, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGap(18, 18, 18)
                                .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                                        .addComponent(textFieldPhone, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(labelPhone))
                                .addGap(18, 18, 18)
                                .addGroup(panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                                        .addComponent(comboBoxSelectTeacher, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(labelSelectTeacher))
                                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        buttonAccept.setText(bundle.getString("dictionary.accept")); // NOI18N
        buttonAccept.addActionListener(e -> buttonAcceptActionPerformed());

        buttonCancel.setText(bundle.getString("dictionary.cancel")); // NOI18N
        buttonCancel.addActionListener(e -> buttonCancelActionPerformed());

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                                .addContainerGap()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                                .addGap(0, 0, Short.MAX_VALUE)
                                                .addComponent(buttonAccept, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addComponent(buttonCancel)))
                                .addContainerGap())
        );
        layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                        .addComponent(buttonCancel)
                                        .addComponent(buttonAccept))
                                .addContainerGap())
        );

        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                LOG.info("Closing action in student form");
                preparingDialogClose();
            }
        });

        pack();
        setModal(true);
        setLocationRelativeTo(null);
    }// </editor-fold>//GEN-END:initComponents

    private void buttonAcceptActionPerformed() {//GEN-FIRST:event_buttonAcceptActionPerformed
        if (validateData()) {
            Teacher t = (Teacher) comboBoxSelectTeacher.getSelectedItem();
            int teacherId = t.getId();

            entity.setCode(code);
            entity.setNames(names);
            entity.setBirthday(birthday);
            entity.setGender(gender);
            entity.setAddress(address);
            entity.setPhone(phone);
            entity.setTeacherId(teacherId);

            boolean state = studentController.saveOrUpdate(entity);

            String key;
            if (state) {
                key = "app.success.student.save";
                LOG.info(key);
                Toast.makeText(this, bundle.getString(key), Toast.Style.SUCCESS).display();
                dispose();
            } else {
                key = "app.error.student.save";
                LOG.error(key);
                Toast.makeText(this, bundle.getString(key), Toast.Style.ERROR).display();
            }
        }
    }//GEN-LAST:event_buttonAcceptActionPerformed

    private void buttonCancelActionPerformed() {//GEN-FIRST:event_buttonCancelActionPerformed
        LOG.info("Canceling action in teacher form");
        preparingDialogClose();
        dispose();
    }//GEN-LAST:event_buttonCancelActionPerformed
    // End of variables declaration//GEN-END:variables
}