aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Modules/Tango.PPC.Synchronization/Views/MainView.xaml
blob: e935b22ec6c5bd8cd114ca2f6ed57db9b8f13902 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<UserControl x:Class="Tango.PPC.Synchronization.Views.MainView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:vm="clr-namespace:Tango.PPC.Synchronization.ViewModels"
             xmlns:global="clr-namespace:Tango.PPC.Synchronization"
             xmlns:local="clr-namespace:Tango.PPC.Synchronization.Views"
             mc:Ignorable="d" 
             d:DesignHeight="1280" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}">
    <Grid>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="{StaticResource TangoHeaderFontSize}">TEST MODULE</TextBlock>
    </Grid>
</UserControl>
.highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tango.SQLExaminer
{
    public class ExaminerSequenceConfigurationRunner
    {
        public event EventHandler<String> Log;
        public event EventHandler<ExaminerSequenceItem> ScriptExecuting;

        public String SequenceFile { get; private set; }

        public Core.DataSource Source { get; private set; }

        public Core.DataSource Target { get; private set; }

        public String MachineSerialNumber { get; private set; }

        public String ScriptsFolder { get; private set; }

        public ExaminerSequenceConfiguration Configuration { get; private set; }

        public ExaminerSequenceConfigurationRunner(String sequenceFile, String scriptsFolder, Core.DataSource source, Core.DataSource target, String machineSerialNumber)
        {
            SequenceFile = sequenceFile;
            ScriptsFolder = scriptsFolder;
            Source = source;
            Target = target;
            MachineSerialNumber = machineSerialNumber;
            Configuration = ExaminerSequenceConfiguration.FromFile(sequenceFile);
        }

        public Task Run()
        {
            return Task.Factory.StartNew(() =>
            {
                ExaminerSequenceConfiguration sequence = Configuration;

                foreach (var item in sequence.Items.OrderBy(x => x.Index))
                {
                    ScriptExecuting?.Invoke(this, item);

                    ExaminerConfigurationBuilder builder = new ExaminerConfigurationBuilder(Path.Combine(ScriptsFolder, item.FileName));


                    if (item.Direction == ExaminerSequenceItemDirection.SourceToTarget)
                    {
                        builder.SetSource(Source);
                        builder.SetTarget(Target);
                    }
                    else
                    {
                        builder.SetSource(Target);
                        builder.SetTarget(Source);
                    }

                    if (item.RequiresSerialNumber)
                    {
                        builder.SetMachineSerialNumber(MachineSerialNumber);
                    }

                    builder.Synchronize();

                    ExaminerProcess process = new ExaminerProcess(builder.Build(), item.Type == ExaminerSequenceItemType.Schema ? ExaminerProcessType.Schema : ExaminerProcessType.Data);
                    process.Progress += (x, msg) =>
                    {
                        if (msg != null && !msg.Contains("SQL Examiner"))
                        {
                            Log?.Invoke(this, msg);
                        }
                    };

                    var result = process.Execute().Result;

                    if (result.ExitCode != ExaminerProcessExitCode.Success)
                    {
                        throw new InvalidDataException(String.Format("Synchronization script '{0}' has terminated with exit code '{1}'.", item.Name, result.ExitCode));
                    }
                }

            });
        }
    }
}