private Document.Document getDocument(Document.Document source) { if (!DocumentDB.AncestorsAndSelf("Documents").Any()) return source; if (DocumentDB.Elements(source.DocumentType).Any(x => x.Element("ID").Value == source.DocumentID)) { logger.Debug("Reading " + source.DocumentType + " with ID " + source.DocumentID); var xelement = DocumentDB.Elements(source.DocumentType).Single(x => x.Element("ID").Value == source.DocumentID); source.ParseFromXElement(xelement); foreach (Interfaces.DocumentParser parser in AdditionalPreviewParsers.Where(x => x.DocumentType == xelement.Name)) { try { parser.ParseAdditionalData(ref source, xelement, this); } catch (Exception e) { logger.Error("Error at ParseAdditionalData", e); } } } return source; }