示例#1
0
        public PortableData Create()
        {
            // 1. Decrypt stream
            ExportDataEncryptor decryptor =
                new ExportDataEncryptor(dataStream);
            MemoryStream decrypted = new MemoryStream();

            decryptor.Decrypt(decrypted);
            decrypted.Position = 0;

            // 2. Decompress stream
            ExportDataCompressor decompressor =
                new ExportDataCompressor(decrypted);
            MemoryStream decompressed = new MemoryStream();

            decompressor.Decompress(decompressed);
            decompressed.Position = 0;

            // 3. Deserialize stream
            PsaTracesSerializer deserializer =
                new PsaTracesSerializer();
            PortableData result = deserializer.Deserialize(decompressed);

            return(result);
        }
示例#2
0
        /// <summary>
        /// Used to import PortableData from .vts file.
        /// </summary>
        private void Import()
        {
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog
            {
                AddExtension = true,
                DefaultExt   = ".vts"
            };
            bool?result = dlg.ShowDialog();

            if (result == true)
            {
                string filePathName = dlg.FileName;
                try
                {
                    PortableData portableData = PsaTracesExporter.Import(filePathName);
                    CheckTracesForAlreadyDisplayedAndDisplayNew(portableData);
                }
                catch (Exception e)
                {
                    Log.Error(e, "Canot import data.");
                    MessageBox.Show(MainWindowKeeper.MainWindowInstance as Window,
                                    "Cannot parse data file.",
                                    "Import error",
                                    MessageBoxButton.OK,
                                    MessageBoxImage.Error,
                                    MessageBoxResult.No,
                                    MessageBoxOptions.None);
                }
            }
        }
        private void CreateTestData()
        {
            FileStream          stream   = new FileStream(@"c:\Users\Yama\Desktop\pegAll.vts", FileMode.Open);
            PortableDataFactory factory  = new PortableDataFactory(stream);
            PortableData        data     = factory.Create();
            List <PsaDataset>   datasets = FormDatasets(data);
            List <string>       vins     = new List <string>();

            foreach (PsaDataset dataset in datasets)
            {
                vins.Add(dataset.GetVin());
            }
            VtsWebService service         = new VtsWebService();
            List <string> unsupportedVins = service.CheckVinsReturnUnsupported(vins);
            List <string> supportedvins   = new List <string>();

            foreach (string vin in vins)
            {
                if (!unsupportedVins.Contains(vin))
                {
                    supportedvins.Add(vin);
                }
            }
            service.RegisterVehicles(supportedvins);
            List <PsaDatasetDto> dtos = new List <PsaDatasetDto>();

            foreach (PsaDataset dataset in datasets)
            {
                dtos.Add(PsaDatasetAssembler.FromDomainObjectToDto(dataset));
            }
            service.UploadDatasets(dtos);
        }
示例#4
0
 private void UpdateVisualData(PortableData data)
 {
     IsWaitingMode = false;
     perVeh.Clear();
     foreach (ImportableVehicleViewModel vm in
              ExtractImportableVehicles(data.PsaTraces))
     {
         perVeh.Add(vm);
     }
 }
示例#5
0
        /// <summary>
        /// Deserialization
        /// </summary>
        /// <param name="root"></param>
        /// <param name="result"></param>
        private void ReadTraces(XElement root, PortableData result)
        {
            IEnumerable <XElement> traceElements =
                root.Element(PsaTracesName).Elements(TraceName);

            foreach (XElement traceElement in traceElements)
            {
                PsaTrace trace = ReadTraceElement(traceElement);
                result.PsaTraces.Add(trace);
            }
        }
