package devopsdistilled.operp.client.stock.panes; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; 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.stock.controllers.WarehouseController; import devopsdistilled.operp.client.stock.models.observers.WarehouseModelObserver; import devopsdistilled.operp.client.stock.panes.controllers.TransferStockPaneController; import devopsdistilled.operp.client.stock.panes.details.TransferStockDetailsPane; import devopsdistilled.operp.client.stock.panes.models.observers.TransferStockPaneModelObserver; import devopsdistilled.operp.server.data.entity.items.Item; import devopsdistilled.operp.server.data.entity.stock.StockKeeper; import devopsdistilled.operp.server.data.entity.stock.Warehouse; import java.awt.Dimension; public class TransferStockPane extends SubTaskPane implements TransferStockPaneModelObserver, WarehouseModelObserver { @Inject private TransferStockPaneController controller; @Inject private WarehouseController warehouseController; @Inject private TransferStockDetailsPane transferStockDetailsPane; private final JPanel pane; private final JTextField quantityField; private final JComboBox<Warehouse> toWarehouseCombo; private final JComboBox<Warehouse> fromWarehouseCombo; private final JComboBox<Item> itemsCombo; public TransferStockPane() { pane = new JPanel(); pane.setLayout(new MigLayout("", "[][grow]", "[][][][][][]")); JLabel lblFromWarehouse = new JLabel("From Warehouse"); pane.add(lblFromWarehouse, "cell 0 0,alignx trailing"); fromWarehouseCombo = new JComboBox<>(); fromWarehouseCombo.setMinimumSize(new Dimension(100, 24)); fromWarehouseCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent event) { if (event.getStateChange() == ItemEvent.SELECTED) { Warehouse fromWarehouse = (Warehouse) event.getItem(); controller.getModel().setFromWarehouse(fromWarehouse); getDialog().pack(); } } }); pane.add(fromWarehouseCombo, "cell 1 0,growx"); JLabel lblItem = new JLabel("Item"); pane.add(lblItem, "cell 0 1,alignx trailing"); itemsCombo = new JComboBox<>(); itemsCombo.setMinimumSize(new Dimension(100, 24)); itemsCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED){ controller.getModel().setItemToTransfer((Item) e.getItem()); getDialog().pack(); } } }); pane.add(itemsCombo, "cell 1 1,growx"); JLabel lblToWarehouse = new JLabel("To Warehouse"); pane.add(lblToWarehouse, "cell 0 2,alignx trailing"); toWarehouseCombo = new JComboBox<>(); toWarehouseCombo.setMinimumSize(new Dimension(100, 24)); toWarehouseCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED){ getDialog().pack(); Warehouse toWarehouse = (Warehouse) e.getItem(); controller.getModel().setToWarehouse(toWarehouse); } } }); pane.add(toWarehouseCombo, "flowx,cell 1 2,growx"); JLabel lblQuantity = new JLabel("Quantity"); pane.add(lblQuantity, "cell 0 3,alignx trailing"); JButton btnNewWarehouse = new JButton("New Warehouse"); btnNewWarehouse.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { warehouseController.create(); } }); pane.add(btnNewWarehouse, "cell 1 2"); quantityField = new JTextField(); quantityField.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { try { Long quantity = Long.parseLong(quantityField.getText() .trim()); controller.getModel().setQuantity(quantity); } catch (NumberFormatException e1) { JOptionPane.showMessageDialog(getPane(), "Quantity Field must be numeric value"); } } }); pane.add(quantityField, "cell 1 3,growx"); quantityField.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 5"); JButton btnTransfer = new JButton("Transfer"); btnTransfer.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { controller.validate(); List<StockKeeper> stockKeepers = controller.transfer(); getDialog().dispose(); transferStockDetailsPane.show(stockKeepers.get(0), getPane()); } catch (EntityValidationException e1) { JOptionPane.showMessageDialog(getPane(), e1.getMessage()); } } }); pane.add(btnTransfer, "cell 1 5"); } @Override public JComponent getPane() { return pane; } @Override public void updateWarehouses(List<Warehouse> warehouses) { Warehouse prevSelectedFrom = (Warehouse) fromWarehouseCombo .getSelectedItem(); Warehouse prevSelectedTo = (Warehouse) toWarehouseCombo .getSelectedItem(); fromWarehouseCombo.removeAllItems(); toWarehouseCombo.removeAllItems(); for (Warehouse warehouse : warehouses) { fromWarehouseCombo.addItem(warehouse); toWarehouseCombo.addItem(warehouse); if (prevSelectedFrom != null) if (prevSelectedFrom.compareTo(warehouse) == 0) fromWarehouseCombo.setSelectedItem(warehouse); if (prevSelectedTo != null) if (prevSelectedTo.compareTo(warehouse) == 0) toWarehouseCombo.setSelectedItem(warehouse); } } @Override public void updateItems(List<Item> fromWarehouseItems) { Item prevSelectedItem = (Item) itemsCombo.getSelectedItem(); itemsCombo.removeAllItems(); for (Item item : fromWarehouseItems) { itemsCombo.addItem(item); if (prevSelectedItem != null) if (prevSelectedItem.compareTo(item) == 0) itemsCombo.setSelectedItem(item); } } }