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 14:17:42 UTC

svn commit: r1092677 - in /incubator/wookie/trunk: etc/ddl-schema/ src-tests/org/apache/wookie/tests/beans/ src/org/apache/wookie/beans/ src/org/apache/wookie/beans/jcr/ src/org/apache/wookie/beans/jcr/impl/ src/org/apache/wookie/beans/jpa/ src/org/apa...

Author: scottbw
Date: Fri Apr 15 12:17:42 2011
New Revision: 1092677

URL: http://svn.apache.org/viewvc?rev=1092677&view=rev
Log:
Refactored to remove a lot of code relating SharedData and Participants directly to Widgets and WidgetInstances and replaced with a single "SharedDataHelper" service facade to manage all access to shared data - this means we consistently manage the relationship via the internal shared data key which is constructed in a single way. See WOOKIE-206.

Added:
    incubator/wookie/trunk/src/org/apache/wookie/helpers/SharedDataHelper.java
Modified:
    incubator/wookie/trunk/etc/ddl-schema/wookie-schema.xml
    incubator/wookie/trunk/src-tests/org/apache/wookie/tests/beans/AbstractPersistenceTest.java
    incubator/wookie/trunk/src/org/apache/wookie/beans/IParticipant.java
    incubator/wookie/trunk/src/org/apache/wookie/beans/IWidget.java
    incubator/wookie/trunk/src/org/apache/wookie/beans/IWidgetInstance.java
    incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/impl/WidgetImpl.java
    incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/wookie-schema.cnd
    incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/JPAPersistenceManager.java
    incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/impl/ParticipantImpl.java
    incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/impl/WidgetImpl.java
    incubator/wookie/trunk/src/org/apache/wookie/controller/ParticipantsController.java
    incubator/wookie/trunk/src/org/apache/wookie/controller/PropertiesController.java
    incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetInstancesController.java

Modified: incubator/wookie/trunk/etc/ddl-schema/wookie-schema.xml
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/etc/ddl-schema/wookie-schema.xml?rev=1092677&r1=1092676&r2=1092677&view=diff
==============================================================================
--- incubator/wookie/trunk/etc/ddl-schema/wookie-schema.xml (original)
+++ incubator/wookie/trunk/etc/ddl-schema/wookie-schema.xml Fri Apr 15 12:17:42 2011
@@ -179,13 +179,6 @@
     <column name="participant_display_name" required="true" size="255" type="VARCHAR"/>
     <column name="participant_thumbnail_url" size="1024" type="VARCHAR"/>
     <column name="sharedDataKey" required="true" size="255" type="VARCHAR"/>
-    <column name="widget_id" required="true" type="INTEGER"/>
-    <foreign-key foreignTable="Widget" name="FKParticipant1">
-      <reference foreign="id" local="widget_id"/>
-    </foreign-key>
-    <index name="IXParticipant1">
-      <index-column name="widget_id"/>
-    </index>
   </table>
 
   <table name="Preference">

Modified: incubator/wookie/trunk/src-tests/org/apache/wookie/tests/beans/AbstractPersistenceTest.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src-tests/org/apache/wookie/tests/beans/AbstractPersistenceTest.java?rev=1092677&r1=1092676&r2=1092677&view=diff
==============================================================================
--- incubator/wookie/trunk/src-tests/org/apache/wookie/tests/beans/AbstractPersistenceTest.java (original)
+++ incubator/wookie/trunk/src-tests/org/apache/wookie/tests/beans/AbstractPersistenceTest.java Fri Apr 15 12:17:42 2011
@@ -162,7 +162,7 @@ public abstract class AbstractPersistenc
 
         // create participant
         IParticipant participant = persistenceManager.newInstance(IParticipant.class);
-        participant.setWidget(widget);
+        //participant.setWidget(widget);
         participant.setSharedDataKey("test-shared-data-key");
         participant.setParticipantId("test");
         participant.setParticipantDisplayName("");

