PanelAddressBar.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.panel;
12
13
import com.formdev.flatlaf.FlatClientProperties;
14
import com.formdev.flatlaf.icons.FlatRadioButtonMenuItemIcon;
15
import com.jsql.model.injection.method.AbstractMethodInjection;
16
import com.jsql.util.I18nUtil;
17
import com.jsql.util.LogLevelUtil;
18
import com.jsql.util.ParameterUtil;
19
import com.jsql.util.StringUtil;
20
import com.jsql.view.swing.panel.address.ActionEnterAddressBar;
21
import com.jsql.view.swing.panel.address.PanelTrailingAddress;
22
import com.jsql.view.swing.panel.address.ModelAddressLine;
23
import com.jsql.view.swing.panel.util.ButtonExpandText;
24
import com.jsql.view.swing.text.*;
25
import com.jsql.view.swing.util.I18nViewUtil;
26
import com.jsql.view.swing.util.MediatorHelper;
27
import com.jsql.view.swing.util.RadioItemNonClosing;
28
import com.jsql.view.swing.util.UiUtil;
29
import org.apache.commons.lang3.StringUtils;
30
import org.apache.logging.log4j.LogManager;
31
import org.apache.logging.log4j.Logger;
32
33
import javax.swing.*;
34
import javax.swing.text.DefaultEditorKit;
35
import java.awt.*;
36
import java.awt.datatransfer.Clipboard;
37
import java.awt.datatransfer.DataFlavor;
38
import java.awt.datatransfer.UnsupportedFlavorException;
39
import java.awt.event.ActionEvent;
40
import java.awt.event.MouseAdapter;
41
import java.awt.event.MouseEvent;
42
import java.io.IOException;
43
import java.io.Serializable;
44
import java.util.AbstractMap;
45
import java.util.Arrays;
46
import java.util.concurrent.atomic.AtomicReference;
47
import java.util.function.Supplier;
48
import java.util.regex.Pattern;
49
import java.util.stream.Stream;
50
51
/**
52
 * Create panel at the top of the window.
53
 * Contains textfields in a panel.
54
 */
