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