public FeatureProvider(IFlagResolver flagrResolver, string applicationName) { _flagrResolver = flagrResolver; _features = new Dictionary <FeatureFlag, Func <IMyFeature> > { { FeatureFlag.Unknow, () => new FeatureUnknow(new FeatureOne()) }, { FeatureFlag.Feature1, () => new FeatureOne() }, { FeatureFlag.Feature2, () => new FeatureTwo() }, }; _applicationName = applicationName; }
/// <summary> /// Exports the document as HTML to the specified stream. /// </summary> public static void Export(this DrxDocument document, Stream stream, IFlagResolver resolver = null) { var rtfHtml = Encoding.UTF8.GetString(document.GetPlainTextBodyAsType(DrxBodyType.Html)); // Execute redactions var regex = new Regex(@"\<span[^\<]*background:#FF0000[^\<]*\>(.+?)\<\/span\>"); rtfHtml = regex.Replace(rtfHtml, @"<span>[REDACTED]</span>"); // Build the "short" security level ID var secKey = document.Header.SecurityLevel.ToString().ToUpper(); var secValue = ConverterMappings.SecurityLevelToSecFlag[document.Header.SecurityLevel]; var flagBuilder = new StringBuilder(); var count = document.Header.Flags.Count; if (resolver != null && count > 0) { var i = 0; foreach (var id in document.Header.Flags) { var flag = resolver.ResolveFlag(id); flagBuilder.Append(flag.Tag); if (i < count) { flagBuilder.Append("/"); } i++; } // strip the trailing slash flagBuilder.Length--; } // Write it out to HTML using (var s = new StreamWriter(stream, Encoding.UTF8, 1024, true)) using (var w = new HtmlTextWriter(s)) { w["html"] ["head"] ["title"].Text(document.Header.Title)["/title"] ["/head"] ["body"].Attr("style", "font-family: Arial;") ["h1"].Text(document.Header.Title)["/h1"] ["h3"].Text($"{secKey} {secValue}//{flagBuilder}")["/h3"].Flush(); w.WriteRaw(rtfHtml); w["/body"]["/html"].Flush(); } }
/// <summary> /// Sets the contents of this <see cref="DataPackage"/> from the specified <see cref="DrxDocumentViewModel"/> to export. /// </summary> internal static void SetExportedDrx(this DataPackage package, DrxDocument document, IFlagResolver resolver = null) { package.Properties.Title = document.Header.Title; package.Properties.Description = "DRX Document"; // Export the document to this stream using (var stream = new MemoryStream()) { document.Export(stream, resolver); stream.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(stream)) { var data = reader.ReadToEnd(); package.SetHtmlFormat(HtmlFormatHelper.CreateHtmlFormat(data)); } } }