You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wookie.apache.org by sc...@apache.org on 2011/04/15 16:21:36 UTC

svn commit: r1092717 - /incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetFactory.java

Author: scottbw
Date: Fri Apr 15 14:21:36 2011
New Revision: 1092717

URL: http://svn.apache.org/viewvc?rev=1092717&view=rev
Log:
Destroy shared data and participants consistently when deleting a widget

Modified:
    incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetFactory.java

Modified: incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetFactory.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetFactory.java?rev=1092717&r1=1092716&r2=1092717&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetFactory.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/helpers/WidgetFactory.java Fri Apr 15 14:21:36 2011
@@ -267,36 +267,33 @@ public class WidgetFactory {
 		IWidgetInstance[] instances = persistenceManager.findByValue(IWidgetInstance.class, "widget", widget);	
 		for(IWidgetInstance instance : instances){
 			
-			// Delete all participants associated with any instances
+			// Delete all participants and shared data associated with any instances
 			//
 			// Note that we don't call this within WidgetInstanceFactory.destroy() as 
 			// if called in a different context (to remove just one instance) it would 
-			// have the side effect of deleting participants from other instances,
+			// have the side effect of deleting participants and shared data from other instances,
 			// not just the one being deleted.
 			//
 			// Note also that we have to use the instance as the hook for removing participants as there is no
 			// specific query for getting participants for a widget.
 			//						
 			IParticipant[] participants = persistenceManager.findParticipants(instance);
-			for (IParticipant participant:participants){
-				persistenceManager.delete(participant);
-			}
-			
+			persistenceManager.delete(participants);
+	        ISharedData[] sharedData =  SharedDataHelper.findSharedData(instance);
+	        persistenceManager.delete(sharedData);
+	        
 			// remove any preferences
 			IPreference[] preferences = persistenceManager.findByValue(IPreference.class, "widgetInstance", instance);
 			persistenceManager.delete(preferences);
 			
 			// remove the instance
 			WidgetInstanceFactory.destroy(instance);
+			
 		}
 
 		// remove any AccessRequests
         IAccessRequest[] accessRequests = persistenceManager.findByValue(IAccessRequest.class, "widget", widget);
         persistenceManager.delete(accessRequests);
-
-        //remove SharedDataEntries
-        ISharedData[] sharedData = persistenceManager.findByValue(ISharedData.class, "widget", widget);
-        persistenceManager.delete(sharedData);
         
 		// remove the widget itself
 		persistenceManager.delete(widget);