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;
+       }       
+
+}


Reply via email to