internal static void ModifyDocumenation(ModTypes mod, string currentProject, Documentation data)
        {
            ProjectPOCO p = GetCurrentProject(currentProject);

            if (ModTypes.Add == mod)
            {
                if (!checkExists(p, data))
                {
                    p.DocumentationItems.Add(data);
                }
            }
            else if (ModTypes.Remove == mod)
            {
                if (checkExists(p, data))
                {
                    Documentation c = p.DocumentationItems.FirstOrDefault(x => x.Category == data.Category &&
                                                                          x.DateOfIssue == data.DateOfIssue && x.Details == data.Details);
                    if (null != c)
                    {
                        p.DocumentationItems.Remove(c);
                    }
                }
            }
        }
        public static IList <ProjectPOCO> GetDataObjects(string file)
        {
            IList <ProjectPOCO> projects = new List <ProjectPOCO>();
            //TODO fix the crash on junk files.

            XElement projectData = XElement.Load(file);

            foreach (XElement x in projectData.Elements("project"))
            {
                ProjectPOCO p = new ProjectPOCO();
                p.Name = x.Element("name").Value;
                XElement contacts = x.Element("contacts");
                p.ISSO          = contacts.Element("isso").Value;
                p.DevLead       = contacts.Element("devLead").Value;
                p.ProductionURL = null == x.Element("productionURL") ? string.Empty : x.Element("productionURL").Value;
                XElement codeDetail                  = x.Element("codeDetail");
                XElement vulnerabilities             = x.Element("vulnerabilities");
                IEnumerable <XElement> codeLanguages = null == codeDetail.Element("languages") ? new List <XElement>() : codeDetail.Element("languages").Elements("language");
                if (codeLanguages.Count() > 0)
                {
                    foreach (XElement item in codeLanguages.ToList())
                    {
                        if (null == p.CodeLanguages)
                        {
                            p.CodeLanguages = new List <string>();
                        }
                        p.CodeLanguages.Add(item.Value);
                    }
                }
                else
                {
                    p.CodeLanguages = new List <string>();
                }

                bool isScanned = false;
                if (bool.TryParse(codeDetail.Attribute("isCurrentlyScanned").Value, out isScanned))
                {
                    p.isCurrentlyScanned = isScanned;
                }
                else
                {
                    p.isCurrentlyScanned = false;
                }
                //need to implement extension method for parsing enums
                p.ScanConfiguration = (CodeScanType)Enum.Parse(typeof(CodeScanType), codeDetail.Attribute("scanConfiguration").Value);
                p.Repository        = codeDetail.Element("repository").Value;
                IEnumerable <XElement> scanData = x.Element("codeAnalysis").Elements("scanDate");
                if (scanData.Count() > 0)
                {
                    foreach (XElement ele in scanData.ToList())
                    {
                        DateTime outDate = new DateTime();
                        if (DateTime.TryParse(ele.Value, out outDate))
                        {
                            if (null == p.StaticAnalysis)
                            {
                                p.StaticAnalysis = new List <StaticAnalysisPOCO>();
                            }
                            StaticAnalysisPOCO sa = new StaticAnalysisPOCO();
                            sa.AnalysisDate = outDate;
                            p.StaticAnalysis.Add(sa);
                        }
                    }
                }
                XElement penTests            = x.Element("penetrationTests");
                IEnumerable <XElement> scans = penTests.Elements("scan");
                if (scans.Count() > 0)
                {
                    foreach (XElement e1 in scans.ToList())
                    {
                        DateTime            outBegin = new DateTime();
                        DateTime            outEnd   = new DateTime();
                        PenetrationTestPOCO t        = new PenetrationTestPOCO();
                        if (DateTime.TryParse(e1.Element("startDate").Value, out outBegin))
                        {
                            t.StartDate = outBegin;
                        }
                        else
                        {
                            continue;
                        }
                        if (DateTime.TryParse(e1.Element("endDate").Value, out outEnd))
                        {
                            t.EndDate = outEnd;
                        }
                        else
                        {
                            continue;
                        }
                        t.TesterName = e1.Element("tester").Value;
                        if (null == p.PenetrationTests)
                        {
                            p.PenetrationTests = new List <PenetrationTestPOCO>();
                        }
                        p.PenetrationTests.Add(t);
                    }
                }
                XElement dx = x.Element("documentation");
                if (null != dx)
                {
                    IEnumerable <XElement> doco = dx.Elements("item");
                    if (doco.Count() > 0)
                    {
                        if (null == p.DocumentationItems)
                        {
                            p.DocumentationItems = new List <Documentation>();
                        }
                        foreach (XElement d in doco.ToList())
                        {
                            Documentation dxi = new Documentation();
                            dxi.Details = string.IsNullOrEmpty(d.Element("details").Value) ? string.Empty : d.Element("details").Value;
                            DateTime outDoI = new DateTime();
                            if (DateTime.TryParse(d.Element("dateOfIssue").Value, out outDoI))
                            {
                                dxi.DateOfIssue = outDoI;
                            }
                            else
                            {
                                continue;
                            }
                            dxi.Category = string.IsNullOrEmpty(d.Element("category").Value) ? string.Empty : d.Element("category").Value;
                            p.DocumentationItems.Add(dxi);
                        }
                    }
                }
                else
                {
                    p.DocumentationItems = new List <Documentation>();
                }
                try //LEGACY HELPER TRY
                {
                    IEnumerable <XElement> items = vulnerabilities.Elements("item");
                    IList <IVulnerability> list  = new List <IVulnerability>();
                    foreach (var item in items)
                    {
                        IVulnerability      v      = new Vulnerability();
                        string              date1  = item.Element("discoveredDate").Value;
                        string              date2  = item.Element("completedDate").Value;
                        Nullable <DateTime> nulled = null;
                        if (null != item.Element("title"))
                        {
                            v.Title = item.Element("title").Value;
                        }
                        v.DiscoveredDate   = string.IsNullOrEmpty(date1) ? nulled : Convert.ToDateTime(date1);
                        v.CompletedDate    = string.IsNullOrEmpty(date2) ? nulled : Convert.ToDateTime(date2);
                        v.Risk             = item.Element("risk").Value;
                        v.Status           = item.Element("status").Value;
                        v.Details          = HttpUtility.HtmlDecode(item.Element("vulnerability").Value);
                        v.Tester           = item.Element("tester").Value;
                        v.Identifier       = Guid.Parse(item.Element("identifier").Value);
                        v.VulnTypeReported = item.Element("type").Value;
                        if (null != item.Element("flagged"))
                        {
                            v.isWeeklyReportItem = bool.Parse(item.Element("flagged").Value);
                        }
                        else
                        {
                            v.isWeeklyReportItem = false;
                        }
                        if (null != item.Element("cvss2"))
                        {
                            decimal dec = new decimal();
                            if (decimal.TryParse(item.Element("cvss2").Value, out dec))
                            {
                                v.CVSS = dec;
                            }
                            else
                            {
                                v.CVSS = 0;
                            }
                        }
                        list.Add(v);
                    }
                    if (list.Count() > 0)
                    {
                        p.Vulnerabilities = list;
                    }
                }
                catch { }

                projects.Add(p);
            }
            return(projects);
        }