55
public class PanelAddressBar extends JPanel {
56
57
    private static final Logger LOGGER = LogManager.getRootLogger();
58
59
    private final AtomicReference<JTextField> atomicTextFieldAddress = new AtomicReference<>();  // atomic to build dynamically
60
    private final AtomicReference<JTextField> atomicTextFieldRequest = new AtomicReference<>();
61
    private final AtomicReference<JTextField> atomicTextFieldHeader = new AtomicReference<>();
62
63
    private final AtomicReference<JRadioButton> atomicRadioRequest = new AtomicReference<>();  // atomic to build dynamically
64
    private final AtomicReference<JRadioButton> atomicRadioMethod = new AtomicReference<>();
65
    private final AtomicReference<JRadioButton> atomicRadioHeader = new AtomicReference<>();
66
67
    private static final String[] METHODS = {"DELETE", StringUtil.GET, "HEAD", "OPTIONS", StringUtil.POST, "PUT", "TRACE"};
68
    private JPopupMenu popupMethods;
69
    private JRadioButton radioCustomMethod;
70
    private JTextField inputCustomMethod;
71
    private AdvancedButtonAdapter advancedButtonAdapter;
72
73
    public static final String NAME_ADVANCED_BUTTON = "advancedButton";
74
    private static final String KEY_BUTTON_ADVANCED = "BUTTON_ADVANCED";
75
    private static final String KEY_ADDRESS_BAR_PLACEHOLDER = "ADDRESS_BAR_PLACEHOLDER";
76
    private static final String HEADER_SEPARATOR = "\\r\\n";
77
78
    // Current injection method
79
    private AbstractMethodInjection methodInjection = MediatorHelper.model().getMediatorMethod().getQuery();
80
    private String typeRequest = StringUtil.GET;
81
82
    private final PanelTrailingAddress panelTrailingAddress;
83
84
    private boolean isAdvanceActivated = false;
85
    
86
    public PanelAddressBar() {
87
        var buttonGroup = new ButtonGroup();
88
89
        Stream.of(
90
            new ModelAddressLine(
91
                "URL",
92
                MediatorHelper.model().getMediatorMethod().getQuery(),
93
                "QUERYSTRING",
94
                this.atomicRadioRequest,
95
                I18nUtil.valueByKey(PanelAddressBar.KEY_ADDRESS_BAR_PLACEHOLDER),
96
                this.atomicTextFieldAddress
97
            ),
98
            new ModelAddressLine(
99
                StringUtil.GET,
100
                MediatorHelper.model().getMediatorMethod().getRequest(),
101
                "REQUEST",
102
                this.atomicRadioMethod,
103
                "e.g. key=value&injectMe=",
104
                this.atomicTextFieldRequest
105
            ),
106
            new ModelAddressLine(
107
                "Header",
108
                MediatorHelper.model().getMediatorMethod().getHeader(),
109
                "HEADER",
110
                this.atomicRadioHeader,
111
                String.format(
112
                    "e.g. key: value\\r\\nCookie: cKey1=cValue1; cKey2=cValue2\\r\\n%s: %s %s\\r\\ninjectMe:",
113
                    "Authorization",
114
                    "Basic",
115
                    "dXNlcjpwYXNz"
116
                ),
117
                this.atomicTextFieldHeader
118
            )
119
        )
120 1 1. <init> : removed call to java/util/stream/Stream::forEach → NO_COVERAGE
        .forEach(modelLine -> {
121
            var i18nTooltip = String.format("FIELD_%s_TOOLTIP", modelLine.i18n());
122
            var tooltipTextfield = new AtomicReference<>(new JToolTipI18n(I18nUtil.valueByKey(i18nTooltip)));
123 1 1. lambda$new$1 : removed call to java/util/concurrent/atomic/AtomicReference::set → NO_COVERAGE
            modelLine.textfield().set(new JPopupTextField(new JTextFieldPlaceholder(
124
                modelLine.placeholder(),
125 1 1. lambda$new$1 : negated conditional → NO_COVERAGE
                modelLine.radio() == this.atomicRadioRequest ? 18 : 0
126
            ) {
127
                @Override
128
                public JToolTip createToolTip() {
129 1 1. createToolTip : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$1::createToolTip → NO_COVERAGE
                    return tooltipTextfield.get();
130
                }
131
            }).getProxy());
132 1 1. lambda$new$1 : removed call to com/jsql/view/swing/util/I18nViewUtil::addComponentForKey → NO_COVERAGE
            I18nViewUtil.addComponentForKey(i18nTooltip, tooltipTextfield.get());
133 1 1. lambda$new$1 : removed call to javax/swing/JTextField::addActionListener → NO_COVERAGE
            modelLine.textfield().get().addActionListener(new ActionEnterAddressBar(this));
134 1 1. lambda$new$1 : removed call to javax/swing/JTextField::setVisible → NO_COVERAGE
            modelLine.textfield().get().setVisible(false);  // query will be set back to visible
135 1 1. lambda$new$1 : removed call to javax/swing/JTextField::setToolTipText → NO_COVERAGE
            modelLine.textfield().get().setToolTipText(I18nUtil.valueByKey(i18nTooltip));
136
137
            var i18nRadio = String.format("METHOD_%s_TOOLTIP", modelLine.i18n());
138
            var tooltipRadio = new AtomicReference<>(new JToolTipI18n(I18nUtil.valueByKey(i18nRadio)));
139 1 1. lambda$new$1 : removed call to java/util/concurrent/atomic/AtomicReference::set → NO_COVERAGE
            modelLine.radio().set(
140
                new JRadioButton(modelLine.request()) {
141
                    @Override
142
                    public JToolTip createToolTip() {
143 1 1. createToolTip : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$2::createToolTip → NO_COVERAGE
                        return tooltipRadio.get();
144
                    }
145
                }
146
            );
147 1 1. lambda$new$1 : removed call to com/jsql/view/swing/util/I18nViewUtil::addComponentForKey → NO_COVERAGE
            I18nViewUtil.addComponentForKey(i18nRadio, tooltipRadio.get());
148 1 1. lambda$new$1 : removed call to javax/swing/JRadioButton::setToolTipText → NO_COVERAGE
            modelLine.radio().get().setToolTipText(I18nUtil.valueByKey(i18nRadio));
149 2 1. lambda$new$1 : negated conditional → NO_COVERAGE
2. lambda$new$1 : removed call to javax/swing/JRadioButton::setSelected → NO_COVERAGE
            modelLine.radio().get().setSelected(modelLine.radio() == this.atomicRadioRequest);
150 1 1. lambda$new$1 : removed call to javax/swing/JRadioButton::setHorizontalTextPosition → NO_COVERAGE
            modelLine.radio().get().setHorizontalTextPosition(SwingConstants.LEFT);
151 1 1. lambda$new$1 : removed call to javax/swing/JRadioButton::setVisible → NO_COVERAGE
            modelLine.radio().get().setVisible(false);
152 1 1. lambda$new$1 : removed call to javax/swing/JRadioButton::setBorder → NO_COVERAGE
            modelLine.radio().get().setBorder(BorderFactory.createEmptyBorder(
153 1 1. lambda$new$1 : negated conditional → NO_COVERAGE
                modelLine.radio() == this.atomicRadioRequest ? 0 : 6, 3, 0, 3
154
            ));
155 2 1. lambda$new$0 : removed call to com/jsql/view/swing/panel/PanelAddressBar::setMethodInjection → NO_COVERAGE
2. lambda$new$1 : removed call to javax/swing/JRadioButton::addActionListener → NO_COVERAGE
            modelLine.radio().get().addActionListener(e -> MediatorHelper.panelAddressBar().setMethodInjection(modelLine.method()));
156 1 1. lambda$new$1 : removed call to javax/swing/ButtonGroup::add → NO_COVERAGE
            buttonGroup.add(modelLine.radio().get());
157
        });
158
159
        Action originalPaste = this.atomicTextFieldAddress.get().getActionMap().get(DefaultEditorKit.pasteAction);
160 1 1. <init> : removed call to javax/swing/ActionMap::put → NO_COVERAGE
        this.atomicTextFieldAddress.get().getActionMap().put(DefaultEditorKit.pasteAction, new PasteAction(originalPaste));
161
162 1 1. <init> : removed call to javax/swing/JTextField::setFont → NO_COVERAGE
        this.atomicTextFieldAddress.get().setFont(UiUtil.FONT_NON_MONO_BIG);
163 1 1. <init> : removed call to javax/swing/JTextField::setName → NO_COVERAGE
        this.atomicTextFieldAddress.get().setName("textFieldAddress");
164 1 1. <init> : removed call to javax/swing/JTextField::setPreferredSize → NO_COVERAGE
        this.atomicTextFieldAddress.get().setPreferredSize(new Dimension(50, 32));  // required to set correct height
165 1 1. <init> : removed call to javax/swing/JTextField::setVisible → NO_COVERAGE
        this.atomicTextFieldAddress.get().setVisible(true);
166 1 1. <init> : removed call to com/jsql/view/swing/util/I18nViewUtil::addComponentForKey → NO_COVERAGE
        I18nViewUtil.addComponentForKey(PanelAddressBar.KEY_ADDRESS_BAR_PLACEHOLDER, this.atomicTextFieldAddress.get());  // only i18n placeholder
167
168
        this.panelTrailingAddress = new PanelTrailingAddress(this);
169 1 1. <init> : removed call to javax/swing/JTextField::putClientProperty → NO_COVERAGE
        this.atomicTextFieldAddress.get().putClientProperty(FlatClientProperties.TEXT_FIELD_TRAILING_COMPONENT, this.panelTrailingAddress);
170 1 1. <init> : removed call to javax/swing/JTextField::putClientProperty → NO_COVERAGE
        this.atomicTextFieldAddress.get().putClientProperty(FlatClientProperties.TEXT_FIELD_LEADING_ICON, UiUtil.GLOBE.getIcon());
171 1 1. <init> : removed call to javax/swing/JTextField::putClientProperty → NO_COVERAGE
        this.atomicTextFieldRequest.get().putClientProperty(
172
            FlatClientProperties.TEXT_FIELD_TRAILING_COMPONENT,
173
            new ButtonExpandText(this.atomicTextFieldRequest.get())
174
        );
175 1 1. <init> : removed call to javax/swing/JTextField::putClientProperty → NO_COVERAGE
        this.atomicTextFieldHeader.get().putClientProperty(
176
            FlatClientProperties.TEXT_FIELD_TRAILING_COMPONENT,
177
            new ButtonExpandText(this.atomicTextFieldHeader.get())
178
        );
179
180 1 1. <init> : removed call to com/jsql/view/swing/panel/PanelAddressBar::initLayout → NO_COVERAGE
        this.initLayout();
181
    }
182
183
    private void initLayout() {
184
        final JLabel advancedButton = this.initAdvancedButton();
185
        
186 1 1. initLayout : removed call to com/jsql/view/swing/panel/PanelAddressBar::setLayout → NO_COVERAGE
        this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
187
        
188
        // First panel at the top, contains text components
189
        var panelTextFields = new JPanel();
190
        var groupLayout = new GroupLayout(panelTextFields);
191 1 1. initLayout : removed call to javax/swing/JPanel::setLayout → NO_COVERAGE
        panelTextFields.setLayout(groupLayout);
192 1 1. initLayout : removed call to javax/swing/JPanel::setBorder → NO_COVERAGE
        panelTextFields.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 0));
193
        this.add(panelTextFields);
194
195
        this.popupMethods = new JPopupMenu();
196
        final var buttonGroupMethods = new ButtonGroup();
197
198
        for (String method: PanelAddressBar.METHODS) {
199
            final JMenuItem newMenuItem = new RadioItemNonClosing(method, StringUtil.GET.equals(method));
200 1 1. initLayout : removed call to javax/swing/JMenuItem::addActionListener → NO_COVERAGE
            newMenuItem.addActionListener(actionEvent -> {
201
                this.typeRequest = newMenuItem.getText();
202 1 1. lambda$initLayout$2 : removed call to javax/swing/JRadioButton::setText → NO_COVERAGE
                this.atomicRadioMethod.get().setText(this.typeRequest);
203
                this.atomicRadioMethod.get().requestFocusInWindow();  // required to set proper focus
204
            });
205
            this.popupMethods.add(newMenuItem);
206 1 1. initLayout : removed call to javax/swing/ButtonGroup::add → NO_COVERAGE
            buttonGroupMethods.add(newMenuItem);
207
        }
