Skip to content

Commit

Permalink
fix: avoid potential use of ProfileManager.getDefault() while creatin…
Browse files Browse the repository at this point in the history
…g that default
  • Loading branch information
rhwood committed Aug 6, 2019
1 parent e41a6bf commit 404f0a9
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 13 deletions.
8 changes: 4 additions & 4 deletions java/src/jmri/profile/ProfileManager.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ protected void saveActiveProfile(@CheckForNull Profile profile, boolean autoStar
os = new FileOutputStream(config); os = new FileOutputStream(config);
p.storeToXML(os, "Active profile configuration (saved at " + (new Date()).toString() + ")"); // NOI18N p.storeToXML(os, "Active profile configuration (saved at " + (new Date()).toString() + ")"); // NOI18N
os.close(); os.close();
} catch (Throwable ex) { // IOException, but also misc errors in Java XML processing } catch (IOException ex) {
log.error("While trying to save active profile {}", config, ex); log.error("While trying to save active profile {}", config, ex);
if (os != null) { if (os != null) {
os.close(); os.close();
Expand Down Expand Up @@ -536,14 +536,14 @@ private void writeProfiles() throws IOException {
this.profiles.stream().map((p) -> { this.profiles.stream().map((p) -> {
Element e = new Element(PROFILE); Element e = new Element(PROFILE);
e.setAttribute(Profile.ID, p.getId()); e.setAttribute(Profile.ID, p.getId());
e.setAttribute(Profile.PATH, FileUtil.getPortableFilename(p.getPath(), true, true)); e.setAttribute(Profile.PATH, FileUtil.getPortableFilename(null, p.getPath(), true, true));
return e; return e;
}).forEach((e) -> { }).forEach((e) -> {
profilesElement.addContent(e); profilesElement.addContent(e);
}); });
this.searchPaths.stream().map((f) -> { this.searchPaths.stream().map((f) -> {
Element e = new Element(Profile.PATH); Element e = new Element(Profile.PATH);
e.setAttribute(Profile.PATH, FileUtil.getPortableFilename(f.getPath(), true, true)); e.setAttribute(Profile.PATH, FileUtil.getPortableFilename(null, f.getPath(), true, true));
e.setAttribute(DEFAULT, Boolean.toString(f.equals(this.defaultSearchPath))); e.setAttribute(DEFAULT, Boolean.toString(f.equals(this.defaultSearchPath)));
return e; return e;
}).forEach((e) -> { }).forEach((e) -> {
Expand Down Expand Up @@ -825,7 +825,7 @@ public void export(@Nonnull Profile profile, @Nonnull File target, boolean expor
InstanceManager.getDefault(RosterConfigManager.class).initialize(profile); InstanceManager.getDefault(RosterConfigManager.class).initialize(profile);
InstanceManager.getDefault(RosterConfigManager.class).initialize(tempProfile); InstanceManager.getDefault(RosterConfigManager.class).initialize(tempProfile);
if (exportExternalUserFiles) { if (exportExternalUserFiles) {
FileUtil.copy(new File(FileUtil.getUserFilesPath()), tempProfilePath); FileUtil.copy(new File(FileUtil.getUserFilesPath(profile)), tempProfilePath);
FileUtil.setUserFilesPath(tempProfile, FileUtil.getProfilePath(tempProfile)); FileUtil.setUserFilesPath(tempProfile, FileUtil.getProfilePath(tempProfile));
InstanceManager.getDefault(FileLocationsPreferences.class).savePreferences(tempProfile); InstanceManager.getDefault(FileLocationsPreferences.class).savePreferences(tempProfile);
} }
Expand Down
7 changes: 3 additions & 4 deletions java/test/jmri/jmrit/roster/RosterTest.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@


import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
Expand Down Expand Up @@ -321,9 +320,8 @@ public void testAttributeList() throws Exception {
public void testDefaultLocation() { public void testDefaultLocation() {
Assert.assertTrue("creates a default", Roster.getDefault() != null); Assert.assertTrue("creates a default", Roster.getDefault() != null);
Assert.assertEquals("always same", Roster.getDefault(), Roster.getDefault()); Assert.assertEquals("always same", Roster.getDefault(), Roster.getDefault());

// Default roster not stored in InstanceManager
// since we created it when we referenced it, should be in InstanceManager Assert.assertNull("registered a default", jmri.InstanceManager.getNullableDefault(Roster.class));
Assert.assertTrue("registered a default", jmri.InstanceManager.getNullableDefault(Roster.class) != null);
} }


@Test @Test
Expand Down Expand Up @@ -408,6 +406,7 @@ public void setUp() {
// use the default reset. // use the default reset.
JUnitUtil.resetProfileManager(); JUnitUtil.resetProfileManager();
} }
JUnitUtil.initRosterConfigManager();
} }


@After @After
Expand Down
1 change: 1 addition & 0 deletions java/test/jmri/jmrit/roster/swing/RosterFrameTest.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -273,6 +273,7 @@ public void setUp() {
jmri.InstanceManager.setDefault(jmri.jmrix.ConnectionConfigManager.class, new jmri.jmrix.ConnectionConfigManager()); jmri.InstanceManager.setDefault(jmri.jmrix.ConnectionConfigManager.class, new jmri.jmrix.ConnectionConfigManager());
jmri.InstanceManager.setDefault(jmri.jmrit.symbolicprog.ProgrammerConfigManager.class, new jmri.jmrit.symbolicprog.ProgrammerConfigManager()); jmri.InstanceManager.setDefault(jmri.jmrit.symbolicprog.ProgrammerConfigManager.class, new jmri.jmrit.symbolicprog.ProgrammerConfigManager());
JUnitUtil.initDebugProgrammerManager(); JUnitUtil.initDebugProgrammerManager();
JUnitUtil.initRosterConfigManager();
Roster.getDefault(); // ensure exists Roster.getDefault(); // ensure exists
if(!GraphicsEnvironment.isHeadless()){ if(!GraphicsEnvironment.isHeadless()){
frame = new RosterFrame(); frame = new RosterFrame();
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -266,6 +266,7 @@ public void testQueryMomentary() {
public void setUp() throws Exception { public void setUp() throws Exception {
JUnitUtil.setUp(); JUnitUtil.setUp();
JUnitUtil.initDebugThrottleManager(); JUnitUtil.initDebugThrottleManager();
JUnitUtil.initRosterConfigManager();
cis = new ControllerInterfaceScaffold(); cis = new ControllerInterfaceScaffold();
tcls = new ThrottleControllerListenerScaffold(); tcls = new ThrottleControllerListenerScaffold();
controller = new MultiThrottleController('A',"test",tcls,cis); controller = new MultiThrottleController('A',"test",tcls,cis);
Expand Down
10 changes: 5 additions & 5 deletions java/test/jmri/jmrix/ecos/EcosLocoAddressManagerTest.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public class EcosLocoAddressManagerTest {
public void testCTor() { public void testCTor() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless()); Assume.assumeFalse(GraphicsEnvironment.isHeadless());
EcosTrafficController tc = new EcosInterfaceScaffold(); EcosTrafficController tc = new EcosInterfaceScaffold();
EcosSystemConnectionMemo memo = new jmri.jmrix.ecos.EcosSystemConnectionMemo(tc){ EcosSystemConnectionMemo memo = new EcosSystemConnectionMemo(tc){
@Override @Override
public EcosPreferences getPreferenceManager(){ public EcosPreferences getPreferenceManager(){
return new EcosPreferences(this){ return new EcosPreferences(this){
Expand All @@ -36,7 +36,7 @@ public boolean getPreferencesLoaded(){
@Test @Test
public void testCTorHeadLess() { public void testCTorHeadLess() {
EcosTrafficController tc = new EcosInterfaceScaffold(); EcosTrafficController tc = new EcosInterfaceScaffold();
EcosSystemConnectionMemo memo = new jmri.jmrix.ecos.EcosSystemConnectionMemo(tc){ EcosSystemConnectionMemo memo = new EcosSystemConnectionMemo(tc){
@Override @Override
public EcosPreferences getPreferenceManager(){ public EcosPreferences getPreferenceManager(){
return new EcosPreferences(this){ return new EcosPreferences(this){
Expand Down Expand Up @@ -76,12 +76,12 @@ public int getRemoveLocoFromJMRI(){
Assert.assertNotNull("exists",t); Assert.assertNotNull("exists",t);
} }


// The minimal setup for log4J
@Before @Before
public void setUp() { public void setUp() {
JUnitUtil.setUp(); JUnitUtil.setUp();
jmri.util.JUnitUtil.resetProfileManager(); JUnitUtil.resetProfileManager();
jmri.util.JUnitUtil.initDefaultUserMessagePreferences(); JUnitUtil.initDefaultUserMessagePreferences();
JUnitUtil.initRosterConfigManager();
} }


@After @After
Expand Down
12 changes: 12 additions & 0 deletions java/test/jmri/util/JUnitUtil.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import jmri.jmrit.display.layoutEditor.LayoutBlockManager; import jmri.jmrit.display.layoutEditor.LayoutBlockManager;
import jmri.jmrit.logix.OBlockManager; import jmri.jmrit.logix.OBlockManager;
import jmri.jmrit.logix.WarrantManager; import jmri.jmrit.logix.WarrantManager;
import jmri.jmrit.roster.RosterConfigManager;
import jmri.jmrix.ConnectionConfigManager; import jmri.jmrix.ConnectionConfigManager;
import jmri.jmrix.debugthrottle.DebugThrottleManager; import jmri.jmrix.debugthrottle.DebugThrottleManager;
import jmri.jmrix.internal.InternalReporterManager; import jmri.jmrix.internal.InternalReporterManager;
Expand Down Expand Up @@ -83,6 +84,7 @@
import jmri.util.managers.SignalMastManagerThrowExceptionScaffold; import jmri.util.managers.SignalMastManagerThrowExceptionScaffold;
import jmri.util.managers.TurnoutManagerThrowExceptionScaffold; import jmri.util.managers.TurnoutManagerThrowExceptionScaffold;
import jmri.util.managers.WarrantManagerThrowExceptionScaffold; import jmri.util.managers.WarrantManagerThrowExceptionScaffold;
import jmri.util.prefs.InitializationException;
import jmri.util.prefs.JmriConfigurationProvider; import jmri.util.prefs.JmriConfigurationProvider;
import jmri.util.prefs.JmriPreferencesProvider; import jmri.util.prefs.JmriPreferencesProvider;
import jmri.util.prefs.JmriUserInterfaceConfigurationProvider; import jmri.util.prefs.JmriUserInterfaceConfigurationProvider;
Expand Down Expand Up @@ -956,6 +958,16 @@ public static void initConnectionConfigManager() {
InstanceManager.setDefault(ConnectionConfigManager.class, new ConnectionConfigManager()); InstanceManager.setDefault(ConnectionConfigManager.class, new ConnectionConfigManager());
} }


public static void initRosterConfigManager() {
RosterConfigManager manager = new RosterConfigManager();
try {
manager.initialize(ProfileManager.getDefault().getActiveProfile());
} catch (InitializationException ex) {
log.error("Failed to initialize RosterConfigManager", ex);
}
InstanceManager.setDefault(RosterConfigManager.class, manager);
}

/* /*
* Use reflection to reset the jmri.Application instance * Use reflection to reset the jmri.Application instance
*/ */
Expand Down

0 comments on commit 404f0a9

Please sign in to comment.