예제 #1
0
        public void Host(ObfuscationConfiguration obfuscationConfiguration, Action <long, bool, double> statusCallback)
        {
            IEnumerable <IDictionary <string, object> > sourceDataEnumerable;
            IEnumerable <Message> messages;

            if ((object)obfuscationConfiguration == null)
            {
                throw new ArgumentNullException("obfuscationConfiguration");
            }

            messages = obfuscationConfiguration.Validate();

            if (messages.Any())
            {
                throw new ApplicationException(string.Format("Obfuscation configuration validation failed:\r\n{0}", string.Join("\r\n", messages.Select(m => m.Description).ToArray())));
            }

            using (IOxymoronEngine oxymoronEngine = new OxymoronEngine(this, obfuscationConfiguration))
            {
                using (DisposableList <IDictionaryAdapter> dictionaryAdapters = new DisposableList <IDictionaryAdapter>())
                {
                    foreach (DictionaryConfiguration dictionaryConfiguration in obfuscationConfiguration.DictionaryConfigurations)
                    {
                        IDictionaryAdapter dictionaryAdapter;

                        dictionaryAdapter = dictionaryConfiguration.DictionaryAdapterConfiguration.GetAdapterInstance <IDictionaryAdapter>();
                        dictionaryAdapters.Add(dictionaryAdapter);
                        dictionaryAdapter.Initialize(dictionaryConfiguration.DictionaryAdapterConfiguration);

                        dictionaryAdapter.InitializePreloadCache(dictionaryConfiguration, oxymoronEngine.SubstitutionCacheRoot);

                        this.DictionaryConfigurationToAdapterMappings.Add(dictionaryConfiguration, dictionaryAdapter);
                    }

                    using (ISourceAdapter sourceAdapter = obfuscationConfiguration.SourceAdapterConfiguration.GetAdapterInstance <ISourceAdapter>())
                    {
                        sourceAdapter.Initialize(obfuscationConfiguration.SourceAdapterConfiguration);

                        using (IDestinationAdapter destinationAdapter = obfuscationConfiguration.DestinationAdapterConfiguration.GetAdapterInstance <IDestinationAdapter>())
                        {
                            destinationAdapter.Initialize(obfuscationConfiguration.DestinationAdapterConfiguration);
                            destinationAdapter.UpstreamMetadata = sourceAdapter.UpstreamMetadata;

                            sourceDataEnumerable = sourceAdapter.PullData(obfuscationConfiguration.TableConfiguration);
                            sourceDataEnumerable = oxymoronEngine.GetObfuscatedValues(sourceDataEnumerable);

                            if ((object)statusCallback != null)
                            {
                                sourceDataEnumerable = WrapRecordCounter(sourceDataEnumerable, statusCallback);
                            }

                            destinationAdapter.PushData(obfuscationConfiguration.TableConfiguration, sourceDataEnumerable);
                        }
                    }
                }
            }
        }
예제 #2
0
        public void Host(ObfuscationConfiguration obfuscationConfiguration, Action<long, bool, double> statusCallback)
        {
            IEnumerable<IDictionary<string, object>> sourceDataEnumerable;
            IEnumerable<Message> messages;

            if ((object)obfuscationConfiguration == null)
                throw new ArgumentNullException("obfuscationConfiguration");

            messages = obfuscationConfiguration.Validate();

            if (messages.Any())
                throw new ApplicationException(string.Format("Obfuscation configuration validation failed:\r\n{0}", string.Join("\r\n", messages.Select(m => m.Description).ToArray())));

            using (IOxymoronEngine oxymoronEngine = new OxymoronEngine(this, obfuscationConfiguration))
            {
                using (DisposableList<IDictionaryAdapter> dictionaryAdapters = new DisposableList<IDictionaryAdapter>())
                {
                    foreach (DictionaryConfiguration dictionaryConfiguration in obfuscationConfiguration.DictionaryConfigurations)
                    {
                        IDictionaryAdapter dictionaryAdapter;

                        dictionaryAdapter = dictionaryConfiguration.DictionaryAdapterConfiguration.GetAdapterInstance<IDictionaryAdapter>();
                        dictionaryAdapters.Add(dictionaryAdapter);
                        dictionaryAdapter.Initialize(dictionaryConfiguration.DictionaryAdapterConfiguration);

                        dictionaryAdapter.InitializePreloadCache(dictionaryConfiguration, oxymoronEngine.SubstitutionCacheRoot);

                        this.DictionaryConfigurationToAdapterMappings.Add(dictionaryConfiguration, dictionaryAdapter);
                    }

                    using (ISourceAdapter sourceAdapter = obfuscationConfiguration.SourceAdapterConfiguration.GetAdapterInstance<ISourceAdapter>())
                    {
                        sourceAdapter.Initialize(obfuscationConfiguration.SourceAdapterConfiguration);

                        using (IDestinationAdapter destinationAdapter = obfuscationConfiguration.DestinationAdapterConfiguration.GetAdapterInstance<IDestinationAdapter>())
                        {
                            destinationAdapter.Initialize(obfuscationConfiguration.DestinationAdapterConfiguration);
                            destinationAdapter.UpstreamMetadata = sourceAdapter.UpstreamMetadata;

                            sourceDataEnumerable = sourceAdapter.PullData(obfuscationConfiguration.TableConfiguration);
                            sourceDataEnumerable = oxymoronEngine.GetObfuscatedValues(sourceDataEnumerable);

                            if ((object)statusCallback != null)
                                sourceDataEnumerable = WrapRecordCounter(sourceDataEnumerable, statusCallback);

                            destinationAdapter.PushData(obfuscationConfiguration.TableConfiguration, sourceDataEnumerable);
                        }
                    }
                }
            }
        }
        public void RefreshMetaColumnSpecs(IMetadataSettingsPartialView sourceView, object actionContext)
        {
            ObfuscationConfiguration obfuscationConfiguration;
            IEnumerable <Message>    messages;
            bool?result;
            bool succeeded;
            IEnumerable <IMetaColumn> metaColumns;

            if ((object)sourceView == null)
            {
                throw new ArgumentNullException("sourceView");
            }

            if ((object)sourceView != (object)this.View.ObfuscationPartialView.MetadataSettingsPartialView)
            {
                throw new ArgumentOutOfRangeException("sourceView");
            }

            obfuscationConfiguration = new ObfuscationConfiguration()
            {
                ConfigurationVersion = ObfuscationConfiguration.CurrentConfigurationVersion,
                EngineVersion        = ObfuscationConfiguration.CurrentEngineVersion
            };
            this.ApplyViewToDocument(obfuscationConfiguration);

            messages = obfuscationConfiguration.Validate();

            if ((object)messages != null && messages.Any())
            {
                result = this.View.ShowMessages(messages, "Configuration validation on refresh delimited text field spec", true);

                if (!(result ?? false))
                {
                    return;
                }
            }

            using (IToolHost toolHost = new ToolHost())
                succeeded = toolHost.TryGetUpstreamMetadata(obfuscationConfiguration, out metaColumns);

            if (succeeded && (object)metaColumns != null)
            {
                this.View.ObfuscationPartialView.MetadataSettingsPartialView.ClearMetaColumnSpecViews();

                foreach (IMetaColumn metaColumn in metaColumns)
                {
                    var headerSpec = (HeaderSpec)metaColumn.TagContext;
                    this.View.ObfuscationPartialView.MetadataSettingsPartialView.AddMetaColumnSpecView(metaColumn.ColumnName, string.Empty);
                }
            }
        }
