package devopsdistilled.operp.client.stock.panes; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; 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.ItemController; import devopsdistilled.operp.client.items.models.observers.ItemModelObserver; import devopsdistilled.operp.client.stock.controllers.WarehouseController; import devopsdistilled.operp.client.stock.models.observers.EditStockPaneModelObserver; import devopsdistilled.operp.client.stock.models.observers.WarehouseModelObserver; import devopsdistilled.operp.client.stock.panes.controllers.EditStockPaneController; import devopsdistilled.operp.server.data.entity.items.Item; import devopsdistilled.operp.server.data.entity.stock.Stock; import devopsdistilled.operp.server.data.entity.stock.Warehouse; public class EditStockPane extends SubTaskPane implements EditStockPaneModelObserver,ItemModelObserver,WarehouseModelObserver{ @Inject private EditStockPaneController controller; @Inject private ItemController itemController; @Inject private WarehouseController warehouseController; private final JPanel pane; private final JTextField stockIdField; private final JTextField quantityField; private final JTextField dateField; private final JComboBox<Item> comboItems; private final JComboBox<Warehouse> comboWarehouses; private Stock stock; public EditStockPane(){ pane=new JPanel(); pane.setLayout(new MigLayout("", "[][grow]", "[][][][][][][]")); JLabel lblStockId = new JLabel("Stock Id"); pane.add(lblStockId, "cell 0 0,alignx trailing"); stockIdField = new JTextField(); stockIdField.setEditable(false); pane.add(stockIdField, "cell 1 0,growx"); stockIdField.setColumns(10); JLabel lblItemName = new JLabel("Item Name"); pane.add(lblItemName, "cell 0 1,alignx trailing"); comboItems = new JComboBox<Item>(); comboItems.setSelectedItem(null); pane.add(comboItems, "flowx,cell 1 1,growx"); JButton btnNewItem = new JButton("New Item"); btnNewItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { itemController.create(); } }); pane.add(btnNewItem, "cell 1 1"); JLabel lblWarehouseName = new JLabel("Warehouse Name"); pane.add(lblWarehouseName, "cell 0 2,alignx trailing"); comboWarehouses = new JComboBox<Warehouse>(); comboWarehouses.setSelectedItem(null); pane.add(comboWarehouses, "flowx,cell 1 2,growx"); JButton btnNewWarehouse = new JButton("New Warehouse"); btnNewWarehouse.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { warehouseController.create(); } }); pane.add(btnNewWarehouse, "cell 1 2"); JLabel lblQuantity = new JLabel("Quantity"); pane.add(lblQuantity, "cell 0 3,alignx trailing"); quantityField = new JTextField(); pane.add(quantityField, "cell 1 3,growx"); quantityField.setColumns(10); JLabel lblDate = new JLabel("Date"); pane.add(lblDate, "cell 0 4,alignx trailing"); dateField = new JTextField(); dateField.setEditable(false); pane.add(dateField, "cell 1 4,growx"); dateField.setColumns(10); JButton btnCancel = new JButton("Cancel"); btnCancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { getDialog().dispose(); } }); pane.add(btnCancel, "flowx,cell 1 6"); JButton btnReset = new JButton("Reset"); btnReset.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { updateEntity(stock); } }); pane.add(btnReset, "cell 1 6"); JButton btnUpdate = new JButton("Update"); btnUpdate.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Long stockId=stock.getStockId(); Stock stock=new Stock(); stock.setStockId(stockId); Item item=(Item) comboItems.getSelectedItem(); stock.setItem(item); Warehouse warehouse=(Warehouse) comboWarehouses.getSelectedItem(); stock.setWarehouse(warehouse); String stockQuantity=quantityField.getText().trim(); try{ Long quantity=Long.parseLong(stockQuantity); stock.setQuantity(quantity); try{ controller.validate(stock); stock=controller.save(stock); getDialog().dispose(); }catch (EntityValidationException e1){ JOptionPane.showMessageDialog(getPane(), e1.getMessage()); } }catch (NumberFormatException ex){ JOptionPane.showMessageDialog(getPane(), "Quantity must be a numeric value"); } } }); pane.add(btnUpdate, "cell 1 6"); } @Override public JComponent getPane() { return pane; } @Override public void updateWarehouses(List<Warehouse> warehouses) { Warehouse prevSelected=(Warehouse) comboWarehouses.getSelectedItem(); comboWarehouses.removeAllItems(); for(Warehouse warehouse: warehouses){ comboWarehouses.addItem(warehouse); if(prevSelected!=null) if(prevSelected.compareTo(warehouse)==0) comboWarehouses.setSelectedItem(warehouse); } } @Override public void updateItems(List<Item> items) { Item prevSelected=(Item) comboItems.getSelectedItem(); comboItems.removeAllItems(); for(Item item: items){ comboItems.addItem(item); if(prevSelected != null) if(prevSelected.compareTo(item) == 0) comboItems.setSelectedItem(item); } } @Override public void updateEntity(Stock stock) { this.stock= stock; stockIdField.setText(stock.getStockId().toString()); comboItems.setSelectedItem(stock.getItem()); comboWarehouses.setSelectedItem(stock.getWarehouse()); quantityField.setText(stock.getQuantity().toString()); } }