208
209
        var tooltipMethods = new AtomicReference<>(new JToolTipI18n(I18nUtil.valueByKey("METHOD_CUSTOM_TOOLTIP")));
210
        var panelCustomMethod = new JPanel(new BorderLayout()) {
211
            @Override
212
            public JToolTip createToolTip() {
213 1 1. createToolTip : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$3::createToolTip → NO_COVERAGE
                return tooltipMethods.get();
214
            }
215
        };
216 1 1. initLayout : removed call to com/jsql/view/swing/util/I18nViewUtil::addComponentForKey → NO_COVERAGE
        I18nViewUtil.addComponentForKey("METHOD_CUSTOM_TOOLTIP", tooltipMethods.get());
217 1 1. lambda$initLayout$3 : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::lambda$initLayout$3 → NO_COVERAGE
        Supplier<Color> colorBackground = () -> UIManager.getColor("MenuItem.background");  // adapt to current theme
218 1 1. lambda$initLayout$4 : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::lambda$initLayout$4 → NO_COVERAGE
        Supplier<Color> colorSelectionBackground = () -> UIManager.getColor("MenuItem.selectionBackground");  // adapt to current theme
219 1 1. initLayout : removed call to com/jsql/view/swing/panel/PanelAddressBar$3::setBackground → NO_COVERAGE
        panelCustomMethod.setBackground(colorBackground.get());  // required for correct color
220
221
        this.radioCustomMethod = new JRadioButton() {
222
            @Override
223
            public JToolTip createToolTip() {
224 1 1. createToolTip : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$4::createToolTip → NO_COVERAGE
                return tooltipMethods.get();
225
            }
226
        };
227 1 1. initLayout : removed call to javax/swing/JRadioButton::setBorder → NO_COVERAGE
        this.radioCustomMethod.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 0));
228 1 1. initLayout : removed call to javax/swing/JRadioButton::setIcon → NO_COVERAGE
        this.radioCustomMethod.setIcon(new FlatRadioButtonMenuItemIcon());
229 1 1. initLayout : removed call to javax/swing/JRadioButton::setBackground → NO_COVERAGE
        this.radioCustomMethod.setBackground(colorBackground.get());  // required for correct color
230 1 1. initLayout : removed call to javax/swing/ButtonGroup::add → NO_COVERAGE
        buttonGroupMethods.add(this.radioCustomMethod);
231
232
        this.inputCustomMethod = new JPopupTextField("CUSTOM"){
233
            @Override
234
            public JToolTip createToolTip() {
235 1 1. createToolTip : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$5::createToolTip → NO_COVERAGE
                return tooltipMethods.get();
236
            }
237
        }.getProxy();
238 2 1. lambda$initLayout$5 : removed call to com/jsql/view/swing/panel/PanelAddressBar::validate → NO_COVERAGE
2. initLayout : removed call to javax/swing/JRadioButton::addActionListener → NO_COVERAGE
        this.radioCustomMethod.addActionListener(actionEvent -> this.validate(this.inputCustomMethod));
239
240
        var tooltipCustomMethod = "<html>Set user defined HTTP method.<br/>" +
241
            "A valid method is limited to chars:<br>" +
242
            "!#$%&'*+-.^_`|~0123456789<br>" +
243
            "abcdefghijklmnopqrstuvwxyz<br>" +
244
            "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
245
        "</html>";
246
        MouseAdapter mouseAdapterSetBackground = new MouseAdapter() {
247
            @Override
248
            public void mouseEntered(MouseEvent e) {
249 1 1. mouseEntered : removed call to java/awt/event/MouseAdapter::mouseEntered → NO_COVERAGE
                super.mouseEntered(e);
250 1 1. mouseEntered : removed call to com/jsql/view/swing/panel/PanelAddressBar$3::setBackground → NO_COVERAGE
                panelCustomMethod.setBackground(colorSelectionBackground.get());
251 1 1. mouseEntered : removed call to javax/swing/JRadioButton::setBackground → NO_COVERAGE
                PanelAddressBar.this.radioCustomMethod.setBackground(colorSelectionBackground.get());
252
            }
253
            @Override
254
            public void mouseExited(MouseEvent e) {
255 1 1. mouseExited : removed call to java/awt/event/MouseAdapter::mouseExited → NO_COVERAGE
                super.mouseExited(e);
256 1 1. mouseExited : removed call to com/jsql/view/swing/panel/PanelAddressBar$3::setBackground → NO_COVERAGE
                panelCustomMethod.setBackground(colorBackground.get());
257 1 1. mouseExited : removed call to javax/swing/JRadioButton::setBackground → NO_COVERAGE
                PanelAddressBar.this.radioCustomMethod.setBackground(colorBackground.get());
258
            }
259
        };
260 1 1. initLayout : removed call to java/util/List::forEach → NO_COVERAGE
        Arrays.asList(this.radioCustomMethod, this.inputCustomMethod, panelCustomMethod).forEach(component -> {
261 1 1. lambda$initLayout$6 : removed call to javax/swing/JComponent::addMouseListener → NO_COVERAGE
            component.addMouseListener(mouseAdapterSetBackground);
262 1 1. lambda$initLayout$6 : removed call to javax/swing/JComponent::setToolTipText → NO_COVERAGE
            component.setToolTipText(tooltipCustomMethod);
263
        });
264
265 1 1. initLayout : removed call to com/jsql/view/swing/panel/PanelAddressBar$3::add → NO_COVERAGE
        panelCustomMethod.add(this.radioCustomMethod, BorderLayout.LINE_START);
266 1 1. initLayout : removed call to com/jsql/view/swing/panel/PanelAddressBar$3::add → NO_COVERAGE
        panelCustomMethod.add(this.inputCustomMethod, BorderLayout.CENTER);
267 1 1. initLayout : removed call to javax/swing/JPopupMenu::insert → NO_COVERAGE
        this.popupMethods.insert(panelCustomMethod, this.popupMethods.getComponentCount());
268
269 1 1. initLayout : removed call to javax/swing/JRadioButton::addMouseListener → NO_COVERAGE
        this.atomicRadioMethod.get().addMouseListener(new MouseAdapter() {
270
            @Override
271
            public void mousePressed(MouseEvent e) {
272 2 1. mousePressed : removed call to java/util/stream/Stream::forEach → NO_COVERAGE
2. lambda$mousePressed$0 : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$7::lambda$mousePressed$0 → NO_COVERAGE
                Arrays.stream(PanelAddressBar.this.popupMethods.getComponents()).map(a -> (JComponent) a).forEach(JComponent::updateUI);  // required: incorrect when dark/light mode switch
273 1 1. mousePressed : removed call to javax/swing/JRadioButton::setIcon → NO_COVERAGE
                PanelAddressBar.this.radioCustomMethod.setIcon(new FlatRadioButtonMenuItemIcon());
274 1 1. mousePressed : removed call to javax/swing/JRadioButton::updateUI → NO_COVERAGE
                PanelAddressBar.this.radioCustomMethod.updateUI();  // required: incorrect when dark/light mode switch
275 1 1. mousePressed : removed call to javax/swing/JTextField::updateUI → NO_COVERAGE
                PanelAddressBar.this.inputCustomMethod.updateUI();  // required: incorrect when dark/light mode switch
276 1 1. mousePressed : removed call to javax/swing/JPopupMenu::updateUI → NO_COVERAGE
                PanelAddressBar.this.popupMethods.updateUI();  // required: incorrect when dark/light mode switch
277
278 1 1. mousePressed : negated conditional → NO_COVERAGE
                if (ComponentOrientation.RIGHT_TO_LEFT.equals(ComponentOrientation.getOrientation(I18nUtil.getCurrentLocale()))) {
279 1 1. mousePressed : removed call to javax/swing/JRadioButton::setBorder → NO_COVERAGE
                    PanelAddressBar.this.radioCustomMethod.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 6));
280
                } else {
281 1 1. mousePressed : removed call to javax/swing/JRadioButton::setBorder → NO_COVERAGE
                    PanelAddressBar.this.radioCustomMethod.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 0));
