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
    /**
42
     * Log4j logger sent to view.
43
     */
44
    private static final Logger LOGGER = LogManager.getRootLogger();
45
46
    private TreeDatabase tree;
47
48
    /**
49
     * Create a panel to encode a string.
50
     */
51
    public ManagerDatabase() {
52
        super(new BorderLayout());
53
54
        // First node in tree
55
        AbstractNodeModel nodeModelEmpty = new NodeModelEmpty(I18nViewUtil.valueByKey("DATABASE_EMPTY"));
56
        var root = new DefaultMutableTreeNode(nodeModelEmpty);
57 1 1. <init> : removed call to com/jsql/view/swing/util/I18nViewUtil::addComponentForKey → NO_COVERAGE
        I18nViewUtil.addComponentForKey("DATABASE_EMPTY", nodeModelEmpty);
58
59
        this.tree = new TreeDatabase(root);
60 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::setName → NO_COVERAGE
        this.tree.setName("treeDatabases");
61 1 1. <init> : removed call to com/jsql/view/swing/util/MediatorHelper::register → NO_COVERAGE
        MediatorHelper.register(this.tree);
62
63 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::setCellRenderer → NO_COVERAGE
        this.tree.setCellRenderer(new CellRendererNode());
64 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::addMouseListener → NO_COVERAGE
        this.tree.addMouseListener(this.getTreeMouseListener());
65 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::addKeyListener → NO_COVERAGE
        this.tree.addKeyListener(this.getTreeKeyListener());
66 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::setCellEditor → NO_COVERAGE
        this.tree.setCellEditor(new CellEditorNode());
67 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::setEditable → NO_COVERAGE
        this.tree.setEditable(true);  // allows repaint nodes
68 1 1. <init> : removed call to com/jsql/view/swing/tree/TreeDatabase::setShowsRootHandles → NO_COVERAGE
        this.tree.setShowsRootHandles(true);
69 1 1. <init> : removed call to javax/swing/tree/TreeSelectionModel::setSelectionMode → NO_COVERAGE
        this.tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
70 1 1. <init> : removed call to javax/swing/tree/TreeModel::addTreeModelListener → NO_COVERAGE
        this.tree.getModel().addTreeModelListener(new TreeModelProgressListener());  // required to repaint progress bar
71
72 1 1. <init> : removed call to com/jsql/view/swing/manager/ManagerDatabase::add → NO_COVERAGE
        this.add(new JScrollPane(this.tree), BorderLayout.CENTER);
73
    }
74
75
    private KeyAdapter getTreeKeyListener() {
76 1 1. getTreeKeyListener : replaced return value with null for com/jsql/view/swing/manager/ManagerDatabase::getTreeKeyListener → NO_COVERAGE
        return new KeyAdapter() {
77
            @Override
78
            public void keyPressed(KeyEvent e) {
79 1 1. keyPressed : negated conditional → NO_COVERAGE
                if (e.getKeyCode() == KeyEvent.VK_F2) {
80
                    DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) ManagerDatabase.this.tree.getLastSelectedPathComponent();
81 1 1. keyPressed : negated conditional → NO_COVERAGE
                    if (treeNode != null) {
82
                        AbstractNodeModel nodeModel = (AbstractNodeModel) treeNode.getUserObject();
83 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()) {
84 1 1. keyPressed : removed call to com/jsql/view/swing/tree/model/AbstractNodeModel::setIsEdited → NO_COVERAGE
                            nodeModel.setIsEdited(true);
85
                        }
86
                    }
87
                }
88
            }
89
        };
90
    }
91
92
    private MouseAdapter getTreeMouseListener() {
93 1 1. getTreeMouseListener : replaced return value with null for com/jsql/view/swing/manager/ManagerDatabase::getTreeMouseListener → NO_COVERAGE
        return new MouseAdapter() {
94
            @Override
95
            public void mousePressed(MouseEvent event) {
96
                int selRow = ManagerDatabase.this.tree.getRowForLocation(event.getX(), event.getY());
97
                TreePath selPath = ManagerDatabase.this.tree.getPathForLocation(event.getX(), event.getY());
98 2 1. mousePressed : negated conditional → NO_COVERAGE
2. mousePressed : negated conditional → NO_COVERAGE
                if (selRow != -1 && event.getClickCount() == 2) {
99
                    // Fix ArrayIndexOutOfBoundsException on collapsePath()
100
                    try {
101 1 1. mousePressed : negated conditional → NO_COVERAGE
                        if (ManagerDatabase.this.tree.isExpanded(selPath)) {
102 1 1. mousePressed : removed call to com/jsql/view/swing/tree/TreeDatabase::collapsePath → NO_COVERAGE
                            ManagerDatabase.this.tree.collapsePath(selPath);
103
                        } else {
104 1 1. mousePressed : removed call to com/jsql/view/swing/tree/TreeDatabase::expandPath → NO_COVERAGE
                            ManagerDatabase.this.tree.expandPath(selPath);
105
                        }
106
                    } catch (ArrayIndexOutOfBoundsException e) {
107
                        LOGGER.log(LogLevelUtil.CONSOLE_JAVA, e, e);
108
                    }
109
                }
110
            }
111
        };
112
    }
113
    
114
    private class TreeModelProgressListener implements TreeModelListener {
115
        @Override
116
        public void treeNodesChanged(TreeModelEvent treeModelEvent) {
117 1 1. treeNodesChanged : negated conditional → NO_COVERAGE
            if (treeModelEvent == null) {
118
                return;
119
            }
120 1 1. treeNodesChanged : removed call to com/jsql/view/swing/tree/TreeDatabase::firePropertyChange → NO_COVERAGE
            ManagerDatabase.this.tree.firePropertyChange(
121
                JTree.ROOT_VISIBLE_PROPERTY,
122 1 1. treeNodesChanged : negated conditional → NO_COVERAGE
                !ManagerDatabase.this.tree.isRootVisible(),
123
                ManagerDatabase.this.tree.isRootVisible()
124
            );
125 1 1. treeNodesChanged : removed call to com/jsql/view/swing/tree/TreeDatabase::treeDidChange → NO_COVERAGE
            ManagerDatabase.this.tree.treeDidChange();
126
        }
127
        @Override
128
        public void treeStructureChanged(TreeModelEvent treeModelEvent) {
129
            // Do nothing
130
        }
131
        @Override
132
        public void treeNodesRemoved(TreeModelEvent treeModelEvent) {
133
            // Do nothing
134
        }
135
        @Override
136
        public void treeNodesInserted(TreeModelEvent treeModelEvent) {
137
            // Do nothing
138
        }
139
    }
140
}

Mutations

57

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

60

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

61

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

63

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

64

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

65

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

66

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

67

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

68

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

69

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

70

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

72

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

76

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

79

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

81

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

83

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

84

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

93

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

98

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

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

101

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

102

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

104

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

117

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

120

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

122

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

125

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