public void TestInit()
        {
            _eDCVM = new ExternalDataConfigurationDetailsViewModelTest();
            _edit = DataPortal.CreateChild<ExternalDataConfigurationEdit>();

            _edit.ConnectionList.Add(DataPortal.CreateChild<EDCConnectionEdit>());
            _edit.DataVariableList.Add(DataPortal.CreateChild<DataVariableEdit>());

            var parent = Mock.Create<ExternalDataConfigurationListViewModel>();
            _eDCVM.Initialize(_edit, parent);
        }
        /// <summary>
        /// Opens the data trigger field mapping designer window.
        /// </summary>
        /// <param name="parentWindow">The parent window.</param>
        /// <param name="process">The process.</param>
        /// <param name="trigger">The trigger.</param>
        /// <param name="saveAction">The save action.</param>
        /// <param name="cancelAction">The cancel action.</param>
        /// <param name="removeAction">The remove action.</param>
        public void EditExpression(ITopLevelWindow parentWindow, ProcessExternalDataEdit model, ProcessEdit process, ExternalDataConfigurationEdit externalData, Action saveAction, Action cancelAction, Action removeAction)
        {
            SaveAction = saveAction;
            CancelAction = cancelAction;
            RemoveAction = removeAction;

            ProcessEdit = process;

            ExpressionDesigner.LoadFromExpressionObjects(new List<IExpressionObjectBase>());

            if (externalData == null)
            {

                PopupFactory.NotifyFailure("Please select a Connection and try again.");
                CancelCommand.Execute(null);
                return;
            }

            LoadExpressionItems(process, externalData, model);

            _itemHashes = ExpressionDesigner.Diagram.Items.Select(x => x.GetHashCode()).ToList();
            WindowManager.Value.ShowChildWindow(parentWindow, this);
        }
        /// <summary>
        /// Initializes the current <see cref="ProcessDataTriggerViewModel"/>.
        /// </summary>
        /// <param name="model">The model.</param>
        /// <param name="parent">The parent view model.</param>
        /// <exception cref="System.ArgumentNullException">
        /// model
        /// or
        /// parent
        /// </exception>
        public void Initialize(ProcessExternalDataEdit model, IProcessExternalDataListViewModel parent)
        {
            if (model == null)
                throw new ArgumentNullException("model");

            if (parent == null)
                throw new ArgumentNullException("parent");

            ParentViewModel = parent;

            Model = model;

            _externalDataConnectionList = parent.ExternalDataConnectionList;
            selectedExternalDataConnection = ExternalDataConnectionList.FirstOrDefault(p => p.SystemName == Model.ExternalDataConnectionName);

            this.RaisePropertyChanged(() => SelectedExternalDataConnection);
        }
        private async void LoadExpressionItems(ProcessEdit sourceProcess, ExternalDataConfigurationEdit externalDataConfiguration, ProcessExternalDataEdit model)
        {
            WindowManager.Value.ShowStatus(new Status { IsBusy = true });

            var expressions = new List<IExpressionObjectBase>();
            var newExpressions = new List<IExpressionObjectBase>();

            var syncContext = new NotifyClientAction(
                () =>
                {
                    ExpressionDesigner.LoadFromExpressionObjects(expressions);
                    WindowManager.Value.ShowStatus(new Status());
                });

            syncContext.OperationStarted();

            var source = new SourceFieldList
                {
                    ExpressionName = string.Format("{0} (source)", sourceProcess.Name),
                    UniqueName = SourceItemName,
                    Top = 10,
                    Left = 10
                };

            foreach (var field in sourceProcess.GetAllFields().Where(CanBeSourceField))
            {
                var sourceField = CreateSourceField(field, source);
                sourceField.ObjectName = SourceItemObjectName;
                source.Fields.Add(sourceField);
            }
            
            newExpressions.Add(source);

            var modifiedSource = new SourceFieldList
            {
                ExpressionName = string.Format("External Data: {0}", externalDataConfiguration.Name),
                UniqueName = SourceToModifyItemName,
                Top = 310,
                Left = 10
            };

            // add data variable
            foreach (var field in externalDataConfiguration.DataVariableList)
            {
                var sourceField = CreateSourceFieldFromDataVariable(field, modifiedSource);
                sourceField.ObjectName = ModifiedItemObjectName;
                modifiedSource.Fields.Add(sourceField);
            }

            newExpressions.Add(modifiedSource);
          
            SourceFieldList systemParameters;

            try
            {
                systemParameters = await CreateSystemParametersItemAsync(SystemParametersName);
            }
            catch (Exception)
            {
                systemParameters = null;
            }

            if (systemParameters != null)
            {
                systemParameters.Left = 350;
                systemParameters.Top = 10;
                newExpressions.Add(systemParameters);
            }

            var destination = new DestinationFieldList
            {
                ExpressionName = sourceProcess.Name,
                UniqueName = DestinationItemName,
                Top = 10,
                Left = 500
            };

            foreach (var field in sourceProcess.GetAllFields().Where(CanBeDestinationField))
            {
                var destinationField = CreateDestinationField(field, destination);
                destination.Fields.Add(destinationField);
            }

            newExpressions.Add(destination);


            if (!string.IsNullOrWhiteSpace(model.Expression))
            {
                try
                {
                    var expressionsContainer = Serializer.Deserialize(model.Expression);
                    expressions.AddRange(expressionsContainer.Expressions);
                }
                catch
                {
                    // Do nothing, new expressions will be used.
                }
            }

            UpdateStoredExpressions(expressions, newExpressions, syncContext);
            syncContext.OperationCompleted();
        }
 public void PropertiesTest()
 {
     var vm = new ExternalDataConfigurationEdit();
     TestsHelper.TestPublicPropertiesGetSet(vm, x => x.SystemName);
 }