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); }
/// <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); }
private void UpdateVisualData(PortableData data) { IsWaitingMode = false; perVeh.Clear(); foreach (ImportableVehicleViewModel vm in ExtractImportableVehicles(data.PsaTraces)) { perVeh.Add(vm); } }
/// <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); } }
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); }
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); } }
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); }
private void DisplayObtainedData(PortableData data) { SmartDispatcher.BeginInvoke(() => UpdateVisualData(data)); }