package devopsdistilled.operp.client.stock.panes.details;
import java.awt.Dimension;
import java.util.Enumeration;
import java.util.LinkedList;
import java.util.List;
import javax.inject.Inject;
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.SwingUtilities;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
import net.miginfocom.swing.MigLayout;
import devopsdistilled.operp.client.abstracts.AbstractEntityDetailsPane;
import devopsdistilled.operp.client.abstracts.libs.BeanTableModel;
import devopsdistilled.operp.client.stock.controllers.WarehouseController;
import devopsdistilled.operp.client.stock.models.StockModel;
import devopsdistilled.operp.client.stock.models.observers.StockModelObserver;
import devopsdistilled.operp.server.data.entity.stock.Stock;
import devopsdistilled.operp.server.data.entity.stock.Warehouse;
public class WarehouseDetailsPane extends
AbstractEntityDetailsPane<Warehouse, WarehouseController> implements
StockModelObserver {
@Inject
private WarehouseController warehouseController;
@Inject
private StockModel stockModel;
private Warehouse warehouse;
private final JPanel pane;
private final JTextField warehouseIdField;
private final JTextField warehouseNameField;
private final JTable table;
BeanTableModel<Stock> tableModel;
private final JLabel lblItemsInThis;
public WarehouseDetailsPane() {
pane = new JPanel();
pane.setLayout(new MigLayout("", "[][grow,center]", "[][][][grow]"));
JLabel lblWarehouseId = new JLabel("Warehouse Id");
pane.add(lblWarehouseId, "cell 0 0,alignx trailing");
warehouseIdField = new JTextField();
warehouseIdField.setColumns(10);
warehouseIdField.setEditable(false);
pane.add(warehouseIdField, "cell 1 0,growx");
JLabel lblWarehouseName = new JLabel("Warehouse Name");
pane.add(lblWarehouseName, "cell 0 1,alignx trailing");
warehouseNameField = new JTextField();
pane.add(warehouseNameField, "cell 1 1,growx");
warehouseNameField.setEditable(false);
warehouseNameField.setColumns(10);
lblItemsInThis = new JLabel("Items In this Warehouse");
pane.add(lblItemsInThis, "cell 1 2");
table = new JTable(tableModel);
final JScrollPane scrollPane = new JScrollPane(table,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setPreferredSize(new Dimension(456, 200));
pane.add(scrollPane, "cell 1 3,grow");
}
@Override
public JPanel getPane() {
return pane;
}
@Override
public void show(Warehouse warehouse, JComponent owner) {
this.warehouse = warehouse;
stockModel.registerObserver(this);
if (warehouse != null) {
warehouseIdField.setText(warehouse.getWarehouseId().toString());
warehouseNameField.setText(warehouse.getWarehouseName());
showDetailsPane(getPane(), owner);
} else {
dialog.dispose();
JOptionPane.showMessageDialog(getPane(), "Null Warehouse");
}
}
@Override
public String getTitle() {
return "Warehouse Details";
}
@Override
public WarehouseController getEntityController() {
return warehouseController;
}
@Override
protected Warehouse getEntity() {
return warehouse;
}
@Override
public void updateStock(List<Stock> stocks) {
List<Stock> warehouseStock = new LinkedList<>();
for (Stock stock : stocks) {
if (stock.getWarehouse().compareTo(getEntity()) == 0) {
warehouseStock.add(stock);
}
}
tableModel = null;
tableModel = new BeanTableModel<>(Stock.class, warehouseStock);
for (int i = 0; i < table.getColumnCount(); i++) {
tableModel.setColumnEditable(i, false);
}
tableModel.setModelEditable(false);
table.setModel(tableModel);
JTableHeader tableHeader = table.getTableHeader();
Enumeration<TableColumn> columns = tableHeader.getColumnModel()
.getColumns();
while (columns.hasMoreElements()) {
final TableColumn column = columns.nextElement();
String columnName = (String) column.getHeaderValue();
if (columnName.equalsIgnoreCase("Stock Id")
|| columnName.equalsIgnoreCase("Warehouse")) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
table.removeColumn(column);
}
});
}
}
}
}