Modified: incubator/wookie/trunk/src/org/apache/wookie/beans/IParticipant.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/beans/IParticipant.java?rev=1092677&r1=1092676&r2=1092677&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/IParticipant.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/IParticipant.java Fri Apr 15 12:17:42 2011
@@ -38,20 +38,6 @@ public interface IParticipant extends IB
     void setSharedDataKey(String sharedDataKey);
 
     /**
-     * Get owning widget instance.
-     * 
-     * @return widget instance
-     */
-    IWidget getWidget();
-
-    /**
-     * Set owning widget instance.
-     * 
-     * @param widget widget instance
-     */
-    void setWidget(IWidget widget);
-
-    /**
      * Get participant id.
      * 
      * @return participant id

Modified: incubator/wookie/trunk/src/org/apache/wookie/beans/IWidget.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/beans/IWidget.java?rev=1092677&r1=1092676&r2=1092677&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/IWidget.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/IWidget.java Fri Apr 15 12:17:42 2011
@@ -249,20 +249,6 @@ public interface IWidget extends ILocali
      * @param preferenceDefaults preference defaults collection
      */
     void setPreferenceDefaults(Collection<IPreferenceDefault> preferenceDefaults);
-
-    /**
-     * Get collection of shared data for this widget.
-     * 
-     * @return shared data collection
-     */
-    Collection<ISharedData> getSharedData();
-    
-    /**
-     * Set collection of shared data for this widget.
-     * 
-     * @param sharedData shared data collection
-     */
-    void setSharedData(Collection<ISharedData> sharedData);
     
     /**
      * Get default widget title, (deprecated in favor of locale specifying APIs).
@@ -296,23 +282,6 @@ public interface IWidget extends ILocali
     String getWidgetShortName();
     
     /**
-     * Get shared data with specified key for widget.
-     * 
-     * @param sharedDataKey shared data key
-     * @return shared data
-     */
-    ISharedData [] getSharedData(String sharedDataKey);
-    
-    /**
-     * Get shared data with specified key and name for widget.
-     * 
-     * @param sharedDataKey shared data key
-     * @param name shared data name
-     * @return shared data
-     */
-    ISharedData getSharedData(String sharedDataKey, String name);
-    
-    /**
      * Get default start file url, (deprecated in favor of locale specifying APIs).
      * 
      * @return start file url
@@ -386,46 +355,6 @@ public interface IWidget extends ILocali
             IName name = (IName)LocalizationUtils.getLocalizedElement(names, new String[]{locale});
             return ((name != null) ? WidgetFormattingUtils.getFormattedWidgetShortName(name) : IW3CXMLConfiguration.UNKNOWN);
         }
-        
-        /**
-         * Get shared data with specified key for widget.
-         * 
-         * @param widget widget
-         * @param sharedDataKey shared data key
-         * @return shared data array
-         */
-        public static ISharedData [] getSharedData(IWidget widget, String sharedDataKey)
-        {
-            List<ISharedData> sharedDataList = new ArrayList<ISharedData>();
-            for (ISharedData sharedData : widget.getSharedData())
-            {
-                if (sharedData.getSharedDataKey().equals(sharedDataKey))
-                {
-                    sharedDataList.add(sharedData);
-                }
-            }
-            return sharedDataList.toArray(new ISharedData[sharedDataList.size()]);
-        }
-
-        /**
-         * Get shared data with specified key and name for widget.
-         * 
-         * @param widget widget
-         * @param sharedDataKey shared data key
-         * @param name shared data name
-         * @return shared data or null
-         */
-        public static ISharedData getSharedData(IWidget widget, String sharedDataKey, String name)
-        {
-            for (ISharedData sharedData : widget.getSharedData())
-            {
-                if (sharedData.getSharedDataKey().equals(sharedDataKey) && sharedData.getDkey().equals(name))
-                {
-                    return sharedData;
-                }
-            }
-            return null;
-        }
 
         /**
          * Get widget start file url for locale.

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=1092677&r1=1092676&r2=1092677&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/IWidgetInstance.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/IWidgetInstance.java Fri Apr 15 12:17:42 2011
@@ -16,6 +16,7 @@ package org.apache.wookie.beans;
 
 import java.util.Collection;
 
+import org.apache.wookie.helpers.SharedDataHelper;
 import org.apache.wookie.w3c.ILocalizedElement;
 
 /**
@@ -252,7 +253,7 @@ public interface IWidgetInstance extends
          */
         public static ISharedData [] getSharedData(IWidgetInstance widgetInstance)
         {
-            return widgetInstance.getWidget().getSharedData(widgetInstance.getSharedDataKey());            
+            return SharedDataHelper.findSharedData(widgetInstance);
         }
 
         /**
@@ -264,7 +265,7 @@ public interface IWidgetInstance extends
          */
         public static ISharedData getSharedData(IWidgetInstance widgetInstance, String name)
         {
-            return widgetInstance.getWidget().getSharedData(widgetInstance.getSharedDataKey(), name);
+        	return SharedDataHelper.findSharedData(widgetInstance, name);
         }
 
         /**

Modified: incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/impl/WidgetImpl.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/impl/WidgetImpl.java?rev=1092677&r1=1092676&r2=1092677&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/impl/WidgetImpl.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/impl/WidgetImpl.java Fri Apr 15 12:17:42 2011
@@ -98,9 +98,6 @@ public class WidgetImpl extends Localize
     @org.apache.jackrabbit.ocm.mapper.impl.annotation.Collection(jcrName="wookie:preferenceDefaults", elementClassName=PreferenceDefaultImpl.class)
     private Collection<PreferenceDefaultImpl> preferenceDefaultImpls;
     
-    @org.apache.jackrabbit.ocm.mapper.impl.annotation.Collection(jcrName="wookie:sharedData", elementClassName=SharedDataImpl.class)
-    private Collection<SharedDataImpl> sharedDataImpls;
-    
     /* (non-Javadoc)
      * @see org.apache.wookie.beans.IWidget#getPackagePath()
      */
