package devopsdistilled.operp.client.business.purchases.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.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import net.miginfocom.swing.MigLayout; import devopsdistilled.operp.client.abstracts.EntityOperation; import devopsdistilled.operp.client.abstracts.EntityPane; import devopsdistilled.operp.client.business.purchases.controllers.PurchaseController; import devopsdistilled.operp.client.business.purchases.panes.controllers.PurchasePaneController; import devopsdistilled.operp.client.business.purchases.panes.models.observers.PurchasePaneModelObserver; import devopsdistilled.operp.client.exceptions.EntityValidationException; import devopsdistilled.operp.client.party.controllers.VendorController; import devopsdistilled.operp.client.party.models.observers.VendorModelObserver; import devopsdistilled.operp.server.data.entity.business.Purchase; import devopsdistilled.operp.server.data.entity.party.Vendor; public class PurchasePane extends EntityPane<Purchase, PurchaseController, PurchasePaneController> implements PurchasePaneModelObserver, VendorModelObserver { @Inject private PurchaseController saleController; @Inject private VendorController vendorController; private final JPanel pane; private final JComboBox<Vendor> vendorCombo; private JPanel saleDescPanel; private final JButton btnCancel; private final JButton btnPurchase; public PurchasePane() { pane = new JPanel(); pane.setLayout(new MigLayout("", "[][grow]", "[][][][][]")); JLabel lblVendor = new JLabel("Vendor"); pane.add(lblVendor, "cell 0 0,alignx trailing"); vendorCombo = new JComboBox<>(); vendorCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) getController().getModel().getEntity() .setParty((Vendor) e.getItem()); } }); pane.add(vendorCombo, "flowx,cell 1 0,growx"); JButton btnNewVendor = new JButton("New Vendor"); btnNewVendor.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { vendorController.create(); } }); pane.add(btnNewVendor, "cell 1 0"); saleDescPanel = new JPanel(); pane.add(saleDescPanel, "cell 0 2 2 1,grow"); saleDescPanel.setLayout(new MigLayout("", "[]", "[]")); btnCancel = new JButton("Cancel"); btnCancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { dispose(); } }); pane.add(btnCancel, "flowx,cell 1 4,alignx trailing"); btnPurchase = new JButton("Purchase"); btnPurchase.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { getController().validate(); Purchase purchase = getController().save(); dispose(); saleController.showDetails(purchase); } catch (EntityValidationException e1) { JOptionPane.showMessageDialog(getPane(), e1.getMessage()); } } }); pane.add(btnPurchase, "cell 1 4, alignx right"); } @Override public void resetComponents() { } @Override public PurchaseController getEntityController() { return saleController; } @Override public JComponent getPane() { return pane; } @Override public void updateEntity(Purchase sale, EntityOperation entityOperation) { if (EntityOperation.Create == entityOperation) { getController().getModel().setTitle("New Purchase"); } } public void setPurchaseDescpanel(JPanel saleDescPanel) { MigLayout layout = (MigLayout) pane.getLayout(); Object constraints = layout.getComponentConstraints(this.saleDescPanel); pane.remove(this.saleDescPanel); pane.add(saleDescPanel, constraints); this.saleDescPanel = saleDescPanel; pane.validate(); } @Override public void updateVendors(List<Vendor> vendors) { Vendor prevSelected = (Vendor) vendorCombo.getSelectedItem(); vendorCombo.removeAllItems(); for (Vendor vendor : vendors) { vendorCombo.addItem(vendor); if (prevSelected != null) if (prevSelected.compareTo(vendor) == 0) vendorCombo.setSelectedItem(vendor); } } }