package devopsdistilled.operp.client.stock.panes;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Enumeration;
import java.util.List;
import javax.inject.Inject;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
import net.miginfocom.swing.MigLayout;
import devopsdistilled.operp.client.abstracts.SubTaskPane;
import devopsdistilled.operp.client.abstracts.libs.BeanTableModel;
import devopsdistilled.operp.client.stock.models.observers.StockKeeperModelObserver;
import devopsdistilled.operp.client.stock.panes.details.StockKeepingDetailsPane;
import devopsdistilled.operp.client.stock.panes.details.TransferStockDetailsPane;
import devopsdistilled.operp.client.stock.panes.models.observers.ListStockActivitiesPaneModelObserver;
import devopsdistilled.operp.server.data.entity.stock.StockKeeper;
public class ListStockActivitiesPane extends SubTaskPane implements
ListStockActivitiesPaneModelObserver, StockKeeperModelObserver {
@Inject
private StockKeepingDetailsPane stockKeepingDetailsPane;
@Inject
private TransferStockDetailsPane transferStockDetailsPane;
private final JPanel pane;
private final JTable table;
BeanTableModel<StockKeeper> tableModel;
public ListStockActivitiesPane() {
pane = new JPanel();
pane.setLayout(new MigLayout("fill"));
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) {
StockKeeper stockKeeper = tableModel.getRow(table
.getSelectedRow());
if (stockKeeper.getTransferStockKeeper() == null)
stockKeepingDetailsPane.show(stockKeeper, getPane());
else {
transferStockDetailsPane.show(stockKeeper, getPane());
}
}
}
});
final JScrollPane scrollPane = new JScrollPane(table,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
pane.add(scrollPane, "grow");
}
@Override
public JComponent getPane() {
return pane;
}
@Override
public void updateStockActivities(List<StockKeeper> stockActivities) {
tableModel = null;
tableModel = new BeanTableModel<>(StockKeeper.class, stockActivities);
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 Keeper Id")
|| columnName.equalsIgnoreCase("Stock")
|| columnName.equalsIgnoreCase("Transfer Stock Keeper")) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
table.removeColumn(column);
}
});
}
}
}
}