package devopsdistilled.operp.client.items.panes; import java.awt.Dimension; 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.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.BrandController; import devopsdistilled.operp.client.items.controllers.ProductController; import devopsdistilled.operp.client.items.models.observers.BrandModelObserver; import devopsdistilled.operp.client.items.models.observers.ProductModelObserver; import devopsdistilled.operp.client.items.panes.controllers.CreateItemPaneController; import devopsdistilled.operp.client.items.panes.details.ItemDetailsPane; import devopsdistilled.operp.client.items.panes.models.observers.CreateItemPaneModelObserver; import devopsdistilled.operp.server.data.entity.items.Brand; import devopsdistilled.operp.server.data.entity.items.Item; import devopsdistilled.operp.server.data.entity.items.Product; public class CreateItemPane extends SubTaskPane implements CreateItemPaneModelObserver, ProductModelObserver, BrandModelObserver { @Inject private CreateItemPaneController controller; @Inject private ProductController productController; @Inject private BrandController brandController; @Inject private ItemDetailsPane itemDetailsPane; private final JPanel pane; private final JTextField itemNameField; private final JTextField priceField; private final JComboBox<Brand> comboBrands; private final JComboBox<Product> comboProducts; public CreateItemPane() { pane = new JPanel(); pane.setLayout(new MigLayout("flowy", "[][][grow][]", "[][][][][]")); JLabel lblProductName = new JLabel("Product Name"); pane.add(lblProductName, "cell 0 0,alignx trailing"); comboProducts = new JComboBox<>(); comboProducts.setMinimumSize(new Dimension(100, 24)); comboProducts.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) getDialog().pack(); } }); comboProducts.setSelectedItem(null); pane.add(comboProducts, "flowx,cell 2 0,growx"); JLabel lblBrandName = new JLabel("Brand Name"); pane.add(lblBrandName, "cell 0 1,alignx trailing"); comboBrands = new JComboBox<>(); comboBrands.setMinimumSize(new Dimension(100, 24)); comboBrands.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) getDialog().pack(); } }); comboBrands.setSelectedItem(null); pane.add(comboBrands, "flowx,cell 2 1,growx"); JLabel lblItemId = new JLabel("Item Name"); pane.add(lblItemId, "cell 0 2,alignx trailing"); itemNameField = new JTextField(); pane.add(itemNameField, "cell 2 2,growx"); itemNameField.setColumns(10); JLabel lblPrice = new JLabel("Price"); pane.add(lblPrice, "cell 0 3,alignx trailing"); priceField = new JTextField(); pane.add(priceField, "cell 2 3,growx"); priceField.setColumns(10); JButton btnCancel = new JButton("Cancel"); btnCancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { getDialog().dispose(); } }); pane.add(btnCancel, "flowx,cell 2 4"); JButton btnSave = new JButton("Create"); btnSave.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Item item = new Item(); Brand brand = (Brand) comboBrands.getSelectedItem(); item.setBrand(brand); Product product = (Product) comboProducts.getSelectedItem(); item.setProduct(product); String itemName = itemNameField.getText().trim(); item.setItemName(itemName); String itemPrice = priceField.getText().trim(); try { Double price = Double.parseDouble(itemPrice); item.setPrice(price); try { controller.validate(item); // validated item = controller.save(item); getDialog().dispose(); itemDetailsPane.show(item, getPane()); } catch (EntityValidationException e1) { JOptionPane.showMessageDialog(getPane(), e1.getMessage()); } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(getPane(), "Price must be a Numeric value"); } } }); pane.add(btnSave, "cell 2 4"); JButton btnNewProduct = new JButton("New Product"); btnNewProduct.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { productController.create(); } }); pane.add(btnNewProduct, "cell 2 0"); JButton btnNewBrand = new JButton("New Brand"); btnNewBrand.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { brandController.create(); } }); pane.add(btnNewBrand, "cell 2 1"); } @Override public JComponent getPane() { return pane; } @Override public void updateProducts(List<Product> products) { Product prevSelected = (Product) comboProducts.getSelectedItem(); comboProducts.removeAllItems(); for (Product product : products) { comboProducts.addItem(product); if (prevSelected != null) if (prevSelected.compareTo(product) == 0) comboProducts.setSelectedItem(product); } } @Override public void updateBrands(List<Brand> brands) { Brand prevSelected = (Brand) comboBrands.getSelectedItem(); comboBrands.removeAllItems(); for (Brand brand : brands) { comboBrands.addItem(brand); if (prevSelected != null) if (prevSelected.compareTo(brand) == 0) comboBrands.setSelectedItem(brand); } } }