1 package com.jsql.view.swing.panel.preferences;
2
3 import com.jsql.view.swing.panel.PanelPreferences;
4 import com.jsql.view.swing.panel.preferences.listener.SpinnerMouseWheelListener;
5 import com.jsql.view.swing.util.MediatorHelper;
6
7 import javax.swing.*;
8 import java.awt.*;
9 import java.awt.event.ActionListener;
10 import java.util.Arrays;
11 import java.util.stream.Stream;
12
13 public class PanelInjection extends JPanel {
14
15 private final JCheckBox checkboxIsNotShowingVulnReport = new JCheckBox("Disable showing vulnerability report", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isNotShowingVulnReport());
16 private final JCheckBox checkboxIsNotSearchingCharInsertion = new JCheckBox("Disable search for character insertion", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isNotSearchingCharInsertion());
17 private final JCheckBox checkboxIsNotInjectingMetadata = new JCheckBox("Disable search of database name, version and user metadata", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isNotInjectingMetadata());
18 private final JCheckBox checkboxIsParsingForm = new JCheckBox("Get HTML tags <input/> and add parameters to URL and Request", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isParsingForm());
19
20 private final JCheckBox checkboxIsCheckingAllParam = new JCheckBox("Inject every parameters (ignore user's selection)", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isCheckingAllParam());
21 private final JCheckBox checkboxIsCheckingAllURLParam = new JCheckBox("Inject every URL parameters when URL method is selected", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isCheckingAllURLParam());
22 private final JCheckBox checkboxIsCheckingAllRequestParam = new JCheckBox("Inject every Request parameters when Request method is selected", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isCheckingAllRequestParam());
23 private final JCheckBox checkboxIsCheckingAllHeaderParam = new JCheckBox("Inject every Header parameters when Header method is selected", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isCheckingAllHeaderParam());
24 private final JCheckBox checkboxIsCheckingAllBase64Param = new JCheckBox("Inject Base64 parameters", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isCheckingAllBase64Param());
25 private final JCheckBox checkboxIsCheckingAllJSONParam = new JCheckBox("Inject every JSON parameters", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isCheckingAllJsonParam());
26 private final JCheckBox checkboxIsCheckingAllCookieParam = new JCheckBox("Inject every cookie parameters", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isCheckingAllCookieParam());
27 private final JCheckBox checkboxIsCheckingAllSOAPParam = new JCheckBox("Inject SOAP parameters in Request body", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isCheckingAllSoapParam());
28
29 private final JCheckBox checkboxIsLimitingUnionIndex = new JCheckBox("Limit Union strategy:", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isLimitingUnionIndex());
30 private final JSpinner spinnerUnionIndexCount = new JSpinner();
31 private final JCheckBox checkboxIsLimitingSleepTimeStrategy = new JCheckBox("Delay Time strategy:", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isLimitingSleepTimeStrategy());
32 private final JSpinner spinnerSleepTimeStrategyCount = new JSpinner();
33
34 private final JCheckBox checkboxIsPerfIndexDisabled = new JCheckBox("Disable calibration (smaller SQL query during Union index selection only)", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isPerfIndexDisabled());
35 private final JRadioButton radioIsDefaultStrategy = new JRadioButton("Use Default mode (keep unchanged ; URL and processing unchanged)", true);
36 private final JRadioButton radioIsZipStrategy = new JRadioButton("Use Zip mode (smaller SQL queries ; reduce URL size but less efficient)", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isZipStrategy());
37 private final JRadioButton radioIsDiosStrategy = new JRadioButton("Use Dios mode (less queries ; do not use with Error strategies)", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isDiosStrategy());
38 private final JCheckBox checkboxIsUrlEncodingDisabled = new JCheckBox("Disable URL encoding (smaller URL)", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isUrlEncodingDisabled());
39 private final JCheckBox checkboxIsUrlRandomSuffixDisabled = new JCheckBox("Disable URL random suffix (strategy Time special use case)", MediatorHelper.model().getMediatorUtils().getPreferencesUtil().isUrlRandomSuffixDisabled());
40
41 public PanelInjection(PanelPreferences panelPreferences) {
42 this.checkboxIsNotInjectingMetadata.setName("checkboxIsNotInjectingMetadata");
43 this.checkboxIsNotSearchingCharInsertion.setName("checkboxIsNotSearchingCharInsertion");
44 this.checkboxIsNotShowingVulnReport.setName("checkboxIsNotShowingVulnReport");
45 this.checkboxIsParsingForm.setName("checkboxIsParsingForm");
46 this.checkboxIsCheckingAllURLParam.setName("checkboxIsCheckingAllURLParam");
47 this.checkboxIsCheckingAllRequestParam.setName("checkboxIsCheckingAllRequestParam");
48 this.checkboxIsCheckingAllHeaderParam.setName("checkboxIsCheckingAllHeaderParam");
49 this.checkboxIsCheckingAllJSONParam.setName("checkboxIsCheckingAllJSONParam");
50 this.checkboxIsCheckingAllBase64Param.setName("checkboxIsCheckingAllBase64Param");
51 this.checkboxIsCheckingAllCookieParam.setName("checkboxIsCheckingAllCookieParam");
52 this.checkboxIsCheckingAllSOAPParam.setName("checkboxIsCheckingAllSOAPParam");
53 this.checkboxIsPerfIndexDisabled.setName("checkboxIsPerfIndexDisabled");
54 this.radioIsZipStrategy.setName("radioIsZipStrategy");
55 this.radioIsDefaultStrategy.setName("radioIsDefaultStrategy");
56 this.radioIsDiosStrategy.setName("radioIsDiosStrategy");
57 this.checkboxIsUrlEncodingDisabled.setName("checkboxIsUrlEncodingDisabled");
58 this.checkboxIsUrlRandomSuffixDisabled.setName("checkboxIsUrlRandomSuffixDisabled");
59 this.checkboxIsLimitingUnionIndex.setName("checkboxIsLimitingUnionIndex");
60 this.checkboxIsLimitingSleepTimeStrategy.setName("checkboxIsLimitingSleepTimeStrategy");
61
62 this.checkboxIsPerfIndexDisabled.setToolTipText(
63 "<html>Reduce Union calibration URL, useful when host rejects large URL."
64 + "<br>Should be enabled when Zip mode is activated.</html>"
65 );
66 this.checkboxIsParsingForm.setToolTipText(
67 "<html>Create name=value params from HTML forms' extracted data.<br>"
68 + "Sometimes mandatory params are contained in forms.<br>"
69 + "It makes easy adding such params to requests.</html>"
70 );
71 this.checkboxIsNotInjectingMetadata.setToolTipText("Not injecting metadata saves time, particularly for Blind and Time strategies");
72 this.checkboxIsNotSearchingCharInsertion.setToolTipText(
73 "<html>Injection query starts usually with prefix like <b>quote</b> or <b>parenthesis</b>:<br>" +
74 "- ...&injectMe=' union select...<br>" +
75 "- ...&injectMe=) union select...<br>" +
76 "Default is searching for the prefix but can be disabled to save time when prefix is already set by the user.</html>"
77 );
78 this.checkboxIsLimitingSleepTimeStrategy.setToolTipText("<html>Time strategy waits a given number of seconds for a page to respond (fallback to default if unchecked).<br>Amount of seconds can be lowered on a stable environment to save time (e.g. local tests).</html>");
79
80 var panelSleepTimeStrategy = new JPanel();
81 panelSleepTimeStrategy.setLayout(new BoxLayout(panelSleepTimeStrategy, BoxLayout.X_AXIS));
82 panelSleepTimeStrategy.add(new JLabel("Adjust delay to "), BorderLayout.WEST);
83 panelSleepTimeStrategy.add(this.spinnerSleepTimeStrategyCount, BorderLayout.CENTER);
84 panelSleepTimeStrategy.add(new JLabel(" s ; default 5s"), BorderLayout.EAST);
85 panelSleepTimeStrategy.setMaximumSize(new Dimension(125, this.spinnerSleepTimeStrategyCount.getPreferredSize().height));
86 int countSleepTimeStrategy = MediatorHelper.model().getMediatorUtils().getPreferencesUtil().countSleepTimeStrategy();
87 var spinnerSleepTimeStrategy = new SpinnerNumberModel(
88 countSleepTimeStrategy <= 0 ? 15 : countSleepTimeStrategy,
89 1,
90 30,
91 1
92 );
93 this.spinnerSleepTimeStrategyCount.setModel(spinnerSleepTimeStrategy);
94 this.spinnerSleepTimeStrategyCount.addMouseWheelListener(new SpinnerMouseWheelListener());
95 this.spinnerSleepTimeStrategyCount.addChangeListener(e -> panelPreferences.getActionListenerSave().actionPerformed(null));
96
97 this.checkboxIsLimitingUnionIndex.setToolTipText("Maximum number of columns to check on UNION based queries");
98
99 var panelIsLimitingUnionIndex = new JPanel();
100 panelIsLimitingUnionIndex.setLayout(new BoxLayout(panelIsLimitingUnionIndex, BoxLayout.X_AXIS));
101 panelIsLimitingUnionIndex.add(new JLabel("Search for up to "));
102 panelIsLimitingUnionIndex.add(this.spinnerUnionIndexCount);
103 panelIsLimitingUnionIndex.add(new JLabel(" column(s) ; default 50 columns"));
104 panelIsLimitingUnionIndex.setMaximumSize(new Dimension(325, this.spinnerUnionIndexCount.getPreferredSize().height));
105 int countUnionIndex = MediatorHelper.model().getMediatorUtils().getPreferencesUtil().countUnionIndex();
106 var spinnerCountUnionIndex = new SpinnerNumberModel(
107 countUnionIndex <= 0 ? 50 : countUnionIndex,
108 1,
109 200,
110 1
111 );
112 this.spinnerUnionIndexCount.setModel(spinnerCountUnionIndex);
113 this.spinnerUnionIndexCount.addMouseWheelListener(new SpinnerMouseWheelListener());
114 this.spinnerUnionIndexCount.addChangeListener(e -> panelPreferences.getActionListenerSave().actionPerformed(null));
115
116 this.radioIsDiosStrategy.setToolTipText(
117 "<html>Mode Dump In One Shot injects a single query that gets all the data at once."
118 + "<br>Faster than default mode for Union and Error strats but requires volume of data to not be huge.</html>"
119 );
120 this.radioIsZipStrategy.setToolTipText(
121 "<html>Zip mode injects small queries, useful when host rejects large URL."
122 + "<br>Downside is metadata like table or row count is not fetched.</html>"
123 );
124
125 var labelGeneralInjection = new JLabel("<html><b>Processing</b></html>");
126 var labelParamsInjection = new JLabel("<html><br /><b>URL parameters</b></html>");
127 var labelSpecial = new JLabel("<html><br /><b>Special parameters</b></html>");
128 var labelQuerySize = new JLabel("<html><br /><b>Reduce URL size (advanced)</b></html>");
129 Arrays.asList(labelGeneralInjection, labelParamsInjection, labelSpecial, labelQuerySize).forEach(label -> label.setBorder(PanelGeneral.MARGIN));
130
131 ActionListener actionListenerCheckingAllParam = actionEvent -> {
132 if (actionEvent.getSource() != this.checkboxIsCheckingAllParam) {
133 this.checkboxIsCheckingAllParam.setSelected(!this.checkboxIsCheckingAllParam.isSelected());
134 }
135
136 this.checkboxIsCheckingAllURLParam.setSelected(this.checkboxIsCheckingAllParam.isSelected());
137 this.checkboxIsCheckingAllRequestParam.setSelected(this.checkboxIsCheckingAllParam.isSelected());
138 this.checkboxIsCheckingAllHeaderParam.setSelected(this.checkboxIsCheckingAllParam.isSelected());
139
140 this.checkboxIsCheckingAllURLParam.setEnabled(!this.checkboxIsCheckingAllParam.isSelected());
141 this.checkboxIsCheckingAllRequestParam.setEnabled(!this.checkboxIsCheckingAllParam.isSelected());
142 this.checkboxIsCheckingAllHeaderParam.setEnabled(!this.checkboxIsCheckingAllParam.isSelected());
143
144 panelPreferences.getActionListenerSave().actionPerformed(null);
145 };
146
147 this.checkboxIsCheckingAllURLParam.setEnabled(!this.checkboxIsCheckingAllParam.isSelected());
148 this.checkboxIsCheckingAllRequestParam.setEnabled(!this.checkboxIsCheckingAllParam.isSelected());
149 this.checkboxIsCheckingAllHeaderParam.setEnabled(!this.checkboxIsCheckingAllParam.isSelected());
150
151 this.checkboxIsCheckingAllParam.addActionListener(actionListenerCheckingAllParam);
152
153 Stream.of(
154 this.checkboxIsNotInjectingMetadata,
155 this.checkboxIsNotSearchingCharInsertion,
156 this.checkboxIsNotShowingVulnReport,
157 this.checkboxIsParsingForm,
158 this.checkboxIsCheckingAllURLParam,
159 this.checkboxIsCheckingAllRequestParam,
160 this.checkboxIsCheckingAllHeaderParam,
161 this.checkboxIsCheckingAllJSONParam,
162 this.checkboxIsCheckingAllBase64Param,
163 this.checkboxIsCheckingAllCookieParam,
164 this.checkboxIsCheckingAllSOAPParam,
165 this.checkboxIsPerfIndexDisabled,
166 this.radioIsZipStrategy,
167 this.radioIsDiosStrategy,
168 this.radioIsDefaultStrategy,
169 this.checkboxIsUrlEncodingDisabled,
170 this.checkboxIsUrlRandomSuffixDisabled,
171 this.checkboxIsLimitingUnionIndex,
172 this.checkboxIsLimitingSleepTimeStrategy
173 )
174 .forEach(button -> button.addActionListener(panelPreferences.getActionListenerSave()));
175
176 var groupSpaceToComment = new ButtonGroup();
177 groupSpaceToComment.add(this.radioIsZipStrategy);
178 groupSpaceToComment.add(this.radioIsDiosStrategy);
179 groupSpaceToComment.add(this.radioIsDefaultStrategy);
180
181 var groupLayout = new GroupLayout(this);
182 this.setLayout(groupLayout);
183
184 groupLayout.setHorizontalGroup(
185 groupLayout
186 .createSequentialGroup()
187 .addGroup(
188 groupLayout
189 .createParallelGroup(GroupLayout.Alignment.LEADING, false)
190 .addComponent(labelGeneralInjection)
191 .addComponent(this.checkboxIsParsingForm)
192 .addComponent(this.checkboxIsNotInjectingMetadata)
193 .addComponent(this.checkboxIsNotSearchingCharInsertion)
194 .addComponent(this.checkboxIsNotShowingVulnReport)
195 .addComponent(this.checkboxIsLimitingUnionIndex)
196 .addComponent(panelIsLimitingUnionIndex)
197 .addComponent(this.checkboxIsLimitingSleepTimeStrategy)
198 .addComponent(panelSleepTimeStrategy)
199
200 .addComponent(labelParamsInjection)
201 .addComponent(this.checkboxIsCheckingAllParam)
202 .addComponent(this.checkboxIsCheckingAllURLParam)
203 .addComponent(this.checkboxIsCheckingAllRequestParam)
204 .addComponent(this.checkboxIsCheckingAllHeaderParam)
205
206 .addComponent(labelSpecial)
207
208 .addComponent(this.checkboxIsCheckingAllJSONParam)
209 .addComponent(this.checkboxIsCheckingAllSOAPParam)
210 .addComponent(this.checkboxIsCheckingAllCookieParam)
211
212 .addComponent(labelQuerySize)
213 .addComponent(this.radioIsDefaultStrategy)
214 .addComponent(this.radioIsDiosStrategy)
215 .addComponent(this.radioIsZipStrategy)
216 .addComponent(this.checkboxIsPerfIndexDisabled)
217 .addComponent(this.checkboxIsUrlEncodingDisabled)
218 .addComponent(this.checkboxIsUrlRandomSuffixDisabled)
219 )
220 );
221
222 groupLayout.setVerticalGroup(
223 groupLayout
224 .createSequentialGroup()
225 .addGroup(
226 groupLayout
227 .createParallelGroup(GroupLayout.Alignment.BASELINE)
228 .addComponent(labelGeneralInjection)
229 )
230 .addGroup(
231 groupLayout
232 .createParallelGroup(GroupLayout.Alignment.BASELINE)
233 .addComponent(this.checkboxIsParsingForm)
234 )
235 .addGroup(
236 groupLayout
237 .createParallelGroup(GroupLayout.Alignment.BASELINE)
238 .addComponent(this.checkboxIsNotInjectingMetadata)
239 )
240 .addGroup(
241 groupLayout
242 .createParallelGroup(GroupLayout.Alignment.BASELINE)
243 .addComponent(this.checkboxIsNotSearchingCharInsertion)
244 )
245 .addGroup(
246 groupLayout
247 .createParallelGroup(GroupLayout.Alignment.BASELINE)
248 .addComponent(this.checkboxIsNotShowingVulnReport)
249 )
250 .addGroup(
251 groupLayout
252 .createParallelGroup(GroupLayout.Alignment.BASELINE)
253 .addComponent(this.checkboxIsLimitingUnionIndex)
254 )
255 .addGroup(
256 groupLayout
257 .createParallelGroup(GroupLayout.Alignment.BASELINE)
258 .addComponent(panelIsLimitingUnionIndex)
259 )
260 .addGroup(
261 groupLayout
262 .createParallelGroup(GroupLayout.Alignment.BASELINE)
263 .addComponent(this.checkboxIsLimitingSleepTimeStrategy)
264 )
265 .addGroup(
266 groupLayout
267 .createParallelGroup(GroupLayout.Alignment.BASELINE)
268 .addComponent(panelSleepTimeStrategy)
269 )
270
271 .addGroup(
272 groupLayout
273 .createParallelGroup(GroupLayout.Alignment.BASELINE)
274 .addComponent(labelParamsInjection)
275 )
276 .addGroup(
277 groupLayout
278 .createParallelGroup(GroupLayout.Alignment.BASELINE)
279 .addComponent(this.checkboxIsCheckingAllParam)
280 )
281 .addGroup(
282 groupLayout
283 .createParallelGroup(GroupLayout.Alignment.BASELINE)
284 .addComponent(this.checkboxIsCheckingAllURLParam)
285 )
286 .addGroup(
287 groupLayout
288 .createParallelGroup(GroupLayout.Alignment.BASELINE)
289 .addComponent(this.checkboxIsCheckingAllRequestParam)
290 )
291 .addGroup(
292 groupLayout
293 .createParallelGroup(GroupLayout.Alignment.BASELINE)
294 .addComponent(this.checkboxIsCheckingAllHeaderParam)
295 )
296
297 .addGroup(
298 groupLayout
299 .createParallelGroup(GroupLayout.Alignment.BASELINE)
300 .addComponent(labelSpecial)
301 )
302
303
304
305
306
307 .addGroup(
308 groupLayout
309 .createParallelGroup(GroupLayout.Alignment.BASELINE)
310 .addComponent(this.checkboxIsCheckingAllJSONParam)
311 )
312 .addGroup(
313 groupLayout
314 .createParallelGroup(GroupLayout.Alignment.BASELINE)
315 .addComponent(this.checkboxIsCheckingAllSOAPParam)
316 )
317 .addGroup(
318 groupLayout
319 .createParallelGroup(GroupLayout.Alignment.BASELINE)
320 .addComponent(this.checkboxIsCheckingAllCookieParam)
321 )
322
323 .addGroup(
324 groupLayout
325 .createParallelGroup(GroupLayout.Alignment.BASELINE)
326 .addComponent(labelQuerySize)
327 )
328 .addGroup(
329 groupLayout
330 .createParallelGroup(GroupLayout.Alignment.BASELINE)
331 .addComponent(this.radioIsDefaultStrategy)
332 )
333 .addGroup(
334 groupLayout
335 .createParallelGroup(GroupLayout.Alignment.BASELINE)
336 .addComponent(this.radioIsDiosStrategy)
337 )
338 .addGroup(
339 groupLayout
340 .createParallelGroup(GroupLayout.Alignment.BASELINE)
341 .addComponent(this.radioIsZipStrategy)
342 )
343 .addGroup(
344 groupLayout
345 .createParallelGroup(GroupLayout.Alignment.BASELINE)
346 .addComponent(this.checkboxIsPerfIndexDisabled)
347 )
348 .addGroup(
349 groupLayout
350 .createParallelGroup(GroupLayout.Alignment.BASELINE)
351 .addComponent(this.checkboxIsUrlEncodingDisabled)
352 )
353 .addGroup(
354 groupLayout
355 .createParallelGroup(GroupLayout.Alignment.BASELINE)
356 .addComponent(this.checkboxIsUrlRandomSuffixDisabled)
357 )
358 );
359 }
360
361
362
363
364 public JCheckBox getCheckboxIsNotInjectingMetadata() {
365 return this.checkboxIsNotInjectingMetadata;
366 }
367
368 public JCheckBox getCheckboxIsNotSearchingCharInsertion() {
369 return this.checkboxIsNotSearchingCharInsertion;
370 }
371
372 public JCheckBox getCheckboxIsNotShowingVulnReport() {
373 return this.checkboxIsNotShowingVulnReport;
374 }
375
376 public JCheckBox getCheckboxIsCheckingAllParam() {
377 return this.checkboxIsCheckingAllParam;
378 }
379
380 public JCheckBox getCheckboxIsCheckingAllURLParam() {
381 return this.checkboxIsCheckingAllURLParam;
382 }
383
384 public JCheckBox getCheckboxIsCheckingAllRequestParam() {
385 return this.checkboxIsCheckingAllRequestParam;
386 }
387
388 public JCheckBox getCheckboxIsCheckingAllHeaderParam() {
389 return this.checkboxIsCheckingAllHeaderParam;
390 }
391
392 public JCheckBox getCheckboxIsCheckingAllBase64Param() {
393 return this.checkboxIsCheckingAllBase64Param;
394 }
395
396 public JCheckBox getCheckboxIsCheckingAllJsonParam() {
397 return this.checkboxIsCheckingAllJSONParam;
398 }
399
400 public JCheckBox getCheckboxIsCheckingAllCookieParam() {
401 return this.checkboxIsCheckingAllCookieParam;
402 }
403
404 public JCheckBox getCheckboxIsCheckingAllSoapParam() {
405 return this.checkboxIsCheckingAllSOAPParam;
406 }
407
408 public JCheckBox getCheckboxIsParsingForm() {
409 return this.checkboxIsParsingForm;
410 }
411
412 public JCheckBox getCheckboxIsPerfIndexDisabled() {
413 return this.checkboxIsPerfIndexDisabled;
414 }
415
416 public JRadioButton getRadioIsZipStrategy() {
417 return this.radioIsZipStrategy;
418 }
419
420 public JRadioButton getRadioIsDiosStrategy() {
421 return this.radioIsDiosStrategy;
422 }
423
424 public JRadioButton getRadioIsDefaultStrategy() {
425 return this.radioIsDefaultStrategy;
426 }
427
428 public JCheckBox getCheckboxIsUrlEncodingDisabled() {
429 return this.checkboxIsUrlEncodingDisabled;
430 }
431
432 public JCheckBox getCheckboxIsUrlRandomSuffixDisabled() {
433 return this.checkboxIsUrlRandomSuffixDisabled;
434 }
435
436 public JCheckBox getCheckboxIsLimitingUnionIndex() {
437 return this.checkboxIsLimitingUnionIndex;
438 }
439
440 public JSpinner getSpinnerUnionIndexCount() {
441 return this.spinnerUnionIndexCount;
442 }
443
444 public JCheckBox getCheckboxIsLimitingSleepTimeStrategy() {
445 return this.checkboxIsLimitingSleepTimeStrategy;
446 }
447
448 public JSpinner getSpinnerSleepTimeStrategy() {
449 return this.spinnerSleepTimeStrategyCount;
450 }
451 }