/// <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); } } }
/// <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); } }