예제 #1
0
        public ValidationErrors Validate()
        {
            var validationErrors = new ValidationErrors();

            validationErrors.AddErrorsFor(this.SourceFolder.UUID, this.SourceFolder.Validate());

            foreach (var target in this.TargetFolders)
            {
                validationErrors.AddErrorsFor(target.UUID, target.Validate());

                if (target.IntersectsWith(this.SourceFolder))
                {
                    validationErrors.AddErrorFor(target.UUID, "Selected folder intersects with source folder");
                }

                if (this.TargetFolders.Any(it => it.UUID != target.UUID && it.IntersectsWith(target)))
                {
                    validationErrors.AddErrorFor(target.UUID, "Specified folder is a subpath of one of the added folders");
                }
            }

            var duplicateIds = this.TargetFolders
                               .GroupBy(it => it.FolderPath.ToLowerInvariant())
                               .SelectMany(grp => grp.Skip(1))
                               .Select(it => it.UUID);

            foreach (var duplicateId in duplicateIds)
            {
                validationErrors.AddErrorFor(duplicateId, "Folder duplicated");
            }

            return(validationErrors);
        }