package devopsdistilled.operp.client.employee.panes; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.util.Date; import javax.inject.Inject; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import net.miginfocom.swing.MigLayout; import devopsdistilled.operp.client.abstracts.EntityOperation; import devopsdistilled.operp.client.abstracts.EntityPane; import devopsdistilled.operp.client.employee.controllers.EmployeeController; import devopsdistilled.operp.client.employee.panes.controllers.EmployeePaneController; import devopsdistilled.operp.client.employee.panes.models.observers.EmployeePaneModelObserver; import devopsdistilled.operp.server.data.entity.employee.Employee; public class EmployeePane extends EntityPane<Employee, EmployeeController, EmployeePaneController> implements EmployeePaneModelObserver { @Inject private EmployeeController employeeController; private final JPanel pane; private final JTextField nameField; private final JLabel lblEmployeeId; private final JTextField employeeIdField; private JPanel contactInfoPanel; private JPanel opBtnPanel; private final JTextField designationField; private final JTextField salaryField; private final JLabel lblJoinDate; private final JTextField dateField; public EmployeePane() { pane = new JPanel(); pane.setLayout(new MigLayout("", "[][grow]", "[][][][][][][][]")); lblEmployeeId = new JLabel("Employee ID"); pane.add(lblEmployeeId, "cell 0 0,alignx trailing"); employeeIdField = new JTextField(); employeeIdField.setEditable(false); pane.add(employeeIdField, "cell 1 0,growx"); employeeIdField.setColumns(10); JLabel lblEmployeeName = new JLabel("Employee Name"); pane.add(lblEmployeeName, "cell 0 1,alignx trailing"); nameField = new JTextField(); nameField.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { String empName = nameField.getText().trim(); if (empName.equalsIgnoreCase("") && e.getOppositeComponent() != null) { JOptionPane.showMessageDialog(getPane(), "Employee Name must not be empty"); e.getComponent().requestFocus(); } getController().getModel().getEntity().setEmployeeName(empName); } }); pane.add(nameField, "cell 1 1,growx"); nameField.setColumns(10); JLabel lblDesignation = new JLabel("Designation"); pane.add(lblDesignation, "cell 0 2,alignx trailing"); designationField = new JTextField(); designationField.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { getController().getModel().getEntity() .setDesignation(designationField.getText().trim()); } }); pane.add(designationField, "cell 1 2,growx"); designationField.setColumns(10); JLabel lblSalary = new JLabel("Salary"); pane.add(lblSalary, "cell 0 3,alignx trailing"); salaryField = new JTextField(); salaryField.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { try { Double salary = Double.parseDouble(salaryField.getText() .trim()); getController().getModel().getEntity().setSalary(salary); } catch (NumberFormatException e1) { JOptionPane.showMessageDialog(getPane(), "Salary field must be numeric value"); e.getComponent().requestFocus(); } } }); pane.add(salaryField, "cell 1 3,growx"); salaryField.setColumns(10); lblJoinDate = new JLabel("Join Date"); pane.add(lblJoinDate, "cell 0 4,alignx trailing"); dateField = new JTextField(); dateField.setEditable(false); pane.add(dateField, "cell 1 4,growx"); dateField.setColumns(10); contactInfoPanel = new JPanel(); pane.add(contactInfoPanel, "cell 0 5 2 1,grow"); opBtnPanel = new JPanel(); pane.add(opBtnPanel, "cell 1 7,grow"); } @Override public JComponent getPane() { return pane; } public void setContactInfopanel(JPanel contactInfoPanel) { MigLayout layout = (MigLayout) pane.getLayout(); Object constraints = layout .getComponentConstraints(this.contactInfoPanel); pane.remove(this.contactInfoPanel); pane.add(contactInfoPanel, constraints); this.contactInfoPanel = contactInfoPanel; pane.validate(); } @Override public void updateEntity(Employee employee, EntityOperation entityOperation) { if (EntityOperation.Create == entityOperation) { getController().getModel().setTitle("Create Employee"); opBtnPanel = setBtnPanel(createOpPanel, opBtnPanel); lblEmployeeId.setVisible(false); employeeIdField.setVisible(false); } else if (EntityOperation.Edit == entityOperation) { getController().getModel().setTitle("Edit Employee"); opBtnPanel = setBtnPanel(editOpPanel, opBtnPanel); lblJoinDate.setVisible(true); dateField.setVisible(true); } else if (EntityOperation.Details == entityOperation) { getController().getModel().setTitle("Employee Details"); opBtnPanel = setBtnPanel(detailsOpPanel, opBtnPanel); employeeIdField.setText(employee.getEmployeeId().toString()); nameField.setEditable(false); lblJoinDate.setVisible(true); dateField.setVisible(true); designationField.setEditable(false); salaryField.setEditable(false); } nameField.setText(employee.getEmployeeName()); designationField.setText(employee.getDesignation()); salaryField.setText(employee.getSalary().toString()); Date joinedDate = employee.getJoinedDate(); if (joinedDate != null) dateField.setText(joinedDate.toString()); } @Override public void resetComponents() { lblEmployeeId.setVisible(true); employeeIdField.setVisible(true); nameField.setEditable(true); dateField.setVisible(false); lblJoinDate.setVisible(false); dateField.setEditable(false); designationField.setEditable(true); salaryField.setEditable(true); } @Override public EmployeeController getEntityController() { return employeeController; } }