/// <summary> /// Populate species observation project parameter with content from data reader. /// </summary> /// <param name="dataReader">Data source that will populate the species observation project parameter.</param> public void LoadData(DataReader dataReader) { WebDataField dataField; ClassIdentifier = dataReader.GetString(SpeciesObservationProjectParameterData.CLASS_IDENTIFIER); PropertyIdentifier = dataReader.GetString(SpeciesObservationProjectParameterData.PROPERTY_IDENTIFIER); SpeciesObservationId = dataReader.GetInt64(SpeciesObservationProjectParameterData.SPECIES_OBSERVATION_ID); Type = (WebDataType)(dataReader.GetInt32(SpeciesObservationProjectParameterData.DATA_TYPE)); if (dataReader.IsNotDbNull(SpeciesObservationProjectParameterData.UNIT)) { if (DataFields.IsNull()) { DataFields = new List <WebDataField>(); } dataField = new WebDataField(); dataField.Name = Settings.Default.WebDataUnit; dataField.Type = WebDataType.String; dataField.Value = dataReader.GetString(SpeciesObservationProjectParameterData.UNIT); if (dataField.Value.IsNotEmpty()) { DataFields.Add(dataField); } } Value = dataReader.GetString(SpeciesObservationProjectParameterData.VALUE); }
public static WebDataField GetOneDataField(WebDataType dataType) { WebDataField dataField; dataField = new WebDataField(); dataField.Name = "Test"; dataField.Type = dataType; switch (dataType) { case WebDataType.Boolean: dataField.Value = true.WebToString(); break; case WebDataType.DateTime: dataField.Value = DateTime.Now.WebToString(); break; case WebDataType.Float64: dataField.Value = Math.PI.WebToString(); break; case WebDataType.Int32: dataField.Value = Int32.MaxValue.WebToString(); break; case WebDataType.Int64: dataField.Value = Int64.MaxValue.WebToString(); break; case WebDataType.String: dataField.Value = "Testing"; break; } return(dataField); }
public void WebToString() { String dataFieldsString; WebDataField dataField; dataFieldsString = GetDataFields(true).WebToString(); Assert.IsTrue(dataFieldsString.IsEmpty()); dataField = new WebDataField(); dataField.Name = "Test boolean"; dataField.Type = WebDataType.Boolean; dataField.Value = Boolean.TrueString; GetDataFields().Add(dataField); dataFieldsString = GetDataFields().WebToString(); Assert.IsTrue(dataFieldsString.IsNotEmpty()); dataField = new WebDataField(); dataField.Name = "Test int"; dataField.Information = "Något att fundera på."; dataField.Type = WebDataType.Int32; dataField.Value = 4234234.WebToString(); GetDataFields().Add(dataField); dataFieldsString = GetDataFields().WebToString(); Assert.IsTrue(dataFieldsString.IsNotEmpty()); dataField = new WebDataField(); dataField.Name = "Test string"; dataField.Unit = "Area"; dataField.Type = WebDataType.String; dataField.Value = "Stort område"; GetDataFields().Add(dataField); dataFieldsString = GetDataFields().WebToString(); Assert.IsTrue(dataFieldsString.IsNotEmpty()); }
public void GetBoolean() { Boolean value; Data.ArtDatabankenService.DataFieldList dataFields; WebDataField webDataField; List <WebDataField> webDataFields; value = false; webDataField = new WebDataField(); webDataField.Name = "Test"; webDataField.Type = WebDataType.Boolean; #if DATA_SPECIFIED_EXISTS webDataField.TypeSpecified = true; #endif webDataField.Value = value.ToString(); webDataFields = new List <WebDataField>(); webDataFields.Add(webDataField); dataFields = new Data.ArtDatabankenService.DataFieldList(webDataFields); Assert.AreEqual(dataFields.GetBoolean("Test"), value); value = true; webDataField = new WebDataField(); webDataField.Name = "Test"; webDataField.Type = WebDataType.Boolean; #if DATA_SPECIFIED_EXISTS webDataField.TypeSpecified = true; #endif webDataField.Value = value.ToString(); webDataFields = new List <WebDataField>(); webDataFields.Add(webDataField); dataFields = new Data.ArtDatabankenService.DataFieldList(webDataFields); Assert.AreEqual(dataFields.GetBoolean("Test"), value); }
private WebDataField GetDataField(Boolean refresh = false) { if (_dataField.IsNull() || refresh) { _dataField = GetOneDataField(WebDataType.Int32); } return(_dataField); }
public WebDataField GetDataField(Boolean refresh = false) { if (_dataField.IsNull() || refresh) { _dataField = new WebDataField(); } return(_dataField); }
/// <summary> /// Load data into WebDataField. /// </summary> /// <param name='webDataField'>Data field object.</param> /// <param name='webSpeciesObservationField'>A WramService WebSpeciesObservationField object.</param> public static void LoadData(this WebDataField webDataField, Proxy.WramService.WebSpeciesObservationField webSpeciesObservationField) { webDataField.Information = webSpeciesObservationField.Information; webDataField.Name = webSpeciesObservationField.Property.Id.ToString(); webDataField.Type = (WebDataType)webSpeciesObservationField.Type; webDataField.Unit = webSpeciesObservationField.Unit; webDataField.Value = webSpeciesObservationField.Value.CheckInjection(); }
public static List <WebDataField> GetOneDataFieldList() { Boolean booleanValue; List <WebDataField> dataFields; WebDataField dataField; dataFields = new List <WebDataField>(); // Add boolean value. dataField = new WebDataField(); dataField.Name = BOOLEAN_DATA_FIELD_NAME; dataField.Type = WebDataType.Boolean; booleanValue = true; dataField.Value = booleanValue.WebToString(); dataFields.Add(dataField); // Add DateTime value. dataField = new WebDataField(); dataField.Name = DATE_TIME_DATA_FIELD_NAME; dataField.Type = WebDataType.DateTime; dataField.Value = DateTime.Now.WebToString(); dataFields.Add(dataField); // Add float value. dataField = new WebDataField(); dataField.Name = FLOAT64_DATA_FIELD_NAME; dataField.Type = WebDataType.Float64; dataField.Value = Math.PI.WebToString(); dataFields.Add(dataField); // Add Int32 value. dataField = new WebDataField(); dataField.Name = INT32_DATA_FIELD_NAME; dataField.Type = WebDataType.Int32; dataField.Value = Int32.MaxValue.WebToString(); dataFields.Add(dataField); // Add Int64 value. dataField = new WebDataField(); dataField.Name = INT64_DATA_FIELD_NAME; dataField.Type = WebDataType.Int64; dataField.Value = Int64.MaxValue.WebToString(); dataFields.Add(dataField); // Add String value. dataField = new WebDataField(); dataField.Name = STRING_DATA_FIELD_NAME; dataField.Type = WebDataType.String; dataField.Value = "Testing data fields"; dataFields.Add(dataField); return(dataFields); }
/// <summary> /// Set dynamic data property SwedishReproCount in TaxonChildStatistics. /// </summary> /// <param name='taxonChildStatistics'>TaxonChildStatistics.</param> /// <param name='swedishReproCount'>SwedishReproCount.</param> public static void SetSwedishReproCount(this WebTaxonChildStatistics taxonChildStatistics, Int32 swedishReproCount) { // Add version as dynamic property. WebDataField dataField = new WebDataField(); dataField.Name = "SwedishReproCount"; dataField.Type = WebDataType.Int32; dataField.Value = swedishReproCount.WebToString(); if (taxonChildStatistics.DataFields.IsNull()) { taxonChildStatistics.DataFields = new List <WebDataField>(); } taxonChildStatistics.DataFields.Add(dataField); }
public void GetDyntaxaTaxonId() { Dictionary <string, WebDataField> dictionaryWebData = new Dictionary <string, WebDataField>(); WebDataField dataField = new WebDataField(); dataField.Name = "scientificname"; dataField.Type = WebDataType.String; dataField.Value = "Timmia bavarica"; dictionaryWebData[dataField.Name] = dataField; GbifProcess gbifProcess = new GbifProcess(); string taxonId = gbifProcess.GetTaxonId(dictionaryWebData, GetContext()); Assert.IsTrue(taxonId.IsNotEmpty()); }
/// <summary> /// Set created by person in WebLumpSplitEvent. /// </summary> /// <param name='lumpSplitEvent'>Lump split event.</param> /// <param name='createdByPerson'>Created by person.</param> public static void SetCreatedByPerson(this WebLumpSplitEvent lumpSplitEvent, String createdByPerson) { WebDataField dataField; // Add created by person as dynamic property. dataField = new WebDataField(); dataField.Name = Settings.Default.WebDataCreatedByPerson; dataField.Type = WebDataType.String; dataField.Value = createdByPerson; if (lumpSplitEvent.DataFields.IsNull()) { lumpSplitEvent.DataFields = new List <WebDataField>(); } lumpSplitEvent.DataFields.Add(dataField); }
/// <summary> /// Set Taxon Revision Id in WebTaxon. /// </summary> /// <param name="taxon">The taxon.</param> /// <param name="taxonRevisionId">The taxon revision identifier.</param> public static void SetTaxonRevisionId(this WebTaxon taxon, Int32 taxonRevisionId) { WebDataField dataField; // Add taxon revision id property. dataField = new WebDataField(); dataField.Name = Settings.Default.WebDataTaxonRevisionId; dataField.Type = WebDataType.Int32; dataField.Value = taxonRevisionId.WebToString(); if (taxon.DataFields.IsNull()) { taxon.DataFields = new List <WebDataField>(); } taxon.DataFields.Add(dataField); }
/// <summary> /// Set modified by person in WebTaxonName. /// </summary> /// <param name='taxonName'>Taxon name.</param> /// <param name='modifiedByPerson'>Modified by person.</param> public static void SetModifiedByPerson(this WebTaxonName taxonName, String modifiedByPerson) { WebDataField dataField; // Add modified by person as dynamic property. dataField = new WebDataField(); dataField.Name = Settings.Default.WebDataModifiedByPerson; dataField.Type = WebDataType.String; dataField.Value = modifiedByPerson; if (taxonName.DataFields.IsNull()) { taxonName.DataFields = new List <WebDataField>(); } taxonName.DataFields.Add(dataField); }
/// <summary> /// Set version in WebTaxonName. /// </summary> /// <param name='taxonName'>TaxonName.</param> /// <param name='version'>Version.</param> public static void SetVersion(this WebTaxonName taxonName, Int32 version) { WebDataField dataField; // Add version as dynamic property. dataField = new WebDataField(); dataField.Name = "Version"; dataField.Type = WebDataType.Int32; dataField.Value = version.WebToString(); if (taxonName.DataFields.IsNull()) { taxonName.DataFields = new List <WebDataField>(); } taxonName.DataFields.Add(dataField); }
/// <summary> /// Set name usage id in WebTaxonName. /// </summary> /// <param name='taxonName'>TaxonName.</param> /// <param name='nameUsageId'>Name usage id.</param> public static void SetNameUsageId(this WebTaxonName taxonName, Int32 nameUsageId) { WebDataField dataField; // Add name usage as dynamic property. dataField = new WebDataField(); dataField.Name = "NameUsageId"; dataField.Type = WebDataType.Int32; dataField.Value = nameUsageId.WebToString(); if (taxonName.DataFields.IsNull()) { taxonName.DataFields = new List <WebDataField>(); } taxonName.DataFields.Add(dataField); }
public void LoadData() { WebDataField dataField; using (DataReader dataReader = GetContext().GetDatabase().GetLog(null, null, 10)) { if (dataReader.Read() && dataReader.NextUnreadColumn()) { do { dataField = new WebDataField(); dataField.LoadData(dataReader); Assert.IsNotNull(dataField); Assert.IsTrue(dataField.Name.IsNotEmpty()); }while (dataReader.NextUnreadColumn()); } } }
/// <summary> /// Get the project id value, it is the id of the related project, /// used for columns of a ProjectParameter type. /// </summary> /// <param name="webSpeciesObservationFieldMapping">The object</param> /// <returns>The project id value, if none found null is returned</returns> public static Int32?GetProjectId(this WebSpeciesObservationFieldMapping webSpeciesObservationFieldMapping) { if (webSpeciesObservationFieldMapping.DataFields.IsEmpty()) { return(null); } WebDataField field = webSpeciesObservationFieldMapping.DataFields.FirstOrDefault(item => item.Name == "ProjectId"); if (field.IsNull()) { return(null); } else { // ReSharper disable once PossibleNullReferenceException return(field.Value.WebParseInt32()); } }
public void GetInt64() { Data.ArtDatabankenService.DataFieldList dataFields; Int64 value; WebDataField webDataField; List <WebDataField> webDataFields; value = 27343654645654645; webDataField = new WebDataField(); webDataField.Name = "Test"; webDataField.Type = WebDataType.Int64; #if DATA_SPECIFIED_EXISTS webDataField.TypeSpecified = true; #endif webDataField.Value = value.ToString(); webDataFields = new List <WebDataField>(); webDataFields.Add(webDataField); dataFields = new Data.ArtDatabankenService.DataFieldList(webDataFields); Assert.AreEqual(dataFields.GetInt64("Test"), value); }
public WebDataFieldTest() { _dataField = null; }
/// <summary> /// Get information about species observations that has changed. /// The service contains observations that are aggregated and has start /// and end dates that are set to the first and last day of every month. /// </summary> /// <param name="changedFrom">Start date for changes.</param> /// <param name="changedTo">End date for changes.</param> /// <param name="mappings">The mappings.</param> /// <param name="context">Web service context.</param> /// <param name="connectorServer">The connector server.</param> /// <returns> /// Returns true if there are more species /// observations to retrieve for current date. /// </returns> public Boolean GetSpeciesObservationChange(DateTime changedFrom, DateTime changedTo, List <HarvestMapping> mappings, WebServiceContext context, IConnectorServer connectorServer) { Dictionary <String, WebSpeciesObservation> updatedSpeciesObservations; SpeciesObservationChange speciesObservationChange = new SpeciesObservationChange(); speciesObservationChange.CreatedSpeciesObservations = new List <HarvestSpeciesObservation>(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); WramProcess wramProcess = new WramProcess(); WebSpeciesObservationDataProvider dataProvider = GetSpeciesObservationDataProvider(context); WebSpeciesObservationChange webSpeciesObservationChange = WebServiceProxy.WramService.GetSpeciesObservationChangeAsSpecies(DateTime.Now, false, DateTime.Now, false, dataProvider.MaxChangeId, true, Settings.Default.MaxSpeciesObservationsFromWram); // Run all created and updated together as one list. updatedSpeciesObservations = new Dictionary <String, WebSpeciesObservation>(); AddSpeciesObservations(updatedSpeciesObservations, webSpeciesObservationChange.UpdatedSpeciesObservations); AddSpeciesObservations(updatedSpeciesObservations, webSpeciesObservationChange.CreatedSpeciesObservations); List <WebSpeciesObservation> createdAndUpdatedObservations = new List <WebSpeciesObservation>(); createdAndUpdatedObservations.AddRange(updatedSpeciesObservations.Values); // Handle created and updated species observations. int noOfCreated = 0, noOfCreatedErrors = 0; if (createdAndUpdatedObservations.IsNotEmpty()) { foreach (WebSpeciesObservation wramSpeciesObservation in createdAndUpdatedObservations) { WebData webData = new WebData { DataFields = new List <WebDataField>() }; foreach (WebSpeciesObservationField webSpeciesObservationField in wramSpeciesObservation.Fields) { WebDataField webDataField = new WebDataField(); webDataField.LoadData(webSpeciesObservationField); webData.DataFields.Add(webDataField); } // Map and add webdata to the 'created collection' speciesObservationChange.CreatedSpeciesObservations.Add(wramProcess.ProcessObservation(webData, mappings, context)); } connectorServer.UpdateSpeciesObservations(context, speciesObservationChange.CreatedSpeciesObservations, dataProvider, out noOfCreated, out noOfCreatedErrors); } // Handle deleted species observtions. int noOfDeleted = 0, noOfDeletedErrors = 0; speciesObservationChange.DeletedSpeciesObservationGuids = new List <String>(); if (webSpeciesObservationChange.DeletedSpeciesObservationGuids.IsNotEmpty()) { foreach (String wramSpeciesObservation in webSpeciesObservationChange.DeletedSpeciesObservationGuids) { String id = wramSpeciesObservation.Substring(wramSpeciesObservation.LastIndexOf(':') + 1); speciesObservationChange.DeletedSpeciesObservationGuids.Add(id); } connectorServer.DeleteSpeciesObservations(context, speciesObservationChange.DeletedSpeciesObservationGuids, dataProvider, out noOfDeleted, out noOfDeletedErrors); } Debug.WriteLine(webSpeciesObservationChange.MaxChangeId + " : count created: " + noOfCreated); context.GetSpeciesObservationDatabase().LogHarvestRead( context, dataProvider, changedFrom, changedTo, stopwatch.ElapsedMilliseconds, noOfCreated, noOfCreatedErrors, 0, 0, noOfDeleted, noOfDeletedErrors, webSpeciesObservationChange.MaxChangeId); stopwatch.Stop(); if (webSpeciesObservationChange.MaxChangeId > 0) { // context.GetSpeciesObservationDatabase().SetMaxChangeId(dataProvider.Id, webSpeciesObservationChange.MaxChangeId); // Testing if WRAM has a problem with handling of change id. context.GetSpeciesObservationDatabase().SetMaxChangeId(dataProvider.Id, webSpeciesObservationChange.MaxChangeId - 1); } // else: No changes was retrieved. There are no more changes available right now. return(false); }
/// <summary> /// Convert a SpeciesObservationSearchCriteria to a /// WebSpeciesObservationSearchCriteria. /// </summary> /// <param name="searchCriteria">The SpeciesObservationSearchCriteria.</param> /// <returns>The WebSpeciesObservationSearchCriteria.</returns> private static WebSpeciesObservationSearchCriteria GetSpeciesObservationSearchCriteria(SpeciesObservationSearchCriteria searchCriteria) { WebDataField dataField; WebSpeciesObservationSearchCriteria webSearchCriteria; webSearchCriteria = new WebSpeciesObservationSearchCriteria(); webSearchCriteria.IsAccuracySpecified = searchCriteria.HasAccuracy; #if DATA_SPECIFIED_EXISTS webSearchCriteria.IsAccuracySpecifiedSpecified = true; #endif if (webSearchCriteria.IsAccuracySpecified) { webSearchCriteria.Accuracy = searchCriteria.Accuracy; #if DATA_SPECIFIED_EXISTS webSearchCriteria.AccuracySpecified = true; #endif } webSearchCriteria.IsBirdNestActivityLevelSpecified = searchCriteria.HasBirdNestActivityLevel; #if DATA_SPECIFIED_EXISTS webSearchCriteria.IsBirdNestActivityLevelSpecifiedSpecified = true; #endif if (webSearchCriteria.IsBirdNestActivityLevelSpecified) { webSearchCriteria.BirdNestActivityLevel = searchCriteria.BirdNestActivityLevel; #if DATA_SPECIFIED_EXISTS webSearchCriteria.BirdNestActivityLevelSpecified = true; #endif } webSearchCriteria.Counties = GeographicManager.GetCounties(searchCriteria.Counties); webSearchCriteria.DatabaseIds = null; if (searchCriteria.DatabaseIds.IsNotEmpty()) { webSearchCriteria.DatabaseIds = searchCriteria.DatabaseIds; } webSearchCriteria.IncludeNeverFoundObservations = searchCriteria.IncludeNeverFoundObservations; #if DATA_SPECIFIED_EXISTS webSearchCriteria.IncludeNeverFoundObservationsSpecified = true; #endif webSearchCriteria.IncludeNotRediscoveredObservations = searchCriteria.IncludeNotRediscoveredObservations; #if DATA_SPECIFIED_EXISTS webSearchCriteria.IncludeNotRediscoveredObservationsSpecified = true; #endif webSearchCriteria.IncludePositiveObservations = searchCriteria.IncludePositiveObservations; #if DATA_SPECIFIED_EXISTS webSearchCriteria.IncludePositiveObservationsSpecified = true; #endif if (webSearchCriteria.DataFields.IsNull()) { webSearchCriteria.DataFields = new List <WebDataField>(); } dataField = new WebDataField(); dataField.Name = "IncludeUncertainTaxonDetermination"; dataField.Type = WebDataType.Boolean; dataField.Value = searchCriteria.IncludeUncertainTaxonDetermination.WebToString(); webSearchCriteria.DataFields.Add(dataField); webSearchCriteria.LocationSearchString = searchCriteria.LocalitySearchString; webSearchCriteria.IsRectangleSpecified = searchCriteria.HasBoundingBox; #if DATA_SPECIFIED_EXISTS webSearchCriteria.IsRectangleSpecifiedSpecified = true; #endif if (webSearchCriteria.IsRectangleSpecified) { webSearchCriteria.EastCoordinate = searchCriteria.MaxEastCoordinate; webSearchCriteria.NorthCoordinate = searchCriteria.MaxNorthCoordinate; webSearchCriteria.WestCoordinate = searchCriteria.MaxWestCoordinate; webSearchCriteria.SouthCoordinate = searchCriteria.MaxSouthCoordinate; #if DATA_SPECIFIED_EXISTS webSearchCriteria.EastCoordinateSpecified = true; #endif #if DATA_SPECIFIED_EXISTS webSearchCriteria.NorthCoordinateSpecified = true; #endif #if DATA_SPECIFIED_EXISTS webSearchCriteria.WestCoordinateSpecified = true; #endif #if DATA_SPECIFIED_EXISTS webSearchCriteria.SouthCoordinateSpecified = true; #endif } webSearchCriteria.ObservationEndDate = searchCriteria.ObservationEndDate; #if DATA_SPECIFIED_EXISTS webSearchCriteria.ObservationEndDateSpecified = true; #endif webSearchCriteria.ObservationStartDate = searchCriteria.ObservationStartDate; #if DATA_SPECIFIED_EXISTS webSearchCriteria.ObservationStartDateSpecified = true; #endif webSearchCriteria.ObserverSearchString = searchCriteria.ObserverSearchString; webSearchCriteria.UseOfObservationDate = searchCriteria.UseOfObservationDate; #if DATA_SPECIFIED_EXISTS webSearchCriteria.UseOfObservationDateSpecified = true; #endif webSearchCriteria.RegistrationEndDate = searchCriteria.RegistrationEndDate; #if DATA_SPECIFIED_EXISTS webSearchCriteria.RegistrationEndDateSpecified = true; #endif webSearchCriteria.RegistrationStartDate = searchCriteria.RegistrationStartDate; #if DATA_SPECIFIED_EXISTS webSearchCriteria.RegistrationStartDateSpecified = true; #endif webSearchCriteria.UseOfRegistrationDate = searchCriteria.UseOfRegistrationDate; #if DATA_SPECIFIED_EXISTS webSearchCriteria.UseOfRegistrationDateSpecified = true; #endif webSearchCriteria.Provinces = GeographicManager.GetProvinces(searchCriteria.Provinces); webSearchCriteria.TaxonIds = null; if (searchCriteria.TaxonIds.IsNotEmpty()) { webSearchCriteria.TaxonIds = searchCriteria.TaxonIds; } webSearchCriteria.UserRoleId = searchCriteria.UserRoleId; #if DATA_SPECIFIED_EXISTS webSearchCriteria.UserRoleIdSpecified = true; #endif return(webSearchCriteria); }
public WebDataFieldExtensionTest() : base(true, 60) { dataField = null; }
public WebDataFieldExtensionTest() { _dataField = null; }
/// <summary> /// Get information about species observations /// that has changed in the specified date range or /// from a specified changeId. /// Only date part of parameters changedFrom and changedTo /// are used. It does not matter what time of day that is set /// in parameters changedFrom and changedTo. /// </summary> /// <param name="changedFrom"> /// Changed from date. /// </param> /// <param name="isChangedFromSpecified"> /// Is changed from specified. /// </param> /// <param name="changedTo"> /// Changed to date. /// </param> /// <param name="isChangedToSpecified"> /// Is changed to specified. /// </param> /// <param name="changeId"> /// From witch change id. /// </param> /// <param name="isChangeIdspecified"> /// Is changed id specified. /// </param> /// <param name="maxReturnedChanges"> /// Max number of observations returned. /// </param> /// <param name="mappings"> /// The mapping list. /// </param> /// <param name="context"> /// The web service context. /// </param> /// <param name="connectorServer"> /// The connector service. /// </param> public void GetSpeciesObservationChange(DateTime changedFrom, Boolean isChangedFromSpecified, DateTime changedTo, Boolean isChangedToSpecified, Int64 changeId, Boolean isChangeIdspecified, Int64 maxReturnedChanges, List <HarvestMapping> mappings, WebServiceContext context, IConnectorServer connectorServer) { SpeciesObservationChange speciesObservationChange = new SpeciesObservationChange { CreatedSpeciesObservations = new List <HarvestSpeciesObservation>(), UpdatedSpeciesObservations = new List <HarvestSpeciesObservation>() }; var stopwatch = Stopwatch.StartNew(); int sumNoOfCreated = 0, sumNoOfCreatedErrors = 0, sumNoOfUpdated = 0, sumNoOfUpdatedErrors = 0, sumNoOfDeleted = 0, sumNoOfDeletedErrors = 0; KulProcess kulProcess = new KulProcess(); WebSpeciesObservationDataProvider dataProvider = GetSpeciesObservationDataProvider(context); Stopwatch stopwatch1 = Stopwatch.StartNew(); WebSpeciesObservationChange webSpeciesObservationChange = WebServiceProxy.KulService.GetSpeciesObservationChangeAsSpecies(changedFrom, isChangedFromSpecified, changedTo, isChangedToSpecified, changeId, isChangeIdspecified, maxReturnedChanges); Debug.WriteLine("Harvest: " + DateTime.Now.ToLongTimeString() + " - Time: " + TimeSpan.FromMilliseconds(stopwatch1.ElapsedMilliseconds).TotalMinutes + " Minutes"); // LOOP OVER CHANGEID // Denna verkar inte klara mer än ca 100 obsar så det behövs en loop över dessa... Int32 readSize = 0; Int64 currentChangeId = 0; int j = 0; while ((readSize++ < 50) && (currentChangeId < webSpeciesObservationChange.MaxChangeId)) { currentChangeId = webSpeciesObservationChange.MaxChangeId; context.GetSpeciesObservationDatabase().SetMaxChangeId(dataProvider.Id, webSpeciesObservationChange.MaxChangeId); // CREATED AddNewSpeciesObservations(webSpeciesObservationChange, speciesObservationChange, kulProcess, mappings, context, connectorServer, dataProvider, out sumNoOfCreated, out sumNoOfCreatedErrors); /* int i = 0; * int noOfCreated, noOfCreatedErrors; * foreach (Proxy.KulService.WebSpeciesObservation kulSpeciesObservation in webSpeciesObservationChange.CreatedSpeciesObservations) * { * WebData webData = new WebData { DataFields = new List<WebDataField>() }; * * foreach (WebSpeciesObservationField webSpeciesObservationField in kulSpeciesObservation.Fields) * { * WebDataField webDataField = new WebDataField * { * Information = webSpeciesObservationField.Information, * Name = webSpeciesObservationField.Property.Id.ToString(), * Type = (WebDataType)webSpeciesObservationField.Type, * Unit = webSpeciesObservationField.Unit, * Value = webSpeciesObservationField.Value.CheckInjection() * }; * * if (webDataField.IsNotNull()) * { * webData.DataFields.Add(webDataField); * } * } * * // map webdata * HarvestSpeciesObservation harvestSpeciesObservation = kulProcess.ProcessObservation(webData, mappings, context); * * speciesObservationChange.CreatedSpeciesObservations.Add(harvestSpeciesObservation); * * if (decimal.Remainder(++i, 1000) != 0) * { * continue; * } * * // write every 10000 observation to database to avoid memory problems * connectorServer.UpdateSpeciesObservations(context, speciesObservationChange.CreatedSpeciesObservations, dataProvider, out noOfCreated, out noOfCreatedErrors); * * sumNoOfCreated += noOfCreated; * sumNoOfCreatedErrors += noOfCreatedErrors; * speciesObservationChange.CreatedSpeciesObservations.Clear(); * } * * connectorServer.UpdateSpeciesObservations(context, speciesObservationChange.CreatedSpeciesObservations, dataProvider, out noOfCreated, out noOfCreatedErrors); * * sumNoOfCreated += noOfCreated; * sumNoOfCreatedErrors += noOfCreatedErrors; * speciesObservationChange.CreatedSpeciesObservations.Clear(); */ // UPDATED int i = 0; int noOfUpdated, noOfUpdatedErrors; foreach (Proxy.KulService.WebSpeciesObservation kulSpeciesObservation in webSpeciesObservationChange.UpdatedSpeciesObservations) { WebData webData = new WebData { DataFields = new List <WebDataField>() }; foreach (WebSpeciesObservationField webSpeciesObservationField in kulSpeciesObservation.Fields) { WebDataField webDataField = new WebDataField { Information = webSpeciesObservationField.Information, Name = webSpeciesObservationField.Property.Id.ToString(), Type = (WebDataType)webSpeciesObservationField.Type, Unit = webSpeciesObservationField.Unit, Value = webSpeciesObservationField.Value.CheckInjection() }; if (webDataField.IsNotNull()) { webData.DataFields.Add(webDataField); } } // map webdata HarvestSpeciesObservation harvestSpeciesObservation = kulProcess.ProcessObservation(webData, mappings, context); speciesObservationChange.UpdatedSpeciesObservations.Add(harvestSpeciesObservation); if (decimal.Remainder(++i, 1000) != 0) { continue; } // write every 10000 observation to database to avoid memory problems connectorServer.UpdateSpeciesObservations(context, speciesObservationChange.UpdatedSpeciesObservations, dataProvider, out noOfUpdated, out noOfUpdatedErrors); sumNoOfUpdated += noOfUpdated; sumNoOfUpdatedErrors += noOfUpdatedErrors; speciesObservationChange.UpdatedSpeciesObservations.Clear(); } connectorServer.UpdateSpeciesObservations(context, speciesObservationChange.UpdatedSpeciesObservations, dataProvider, out noOfUpdated, out noOfUpdatedErrors); sumNoOfCreated += noOfUpdated; sumNoOfCreatedErrors += noOfUpdatedErrors; speciesObservationChange.UpdatedSpeciesObservations.Clear(); // DELETED this.RemoveDeletedSpeciesObservations(webSpeciesObservationChange, speciesObservationChange, kulProcess, mappings, context, connectorServer, dataProvider, out sumNoOfDeleted, out sumNoOfDeletedErrors); /* * i = 0; * int noOfDeleted = 0, noOfDeletedErrors = 0; * speciesObservationChange.DeletedSpeciesObservationGuids = new List<String>(); * * foreach (String kulSpeciesObservation in webSpeciesObservationChange.DeletedSpeciesObservationGuids) * { * // if (adsSpeciesObservation.DatabaseId == 99) continue; * String id = kulSpeciesObservation.Substring(kulSpeciesObservation.LastIndexOf('.') + 1); * speciesObservationChange.DeletedSpeciesObservationGuids.Add(id); * * if (decimal.Remainder(++i, 1000) != 0) * { * continue; * } * * // write every 10000 observation to database to avoid memory problems * connectorServer.DeleteSpeciesObservations( * context, * speciesObservationChange.DeletedSpeciesObservationGuids, * dataProvider, * out noOfDeleted, * out noOfDeletedErrors); * sumNoOfDeleted += noOfDeleted; * sumNoOfDeletedErrors += noOfDeletedErrors; * speciesObservationChange.DeletedSpeciesObservationGuids.Clear(); * } * * // write remaining observations to database * connectorServer.DeleteSpeciesObservations( * context, * speciesObservationChange.DeletedSpeciesObservationGuids, * dataProvider, * out noOfDeleted, * out noOfDeletedErrors); * sumNoOfDeleted += noOfDeleted; * sumNoOfDeletedErrors += noOfDeletedErrors; * speciesObservationChange.DeletedSpeciesObservationGuids.Clear(); */ // HANDLE LOOP OVER CHANGEID webSpeciesObservationChange = WebServiceProxy.KulService.GetSpeciesObservationChangeAsSpecies(changedFrom, isChangedFromSpecified, changedTo, isChangedToSpecified, webSpeciesObservationChange.MaxChangeId + 1, isChangeIdspecified, maxReturnedChanges); if (decimal.Remainder(++j, 10) != 0) { continue; } Debug.WriteLine(webSpeciesObservationChange.MaxChangeId + " : count created: " + sumNoOfCreated); } Debug.WriteLine("end :" + webSpeciesObservationChange.MaxChangeId + " : count created: " + sumNoOfCreated); // Log latest harvest date for the data provider // Use changeFrom since changedTo is calculated (+1 day) context.GetSpeciesObservationDatabase().SetDataProviderLatestHarvestDate(dataProvider.Id, changedFrom); context.GetSpeciesObservationDatabase() .LogHarvestRead(context, dataProvider, changedFrom, changedTo, stopwatch.ElapsedMilliseconds, sumNoOfCreated, sumNoOfCreatedErrors, sumNoOfUpdated, sumNoOfUpdatedErrors, sumNoOfDeleted, sumNoOfDeletedErrors, currentChangeId); stopwatch.Stop(); }
/// <summary> /// Get information about species observations that has changed. /// The service contains observations that are aggregated and has start /// and end dates that are set to the first and last day of every month. /// </summary> /// <param name="changedFrom">Start date for changes.</param> /// <param name="changedTo">End date for changes.</param> /// <param name="mappings">The mappings.</param> /// <param name="context">Web service context.</param> /// <param name="connectorServer">The connector server.</param> /// <returns> /// Returns true if there are more species /// observations to retrieve for current date. /// </returns> public Boolean GetSpeciesObservationChange(DateTime changedFrom, DateTime changedTo, List <HarvestMapping> mappings, WebServiceContext context, IConnectorServer connectorServer) { Dictionary <String, WebSpeciesObservation> updatedSpeciesObservations; Int32 minutes; Int64 maxChangeId; // Wait for MVM service to be ready for use. for (minutes = 0; minutes < 60; minutes++) { if (WebServiceProxy.MvmService.IsReadyToUse()) { break; } else { // Wait one minute for MVM service to be ready for use. Thread.Sleep(60000); } } if ((minutes == 60) && !(WebServiceProxy.MvmService.IsReadyToUse())) { // Can not wait any longer for MVM service to be ready. return(false); } SpeciesObservationChange speciesObservationChange = new SpeciesObservationChange(); speciesObservationChange.CreatedSpeciesObservations = new List <HarvestSpeciesObservation>(); WebSpeciesObservationChange webSpeciesObservationChange; webSpeciesObservationChange = new WebSpeciesObservationChange(); webSpeciesObservationChange.CreatedSpeciesObservations = new List <WebSpeciesObservation>(); webSpeciesObservationChange.DeletedSpeciesObservationGuids = new List <String>(); webSpeciesObservationChange.UpdatedSpeciesObservations = new List <WebSpeciesObservation>(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); MvmProcess mvmProcess = new MvmProcess(); WebSpeciesObservationDataProvider dataProvider = GetSpeciesObservationDataProvider(context); maxChangeId = dataProvider.MaxChangeId; for (Int32 index = 0; index < 10; index++) { WebSpeciesObservationChange webSpeciesObservationChangeTemp = WebServiceProxy.MvmService.GetSpeciesObservationChangeAsSpecies(DateTime.Now, false, DateTime.Now, false, maxChangeId, true, Settings.Default.MaxSpeciesObservationsFromMvm); if (webSpeciesObservationChangeTemp.CreatedSpeciesObservations.IsNotEmpty()) { webSpeciesObservationChange.CreatedSpeciesObservations.AddRange(webSpeciesObservationChangeTemp.CreatedSpeciesObservations); } if (webSpeciesObservationChangeTemp.DeletedSpeciesObservationGuids.IsNotEmpty()) { webSpeciesObservationChange.DeletedSpeciesObservationGuids.AddRange(webSpeciesObservationChangeTemp.DeletedSpeciesObservationGuids); } if (webSpeciesObservationChangeTemp.UpdatedSpeciesObservations.IsNotEmpty()) { webSpeciesObservationChange.UpdatedSpeciesObservations.AddRange(webSpeciesObservationChangeTemp.UpdatedSpeciesObservations); } if (maxChangeId < webSpeciesObservationChangeTemp.MaxChangeId) { maxChangeId = webSpeciesObservationChangeTemp.MaxChangeId; } else { // No more species observation changes are available. break; } } // Run all created and updated together as one list. updatedSpeciesObservations = new Dictionary <String, WebSpeciesObservation>(); AddSpeciesObservations(updatedSpeciesObservations, webSpeciesObservationChange.UpdatedSpeciesObservations); AddSpeciesObservations(updatedSpeciesObservations, webSpeciesObservationChange.CreatedSpeciesObservations); List <WebSpeciesObservation> createdAndUpdatedObservations = new List <WebSpeciesObservation>(); createdAndUpdatedObservations.AddRange(updatedSpeciesObservations.Values); // Handle created and updated species observations. int noOfCreated = 0, noOfCreatedErrors = 0; if (createdAndUpdatedObservations.IsNotEmpty()) { foreach (WebSpeciesObservation mvmSpeciesObservation in createdAndUpdatedObservations) { WebData webData = new WebData { DataFields = new List <WebDataField>() }; foreach (WebSpeciesObservationField webSpeciesObservationField in mvmSpeciesObservation.Fields) { WebDataField webDataField = new WebDataField(); webDataField.LoadData(webSpeciesObservationField); webData.DataFields.Add(webDataField); } // Map and add webdata to the 'created collection' speciesObservationChange.CreatedSpeciesObservations.Add(mvmProcess.ProcessObservation(webData, mappings, context)); } connectorServer.UpdateSpeciesObservations(context, speciesObservationChange.CreatedSpeciesObservations, dataProvider, out noOfCreated, out noOfCreatedErrors); } // Handle deleted species observtions. int noOfDeleted = 0, noOfDeletedErrors = 0; speciesObservationChange.DeletedSpeciesObservationGuids = new List <String>(); if (webSpeciesObservationChange.DeletedSpeciesObservationGuids.IsNotEmpty()) { foreach (String mvmSpeciesObservation in webSpeciesObservationChange.DeletedSpeciesObservationGuids) { String id = mvmSpeciesObservation.Substring(mvmSpeciesObservation.LastIndexOf(':') + 1); speciesObservationChange.DeletedSpeciesObservationGuids.Add(id); } connectorServer.DeleteSpeciesObservations(context, speciesObservationChange.DeletedSpeciesObservationGuids, dataProvider, out noOfDeleted, out noOfDeletedErrors); } Debug.WriteLine(maxChangeId + " : count created: " + noOfCreated); context.GetSpeciesObservationDatabase().LogHarvestRead( context, dataProvider, changedFrom, changedTo, stopwatch.ElapsedMilliseconds, noOfCreated, noOfCreatedErrors, 0, 0, noOfDeleted, noOfDeletedErrors, maxChangeId); stopwatch.Stop(); if (maxChangeId > 0) { context.GetSpeciesObservationDatabase().SetMaxChangeId(dataProvider.Id, maxChangeId); } // else: No changes was retrieved. There are no more changes available right now. return(false); }
/// <summary> /// Get information about species observations /// that has changed in the specified date range or /// from a specified changeId. /// Only date part of parameters changedFrom and changedTo /// are used. It does not matter what time of day that is set /// in parameters changedFrom and changedTo. /// </summary> /// <param name="changedFrom"> /// Changed from date. /// </param> /// <param name="isChangedFromSpecified"> /// Is changed from specified. /// </param> /// <param name="changedTo"> /// Changed to date. /// </param> /// <param name="isChangedToSpecified"> /// Is changed to specified. /// </param> /// <param name="changeId"> /// From witch change id. /// </param> /// <param name="isChangeIdspecified"> /// Is changed id specified. /// </param> /// <param name="maxReturnedChanges"> /// Max number of observations returned. /// </param> /// <param name="mappings"> /// The mapping list. /// </param> /// <param name="context"> /// The web service context. /// </param> /// <param name="connectorServer"> /// The connector service. /// </param> public void GetSpeciesObservationChange(DateTime changedFrom, Boolean isChangedFromSpecified, DateTime changedTo, Boolean isChangedToSpecified, Int64 changeId, Boolean isChangeIdspecified, Int64 maxReturnedChanges, List <HarvestMapping> mappings, WebServiceContext context, IConnectorServer connectorServer) { SpeciesObservationChange speciesObservationChange = new SpeciesObservationChange(); speciesObservationChange.CreatedSpeciesObservations = new List <HarvestSpeciesObservation>(); speciesObservationChange.UpdatedSpeciesObservations = new List <HarvestSpeciesObservation>(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); int sumNoOfCreated = 0, sumNoOfCreatedErrors = 0, sumNoOfUpdated = 0, sumNoOfUpdatedErrors = 0, sumNoOfDeleted = 0, sumNoOfDeletedErrors = 0; NorsProcess norsProcess = new NorsProcess(); WebSpeciesObservationDataProvider dataProvider = GetSpeciesObservationDataProvider(context); WebSpeciesObservationChange webSpeciesObservationChange = WebServiceProxy.NorsService.GetSpeciesObservationChangeAsSpecies(changedFrom, isChangedFromSpecified, changedTo, isChangedToSpecified, changeId, isChangeIdspecified, maxReturnedChanges); // LOOP OVER CHANGEID // Denna verkar inte klara mer än ca 100 obsar så det behövs en loop över dessa... Int32 readSize = 0; Int64 currentChangeId = 0; int j = 0; while ((readSize++ < 50) && (currentChangeId < webSpeciesObservationChange.MaxChangeId)) { currentChangeId = webSpeciesObservationChange.MaxChangeId; context.GetSpeciesObservationDatabase().SetMaxChangeId(dataProvider.Id, webSpeciesObservationChange.MaxChangeId); // CREATED int i = 0; int noOfCreated, noOfCreatedErrors; foreach (Proxy.NorsService.WebSpeciesObservation norsSpeciesObservation in webSpeciesObservationChange.CreatedSpeciesObservations) { WebData webData = new WebData(); webData.DataFields = new List <WebDataField>(); foreach (WebSpeciesObservationField webSpeciesObservationField in norsSpeciesObservation.Fields) { WebDataField webDataField = new WebDataField(); webDataField.Information = webSpeciesObservationField.Information; webDataField.Name = webSpeciesObservationField.Property.Id.ToString(); webDataField.Type = (WebDataType)webSpeciesObservationField.Type; webDataField.Unit = webSpeciesObservationField.Unit; webDataField.Value = webSpeciesObservationField.Value.CheckInjection(); if (webDataField.IsNotNull()) { webData.DataFields.Add(webDataField); ////Debug.Write(webDataField.Name + " : "); ////Debug.Write(webDataField.Value + " : "); ////Debug.Write(webDataField.Type + " : "); ////Debug.Write(webDataField.Unit + " : "); ////Debug.WriteLine(webDataField.Information); } } // map webdata HarvestSpeciesObservation harvestSpeciesObservation = norsProcess.ProcessObservation(webData, mappings, context); speciesObservationChange.CreatedSpeciesObservations.Add(harvestSpeciesObservation); if (decimal.Remainder(++i, 10000) != 0) { continue; } // write every 10000 observation to database to avoid memory problems connectorServer.UpdateSpeciesObservations(context, speciesObservationChange.CreatedSpeciesObservations, dataProvider, out noOfCreated, out noOfCreatedErrors); sumNoOfCreated += noOfCreated; sumNoOfCreatedErrors += noOfCreatedErrors; speciesObservationChange.CreatedSpeciesObservations.Clear(); } connectorServer.UpdateSpeciesObservations(context, speciesObservationChange.CreatedSpeciesObservations, dataProvider, out noOfCreated, out noOfCreatedErrors); sumNoOfCreated += noOfCreated; sumNoOfCreatedErrors += noOfCreatedErrors; speciesObservationChange.CreatedSpeciesObservations.Clear(); // UPDATED i = 0; int noOfUpdated, noOfUpdatedErrors; foreach (Proxy.NorsService.WebSpeciesObservation norsSpeciesObservation in webSpeciesObservationChange.UpdatedSpeciesObservations) { WebData webData = new WebData(); webData.DataFields = new List <WebDataField>(); foreach (WebSpeciesObservationField webSpeciesObservationField in norsSpeciesObservation.Fields) { WebDataField webDataField = new WebDataField(); webDataField.Information = webSpeciesObservationField.Information; webDataField.Name = webSpeciesObservationField.Property.Id.ToString(); webDataField.Type = (WebDataType)webSpeciesObservationField.Type; webDataField.Unit = webSpeciesObservationField.Unit; webDataField.Value = webSpeciesObservationField.Value.CheckInjection(); if (webDataField.IsNotNull()) { webData.DataFields.Add(webDataField); } } // map webdata HarvestSpeciesObservation harvestSpeciesObservation = norsProcess.ProcessObservation(webData, mappings, context); speciesObservationChange.UpdatedSpeciesObservations.Add(harvestSpeciesObservation); if (decimal.Remainder(++i, 10000) != 0) { continue; } // write every 10000 observation to database to avoid memory problems connectorServer.UpdateSpeciesObservations(context, speciesObservationChange.UpdatedSpeciesObservations, dataProvider, out noOfUpdated, out noOfUpdatedErrors); sumNoOfUpdated += noOfUpdated; sumNoOfUpdatedErrors += noOfUpdatedErrors; speciesObservationChange.UpdatedSpeciesObservations.Clear(); } connectorServer.UpdateSpeciesObservations(context, speciesObservationChange.UpdatedSpeciesObservations, dataProvider, out noOfUpdated, out noOfUpdatedErrors); sumNoOfCreated += noOfUpdated; sumNoOfCreatedErrors += noOfUpdatedErrors; speciesObservationChange.UpdatedSpeciesObservations.Clear(); // DELETED i = 0; int noOfDeleted = 0, noOfDeletedErrors = 0; speciesObservationChange.DeletedSpeciesObservationGuids = new List <String>(); foreach (String norsSpeciesObservation in webSpeciesObservationChange.DeletedSpeciesObservationGuids) { // if (adsSpeciesObservation.DatabaseId == 99) continue; String id = norsSpeciesObservation.Substring(norsSpeciesObservation.LastIndexOf('.') + 1); speciesObservationChange.DeletedSpeciesObservationGuids.Add(id); if (decimal.Remainder(++i, 10000) != 0) { continue; } // write every 10000 observation to database to avoid memory problems connectorServer.DeleteSpeciesObservations( context, speciesObservationChange.DeletedSpeciesObservationGuids, dataProvider, out noOfDeleted, out noOfDeletedErrors); sumNoOfDeleted += noOfDeleted; sumNoOfDeletedErrors += noOfDeletedErrors; speciesObservationChange.DeletedSpeciesObservationGuids.Clear(); } // write remaining observations to database connectorServer.DeleteSpeciesObservations( context, speciesObservationChange.DeletedSpeciesObservationGuids, dataProvider, out noOfDeleted, out noOfDeletedErrors); sumNoOfDeleted += noOfDeleted; sumNoOfDeletedErrors += noOfDeletedErrors; speciesObservationChange.DeletedSpeciesObservationGuids.Clear(); // HANDLE LOOP OVER CHANGEID webSpeciesObservationChange = WebServiceProxy.NorsService.GetSpeciesObservationChangeAsSpecies(changedFrom, isChangedFromSpecified, changedTo, isChangedToSpecified, webSpeciesObservationChange.MaxChangeId + 1, isChangeIdspecified, maxReturnedChanges); if (decimal.Remainder(++j, 10) != 0) { continue; } Debug.WriteLine(webSpeciesObservationChange.MaxChangeId + " : count created: " + sumNoOfCreated); } Debug.WriteLine("end :" + webSpeciesObservationChange.MaxChangeId + " : count created: " + sumNoOfCreated); // Log latest harvest date for the data provider // Use changeFrom since changedTo is calculated (+1 day) context.GetSpeciesObservationDatabase().SetDataProviderLatestHarvestDate(dataProvider.Id, changedFrom); context.GetSpeciesObservationDatabase() .LogHarvestRead( context, dataProvider, changedFrom, changedTo, stopwatch.ElapsedMilliseconds, sumNoOfCreated, sumNoOfCreatedErrors, sumNoOfUpdated, sumNoOfUpdatedErrors, sumNoOfDeleted, sumNoOfDeletedErrors, currentChangeId); stopwatch.Stop(); }
/// <summary> The add new species observations. </summary> /// <param name="webSpeciesObservationChange"> The web species observation change. </param> /// <param name="speciesObservationChange"> The species observation change. </param> /// <param name="kulProcess"> The kul Process. </param> /// <param name="mappings"> The mappings. </param> /// <param name="context"> The context. </param> /// <param name="connectorServer"> The connector Server. </param> /// <param name="dataProvider"> The data Provider. </param> /// <param name="sumNoOfCreated"> The sum No Of Created. </param> /// <param name="sumNoOfCreatedErrors"> The sum No Of Created Errors. </param> private void AddNewSpeciesObservations( WebSpeciesObservationChange webSpeciesObservationChange, SpeciesObservationChange speciesObservationChange, KulProcess kulProcess, List <HarvestMapping> mappings, WebServiceContext context, IConnectorServer connectorServer, WebSpeciesObservationDataProvider dataProvider, out int sumNoOfCreated, out int sumNoOfCreatedErrors) { int observationCount = 0; int noOfCreated, noOfCreatedErrors; sumNoOfCreated = 0; sumNoOfCreatedErrors = 0; foreach (Proxy.KulService.WebSpeciesObservation kulSpeciesObservation in webSpeciesObservationChange.CreatedSpeciesObservations) { WebData webData = new WebData { DataFields = new List <WebDataField>() }; foreach (WebSpeciesObservationField webSpeciesObservationField in kulSpeciesObservation.Fields) { WebDataField webDataField = new WebDataField { Information = webSpeciesObservationField.Information, Name = webSpeciesObservationField.Property.Id.ToString(), Type = (WebDataType)webSpeciesObservationField.Type, Unit = webSpeciesObservationField.Unit, Value = webSpeciesObservationField.Value.CheckInjection() }; webData.DataFields.Add(webDataField); } // map webdata HarvestSpeciesObservation harvestSpeciesObservation = kulProcess.ProcessObservation(webData, mappings, context); speciesObservationChange.CreatedSpeciesObservations.Add(harvestSpeciesObservation); if (decimal.Remainder(++observationCount, 1000) != 0) { continue; } // write every 10000 observation to database to avoid memory problems connectorServer.UpdateSpeciesObservations(context, speciesObservationChange.CreatedSpeciesObservations, dataProvider, out noOfCreated, out noOfCreatedErrors); sumNoOfCreated += noOfCreated; sumNoOfCreatedErrors += noOfCreatedErrors; speciesObservationChange.CreatedSpeciesObservations.Clear(); } connectorServer.UpdateSpeciesObservations(context, speciesObservationChange.CreatedSpeciesObservations, dataProvider, out noOfCreated, out noOfCreatedErrors); sumNoOfCreated += noOfCreated; sumNoOfCreatedErrors += noOfCreatedErrors; speciesObservationChange.CreatedSpeciesObservations.Clear(); }