/// <summary>
        /// Update species facts. This method should only be used by Dyntaxa web application.
        /// </summary>
        /// <param name="context">Web service request context.</param>
        /// <param name="createSpeciesFacts">New species facts to create.</param>
        /// <param name="deleteSpeciesFacts">Existing species facts to delete.</param>
        /// <param name="updateSpeciesFacts">Existing species facts to update.</param>
        /// <param name="fullName">Full Name of editor.</param>
        public static void UpdateDyntaxaSpeciesFacts(WebServiceContext context,
                                                     List <WebSpeciesFact> createSpeciesFacts,
                                                     List <WebSpeciesFact> deleteSpeciesFacts,
                                                     List <WebSpeciesFact> updateSpeciesFacts,
                                                     String fullName)
        {
            DataTable    speciesFactTable;
            DateTime     now = DateTime.Now;
            List <Int32> speciesFactIds;

            // Check arguments.
            context.CheckTransaction();
            WebServiceData.AuthorizationManager.CheckAuthorization(context, ApplicationIdentifier.Dyntaxa, AuthorityIdentifier.EditSpeciesFacts);
            if (createSpeciesFacts.IsNotEmpty())
            {
                foreach (WebSpeciesFact speciesFact in createSpeciesFacts)
                {
                    speciesFact.CheckData(context);
                }
            }
            if (deleteSpeciesFacts.IsNotEmpty())
            {
                foreach (WebSpeciesFact speciesFact in deleteSpeciesFacts)
                {
                    speciesFact.CheckData(context);
                }
            }
            if (updateSpeciesFacts.IsNotEmpty())
            {
                foreach (WebSpeciesFact speciesFact in updateSpeciesFacts)
                {
                    speciesFact.CheckData(context);
                }
            }

            if (createSpeciesFacts.IsNotEmpty())
            {
                // Create species facts.
                speciesFactTable = GetSpeciesFactTable(context, createSpeciesFacts, now, fullName);
                DataServer.CreateSpeciesFacts(context, speciesFactTable);
            }

            if (deleteSpeciesFacts.IsNotEmpty())
            {
                try
                {
                    // Update species facts.
                    foreach (WebSpeciesFact speciesFact in deleteSpeciesFacts)
                    {
                        DataServer.UpdateSpeciesFact(context,
                                                     speciesFact.Id,
                                                     speciesFact.ReferenceId,
                                                     now,
                                                     fullName,
                                                     speciesFact.IsFieldValue1Specified,
                                                     speciesFact.FieldValue1,
                                                     speciesFact.IsFieldValue2Specified,
                                                     speciesFact.FieldValue2,
                                                     speciesFact.IsFieldValue3Specified,
                                                     speciesFact.FieldValue3,
                                                     speciesFact.FieldValue4,
                                                     speciesFact.FieldValue5,
                                                     speciesFact.QualityId);
                    }

                    // Delete species facts.
                    speciesFactIds = new List <Int32>();
                    foreach (WebSpeciesFact speciesFact in deleteSpeciesFacts)
                    {
                        speciesFactIds.Add(speciesFact.Id);
                    }
                    DeleteUserSelectedSpeciesFacts(context);
                    AddUserSelectedSpeciesFacts(context,
                                                speciesFactIds,
                                                UserSelectedSpeciesFactUsage.Output);
                    DataServer.DeleteSpeciesFacts(context);
                }
                finally
                {
                    DeleteUserSelectedSpeciesFacts(context);
                }
            }

            if (updateSpeciesFacts.IsNotEmpty())
            {
                // Update species facts.
                foreach (WebSpeciesFact speciesFact in updateSpeciesFacts)
                {
                    DataServer.UpdateSpeciesFact(context,
                                                 speciesFact.Id,
                                                 speciesFact.ReferenceId,
                                                 now,
                                                 fullName,
                                                 speciesFact.IsFieldValue1Specified,
                                                 speciesFact.FieldValue1,
                                                 speciesFact.IsFieldValue2Specified,
                                                 speciesFact.FieldValue2,
                                                 speciesFact.IsFieldValue3Specified,
                                                 speciesFact.FieldValue3,
                                                 speciesFact.FieldValue4,
                                                 speciesFact.FieldValue5,
                                                 speciesFact.QualityId);
                }
            }
        }