protected ICollection <string> GetBulkAddUsersParams(DataRequest dataRequest, IFlowManager flowManager,
                                                             out bool createInNaas, out string defaultPassword,
                                                             out SystemRoleType defaultRole, out bool isUserActive,
                                                             out ICollection <FlowNameAndRole> accessFlows)
        {
            if (CollectionUtils.IsNullOrEmpty(dataRequest.Parameters))
            {
                throw new ArgumentException("No parameters were specified for the service");
            }
            if (!dataRequest.Parameters.IsByName)
            {
                throw new ArgumentException("The parameters for the service must be \"by-name\"");
            }
            IDictionary <string, string> flowsNameToIdMap = flowManager.GetAllFlowsNameToIdMap();

            createInNaas    = true;
            defaultRole     = SystemRoleType.Authed;
            defaultPassword = null;
            isUserActive    = true;
            accessFlows     = new List <FlowNameAndRole>();
            List <string> usernames = new List <string>();

            foreach (KeyValuePair <string, string> pair in dataRequest.Parameters.NameValuePairs)
            {
                string key = pair.Key.ToUpper();
                if (key.StartsWith(BulkAddUsersConstants.PARAM_USERNAME_PREFIX))
                {
                    if (!StringUtils.Contains(pair.Value, usernames, StringComparison.InvariantCultureIgnoreCase))
                    {
                        usernames.Add(pair.Value);
                    }
                }
                else if (key.StartsWith(BulkAddUsersConstants.PARAM_FLOW_NAME_PREFIX))
                {
                    string[] flowParams =
                        pair.Value.Split(new string[] { BulkAddUsersConstants.PARAM_VALUE_SEPARATOR },
                                         StringSplitOptions.RemoveEmptyEntries);
                    if ((flowParams.Length != 2) || string.IsNullOrEmpty(flowParams[0]) ||
                        string.IsNullOrEmpty(flowParams[1]))
                    {
                        throw new ArgumentException(string.Format("Invalid flow parameter specified: {0}",
                                                                  pair.Value));
                    }
                    string flowId;
                    if (!flowsNameToIdMap.TryGetValue(flowParams[0], out flowId))
                    {
                        throw new ArgumentException(string.Format("A flow with the name \"{0}\" cannot be found",
                                                                  flowParams[0]));
                    }
                    accessFlows.Add(new FlowNameAndRole(flowParams[0], EnumUtils.ParseEnum <FlowRoleType>(flowParams[1])));
                }
                else
                {
                    switch (key)
                    {
                    case BulkAddUsersConstants.PARAM_CREATE_IN_NAAS:
                        createInNaas = bool.Parse(pair.Value);
                        break;

                    case BulkAddUsersConstants.PARAM_DEFAULT_PASSWORD:
                        defaultPassword = pair.Value;
                        break;

                    case BulkAddUsersConstants.PARAM_DEFAULT_ROLE:
                        defaultRole = (SystemRoleType)Enum.Parse(typeof(SystemRoleType), pair.Value, true);
                        break;

                    case BulkAddUsersConstants.PARAM_IS_ACTIVE:
                        isUserActive = bool.Parse(pair.Value);
                        break;

                    default:
                        throw new ArgumentException(string.Format("An unrecognized key/value parameter was found: \"{0}\" = \"{1}\"",
                                                                  pair.Key, pair.Value));
                    }
                }
            }
            return(usernames);
        }