/// <summary> /// Graphs object <paramref name="o"/> onto <paramref name="s"/> /// </summary> /// <param name="s">The stream to graph to</param> /// <param name="o">The object to graph</param> /// <returns>A formatter graphing result</returns> public IFormatterGraphResult Graph(XmlWriter s, IGraphable o) { if (o == null) return new DatatypeFormatterGraphResult(this.CompatibilityMode, ResultCode.Accepted, null, this.ValidateConformance); try { IDatatypeFormatter formatter = GetFormatter(o.GetType()); if (formatter == null) return new DatatypeFormatterGraphResult(this.CompatibilityMode, ResultCode.NotAvailable, new IResultDetail[] { new NotImplementedResultDetail(ResultDetailType.Error, String.Format("Could not find formatter for '{0}'", o.GetType().FullName), null) }, this.ValidateConformance); // Set the host formatter.Host = (IXmlStructureFormatter)(this.Host ?? this); var result = new DatatypeFormatterGraphResult(this.CompatibilityMode, ResultCode.Accepted, null, this.ValidateConformance); formatter.Graph(s, o, result); return result; } catch (Exception e) { return new DatatypeFormatterGraphResult(this.CompatibilityMode, ResultCode.Error, new IResultDetail[] { new ResultDetail(ResultDetailType.Error, e.Message, s.ToString(), e) }, this.ValidateConformance); } }