package devopsdistilled.operp.client.items.panes; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.LinkedList; import java.util.List; import javax.inject.Inject; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; 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.CategoryController; import devopsdistilled.operp.client.items.models.observers.CategoryModelObserver; import devopsdistilled.operp.client.items.panes.controllers.CreateProductPaneController; import devopsdistilled.operp.client.items.panes.details.ProductDetailsPane; import devopsdistilled.operp.client.items.panes.models.observers.CreateProductPaneModelObserver; import devopsdistilled.operp.server.data.entity.items.Category; import devopsdistilled.operp.server.data.entity.items.Product; import java.awt.Dimension; public class CreateProductPane extends SubTaskPane implements CreateProductPaneModelObserver, CategoryModelObserver { @Inject private CreateProductPaneController controller; @Inject private ProductDetailsPane productDetailsPane; @Inject private CategoryController categoryController; private final JPanel pane; private final JTextField productNameField; private final JPanel categoryPanel; DefaultListModel<Category> listModel; private final JList<Category> categoryList; public CreateProductPane() { pane = new JPanel(); pane.setLayout(new MigLayout("", "[][grow]", "[][][]")); JLabel lblProductName = new JLabel("Product Name"); pane.add(lblProductName, "cell 0 0,alignx trailing"); productNameField = new JTextField(); pane.add(productNameField, "cell 1 0,growx"); productNameField.setColumns(10); JLabel lblCategory = new JLabel("Category"); pane.add(lblCategory, "cell 0 1"); categoryPanel = new JPanel(); categoryPanel.setMinimumSize(new Dimension(10, 120)); categoryPanel .setLayout(new MigLayout("flowy", "[92px,grow]", "[23px]")); JButton btnNewCategory = new JButton("New Category"); btnNewCategory.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { categoryController.create(); } }); categoryPanel.add(btnNewCategory, "south"); JScrollPane scrollPane = new JScrollPane(categoryPanel); scrollPane.setMinimumSize(new Dimension(100, 130)); categoryList = new JList<>(); categoryList.setMinimumSize(new Dimension(0, 100)); categoryPanel.add(categoryList, "cell 0 0,grow"); pane.add(scrollPane, "cell 1 1 ,grow"); JButton btnCancel = new JButton("Cancel"); btnCancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { getDialog().dispose(); } }); pane.add(btnCancel, "flowx,cell 1 2"); JButton btnCreate = new JButton("Create"); btnCreate.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { List<Category> categories = new LinkedList<>(); categories.addAll(categoryList.getSelectedValuesList()); Product product = new Product(); String productName = productNameField.getText().trim(); product.setProductName(productName); product.setCategories(categories); try { controller.validate(product); product = controller.save(product); getDialog().dispose(); productDetailsPane.show(product, getPane()); } catch (EntityValidationException e1) { JOptionPane.showMessageDialog(getPane(), e1.getMessage()); } } }); pane.add(btnCreate, "cell 1 2"); } @Override public JComponent getPane() { return pane; } @Override public void updateCategories(List<Category> categories) { List<Category> selCat = categoryList.getSelectedValuesList(); int[] selectedIndices = new int[selCat.size()]; for (int i = 0; i < selCat.size(); i++) { selectedIndices[i] = -1; } listModel = null; listModel = new DefaultListModel<>(); for (Category category : categories) { listModel.addElement(category); } categoryList.setModel(listModel); for (Category selCategory : selCat) { for (Category category : categories) { if (selCategory.compareTo(category) == 0) { selectedIndices[selCat.indexOf(selCategory)] = listModel .indexOf(category); } } } categoryList.setSelectedIndices(selectedIndices); } }