Skip to content

Commit 2c2da55

Browse files
committed
SwingConsolePane: Store settings for log formatting in PrefService
1 parent c2ff383 commit 2c2da55

File tree

4 files changed

+95
-3
lines changed

4 files changed

+95
-3
lines changed

src/main/java/org/scijava/ui/swing/console/LogFormatter.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@
3434
import java.io.PrintWriter;
3535
import java.io.StringWriter;
3636
import java.util.EnumSet;
37+
import java.util.Map;
3738

3839
import org.scijava.log.LogLevel;
3940
import org.scijava.log.LogMessage;
41+
import org.scijava.prefs.PrefService;
4042

4143
/**
4244
* Used by {@link LoggingPanel} to simplify formatting log messages.
@@ -45,6 +47,16 @@
4547
*/
4648
public class LogFormatter {
4749

50+
private String prefKey = null;
51+
52+
private PrefService prefService = null;
53+
54+
public void setPrefService(PrefService prefService, String prefKey) {
55+
this.prefService = (prefKey != null && !prefKey.isEmpty()) ? prefService : null;
56+
this.prefKey = prefKey;
57+
applySettings();
58+
}
59+
4860
public enum Field {
4961
TIME, LEVEL, SOURCE, MESSAGE, THROWABLE, ATTACHMENT
5062
}
@@ -62,6 +74,7 @@ public void setVisible(Field field, boolean visible) {
6274
if (visible) copy.add(field);
6375
else copy.remove(field);
6476
visibleFields = copy;
77+
changeSetting(field, visible);
6578
}
6679

6780
public String format(LogMessage message) {
@@ -97,4 +110,24 @@ public String format(LogMessage message) {
97110
private void printWithBrackets(PrintWriter printer, String prefix) {
98111
printer.append('[').append(prefix).append("] ");
99112
}
113+
114+
// -- Helper methods --
115+
116+
public void applySettings() {
117+
if(prefService == null) return;
118+
Map<String, String> settings = prefService.getMap(prefKey);
119+
for(Field field : Field.values()) {
120+
String defaultValue = Boolean.toString(isVisible(field));
121+
String value = settings.getOrDefault(field.toString(), defaultValue);
122+
setVisible(field, Boolean.valueOf(value));
123+
}
124+
visibleFields.toString();
125+
}
126+
127+
public void changeSetting(Field field, boolean visible) {
128+
if(prefService == null) return;
129+
Map<String, String> settings = prefService.getMap(prefKey);
130+
settings.put(field.toString(), Boolean.toString(visible));
131+
prefService.putMap(prefKey, settings);
132+
}
100133
}

src/main/java/org/scijava/ui/swing/console/LoggingPanel.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import org.scijava.log.LogService;
5858
import org.scijava.log.LogSource;
5959
import org.scijava.log.Logger;
60+
import org.scijava.prefs.PrefService;
6061
import org.scijava.thread.ThreadService;
6162

6263
/**
@@ -99,11 +100,12 @@ public class LoggingPanel extends JPanel implements LogListener
99100
// -- constructor --
100101

101102
public LoggingPanel(Context context) {
102-
this(context.getService(ThreadService.class));
103+
this(context.getService(ThreadService.class), null, null);
103104
}
104105

105-
public LoggingPanel(ThreadService threadService) {
106+
public LoggingPanel(ThreadService threadService, PrefService prefService, String prefKey) {
106107
textArea = new ItemTextPane(threadService);
108+
logFormatter.setPrefService(prefService, prefKey);
107109
initGui();
108110
setRecorder(new LogRecorder());
109111
}

src/main/java/org/scijava/ui/swing/console/SwingConsolePane.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.scijava.console.OutputEvent;
4141
import org.scijava.log.LogService;
4242
import org.scijava.plugin.Parameter;
43+
import org.scijava.prefs.PrefService;
4344
import org.scijava.thread.ThreadService;
4445
import org.scijava.ui.console.AbstractConsolePane;
4546
import org.scijava.ui.console.ConsolePane;
@@ -56,12 +57,17 @@
5657
*/
5758
public class SwingConsolePane extends AbstractConsolePane<JPanel> {
5859

60+
public static final String LOG_FORMATTING_SETTINGS_KEY = "/log-formatting";
61+
5962
@Parameter
6063
private ThreadService threadService;
6164

6265
@Parameter
6366
private LogService logService;
6467

68+
@Parameter
69+
private PrefService prefService;
70+
6571
private ConsolePanel consolePanel;
6672

6773
private LoggingPanel loggingPanel;
@@ -131,7 +137,7 @@ private ConsolePanel consolePanel() {
131137
private synchronized void initLoggingPanel() {
132138
if (consolePanel != null) return;
133139
consolePanel = new ConsolePanel(threadService);
134-
loggingPanel = new LoggingPanel(threadService);
140+
loggingPanel = new LoggingPanel(threadService, prefService, LOG_FORMATTING_SETTINGS_KEY);
135141
logService.addLogListener(loggingPanel);
136142
component = new JPanel(new MigLayout("", "[grow]", "[grow]"));
137143
JTabbedPane tabs = new JTabbedPane();
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package org.scijava.ui.swing.console;
2+
3+
import org.junit.Test;
4+
import org.scijava.Context;
5+
import org.scijava.prefs.PrefService;
6+
7+
import java.util.Collections;
8+
import java.util.Map;
9+
10+
import static org.junit.Assert.assertEquals;
11+
import static org.junit.Assert.assertFalse;
12+
import static org.junit.Assert.assertTrue;
13+
14+
/**
15+
* Tests {@link LogFormatter}.
16+
*
17+
* @author Matthias Arzt
18+
*/
19+
public class LogFormatterTest {
20+
21+
@Test
22+
public void testPrefService() {
23+
PrefService prefService = new Context(PrefService.class).service(PrefService.class);
24+
String expected = "Hello World";
25+
prefService.put("foo", expected);
26+
String actual = prefService.get("foo");
27+
assertEquals(expected, actual);
28+
}
29+
30+
@Test
31+
public void testPrefServiceMap() {
32+
PrefService prefService = new Context(PrefService.class).service(PrefService.class);
33+
Map<String, String> expected = Collections.singletonMap("Hello", "World");
34+
prefService.putMap("/foo", expected);
35+
Map<String, String> actual = prefService.getMap("/foo");
36+
assertEquals(expected, actual);
37+
}
38+
39+
@Test
40+
public void testSettings() {
41+
PrefService prefService = new Context(PrefService.class).service(PrefService.class);
42+
LogFormatter formatter1 = new LogFormatter();
43+
formatter1.setPrefService(prefService, "/abc");
44+
formatter1.setVisible(LogFormatter.Field.ATTACHMENT, true);
45+
formatter1.setVisible(LogFormatter.Field.LEVEL, false);
46+
LogFormatter formatter2 = new LogFormatter();
47+
formatter2.setPrefService(prefService, "/abc");
48+
assertTrue(formatter2.isVisible(LogFormatter.Field.ATTACHMENT));
49+
assertFalse(formatter2.isVisible(LogFormatter.Field.LEVEL));
50+
}
51+
}

0 commit comments

Comments
 (0)