public static DiagBoxTraceSession CreateSession(string filePath)
        {
            if (String.IsNullOrEmpty(filePath))
            {
                throw new ArgumentNullException("filePath");
            }
            if (!File.Exists(filePath))
            {
                throw new VtsAgentException("DiagBox trace session file does not exist.");
            }
            if (!IsMainTraceSessionFile(filePath))
            {
                throw new VtsAgentException("Provided file is not Main Trace session file.");
            }
            DiagBoxTraceSession result = new DiagBoxTraceSession();

            using (FileStream stream = new FileStream(filePath,
                                                      FileMode.Open,
                                                      FileAccess.Read,
                                                      FileShare.ReadWrite))
            {
                XmlSerializer   serializer = new XmlSerializer(typeof(TraceSessionXml));
                TraceSessionXml sessionXml = serializer.Deserialize(stream) as TraceSessionXml;
                if (sessionXml == null)
                {
                    throw new VtsAgentException("Failed to parse DiagBox session correctly.");
                }
                result.TraceSessionMainFilePath = filePath;
                result.Vin              = sessionXml.Vin;
                result.Date             = DateTime.Parse(sessionXml.Date);
                result.Manufacturer     = ParseManufacturer(sessionXml.Trademark);
                result.TraceId          = sessionXml.TraceId;
                result.VehicleArchiName = sessionXml.VehicleArchiName;
                result.VehicleName      = sessionXml.VehicleName;
                result.Version          = sessionXml.Version;
            }
            string traceUserDataFilePathName = GetTraceUserDataFilePathName(filePath);

            if (!String.IsNullOrWhiteSpace(traceUserDataFilePathName))
            {
                result.AdditionalFilePaths.Add(traceUserDataFilePathName);
                result.Mileage = DetermineMileage(traceUserDataFilePathName);
            }
            // get all channels
            string sessionId     = Path.GetFileNameWithoutExtension(filePath);
            string sessionFolder = Path.GetDirectoryName(filePath);
            string searchPattern = String.Format("{0}.MPM.*.xml", sessionId);

            foreach (string file in Directory.GetFiles(sessionFolder, searchPattern))
            {
                result.AdditionalFilePaths.Add(file);
                LexiaGraphSessionRawData session = CreateSessionFromFile(file);
                if (session != null)
                {
                    result.Data.Add(session);
                }
            }
            return(result);
        }
        /// <summary>
        /// Creates from XML and loads labels from csv.
        /// </summary>
        public static LexiaGraphSessionRawData CreateWithCsv(
            string xmlFilePath, string csvFilePath)
        {
            LexiaGraphSessionRawData result = Create(xmlFilePath);

            UpdateWithCsvData(result, csvFilePath);
            return(result);
        }
