package devopsdistilled.operp.client.items.panes; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.List; import javax.inject.Inject; import javax.swing.AbstractButton; import javax.swing.JButton; import javax.swing.JComboBox; 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.SubTaskPane; import devopsdistilled.operp.client.exceptions.EntityValidationException; import devopsdistilled.operp.client.items.controllers.ManufacturerController; import devopsdistilled.operp.client.items.models.observers.ManufacturerModelObserver; import devopsdistilled.operp.client.items.panes.controllers.EditBrandPaneController; import devopsdistilled.operp.client.items.panes.details.BrandDetailsPane; import devopsdistilled.operp.client.items.panes.models.observers.EditBrandPaneModelObserver; import devopsdistilled.operp.server.data.entity.items.Brand; import devopsdistilled.operp.server.data.entity.items.Manufacturer; public class EditBrandPane extends SubTaskPane implements EditBrandPaneModelObserver, ManufacturerModelObserver { @Inject private EditBrandPaneController controller; @Inject private BrandDetailsPane brandDetailsPane; @Inject private ManufacturerController manufacturerController; private final JPanel pane; private final JTextField brandIdField; private final JTextField brandNameField; private final JComboBox<Manufacturer> manufacturersCombo; private final AbstractButton btnNewManufacturer; private Brand brand; public EditBrandPane() { pane = new JPanel(); pane.setLayout(new MigLayout("", "[][]", "[][][][][]")); JLabel lblBrandId = new JLabel("Brand ID"); pane.add(lblBrandId, "cell 0 0,alignx trailing"); brandIdField = new JTextField(); brandIdField.setEditable(false); pane.add(brandIdField, "cell 1 0,growx"); brandIdField.setColumns(10); JLabel lblBrandName = new JLabel("Brand Name"); pane.add(lblBrandName, "cell 0 1,alignx trailing"); brandNameField = new JTextField(); pane.add(brandNameField, "cell 1 1,growx"); brandNameField.setColumns(10); JLabel lblManufacturer = new JLabel("Manufacturer"); pane.add(lblManufacturer, "cell 0 2,alignx trailing"); manufacturersCombo = new JComboBox<>(); manufacturersCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED) getDialog().pack(); } }); manufacturersCombo.setSelectedItem(null); pane.add(manufacturersCombo, "flowx,cell 1 2,growx"); btnNewManufacturer = new JButton("New Manufacturer"); btnNewManufacturer.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { manufacturerController.create(); } }); pane.add(btnNewManufacturer, "cell 1 2"); JButton btnCancel = new JButton("Cancel"); btnCancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { getDialog().dispose(); } }); pane.add(btnCancel, "flowx,cell 1 4"); JButton btnUpdate = new JButton("Update"); btnUpdate.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Brand newBrand = new Brand(); newBrand.setBrandID(brand.getBrandID()); newBrand.setBrandName(brandNameField.getText().trim()); newBrand.setManufacturer((Manufacturer) manufacturersCombo .getSelectedItem()); try { controller.validate(newBrand); newBrand = controller.save(newBrand); getDialog().dispose(); brandDetailsPane.show(newBrand, getPane()); } catch (EntityValidationException e1) { JOptionPane.showMessageDialog(getPane(), e1.getMessage()); } } }); JButton btnReset = new JButton("Reset"); btnReset.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { updateEntity(brand); } }); pane.add(btnReset, "cell 1 4"); pane.add(btnUpdate, "cell 1 4"); } @Override public JComponent getPane() { return pane; } @Override public void updateEntity(Brand brand) { this.brand = brand; brandIdField.setText(brand.getBrandID().toString()); brandNameField.setText(brand.getBrandName()); manufacturersCombo.setSelectedItem(brand.getManufacturer()); } @Override public void updateManufacturers(List<Manufacturer> manufacturers) { Manufacturer prevSelected = (Manufacturer) manufacturersCombo .getSelectedItem(); manufacturersCombo.removeAllItems(); for (Manufacturer manufacturer : manufacturers) { manufacturersCombo.addItem(manufacturer); if (prevSelected != null) if (prevSelected.compareTo(manufacturer) == 0) manufacturersCombo.setSelectedItem(manufacturer); } } }