@Override public DocumentBasedManifest adapt(DocumentEventRouter<? super Doc.E, Doc.E, ?> router, E element) { return DocumentBasedManifest.createOnExisting(router, element); }
/** * Checks whether a wavelet has conversation structure. */ public static boolean waveletHasConversation(Wavelet wavelet) { return DocumentBasedManifest.documentHasManifest(getManifestDocument(wavelet)); }
ArgumentCaptor.forClass(ObservableStructuredValue.Listener.class); DocumentBasedManifest target = new DocumentBasedManifest(rootThread, anchorValue); verify(anchorValue).addListener(anchorListener.capture()); assertSame(rootThread, target.getRootThread()); when(anchorValue.get(AnchorKey.BLIP)).thenReturn("blipid"); AnchorData anchor = target.getAnchor(); assertEquals("waveletid", anchor.getConversationId()); assertEquals("blipid", anchor.getBlipId()); target.setAnchor(new AnchorData("newwavelet", "newblip")); verify(anchorValue).set(CollectionUtils.immutableMap(AnchorKey.WAVELET, "newwavelet", AnchorKey.BLIP, "newblip")); target.addListener(manifestListener); target.removeListener(manifestListener);
/** * Creates a document-based manifest backed by an empty document. * * @param doc the document on which to base the manifest * @precondition {@code !documentHasManifest(doc)} */ @VisibleForTesting public static <E> DocumentBasedManifest createNew( ObservableMutableDocument<? super E, E, ?> doc) { // If the precondition holds then the document must be empty. E top = DocHelper.createFirstTopLevelElement(doc, MANIFEST_TOP_TAG); DocumentEventRouter<? super E, E, ?> router = DefaultDocumentEventRouter.create(doc); return new DocumentBasedManifest( DocumentBasedManifestThread.create(router, top), DocumentBasedStructuredValue.create(router, top, Serializer.STRING, AnchorKey.class)); }
@Override public void delete() { getRootThread().deleteBlips(); DocumentBasedManifest.delete(getManifestDocument(wavelet)); Preconditions.checkState(!isUsable, "Conversation still usable after delete"); }
ArgumentCaptor.forClass(ObservableStructuredValue.Listener.class); DocumentBasedManifest target = new DocumentBasedManifest(rootThread, anchorValue); verify(anchorValue).addListener(anchorListener.capture()); assertSame(rootThread, target.getRootThread()); when(anchorValue.get(AnchorKey.BLIP)).thenReturn("blipid"); AnchorData anchor = target.getAnchor(); assertEquals("waveletid", anchor.getConversationId()); assertEquals("blipid", anchor.getBlipId()); target.setAnchor(new AnchorData("newwavelet", "newblip")); verify(anchorValue).set(CollectionUtils.immutableMap(AnchorKey.WAVELET, "newwavelet", AnchorKey.BLIP, "newblip")); target.addListener(manifestListener); target.removeListener(manifestListener);
/** * Creates a document-based manifest backed by a document with existing * conversation structure. * * @param router event router for the document on which to base the manifest * @precondition {@code documentHasManifest(doc)} */ static <E> DocumentBasedManifest createOnExisting( DocumentEventRouter<? super E, E, ?> router, E top) { Preconditions.checkArgument(router.getDocument().getTagName(top).equals(MANIFEST_TOP_TAG), "Invalid manifest top tag %s", router.getDocument().getTagName(top)); return new DocumentBasedManifest( DocumentBasedManifestThread.create(router, top), DocumentBasedStructuredValue.create(router, top, Serializer.STRING, AnchorKey.class)); }