282
                }
283
284 1 1. mousePressed : removed call to javax/swing/JPopupMenu::show → NO_COVERAGE
                PanelAddressBar.this.popupMethods.show(
285
                    e.getComponent(),
286 1 1. mousePressed : negated conditional → NO_COVERAGE
                    ComponentOrientation.RIGHT_TO_LEFT.equals(ComponentOrientation.getOrientation(I18nUtil.getCurrentLocale()))
287 2 1. mousePressed : Replaced integer subtraction with addition → NO_COVERAGE
2. mousePressed : Replaced integer subtraction with addition → NO_COVERAGE
                        ? e.getComponent().getX() - e.getComponent().getWidth() - PanelAddressBar.this.popupMethods.getWidth()
288
                        : e.getComponent().getX(),
289 1 1. mousePressed : Replaced integer addition with subtraction → NO_COVERAGE
                    e.getComponent().getY() + e.getComponent().getHeight()
290
                );
291 1 1. mousePressed : removed call to javax/swing/JPopupMenu::setLocation → NO_COVERAGE
                PanelAddressBar.this.popupMethods.setLocation(  // required for proper location
292 1 1. mousePressed : negated conditional → NO_COVERAGE
                    ComponentOrientation.RIGHT_TO_LEFT.equals(ComponentOrientation.getOrientation(I18nUtil.getCurrentLocale()))
293 2 1. mousePressed : Replaced integer addition with subtraction → NO_COVERAGE
2. mousePressed : Replaced integer subtraction with addition → NO_COVERAGE
                        ? e.getComponent().getLocationOnScreen().x + e.getComponent().getWidth() - PanelAddressBar.this.popupMethods.getWidth()
294
                        : e.getComponent().getLocationOnScreen().x,
295 1 1. mousePressed : Replaced integer addition with subtraction → NO_COVERAGE
                    e.getComponent().getLocationOnScreen().y + e.getComponent().getHeight()
296
                );
297
298
                // Orientation set after popup placement, Fix #96032: NullPointerException on show() when arabic
299 1 1. mousePressed : removed call to javax/swing/JPopupMenu::applyComponentOrientation → NO_COVERAGE
                PanelAddressBar.this.popupMethods.applyComponentOrientation(ComponentOrientation.getOrientation(I18nUtil.getCurrentLocale()));
300
            }
301
        });
302
303 1 1. initLayout : removed call to javax/swing/GroupLayout::setHorizontalGroup → NO_COVERAGE
        groupLayout.setHorizontalGroup(
304
            groupLayout
305
            .createSequentialGroup()
306
            .addGroup(
307
                groupLayout
308
                .createParallelGroup(GroupLayout.Alignment.TRAILING, false)
309
                .addComponent(this.atomicRadioRequest.get())
310
                .addComponent(this.atomicRadioMethod.get())
311
                .addComponent(this.atomicRadioHeader.get())
312
            )
313
            .addGroup(
314
                groupLayout
315
                .createParallelGroup()
316
                .addComponent(this.atomicTextFieldAddress.get())
317
                .addComponent(this.atomicTextFieldRequest.get())
318
                .addComponent(this.atomicTextFieldHeader.get())
319
            )
320
            .addGroup(
321
                groupLayout
322
                .createParallelGroup(GroupLayout.Alignment.LEADING, false)
323
                .addComponent(advancedButton)
324
            )
325
        );
326
327 1 1. initLayout : removed call to javax/swing/GroupLayout::setVerticalGroup → NO_COVERAGE
        groupLayout.setVerticalGroup(
328
            groupLayout
329
            .createSequentialGroup()
330
            .addGroup(
331
                groupLayout
332
                .createParallelGroup(GroupLayout.Alignment.CENTER, false)
333
                .addComponent(this.atomicRadioRequest.get())
334
                .addComponent(this.atomicTextFieldAddress.get())
335
                .addComponent(advancedButton)
336
            )
337
            .addGroup(
338
                groupLayout
339
                .createParallelGroup(GroupLayout.Alignment.BASELINE)
340
                .addComponent(this.atomicRadioMethod.get())
341
                .addComponent(this.atomicTextFieldRequest.get())
342
            )
343
            .addGroup(
344
                groupLayout
345
                .createParallelGroup(GroupLayout.Alignment.BASELINE)
346
                .addComponent(this.atomicRadioHeader.get())
347
                .addComponent(this.atomicTextFieldHeader.get())
348
            )
349
        );
350
    }
351
352
    private void validate(JTextField inputCustomMethod) {
353 1 1. validate : negated conditional → NO_COVERAGE
        if (StringUtils.isEmpty(inputCustomMethod.getText())) {
354
            LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Missing custom request method, forcing GET");
355
            Arrays.stream(this.popupMethods.getSubElements())
356
            .map(JMenuItem.class::cast)
357 2 1. lambda$validate$7 : replaced boolean return with false for com/jsql/view/swing/panel/PanelAddressBar::lambda$validate$7 → NO_COVERAGE
2. lambda$validate$7 : replaced boolean return with true for com/jsql/view/swing/panel/PanelAddressBar::lambda$validate$7 → NO_COVERAGE
            .filter(jMenuItem -> StringUtil.GET.equals(jMenuItem.getText()))
358
            .findFirst()
359 2 1. validate : removed call to java/util/Optional::ifPresent → NO_COVERAGE
2. lambda$validate$8 : removed call to javax/swing/JMenuItem::setSelected → NO_COVERAGE
            .ifPresent(jMenuItem -> jMenuItem.setSelected(true));
360 1 1. validate : negated conditional → NO_COVERAGE
        } else if (ParameterUtil.isInvalidName(inputCustomMethod.getText())) {
361
            LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Illegal request method: {}", inputCustomMethod.getText());
362
        } else {
363
            this.typeRequest = inputCustomMethod.getText();
364 1 1. validate : removed call to javax/swing/JRadioButton::setText → NO_COVERAGE
            this.atomicRadioMethod.get().setText(this.typeRequest);
365
        }
366
    }
