package devopsdistilled.operp.client.business.sales.panes;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
import devopsdistilled.operp.client.abstracts.EntityOperation;
import devopsdistilled.operp.client.abstracts.EntityPane;
import devopsdistilled.operp.client.abstracts.libs.BeanTableModel;
import devopsdistilled.operp.client.business.sales.controllers.SaleDescController;
import devopsdistilled.operp.client.business.sales.panes.controllers.SaleDescPaneController;
import devopsdistilled.operp.client.business.sales.panes.models.observers.SaleDescPaneModelObserver;
import devopsdistilled.operp.client.exceptions.EntityValidationException;
import devopsdistilled.operp.server.data.entity.business.BusinessDescRow;
import devopsdistilled.operp.server.data.entity.business.SaleDesc;
import devopsdistilled.operp.server.data.entity.business.SaleDescRow;
public class SaleDescPane extends
EntityPane<SaleDesc, SaleDescController, SaleDescPaneController>
implements SaleDescPaneModelObserver {
private final JPanel pane;
private final JTextField discountField;
private final JTextField amountField;
private final JTable table;
BeanTableModel<SaleDescRow> tableModel;
private JPanel rowDescPanel;
private final JButton btnAdd;
public SaleDescPane() {
pane = new JPanel();
pane.setLayout(new MigLayout("flowy", "[][grow]", "[][][][]"));
rowDescPanel = new JPanel();
pane.add(rowDescPanel, "cell 0 0,grow");
rowDescPanel.setLayout(new MigLayout("", "[]", "[]"));
table = new JTable(tableModel);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)
&& e.getClickCount() == 2
&& table.getSelectedRow() != -1) {
SaleDescRow saleDescRow = tableModel.getRow(table
.getSelectedRow());
getController().initEditSaleDescRow(saleDescRow);
// XXX
}
}
});
final JScrollPane scrollPane = new JScrollPane(table,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
pane.add(scrollPane, "cell 1 0 1 2,grow");
btnAdd = new JButton("Add");
btnAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
getController().validate();
getController().addNewSaleDescRow();
amountField.setText(getController().getModel().getEntity()
.getBusiness().getAmount().toString());
} catch (EntityValidationException e1) {
JOptionPane.showMessageDialog(getPane(), e1.getMessage());
}
}
});
pane.add(btnAdd, "cell 0 1,alignx right,aligny top");
JLabel lblDiscount = new JLabel("Discount");
pane.add(lblDiscount, "flowx,cell 1 2,alignx right");
JLabel lblAmount = new JLabel("Amount");
pane.add(lblAmount, "flowx,cell 1 3,alignx right");
discountField = new JTextField();
discountField.setHorizontalAlignment(SwingConstants.TRAILING);
discountField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
try {
Double discountAmount = Double.parseDouble(discountField
.getText().trim());
getController().getModel().getEntity()
.setDiscountAmount(discountAmount);
amountField.setText(getController().getModel().getEntity()
.getBusiness().getAmount().toString());
} catch (NumberFormatException e1) {
JOptionPane.showMessageDialog(getPane(),
"Discount Field must be numeric");
}
}
});
discountField.setText("0");
pane.add(discountField, "cell 1 2,alignx right");
discountField.setColumns(10);
amountField = new JTextField();
amountField.setHorizontalAlignment(SwingConstants.TRAILING);
amountField.setText("0");
amountField.setEditable(false);
pane.add(amountField, "cell 1 3,alignx right");
amountField.setColumns(10);
}
@Override
public void resetComponents() {
btnAdd.setText("Add");
table.setForeground(null);
table.setBackground(null);
}
@Override
public SaleDescController getEntityController() {
return null;
}
@Override
public JComponent getPane() {
return pane;
}
@Override
public void updateEntity(SaleDesc saleDesc, EntityOperation entityOperation) {
tableModel = null;
tableModel = new BeanTableModel<>(SaleDescRow.class,
BusinessDescRow.class, saleDesc.getDescRows());
for (int i = 0; i < table.getColumnCount(); i++) {
tableModel.setColumnEditable(i, false);
}
tableModel.setModelEditable(false);
table.setModel(tableModel);
if (EntityOperation.Edit == entityOperation) {
btnAdd.setText("Update");
table.setForeground(Color.BLACK);
table.setBackground(Color.BLUE);
} else {
resetComponents();
}
}
public void setSaleDescRowpanel(JPanel rowDescPanel) {
MigLayout layout = (MigLayout) pane.getLayout();
Object constraints = layout.getComponentConstraints(this.rowDescPanel);
pane.remove(this.rowDescPanel);
pane.add(rowDescPanel, constraints);
this.rowDescPanel = rowDescPanel;
pane.validate();
}
}