Пример #1
0
 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;
 }
Пример #2
0
        /// <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));
                }
            }
        }