367
368
    private JLabel initAdvancedButton() {
369
        var tooltip = new AtomicReference<>(new JToolTipI18n(I18nUtil.valueByKey(PanelAddressBar.KEY_BUTTON_ADVANCED)));
370
        var advancedButton = new JLabel(UiUtil.ARROW_DOWN.getIcon()) {
371
            @Override
372
            public JToolTip createToolTip() {
373 1 1. createToolTip : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$8::createToolTip → NO_COVERAGE
                return tooltip.get();
374
            }
375
        };
376 1 1. initAdvancedButton : removed call to com/jsql/view/swing/panel/PanelAddressBar$8::setName → NO_COVERAGE
        advancedButton.setName(PanelAddressBar.NAME_ADVANCED_BUTTON);
377 1 1. initAdvancedButton : removed call to com/jsql/view/swing/panel/PanelAddressBar$8::setToolTipText → NO_COVERAGE
        advancedButton.setToolTipText(I18nUtil.valueByKey(PanelAddressBar.KEY_BUTTON_ADVANCED));
378 1 1. initAdvancedButton : removed call to com/jsql/view/swing/util/I18nViewUtil::addComponentForKey → NO_COVERAGE
        I18nViewUtil.addComponentForKey(PanelAddressBar.KEY_BUTTON_ADVANCED, tooltip.get());
379
        this.advancedButtonAdapter = new AdvancedButtonAdapter(advancedButton);
380 1 1. initAdvancedButton : removed call to com/jsql/view/swing/panel/PanelAddressBar$8::addMouseListener → NO_COVERAGE
        advancedButton.addMouseListener(this.advancedButtonAdapter);
381 1 1. initAdvancedButton : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::initAdvancedButton → NO_COVERAGE
        return advancedButton;
382
    }
383
384
    private class AdvancedButtonAdapter extends MouseAdapter implements Serializable {
385
386
        private final JLabel advancedButton;
387
388
        public AdvancedButtonAdapter(JLabel advancedButton) {
389
            this.advancedButton = advancedButton;
390
        }
391
392
        public void mouseClicked(boolean isVisible) {
393 1 1. mouseClicked : removed call to javax/swing/JTextField::setVisible → NO_COVERAGE
            PanelAddressBar.this.atomicTextFieldRequest.get().setVisible(isVisible);
394 1 1. mouseClicked : removed call to javax/swing/JTextField::setVisible → NO_COVERAGE
            PanelAddressBar.this.atomicTextFieldHeader.get().setVisible(isVisible);
395 1 1. mouseClicked : removed call to javax/swing/JRadioButton::setVisible → NO_COVERAGE
            PanelAddressBar.this.atomicRadioRequest.get().setVisible(isVisible);
396 1 1. mouseClicked : removed call to javax/swing/JRadioButton::setVisible → NO_COVERAGE
            PanelAddressBar.this.atomicRadioMethod.get().setVisible(isVisible);
397 1 1. mouseClicked : removed call to javax/swing/JRadioButton::setVisible → NO_COVERAGE
            PanelAddressBar.this.atomicRadioHeader.get().setVisible(isVisible);
398
            PanelAddressBar.this.isAdvanceActivated = isVisible;
399 1 1. mouseClicked : removed call to com/jsql/view/swing/menubar/AppMenubar::setVisible → NO_COVERAGE
            MediatorHelper.menubar().setVisible(isVisible);
400 2 1. mouseClicked : negated conditional → NO_COVERAGE
2. mouseClicked : removed call to javax/swing/JLabel::setIcon → NO_COVERAGE
            this.advancedButton.setIcon(isVisible ? UiUtil.ARROW_UP.getIcon() : UiUtil.ARROW_DOWN.getIcon());
401
        }
402
403
        @Override
404
        public void mouseClicked(MouseEvent e) {
405 1 1. mouseClicked : negated conditional → NO_COVERAGE
            boolean isVisible = this.advancedButton.getIcon() == UiUtil.ARROW_DOWN.getIcon();
406 1 1. mouseClicked : removed call to com/jsql/view/swing/panel/PanelAddressBar$AdvancedButtonAdapter::mouseClicked → NO_COVERAGE
            this.mouseClicked(isVisible);
407
        }
408
    }
409
410
411
    // Getter and setter
412
413
    public void setMethodInjection(AbstractMethodInjection methodInjection) {
414
        this.methodInjection = methodInjection;
415
    }
416
417
    public boolean isAdvanceActivated() {
418 2 1. isAdvanceActivated : replaced boolean return with true for com/jsql/view/swing/panel/PanelAddressBar::isAdvanceActivated → NO_COVERAGE
2. isAdvanceActivated : negated conditional → NO_COVERAGE
        return !this.isAdvanceActivated;
419
    }
420
421
    public JTextField getTextFieldAddress() {
422 1 1. getTextFieldAddress : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getTextFieldAddress → NO_COVERAGE
        return this.atomicTextFieldAddress.get();
423
    }
424
425
    public JTextField getTextFieldRequest() {
426 1 1. getTextFieldRequest : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getTextFieldRequest → NO_COVERAGE
        return this.atomicTextFieldRequest.get();
427
    }
428
429
    public JTextField getTextFieldHeader() {
430 1 1. getTextFieldHeader : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getTextFieldHeader → NO_COVERAGE
        return this.atomicTextFieldHeader.get();
431
    }
432
433
    public AbstractMethodInjection getMethodInjection() {
434 1 1. getMethodInjection : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getMethodInjection → NO_COVERAGE
        return this.methodInjection;
435
    }
436
437
    public PanelTrailingAddress getPanelTrailingAddress() {
438 1 1. getPanelTrailingAddress : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getPanelTrailingAddress → NO_COVERAGE
        return this.panelTrailingAddress;
439
    }
440
441
    public String getTypeRequest() {
442 1 1. getTypeRequest : replaced return value with "" for com/jsql/view/swing/panel/PanelAddressBar::getTypeRequest → NO_COVERAGE
        return this.typeRequest;
443
    }
444
445
    public JRadioButton getAtomicRadioRequest() {
446 1 1. getAtomicRadioRequest : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getAtomicRadioRequest → NO_COVERAGE
        return this.atomicRadioRequest.get();
447
    }
448
449
    public JRadioButton getAtomicRadioMethod() {
450 1 1. getAtomicRadioMethod : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getAtomicRadioMethod → NO_COVERAGE
        return this.atomicRadioMethod.get();
451
    }
452
453
    public JRadioButton getAtomicRadioHeader() {
454 1 1. getAtomicRadioHeader : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getAtomicRadioHeader → NO_COVERAGE
        return this.atomicRadioHeader.get();
455
    }