@@ -431,53 +428,6 @@ public class WidgetImpl extends Localize
     }
 
     /* (non-Javadoc)
-     * @see org.apache.wookie.beans.IWidget#getSharedData()
-     */
-    public Collection<ISharedData> getSharedData()
-    {
-        if (sharedDataImpls == null)
-        {
-            sharedDataImpls = new ArrayList<SharedDataImpl>();
-        }
-        return new IdCollection<SharedDataImpl,ISharedData>(sharedDataImpls);
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.wookie.beans.IWidget#setSharedData(java.util.Collection)
-     */
-    public void setSharedData(Collection<ISharedData> sharedData)
-    {
-        getSharedData().clear();
-        if (sharedData != null)
-        {
-            for (ISharedData data : sharedData)
-            {
-                getSharedData().add((SharedDataImpl)data);
-            }
-        }
-    }
-
-    /**
-     * Get shared data implementations collection.
-     * 
-     * @return shared data implementations collection
-     */
-    public Collection<SharedDataImpl> getSharedDataImpls()
-    {
-        return sharedDataImpls;
-    }
-
-    /**
-     * Set shared data implementations collection.
-     * 
-     * @param sharedDataImpls shared data implementations collection
-     */
-    public void setSharedDataImpls(Collection<SharedDataImpl> sharedDataImpls)
-    {
-        this.sharedDataImpls = sharedDataImpls;
-    }
-
-    /* (non-Javadoc)
      * @see org.apache.wookie.beans.IWidget#getStartFiles()
      */
     public Collection<IStartFile> getStartFiles()
@@ -715,22 +665,6 @@ public class WidgetImpl extends Localize
     }
 
     /* (non-Javadoc)
-     * @see org.apache.wookie.beans.IWidget#getSharedData(java.lang.String)
-     */
-    public ISharedData [] getSharedData(String sharedDataKey)
-    {
-        return Utilities.getSharedData(this, sharedDataKey);
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.wookie.beans.IWidget#getSharedData(java.lang.String, java.lang.String)
-     */
-    public ISharedData getSharedData(String sharedDataKey, String name)
-    {
-        return Utilities.getSharedData(this, sharedDataKey, name);
-    }
-
-    /* (non-Javadoc)
      * @see org.apache.wookie.beans.IWidget#getWidgetDescription()
      */
     public String getWidgetDescription()

Modified: incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/wookie-schema.cnd
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/wookie-schema.cnd?rev=1092677&r1=1092676&r2=1092677&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/wookie-schema.cnd (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/jcr/wookie-schema.cnd Fri Apr 15 12:17:42 2011
@@ -97,7 +97,6 @@
 + wookie:descriptions (nt:unstructured) = nt:unstructured
 + wookie:startFiles (nt:unstructured) = nt:unstructured
 + wookie:preferenceDefaults (nt:unstructured) = nt:unstructured
-+ wookie:sharedData (nt:unstructured) = nt:unstructured
 
 [wookie:accessRequest] > nt:base
 - wookie:elementId (long)

Modified: incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/JPAPersistenceManager.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/JPAPersistenceManager.java?rev=1092677&r1=1092676&r2=1092677&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/JPAPersistenceManager.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/JPAPersistenceManager.java Fri Apr 15 12:17:42 2011
@@ -688,7 +688,6 @@ public class JPAPersistenceManager imple
                 IWidget widget = widgetInstance.getWidget();
                 Query query = entityManager.createNamedQuery("PARTICIPANTS");
                 query.setParameter("sharedDataKey", sharedDataKey);
-                query.setParameter("widget", widget);
                 List<IParticipant> participantsList = query.getResultList();
                 if ((participantsList != null) && !participantsList.isEmpty())
                 {
@@ -724,7 +723,6 @@ public class JPAPersistenceManager imple
                 String userId = widgetInstance.getUserId();
                 Query query = entityManager.createNamedQuery("PARTICIPANT_VIEWER");
                 query.setParameter("sharedDataKey", sharedDataKey);
-                query.setParameter("widget", widget);
                 query.setParameter("userId", userId);
                 return (IParticipant)query.getSingleResult();
             }

Modified: incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/impl/ParticipantImpl.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/impl/ParticipantImpl.java?rev=1092677&r1=1092676&r2=1092677&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/impl/ParticipantImpl.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/impl/ParticipantImpl.java Fri Apr 15 12:17:42 2011
@@ -17,19 +17,15 @@ package org.apache.wookie.beans.jpa.impl
 import javax.persistence.Basic;
 import javax.persistence.Column;
 import javax.persistence.Entity;
-import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
 import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 import javax.persistence.Version;
 
 import org.apache.wookie.beans.IParticipant;
-import org.apache.wookie.beans.IWidget;
 
 /**
  * ParticipantImpl - JPA IParticipant implementation.
@@ -39,8 +35,8 @@ import org.apache.wookie.beans.IWidget;
  */
 @Entity(name="Participant")
 @Table(name="Participant")
-@NamedQueries({@NamedQuery(name="PARTICIPANTS", query="SELECT p FROM Participant p WHERE p.sharedDataKey = :sharedDataKey AND p.widget = :widget"),
-               @NamedQuery(name="PARTICIPANT_VIEWER", query="SELECT p FROM Participant p WHERE p.sharedDataKey = :sharedDataKey AND p.widget = :widget AND p.participantId = :userId")})
+@NamedQueries({@NamedQuery(name="PARTICIPANTS", query="SELECT p FROM Participant p WHERE p.sharedDataKey = :sharedDataKey"),
+               @NamedQuery(name="PARTICIPANT_VIEWER", query="SELECT p FROM Participant p WHERE p.sharedDataKey = :sharedDataKey AND p.participantId = :userId")})
 public class ParticipantImpl implements IParticipant
 {
     @Id
@@ -69,10 +65,6 @@ public class ParticipantImpl implements 
     @Column(name="sharedDataKey", nullable=false)
     private String sharedDataKey;
 
-    @ManyToOne(fetch=FetchType.LAZY, optional=false)
-    @JoinColumn(name="widget_id", referencedColumnName="id", nullable=false)
-    private WidgetImpl widget;
-
     /* (non-Javadoc)
      * @see org.apache.wookie.beans.IBean#getId()
      */
@@ -144,20 +136,4 @@ public class ParticipantImpl implements 
     {
         this.sharedDataKey = sharedDataKey;
     }
-
-    /* (non-Javadoc)
-     * @see org.apache.wookie.beans.IParticipant#getWidget()
-     */
-    public IWidget getWidget()
-    {
-        return widget;
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.wookie.beans.IParticipant#setWidget(org.apache.wookie.beans.IWidget)
-     */
-    public void setWidget(IWidget widget)
-    {
-        this.widget = (WidgetImpl)widget;
-    }
 }

Modified: incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/impl/WidgetImpl.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/impl/WidgetImpl.java?rev=1092677&r1=1092676&r2=1092677&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/impl/WidgetImpl.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/jpa/impl/WidgetImpl.java Fri Apr 15 12:17:42 2011
@@ -312,33 +312,6 @@ public class WidgetImpl extends Localize
     }
 
     /* (non-Javadoc)
-     * @see org.apache.wookie.beans.IWidget#getSharedData()
-     */
-    public Collection<ISharedData> getSharedData()
-    {
-        if (sharedData == null)
-        {
-            sharedData = new ArrayList<SharedDataImpl>();
-        }
-        return new InverseRelationshipCollection<WidgetImpl,SharedDataImpl,ISharedData>(this, sharedData);
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.wookie.beans.IWidget#setSharedData(java.util.Collection)
-     */
-    public void setSharedData(Collection<ISharedData> sharedData)
-    {
-        getSharedData().clear();
-        if (sharedData != null)
-        {
-            for (ISharedData data : sharedData)
-            {
-                getSharedData().add((SharedDataImpl)data);
-            }
-        }
-    }
-
-    /* (non-Javadoc)
      * @see org.apache.wookie.beans.IWidget#getStartFiles()
      */
     public Collection<IStartFile> getStartFiles()
@@ -500,22 +473,6 @@ public class WidgetImpl extends Localize
     }
 
     /* (non-Javadoc)
-     * @see org.apache.wookie.beans.IWidget#getSharedData(java.lang.String)
-     */
-    public ISharedData [] getSharedData(String sharedDataKey)
-    {
-        return Utilities.getSharedData(this, sharedDataKey);
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.wookie.beans.IWidget#getSharedData(java.lang.String, java.lang.String)
-     */
-    public ISharedData getSharedData(String sharedDataKey, String name)
-    {
-        return Utilities.getSharedData(this, sharedDataKey, name);
-    }
-
-    /* (non-Javadoc)
      * @see org.apache.wookie.beans.IWidget#getWidgetDescription()
      */
     public String getWidgetDescription()

Modified: incubator/wookie/trunk/src/org/apache/wookie/controller/ParticipantsController.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/controller/ParticipantsController.java?rev=1092677&r1=1092676&r2=1092677&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/controller/ParticipantsController.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/controller/ParticipantsController.java Fri Apr 15 12:17:42 2011
@@ -164,7 +164,6 @@ public class ParticipantsController exte
         IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
 		Map<String, Object> map = new HashMap<String, Object>();
 		map.put("sharedDataKey", instance.getSharedDataKey());//$NON-NLS-1$
-		map.put("widget", instance.getWidget());//$NON-NLS-1$
 		map.put("participantId", participantId);//$NON-NLS-1$
 		if (persistenceManager.findByValues(IParticipant.class, map).length != 0) return false;		
 
@@ -174,7 +173,6 @@ public class ParticipantsController exte
 		participant.setParticipantDisplayName(participantDisplayName);
 		participant.setParticipantThumbnailUrl(participantThumbnailUrl);
 		participant.setSharedDataKey(instance.getSharedDataKey());
-		participant.setWidget(instance.getWidget());
 		persistenceManager.save(participant);
 		return true;
 	}
@@ -192,7 +190,6 @@ public class ParticipantsController exte
         IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
 		Map<String, Object> map = new HashMap<String, Object>();
 		map.put("sharedDataKey", instance.getSharedDataKey());//$NON-NLS-1$
-		map.put("widget", instance.getWidget());//$NON-NLS-1$
 		map.put("participantId", participantId);//$NON-NLS-1$
 		participants = persistenceManager.findByValues(IParticipant.class, map);
 		if (participants.length != 1) return false;	

Modified: incubator/wookie/trunk/src/org/apache/wookie/controller/PropertiesController.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/controller/PropertiesController.java?rev=1092677&r1=1092676&r2=1092677&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/controller/PropertiesController.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/controller/PropertiesController.java Fri Apr 15 12:17:42 2011
@@ -33,6 +33,7 @@ import org.apache.wookie.exceptions.Reso
 import org.apache.wookie.exceptions.ResourceNotFoundException;
 import org.apache.wookie.exceptions.UnauthorizedAccessException;
 import org.apache.wookie.helpers.Notifier;
+import org.apache.wookie.helpers.SharedDataHelper;
 import org.apache.wookie.helpers.WidgetKeyManager;
 
 /**
@@ -201,11 +202,11 @@ public class PropertiesController extend
 		IWidget widget = widgetInstance.getWidget();
         IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
         boolean found=false;
-        ISharedData sharedData = widget.getSharedData(widgetInstance.getSharedDataKey(), name);
+        ISharedData sharedData = SharedDataHelper.findSharedData(widgetInstance, name);
         if (sharedData != null)
         {
-            if(value==null || value.equalsIgnoreCase("null")){   
-                widget.getSharedData().remove(sharedData);
+            if(value==null || value.equalsIgnoreCase("null")){ 
+            	persistenceManager.delete(sharedData);
             }
             else{    
                 if(append){
@@ -219,12 +220,12 @@ public class PropertiesController extend
         }
 		if(!found){     
 			if(value!=null){
-				String sharedDataKey = widgetInstance.getSharedDataKey();		
+				String sharedDataKey = SharedDataHelper.getInternalSharedDataKey(widgetInstance);		
 				sharedData = persistenceManager.newInstance(ISharedData.class);
 				sharedData.setSharedDataKey(sharedDataKey);
 				sharedData.setDkey(name);
 				sharedData.setDvalue(value);
-				widget.getSharedData().add(sharedData);
+				persistenceManager.save(sharedData);
 			}
 		}
         persistenceManager.save(widget);

Modified: incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetInstancesController.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetInstancesController.java?rev=1092677&r1=1092676&r2=1092677&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetInstancesController.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetInstancesController.java Fri Apr 15 12:17:42 2011
@@ -37,6 +37,7 @@ import org.apache.wookie.beans.util.IPer
 import org.apache.wookie.beans.util.PersistenceManagerFactory;
 import org.apache.wookie.exceptions.InvalidWidgetCallException;
 import org.apache.wookie.helpers.Notifier;
+import org.apache.wookie.helpers.SharedDataHelper;
 import org.apache.wookie.helpers.WidgetInstanceFactory;
 import org.apache.wookie.helpers.WidgetInstanceHelper;
 import org.apache.wookie.helpers.WidgetKeyManager;
@@ -183,7 +184,7 @@ public class WidgetInstancesController e
 	
 	public static void doGetWidget(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 		String userId = request.getParameter("userid"); //$NON-NLS-1$
-		String sharedDataKey = getSharedDataKey(request);	
+		String sharedDataKey =  request.getParameter("shareddatakey");	 //$NON-NLS-1$	
 		String serviceType = request.getParameter("servicetype"); //$NON-NLS-1$
 		String widgetId = request.getParameter("widgetid"); //$NON-NLS-1$
 		HttpSession session = request.getSession(true);						
@@ -242,22 +243,22 @@ public class WidgetInstancesController e
 			response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
 			return;			
 		}
-		String sharedDataKey = getSharedDataKey(request);	
+		String sharedDataKey = request.getParameter("shareddatakey");	 //$NON-NLS-1$;	
 		String cloneSharedDataKey = request.getParameter("cloneshareddatakey");
 		if (sharedDataKey == null || sharedDataKey.trim().equals("") || cloneSharedDataKey == null || cloneSharedDataKey.trim().equals("")){//$NON-NLS-1$ //$NON-NLS-2$
 			response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
 			return;
 		}
-		String cloneKey = String.valueOf((request.getParameter("apikey")+":"+cloneSharedDataKey).hashCode());//$NON-NLS-1$ 
+		String cloneKey = SharedDataHelper.getInternalSharedDataKey(instance, cloneSharedDataKey);
         IWidget widget = instance.getWidget();
         IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
-		for (ISharedData sharedData : widget.getSharedData(sharedDataKey))
+		for (ISharedData sharedData : SharedDataHelper.findSharedData(instance))
 		{
 		    ISharedData clone = persistenceManager.newInstance(ISharedData.class);
             clone.setDkey(sharedData.getDkey());
             clone.setDvalue(sharedData.getDvalue());
             clone.setSharedDataKey(cloneKey);
-            widget.getSharedData().add(clone);
+            persistenceManager.save(clone);
 		}
 		boolean ok = persistenceManager.save(widget);
 		if (ok){
@@ -284,16 +285,6 @@ public class WidgetInstancesController e
 	}
 	
 	// Utility methods
-
-	/**
-	 * Returns the internal form of shared data key, which is hashed along with the API key. This
-	 * prevents shared data keys from clashing between different applications
-	 * @param request the HTTP request to retrieve the shared data key from 
-	 * @return the shared data key
-	 */
-	public static String getSharedDataKey(HttpServletRequest request){
-		return String.valueOf((request.getParameter("apikey")+":"+request.getParameter("shareddatakey")).hashCode());	 //$NON-NLS-1$ //$NON-NLS-2$
-	}
 	
 	/**
 	 * Returns the absolute URL of the widget instance including id key, proxy url and opensocial token 
@@ -347,7 +338,7 @@ public class WidgetInstancesController e
 		try {
 			String apiKey = URLDecoder.decode(request.getParameter("api_key"), "UTF-8"); //$NON-NLS-1$
 			String userId = URLDecoder.decode(request.getParameter("userid"), "UTF-8"); //$NON-NLS-1$
-			String sharedDataKey = WidgetInstancesController.getSharedDataKey(request);
+			String sharedDataKey = request.getParameter("shareddatakey");	 //$NON-NLS-1$;
 			String widgetId = request.getParameter("widgetid");
 			if (widgetId != null){
 				widgetId = URLDecoder.decode(widgetId, "UTF-8"); //$NON-NLS-1$

Added: incubator/wookie/trunk/src/org/apache/wookie/helpers/SharedDataHelper.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/helpers/SharedDataHelper.java?rev=1092677&view=auto
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/helpers/SharedDataHelper.java (added)
+++ incubator/wookie/trunk/src/org/apache/wookie/helpers/SharedDataHelper.java Fri Apr 15 12:17:42 2011
@@ -0,0 +1,60 @@
+/*
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wookie.helpers;
+
+import java.util.HashMap;
+
+import org.apache.wookie.beans.ISharedData;
+import org.apache.wookie.beans.IWidgetInstance;
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
+
+/**
+ * Service facade for managing SharedDataKeys in a consistent fashion.
+ * 
+ * SharedDataKeys have an external form used by the host application (e.g. "tab23").
+ * 
+ * However we also have an internal form which avoids potential collisions, and which is unique
+ * to the combination of the host application, external shared data key, and the widget URI
+ */
+public class SharedDataHelper {
+	
+	public static String getInternalSharedDataKey(IWidgetInstance instance){
+		String key = instance.getSharedDataKey() + ":" + instance.getApiKey() + ":" + instance.getWidget().getGuid();
+		return String.valueOf(key.hashCode());
+	}
+	
+	public static String getInternalSharedDataKey(IWidgetInstance instance, String sharedDataKey){
+		String key = sharedDataKey + ":" + instance.getApiKey() + ":" + instance.getWidget().getGuid();
+		return String.valueOf(key.hashCode());
+	}
+	
+	public static ISharedData[] findSharedData(IWidgetInstance instance){
+		String sharedDataKey = SharedDataHelper.getInternalSharedDataKey(instance);
+        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+        return (ISharedData[]) persistenceManager.findByValue(ISharedData.class, "sharedDataKey", sharedDataKey);
+	}
+	
+	public static ISharedData findSharedData(IWidgetInstance instance, String key){
+		String sharedDataKey = SharedDataHelper.getInternalSharedDataKey(instance);
+        IPersistenceManager persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+        HashMap<String, Object> params = new HashMap<String, Object>();
+        params.put("sharedDataKey", sharedDataKey);
+        params.put("dkey", key);
+        ISharedData[] results = (ISharedData[]) persistenceManager.findByValues(ISharedData.class, params);
+        if (results.length != 0) return results[0];
+        return null;
+	}	
+
+}