/// <summary>
        /// This function loads up the ozasmtSource file and adds its stats to a new finding called savedCreatedOzasmtAs
        /// which will have the fingdings in o2AssessmentTarget
        /// </summary>
        /// <param name="ozasmtSource"></param>
        /// <param name="o2AssessmentTarget"></param>
        /// <param name="savedCreatedOzasmtAs"></param>
        public bool addAssessmentStatsFromSourceToO2AssessmentAndSaveIt(string ozasmtSource, IO2Assessment o2AssessmentTarget, string savedCreatedOzasmtAs)
        {
            AssessmentRun assessmentRunToImport = OzasmtUtils_OunceV6.LoadAssessmentRun(ozasmtSource);
            var           targetAssessmentRun   = createAssessmentRunObject(o2AssessmentTarget);

            // map assessmentRunToImport to targetAssessmentRun

            // add targetAssessmentRun top level data
            targetAssessmentRun.AssessmentStats  = assessmentRunToImport.AssessmentStats;
            targetAssessmentRun.AssessmentConfig = assessmentRunToImport.AssessmentConfig;
            targetAssessmentRun.Messages         = assessmentRunToImport.Messages;
            // add Assessment data
            targetAssessmentRun.Assessment.assessee_name   = assessmentRunToImport.Assessment.assessee_name;
            targetAssessmentRun.Assessment.AssessmentStats = assessmentRunToImport.AssessmentStats;
            targetAssessmentRun.Assessment.owner_name      = assessmentRunToImport.Assessment.owner_name;
            targetAssessmentRun.Assessment.owner_type      = assessmentRunToImport.Assessment.owner_type;

            // add project and file data

            //create backup of current findings
            var currentAssessmentDataBackup = targetAssessmentRun.Assessment.Assessment[0];   // there should only be one

            // assign current Assessment array to assessmentRunToImport.Assessment.Assessment
            targetAssessmentRun.Assessment.Assessment = assessmentRunToImport.Assessment.Assessment;
            // remove all findings references (since what we want is the stats
            foreach (var assessment in targetAssessmentRun.Assessment.Assessment)
            {
                if (assessment.AssessmentFile != null)
                {
                    foreach (var assessmentFile in assessment.AssessmentFile)
                    {
                        assessmentFile.Finding = null;
                    }
                }
            }
            // apppend the currentAssessmentDataBackup to the current Assessment Array
            var assessments = new List <Assessment>(targetAssessmentRun.Assessment.Assessment);

            assessments.Add(currentAssessmentDataBackup);
            targetAssessmentRun.Assessment.Assessment = assessments.ToArray();

            //targetAssessmentRun.name = "AAAA";
            // save it
            return(OzasmtUtils_OunceV6.SaveAssessmentRun(assessmentRun, savedCreatedOzasmtAs));
        }
        public Dictionary <String, List <AssessmentAssessmentFileFinding> > getFilesToO2FindingMappings(IEnumerable <IO2Finding> o2Findings)
        {
            var filesMappedToO2Findings = new Dictionary <string, List <AssessmentAssessmentFileFinding> >();
            // create var to hold string and file Indexes and populate it with the current string indexes
            var dStringIndexes = new Dictionary <string, uint>();
            var dFilesIndexes  = new Dictionary <string, uint>();

            foreach (AssessmentRunStringIndex stringIndex in assessmentRun.StringIndeces)
            {
                dStringIndexes.Add(stringIndex.value, stringIndex.id);
            }
            foreach (AssessmentRunFileIndex siFileIndexes in assessmentRun.FileIndeces)
            {
                dFilesIndexes.Add(siFileIndexes.value, siFileIndexes.id);
            }

            foreach (IO2Finding o2Finding in o2Findings)
            {
                if (o2Finding.file == null)
                {
                    o2Finding.file = "[Findings with NO file mappped]";
                }

                if (false == filesMappedToO2Findings.ContainsKey(o2Finding.file))
                {
                    filesMappedToO2Findings.Add(o2Finding.file, new List <AssessmentAssessmentFileFinding>());
                }

                filesMappedToO2Findings[o2Finding.file].Add(OzasmtUtils_OunceV6.getAssessmentAssessmentFileFinding(
                                                                o2Finding, dStringIndexes, dFilesIndexes));
            }
            // finaly update the main string and file indexes
            assessmentRun.StringIndeces = OzasmtUtils_OunceV6.createStringIndexArrayFromDictionary(dStringIndexes);
            assessmentRun.FileIndeces   = OzasmtUtils_OunceV6.createFileIndexArrayFromDictionary(dFilesIndexes);
            return(filesMappedToO2Findings);
        }
        public bool importFile(string fileToLoad, IO2Assessment o2Assessment)
        {
            try
            {
                if (canLoadFile(fileToLoad))
                {
                    //o2Assessment.lastOzasmtImportWasItSucessfull = false;
                    //o2Assessment.lastOzasmtImportFile = fileToLoad;
                    //o2Assessment.lastOzasmtImportFileSize = Files.getFileSize(fileToLoad);

                    //DateTime startImportTime = DateTime.Now;
                    var           timer = new O2Timer("Loaded assessment " + fileToLoad + " ").start();
                    AssessmentRun assessmentRunToImport = OzasmtUtils_OunceV6.LoadAssessmentRun(fileToLoad);
                    timer.stop();

                    /*     assessmentRun.AssessmentConfig = assessmentRunToImport.AssessmentConfig;
                     * assessmentRun.AssessmentStats = assessmentRunToImport.AssessmentStats;
                     * assessmentRun.Messages = assessmentRunToImport.Messages;
                     * assessmentRun.name = assessmentRunToImport.name ?? OzasmtUtils_OunceV6.calculateAssessmentNameFromScans(assessmentRunToImport);*/

                    o2Assessment.name = assessmentRunToImport.name ??
                                        OzasmtUtils_OunceV6.calculateAssessmentNameFromScans(assessmentRunToImport);

                    // I don't think I need this since the O2Finding objects have the full strings
                    // map top level objects

                    /*
                     * assessmentRun.FileIndeces = assessmentRunToImport.FileIndeces;
                     * assessmentRun.StringIndeces = assessmentRunToImport.StringIndeces;*/

                    // import findings
                    if (null != assessmentRunToImport.Assessment.Assessment)
                    {
                        foreach (Assessment assessment in assessmentRunToImport.Assessment.Assessment)
                        {
                            if (null != assessment.AssessmentFile)
                            {
                                foreach (AssessmentAssessmentFile assessmentFile in assessment.AssessmentFile)
                                {
                                    if (assessmentFile.Finding != null)
                                    {
                                        foreach (AssessmentAssessmentFileFinding finding in assessmentFile.Finding)
                                        {
                                            o2Assessment.o2Findings.Add(OzasmtUtils_OunceV6.getO2Finding(finding,
                                                                                                         assessmentFile,
                                                                                                         assessmentRunToImport));
                                        }
                                    }
                                }
                            }
                        }
                    }

                    // if we made it this far all went ok;
                    //o2Assessment.lastOzasmtImportTimeSpan = DateTime.Now - startImportTime;
                    //o2Assessment.lastOzasmtImportWasItSucessfull = true;
                    return(true);
                }
            }
            catch
            (Exception ex)
            {
                "in importAssessmentRun: {0}".error(ex.Message);
            }
            return(false);
        }
 public bool save(string assessmentName, IEnumerable <IO2Finding> o2Findings, string sPathToSaveAssessment)
 {
     createAssessmentRunObject(assessmentName, o2Findings);
     return(OzasmtUtils_OunceV6.SaveAssessmentRun(assessmentRun, sPathToSaveAssessment));
 }
 public O2AssessmentSave_OunceV6()
 {
     engineName    = "O2AssessmentSave_OunceV6";
     assessmentRun = OzasmtUtils_OunceV6.getDefaultAssessmentRunObject();
 }