private IReadOnlyCollection <string> IdentifyRequestedColumns(IRetrievalParameters parameters)
        {
            if (null == parameters)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            IEnumerable <string> requestedAttributes = this.ColumnNames;

            if (parameters.RequestedAttributePaths != null && parameters.RequestedAttributePaths.Any())
            {
                requestedAttributes =
                    requestedAttributes
                    .Where(
                        (string candidateItem) =>
                        parameters
                        .RequestedAttributePaths
                        .Any(
                            (string requestedItem) =>
                            string.Equals(candidateItem, requestedItem, StringComparison.Ordinal)))
                    .ToArray();
            }

            if (parameters.ExcludedAttributePaths != null)
            {
                requestedAttributes =
                    requestedAttributes
                    .Where(
                        (string candidateItem) =>
                        !parameters
                        .ExcludedAttributePaths
                        .Any(
                            (string excludedItem) =>
                            string.Equals(candidateItem, excludedItem, StringComparison.Ordinal)))
                    .ToArray();
            }

            if
            (
                FileProvider
                .SchemaIdentifiersGroup
                .Value
                .Any(
                    (string item) =>
                    string.Equals(item, parameters.SchemaIdentifier, StringComparison.Ordinal)) &&
                requestedAttributes
                .Any(
                    (string item) =>
                    string.Equals(AttributeNames.Members, item, StringComparison.Ordinal))
            )
            {
                throw new NotSupportedException(FileProviderResources.ExceptionRetrievingGroupMembersNotSupported);
            }

            IReadOnlyCollection <string> results = requestedAttributes.ToArray();

            return(results);
        }
        private static void Validate(IRetrievalParameters parameters)
        {
            if (null == parameters)
            {
                throw new ArgumentNullException(AmazonWebServicesProvider.ArgumentNameParameters);
            }


            if (!parameters.SchemaIdentifier.Equals(SchemaIdentifiers.WindowsAzureActiveDirectoryGroup, StringComparison.Ordinal))
            {
                return;
            }
            
            if
            (
                    parameters.RequestedAttributePaths != null
                &&  parameters
                     .RequestedAttributePaths
                    .Any(
                        (string item) =>
                            string.Equals(item, AttributeNames.Members))
            )
            {
                throw new NotSupportedException(ProvisioningAgentResources.ExceptionRetrievingGroupMembersNotSupported);
            }

            if
            (
                    (
                            null == parameters.RequestedAttributePaths
                        ||  !parameters.RequestedAttributePaths.Any()
                    )
                && !parameters
                    .ExcludedAttributePaths
                    .Any(
                        (string item) =>
                            string.Equals(item, AttributeNames.Members))
            )
            {
                throw new NotSupportedException(ProvisioningAgentResources.ExceptionRetrievingGroupMembersNotSupported);
            }
        }
        private IReadOnlyCollection<string> IdentifyRequestedColumns(IRetrievalParameters parameters)
        {
            if (null == parameters)
            {
                throw new ArgumentNullException(FileProvider.ArgumentNameParameters);
            }

            IEnumerable<string> requestedAttributes = this.attributeNames;
            if (parameters.RequestedAttributePaths != null && parameters.RequestedAttributePaths.Any())
            {
                requestedAttributes =
                    requestedAttributes
                    .Where(
                        (string candidateItem) =>
                            parameters
                            .RequestedAttributePaths
                            .Any(
                                (string requestedItem) =>
                                    string.Equals(candidateItem, requestedItem, StringComparison.Ordinal)))
                    .ToArray();
            }

            if (parameters.ExcludedAttributePaths != null)
            {
                requestedAttributes =
                    requestedAttributes
                    .Where(
                        (string candidateItem) =>
                            !parameters
                            .ExcludedAttributePaths
                            .Any(
                                (string excludedItem) =>
                                    string.Equals(candidateItem, excludedItem, StringComparison.Ordinal)))
                    .ToArray();
            }

            if
            (
                    FileProvider
                    .SchemaIdentifiersGroup
                    .Value
                    .Any(
                        (string item) =>
                            string.Equals(item, parameters.SchemaIdentifier, StringComparison.Ordinal))
                && requestedAttributes
                    .Any(
                        (string item) =>
                            string.Equals(AttributeNames.Members, item, StringComparison.Ordinal))
            )
            {
                throw new NotSupportedException(ProvisioningAgentResources.ExceptionRetrievingGroupMembersNotSupported);
            }

            IReadOnlyCollection<string> results = requestedAttributes.ToArray();
            return results;
        }