예제 #4
0
        public void ExecuteObfuscation(IPartialView sourceView, object actionContext)
        {
            ObfuscationConfiguration obfuscationConfiguration;
            IEnumerable <Message>    messages;

            this.View.ExecutionPartialView.RecordCount     = null;
            this.View.ExecutionPartialView.IsComplete      = null;
            this.View.ExecutionPartialView.DurationSeconds = null;

            obfuscationConfiguration = new ObfuscationConfiguration()
            {
                ConfigurationVersion = ObfuscationConfiguration.CurrentConfigurationVersion,
                EngineVersion        = ObfuscationConfiguration.CurrentEngineVersion
            };
            this.ApplyViewToDocument(obfuscationConfiguration);

            messages = obfuscationConfiguration.Validate();

            if ((object)messages != null && messages.Any())
            {
                this.View.ExecutionPartialView.IsComplete = true;
                this.View.ShowMessages(messages, "Configuration validation on execution", false);

                return;
            }

            using (IToolHost toolHost = new ToolHost())
            {
                toolHost.Host(obfuscationConfiguration, (count, complete, duration) =>
                {
                    this.View.ExecutionPartialView.RecordCount     = count;
                    this.View.ExecutionPartialView.IsComplete      = complete;
                    this.View.ExecutionPartialView.DurationSeconds = duration;
                });
            }

            this.View.ShowAlert("Done.");
        }
        public bool SaveDocument(bool asCopy)
        {
            ObfuscationConfiguration obfuscationConfiguration;
            IEnumerable <Message>    messages;
            string filePath;
            bool?  result;

            this.View.StatusText = "Document validation started...";

            obfuscationConfiguration = new ObfuscationConfiguration()
            {
                ConfigurationVersion = ObfuscationConfiguration.CurrentConfigurationVersion,
                EngineVersion        = ObfuscationConfiguration.CurrentEngineVersion
            };
            this.ApplyViewToDocument(obfuscationConfiguration);

            messages = obfuscationConfiguration.Validate();

            if (             /*!DataTypeFascade.Instance.IsNullOrWhiteSpace(this.View.ObfuscationPartialView.FilePath) &&*/
                messages.Any())
            {
                result = this.View.ShowMessages(messages, "Obfuscation configuration save validation failed.", true);

                if (!(result ?? false))
                {
                    this.View.StatusText = "Document save canceled.";
                    //this.View.CloseView(null);
                    return(false);
                }
            }

            this.View.StatusText = "Document validation completed successfully.";

            this.View.StatusText = "Document save started...";

            if (asCopy && !DataTypeFascade.Instance.IsNullOrWhiteSpace(this.View.FilePath))
            {
                if (!this.View.ShowConfirm("Do you want to save a copy of the current document?", Severity.Information))
                {
                    this.View.StatusText = "Document save canceled.";
                    return(false);
                }
            }

            if (asCopy)
            {
                // get new file path
                if (!this.View.TryGetSaveFilePath(out filePath))
                {
                    this.View.StatusText = "Document save canceled.";
                    return(false);
                }

                this.View.FilePath = filePath;
            }
            else
            {
                if (DataTypeFascade.Instance.IsNullOrWhiteSpace(this.View.FilePath))
                {
                    if (!this.View.TryGetSaveFilePath(out filePath))
                    {
                        this.View.StatusText = "Document save canceled.";
                        return(false);
                    }

                    this.View.FilePath = filePath;
                }
            }

            result = this.View.ShowAsync <bool>("Saving document...", this.ThreadSafeSaveCurrentDocument, obfuscationConfiguration);

            if (!(bool)result)
            {
                this.View.StatusText = "Document save canceled.";
                return(false);
            }

            this.View.ViewText   = string.Format("{0}", this.View.FilePath.SafeToString(null, "<new>"));
            this.View.StatusText = "Document save completed successfully.";

            return(true);
        }