Author: scottbw
Date: Tue Jan 31 21:57:39 2012
New Revision: 1238828

URL: http://svn.apache.org/viewvc?rev=1238828&view=rev
Log:
To try and work around the issues with stale collections of Preference objects 
I changed the WidgetAPIImpl and IWidgetInstance.Utilities classes to load the 
IPreference instances directly from the PersistenceManager rather than use 
widgetInstance.getPreferences(), which doesn't always seem to contain fresh 
data. This addresses WOOKIE-306 for now, however longer term we need to get to 
the root of all these various JPA-related issues.

Modified:
    
incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java
    incubator/wookie/trunk/src/org/apache/wookie/beans/IWidgetInstance.java

Modified: 
incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java?rev=1238828&r1=1238827&r2=1238828&view=diff
==============================================================================
--- 
incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java 
(original)
+++ 
incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java 
Tue Jan 31 21:57:39 2012
@@ -54,16 +54,17 @@ public class WidgetAPIImpl implements IW
         * @see 
org.apache.wookie.ajaxmodel.IWidgetAPI#preferences(java.lang.String)
         */
        public List<IPreference> preferences(String id_key) {
-               ArrayList<IPreference> prefs = new ArrayList<IPreference>();
-               if(id_key == null) return prefs;
-               // check if instance is valid
-               IPersistenceManager persistenceManager = 
PersistenceManagerFactory.getPersistenceManager();
-               IWidgetInstance widgetInstance = 
persistenceManager.findWidgetInstanceByIdKey(id_key);
-               if(widgetInstance==null) return prefs;
-               for(IPreference preference : widgetInstance.getPreferences()){
-                       prefs.add(new PreferenceDelegate(preference));
-               }
-               return prefs;
+         ArrayList<IPreference> prefs = new ArrayList<IPreference>();
+         if(id_key == null) return prefs;
+         // check if instance is valid
+         IPersistenceManager persistenceManager = 
PersistenceManagerFactory.getPersistenceManager();
+         IWidgetInstance widgetInstance = 
persistenceManager.findWidgetInstanceByIdKey(id_key);
+         if(widgetInstance==null) return prefs;
+         IPreference[] preferences = 
persistenceManager.findByValue(IPreference.class, "widgetInstance", 
widgetInstance);
+         for (IPreference pref: preferences){
+           prefs.add(new PreferenceDelegate(pref));              
+         }
+         return prefs;
        }
 
        /* (non-Javadoc)

Modified: 
incubator/wookie/trunk/src/org/apache/wookie/beans/IWidgetInstance.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/beans/IWidgetInstance.java?rev=1238828&r1=1238827&r2=1238828&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/IWidgetInstance.java 
(original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/IWidgetInstance.java Tue 
Jan 31 21:57:39 2012
@@ -15,7 +15,11 @@
 package org.apache.wookie.beans;
 
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
 import org.apache.wookie.w3c.ILocalizedElement;
 
 /**
@@ -216,22 +220,21 @@ public interface IWidgetInstance extends
     public static class Utilities
     {
 
-        /**
-         * Get preference with specified key for widget instance.
-         * 
-         * @param key shared data key
-         * @return shared data
-         */
-        public static IPreference getPreference(IWidgetInstance 
widgetInstance, String key)
-        {
-            for (IPreference preference : widgetInstance.getPreferences())
-            {
-                if (preference.getDkey().equals(key))
-                {
-                    return preference;
-                }
-            }
-            return null;
-        }
+      /**
+       * Get preference with specified key for widget instance.
+       * 
+       * @param key shared data key
+       * @return shared data
+       */
+      public static IPreference getPreference(IWidgetInstance widgetInstance, 
String key)
+      {
+        IPersistenceManager persistenceManager = 
PersistenceManagerFactory.getPersistenceManager();
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("widgetInstance", widgetInstance);//$NON-NLS-1$
+        map.put("dkey", key);//$NON-NLS-1$
+        IPreference[] preference = 
persistenceManager.findByValues(IPreference.class, map);
+        if (preference.length == 1) return preference[0];
+        return null;
+      }
     }
 }


Reply via email to