@Override public BlipData toBlipData( ConversationBlip blip, Wavelet wavelet, EventMessageBundle eventMessageBundle) { ConversationBlip parentBlip = findBlipParent(blip); BlipData blipData = new BlipData(); blipData.setCreator(blip.getAuthorId().getAddress()); blipData.setContributors(idsToParticipantIdList(blip.getContributorIds())); blipData.setBlipId(blip.getId()); blipData.setLastModifiedTime(blip.getLastModifiedTime()); blipData.setVersion(blip.getLastModifiedVersion()); blipData.setParentBlipId(parentBlip == null ? null : parentBlip.getId()); blipData.setWaveId(ApiIdSerializer.instance().serialiseWaveId(wavelet.getWaveId())); blipData.setWaveletId(ApiIdSerializer.instance().serialiseWaveletId(wavelet.getId())); blipData.setChildBlipIds(toBlipIdList(findBlipChildren(blip))); ApiView apiView = new ApiView(blip.getContent(), wavelet); // Set content. blipData.setContent(apiView.apiContents()); // Set Annotations. blipData.setAnnotations(extractAnnotations(blip.getContent(), apiView)); // blip.getContent().rangedAnnotations(0, blip.getContent().size(), null), // Set Form Elements. blipData.setElements(ElementSerializer.serialize(blip.getContent(), wavelet)); return blipData; }
/** * Extracts all annotations that span inside the body tag of the given document. * * @param doc the document to get the annotations from. * @param apiView provides a utility function to convert an xml offset point into text offset. * @return the annotations represented as a list of {@link Annotation}. */ private static List<Annotation> extractAnnotations(Document doc, ApiView apiView) { List<Annotation> result = Lists.newArrayList(); for (RangedAnnotation<String> annotation : doc.rangedAnnotations(0, doc.size(), null)) { if (annotation.key() != null && annotation.value() != null) { int start = apiView.transformToTextOffset(annotation.start()); int end = apiView.transformToTextOffset(annotation.end()); result.add(new Annotation(annotation.key(), annotation.value(), new Range(start, end))); } } return result; }