View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.log4j.chainsaw;
19  
20  import org.apache.log4j.LogManager;
21  import org.apache.log4j.Logger;
22  import org.apache.log4j.chainsaw.helper.SwingHelper;
23  import org.apache.log4j.chainsaw.osx.OSXIntegration;
24  
25  import javax.swing.*;
26  import javax.swing.tree.DefaultMutableTreeNode;
27  import javax.swing.tree.DefaultTreeModel;
28  import javax.swing.tree.TreeModel;
29  import java.awt.*;
30  import java.io.File;
31  import java.net.MalformedURLException;
32  import java.net.URL;
33  import java.util.Dictionary;
34  import java.util.Enumeration;
35  import java.util.Hashtable;
36  import java.util.Locale;
37  
38  
39  /**
40   * A panel used by the user to modify any application-wide preferences.
41   *
42   * @author Paul Smith <psmith@apache.org>
43   */
44  public class ApplicationPreferenceModelPanel extends AbstractPreferencePanel {
45      private ApplicationPreferenceModel committedPreferenceModel;
46      private ApplicationPreferenceModel uncommittedPreferenceModel =
47          new ApplicationPreferenceModel();
48      private JTextField identifierExpression;
49      private JTextField toolTipDisplayMillis;
50      private JTextField cyclicBufferSize;
51      private JComboBox<String> configurationURL;
52      private final Logger logger;
53      private GeneralAllPrefPanel generalAllPrefPanel;
54  
55      ApplicationPreferenceModelPanel(ApplicationPreferenceModel model) {
56          this.committedPreferenceModel = model;
57          logger = LogManager.getLogger(ApplicationPreferenceModelPanel.class);
58          initComponents();
59          getOkButton().addActionListener(
60              e -> {
61                  uncommittedPreferenceModel.setConfigurationURL((String) configurationURL.getSelectedItem());
62                  uncommittedPreferenceModel.setIdentifierExpression(
63                      identifierExpression.getText());
64                  try {
65                      int millis = Integer.parseInt(toolTipDisplayMillis.getText());
66                      if (millis >= 0) {
67                          uncommittedPreferenceModel.setToolTipDisplayMillis(millis);
68                      }
69                  } catch (NumberFormatException nfe) {
70                  }
71                  try {
72                      int bufferSize = Integer.parseInt(cyclicBufferSize.getText());
73                      if (bufferSize >= 0) {
74                          uncommittedPreferenceModel.setCyclicBufferSize(bufferSize);
75                      }
76                  } catch (NumberFormatException nfe) {
77                  }
78                  committedPreferenceModel.apply(uncommittedPreferenceModel);
79                  hidePanel();
80              });
81  
82          getCancelButton().addActionListener(
83              e -> {
84                  uncommittedPreferenceModel.apply(committedPreferenceModel);
85                  hidePanel();
86              });
87      }
88  
89  
90      public static void main(String[] args) {
91          JFrame f = new JFrame("App Preferences Panel Test Bed");
92          ApplicationPreferenceModel model = new ApplicationPreferenceModel();
93          ApplicationPreferenceModelPanel panel =
94              new ApplicationPreferenceModelPanel(model);
95          f.getContentPane().add(panel);
96  
97          model.addPropertyChangeListener(System.out::println);
98          panel.setOkCancelActionListener(
99              e -> System.exit(1));
100 
101         f.setSize(640, 480);
102         f.setVisible(true);
103     }
104 
105     /**
106      * Ensures this panels DISPLAYED model is in sync with
107      * the model initially passed to the constructor.
108      */
109     public void updateModel() {
110         this.uncommittedPreferenceModel.apply(committedPreferenceModel);
111     }
112 
113     /* (non-Javadoc)
114      * @see org.apache.log4j.chainsaw.AbstractPreferencePanel#createTreeModel()
115      */
116     protected TreeModel createTreeModel() {
117         final DefaultMutableTreeNode rootNode =
118             new DefaultMutableTreeNode("Preferences");
119         DefaultTreeModel model = new DefaultTreeModel(rootNode);
120 
121         generalAllPrefPanel = new GeneralAllPrefPanel();
122         DefaultMutableTreeNode general =
123             new DefaultMutableTreeNode(generalAllPrefPanel);
124 
125         DefaultMutableTreeNode visuals =
126             new DefaultMutableTreeNode(new VisualsPrefPanel());
127 
128         rootNode.add(general);
129         rootNode.add(visuals);
130 
131         return model;
132     }
133 
134     public class VisualsPrefPanel extends BasicPrefPanel {
135         private final JRadioButton topPlacement = new JRadioButton(" Top         ");
136         private final JRadioButton bottomPlacement = new JRadioButton(" Bottom         ");
137         private final JCheckBox statusBar = new JCheckBox(" Show Status bar ");
138         private final JCheckBox toolBar = new JCheckBox(" Show Toolbar ");
139         private final JCheckBox receivers = new JCheckBox(" Show Receivers ");
140         private UIManager.LookAndFeelInfo[] lookAndFeels = UIManager.getInstalledLookAndFeels();
141         private final ButtonGroup lookAndFeelGroup = new ButtonGroup();
142 
143         private VisualsPrefPanel() {
144             super("Visuals");
145 
146             //Nimbus has major issues with colors in tables..just remove it from the list..
147             //only use this if nimbus was found..
148             UIManager.LookAndFeelInfo[] newLookAndFeels = new UIManager.LookAndFeelInfo[lookAndFeels.length];
149             boolean useNewLookAndFeels = false;
150             int j = 0;
151             for (UIManager.LookAndFeelInfo lookAndFeel : lookAndFeels) {
152                 if (lookAndFeel.getClassName().toLowerCase(Locale.ENGLISH).contains("nimbus")) {
153                     useNewLookAndFeels = true;
154                 } else {
155                     newLookAndFeels[j++] = lookAndFeel;
156                 }
157             }
158             if (useNewLookAndFeels) {
159                 UIManager.LookAndFeelInfo[] replacedLookAndFeels = new UIManager.LookAndFeelInfo[lookAndFeels.length - 1];
160                 System.arraycopy(newLookAndFeels, 0, replacedLookAndFeels, 0, newLookAndFeels.length - 1);
161                 lookAndFeels = replacedLookAndFeels;
162             }
163 
164             setupComponents();
165             setupListeners();
166             setupInitialValues();
167         }
168 
169         /**
170          *
171          */
172         private void setupListeners() {
173             topPlacement.addActionListener(
174                 e -> uncommittedPreferenceModel.setTabPlacement(SwingConstants.TOP));
175             bottomPlacement.addActionListener(
176                 e -> uncommittedPreferenceModel.setTabPlacement(SwingConstants.BOTTOM));
177 
178             statusBar.addActionListener(
179                 e -> uncommittedPreferenceModel.setStatusBar(statusBar.isSelected()));
180 
181             toolBar.addActionListener(
182                 e -> uncommittedPreferenceModel.setToolbar(toolBar.isSelected()));
183 
184             receivers.addActionListener(
185                 e -> uncommittedPreferenceModel.setReceivers(receivers.isSelected()));
186 
187             uncommittedPreferenceModel.addPropertyChangeListener(
188                 "tabPlacement",
189                 evt -> {
190                     int value = (Integer) evt.getNewValue();
191 
192                     configureTabPlacement(value);
193                 });
194 
195             uncommittedPreferenceModel.addPropertyChangeListener(
196                 "statusBar",
197                 evt -> statusBar.setSelected(
198                     (Boolean) evt.getNewValue()));
199 
200             uncommittedPreferenceModel.addPropertyChangeListener(
201                 "toolbar",
202                 evt -> toolBar.setSelected((Boolean) evt.getNewValue()));
203 
204             uncommittedPreferenceModel.addPropertyChangeListener(
205                 "receivers",
206                 evt -> receivers.setSelected(
207                     (Boolean) evt.getNewValue()));
208 
209             uncommittedPreferenceModel.addPropertyChangeListener(
210                 "lookAndFeelClassName",
211                 evt -> {
212                     String lf = evt.getNewValue().toString();
213 
214                     Enumeration enumeration = lookAndFeelGroup.getElements();
215 
216                     while (enumeration.hasMoreElements()) {
217                         JRadioButton button = (JRadioButton) enumeration.nextElement();
218 
219                         if (button.getName() != null && button.getName().equals(lf)) {
220                             button.setSelected(true);
221 
222                             break;
223                         }
224                     }
225                 });
226         }
227 
228         /**
229          *
230          */
231         private void setupComponents() {
232             setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
233 
234             JPanel tabPlacementBox = new JPanel();
235             tabPlacementBox.setLayout(new BoxLayout(tabPlacementBox, BoxLayout.Y_AXIS));
236 
237             tabPlacementBox.setBorder(BorderFactory.createTitledBorder(" Tab Placement "));
238 
239             ButtonGroup tabPlacementGroup = new ButtonGroup();
240 
241             tabPlacementGroup.add(topPlacement);
242             tabPlacementGroup.add(bottomPlacement);
243 
244             tabPlacementBox.add(topPlacement);
245             tabPlacementBox.add(bottomPlacement);
246 
247             /**
248              * If we're OSX, we're 'not allowed' to change the tab placement...
249              */
250             if (OSXIntegration.IS_OSX) {
251                 tabPlacementBox.setEnabled(false);
252                 topPlacement.setEnabled(false);
253                 bottomPlacement.setEnabled(false);
254             }
255 
256             add(tabPlacementBox);
257             add(statusBar);
258             add(receivers);
259             add(toolBar);
260 
261             JPanel lfPanel = new JPanel();
262             lfPanel.setLayout(new BoxLayout(lfPanel, BoxLayout.Y_AXIS));
263             lfPanel.setBorder(BorderFactory.createTitledBorder(" Look & Feel "));
264 
265             for (final UIManager.LookAndFeelInfo lfInfo : lookAndFeels) {
266                 final JRadioButton lfItem = new JRadioButton(" " + lfInfo.getName() + " ");
267                 lfItem.setName(lfInfo.getClassName());
268                 lfItem.addActionListener(
269                     e -> uncommittedPreferenceModel.setLookAndFeelClassName(
270                         lfInfo.getClassName()));
271                 lookAndFeelGroup.add(lfItem);
272                 lfPanel.add(lfItem);
273             }
274 
275             try {
276                 final Class gtkLF =
277                     Class.forName("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
278                 final JRadioButton lfIGTK = new JRadioButton(" GTK+ 2.0 ");
279                 lfIGTK.addActionListener(
280                     e -> uncommittedPreferenceModel.setLookAndFeelClassName(
281                         gtkLF.getName()));
282                 lookAndFeelGroup.add(lfIGTK);
283                 lfPanel.add(lfIGTK);
284             } catch (Exception e) {
285                 logger.debug("Can't find new GTK L&F, might be Windows, or <JDK1.4.2");
286             }
287 
288             add(lfPanel);
289 
290             add(
291                 new JLabel(
292                     "<html>Look and Feel change will apply the next time you start Chainsaw.<br>" +
293                         "If this value is not set, the default L&F of your system is used.</html>"));
294         }
295 
296         private void configureTabPlacement(int value) {
297             switch (value) {
298                 case SwingConstants.TOP:
299                     topPlacement.setSelected(true);
300 
301                     break;
302 
303                 case SwingConstants.BOTTOM:
304                     bottomPlacement.setSelected(true);
305 
306                     break;
307 
308                 default:
309                     break;
310             }
311         }
312 
313         private void setupInitialValues() {
314             statusBar.setSelected(uncommittedPreferenceModel.isStatusBar());
315             receivers.setSelected(uncommittedPreferenceModel.isReceivers());
316             toolBar.setSelected(uncommittedPreferenceModel.isToolbar());
317             configureTabPlacement(uncommittedPreferenceModel.getTabPlacement());
318             Enumeration e = lookAndFeelGroup.getElements();
319             while (e.hasMoreElements()) {
320                 JRadioButton radioButton = (JRadioButton) e.nextElement();
321                 if (radioButton.getText().equals(uncommittedPreferenceModel.getLookAndFeelClassName())) {
322                     radioButton.setSelected(true);
323                     break;
324                 }
325             }
326         }
327     }
328 
329     /**
330      * @author psmith
331      */
332     public class GeneralAllPrefPanel extends BasicPrefPanel {
333         private final JCheckBox showNoReceiverWarning =
334             new JCheckBox(" Prompt me on startup if there are no Receivers defined ");
335         private final JCheckBox showSplash = new JCheckBox(" Show Splash screen at startup ");
336         private final JSlider responsiveSlider =
337             new JSlider(SwingConstants.HORIZONTAL, 1, 4, 2);
338         private final JCheckBox confirmExit = new JCheckBox(" Confirm Exit ");
339         Dictionary<Integer, JLabel> sliderLabelMap = new Hashtable<>();
340 
341         private final JCheckBox okToRemoveSecurityManager = new JCheckBox(" Ok to remove SecurityManager ");
342 
343         public GeneralAllPrefPanel() {
344             super("General");
345 
346             GeneralAllPrefPanel.this.initComponents();
347         }
348 
349         private void initComponents() {
350             setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
351 
352             configurationURL = new JComboBox<>(new DefaultComboBoxModel<>(committedPreferenceModel.getConfigurationURLs()));
353             configurationURL.setEditable(true);
354             configurationURL.setPrototypeDisplayValue("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
355             configurationURL.setPreferredSize(new Dimension(375, 13));
356 
357             identifierExpression = new JTextField(30);
358             toolTipDisplayMillis = new JTextField(8);
359             cyclicBufferSize = new JTextField(8);
360             Box p = new Box(BoxLayout.X_AXIS);
361 
362             p.add(showNoReceiverWarning);
363             p.add(Box.createHorizontalGlue());
364 
365             confirmExit.setToolTipText("If set, you prompt to confirm Chainsaw exit");
366             okToRemoveSecurityManager.setToolTipText("You will need to tick this to be able to load Receivers/Plugins that require external dependancies.");
367             setupInitialValues();
368             setupListeners();
369 
370             initSliderComponent();
371             add(responsiveSlider);
372 
373             JPanel p1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
374 
375             p1.add(new JLabel(" Tab name/event routing expression "));
376             p1.add(Box.createHorizontalStrut(5));
377             p1.add(identifierExpression);
378             add(p1);
379             add(p);
380 
381             Box p2 = new Box(BoxLayout.X_AXIS);
382             p2.add(confirmExit);
383             p2.add(Box.createHorizontalGlue());
384 
385             Box p3 = new Box(BoxLayout.X_AXIS);
386             p3.add(showSplash);
387             p3.add(Box.createHorizontalGlue());
388 
389             Box ok4 = new Box(BoxLayout.X_AXIS);
390             ok4.add(okToRemoveSecurityManager);
391             ok4.add(Box.createHorizontalGlue());
392 
393             add(p2);
394             add(p3);
395             add(ok4);
396 
397             JPanel p4 = new JPanel(new FlowLayout(FlowLayout.LEFT));
398 
399             p4.add(new JLabel(" ToolTip Display (millis) "));
400             p4.add(Box.createHorizontalStrut(5));
401             p4.add(toolTipDisplayMillis);
402             add(p4);
403 
404             JPanel p5 = new JPanel(new FlowLayout(FlowLayout.LEFT));
405 
406             p5.add(new JLabel(" Cyclic buffer size "));
407             p5.add(Box.createHorizontalStrut(5));
408             p5.add(cyclicBufferSize);
409             p5.add(Box.createHorizontalStrut(5));
410             p5.add(new JLabel(" (effective on restart) "));
411             add(p5);
412 
413             Box p6 = new Box(BoxLayout.Y_AXIS);
414 
415             Box configURLPanel = new Box(BoxLayout.X_AXIS);
416             JLabel configLabel = new JLabel(" Auto Config URL ");
417             configURLPanel.add(configLabel);
418             configURLPanel.add(Box.createHorizontalStrut(5));
419 
420             configURLPanel.add(configurationURL);
421             configURLPanel.add(Box.createHorizontalGlue());
422 
423             p6.add(configURLPanel);
424 
425             JButton browseButton = new JButton(" Open File... ");
426             browseButton.addActionListener(e -> browseForConfiguration());
427             Box browsePanel = new Box(BoxLayout.X_AXIS);
428             browsePanel.add(Box.createHorizontalGlue());
429             browsePanel.add(browseButton);
430             p6.add(Box.createVerticalStrut(5));
431             p6.add(browsePanel);
432             p6.add(Box.createVerticalGlue());
433             add(p6);
434 
435             configurationURL.setToolTipText("A complete and valid URL identifying the location of a valid log4 xml configuration file to auto-configure Receivers and other Plugins");
436             configurationURL.setInputVerifier(new InputVerifier() {
437 
438                 public boolean verify(JComponent input) {
439                     try {
440                         String selectedItem = (String) configurationURL.getSelectedItem();
441                         if (selectedItem != null && !(selectedItem.trim().equals(""))) {
442                             new URL(selectedItem);
443                         }
444                     } catch (Exception e) {
445                         return false;
446                     }
447                     return true;
448                 }
449             });
450             String configToDisplay = committedPreferenceModel.getBypassConfigurationURL() != null ? committedPreferenceModel.getBypassConfigurationURL() : committedPreferenceModel.getConfigurationURL();
451             configurationURL.setSelectedItem(configToDisplay);
452         }
453 
454         public void browseForConfiguration() {
455             String defaultPath = ".";
456             if (configurationURL.getItemCount() > 0) {
457                 Object selectedItem = configurationURL.getSelectedItem();
458                 if (selectedItem != null) {
459                     File currentConfigurationPath = new File(selectedItem.toString()).getParentFile();
460                     if (currentConfigurationPath != null) {
461                         defaultPath = currentConfigurationPath.getPath();
462                         //FileDialog will not navigate to this location unless we remove the prefixing protocol and slash
463                         //at least on winxp
464                         if (defaultPath.toLowerCase(Locale.ENGLISH).startsWith("file:\\")) {
465                             defaultPath = defaultPath.substring("file:\\".length());
466                         }
467                     }
468                 }
469             }
470             File selectedFile = SwingHelper.promptForFile(this, defaultPath, "Select a Chainsaw configuration file", true);
471             if (selectedFile != null) {
472                 try {
473                     String newConfigurationFile = selectedFile.toURI().toURL().toExternalForm();
474                     if (!committedPreferenceModel.getConfigurationURLs().contains(newConfigurationFile)) {
475                         configurationURL.addItem(newConfigurationFile);
476                     }
477                     configurationURL.setSelectedItem(newConfigurationFile);
478                 } catch (MalformedURLException e1) {
479                     e1.printStackTrace();
480                 }
481             }
482         }
483 
484         private void initSliderComponent() {
485             responsiveSlider.setToolTipText(
486                 "Adjust to set the responsiveness of the app.  How often the view is updated.");
487             responsiveSlider.setSnapToTicks(true);
488             responsiveSlider.setLabelTable(sliderLabelMap);
489             responsiveSlider.setPaintLabels(true);
490             responsiveSlider.setPaintTrack(true);
491 
492             responsiveSlider.setBorder(BorderFactory.createTitledBorder(" Responsiveness "));
493 
494             //            responsiveSlider.setAlignmentY(0);
495             //            responsiveSlider.setAlignmentX(0);
496         }
497 
498         private void setupListeners() {
499             uncommittedPreferenceModel.addPropertyChangeListener(
500                 "showNoReceiverWarning",
501                 evt -> showNoReceiverWarning.setSelected(
502                     (Boolean) evt.getNewValue()));
503 
504             uncommittedPreferenceModel.addPropertyChangeListener("showSplash", evt -> {
505                 boolean value = (Boolean) evt.getNewValue();
506                 showSplash.setSelected(value);
507             });
508 
509             uncommittedPreferenceModel.addPropertyChangeListener("okToRemoveSecurityManager", evt -> {
510                 boolean newValue = (Boolean) evt.getNewValue();
511                 if (newValue) {
512                     okToRemoveSecurityManager.setSelected(newValue);
513                 } else {
514                     okToRemoveSecurityManager.setSelected(false);
515                 }
516 
517             });
518 
519 
520             uncommittedPreferenceModel.addPropertyChangeListener(
521                 "identifierExpression",
522                 evt -> identifierExpression.setText(evt.getNewValue().toString()));
523 
524             uncommittedPreferenceModel.addPropertyChangeListener(
525                 "responsiveness",
526                 evt -> {
527                     int value = (Integer) evt.getNewValue();
528 
529                     if (value >= 1000) {
530                         int newValue = (value - 750) / 1000;
531                         logger.debug(
532                             "Adjusting old Responsiveness value from " + value + " to "
533                                 + newValue);
534                         value = newValue;
535                     }
536 
537                     responsiveSlider.setValue(value);
538                 });
539 
540             uncommittedPreferenceModel.addPropertyChangeListener(
541                 "toolTipDisplayMillis",
542                 evt -> toolTipDisplayMillis.setText(evt.getNewValue().toString()));
543 
544             uncommittedPreferenceModel.addPropertyChangeListener(
545                 "cyclicBufferSize",
546                 evt -> cyclicBufferSize.setText(evt.getNewValue().toString()));
547 
548             showNoReceiverWarning.addActionListener(
549                 e -> uncommittedPreferenceModel.setShowNoReceiverWarning(
550                     showNoReceiverWarning.isSelected()));
551 
552             showSplash.addActionListener(e -> uncommittedPreferenceModel.setShowSplash(showSplash.isSelected()));
553 
554             okToRemoveSecurityManager.addActionListener(e -> {
555 
556                 if (okToRemoveSecurityManager.isSelected() && JOptionPane.showConfirmDialog(okToRemoveSecurityManager, "By ticking this option, you are authorizing Chainsaw to remove Java's Security Manager.\n\n" +
557                     "This is required under Java Web Start so that it can access Jars/classes locally.  Without this, Receivers like JMSReceiver + DBReceiver that require" +
558                     " specific driver jars will NOT be able to be run.  \n\n" +
559                     "By ticking this, you are saying that this is ok.", "Please Confirm", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
560                     uncommittedPreferenceModel.setOkToRemoveSecurityManager(true);
561                 } else {
562                     uncommittedPreferenceModel.setOkToRemoveSecurityManager(false);
563                 }
564 
565             });
566 
567 
568             responsiveSlider.getModel().addChangeListener(
569                 e -> {
570                     if (responsiveSlider.getValueIsAdjusting()) {
571                         /**
572                          * We'll wait until it stops.
573                          */
574                     } else {
575                         int value = responsiveSlider.getValue();
576 
577                         if (value == 0) {
578                             value = 1;
579                         }
580 
581                         logger.debug("Adjust responsiveness to " + value);
582                         uncommittedPreferenceModel.setResponsiveness(value);
583                     }
584                 });
585 
586             uncommittedPreferenceModel.addPropertyChangeListener(
587                 "confirmExit",
588                 evt -> {
589                     boolean value = (Boolean) evt.getNewValue();
590                     confirmExit.setSelected(value);
591                 });
592 
593             uncommittedPreferenceModel.addPropertyChangeListener("configurationURL", evt -> {
594                 String value = evt.getNewValue().toString();
595                 configurationURL.setSelectedItem(value);
596             });
597             confirmExit.addActionListener(
598                 e -> uncommittedPreferenceModel.setConfirmExit(
599                     confirmExit.isSelected()));
600         }
601 
602         private void setupInitialValues() {
603             sliderLabelMap.put(1, new JLabel(" Fastest "));
604             sliderLabelMap.put(2, new JLabel(" Fast "));
605             sliderLabelMap.put(3, new JLabel(" Medium "));
606             sliderLabelMap.put(4, new JLabel(" Slow "));
607 
608             //
609             showNoReceiverWarning.setSelected(
610                 uncommittedPreferenceModel.isShowNoReceiverWarning());
611             identifierExpression.setText(
612                 uncommittedPreferenceModel.getIdentifierExpression());
613 
614             confirmExit.setSelected(uncommittedPreferenceModel.isConfirmExit());
615             okToRemoveSecurityManager.setSelected(uncommittedPreferenceModel.isOkToRemoveSecurityManager());
616             showNoReceiverWarning.setSelected(uncommittedPreferenceModel.isShowNoReceiverWarning());
617             showSplash.setSelected(uncommittedPreferenceModel.isShowSplash());
618             identifierExpression.setText(uncommittedPreferenceModel.getIdentifierExpression());
619             toolTipDisplayMillis.setText(uncommittedPreferenceModel.getToolTipDisplayMillis() + "");
620             cyclicBufferSize.setText(uncommittedPreferenceModel.getCyclicBufferSize() + "");
621             configurationURL.setSelectedItem(uncommittedPreferenceModel.getConfigurationURL());
622         }
623     }
624 }