Exemplo n.º 1
0
        private XsdNs.DataRecordTypeField CreateOneProxyField(string fieldName, DataRecordItem recItem, string idPrefixForField)
        {
            // Create field element for the data record
            var currentField = new XsdNs.DataRecordTypeField
            {
                name = fieldName,

                // Setting type information
                dataComponentTypeInfo = GetDataRecordFieldType(recItem.ItemObj)
            };

            // Set the item enclosed by the field
            var objectForMarshal = recItem.ItemObj.GetObjectForXml_DataRecordField(idPrefixForField);

            currentField.dataComponent = objectForMarshal;

            // Adding data quality information if not good
            if (!recItem.DataQualityObj.IsGood)
            {
                string qualityValue = recItem.DataQualityObj.Value;

                // Only simple components can have quality information
                var simpleItem = (XsdNs.AbstractSimpleComponentType)objectForMarshal;

                var qualityInfo = new XsdNs.QualityPropertyType
                {
                    Title = qualityValue
                };

                simpleItem.quality    = new XsdNs.QualityPropertyType[1];
                simpleItem.quality[0] = qualityInfo;
            }

            return(currentField);
        }
Exemplo n.º 2
0
            /// <summary>
            /// Constructor. Use this to populate the object from XML.
            /// </summary>
            /// <param name="proxy">XML proxy.</param>
            internal ArrayColumn(XsdNs.DataRecordTypeField proxy)
            {
                switch (proxy.dataComponentTypeInfo)
                {
                case XsdNs.DataRecordFieldTypeType.Boolean:
                    DataType          = typeof(bool);
                    DataTypeSupported = true;
                    break;

                case XsdNs.DataRecordFieldTypeType.Count:
                    DataType          = typeof(long);
                    DataTypeSupported = true;
                    break;

                case XsdNs.DataRecordFieldTypeType.Quantity:
                    DataType          = typeof(double);
                    DataTypeSupported = true;

                    // Assigning unit of measure
                    var measProxy = (XsdNs.QuantityType)proxy.dataComponent;
                    UnitOfMeasure = measProxy.uom?.code;     // If uom is null, assign null

                    break;

                case XsdNs.DataRecordFieldTypeType.Text:
                    DataType          = typeof(string);
                    DataTypeSupported = true;
                    break;

                case XsdNs.DataRecordFieldTypeType.Time:
                    DataType          = typeof(DateTime);
                    DataTypeSupported = true;
                    break;

                default:
                    // Unexpected simple type. The values will be treated as strings.
                    DataType          = typeof(string);
                    DataTypeSupported = false;
                    break;
                }

                // Assigning the fields common to all types
                Name = proxy.name;
                var simpleProxy = (XsdNs.AbstractSimpleComponentType)proxy.dataComponent;

                Description = simpleProxy.description;
                Label       = simpleProxy.label;
            }
Exemplo n.º 3
0
        private Item ReadSimpleData(XsdNs.DataRecordTypeField field)
        {
            var fieldObj = field.dataComponent;

            switch (field.dataComponentTypeInfo)
            {
            case XsdNs.DataRecordFieldTypeType.Boolean:
                return(new Item_Boolean((XsdNs.BooleanType)fieldObj));

            case XsdNs.DataRecordFieldTypeType.Category:
                return(new Item_Category((XsdNs.CategoryType)fieldObj));

            case XsdNs.DataRecordFieldTypeType.CategoryRange:
                return(new Item_CategoryRange((XsdNs.CategoryRangeType)fieldObj));

            case XsdNs.DataRecordFieldTypeType.Count:
                return(new Item_Count((XsdNs.CountType)fieldObj));

            case XsdNs.DataRecordFieldTypeType.CountRange:
                return(new Item_CountRange((XsdNs.CountRangeType)fieldObj));

            case XsdNs.DataRecordFieldTypeType.Quantity:
                return(new Item_Measurement((XsdNs.QuantityType)fieldObj));

            case XsdNs.DataRecordFieldTypeType.QuantityRange:
                return(new Item_MeasurementRange((XsdNs.QuantityRangeType)fieldObj));

            case XsdNs.DataRecordFieldTypeType.Text:
                return(new Item_Text((XsdNs.TextType)fieldObj));

            case XsdNs.DataRecordFieldTypeType.Time:
                return(new Item_TimeInstant((XsdNs.TimeType1)fieldObj));

            case XsdNs.DataRecordFieldTypeType.TimeRange:
                return(new Item_TimeRange((XsdNs.TimeRangeType)fieldObj));

            default:
                // For robustness, just skip unknown field types
                return(null);
            }
        }
Exemplo n.º 4
0
        private void ProcessOneField(XsdNs.DataRecordTypeField field)
        {
            string fieldName = field.name;
            var    fieldObj  = field.dataComponent;

            Item        itemRead        = null;
            DataQuality dataQuality     = null;
            var         simpleComponent = true;

            try
            {
                if (fieldObj is XsdNs.AbstractSimpleComponentType)
                {
                    // Simple component (as of SWE schemata)
                    simpleComponent = true;
                    itemRead        = ReadSimpleData(field);
                }
                else
                {
                    // Complex component
                    simpleComponent = false;

                    switch (field.dataComponentTypeInfo)
                    {
                    case XsdNs.DataRecordFieldTypeType.DataRecord:
                        var dataRec = (XsdNs.DataRecordType)fieldObj;
                        itemRead = new Item_DataRecord(dataRec);
                        break;

                    case XsdNs.DataRecordFieldTypeType.AbstractGmlAsSweDataComponent:
                        itemRead = ProcessTimeSeriesField((XsdNs.AbstractGmlAsSweDataComponentType)fieldObj);
                        break;

                    case XsdNs.DataRecordFieldTypeType.DataArray:
                        itemRead = new Item_Array((XsdNs.DataArrayType)fieldObj);
                        break;

                    default:
                        // For robustness, just skip unknown field types
                        itemRead = null;
                        break;
                    }
                }
            }
            // Datetime values
            catch (FormatException e)
            {
                throw new XNeut.InvalidMessageException("Data record field is invalid: " + fieldName, e);
            }
            // Other errors
            catch (XNeut.InvalidMessageException e)
            {
                throw new XNeut.InvalidMessageException("Data record field is invalid: " + fieldName, e);
            }

            if (itemRead == null)
            {
                // Unknown field type -> skip for robustness
                return;
            }

            if (simpleComponent)
            {
                // Getting data quality
                var simpleComp = (XsdNs.AbstractSimpleComponentType)fieldObj;

                if (simpleComp.quality != null && simpleComp.quality.Length > 0)
                {
                    var qualityProp = simpleComp.quality[0];
                    dataQuality = new DataQuality(qualityProp.Title);
                }
            }

            if (dataQuality == null)
            {
                Add(fieldName, itemRead);
            }
            else
            {
                Add(fieldName, itemRead, dataQuality);
            }
        }