protected void DeployPackage(webLemmaTermPackage package)
        {
            meta = new webLemmaTermTableSufix();
            if (package == null)
            {
                return;
            }
            lock (DeployPackageLock)
            {
                Clear();
                if (name.isNullOrEmpty())
                {
                    name = package.name;
                }
                if (description.isNullOrEmpty())
                {
                    description = package.description;
                }

                foreach (webLemmaTerm term in package.lemmas)
                {
                    meta.checkMinMax(term);
                    DeployLemma(term);
                }
            }
        }
        /// <summary>
        /// Saves the specified filepath.
        /// </summary>
        /// <param name="__filepath">The filepath.</param>
        /// <param name="logger">The logger.</param>
        public void Save(String __filepath = null, ILogBuilder logger = null)
        {
            lock (SaveLock)
            {
                Int32 retry = NumberOfRetry;
                if (!__filepath.isNullOrEmpty())
                {
                    filepath = __filepath;
                }

                webLemmaTermPackage package = new webLemmaTermPackage(name, description);
                package.lemmas.AddRange(index.Values.ToList(), true);
                while (retry > 0)
                {
                    try
                    {
                        objectSerialization.saveObjectToXML(package, filepath);
                        retry = 0;
                    }
                    catch (Exception ex)
                    {
                        retry--;
                        Thread.Sleep(RetryDelay);
                        if (logger != null)
                        {
                            logger.log("[" + retry.ToString("D2") + "] retring to save web lemma term table [" + __filepath + "] (" + ex.Message + ")");
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Loads the specified filepath.
        /// </summary>
        /// <param name="__filepath">The filepath.</param>
        /// <param name="logger">The logger.</param>
        public void Load(String __filepath = null, ILogBuilder logger = null)
        {
            Int32 retry = NumberOfRetry;

            if (!__filepath.isNullOrEmpty())
            {
                filepath = __filepath;
            }
            webLemmaTermPackage package = new webLemmaTermPackage(name, description);

            if (File.Exists(filepath))
            {
                while (retry > 0)
                {
                    try
                    {
                        package = objectSerialization.loadObjectFromXML <webLemmaTermPackage>(filepath);
                        retry   = 0;
                    }
                    catch (Exception ex)
                    {
                        retry--;
                        Thread.Sleep(RetryDelay);
                        if (logger != null)
                        {
                            logger.log("[" + retry.ToString("D2") + "] retring to load web lemma term table [" + filepath + "] (" + ex.Message + ")");
                        }
                    }
                }
            }


            DeployPackage(package);
        }