diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/RSEInitJob.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/RSEInitJob.java index 78afe547f5d..5d9c0be50cc 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/RSEInitJob.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/RSEInitJob.java @@ -6,6 +6,7 @@ * * Contributors: * David Dykstal (IBM) - [197167] adding notification and waiting for RSE model + * David Dykstal (IBM) - [226728] NPE during init with clean workspace ********************************************************************************/ package org.eclipse.rse.internal.core; @@ -29,6 +30,11 @@ import org.eclipse.osgi.util.NLS; import org.eclipse.rse.core.IRSEInitListener; import org.eclipse.rse.core.IRSEModelInitializer; import org.eclipse.rse.core.RSECorePlugin; +import org.eclipse.rse.core.events.ISystemModelChangeEvent; +import org.eclipse.rse.core.events.ISystemModelChangeEvents; +import org.eclipse.rse.core.model.ISystemProfile; +import org.eclipse.rse.internal.core.model.SystemModelChangeEvent; +import org.eclipse.rse.internal.core.model.SystemProfileManager; import org.eclipse.rse.logging.Logger; /** @@ -170,8 +176,11 @@ public final class RSEInitJob extends Job { */ public IStatus run(IProgressMonitor monitor) { IStatus result = Status.OK_STATUS; - // get and initialize the profile manager - RSECorePlugin.getTheSystemProfileManager(); + // restore profiles + RSECorePlugin.getThePersistenceManager().restoreProfiles(5000); + ISystemProfile defaultProfile = SystemProfileManager.getDefault().getDefaultPrivateSystemProfile(); + ISystemModelChangeEvent event = new SystemModelChangeEvent(ISystemModelChangeEvents.SYSTEM_RESOURCE_ALL_RELOADED, ISystemModelChangeEvents.SYSTEM_RESOURCETYPE_PROFILE, defaultProfile); + RSECorePlugin.getTheSystemRegistry().fireEvent(event); modelPhase.done(); // instantiate and run initializers IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor("org.eclipse.rse.core.modelInitializers"); //$NON-NLS-1$ @@ -282,7 +291,7 @@ public final class RSEInitJob extends Job { waitForCompletion(RSECorePlugin.INIT_ALL); return getResult(); } - + /** * Wait for the completion of a particular phase * @param phase the phase to wait for diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemProfileManager.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemProfileManager.java index d11c3deb95b..af392371eaa 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemProfileManager.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/model/SystemProfileManager.java @@ -21,6 +21,7 @@ * David Dykstal (IBM) - [222376] NPE if starting on a workspace with an old mark and a renamed default profile * David Dykstal (IBM) - [202630] getDefaultPrivateProfile() and ensureDefaultPrivateProfile() are inconsistent * David Dykstal (IBM) - [200735][Persistence] Delete a profile that contains a connection and restart, profile is back without connections + * David Dykstal (IBM) - [226728] NPE during init with clean workspace *******************************************************************************/ package org.eclipse.rse.internal.core.model; @@ -35,6 +36,7 @@ import org.eclipse.rse.core.RSECorePlugin; import org.eclipse.rse.core.RSEPreferencesManager; import org.eclipse.rse.core.model.ISystemProfile; import org.eclipse.rse.core.model.ISystemProfileManager; +import org.eclipse.rse.internal.core.RSEInitJob; import org.eclipse.rse.logging.Logger; import org.eclipse.rse.persistence.IRSEPersistenceProvider; @@ -45,8 +47,7 @@ import org.eclipse.rse.persistence.IRSEPersistenceProvider; public class SystemProfileManager implements ISystemProfileManager { private List _profiles = new ArrayList(10); - private static SystemProfileManager singleton = null; - private boolean restoring = false; + private static SystemProfileManager singleton = new SystemProfileManager(); private boolean active = true; private ISystemProfile defaultProfile = null; @@ -62,24 +63,14 @@ public class SystemProfileManager implements ISystemProfileManager { * @return (and create if necessary) the singleton instance of this class. */ public static SystemProfileManager getDefault() { - if (singleton == null) { - singleton = new SystemProfileManager(); - RSECorePlugin.getThePersistenceManager().restoreProfiles(5000); - singleton.ensureDefaultPrivateProfile(); - singleton.ensureDefaultTeamProfile(); - } return singleton; } - + /** * Clear the default after a team synchronization say */ public static void clearDefault() { - singleton = null; - } - - public void setRestoring(boolean flag) { - restoring = flag; + singleton.forgetProfiles(); } /** @@ -171,6 +162,7 @@ public class SystemProfileManager implements ISystemProfileManager { * @see org.eclipse.rse.core.model.ISystemProfileManager#getSystemProfiles() */ public ISystemProfile[] getSystemProfiles() { + boolean restoring = !RSEInitJob.getInstance().isComplete(RSECorePlugin.INIT_ALL); return getSystemProfiles(restoring); } @@ -409,6 +401,7 @@ public class SystemProfileManager implements ISystemProfileManager { * @see org.eclipse.rse.core.model.ISystemProfileManager#getDefaultPrivateSystemProfile() */ public ISystemProfile getDefaultPrivateSystemProfile() { + ensureDefaultPrivateProfile(); return defaultProfile; } @@ -416,7 +409,9 @@ public class SystemProfileManager implements ISystemProfileManager { * @see org.eclipse.rse.core.model.ISystemProfileManager#getDefaultTeamSystemProfile() */ public ISystemProfile getDefaultTeamSystemProfile() { - return getSystemProfile(RSEPreferencesManager.getDefaultTeamProfileName()); + ensureDefaultTeamProfile(); + ISystemProfile teamProfile = getSystemProfile(RSEPreferencesManager.getDefaultTeamProfileName()); + return teamProfile; } /* (non-Javadoc) @@ -496,6 +491,10 @@ public class SystemProfileManager implements ISystemProfileManager { defaultProfile.setActive(true); // ensure that the default profile is active } + private void forgetProfiles() { + _profiles.clear(); + } + private void ensureDefaultTeamProfile() { String name = RSEPreferencesManager.getDefaultTeamProfileName(); ISystemProfile teamProfile = getSystemProfile(name); diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/persistence/RSEPersistenceManager.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/persistence/RSEPersistenceManager.java index d93a7017fd6..473cdf15173 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/persistence/RSEPersistenceManager.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/persistence/RSEPersistenceManager.java @@ -19,6 +19,7 @@ * Martin Oberhuber (Wind River) - [202416] Protect against NPEs when importing DOM * David Dykstal (IBM) - [189274] provide import and export operations for profiles * David Dykstal (IBM) - [225988] need API to mark persisted profiles as migrated + * David Dykstal (IBM) - [226728] NPE during init with clean workspace ********************************************************************************/ package org.eclipse.rse.internal.persistence; @@ -48,7 +49,6 @@ import org.eclipse.rse.core.model.IRSEPersistableContainer; import org.eclipse.rse.core.model.ISystemProfile; import org.eclipse.rse.core.model.ISystemRegistry; import org.eclipse.rse.internal.core.RSECoreMessages; -import org.eclipse.rse.internal.core.model.SystemProfileManager; import org.eclipse.rse.internal.persistence.dom.RSEDOMExporter; import org.eclipse.rse.internal.persistence.dom.RSEDOMImporter; import org.eclipse.rse.logging.Logger; @@ -413,13 +413,11 @@ public class RSEPersistenceManager implements IRSEPersistenceManager { try { RSEDOM dom = provider.loadRSEDOM(profileName, new NullProgressMonitor()); if (dom != null) { - SystemProfileManager.getDefault().setRestoring(true); profile = _importer.restoreProfile(dom); if (profile!=null) { profile.setPersistenceProvider(provider); cleanTree(profile); } - SystemProfileManager.getDefault().setRestoring(false); } } finally { mutex.release(); diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewPart.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewPart.java index 95501b56b91..8f62ebf4c95 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewPart.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewPart.java @@ -28,6 +28,7 @@ * Martin Oberhuber (Wind River) - [197025][197167] Improved wait for model complete * David McKnight (IBM) - [199424] restoring memento state asynchronously * David McKnight (IBM) - [187711] Link with Editor handled by extension + * David Dykstal (IBM) - [226728] NPE during init with clean workspace *******************************************************************************/ package org.eclipse.rse.internal.ui.view; @@ -79,6 +80,7 @@ import org.eclipse.rse.core.model.ISystemRegistry; import org.eclipse.rse.core.model.ISystemViewInputProvider; import org.eclipse.rse.core.subsystems.ISubSystem; import org.eclipse.rse.core.subsystems.ISubSystemConfiguration; +import org.eclipse.rse.internal.core.RSEInitJob; import org.eclipse.rse.internal.ui.actions.SystemCascadingPreferencesAction; import org.eclipse.rse.internal.ui.actions.SystemCollapseAllAction; import org.eclipse.rse.internal.ui.actions.SystemPreferenceQualifyConnectionNamesAction; @@ -404,14 +406,7 @@ public class SystemViewPart // ---------------------- // Restore previous state // ---------------------- - Job initRSEJob = null; - Job[] jobs = Job.getJobManager().find(null); - for(int i=0; i