package devopsdistilled.operp.client.items.panes;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
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 net.miginfocom.swing.MigLayout;
import devopsdistilled.operp.client.abstracts.SubTaskPane;
import devopsdistilled.operp.client.abstracts.libs.BeanTableModel;
import devopsdistilled.operp.client.items.models.observers.CategoryModelObserver;
import devopsdistilled.operp.client.items.panes.details.CategoryDetailsPane;
import devopsdistilled.operp.client.items.panes.models.observers.ListCategoryPaneModelObserver;
import devopsdistilled.operp.server.data.entity.items.Category;

public class ListCategoryPane extends SubTaskPane implements
		ListCategoryPaneModelObserver, CategoryModelObserver {

	@Inject
	private CategoryDetailsPane categoryDetailsPane;

	private final JPanel pane;

	private final JTable table;
	BeanTableModel<Category> tableModel;

	public ListCategoryPane() {
		pane = new JPanel(new MigLayout("debug, fill"));

		tableModel = new BeanTableModel<>(Category.class);
		table = new JTable(tableModel);
		tableModel.setModelEditable(false);
		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) {

					Category category = tableModel.getRow(table
							.getSelectedRow());

					categoryDetailsPane.show(category);
				}
			}
		});

		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 updateCategories(List<Category> categories) {
		if (tableModel.getRowCount() != 0) {
			int lastRow = tableModel.getRowCount() - 1;
			tableModel.removeRowRange(0, lastRow);
		}

		tableModel.insertRows(0, categories);
	}
}

@@ -1211,123 +1211,22 @@
 able
-Model = new BeanTableModel%3C%3E(Category.class);%0A%09%09table = new JTable(tableModel);%0A%09%09tableModel.setModelEditable(false
+ = new JTable(
 );%0A%09
@@ -1965,20 +1965,16 @@
 es) %7B%0A%09%09
-if (
 tableMod
@@ -1979,79 +1979,82 @@
 odel
-.getRowCount() != 0) %7B%0A%09%09%09int lastRow = tableModel.getRowCount() - 1
+ = null;%0A%09%09tableModel = new BeanTableModel%3C%3E(Category.class, categories)
 ;%0A
-%09
 %09%09ta
@@ -2066,81 +2066,64 @@
 del.
-removeRowRange(0, lastRow);%0A%09%09%7D%0A%0A%09%09tableModel.insertRows(0, categories
+setModelEditable(false);%0A%09%09table.setModel(tableModel
 );%0A
+%0A
 %09%7D%0A%7D

Implement ListCategories