public class EventDataConverterV21 implements EventDataConverter {
@Override
public WaveletData toWaveletData(Wavelet wavelet, Conversation conversation,
EventMessageBundle eventMessageBundle) {
final WaveletData waveletData = new WaveletData();
waveletData.setCreationTime(wavelet.getCreationTime());
waveletData.setCreator(wavelet.getCreatorId().getAddress());
waveletData.setWaveId(ApiIdSerializer.instance().serialiseWaveId(wavelet.getWaveId()));
waveletData.setWaveletId(ApiIdSerializer.instance().serialiseWaveletId(wavelet.getId()));
waveletData.setLastModifiedTime(wavelet.getLastModifiedTime());
waveletData.setParticipants(idsToParticipantIdList(wavelet.getParticipantIds()));
waveletData.setRootBlipId(conversation.getRootThread().getFirstBlip().getId());
waveletData.setTitle(getTitle(wavelet, conversation));
waveletData.setVersion(wavelet.getVersion());
// Add Data Docs. All data documents are silently name spaced under the
// robot prefix to avoid conflicts. Any docId containing a '+' will be
// ignored for now.
for (String documentId : wavelet.getDocumentIds()) {
if (IdUtil.isRobotDocId(documentId)) {
String[] parts = IdUtil.split(documentId);
if (parts.length == 2) {
Document document = wavelet.getDocument(documentId);
String val = XmlStringBuilder.innerXml(document).getXmlString();
waveletData.setDataDocument(parts[1], val);
}
}
}
// Add the tags.
if (wavelet.getDocument(IdConstants.TAGS_DOC_ID) != null) {
@SuppressWarnings("unchecked")
TagsDocument tags = new TagsDocument(wavelet.getDocument(IdConstants.TAGS_DOC_ID));
tags.addListener(new TagsDocument.Listener() {
@Override
public void onAdd(String tagName) {
waveletData.addTag(tagName);
}
@Override
public void onRemove(int tagPosition) {
// Not called.
}});
tags.processInitialState();
}
// Add the participant roles.
ObservableDocument rolesDocument = wavelet.getDocument(IdConstants.ROLES_DATA_DOC_ID);
if (rolesDocument != null) {
DocumentBasedRoles roles = DocumentBasedRoles.create(rolesDocument);
for (ParticipantId participantId : wavelet.getParticipantIds()) {
waveletData.setParticipantRole(participantId.getAddress(),
roles.getRole(participantId).name());
}
}
return waveletData;
}