示例#6
0
        public PortableData Deserialize(Stream stream)
        {
            PortableData result = new PortableData();
            XDocument    doc    = XDocument.Load(stream);
            XElement     root   = doc.Root;
            XElement     header = root.Element(HeaderName);

            DateTime dt;

            DateTime.TryParse(header.Element(DateName).Value,
                              CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
            result.Date    = dt;
            result.Guid    = Guid.Parse(header.Element(GuidName).Value);
            result.Version = new Version(header.Element(VersionName).Value);

            ReadTraces(root, result);
            return(result);
        }
示例#7
0
        private void ProcessUploadedFile(object sender,
                                         DoWorkEventArgs doWorkEventArgs)
        {
            FileStream stream = doWorkEventArgs.Argument as FileStream;

            try
            {
                PortableDataFactory factory = new PortableDataFactory(stream);
                importedData = factory.Create();
                PortableDataImporter importer = new PortableDataImporter(
                    OnSuccessfullyImported, OnError);
                importer.UnsupportedVinsFound += OnUnsupportedVinsFound;
                importer.CheckAndImport(importedData);
            }
            catch (Exception)
            {
                stream.Close();
                SmartDispatcher.BeginInvoke(NotifyAboutFailure);
            }
        }
示例#8
0
        private void CheckTracesForAlreadyDisplayedAndDisplayNew(PortableData data)
        {
            // Select those traces that are not yet displayed.
            IList <PsaTrace> tracesToDisplay =
                data.PsaTraces.Where(t => !IsAlreadyDisplayed(t)).ToList();

            // Display traces that are ready to be displayed (possibly creating Vehicles for them).
            foreach (PsaTrace trace in tracesToDisplay)
            {
                if (!ByVehicles.Any(v => v.Vin.Equals(trace.Vin, StringComparison.OrdinalIgnoreCase)))
                {
                    // add vehicle, add trace to vehicle
                    ExportableVehicleViewModel newVehicle = new ExportableVehicleViewModel(
                        trace.Vin,
                        trace.Manufacturer,
                        trace.Mileage,
                        trace.VehicleModelName);
                    ExportablePsaTraceViewModel traceViewModel =
                        new ExportablePsaTraceViewModel(new PsaTraceInfo(trace, new PsaTraceMetadata()));
                    newVehicle.Traces.Add(traceViewModel);
                    traces.Add(traceViewModel);
                    ByVehicles.Add(newVehicle);
                }
                else
                {
                    // add trace to vehicle
                    ExportablePsaTraceViewModel traceViewModel =
                        new ExportablePsaTraceViewModel(new PsaTraceInfo(trace, new PsaTraceMetadata()));
                    ByVehicles.First(v => v.Vin.Equals(trace.Vin,
                                                       StringComparison.OrdinalIgnoreCase)).
                    Traces.Add(traceViewModel);
                    traces.Add(traceViewModel);
                }
            }
            if (tracesToDisplay.Count != 0)
            {
                synchronizer.StartSynchronizationAsync(traces.Select(t => t.ModelTraceInfo).ToList());
            }
        }
        private static List <PsaDataset> FormDatasets(PortableData data)
        {
            IDictionary <string, List <PsaTrace> > sortedTraces =
                new Dictionary <string, List <PsaTrace> >();

            foreach (PsaTrace psaTrace in data.PsaTraces)
            {
                string vin = psaTrace.Vin;
                if (sortedTraces.ContainsKey(vin))
                {
                    sortedTraces[vin].Add(psaTrace);
                }
                else
                {
                    sortedTraces[vin] = new List <PsaTrace>()
                    {
                        psaTrace
                    };
                }
            }
            List <PsaDataset> result = new List <PsaDataset>();

            foreach (KeyValuePair <string, List <PsaTrace> > pair in sortedTraces)
            {
                PsaDataset dataset = new PsaDataset();
                dataset.ExportedDate = data.Date;
                dataset.Guid         = data.Guid;
                dataset.VehicleId    = 0; // Service will fill it
                dataset.SavedDate    = DateTime.Now;
                foreach (PsaTrace trace in pair.Value)
                {
                    dataset.Traces.Add(trace);
                }
                result.Add(dataset);
            }
            return(result);
        }
示例#10
0
 private void DisplayObtainedData(PortableData data)
 {
     SmartDispatcher.BeginInvoke(() => UpdateVisualData(data));
 }