mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-09 09:15:38 +02:00
[200735][Persistence] Delete a profile that contains a connection and restart, profile is back without connections
https://bugs.eclipse.org/bugs/show_bug.cgi?id=200735
This commit is contained in:
parent
e64ccf5b7f
commit
57bf97aa4c
4 changed files with 70 additions and 5 deletions
|
@ -17,6 +17,7 @@
|
|||
* David Dykstal (IBM) - [197036] removed createHost() shortcut (should use ISystemRegistry),
|
||||
* cleaned javadoc for getFilterPools()
|
||||
* 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
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.rse.core.model;
|
||||
|
@ -36,6 +37,7 @@ import org.eclipse.rse.persistence.IRSEPersistenceProvider;
|
|||
* definitions to RSE. When made inactive, it those definition are no longer
|
||||
* available for use.
|
||||
* <p>
|
||||
* @noimplement This interface is not intended to be implemented by clients.
|
||||
*/
|
||||
public interface ISystemProfile extends IRSEModelObject {
|
||||
|
||||
|
@ -104,6 +106,34 @@ public interface ISystemProfile extends IRSEModelObject {
|
|||
*/
|
||||
public void setActive(boolean flag);
|
||||
|
||||
/**
|
||||
* Suspend this profile.
|
||||
* Suspended profiles ignore commit requests.
|
||||
* Profiles are created in a non-suspended state.
|
||||
* Profiles should be suspended while deleting their contents prior to their own deletion.
|
||||
* Note that being non-suspended is a different condition than being active.
|
||||
* A suspended profile may be resumed.
|
||||
* @since 3.0
|
||||
* @see #resume()
|
||||
*/
|
||||
public void suspend();
|
||||
|
||||
/**
|
||||
* Resume this profile from a suspended state.
|
||||
* The profile will now honor commit requests.
|
||||
* @since 3.0
|
||||
* @see #suspend()
|
||||
*/
|
||||
public void resume();
|
||||
|
||||
/**
|
||||
* @return true if the profile is in a suspended state
|
||||
* @since 3.0
|
||||
* @see #suspend()
|
||||
* @see #resume()
|
||||
*/
|
||||
public boolean isSuspended();
|
||||
|
||||
/**
|
||||
* Each profile is persisted by a persistence provider. This returns the instance of the
|
||||
* persistence provider used for this profile. New profiles will use the default persistence
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
* David Dykstal (IBM) - [197036] changed getFilterPools to not force the loading of subsystem configurations
|
||||
* removed createHost, migrated commit logic to SystemProfileManager
|
||||
* 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
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.rse.internal.core.model;
|
||||
|
@ -56,6 +57,12 @@ public class SystemProfile extends RSEModelObject implements ISystemProfile, IAd
|
|||
private String name = null;
|
||||
private boolean defaultPrivate = false;
|
||||
|
||||
/**
|
||||
* A suspended profile ignored commit requests.
|
||||
* Profiles must be suspended prior to being deleted.
|
||||
*/
|
||||
private boolean suspended = false;
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
|
@ -124,6 +131,27 @@ public class SystemProfile extends RSEModelObject implements ISystemProfile, IAd
|
|||
return poolMgr.getSystemFilterPools();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.rse.core.model.ISystemProfile#suspend()
|
||||
*/
|
||||
public void suspend() {
|
||||
suspended = true;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.rse.core.model.ISystemProfile#resume()
|
||||
*/
|
||||
public void resume() {
|
||||
suspended = false;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.rse.core.model.ISystemProfile#isSuspended()
|
||||
*/
|
||||
public boolean isSuspended() {
|
||||
return suspended;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this profile is currently active.
|
||||
*/
|
||||
|
@ -235,8 +263,11 @@ public class SystemProfile extends RSEModelObject implements ISystemProfile, IAd
|
|||
* @see org.eclipse.rse.core.model.IRSEPersistableContainer#commit()
|
||||
*/
|
||||
public boolean commit() {
|
||||
IStatus status = SystemProfileManager.getDefault().commitSystemProfile(this);
|
||||
boolean scheduled = status.isOK();
|
||||
boolean scheduled = false;
|
||||
if (!suspended) {
|
||||
IStatus status = SystemProfileManager.getDefault().commitSystemProfile(this);
|
||||
scheduled = status.isOK();
|
||||
}
|
||||
return scheduled;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
* David Dykstal (IBM) - [197036] added implementation of run() for commit transaction support
|
||||
* 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
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.rse.internal.core.model;
|
||||
|
@ -149,6 +150,7 @@ public class SystemProfileManager implements ISystemProfileManager {
|
|||
public ISystemProfile createSystemProfile(String name, boolean makeActive) {
|
||||
ISystemProfile existingProfile = getSystemProfile(name);
|
||||
if (existingProfile != null) {
|
||||
existingProfile.suspend();
|
||||
deleteSystemProfile(existingProfile, false); // replace the existing one with a new profile
|
||||
}
|
||||
ISystemProfile newProfile = internalCreateSystemProfile(name);
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
* Martin Oberhuber (Wind River) - [215820] Move SystemRegistry implementation to Core
|
||||
* David Dykstal (IBM) - [202630] getDefaultPrivateProfile() and ensureDefaultPrivateProfile() are inconsistent
|
||||
* David McKnight (IBM) - [224313] [api] Create RSE Events for MOVE and COPY holding both source and destination fields
|
||||
* David Dykstal (IBM) - [200735][Persistence] Delete a profile that contains a connection and restart, profile is back without connections
|
||||
********************************************************************************/
|
||||
|
||||
package org.eclipse.rse.internal.core.model;
|
||||
|
@ -591,6 +592,7 @@ public class SystemRegistry implements ISystemRegistry
|
|||
{
|
||||
try
|
||||
{
|
||||
newProfile.suspend();
|
||||
if (newConns != null)
|
||||
for (int idx = 0; idx < newConns.length; idx++)
|
||||
deleteHost(newConns[idx]);
|
||||
|
@ -630,6 +632,7 @@ public class SystemRegistry implements ISystemRegistry
|
|||
ISystemProfile defaultProfile = manager.getDefaultPrivateSystemProfile();
|
||||
if (profile != defaultProfile) {
|
||||
// load everything
|
||||
profile.suspend();
|
||||
loadAll();
|
||||
// remove connections
|
||||
IHost[] connections = getHostsByProfile(profile);
|
||||
|
@ -647,7 +650,8 @@ public class SystemRegistry implements ISystemRegistry
|
|||
manager.deleteSystemProfile(profile, true);
|
||||
// fire events
|
||||
if (connections.length > 0) { // defect 42112
|
||||
fireEvent(new SystemResourceChangeEvent(connections, ISystemResourceChangeEvents.EVENT_DELETE_MANY, this));
|
||||
SystemResourceChangeEvent event = new SystemResourceChangeEvent(connections, ISystemResourceChangeEvents.EVENT_DELETE_MANY, this);
|
||||
fireEvent(event);
|
||||
}
|
||||
fireModelChangeEvent(ISystemModelChangeEvents.SYSTEM_RESOURCE_REMOVED, ISystemModelChangeEvents.SYSTEM_RESOURCETYPE_PROFILE, profile, null);
|
||||
}
|
||||
|
@ -1963,8 +1967,6 @@ public class SystemRegistry implements ISystemRegistry
|
|||
((ISubSystemConfiguration) affectedSubSystemFactories.elementAt(idx)).deleteSubSystemsByConnection(conn);
|
||||
}
|
||||
conn.getHostPool().deleteHost(conn); // delete from memory and from disk.
|
||||
////Listening to Events now
|
||||
//SystemPreferencesManager.setConnectionNamesOrder(); // update preferences order list
|
||||
fireModelChangeEvent(
|
||||
ISystemModelChangeEvents.SYSTEM_RESOURCE_REMOVED,
|
||||
ISystemModelChangeEvents.SYSTEM_RESOURCETYPE_CONNECTION,
|
||||
|
|
Loading…
Add table
Reference in a new issue