ManagerDatabase.java

1
/*******************************************************************************
2
 * Copyhacked (H) 2012-2025.
3
 * This program and the accompanying materials
4
 * are made available under no term at all, use it like
5
 * you want, but share and discuss it
6
 * every time possible with every body.
7
 * 
8
 * Contributors:
9
 *      ron190 at ymail dot com - initial implementation
10
 ******************************************************************************/
11
package com.jsql.view.swing.manager;
12
13
import com.jsql.util.LogLevelUtil;
14
import com.jsql.view.swing.tree.CellEditorNode;
15
import com.jsql.view.swing.tree.CellRendererNode;
16
import com.jsql.view.swing.tree.TreeDatabase;
17
import com.jsql.view.swing.tree.model.AbstractNodeModel;
18
import com.jsql.view.swing.tree.model.NodeModelEmpty;
19
import com.jsql.view.swing.util.I18nViewUtil;
20
import com.jsql.view.swing.util.MediatorHelper;
21
import org.apache.logging.log4j.LogManager;
22
import org.apache.logging.log4j.Logger;
23
24
import javax.swing.*;
25
import javax.swing.event.TreeModelEvent;
26
import javax.swing.event.TreeModelListener;
27
import javax.swing.tree.DefaultMutableTreeNode;
28
import javax.swing.tree.TreePath;
29
import javax.swing.tree.TreeSelectionModel;
30
import java.awt.*;
31
import java.awt.event.KeyAdapter;
32
import java.awt.event.KeyEvent;
33
import java.awt.event.MouseAdapter;
34
import java.awt.event.MouseEvent;
35
36
/**
37
 * Manager to code/decode string in various methods.
38
 */
39
public class ManagerDatabase extends JPanel {
40
    
41
    private static final Logger LOGGER = LogManager.getRootLogger();
42
43
    private TreeDatabase tree;
44
45
    /**
46
     * Create a panel to encode a string.
47
     */
48
    public ManagerDatabase() {
49
        super(new BorderLayout());
50
51
        // First node in tree
52
        AbstractNodeModel nodeModelEmpty = new NodeModelEmpty(I18nViewUtil.valueByKey("DATABASE_EMPTY"));
53
        var root = new DefaultMutableTreeNode(nodeModelEmpty);
54 1 1. <init> : removed call to com/jsql/view/swing/util/I18nViewUtil::addComponentForKey → NO_COVERAGE
        I18nViewUtil.addComponentForKey("DATABASE_EMPTY", nodeModelEmpty);
55
56
        this.tree = new TreeDatabase(root);
57 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::setName → NO_COVERAGE
        this.tree.setName("treeDatabases");
58 1 1. <init> : removed call to com/jsql/view/swing/util/MediatorHelper::register → NO_COVERAGE
        MediatorHelper.register(this.tree);
59
60 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::setCellRenderer → NO_COVERAGE
        this.tree.setCellRenderer(new CellRendererNode());
61 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::addMouseListener → NO_COVERAGE
        this.tree.addMouseListener(this.getTreeMouseListener());
62 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::addKeyListener → NO_COVERAGE
        this.tree.addKeyListener(this.getTreeKeyListener());
63 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::setCellEditor → NO_COVERAGE
        this.tree.setCellEditor(new CellEditorNode());
64 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::setEditable → NO_COVERAGE
        this.tree.setEditable(true);  // allows repaint nodes
65 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::setShowsRootHandles → NO_COVERAGE
        this.tree.setShowsRootHandles(true);
66 1 1. <init> : removed call to javax/swing/tree/TreeSelectionModel::setSelectionMode → NO_COVERAGE
        this.tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
67 1 1. <init> : removed call to javax/swing/tree/TreeModel::addTreeModelListener → NO_COVERAGE
        this.tree.getModel().addTreeModelListener(new TreeModelProgressListener());  // required to repaint progress bar
68
69 1 1. <init> : removed call to com/jsql/view/swing/manager/ManagerDatabase::add → NO_COVERAGE
        this.add(new JScrollPane(this.tree), BorderLayout.CENTER);
70
    }
71
72
    private KeyAdapter getTreeKeyListener() {
73 1 1. getTreeKeyListener : replaced return value with null for com/jsql/view/swing/manager/ManagerDatabase::getTreeKeyListener → NO_COVERAGE
        return new KeyAdapter() {
74
            @Override
75
            public void keyPressed(KeyEvent e) {
76 1 1. keyPressed : negated conditional → NO_COVERAGE
                if (e.getKeyCode() == KeyEvent.VK_F2) {
77
                    DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) ManagerDatabase.this.tree.getLastSelectedPathComponent();
78 1 1. keyPressed : negated conditional → NO_COVERAGE
                    if (treeNode != null) {
79
                        AbstractNodeModel nodeModel = (AbstractNodeModel) treeNode.getUserObject();
80 3 1. keyPressed : negated conditional → NO_COVERAGE
2. keyPressed : negated conditional → NO_COVERAGE
3. keyPressed : negated conditional → NO_COVERAGE
                        if (nodeModel != null && nodeModel.getPanel() != null && !nodeModel.isRunning()) {
81 1 1. keyPressed : removed call to com/jsql/view/swing/tree/model/AbstractNodeModel::setIsEdited → NO_COVERAGE
                            nodeModel.setIsEdited(true);
82
                        }
83
                    }
84
                }
85
            }
86
        };
87
    }
