//------------------------------------------------------------------------------
        public bool Load(string settingName, SettingBaseAttribute attr, out object value)
        {
            if (!m_keyChainUtils.Contains(settingName))
            {
                InternalConfiguration.PlatformHelper.Log(LogLevel.Info,
                                                         "KeyChainSerializer.Load - no such setting",
                                                         settingName);

                value = null;
                return(false);
            }

            string stringValue;
            bool   status = m_keyChainUtils.GetKey(settingName, out stringValue);

            if (!status || stringValue == null)
            {
                InternalConfiguration.PlatformHelper.Log(LogLevel.Error,
                                                         "KeyChainSerializer.Load - error",
                                                         settingName);
                value = null;
                return(false);
            }
            else
            {
                InternalConfiguration.PlatformHelper.Log(LogLevel.Info,
                                                         "KeyChainSerializer.Load - success",
                                                         settingName);
            }

            // in this case simplified object will be corrected in the SettingsSerializer.cs
            value = stringValue;

            return(true);
        }
        //------------------------------------------------------------------------------
        public void Delete(string settingName, SettingBaseAttribute attr)
        {
            SecStatusCode eCode = KeyChainUtils.DeletePasswordForUsername(
                settingName,
                m_serviceName,
                m_synchronizable);

            if (eCode == SecStatusCode.Success)
            {
                InternalConfiguration.PlatformHelper.Log(LogLevel.Info,
                                                         "KeyChainSerializer.Delete - success",
                                                         settingName);
            }
            else
            {
                bool contains = KeyChainUtils.Contains(settingName, m_serviceName, m_synchronizable);
                if (contains)
                {
                    InternalConfiguration.PlatformHelper.Log(LogLevel.Error,
                                                             "KeyChainSerializer.Delete error",
                                                             String.Format("Setting name is {0}. Error code is {1}",
                                                                           settingName,
                                                                           eCode));
                }
                else
                {
                    InternalConfiguration.PlatformHelper.Log(LogLevel.Info,
                                                             "KeyChainSerializer.Delete - no such setting",
                                                             settingName);
                }
            }
        }
        //------------------------------------------------------------------------------
        public bool Load(string settingName, SettingBaseAttribute attr, out object value)
        {
            if (!KeyChainUtils.Contains(settingName, m_serviceName, m_synchronizable))
            {
                InternalConfiguration.PlatformHelper.Log(LogLevel.Info,
                                                         "KeyChainSerializer.Load - no such setting",
                                                         settingName);

                value = null;
                return(false);
            }

            string        stringValue;
            SecStatusCode eCode = KeyChainUtils.GetPasswordForUsername(
                settingName,
                m_serviceName,
                out stringValue,
                m_synchronizable);

            if (eCode != SecStatusCode.Success || stringValue == null)
            {
                Advexp.LogLevel ll = Advexp.LogLevel.None;

                if (eCode == SecStatusCode.ItemNotFound)
                {
                    ll = LogLevel.Info;
                }
                else
                {
                    ll = LogLevel.Error;
                }

                InternalConfiguration.PlatformHelper.Log(ll,
                                                         "KeyChainSerializer.Load - error",
                                                         String.Format("Setting is {0}. Error code is {1}",
                                                                       settingName,
                                                                       eCode));
                value = null;
                return(false);
            }

            // in this case simplified object will be corrected in the SettingsSerializer.cs
            value = stringValue;

            InternalConfiguration.PlatformHelper.Log(LogLevel.Info,
                                                     "KeyChainSerializer.Load - success",
                                                     settingName);

            return(true);
        }
        //------------------------------------------------------------------------------
        public bool Contains(string settingName, SettingBaseAttribute attr)
        {
            bool contains = KeyChainUtils.Contains(
                settingName,
                m_serviceName,
                m_synchronizable);

            if (contains)
            {
                InternalConfiguration.PlatformHelper.Log(LogLevel.Info,
                                                         "KeyChainSerializer.Contains - setting exists",
                                                         settingName);
            }
            else
            {
                InternalConfiguration.PlatformHelper.Log(LogLevel.Info,
                                                         "KeyChainSerializer.Contains - no such setting",
                                                         settingName);
            }

            return(contains);
        }