/// <summary> /// Converts an IfcProperty to a COBie Attribute /// </summary> /// <param name="ifcProperty"></param> /// <returns></returns> static public Attribute ConvertToAttributeType(IfcProperty ifcProperty) { var attributeType = new Attribute { Description = ifcProperty.Description, Name = ifcProperty.Name, Categories = new List <Category> { new Category { Classification = "DPoW Status", Code = "Submitted" }, } //srl we need to define categories, the schema proposes "As Built|Submitted|Approved|Exact Requirement|Maximum Requirement|Minimum Requirement|Requirement", should DPoW set requirements? }; var ifcPropertySingleValue = ifcProperty as IfcPropertySingleValue; var ifcPropertyEnumeratedValue = ifcProperty as IfcPropertyEnumeratedValue; var ifcPropertyBoundedValue = ifcProperty as IfcPropertyBoundedValue; var ifcPropertyTableValue = ifcProperty as IfcPropertyTableValue; var ifcPropertyReferenceValue = ifcProperty as IfcPropertyReferenceValue; var ifcPropertyListValue = ifcProperty as IfcPropertyListValue; if (ifcPropertySingleValue != null) { attributeType.Value = GetAttributeValueType(ifcPropertySingleValue); } else if (ifcPropertyEnumeratedValue != null) { var valueItem = new StringAttributeValue(); attributeType.Value = valueItem; if (ifcPropertyEnumeratedValue.EnumerationReference != null && ifcPropertyEnumeratedValue.EnumerationReference.Unit != null) { valueItem.Unit = ifcPropertyEnumeratedValue.EnumerationReference.Unit.GetName(); } if (ifcPropertyEnumeratedValue.EnumerationValues.Count == 1) { valueItem.Value = ifcPropertyEnumeratedValue.EnumerationValues[0].ToString(); } else { valueItem.Value = ""; foreach (var enumValue in ifcPropertyEnumeratedValue.EnumerationValues) { valueItem.Value += enumValue + ";"; } valueItem.Value = valueItem.Value.TrimEnd(new[] { ';', ' ' }); } //add in the allowed values if (ifcPropertyEnumeratedValue.EnumerationReference != null && ifcPropertyEnumeratedValue.EnumerationReference.EnumerationValues.Count > 0) { var allowedValues = new List <string>(ifcPropertyEnumeratedValue.EnumerationReference.EnumerationValues.Count); foreach (var enumValue in ifcPropertyEnumeratedValue.EnumerationReference.EnumerationValues) { allowedValues.Add(enumValue.ToString()); } } } else if (ifcPropertyBoundedValue != null) { attributeType.Value = GetAttributeValue(ifcPropertyBoundedValue); } else if (ifcPropertyTableValue != null) { //Logger.WarnFormat("Table values are not supported in COBie"); } else if (ifcPropertyReferenceValue != null) { //Logger.WarnFormat("Reference property values are not supported in COBie"); } else if (ifcPropertyListValue != null) { //Logger.WarnFormat("Multiple List values are not supported in COBie"); } return(attributeType); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var jObject = JObject.Load(reader); if (jObject == null) { return(null); } var result = new Attribute(); //remove this converter to do regular conversion serializer.Converters.Remove(this); try { //this will populate everything except the value itself serializer.Populate(jObject.CreateReader(), result); //get value property, populate it into proper type and add to attribute AttributeValue value; var strType = jObject.GetValue("StringAttributeValue"); if (strType != null) { value = new StringAttributeValue(); serializer.Populate(strType.CreateReader(), value); result.Value = value; return(result); } var decType = jObject.GetValue("DecimalAttributeValue"); if (decType != null) { value = new DecimalAttributeValue(); serializer.Populate(decType.CreateReader(), value); result.Value = value; return(result); } var boolType = jObject.GetValue("BooleanAttributeValue"); if (boolType != null) { value = new BooleanAttributeValue(); serializer.Populate(boolType.CreateReader(), value); result.Value = value; return(result); } var intType = jObject.GetValue("IntegerAttributeValue"); if (intType != null) { value = new IntegerAttributeValue(); serializer.Populate(intType.CreateReader(), value); result.Value = value; return(result); } var dateType = jObject.GetValue("DateTimeAttributeValue"); if (dateType != null) { value = new DateTimeAttributeValue(); serializer.Populate(dateType.CreateReader(), value); result.Value = value; return(result); } } finally { //add converter back again serializer.Converters.Add(this); } return(result); }
private void WriteValue(Utf8JsonWriter writer, PooledByteBufferWriter bufferWriter, StringAttributeValue attributeValue) { writer.WriteStringValue(attributeValue.Value); if (bufferWriter.ShouldFlush(writer)) { bufferWriter.FlushAsync(writer); } }
private async ValueTask WriteValueAsync(Utf8JsonWriter writer, PooledByteBufferWriter bufferWriter, StringAttributeValue attributeValue) { writer.WriteStringValue(attributeValue.Value); if (bufferWriter.ShouldFlush(writer)) { await bufferWriter.FlushAsync(writer).ConfigureAwait(false); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var jObject = JObject.Load(reader); if (jObject == null) return null; var result = new Attribute(); //remove this converter to do regular conversion serializer.Converters.Remove(this); try { //this will populate everything except the value itself serializer.Populate(jObject.CreateReader(), result); //get value property, populate it into proper type and add to attribute AttributeValue value; var strType = jObject.GetValue("StringAttributeValue"); if (strType != null) { value = new StringAttributeValue(); serializer.Populate(strType.CreateReader(), value); result.Value = value; return result; } var decType = jObject.GetValue("DecimalAttributeValue"); if (decType != null) { value = new DecimalAttributeValue(); serializer.Populate(decType.CreateReader(), value); result.Value = value; return result; } var boolType = jObject.GetValue("BooleanAttributeValue"); if (boolType != null) { value = new BooleanAttributeValue(); serializer.Populate(boolType.CreateReader(), value); result.Value = value; return result; } var intType = jObject.GetValue("IntegerAttributeValue"); if (intType != null) { value = new IntegerAttributeValue(); serializer.Populate(intType.CreateReader(), value); result.Value = value; return result; } var dateType = jObject.GetValue("DateTimeAttributeValue"); if (dateType != null) { value = new DateTimeAttributeValue(); serializer.Populate(dateType.CreateReader(), value); result.Value = value; return result; } } finally { //add converter back again serializer.Converters.Add(this); } return result; }