View Javadoc
1   package com.jsql.view.swing.tree.action;
2   
3   import com.jsql.view.swing.tree.model.AbstractNodeModel;
4   import com.jsql.view.swing.util.MediatorHelper;
5   
6   import javax.swing.*;
7   import javax.swing.tree.DefaultMutableTreeNode;
8   import javax.swing.tree.DefaultTreeModel;
9   import java.awt.event.ActionEvent;
10  import java.awt.event.ActionListener;
11  
12  /**
13   * Check and uncheck column as checkbox.
14   */
15  public class ActionCheckSingle implements ActionListener {
16  
17      private final AbstractNodeModel nodeModel;
18      private final DefaultMutableTreeNode currentTableNode;
19  
20      public ActionCheckSingle(AbstractNodeModel nodeModel, DefaultMutableTreeNode currentTableNode) {
21          this.nodeModel = nodeModel;
22          this.currentTableNode = currentTableNode;
23      }
24  
25      @Override
26      public void actionPerformed(ActionEvent actionEvent) {
27          JCheckBox columnCheckBox = (JCheckBox) actionEvent.getSource();
28          this.nodeModel.setSelected(columnCheckBox.isSelected());
29  
30          DefaultTreeModel treeModel = (DefaultTreeModel) MediatorHelper.treeDatabase().getModel();
31          DefaultMutableTreeNode tableNode = (DefaultMutableTreeNode) this.currentTableNode.getParent();
32  
33          int tableChildCount = treeModel.getChildCount(tableNode);
34          var isOneChildSelected = false;
35          
36          for (var i = 0 ; i < tableChildCount ; i++) {
37              DefaultMutableTreeNode currentChild = (DefaultMutableTreeNode) treeModel.getChild(tableNode, i);
38              if (currentChild.getUserObject() instanceof AbstractNodeModel) {
39                  AbstractNodeModel columnTreeNodeModel = (AbstractNodeModel) currentChild.getUserObject();
40                  if (columnTreeNodeModel.isSelected()) {
41                      isOneChildSelected = true;
42                      break;
43                  }
44              }
45          }
46  
47          AbstractNodeModel nodeUserObject = (AbstractNodeModel) tableNode.getUserObject();
48          nodeUserObject.setIsAnyCheckboxSelected(isOneChildSelected);
49      }
50  }