/// <summary>
        /// The get duplicated blocks.
        /// </summary>
        /// <param name="secondProject">
        /// The second project.
        /// </param>
        /// <returns>
        /// The <see cref="List"/>.
        /// </returns>
        public List<DuplicationData> GetDuplicatedBlocks(SonarProject secondProject)
        {
            var newData = new List<DuplicationData>();

            foreach (var otherData in this.GetDuplicatedData())
            {
                var isFound = false;

                foreach (var group in otherData.DuplicatedGroups)
                {
                    foreach (var block in group.DuplicatedBlocks)
                    {
                        if (this.IsFileFoundInFiles(block.Resource.Key) != null)
                        {
                            continue;
                        }

                        if (secondProject.IsFileFoundInFiles(block.Resource.Key) != null)
                        {
                            isFound = true;
                        }
                    }
                }

                if (isFound)
                {
                    newData.Add(otherData);
                }
            }

            return newData;
        }
        /// <summary>
        /// The set duplication data for single project.
        /// </summary>
        /// <param name="value">
        /// The value.
        /// </param>
        private void SetDuplicationDataForSingleProject(SonarProject project)
        {
            var bw = new BackgroundWorker();

            bw.DoWork += delegate
            {
                this.IsIdle = false;
                if (project == null)
                {
                    return;
                }

                this.DuplicatedData = project.GetDuplicatedData();
                this.CrossProjectResources = this.GetProjectsWithMatchingDuplications(project);
            };

            bw.RunWorkerCompleted += delegate
            {
                this.OnPropertyChanged();
                this.IsIdle = true;
            };

            bw.RunWorkerAsync();
        }
        /// <summary>
        /// The set cross duplication data.
        /// </summary>
        /// <param name="mainSonarProject">
        /// The main sonar project.
        /// </param>
        /// <param name="secondProject">
        /// The second project.
        /// </param>
        private void SetCrossDuplicationData(SonarProject mainSonarProject, SonarProject secondProject)
        {
            var bw = new BackgroundWorker();

            bw.DoWork += delegate
            {
                this.IsIdle = false;
                this.DuplicatedData = mainSonarProject.GetDuplicatedBlocks(secondProject);
            };

            bw.RunWorkerCompleted += delegate
            {
                this.OnPropertyChanged();
                this.IsIdle = true;
            };

            bw.RunWorkerAsync();
        }
        /// <summary>
        /// The get projects with matching duplications.
        /// </summary>
        /// <param name="project">
        /// The project.
        /// </param>
        /// <returns>
        /// The <see cref="List"/>.
        /// </returns>
        private List<SonarProject> GetProjectsWithMatchingDuplications(SonarProject project)
        {
            var crossProjectData = new List<SonarProject>();

            foreach (var dup in this.DuplicatedData)
            {
                foreach (var group in dup.DuplicatedGroups)
                {
                    foreach (var block in group.DuplicatedBlocks)
                    {
                        if (project.IsFileFoundInFiles(block.Resource.Key) == null)
                        {
                            foreach (var projectResource in this.ProjectResources)
                            {
                                if (projectResource.IsFileFoundInFiles(block.Resource.Key) != null)
                                {
                                    bool found = false;
                                    foreach (var crossproject in crossProjectData)
                                    {
                                        if (crossproject.Project.Key.Equals(projectResource.Project.Key))
                                        {
                                            found = true;
                                        }
                                    }

                                    if (!found)
                                    {
                                        crossProjectData.Add(projectResource);
                                    }
                                }
                            }
                        }

                    }
                }
            }

            return crossProjectData;
        }