Skip to content

Commit 605a370

Browse files
author
kasemir
committed
Read external_app_* settings when needed ...
... because static initialization might read them too early
1 parent b8c388b commit 605a370

File tree

2 files changed

+32
-11
lines changed

2 files changed

+32
-11
lines changed

core/framework/src/main/java/org/phoebus/framework/workbench/ApplicationService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ private ApplicationService()
5959
}
6060

6161
// External applications, defined in preferences
62-
for (String definition : WorkbenchPreferences.external_apps)
62+
for (String definition : WorkbenchPreferences.getExternalApps())
6363
{
6464
if (definition.isEmpty())
6565
continue;
@@ -181,7 +181,7 @@ public static <AI extends AppInstance> AI createInstance(final String name, fina
181181
*/
182182
public static List<String> getExtensionsHandledByExternalApp(){
183183
List<String> extensionsHandledByExternalApp = new ArrayList<>();
184-
for (String definition : WorkbenchPreferences.external_apps) {
184+
for (String definition : WorkbenchPreferences.getExternalApps()) {
185185
if (definition.isEmpty()) {
186186
continue;
187187
}

core/framework/src/main/java/org/phoebus/framework/workbench/WorkbenchPreferences.java

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,58 @@
88
package org.phoebus.framework.workbench;
99

1010
import java.io.File;
11+
import java.util.ArrayList;
1112
import java.util.Collection;
13+
import java.util.List;
14+
import java.util.logging.Level;
1215
import java.util.logging.Logger;
13-
import java.util.stream.Collectors;
16+
import java.util.prefs.Preferences;
1417

1518
import org.phoebus.framework.preferences.AnnotatedPreferences;
1619
import org.phoebus.framework.preferences.Preference;
17-
import org.phoebus.framework.preferences.PreferencesReader;
1820

1921
/** Workbench Preferences
2022
* @author Kay Kasemir
2123
*/
2224
public class WorkbenchPreferences
2325
{
26+
// This class gets initialized quite early because other code uses this logger.
27+
// The external apps are thus read on demand via getExternalApps(),
28+
// they are not constructed in the static... code below because
29+
// that might happen before all the `-settings` from the command line have been applied.
30+
2431
/** Logger for the 'workbench' package */
2532
public static final Logger logger = Logger.getLogger(WorkbenchPreferences.class.getPackageName());
2633

2734
/** directory of external applications */
2835
@Preference public static File external_apps_directory;
29-
36+
3037
/** Phoebus memento folder name default from $(phoebus.folder.name.preference) System property */
3138
@Preference public static String phoebus_folder_name;
32-
39+
3340
/** Phoebus user home directory contents memento default from $(phoebus.user) System property */
3441
@Preference public static File phoebus_user;
35-
36-
/** external applications */
37-
public static final Collection<String> external_apps;
42+
43+
/** @return external application definitions */
44+
public static Collection<String> getExternalApps()
45+
{
46+
Preferences prefs = Preferences.userNodeForPackage(WorkbenchPreferences.class);
47+
final List<String> external = new ArrayList<>();
48+
try
49+
{
50+
for (String key : prefs.keys())
51+
if (key.startsWith("external_app_"))
52+
external.add(prefs.get(key, ""));
53+
}
54+
catch (Exception ex)
55+
{
56+
logger.log(Level.WARNING, "Cannot read external_app_* entries", ex);
57+
}
58+
return external;
59+
}
3860

3961
static
4062
{
41-
final PreferencesReader prefs = AnnotatedPreferences.initialize(WorkbenchPreferences.class, "/workbench_preferences.properties");
42-
external_apps = prefs.getKeys("external_app_.*").stream().map(prefs::get).collect(Collectors.toList());
63+
AnnotatedPreferences.initialize(WorkbenchPreferences.class, "/workbench_preferences.properties");
4364
}
4465
}

0 commit comments

Comments
 (0)