示例#3
0
        public IEnumerable <string> GetUnsupportedFileNames()
        {
            if (Directory.Exists(dataDirectory.FullName))
            {
                IEnumerable <FileInfo> xmlFiles =
                    dataDirectory.EnumerateFiles("*.xml");
                foreach (FileInfo xmlFile in xmlFiles)
                {
                    // collecting unsupported graphical data
                    string csvFileName =
                        xmlFile.FullName.Replace(".xml", ".csv");
                    LexiaGraphSessionRawData data =
                        LexiaScanDataFactory.CreateWithCsv(
                            xmlFile.FullName, csvFileName);
                    foreach (LexiaChannelRawData lcrData in data.Channels)
                    {
                        if (LexiaChannelDataTypeMapper.
                            GetTypeEnum(lcrData.Header.Mnemocode) ==
                            LexiaChannelType.NOT_SUPPORTED)
                        {
                            yield return(xmlFile.FullName);

                            yield return(csvFileName);
                        }
                    }
                }
            }

            if (Directory.Exists(lexiaInstallationDisk + tracesDataDirectory))
            {
                LexiaPointTypeDataRetriever retr =
                    new LexiaPointTypeDataRetriever(
                        lexiaInstallationDisk + tracesDataDirectory);
                foreach (FileInfo traceFile in retr.GetTraceFiles())
                {
                    TraceFactory factory = new TraceFactory(traceFile);
                    LexiaTrace   trace   = factory.Create();
                    trace.SourceFilePath = traceFile.FullName;
                    if (trace.ParameterSets.Any(ps => ps.Parameters.
                                                Any(p => p.Type == PsaParameterType.Unsupported)) ||
                        trace.ParameterSets.
                        Any(ps => ps.Name == CodeBehindStringResolver.
                            Resolve("UnsupportedDataSet")))
                    {
                        yield return(traceFile.FullName);

                        foreach (string additionalFileName in
                                 retr.GetAdditionalTraceTxtData(traceFile.FullName))
                        {
                            yield return(additionalFileName);
                        }
                    }
                }
            }
        }
 private static void UpdateWithCsvData(
     LexiaGraphSessionRawData dataToUpdate, string sourceCsvFilePath)
 {
     if (!File.Exists(sourceCsvFilePath))
     {
         throw new ArgumentNullException(
                   Cipher.Decrypt("D4crmV7R0TDlcW3CamkthnTEKVqyEr1DejV2Afcmqhk=", "Int32"));
         //"sourceCsvFilePath");
     }
     if (dataToUpdate == null)
     {
         string s = Cipher.Decrypt("QhMahI5v+7DMVfkhkAh+CA==", "Int32");
         s.ToString();
         return;
         //throw new ArgumentNullException(s);
     }
     using (StreamReader reader = new StreamReader(sourceCsvFilePath))
     {
         if (!reader.EndOfStream)
         {
             // we need the second line with headers information;
             reader.ReadLine();
             string headersLine = reader.ReadLine();
             if (String.IsNullOrWhiteSpace(headersLine))
             {
                 string s = Cipher.Decrypt(
                     "UgUtkt2sAZwTUywVUewpRHbSEWoeMnd77CFCuMVhN6jAgSM7DvGzinNPIIvu1i0k",
                     "Int32");
                 throw new ArgumentException(
                           String.Format(s, sourceCsvFilePath));
                 // Error! Cannot read headers line from {0} file!
             }
             IList <string> labelsList =
                 new List <string>(headersLine.TrimEnd(
                                       LabelsSeparator).Split(LabelsSeparator));
             labelsList.RemoveAt(0); // remove milliseconds,
             //we need Y axis labels only.
             if (labelsList.Count != dataToUpdate.Channels.Count)
             {
                 string s = Cipher.Decrypt(
                     "5ZVSoAIlslPoknadYKzy/ryzJm1Dj08UBVOMGcGigVwcjfOGM4Z9QKtvbox0/tIXvM9LqxayJIAyPVJo0UQXsA==", "Int32");
                 throw new ArgumentException(s, sourceCsvFilePath);
             }
             for (int i = 0; i < dataToUpdate.Channels.Count; i++)
             {
                 dataToUpdate.Channels[i].Header.Label = labelsList[i];
             }
         }
     }
 }
        private static LexiaGraphSessionRawData Create(string xmlFilePath)
        {
            string fileName = Path.GetFileNameWithoutExtension(xmlFilePath);

            string[] split            = fileName.Split('&');
            int      year             = Int32.Parse(split[0].Substring(0, 4));
            int      month            = Int32.Parse(split[0].Substring(4, 2));
            int      day              = Int32.Parse(split[0].Substring(6, 2));
            int      mileage          = Int32.Parse(split[1]);
            string   vehicleModelName = split[3];
            DateTime date             = new DateTime(year, month, day);

            if (!File.Exists(xmlFilePath))
            {
                throw new ArgumentException("file does not exist!");
            }
            XmlSerializer srl = new XmlSerializer(
                typeof(LexiaGraphSessionRawData));
            LexiaGraphSessionRawData data = null;

            using (FileStream stream = new FileStream(xmlFilePath, FileMode.Open))
            {
                data = (LexiaGraphSessionRawData)srl.Deserialize(stream);
                if (data != null)
                {
                    data.SourceFileName = xmlFilePath;
                }
            }
            if (String.IsNullOrEmpty(data.SessionInformation.Date))
            {
                data.SessionInformation.Date = date.ToString();
            }
            if (data.SessionInformation.Vehicle.Contains("@"))
            {
                data.SessionInformation.Vehicle = vehicleModelName;
            }
            if (data.Mileage == 0)
            {
                data.Mileage = mileage;
            }
            return(data);
        }
示例#6
0
        public PsaTrace Create()
        {
            LexiaGraphSessionRawData rawData =
                LexiaScanDataFactory.CreateWithCsv(xmlFile, csvFile);
            PsaTrace result = LexiaGraphSessionToPsaTraceConverter.Convert(rawData);

            UpdateWithMetadataIfAvailable(xmlFile, result);
            IList <string> relatedFiles = new List <string>();

            relatedFiles.Add(xmlFile);
            relatedFiles.Add(csvFile);
            LexiaAdditionalFilePathSearcher searcher =
                new LexiaAdditionalFilePathSearcher(xmlFile);

            foreach (string relatedFile in searcher.Search())
            {
                if (!relatedFiles.Contains(relatedFile))
                {
                    relatedFiles.Add(relatedFile);
                }
            }
            UnrecognizedDataKeeper.AnalyseTrace(result, relatedFiles);
            return(result);
        }
        public static PsaTrace Convert(LexiaGraphSessionRawData data)
        {
            if (data == null)
            {
                Log.Warn("Got null data into converter");
                return(null);
            }
            PsaTrace result = new PsaTrace();

            result.Manufacturer = Manufacturer.Citroen;
            if (data.SessionInformation != null)
            {
                result.Vin = data.SessionInformation.Summary.Split(' ')[0];
                string datetime = String.Format("{0} {1}",
                                                data.SessionInformation.Date,
                                                data.SessionInformation.Time);
                result.Date = DateTime.ParseExact(datetime,
                                                  dateTimeFormat, CultureInfo.InvariantCulture);
                if (data.SessionInformation.Vehicle.Contains("@"))
                {
                    result.VehicleModelName =
                        KnownVehicleNames.Get(data.SessionInformation.Vehicle);
                }
                else
                {
                    result.VehicleModelName = data.SessionInformation.Vehicle;
                }
            }
            result.Mileage = data.Mileage;
            PsaParametersSet set = GenerateParametersSet(data.Channels);

            set.EcuName  = data.DataHeader.EcuName;
            set.EcuLabel = data.DataHeader.EcuLabel;
            result.ParametersSets.Add(set);
            return(result);
        }