88
89
    private MouseAdapter getTreeMouseListener() {
90 1 1. getTreeMouseListener : replaced return value with null for com/jsql/view/swing/manager/ManagerDatabase::getTreeMouseListener → NO_COVERAGE
        return new MouseAdapter() {
91
            @Override
92
            public void mousePressed(MouseEvent event) {
93
                int selRow = ManagerDatabase.this.tree.getRowForLocation(event.getX(), event.getY());
94
                TreePath selPath = ManagerDatabase.this.tree.getPathForLocation(event.getX(), event.getY());
95 2 1. mousePressed : negated conditional → NO_COVERAGE
2. mousePressed : negated conditional → NO_COVERAGE
                if (selRow != -1 && event.getClickCount() == 2) {
96
                    // Fix ArrayIndexOutOfBoundsException on collapsePath()
97
                    try {
98 1 1. mousePressed : negated conditional → NO_COVERAGE
                        if (ManagerDatabase.this.tree.isExpanded(selPath)) {
99 1 1. mousePressed : removed call to com/jsql/view/swing/tree/TreeDatabase::collapsePath → NO_COVERAGE
                            ManagerDatabase.this.tree.collapsePath(selPath);
100
                        } else {
101 1 1. mousePressed : removed call to com/jsql/view/swing/tree/TreeDatabase::expandPath → NO_COVERAGE
                            ManagerDatabase.this.tree.expandPath(selPath);
102
                        }
103
                    } catch (ArrayIndexOutOfBoundsException e) {
104
                        LOGGER.log(LogLevelUtil.CONSOLE_JAVA, e, e);
105
                    }
106
                }
107
            }
108
        };
109
    }
110
    
111
    private class TreeModelProgressListener implements TreeModelListener {
112
        @Override
113
        public void treeNodesChanged(TreeModelEvent treeModelEvent) {
114 1 1. treeNodesChanged : negated conditional → NO_COVERAGE
            if (treeModelEvent == null) {
115
                return;
116
            }
117 1 1. treeNodesChanged : removed call to com/jsql/view/swing/tree/TreeDatabase::firePropertyChange → NO_COVERAGE
            ManagerDatabase.this.tree.firePropertyChange(
118
                JTree.ROOT_VISIBLE_PROPERTY,
119 1 1. treeNodesChanged : negated conditional → NO_COVERAGE
                !ManagerDatabase.this.tree.isRootVisible(),
120
                ManagerDatabase.this.tree.isRootVisible()
121
            );
122 1 1. treeNodesChanged : removed call to com/jsql/view/swing/tree/TreeDatabase::treeDidChange → NO_COVERAGE
            ManagerDatabase.this.tree.treeDidChange();
123
        }
124
        @Override
125
        public void treeStructureChanged(TreeModelEvent treeModelEvent) {
126
            // Do nothing
127
        }
128
        @Override
129
        public void treeNodesRemoved(TreeModelEvent treeModelEvent) {
130
            // Do nothing
131
        }
132
        @Override
133
        public void treeNodesInserted(TreeModelEvent treeModelEvent) {
134
            // Do nothing
135
        }
136
    }
137
}

Mutations

54

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/util/I18nViewUtil::addComponentForKey → NO_COVERAGE

57

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/tree/TreeDatabase::setName → NO_COVERAGE

58

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/util/MediatorHelper::register → NO_COVERAGE

60

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/tree/TreeDatabase::setCellRenderer → NO_COVERAGE

61

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/tree/TreeDatabase::addMouseListener → NO_COVERAGE

62

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/tree/TreeDatabase::addKeyListener → NO_COVERAGE

63

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/tree/TreeDatabase::setCellEditor → NO_COVERAGE

64

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/tree/TreeDatabase::setEditable → NO_COVERAGE

65

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/tree/TreeDatabase::setShowsRootHandles → NO_COVERAGE

66

1.1
Location : <init>
Killed by : none
removed call to javax/swing/tree/TreeSelectionModel::setSelectionMode → NO_COVERAGE

67

1.1
Location : <init>
Killed by : none
removed call to javax/swing/tree/TreeModel::addTreeModelListener → NO_COVERAGE

69

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/manager/ManagerDatabase::add → NO_COVERAGE

73

1.1
Location : getTreeKeyListener
Killed by : none
replaced return value with null for com/jsql/view/swing/manager/ManagerDatabase::getTreeKeyListener → NO_COVERAGE

76

1.1
Location : keyPressed
Killed by : none
negated conditional → NO_COVERAGE

78

1.1
Location : keyPressed
Killed by : none
negated conditional → NO_COVERAGE

80

1.1
Location : keyPressed
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : keyPressed
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : keyPressed
Killed by : none
negated conditional → NO_COVERAGE

81

1.1
Location : keyPressed
Killed by : none
removed call to com/jsql/view/swing/tree/model/AbstractNodeModel::setIsEdited → NO_COVERAGE

90

1.1
Location : getTreeMouseListener
Killed by : none
replaced return value with null for com/jsql/view/swing/manager/ManagerDatabase::getTreeMouseListener → NO_COVERAGE

95

1.1
Location : mousePressed
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : mousePressed
Killed by : none
negated conditional → NO_COVERAGE

98

1.1
Location : mousePressed
Killed by : none
negated conditional → NO_COVERAGE

99

1.1
Location : mousePressed
Killed by : none
removed call to com/jsql/view/swing/tree/TreeDatabase::collapsePath → NO_COVERAGE

101

1.1
Location : mousePressed
Killed by : none
removed call to com/jsql/view/swing/tree/TreeDatabase::expandPath → NO_COVERAGE

114

1.1
Location : treeNodesChanged
Killed by : none
negated conditional → NO_COVERAGE

117

1.1
Location : treeNodesChanged
Killed by : none
removed call to com/jsql/view/swing/tree/TreeDatabase::firePropertyChange → NO_COVERAGE

119

1.1
Location : treeNodesChanged
Killed by : none
negated conditional → NO_COVERAGE

122

1.1
Location : treeNodesChanged
Killed by : none
removed call to com/jsql/view/swing/tree/TreeDatabase::treeDidChange → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.19.1