WAVE-311 WAVE-371 Ensures that search providers always include the user data 
wavelet for genenerating the digest.


Project: http://git-wip-us.apache.org/repos/asf/incubator-wave/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-wave/commit/731f434e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-wave/tree/731f434e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-wave/diff/731f434e

Branch: refs/heads/fulltextsearch
Commit: 731f434e86099dd20957b7c8a85399284e3a9a57
Parents: c180e4f
Author: Yuri Zelikov <[email protected]>
Authored: Thu Aug 21 22:07:44 2014 +0300
Committer: Yuri Zelikov <[email protected]>
Committed: Wed Aug 27 20:50:29 2014 +0300

----------------------------------------------------------------------
 .../waveserver/AbstractSearchProviderImpl.java     | 17 +++++++++++++++++
 .../waveserver/SimpleSearchProviderImpl.java       |  2 ++
 .../server/waveserver/SolrSearchProviderImpl.java  |  3 +++
 3 files changed, 22 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/731f434e/src/org/waveprotocol/box/server/waveserver/AbstractSearchProviderImpl.java
----------------------------------------------------------------------
diff --git 
a/src/org/waveprotocol/box/server/waveserver/AbstractSearchProviderImpl.java 
b/src/org/waveprotocol/box/server/waveserver/AbstractSearchProviderImpl.java
index 111a24c..e026a81 100644
--- a/src/org/waveprotocol/box/server/waveserver/AbstractSearchProviderImpl.java
+++ b/src/org/waveprotocol/box/server/waveserver/AbstractSearchProviderImpl.java
@@ -25,6 +25,7 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
 import org.waveprotocol.box.server.util.WaveletDataUtil;
+import org.waveprotocol.wave.model.id.IdConstants;
 import org.waveprotocol.wave.model.id.IdUtil;
 import org.waveprotocol.wave.model.id.WaveId;
 import org.waveprotocol.wave.model.id.WaveletId;
@@ -157,4 +158,20 @@ public abstract class AbstractSearchProviderImpl 
implements SearchProvider {
     // explicit or implicit participant and therefore has access permission.
     return true;
   }
+  
+  /**
+   * Ensures that each wave in the current waves view has the user data 
wavelet by always adding
+   *  it to the view.
+   */
+  protected void ensureWavesHaveUserDataWavelet(
+      LinkedHashMultimap<WaveId, WaveletId> currentUserWavesView, 
ParticipantId user) {
+    WaveletId udw =
+        WaveletId.of(user.getDomain(),
+            IdUtil.join(IdConstants.USER_DATA_WAVELET_PREFIX, 
user.getAddress()));
+    Set<WaveId> waveIds = currentUserWavesView.keySet();
+    for (WaveId waveId : waveIds) {
+      Set<WaveletId> waveletIds = currentUserWavesView.get(waveId);
+      waveletIds.add(udw);
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/731f434e/src/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImpl.java
----------------------------------------------------------------------
diff --git 
a/src/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImpl.java 
b/src/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImpl.java
index a1db671..d0104b6 100644
--- a/src/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImpl.java
+++ b/src/org/waveprotocol/box/server/waveserver/SimpleSearchProviderImpl.java
@@ -97,6 +97,8 @@ public class SimpleSearchProviderImpl extends 
AbstractSearchProviderImpl {
         createWavesViewToFilter(user, isAllQuery);
     Function<ReadableWaveletData, Boolean> filterWaveletsFunction =
         createFilterWaveletsFunction(user, isAllQuery, withParticipantIds, 
creatorParticipantIds);
+    
+    ensureWavesHaveUserDataWavelet(currentUserWavesView, user);
 
     List<WaveViewData> results =
         
Lists.newArrayList(filterWavesViewBySearchCriteria(filterWaveletsFunction,

http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/731f434e/src/org/waveprotocol/box/server/waveserver/SolrSearchProviderImpl.java
----------------------------------------------------------------------
diff --git 
a/src/org/waveprotocol/box/server/waveserver/SolrSearchProviderImpl.java 
b/src/org/waveprotocol/box/server/waveserver/SolrSearchProviderImpl.java
index 137681e..e870339 100644
--- a/src/org/waveprotocol/box/server/waveserver/SolrSearchProviderImpl.java
+++ b/src/org/waveprotocol/box/server/waveserver/SolrSearchProviderImpl.java
@@ -134,6 +134,7 @@ public class SolrSearchProviderImpl extends 
AbstractSearchProviderImpl {
     LOG.fine("Search query '" + query + "' from user: " + user + " [" + 
startAt + ", "
         + ((startAt + numResults) - 1) + "]");
 
+    
     // Maybe should be changed in case other folders in addition to 'inbox' are
     // added.
     final boolean isAllQuery = isAllQuery(query);
@@ -198,6 +199,8 @@ public class SolrSearchProviderImpl extends 
AbstractSearchProviderImpl {
       }
     }
 
+    ensureWavesHaveUserDataWavelet(currentUserWavesView, user);
+
     Function<ReadableWaveletData, Boolean> matchesFunction =
         new Function<ReadableWaveletData, Boolean>() {
 

Reply via email to