From ccc1549df4787c584cfdca4e4b5c6f4b8d36c848 Mon Sep 17 00:00:00 2001 From: David McKnight Date: Fri, 31 Aug 2007 14:13:39 +0000 Subject: [PATCH] merges from IBM RSE --- .../eclipse/dstore/core/model/DataStore.java | 4 +++- .../dstore/core/model/UpdateHandler.java | 10 ++++++++- .../core/util/DataElementRemover.java | 22 ++++++++++++++++--- .../dstore/universal/miners/CommandMiner.java | 1 + .../miners/command/CommandMinerThread.java | 17 ++++++++++++++ 5 files changed, 49 insertions(+), 5 deletions(-) diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStore.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStore.java index aa2bfc25620..42979dcfad8 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStore.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStore.java @@ -3753,7 +3753,7 @@ public final class DataStore for (int i = 0; i < toDelete.getNestedSize(); i++) { DataElement subDelete = toDelete.get(i); - if (subDelete != null && subDelete.getDataStore() == this && !subDelete.isDeleted()) + if (subDelete != null && subDelete.getDataStore() == this/* && !subDelete.isDeleted()*/) // on server, spirited are considered deleted { deleteObjectHelper(toDelete, subDelete, depth); } @@ -4201,4 +4201,6 @@ public final class DataStore { referenceTag = tag; } + + } diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/UpdateHandler.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/UpdateHandler.java index 746d443a0dc..bac9641a218 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/UpdateHandler.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/UpdateHandler.java @@ -78,9 +78,17 @@ public abstract class UpdateHandler extends Handler DataElement child = (DataElement) deletedList.get(i); if (child != null && child.isDeleted()) { + clean(child, depth - 1); DataElement parent = child.getParent(); - if (child.isSpirit()) DataElementRemover.addToRemovedCount(); + DataElementRemover.addToRemovedCount(); + + if (child.isSpirit()) + { + // officially delete this now + child.delete(); + } child.clear(); + if (parent != null) { parent.removeNestedData(child); diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/DataElementRemover.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/DataElementRemover.java index 6b41c718ea0..cd95f9c81e8 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/DataElementRemover.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/util/DataElementRemover.java @@ -18,6 +18,7 @@ package org.eclipse.dstore.internal.core.util; import java.util.LinkedList; +import java.util.List; import org.eclipse.dstore.core.model.DataElement; import org.eclipse.dstore.core.model.DataStore; @@ -38,8 +39,8 @@ public class DataElementRemover extends Handler // that are older than _expiryTime milliseconds are removed. public static final int DEFAULT_EXPIRY_TIME = 600; // in seconds public static final int DEFAULT_INTERVAL_TIME = 60; // in seconds - private int _intervalTime = DEFAULT_INTERVAL_TIME * 1000; - private int _expiryTime = DEFAULT_EXPIRY_TIME * 1000; + private int _intervalTime = DEFAULT_INTERVAL_TIME * 100; + private int _expiryTime = DEFAULT_EXPIRY_TIME * 100; public static final String EXPIRY_TIME_PROPERTY_NAME = "SPIRIT_EXPIRY_TIME"; //$NON-NLS-1$ public static final String INTERVAL_TIME_PROPERTY_NAME = "SPIRIT_INTERVAL_TIME"; //$NON-NLS-1$ @@ -149,7 +150,7 @@ public class DataElementRemover extends Handler { //_dataStore.memLog(toBeDisconnected.toString()); } - _dataStore.getHashMap().remove(toBeDisconnected.getId()); + unmap(toBeDisconnected); } _dataStore.memLog("Disconnected " + disconnected + " DataElements."); //$NON-NLS-1$ //$NON-NLS-2$ _dataStore.memLog("Elements created so far: " + numCreated); //$NON-NLS-1$ @@ -159,6 +160,21 @@ public class DataElementRemover extends Handler } } + private void unmap(DataElement element) + { + List children = element.getNestedData(); + if (children != null) + { + for (int i = 0; i < children.size(); i++) + { + DataElement child = (DataElement)children.get(i); + unmap(child); + } + } + _dataStore.getHashMap().remove(element.getId()); + } + + protected class QueueItem { public DataElement dataElement; diff --git a/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/dstore/universal/miners/CommandMiner.java b/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/dstore/universal/miners/CommandMiner.java index 6b342263e2c..40baeea03ed 100644 --- a/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/dstore/universal/miners/CommandMiner.java +++ b/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/dstore/universal/miners/CommandMiner.java @@ -203,6 +203,7 @@ public class CommandMiner extends Miner // DataElement de = (DataElement) subject.dereference().get(1); subject.dereference().get(1); sendInputToCommand(input.getName(), getCommandStatus(subject)); + status.setAttribute(DE.A_NAME, "done"); } else if (name.equals("C_CANCEL")) //$NON-NLS-1$ { diff --git a/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/internal/dstore/universal/miners/command/CommandMinerThread.java b/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/internal/dstore/universal/miners/command/CommandMinerThread.java index a08c0c4f6cf..78cb12e2d77 100644 --- a/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/internal/dstore/universal/miners/command/CommandMinerThread.java +++ b/rse/plugins/org.eclipse.rse.services.dstore/miners/org/eclipse/rse/internal/dstore/universal/miners/command/CommandMinerThread.java @@ -835,6 +835,23 @@ public class CommandMinerThread extends MinerThread public void cleanupThread() { + // disconnecting all + _dataStore.disconnectObjects(_status); + + + // clean up the associated environment + List projectEnvReference = _subject.getAssociated("inhabits"); //$NON-NLS-1$ + + if (projectEnvReference != null) + { + DataElement env = (DataElement)projectEnvReference.get(0); + DataElement envParent = env.getParent(); + _dataStore.deleteObject(envParent, env); + _dataStore.refresh(envParent); + } + _dataStore.disconnectObject(_subject); //bug 70420 + + refreshStatus(); /* if (_isShell)