456
457
    private class PasteAction extends AbstractAction {
458
459
        private final transient Action originalPaste;
460
461
        public PasteAction(Action originalPaste) {
462
            this.originalPaste = originalPaste;
463
        }
464
465
        @Override
466
        public void actionPerformed(ActionEvent actionEvent) {
467
            try {
468
                Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
469
                String text = (String) cb.getData(DataFlavor.stringFlavor);
470
                text = text.replace("\n", "\r\n").replace("\r\r\n", "\r\n");  // restore non-standardized
471
472
                String regexStartLine = "([^"+ PanelAddressBar.HEADER_SEPARATOR +"]+)";
473
                String regexHeaders = "((?:[^"+ PanelAddressBar.HEADER_SEPARATOR +"]+"+ PanelAddressBar.HEADER_SEPARATOR +")*)";
474
                String regexBody = "(.*)";
475
                var matcher = Pattern.compile(
476
                    "(?s)" + regexStartLine + PanelAddressBar.HEADER_SEPARATOR + regexHeaders + PanelAddressBar.HEADER_SEPARATOR + regexBody
477
                ).matcher(text);
478 1 1. actionPerformed : negated conditional → NO_COVERAGE
                if (!matcher.find()) {  // no match, default paste
479 1 1. actionPerformed : removed call to javax/swing/Action::actionPerformed → NO_COVERAGE
                    this.originalPaste.actionPerformed(actionEvent);
480
                    return;
481
                }
482
483
                LOGGER.log(LogLevelUtil.CONSOLE_INFORM, "HTTP request detected");
484
                String startLine = matcher.group(1);
485
                var matcherStartLine = Pattern.compile("([^ ]+) +([^ ]+) +([^ ]+)").matcher(startLine);
486 1 1. actionPerformed : negated conditional → NO_COVERAGE
                if (!matcherStartLine.find()) {
487
                    LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Incorrect HTTP request start line: missing method, request-target or HTTP-version");
488
                    return;
489
                }
490
491
                var method = matcherStartLine.group(1);
492
                var requestTarget = matcherStartLine.group(2);  // absolute-form, authority-form and asterisk-form not managed
493
                // httpVersion unused
494
                var headers = matcher.group(2).trim();
495
                var body = matcher.group(3).trim();
496
497
                // Configure URL
498 1 1. actionPerformed : negated conditional → NO_COVERAGE
                if (requestTarget.startsWith("/")) {  // origin-form
499
                    var listHeaders = Pattern.compile(PanelAddressBar.HEADER_SEPARATOR)
500
                        .splitAsStream(headers)
501 1 1. lambda$actionPerformed$0 : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$PasteAction::lambda$actionPerformed$0 → NO_COVERAGE
                        .map(keyValue -> Arrays.copyOf(keyValue.split(":"), 2))
502 1 1. lambda$actionPerformed$1 : replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$PasteAction::lambda$actionPerformed$1 → NO_COVERAGE
                        .map(keyValue -> new AbstractMap.SimpleEntry<>(
503
                            keyValue[0],
504 1 1. lambda$actionPerformed$1 : negated conditional → NO_COVERAGE
                            keyValue[1] == null ? StringUtils.EMPTY : keyValue[1]
505
                        )).toList();
506
                    var host = listHeaders.stream()
507 2 1. lambda$actionPerformed$2 : replaced boolean return with true for com/jsql/view/swing/panel/PanelAddressBar$PasteAction::lambda$actionPerformed$2 → NO_COVERAGE
2. lambda$actionPerformed$2 : replaced boolean return with false for com/jsql/view/swing/panel/PanelAddressBar$PasteAction::lambda$actionPerformed$2 → NO_COVERAGE
                        .filter(e -> "Host".equalsIgnoreCase(e.getKey())).findFirst()
508
                        .orElse(new AbstractMap.SimpleEntry<>("Host", StringUtils.EMPTY));
509 1 1. actionPerformed : negated conditional → NO_COVERAGE
                    if (host.getValue().isBlank()) {
510
                        LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Incorrect HTTP request origin form: missing Host");
511
                        return;
512
                    }
513
                    requestTarget = "https://" + host.getValue().trim() + requestTarget;
514
                }
515 1 1. actionPerformed : removed call to javax/swing/JTextField::setText → NO_COVERAGE
                PanelAddressBar.this.atomicTextFieldAddress.get().setText(requestTarget);
516
517
                // Configure method
518 1 1. actionPerformed : removed call to javax/swing/JRadioButton::setText → NO_COVERAGE
                PanelAddressBar.this.atomicRadioMethod.get().setText(method);
519 1 1. actionPerformed : negated conditional → NO_COVERAGE
                if (!Arrays.asList(PanelAddressBar.METHODS).contains(method)) {
520 1 1. actionPerformed : removed call to javax/swing/JTextField::setText → NO_COVERAGE
                    PanelAddressBar.this.inputCustomMethod.setText(method);
521 1 1. actionPerformed : removed call to javax/swing/JRadioButton::setSelected → NO_COVERAGE
                    PanelAddressBar.this.radioCustomMethod.setSelected(true);
522
                } else {
523
                    Arrays.stream(PanelAddressBar.this.popupMethods.getSubElements())
524
                    .map(JMenuItem.class::cast)
525 2 1. lambda$actionPerformed$3 : replaced boolean return with true for com/jsql/view/swing/panel/PanelAddressBar$PasteAction::lambda$actionPerformed$3 → NO_COVERAGE
2. lambda$actionPerformed$3 : replaced boolean return with false for com/jsql/view/swing/panel/PanelAddressBar$PasteAction::lambda$actionPerformed$3 → NO_COVERAGE
                    .filter(jMenuItem -> method.equals(jMenuItem.getText()))
526
                    .findFirst()
527 2 1. lambda$actionPerformed$4 : removed call to javax/swing/JMenuItem::setSelected → NO_COVERAGE
2. actionPerformed : removed call to java/util/Optional::ifPresent → NO_COVERAGE
                    .ifPresent(jMenuItem -> jMenuItem.setSelected(true));
528
                }
529
530 1 1. actionPerformed : removed call to javax/swing/JTextField::setText → NO_COVERAGE
                PanelAddressBar.this.atomicTextFieldRequest.get().setText(
531
                    body
532
                    .replace("\n", "\\n")
533
                    .replace("\r", "\\r")
534
                );
535 1 1. actionPerformed : removed call to javax/swing/JTextField::setText → NO_COVERAGE
                PanelAddressBar.this.atomicTextFieldHeader.get().setText(
536
                    headers
537
                    .replace("\n", "\\n")
538
                    .replace("\r", "\\r")
539
                );
540
541 1 1. actionPerformed : removed call to com/jsql/view/swing/panel/PanelAddressBar$AdvancedButtonAdapter::mouseClicked → NO_COVERAGE
                PanelAddressBar.this.advancedButtonAdapter.mouseClicked(true);
542
            } catch (IOException | UnsupportedFlavorException e) {
543
                LOGGER.log(LogLevelUtil.CONSOLE_JAVA, e, e);
544
            }
545
        }
546
    }
547
}

Mutations

120

1.1
Location : <init>
Killed by : none
removed call to java/util/stream/Stream::forEach → NO_COVERAGE

123

1.1
Location : lambda$new$1
Killed by : none
removed call to java/util/concurrent/atomic/AtomicReference::set → NO_COVERAGE

125

1.1
Location : lambda$new$1
Killed by : none
negated conditional → NO_COVERAGE

129

1.1
Location : createToolTip
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$1::createToolTip → NO_COVERAGE

132

1.1
Location : lambda$new$1
Killed by : none
removed call to com/jsql/view/swing/util/I18nViewUtil::addComponentForKey → NO_COVERAGE

133

1.1
Location : lambda$new$1
Killed by : none
removed call to javax/swing/JTextField::addActionListener → NO_COVERAGE

134

1.1
Location : lambda$new$1
Killed by : none
removed call to javax/swing/JTextField::setVisible → NO_COVERAGE

135

1.1
Location : lambda$new$1
Killed by : none
removed call to javax/swing/JTextField::setToolTipText → NO_COVERAGE

139

1.1
Location : lambda$new$1
Killed by : none
removed call to java/util/concurrent/atomic/AtomicReference::set → NO_COVERAGE

143

1.1
Location : createToolTip
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$2::createToolTip → NO_COVERAGE

147

1.1
Location : lambda$new$1
Killed by : none
removed call to com/jsql/view/swing/util/I18nViewUtil::addComponentForKey → NO_COVERAGE

