public virtual ReportRejectionType IsSatisfiedBy(EpisodeParseResult subject)
        {
            if (!_qualityAllowedByProfileSpecification.IsSatisfiedBy(subject))
            {
                return(ReportRejectionType.QualityNotWanted);
            }
            if (!_customStartDateSpecification.IsSatisfiedBy(subject))
            {
                return(ReportRejectionType.AiredAfterCustomStartDate);
            }
            if (!_upgradeDiskSpecification.IsSatisfiedBy(subject))
            {
                return(ReportRejectionType.ExistingQualityIsEqualOrBetter);
            }
            if (!_languageSpecification.IsSatisfiedBy(subject))
            {
                return(ReportRejectionType.LanguageNotWanted);
            }
            if (!_retentionSpecification.IsSatisfiedBy(subject))
            {
                return(ReportRejectionType.Retention);
            }
            if (!_acceptableSizeSpecification.IsSatisfiedBy(subject))
            {
                return(ReportRejectionType.Size);
            }
            if (!_allowedReleaseGroupSpecification.IsSatisfiedBy(subject))
            {
                return(ReportRejectionType.ReleaseGroupNotWanted);
            }
            if (_alreadyInQueueSpecification.IsSatisfiedBy(subject))
            {
                return(ReportRejectionType.AlreadyInQueue);
            }

            logger.Debug("Episode {0} is needed", subject);
            return(ReportRejectionType.None);
        }