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),
|
* David Dykstal (IBM) - [197036] removed createHost() shortcut (should use ISystemRegistry),
|
||||||
* cleaned javadoc for getFilterPools()
|
* cleaned javadoc for getFilterPools()
|
||||||
* David Dykstal (IBM) - [202630] getDefaultPrivateProfile() and ensureDefaultPrivateProfile() are inconsistent
|
* 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;
|
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
|
* definitions to RSE. When made inactive, it those definition are no longer
|
||||||
* available for use.
|
* available for use.
|
||||||
* <p>
|
* <p>
|
||||||
|
* @noimplement This interface is not intended to be implemented by clients.
|
||||||
*/
|
*/
|
||||||
public interface ISystemProfile extends IRSEModelObject {
|
public interface ISystemProfile extends IRSEModelObject {
|
||||||
|
|
||||||
|
@ -104,6 +106,34 @@ public interface ISystemProfile extends IRSEModelObject {
|
||||||
*/
|
*/
|
||||||
public void setActive(boolean flag);
|
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
|
* 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
|
* 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
|
* David Dykstal (IBM) - [197036] changed getFilterPools to not force the loading of subsystem configurations
|
||||||
* removed createHost, migrated commit logic to SystemProfileManager
|
* removed createHost, migrated commit logic to SystemProfileManager
|
||||||
* David Dykstal (IBM) - [202630] getDefaultPrivateProfile() and ensureDefaultPrivateProfile() are inconsistent
|
* 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;
|
package org.eclipse.rse.internal.core.model;
|
||||||
|
@ -56,6 +57,12 @@ public class SystemProfile extends RSEModelObject implements ISystemProfile, IAd
|
||||||
private String name = null;
|
private String name = null;
|
||||||
private boolean defaultPrivate = false;
|
private boolean defaultPrivate = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A suspended profile ignored commit requests.
|
||||||
|
* Profiles must be suspended prior to being deleted.
|
||||||
|
*/
|
||||||
|
private boolean suspended = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor
|
* Default constructor
|
||||||
*/
|
*/
|
||||||
|
@ -124,6 +131,27 @@ public class SystemProfile extends RSEModelObject implements ISystemProfile, IAd
|
||||||
return poolMgr.getSystemFilterPools();
|
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.
|
* 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()
|
* @see org.eclipse.rse.core.model.IRSEPersistableContainer#commit()
|
||||||
*/
|
*/
|
||||||
public boolean commit() {
|
public boolean commit() {
|
||||||
|
boolean scheduled = false;
|
||||||
|
if (!suspended) {
|
||||||
IStatus status = SystemProfileManager.getDefault().commitSystemProfile(this);
|
IStatus status = SystemProfileManager.getDefault().commitSystemProfile(this);
|
||||||
boolean scheduled = status.isOK();
|
scheduled = status.isOK();
|
||||||
|
}
|
||||||
return scheduled;
|
return scheduled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
* David Dykstal (IBM) - [197036] added implementation of run() for commit transaction support
|
* 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) - [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) - [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;
|
package org.eclipse.rse.internal.core.model;
|
||||||
|
@ -149,6 +150,7 @@ public class SystemProfileManager implements ISystemProfileManager {
|
||||||
public ISystemProfile createSystemProfile(String name, boolean makeActive) {
|
public ISystemProfile createSystemProfile(String name, boolean makeActive) {
|
||||||
ISystemProfile existingProfile = getSystemProfile(name);
|
ISystemProfile existingProfile = getSystemProfile(name);
|
||||||
if (existingProfile != null) {
|
if (existingProfile != null) {
|
||||||
|
existingProfile.suspend();
|
||||||
deleteSystemProfile(existingProfile, false); // replace the existing one with a new profile
|
deleteSystemProfile(existingProfile, false); // replace the existing one with a new profile
|
||||||
}
|
}
|
||||||
ISystemProfile newProfile = internalCreateSystemProfile(name);
|
ISystemProfile newProfile = internalCreateSystemProfile(name);
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
* Martin Oberhuber (Wind River) - [215820] Move SystemRegistry implementation to Core
|
* Martin Oberhuber (Wind River) - [215820] Move SystemRegistry implementation to Core
|
||||||
* David Dykstal (IBM) - [202630] getDefaultPrivateProfile() and ensureDefaultPrivateProfile() are inconsistent
|
* 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 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;
|
package org.eclipse.rse.internal.core.model;
|
||||||
|
@ -591,6 +592,7 @@ public class SystemRegistry implements ISystemRegistry
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
newProfile.suspend();
|
||||||
if (newConns != null)
|
if (newConns != null)
|
||||||
for (int idx = 0; idx < newConns.length; idx++)
|
for (int idx = 0; idx < newConns.length; idx++)
|
||||||
deleteHost(newConns[idx]);
|
deleteHost(newConns[idx]);
|
||||||
|
@ -630,6 +632,7 @@ public class SystemRegistry implements ISystemRegistry
|
||||||
ISystemProfile defaultProfile = manager.getDefaultPrivateSystemProfile();
|
ISystemProfile defaultProfile = manager.getDefaultPrivateSystemProfile();
|
||||||
if (profile != defaultProfile) {
|
if (profile != defaultProfile) {
|
||||||
// load everything
|
// load everything
|
||||||
|
profile.suspend();
|
||||||
loadAll();
|
loadAll();
|
||||||
// remove connections
|
// remove connections
|
||||||
IHost[] connections = getHostsByProfile(profile);
|
IHost[] connections = getHostsByProfile(profile);
|
||||||
|
@ -647,7 +650,8 @@ public class SystemRegistry implements ISystemRegistry
|
||||||
manager.deleteSystemProfile(profile, true);
|
manager.deleteSystemProfile(profile, true);
|
||||||
// fire events
|
// fire events
|
||||||
if (connections.length > 0) { // defect 42112
|
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);
|
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);
|
((ISubSystemConfiguration) affectedSubSystemFactories.elementAt(idx)).deleteSubSystemsByConnection(conn);
|
||||||
}
|
}
|
||||||
conn.getHostPool().deleteHost(conn); // delete from memory and from disk.
|
conn.getHostPool().deleteHost(conn); // delete from memory and from disk.
|
||||||
////Listening to Events now
|
|
||||||
//SystemPreferencesManager.setConnectionNamesOrder(); // update preferences order list
|
|
||||||
fireModelChangeEvent(
|
fireModelChangeEvent(
|
||||||
ISystemModelChangeEvents.SYSTEM_RESOURCE_REMOVED,
|
ISystemModelChangeEvents.SYSTEM_RESOURCE_REMOVED,
|
||||||
ISystemModelChangeEvents.SYSTEM_RESOURCETYPE_CONNECTION,
|
ISystemModelChangeEvents.SYSTEM_RESOURCETYPE_CONNECTION,
|
||||||
|
|
Loading…
Add table
Reference in a new issue