148

1.1
Location : lambda$new$1
Killed by : none
removed call to javax/swing/JRadioButton::setToolTipText → NO_COVERAGE

149

1.1
Location : lambda$new$1
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : lambda$new$1
Killed by : none
removed call to javax/swing/JRadioButton::setSelected → NO_COVERAGE

150

1.1
Location : lambda$new$1
Killed by : none
removed call to javax/swing/JRadioButton::setHorizontalTextPosition → NO_COVERAGE

151

1.1
Location : lambda$new$1
Killed by : none
removed call to javax/swing/JRadioButton::setVisible → NO_COVERAGE

152

1.1
Location : lambda$new$1
Killed by : none
removed call to javax/swing/JRadioButton::setBorder → NO_COVERAGE

153

1.1
Location : lambda$new$1
Killed by : none
negated conditional → NO_COVERAGE

155

1.1
Location : lambda$new$0
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar::setMethodInjection → NO_COVERAGE

2.2
Location : lambda$new$1
Killed by : none
removed call to javax/swing/JRadioButton::addActionListener → NO_COVERAGE

156

1.1
Location : lambda$new$1
Killed by : none
removed call to javax/swing/ButtonGroup::add → NO_COVERAGE

160

1.1
Location : <init>
Killed by : none
removed call to javax/swing/ActionMap::put → NO_COVERAGE

162

1.1
Location : <init>
Killed by : none
removed call to javax/swing/JTextField::setFont → NO_COVERAGE

163

1.1
Location : <init>
Killed by : none
removed call to javax/swing/JTextField::setName → NO_COVERAGE

164

1.1
Location : <init>
Killed by : none
removed call to javax/swing/JTextField::setPreferredSize → NO_COVERAGE

165

1.1
Location : <init>
Killed by : none
removed call to javax/swing/JTextField::setVisible → NO_COVERAGE

166

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

169

1.1
Location : <init>
Killed by : none
removed call to javax/swing/JTextField::putClientProperty → NO_COVERAGE

170

1.1
Location : <init>
Killed by : none
removed call to javax/swing/JTextField::putClientProperty → NO_COVERAGE

171

1.1
Location : <init>
Killed by : none
removed call to javax/swing/JTextField::putClientProperty → NO_COVERAGE

175

1.1
Location : <init>
Killed by : none
removed call to javax/swing/JTextField::putClientProperty → NO_COVERAGE

180

1.1
Location : <init>
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar::initLayout → NO_COVERAGE

186

1.1
Location : initLayout
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar::setLayout → NO_COVERAGE

191

1.1
Location : initLayout
Killed by : none
removed call to javax/swing/JPanel::setLayout → NO_COVERAGE

192

1.1
Location : initLayout
Killed by : none
removed call to javax/swing/JPanel::setBorder → NO_COVERAGE

200

1.1
Location : initLayout
Killed by : none
removed call to javax/swing/JMenuItem::addActionListener → NO_COVERAGE

202

1.1
Location : lambda$initLayout$2
Killed by : none
removed call to javax/swing/JRadioButton::setText → NO_COVERAGE

206

1.1
Location : initLayout
Killed by : none
removed call to javax/swing/ButtonGroup::add → NO_COVERAGE

213

1.1
Location : createToolTip
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$3::createToolTip → NO_COVERAGE

216

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

217

1.1
Location : lambda$initLayout$3
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::lambda$initLayout$3 → NO_COVERAGE

218

1.1
Location : lambda$initLayout$4
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::lambda$initLayout$4 → NO_COVERAGE

219

1.1
Location : initLayout
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar$3::setBackground → NO_COVERAGE

224

1.1
Location : createToolTip
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$4::createToolTip → NO_COVERAGE

227

1.1
Location : initLayout
Killed by : none
removed call to javax/swing/JRadioButton::setBorder → NO_COVERAGE

228

1.1
Location : initLayout
Killed by : none
removed call to javax/swing/JRadioButton::setIcon → NO_COVERAGE

229

1.1
Location : initLayout
Killed by : none
removed call to javax/swing/JRadioButton::setBackground → NO_COVERAGE

230

1.1
Location : initLayout
Killed by : none
removed call to javax/swing/ButtonGroup::add → NO_COVERAGE

235

1.1
Location : createToolTip
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$5::createToolTip → NO_COVERAGE

238

1.1
Location : lambda$initLayout$5
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar::validate → NO_COVERAGE

2.2
Location : initLayout
Killed by : none
removed call to javax/swing/JRadioButton::addActionListener → NO_COVERAGE

249

1.1
Location : mouseEntered
Killed by : none
removed call to java/awt/event/MouseAdapter::mouseEntered → NO_COVERAGE

250

1.1
Location : mouseEntered
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar$3::setBackground → NO_COVERAGE

251

1.1
Location : mouseEntered
Killed by : none
removed call to javax/swing/JRadioButton::setBackground → NO_COVERAGE

255

1.1
Location : mouseExited
Killed by : none
removed call to java/awt/event/MouseAdapter::mouseExited → NO_COVERAGE

256

1.1
Location : mouseExited
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar$3::setBackground → NO_COVERAGE

257

1.1
Location : mouseExited
Killed by : none
removed call to javax/swing/JRadioButton::setBackground → NO_COVERAGE

260

1.1
Location : initLayout
Killed by : none
removed call to java/util/List::forEach → NO_COVERAGE

261

1.1
Location : lambda$initLayout$6
Killed by : none
removed call to javax/swing/JComponent::addMouseListener → NO_COVERAGE

262

1.1
Location : lambda$initLayout$6
Killed by : none
removed call to javax/swing/JComponent::setToolTipText → NO_COVERAGE

265

1.1
Location : initLayout
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar$3::add → NO_COVERAGE

266

1.1
Location : initLayout
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar$3::add → NO_COVERAGE

267

1.1
Location : initLayout
Killed by : none
removed call to javax/swing/JPopupMenu::insert → NO_COVERAGE

269

1.1
Location : initLayout
Killed by : none
removed call to javax/swing/JRadioButton::addMouseListener → NO_COVERAGE

272

1.1
Location : mousePressed
Killed by : none
removed call to java/util/stream/Stream::forEach → NO_COVERAGE

2.2
Location : lambda$mousePressed$0
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$7::lambda$mousePressed$0 → NO_COVERAGE

273

1.1
Location : mousePressed
Killed by : none
removed call to javax/swing/JRadioButton::setIcon → NO_COVERAGE

274

1.1
Location : mousePressed
Killed by : none
removed call to javax/swing/JRadioButton::updateUI → NO_COVERAGE

275

1.1
Location : mousePressed
Killed by : none
removed call to javax/swing/JTextField::updateUI → NO_COVERAGE

276

1.1
Location : mousePressed
Killed by : none
removed call to javax/swing/JPopupMenu::updateUI → NO_COVERAGE

278

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

279

1.1
Location : mousePressed
Killed by : none
removed call to javax/swing/JRadioButton::setBorder → NO_COVERAGE

281

1.1
Location : mousePressed
Killed by : none
removed call to javax/swing/JRadioButton::setBorder → NO_COVERAGE

284

1.1
Location : mousePressed
Killed by : none
removed call to javax/swing/JPopupMenu::show → NO_COVERAGE

