/// <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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 5
0
        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;
        }