@Override public void onValueChanged(DocumentBasedManifest oldValue, DocumentBasedManifest newValue) { if (oldValue != null) { assert conversation != null; conversations.remove(wavelet); conversation.destroy(); triggerOnConversationRemoved(conversation); conversation = null; } if (newValue != null) { assert conversation == null; conversation = WaveletBasedConversation.create(WaveBasedConversationView.this, wavelet, newValue, idGenerator); conversations.put(wavelet, conversation); triggerOnConversationAdded(conversation); } } }
WaveletBasedConversation getConversation() { if (conversation == null) { if (manifestContainer.hasValue()) { conversation = WaveletBasedConversation.create( WaveBasedConversationView.this, wavelet, manifestContainer.get(), idGenerator); } } return conversation; }
@Override protected WaveletBasedConversation mirrorConversation(ObservableConversation toMirror) { WaveletBasedConversation backer = (WaveletBasedConversation) toMirror; ObservableDocument backerManifestDoc = WaveletBasedConversation.getManifestDocument( backer.getWavelet()); ObservableManifest manifest = backerManifestDoc.with( new ObservableMutableDocument.Method<ObservableManifest>() { @Override public <N, E extends N, T extends N> ObservableManifest exec( ObservableMutableDocument<N, E, T> doc) { E top = DocHelper.expectAndGetFirstTopLevelElement(doc, DocumentBasedManifest.MANIFEST_TOP_TAG); return DocumentBasedManifest.createOnExisting(DefaultDocumentEventRouter.create(doc), top); } }); return WaveletBasedConversation.create(conversationView, backer.getWavelet(), manifest, idGenerator); }
@Override protected WaveletBasedConversation mirrorConversation(ObservableConversation toMirror) { WaveletBasedConversation backer = (WaveletBasedConversation) toMirror; ObservableDocument backerManifestDoc = WaveletBasedConversation.getManifestDocument( backer.getWavelet()); ObservableManifest manifest = backerManifestDoc.with( new ObservableMutableDocument.Method<ObservableManifest>() { @Override public <N, E extends N, T extends N> ObservableManifest exec( ObservableMutableDocument<N, E, T> doc) { E top = DocHelper.expectAndGetFirstTopLevelElement(doc, DocumentBasedManifest.MANIFEST_TOP_TAG); return DocumentBasedManifest.createOnExisting(DefaultDocumentEventRouter.create(doc), top); } }); return WaveletBasedConversation.create(conversationView, backer.getWavelet(), manifest, idGenerator); }
/** * Test that a conversation can be created on a manifest that contains blips * that are not backed by the wavelet. */ public void testBlipMissingFromWavelet() { WaveletBasedConversation empty = target; WaveletBasedConversation nonEmpty = makeConversation(); nonEmpty.getRootThread().appendBlip(); WaveletBasedConversation conversation = WaveletBasedConversation.create(conversationView, empty.getWavelet(), nonEmpty.getManifest(), idGenerator); assertNull(conversation.getRootThread().getFirstBlip()); assertEquals(Collections.emptyList(), getBlipList(conversation.getRootThread())); }
/** * Test that a conversation can be created on a manifest that contains blips * that are not backed by the wavelet. */ public void testBlipMissingFromWavelet() { WaveletBasedConversation empty = target; WaveletBasedConversation nonEmpty = makeConversation(); nonEmpty.getRootThread().appendBlip(); WaveletBasedConversation conversation = WaveletBasedConversation.create(conversationView, empty.getWavelet(), nonEmpty.getManifest(), idGenerator); assertNull(conversation.getRootThread().getFirstBlip()); assertEquals(Collections.emptyList(), getBlipList(conversation.getRootThread())); }