286

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

287

1.1
Location : mousePressed
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

2.2
Location : mousePressed
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

289

1.1
Location : mousePressed
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

291

1.1
Location : mousePressed
Killed by : none
removed call to javax/swing/JPopupMenu::setLocation → NO_COVERAGE

292

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

293

1.1
Location : mousePressed
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

2.2
Location : mousePressed
Killed by : none
Replaced integer subtraction with addition → NO_COVERAGE

295

1.1
Location : mousePressed
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

299

1.1
Location : mousePressed
Killed by : none
removed call to javax/swing/JPopupMenu::applyComponentOrientation → NO_COVERAGE

303

1.1
Location : initLayout
Killed by : none
removed call to javax/swing/GroupLayout::setHorizontalGroup → NO_COVERAGE

327

1.1
Location : initLayout
Killed by : none
removed call to javax/swing/GroupLayout::setVerticalGroup → NO_COVERAGE

353

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

357

1.1
Location : lambda$validate$7
Killed by : none
replaced boolean return with false for com/jsql/view/swing/panel/PanelAddressBar::lambda$validate$7 → NO_COVERAGE

2.2
Location : lambda$validate$7
Killed by : none
replaced boolean return with true for com/jsql/view/swing/panel/PanelAddressBar::lambda$validate$7 → NO_COVERAGE

359

1.1
Location : validate
Killed by : none
removed call to java/util/Optional::ifPresent → NO_COVERAGE

2.2
Location : lambda$validate$8
Killed by : none
removed call to javax/swing/JMenuItem::setSelected → NO_COVERAGE

360

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

364

1.1
Location : validate
Killed by : none
removed call to javax/swing/JRadioButton::setText → NO_COVERAGE

373

1.1
Location : createToolTip
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$8::createToolTip → NO_COVERAGE

376

1.1
Location : initAdvancedButton
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar$8::setName → NO_COVERAGE

377

1.1
Location : initAdvancedButton
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar$8::setToolTipText → NO_COVERAGE

378

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

380

1.1
Location : initAdvancedButton
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar$8::addMouseListener → NO_COVERAGE

381

1.1
Location : initAdvancedButton
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::initAdvancedButton → NO_COVERAGE

393

1.1
Location : mouseClicked
Killed by : none
removed call to javax/swing/JTextField::setVisible → NO_COVERAGE

394

1.1
Location : mouseClicked
Killed by : none
removed call to javax/swing/JTextField::setVisible → NO_COVERAGE

395

1.1
Location : mouseClicked
Killed by : none
removed call to javax/swing/JRadioButton::setVisible → NO_COVERAGE

396

1.1
Location : mouseClicked
Killed by : none
removed call to javax/swing/JRadioButton::setVisible → NO_COVERAGE

397

1.1
Location : mouseClicked
Killed by : none
removed call to javax/swing/JRadioButton::setVisible → NO_COVERAGE

399

1.1
Location : mouseClicked
Killed by : none
removed call to com/jsql/view/swing/menubar/AppMenubar::setVisible → NO_COVERAGE

400

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

2.2
Location : mouseClicked
Killed by : none
removed call to javax/swing/JLabel::setIcon → NO_COVERAGE

405

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

406

1.1
Location : mouseClicked
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar$AdvancedButtonAdapter::mouseClicked → NO_COVERAGE

418

1.1
Location : isAdvanceActivated
Killed by : none
replaced boolean return with true for com/jsql/view/swing/panel/PanelAddressBar::isAdvanceActivated → NO_COVERAGE

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

422

1.1
Location : getTextFieldAddress
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getTextFieldAddress → NO_COVERAGE

426

1.1
Location : getTextFieldRequest
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getTextFieldRequest → NO_COVERAGE

430

1.1
Location : getTextFieldHeader
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getTextFieldHeader → NO_COVERAGE

434

1.1
Location : getMethodInjection
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getMethodInjection → NO_COVERAGE

438

1.1
Location : getPanelTrailingAddress
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getPanelTrailingAddress → NO_COVERAGE

442

1.1
Location : getTypeRequest
Killed by : none
replaced return value with "" for com/jsql/view/swing/panel/PanelAddressBar::getTypeRequest → NO_COVERAGE

446

1.1
Location : getAtomicRadioRequest
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getAtomicRadioRequest → NO_COVERAGE

450

1.1
Location : getAtomicRadioMethod
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getAtomicRadioMethod → NO_COVERAGE

454

1.1
Location : getAtomicRadioHeader
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar::getAtomicRadioHeader → NO_COVERAGE

478

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

479

1.1
Location : actionPerformed
Killed by : none
removed call to javax/swing/Action::actionPerformed → NO_COVERAGE

486

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

498

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

501

1.1
Location : lambda$actionPerformed$0
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$PasteAction::lambda$actionPerformed$0 → NO_COVERAGE

502

1.1
Location : lambda$actionPerformed$1
Killed by : none
replaced return value with null for com/jsql/view/swing/panel/PanelAddressBar$PasteAction::lambda$actionPerformed$1 → NO_COVERAGE

504

1.1
Location : lambda$actionPerformed$1
Killed by : none
negated conditional → NO_COVERAGE

507

1.1
Location : lambda$actionPerformed$2
Killed by : none
replaced boolean return with true for com/jsql/view/swing/panel/PanelAddressBar$PasteAction::lambda$actionPerformed$2 → NO_COVERAGE

2.2
Location : lambda$actionPerformed$2
Killed by : none
replaced boolean return with false for com/jsql/view/swing/panel/PanelAddressBar$PasteAction::lambda$actionPerformed$2 → NO_COVERAGE

509

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

515

1.1
Location : actionPerformed
Killed by : none
removed call to javax/swing/JTextField::setText → NO_COVERAGE

518

1.1
Location : actionPerformed
Killed by : none
removed call to javax/swing/JRadioButton::setText → NO_COVERAGE

519

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

520

1.1
Location : actionPerformed
Killed by : none
removed call to javax/swing/JTextField::setText → NO_COVERAGE

521

1.1
Location : actionPerformed
Killed by : none
removed call to javax/swing/JRadioButton::setSelected → NO_COVERAGE

525

1.1
Location : lambda$actionPerformed$3
Killed by : none
replaced boolean return with true for com/jsql/view/swing/panel/PanelAddressBar$PasteAction::lambda$actionPerformed$3 → NO_COVERAGE

2.2
Location : lambda$actionPerformed$3
Killed by : none
replaced boolean return with false for com/jsql/view/swing/panel/PanelAddressBar$PasteAction::lambda$actionPerformed$3 → NO_COVERAGE

527

1.1
Location : lambda$actionPerformed$4
Killed by : none
removed call to javax/swing/JMenuItem::setSelected → NO_COVERAGE

2.2
Location : actionPerformed
Killed by : none
removed call to java/util/Optional::ifPresent → NO_COVERAGE

530

1.1
Location : actionPerformed
Killed by : none
removed call to javax/swing/JTextField::setText → NO_COVERAGE

535

1.1
Location : actionPerformed
Killed by : none
removed call to javax/swing/JTextField::setText → NO_COVERAGE

541

1.1
Location : actionPerformed
Killed by : none
removed call to com/jsql/view/swing/panel/PanelAddressBar$AdvancedButtonAdapter::mouseClicked → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.22.1