1
0
Fork 0
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:
David Dykstal 2008-04-06 20:00:22 +00:00
parent e64ccf5b7f
commit 57bf97aa4c
4 changed files with 70 additions and 5 deletions

View file

@ -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

View file

@ -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() {
IStatus status = SystemProfileManager.getDefault().commitSystemProfile(this); boolean scheduled = false;
boolean scheduled = status.isOK(); if (!suspended) {
IStatus status = SystemProfileManager.getDefault().commitSystemProfile(this);
scheduled = status.isOK();
}
return scheduled; return scheduled;
} }

View file

@ -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);

View file

@ -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,