public KeyValueParameter()
 {
     KeyValue = new KeyValue();
     ReturnMe = new ReturnMeForKeyValuePair();
     ResponseRequestedItems = new List <string>();
     AccessControl          = new AccessControl();
     SuppressionOptions     = new SuppressionOptions {
         IgnoreSuppression = true
     };
 }
        public object ProcessForNameAndAddress(NameAndAddressParameter nameAndAddressParameter, KeyValueParameter keyValueParameter = null)
        {
            List <string> emptyList = new List <string>();

            if (nameAndAddressParameter.ReturnMe.CustomerKeys.SequenceEqual(emptyList))
            {
                NoAccessToCusotmerKeys message = new NoAccessToCusotmerKeys();
                message.Message = null;
                return(message);
            }
            else if (nameAndAddressParameter.AccessControl.CustomerKeyAccess.Find(x => x.HasAccess) == null)
            {
                NoAccessToCusotmerKeys message = new NoAccessToCusotmerKeys();
                message.Message = "You dont' have access CustomerKeys data.";
                return(message);
            }

            if (nameAndAddressParameter == null)
            {
                throw new ArgumentException("NameAndAddress cannot be null.");
            }

            object       customerIndexList = new object();
            CustomerKeys keys = new CustomerKeys();

            try
            {
                var pkey = _mciRequestService.GetPersistantKey(nameAndAddressParameter.NameAndAddress);

                if (pkey == null || !pkey.HasValue)
                {
                    keys.Keys.HasPartialResult = false;
                    keys.Keys         = null;
                    customerIndexList = keys;
                }
                else
                {
                    if (keyValueParameter == null)
                    {
                        ReturnMeForKeyValuePair returnme = new ReturnMeForKeyValuePair();
                        returnme.CustomerKeys   = nameAndAddressParameter.ReturnMe.CustomerKeys;
                        returnme.MailingHistory = nameAndAddressParameter.ReturnMe.MailingHistory;
                        returnme.Membership     = nameAndAddressParameter.ReturnMe.Membership;
                        returnme.Permissions    = nameAndAddressParameter.ReturnMe.Permissions;
                        keyValueParameter       = new KeyValueParameter {
                            AccessControl = nameAndAddressParameter.AccessControl, ReturnMe = returnme
                        };
                    }
                    keyValueParameter.KeyValue.Key   = "PKEY";
                    keyValueParameter.KeyValue.Value = pkey.Value.ToString();

                    // AE : Feb 18
                    // Call to New self instance ! Replace with direct call to target ley value Process() method
                    // var customerKeyProcess = new CustomerKeyProcess(keyValueParameter, _mciRequestService,
                    //     _clientScopeService, _logger);
                    // customerIndexList = customerKeyProcess.Process();
                    customerIndexList = Process(keyValueParameter);
                }
            }
            catch (Exception ex)
            {
                _logger.Error("NameAndAddressStrategy Execute (CustomerKeys) " + "ErrorTag: " + ErrorTagProvider.ErrorTag + " -- " + ex.Message, ex);
                throw new Exception(ex.Message);
            }

            return(customerIndexList);
        }