예제 #1
0
 private WebSpeciesObservation GetSpeciesObservation(Boolean refresh)
 {
     if (_speciesObservation.IsNull() || refresh)
     {
         _speciesObservation = SpeciesObservationManagerTest.GetOneSpeciesObservation(GetContext());
     }
     return(_speciesObservation);
 }
예제 #2
0
        public void Constructor()
        {
            WebSpeciesObservation speciesObservation;

            using (DataReader dataReader = DataServerTest.GetSpeciesObservationsDataReader(GetContext()))
            {
                while (dataReader.Read())
                {
                    speciesObservation = new WebSpeciesObservation(dataReader);
                    Assert.IsNotNull(speciesObservation);
                }
            }
        }
예제 #3
0
        public void GetGuid()
        {
            String guid;

            using (DataReader dataReader = DataServerTest.GetSpeciesObservationsDataReader(GetContext()))
            {
                while (dataReader.Read())
                {
                    guid = WebSpeciesObservation.GetGuid(dataReader);
                    Assert.IsTrue(guid.IsNotEmpty());
                }
            }
        }
예제 #4
0
        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);
        }
예제 #6
0
        /// <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());
        }
예제 #7
0
        /// <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);
        }
예제 #8
0
 public WebSpeciesObservationTest()
 {
     ApplicationIdentifier = ArtDatabankenService.Data.ApplicationIdentifier.PrintObs.ToString();
     _speciesObservation   = null;
 }
예제 #9
0
        /// <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);
        }