WAVE-311 Refactored title construction by adding getWavelet method to WaveMap 
and moving the code into base class.


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

Branch: refs/heads/wave-0.4-rc6
Commit: 2c4a3504d002742ae91b6c5f4794c60aa2dac58f
Parents: 6c7bc7a
Author: Yuri Zelikov <[email protected]>
Authored: Fri Apr 25 23:59:59 2014 +0300
Committer: Yuri Zelikov <[email protected]>
Committed: Wed Aug 27 19:17:55 2014 +0300

----------------------------------------------------------------------
 .../waveserver/AbstractSearchProviderImpl.java  | 27 ------
 .../server/waveserver/AbstractWaveIndexer.java  | 43 +++++++++
 .../server/waveserver/SolrWaveIndexerImpl.java  | 96 +-------------------
 .../box/server/waveserver/WaveMap.java          | 18 ++++
 4 files changed, 63 insertions(+), 121 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/2c4a3504/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 7d55812..673a02e 100644
--- a/src/org/waveprotocol/box/server/waveserver/AbstractSearchProviderImpl.java
+++ b/src/org/waveprotocol/box/server/waveserver/AbstractSearchProviderImpl.java
@@ -107,33 +107,6 @@ public abstract class AbstractSearchProviderImpl 
implements SearchProvider {
       WaveletContainer waveletContainer = null;
       WaveletName waveletname = WaveletName.of(waveId, waveletId);
 
-      // TODO (alown): Find some way to use isLocalWavelet to do this properly!
-      try {
-        if (LOG.isFineLoggable()) {
-          LOG.fine("Trying as a remote wavelet");
-        }
-        waveletContainer = waveMap.getRemoteWavelet(waveletname);
-      } catch (WaveletStateException e) {
-        LOG.severe(String.format("Failed to get remote wavelet %s", 
waveletname.toString()), e);
-      } catch (NullPointerException e) {
-        // This is a fairly normal case of it being a local-only wave.
-        // Yet this only seems to appear in the test suite.
-        // Continuing is completely harmless here.
-        LOG.info(
-            String.format("%s is definitely not a remote wavelet. (Null key)",
-                waveletname.toString()), e);
-      }
-
-      if (waveletContainer == null) {
-        try {
-          if (LOG.isFineLoggable()) {
-            LOG.fine("Trying as a local wavelet");
-          }
-          waveletContainer = waveMap.getLocalWavelet(waveletname);
-        } catch (WaveletStateException e) {
-          LOG.severe(String.format("Failed to get local wavelet %s", 
waveletname.toString()), e);
-        }
-      }
 
       // TODO (Yuri Z.) This loop collects all the wavelets that match the
       // query, so the view is determined by the query. Instead we should

http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/2c4a3504/src/org/waveprotocol/box/server/waveserver/AbstractWaveIndexer.java
----------------------------------------------------------------------
diff --git 
a/src/org/waveprotocol/box/server/waveserver/AbstractWaveIndexer.java 
b/src/org/waveprotocol/box/server/waveserver/AbstractWaveIndexer.java
index 13f1283..18b88e1 100644
--- a/src/org/waveprotocol/box/server/waveserver/AbstractWaveIndexer.java
+++ b/src/org/waveprotocol/box/server/waveserver/AbstractWaveIndexer.java
@@ -20,9 +20,21 @@
 package org.waveprotocol.box.server.waveserver;
 
 import org.waveprotocol.box.common.ExceptionalIterator;
+import org.waveprotocol.box.server.robots.util.ConversationUtil;
+import org.waveprotocol.wave.model.conversation.ObservableConversation;
+import org.waveprotocol.wave.model.conversation.ObservableConversationBlip;
+import org.waveprotocol.wave.model.conversation.ObservableConversationView;
+import org.waveprotocol.wave.model.conversation.TitleHelper;
+import org.waveprotocol.wave.model.conversation.WaveletBasedConversation;
+import org.waveprotocol.wave.model.document.Document;
 import org.waveprotocol.wave.model.id.WaveId;
 import org.waveprotocol.wave.model.id.WaveletId;
 import org.waveprotocol.wave.model.id.WaveletName;
+import org.waveprotocol.wave.model.wave.data.ObservableWaveletData;
+import org.waveprotocol.wave.model.wave.data.impl.WaveViewDataImpl;
+import org.waveprotocol.wave.model.wave.opbased.OpBasedWavelet;
+
+import javax.annotation.Nullable;
 
 /**
  * Base implementation of {@link WaveIndexer}.
@@ -39,6 +51,37 @@ public abstract class AbstractWaveIndexer implements 
WaveIndexer {
     this.waveMap = waveMap;
   }
 
+  /*
+   * TODO (Frank R.) move to TitleHelper. Currently, WaveletContainer is of
+   * default visibility, which prevents the re-factoring.
+   */
+  // TODO (yurize) : the method is not used, should we remove it?
+  @Nullable
+  static String constructTitle(WaveId waveId, WaveletId waveletId, WaveMap 
waveMap,
+      ConversationUtil conversationUtil) throws WaveletStateException {
+
+    String title = null;
+
+    WaveViewDataImpl wave = WaveViewDataImpl.create(waveId);
+
+    WaveletName waveletname = WaveletName.of(waveId, waveletId);
+    WaveletContainer waveletContainer = waveMap.getWavelet(waveletname);
+
+    wave.addWavelet(waveletContainer.copyWaveletData());
+    for (ObservableWaveletData waveletData : wave.getWavelets()) {
+      OpBasedWavelet wavelet = OpBasedWavelet.createReadOnly(waveletData);
+      if (WaveletBasedConversation.waveletHasConversation(wavelet)) {
+        ObservableConversationView conversations = 
conversationUtil.buildConversation(wavelet);
+        ObservableConversation root = conversations.getRoot();
+        ObservableConversationBlip firstBlip = 
root.getRootThread().getFirstBlip();
+        Document firstBlipContents = firstBlip.getContent();
+        title = TitleHelper.extractTitle(firstBlipContents).trim();
+        break;
+      }
+    }
+    return title;
+  }
+
   /**
    * Forces all waves to be loaded into memory and processes each wavelet.
    */

http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/2c4a3504/src/org/waveprotocol/box/server/waveserver/SolrWaveIndexerImpl.java
----------------------------------------------------------------------
diff --git 
a/src/org/waveprotocol/box/server/waveserver/SolrWaveIndexerImpl.java 
b/src/org/waveprotocol/box/server/waveserver/SolrWaveIndexerImpl.java
index de3178e..3a7afa3 100644
--- a/src/org/waveprotocol/box/server/waveserver/SolrWaveIndexerImpl.java
+++ b/src/org/waveprotocol/box/server/waveserver/SolrWaveIndexerImpl.java
@@ -40,24 +40,13 @@ import org.apache.http.HttpStatus;
 import org.waveprotocol.box.common.DeltaSequence;
 import org.waveprotocol.box.common.Snippets;
 import org.waveprotocol.box.server.robots.util.ConversationUtil;
-import org.waveprotocol.wave.model.conversation.ObservableConversation;
-import org.waveprotocol.wave.model.conversation.ObservableConversationBlip;
-import org.waveprotocol.wave.model.conversation.ObservableConversationView;
-import org.waveprotocol.wave.model.conversation.TitleHelper;
-import org.waveprotocol.wave.model.conversation.WaveletBasedConversation;
-import org.waveprotocol.wave.model.document.Document;
 import org.waveprotocol.wave.model.document.operation.DocInitialization;
 import org.waveprotocol.wave.model.id.IdUtil;
-import org.waveprotocol.wave.model.id.WaveId;
-import org.waveprotocol.wave.model.id.WaveletId;
 import org.waveprotocol.wave.model.id.WaveletName;
 import org.waveprotocol.wave.model.version.HashedVersion;
 import org.waveprotocol.wave.model.wave.ParticipantId;
-import org.waveprotocol.wave.model.wave.data.ObservableWaveletData;
 import org.waveprotocol.wave.model.wave.data.ReadableBlipData;
 import org.waveprotocol.wave.model.wave.data.ReadableWaveletData;
-import org.waveprotocol.wave.model.wave.data.impl.WaveViewDataImpl;
-import org.waveprotocol.wave.model.wave.opbased.OpBasedWavelet;
 import org.waveprotocol.wave.model.waveref.WaveRef;
 import org.waveprotocol.wave.util.escapers.jvm.JavaWaverefEncoder;
 import org.waveprotocol.wave.util.logging.Log;
@@ -80,11 +69,6 @@ PerUserWaveViewBus.Listener {
   // TODO (Yuri Z.): Inject executor.
   private static final Executor executor = Executors.newSingleThreadExecutor();
 
-  /*
-   * (regression alert) for getting the title of a wave
-   */
-  // private final ConversationUtil conversationUtil;
-
   private final ReadableWaveletDataProvider waveletDataProvider;
 
 
@@ -97,11 +81,6 @@ PerUserWaveViewBus.Listener {
 
     this.waveletDataProvider = waveletDataProvider;
 
-    /*
-     * (regression alert) for getting the title of a wave
-     */
-    // this.conversationUtil = conversationUtil;
-
     notificationDispatcher.subscribe(this);
 
     return;
@@ -241,80 +220,12 @@ PerUserWaveViewBus.Listener {
     return;
   }
 
-  /*
-   * TODO (Frank R.) move to TitleHelper. Currently, WaveletContainer is of
-   * default visibility, which prevents the refactoring.
-   */
-  public static String getTitle(WaveId waveId, WaveletId waveletId, WaveMap 
waveMap,
-      ConversationUtil conversationUtil) {
-
-    String title = null;
-
-    WaveViewDataImpl wave = WaveViewDataImpl.create(waveId);
-
-    WaveletContainer waveletContainer = null;
-    WaveletName waveletname = WaveletName.of(waveId, waveletId);
-
-    /*-
-     * copied from
-     *
-    
org.waveprotocol.box.server.waveserver.SimpleSearchProviderImpl.filterWavesViewBySearchCriteria(Function<ReadableWaveletData,
-    Boolean>, Multimap<WaveId, WaveletId>)
-     */
-    // TODO (alown): Find some way to use isLocalWavelet to do this properly!
-    try {
-      if (LOG.isFineLoggable()) {
-        LOG.fine("Trying as a remote wavelet");
-      }
-      waveletContainer = waveMap.getRemoteWavelet(waveletname);
-    } catch (WaveletStateException e) {
-      LOG.severe(String.format("Failed to get remote wavelet %s", 
waveletname.toString()), e);
-    } catch (NullPointerException e) {
-      // This is a fairly normal case of it being a local-only wave.
-      // Yet this only seems to appear in the test suite.
-      // Continuing is completely harmless here.
-      LOG.info(String.format("%s is definitely not a remote wavelet. (Null 
key)",
-          waveletname.toString()), e);
-    }
-
-    if (waveletContainer == null) {
-      try {
-        if (LOG.isFineLoggable()) {
-          LOG.fine("Trying as a local wavelet");
-        }
-        waveletContainer = waveMap.getLocalWavelet(waveletname);
-      } catch (WaveletStateException e) {
-        LOG.severe(String.format("Failed to get local wavelet %s", 
waveletname.toString()), e);
-      }
-    }
-
-    try {
-      wave.addWavelet(waveletContainer.copyWaveletData());
-      for (ObservableWaveletData waveletData : wave.getWavelets()) {
-        OpBasedWavelet wavelet = OpBasedWavelet.createReadOnly(waveletData);
-        if (WaveletBasedConversation.waveletHasConversation(wavelet)) {
-          ObservableConversationView conversations = 
conversationUtil.buildConversation(wavelet);
-          ObservableConversation root = conversations.getRoot();
-          ObservableConversationBlip firstBlip = 
root.getRootThread().getFirstBlip();
-          Document firstBlipContents = firstBlip.getContent();
-          title = TitleHelper.extractTitle(firstBlipContents).trim();
-          break;
-        }
-      }
-    } catch (WaveletStateException e) {
-      LOG.warning("Failed to access wavelet " + 
waveletContainer.getWaveletName(), e);
-    }
-
-    return title;
-  }
-
   @Override
   public void waveletUpdate(final ReadableWaveletData wavelet, DeltaSequence 
deltas) {
     /*
-     * (regression alert) commented out for optimization, see
-     * waveletCommitted(WaveletName, HashedVersion)
+     * Overridden out for optimization, see waveletCommitted(WaveletName,
+     * HashedVersion)
      */
-    // updateIndex(wavelet);
   }
 
   @Override
@@ -322,9 +233,6 @@ PerUserWaveViewBus.Listener {
 
     Preconditions.checkNotNull(waveletName);
 
-    /*
-     * (regression alert) don't update on current thread to prevent lock error
-     */
     ListenableFutureTask<Void> task = ListenableFutureTask.create(new 
Callable<Void>() {
 
       @Override

http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/2c4a3504/src/org/waveprotocol/box/server/waveserver/WaveMap.java
----------------------------------------------------------------------
diff --git a/src/org/waveprotocol/box/server/waveserver/WaveMap.java 
b/src/org/waveprotocol/box/server/waveserver/WaveMap.java
index 3854f40..68c1ed1 100644
--- a/src/org/waveprotocol/box/server/waveserver/WaveMap.java
+++ b/src/org/waveprotocol/box/server/waveserver/WaveMap.java
@@ -145,6 +145,24 @@ public class WaveMap {
     }
   }
 
+  public WaveletContainer getWavelet(WaveletName waveletName) throws 
WaveletStateException {
+    WaveletContainer waveletContainer = null;
+    try {
+      waveletContainer = getRemoteWavelet(waveletName);
+    } catch (WaveletStateException e) {
+      // Ignored.
+    } catch (NullPointerException e) {
+      // This is a fairly normal case of it being a local-only wave.
+      // Yet this only seems to appear in the test suite.
+      // Continuing is completely harmless here.
+    }
+
+    if (waveletContainer == null) {
+      waveletContainer = getLocalWavelet(waveletName);
+    }
+    return waveletContainer;
+  }
+
   public LocalWaveletContainer getLocalWavelet(WaveletName waveletName)
       throws WaveletStateException {
     try {

Reply via email to