package nl.fontys.sofa.limo.view.wizard.export.data.panel; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.event.ChangeListener; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import nl.fontys.sofa.limo.domain.BaseEntity; import nl.fontys.sofa.limo.view.wizard.export.data.dialog.DefaultTableModel; import nl.fontys.sofa.limo.view.util.LIMOResourceBundle; import org.openide.WizardDescriptor; import org.openide.WizardValidationException; import org.openide.util.HelpCtx; /** * Abstract panel for selecting BaseEntities. * * @author Matthias Brück */ public abstract class BaseEntitySelectionPanel<T extends BaseEntity> implements ActionListener, MouseListener, TableModelListener, WizardDescriptor.Panel<WizardDescriptor>, WizardDescriptor.ValidatingPanel<WizardDescriptor> { protected List<T> selectedEntities; protected List<T> allEntities; protected final JPanel component; protected JTable tblEntities; protected DefaultTableModel tblmdlEntities; private final JButton btnSelectAll, btnDeselectAll; private final CellConstraints cc; private final FormLayout layout; /** * Initializes a new BaseEntitySelectionPanel. */ public BaseEntitySelectionPanel() { component = new JPanel(); initAllEntities(); selectedEntities = new ArrayList<>(); Object[][] entityModel = new Object[allEntities.size()][2]; for (int i = 0; i < allEntities.size(); i++) { entityModel[i][0] = allEntities.get(i).getName(); entityModel[i][1] = false; } //COMPONENT BASIC tblmdlEntities = new DefaultTableModel(entityModel, new String[]{LIMOResourceBundle.getString("NAME"), LIMOResourceBundle.getString("SELECTED")}, new boolean[]{false, true}, new Class[]{String.class, Boolean.class}); cc = new CellConstraints(); layout = new FormLayout("5px, pref, 5px, pref, pref:grow, 5px", "5px, pref, 5px, pref:grow, 5px"); component.setLayout(layout); //BUTTONS btnSelectAll = new JButton(LIMOResourceBundle.getString("SELECT_ALL")); btnSelectAll.addActionListener(this); component.add(btnSelectAll, cc.xy(2, 2)); btnDeselectAll = new JButton(LIMOResourceBundle.getString("DESELECT_ALL")); btnDeselectAll.addActionListener(this); component.add(btnDeselectAll, cc.xy(4, 2)); //TABLE tblEntities = new JTable(tblmdlEntities); tblmdlEntities.addTableModelListener(this); tblEntities.addMouseListener(this); JScrollPane tblEntitiesPane = new JScrollPane(tblEntities); component.add(tblEntitiesPane, cc.xyw(2, 4, 4)); } /** * Inits all entities. */ protected abstract void initAllEntities(); public List<T> getSelectedEntities() { return selectedEntities; } @Override public HelpCtx getHelp() { return HelpCtx.DEFAULT_HELP; } @Override public void actionPerformed(ActionEvent e) { if (e.getSource().equals(btnSelectAll)) { selectedEntities.clear(); selectedEntities.addAll(allEntities); for (int i = 0; i < tblmdlEntities.getRowCount(); i++) { tblmdlEntities.setValueAt(true, i, 1); } tblmdlEntities.fireTableDataChanged(); } if (e.getSource().equals(btnDeselectAll)) { selectedEntities.clear(); for (int i = 0; i < tblmdlEntities.getRowCount(); i++) { tblmdlEntities.setValueAt(false, i, 1); } tblmdlEntities.fireTableDataChanged(); } } @Override public java.awt.Component getComponent() { if (component == null) { initAllEntities(); } return component; } @Override public boolean isValid() { return true; } @Override public void addChangeListener(ChangeListener l) { } @Override public void removeChangeListener(ChangeListener l) { } @Override public void readSettings(WizardDescriptor settings) { } @Override public void validate() throws WizardValidationException { } @Override public void mouseReleased(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void tableChanged(TableModelEvent e) { if (e.getSource().equals(tblmdlEntities)) { if (tblEntities.getSelectedRow() >= 0 && tblEntities.getSelectedRow() < allEntities.size()) { if ((boolean) (((DefaultTableModel) e.getSource()).getValueAt(tblEntities.getSelectedRow(), 1))) { selectedEntities.add(allEntities.get(tblEntities.getSelectedRow())); } else { selectedEntities.remove(allEntities.get(tblEntities.getSelectedRow())); } } } } }