private WebSpeciesObservation GetSpeciesObservation(Boolean refresh) { if (_speciesObservation.IsNull() || refresh) { _speciesObservation = SpeciesObservationManagerTest.GetOneSpeciesObservation(GetContext()); } return(_speciesObservation); }
public void Constructor() { WebSpeciesObservation speciesObservation; using (DataReader dataReader = DataServerTest.GetSpeciesObservationsDataReader(GetContext())) { while (dataReader.Read()) { speciesObservation = new WebSpeciesObservation(dataReader); Assert.IsNotNull(speciesObservation); } } }
public void GetGuid() { String guid; using (DataReader dataReader = DataServerTest.GetSpeciesObservationsDataReader(GetContext())) { while (dataReader.Read()) { guid = WebSpeciesObservation.GetGuid(dataReader); Assert.IsTrue(guid.IsNotEmpty()); } } }
public void LoadData() { ArtportalenServer artportalenServer = new ArtportalenServer(); DateTime changedTo = DateTime.Now; DateTime changedFrom = DateTime.Now.AddDays(-1); using (DataReader dataReader = artportalenServer.GetSpeciesObservations(changedFrom, changedTo)) { WebData webData = new WebSpeciesObservation(); Assert.IsTrue(dataReader.Read()); webData.LoadData(dataReader); Assert.IsTrue(webData.DataFields.IsNotEmpty()); } }
/// <summary> /// Add a field to the species observation. /// </summary> /// <param name="speciesObservation">The species observation.</param> /// <param name="speciesObservationClassId">Species observation class id.</param> /// <param name="speciesObservationPropertyId">Species observation property id.</param> /// <param name="value">A Double value.</param> public static void AddField(this WebSpeciesObservation speciesObservation, SpeciesObservationClassId speciesObservationClassId, SpeciesObservationPropertyId speciesObservationPropertyId, Double value) { WebSpeciesObservationField field; if (speciesObservation.Fields.IsNull()) { speciesObservation.Fields = new List <WebSpeciesObservationField>(); } field = new WebSpeciesObservationField(); field.ClassIdentifier = speciesObservationClassId.ToString(); field.PropertyIdentifier = speciesObservationPropertyId.ToString(); field.Type = WebDataType.Float64; field.Value = value.WebToString(); speciesObservation.Fields.Add(field); }
/// <summary> /// Get species observation in Json representation. /// </summary> /// <param name="speciesObservation">The species observation.</param> /// <param name="context">Web service context.</param> /// <returns>Specified species observation field.</returns> public static String GetJson(this WebSpeciesObservation speciesObservation, WebServiceContext context) { StringBuilder json; json = new StringBuilder(); if (speciesObservation.IsNotNull() && speciesObservation.Fields.IsNotEmpty()) { json.Append(@"{ "); foreach (WebSpeciesObservationField field in speciesObservation.Fields) { GetFieldJson(context, json, field); } GetSpecialFieldsJson(json, speciesObservation.Fields); json.Append(@" }"); } return(json.ToString()); }
/// <summary> /// Convert one species observation from JSON to /// class WebSpeciesObservation. /// </summary> /// <param name="speciesObservations">Species observation is stored in this list.</param> /// <param name="speciesObservationsJson">Species observation in JSON format.</param> /// <param name="mapping">Species observation field information mapping.</param> /// <param name="startIndex">Current position in the species observation JSON string.</param> /// <returns>Updated current position in the species observation JSON string.</returns> private Int32 GetSpeciesObservation(List <WebSpeciesObservation> speciesObservations, String speciesObservationsJson, Dictionary <String, WebSpeciesObservationField> mapping, Int32 startIndex) { WebSpeciesObservation speciesObservation; WebSpeciesObservationField field; // Skip general part. startIndex = speciesObservationsJson.IndexOf("_source", startIndex, StringComparison.Ordinal); if (startIndex < 0) { // No species observations in input data. return(speciesObservationsJson.Length); } startIndex = speciesObservationsJson.IndexOf("{", startIndex, StringComparison.Ordinal) + 1; speciesObservation = new WebSpeciesObservation(); speciesObservation.Fields = new List <WebSpeciesObservationField>(); speciesObservations.Add(speciesObservation); do { startIndex = GetSpeciesObservationField(out field, speciesObservationsJson, mapping, startIndex); if (field.IsNotNull()) { speciesObservation.Fields.Add(field); } }while (field.IsNotNull()); return(startIndex); }
public WebSpeciesObservationTest() { ApplicationIdentifier = ArtDatabankenService.Data.ApplicationIdentifier.PrintObs.ToString(); _speciesObservation = null; }
/// <summary> /// Check that all species observation fields has been /// mapped in Elasticsearch. /// </summary> /// <param name="context"> Web service request context.</param> /// <param name="speciesObservation">Species observation.</param> /// <param name="elasticsearch">Proxy to Elasticsearch.</param> public void CheckMappingElasticsearch(WebServiceContext context, WebSpeciesObservation speciesObservation, ElasticsearchSpeciesObservationProxy elasticsearch) { Boolean isMappingUpdated; Dictionary <String, WebSpeciesObservationField> mapping; String cacheKey, fieldName, indexType, newMapping; isMappingUpdated = false; if (speciesObservation.IsNotNull() && speciesObservation.Fields.IsNotEmpty()) { mapping = GetMapping(context, elasticsearch); foreach (WebSpeciesObservationField field in speciesObservation.Fields) { fieldName = field.GetFieldName(); if (!mapping.ContainsKey(fieldName)) { // Add mapping for new field. switch (field.Type) { case WebDataType.Boolean: newMapping = "{\"properties\": {" + "\"" + fieldName + "\": {\"type\": \"boolean\"}" + "}}"; break; case WebDataType.DateTime: newMapping = "{\"properties\": {" + "\"" + fieldName + "\": {\"type\": \"date\", \"format\": \"dateOptionalTime\"}," + "\"" + fieldName + "_DatePartOnly\": {\"type\": \"string\", \"index\": \"not_analyzed\"}," + "\"" + fieldName + "_DayOfMonth\": {\"type\": \"byte\"}," + "\"" + fieldName + "_DayOfYear\": {\"type\": \"short\"}," + "\"" + fieldName + "_MonthOfYear\": {\"type\": \"byte\"}," + "\"" + fieldName + "_WeekOfYear\": {\"type\": \"byte\"}," + "\"" + fieldName + "_Year\": {\"type\": \"short\"}," + "\"" + fieldName + "_YearAndMonth\": {\"type\": \"string\", \"index\": \"not_analyzed\"}," + "\"" + fieldName + "_YearAndWeek\": {\"type\": \"string\", \"index\": \"not_analyzed\"}" + "}}"; break; case WebDataType.Float64: newMapping = "{\"properties\": {" + "\"" + fieldName + "\": {\"type\": \"double\"}" + "}}"; break; case WebDataType.Int32: newMapping = "{\"properties\": {" + "\"" + fieldName + "\": {\"type\": \"integer\"}" + "}}"; break; case WebDataType.Int64: newMapping = "{\"properties\": {" + "\"" + fieldName + "\": {\"type\": \"long\"}" + "}}"; break; case WebDataType.String: switch (fieldName) { case "DarwinCore_DatasetName": case "DarwinCore_Owner": case "Occurrence_RecordedBy": case "DarwinCore_ReportedBy": // Aggregations are done on these fields in AnalysisService. indexType = "not_analyzed"; break; default: indexType = "no"; break; } newMapping = "{\"properties\": {" + "\"" + fieldName + "\": {\"type\": \"string\", \"index\": \"" + indexType + "\"}," + "\"" + fieldName + "_Lowercase" + "\": {\"type\": \"string\", \"index\": \"not_analyzed\"}" + "}}"; break; default: throw new Exception("Not handled field data type = " + field.Type); } // ReSharper disable once PossibleNullReferenceException elasticsearch.UpdateSpeciesObservationMapping(newMapping); isMappingUpdated = true; } } } if (isMappingUpdated) { // Wait a while in order to make sure that // Elasticsearch has saved updated mapping. Thread.Sleep(6000); // Update cached mapping information. cacheKey = Settings.Default.SpeciesObservationFieldMappingCacheKey; context.RemoveCachedObject(cacheKey); GetMapping(context, elasticsearch); } }
/// <summary> /// Convert a WebSpeciesObservation to a SpeciesObservation. /// </summary> /// <param name="webSpeciesObservation">The WebSpeciesObservation.</param> /// <returns>The SpeciesObservation.</returns> public static SpeciesObservation GetSpeciesObservation(WebSpeciesObservation webSpeciesObservation) { DataFieldList dataFields; Int32? accuracy, speciesActivityId; SpeciesObservation speciesObservation; dataFields = new DataFieldList(webSpeciesObservation.DataFields); accuracy = null; if (dataFields.IsValueSpecified(SpeciesObservation.ACCURACY_DATA_FIELD)) { accuracy = dataFields.GetInt32(SpeciesObservation.ACCURACY_DATA_FIELD); } speciesActivityId = null; if (dataFields.IsValueSpecified(SpeciesObservation.SPECIES_ACTIVITY_ID_DATA_FIELD)) { speciesActivityId = dataFields.GetInt32(SpeciesObservation.SPECIES_ACTIVITY_ID_DATA_FIELD); } speciesObservation = new SpeciesObservation(webSpeciesObservation.Id, dataFields.GetString(SpeciesObservation.ORGANISM_GROUP_DATA_FIELD), dataFields.GetString(SpeciesObservation.SCIENTIFIC_NAME_DATA_FIELD), dataFields.GetString(SpeciesObservation.TAXON_UNCERTAINTY_DATA_FIELD), dataFields.GetString(SpeciesObservation.COMMON_NAME_DATA_FIELD), dataFields.GetDateTime(SpeciesObservation.START_DATE_DATA_FIELD), dataFields.GetDateTime(SpeciesObservation.END_DATE_DATA_FIELD), dataFields.GetString(SpeciesObservation.LOCALITY_DATA_FIELD), dataFields.GetString(SpeciesObservation.PARISH_DATA_FIELD), dataFields.GetString(SpeciesObservation.MUNICIPALITY_DATA_FIELD), dataFields.GetString(SpeciesObservation.COUNTY_DATA_FIELD), dataFields.GetString(SpeciesObservation.PROVINCE_DATA_FIELD), dataFields.GetInt32(SpeciesObservation.NORTH_COORDINATE_DATA_FIELD), dataFields.GetInt32(SpeciesObservation.EAST_COORDINATE_DATA_FIELD), accuracy, dataFields.GetString(SpeciesObservation.OBSERVERS_DATA_FIELD), dataFields.GetString(SpeciesObservation.ORIGIN_DATA_FIELD), dataFields.GetString(SpeciesObservation.QUANTITY_OR_AREA_DATA_FIELD), dataFields.GetString(SpeciesObservation.UNIT_DATA_FIELD), dataFields.GetString(SpeciesObservation.LIFE_STAGE_DATA_FIELD), dataFields.GetString(SpeciesObservation.ACTIVITY_OR_SUBSTRATE_COUNT_DATA_FIELD), dataFields.GetString(SpeciesObservation.BIOTOPE_OR_SUBSTRATE_DATA_FIELD), dataFields.GetString(SpeciesObservation.COMMENT_DATA_FIELD), dataFields.GetString(SpeciesObservation.DETERMINATOR_DATA_FIELD), dataFields.GetString(SpeciesObservation.COLLECTION_DATA_FIELD), dataFields.GetString(SpeciesObservation.ACCESSION_ID_DATA_FIELD), dataFields.GetBoolean(SpeciesObservation.NOT_REDISCOVERED_DATA_FIELD), dataFields.GetBoolean(SpeciesObservation.NEVER_FOUND_DATA_FIELD), dataFields.GetInt32(SpeciesObservation.DATABASE_OBSERVATION_ID_DATA_FIELD), dataFields.GetString(SpeciesObservation.DATABASE_DATA_FIELD), dataFields.GetInt32(SpeciesObservation.TAXON_SORT_ORDER_DATA_FIELD), dataFields.GetInt32(SpeciesObservation.TAXON_ID_DATA_FIELD), dataFields.GetInt32(SpeciesObservation.ORGANISM_GROUP_SORT_ORDER_DATA_FIELD), dataFields.GetInt32(SpeciesObservation.PROTECTION_LEVEL_DATA_FIELD), dataFields.GetString(SpeciesObservation.SCI_CODE_DATA_FIELD), dataFields.GetString(SpeciesObservation.SCI_NAME_DATA_FIELD), dataFields.GetString(SpeciesObservation.REDLIST_CATEGORY_DATA_FIELD), dataFields.GetString(SpeciesObservation.GUID_DATA_FIELD), dataFields.GetInt32(SpeciesObservation.DATABASE_ID_DATA_FIELD), dataFields.GetDateTime(SpeciesObservation.REPORTED_DATE_DATA_FIELD), speciesActivityId, dataFields.GetDateTime(SpeciesObservation.MODIFIED_DATA_FIELD)); return(speciesObservation); }