/// <summary>
        /// Merge old and new species facts to same list.
        /// </summary>
        /// <param name="speciesFacts">New species facts.</param>
        private void MergeSpeciesFacts(SpeciesFactList speciesFacts)
        {
            if (speciesFacts.IsEmpty())
            {
                return;
            }

            if (SpeciesFacts.IsEmpty())
            {
                SpeciesFacts = speciesFacts;
                return;
            }

            foreach (ISpeciesFact speciesFact in speciesFacts)
            {
                if (!SpeciesFacts.Exists(speciesFact.Identifier))
                {
                    // Add new species fact to old species facts.
                    SpeciesFacts.Add(speciesFact);
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Update values for species facts.
        /// This method updates information in data source but it
        /// does not update the species fact objects in the client.
        /// </summary>
        /// <param name="userContext">
        /// Information about the user that makes this method call.
        /// </param>
        /// <param name="speciesFacts">Species facts to set.</param>
        /// <param name="defaultReference">Reference used if no reference is specified.</param>
        public virtual void UpdateSpeciesFacts(IUserContext userContext,
                                               SpeciesFactList speciesFacts,
                                               IReference defaultReference)
        {
            SpeciesFactList changedSpeciesFacts, createSpeciesFacts, deleteSpeciesFacts, updateSpeciesFacts;

            // Check arguments.
            speciesFacts.CheckNotNull("speciesFact");

            // Get all species facts that should be updated.
            changedSpeciesFacts = new SpeciesFactList();
            foreach (ISpeciesFact speciesFact in speciesFacts)
            {
                if (speciesFact.AllowUpdate && speciesFact.HasChanged)
                {
                    changedSpeciesFacts.Add(speciesFact);
                }
            }

            if (changedSpeciesFacts.IsEmpty())
            {
                // Nothing to update.
                return;
            }

            // Split species facts that should be created, updated
            // or deleted into three different lists.
            createSpeciesFacts = new SpeciesFactList();
            deleteSpeciesFacts = new SpeciesFactList();
            updateSpeciesFacts = new SpeciesFactList();
            foreach (ISpeciesFact speciesFact in changedSpeciesFacts)
            {
                if (!speciesFact.HasId && speciesFact.ShouldBeSaved && !speciesFact.ShouldBeDeleted)
                {
                    // Create new species fact.
                    createSpeciesFacts.Add(speciesFact);
                    continue;
                }

                if (speciesFact.HasId && speciesFact.ShouldBeDeleted)
                {
                    // Delete species fact.
                    deleteSpeciesFacts.Add(speciesFact);
                    continue;
                }

                if (speciesFact.HasId && speciesFact.ShouldBeSaved && !speciesFact.ShouldBeDeleted)
                {
                    // Update species fact.
                    updateSpeciesFacts.Add(speciesFact);
                }
            }

            if (createSpeciesFacts.IsNotEmpty())
            {
                DataSource.CreateSpeciesFacts(userContext, createSpeciesFacts, defaultReference);
            }

            if (deleteSpeciesFacts.IsNotEmpty())
            {
                DataSource.DeleteSpeciesFacts(userContext, deleteSpeciesFacts);
            }

            if (updateSpeciesFacts.IsNotEmpty())
            {
                DataSource.UpdateSpeciesFacts(userContext, updateSpeciesFacts);
            }
        }