internal bool IsSatisfiedBy(Attribute attribute)
        {
            if (attribute == null || attribute.Value == null)
                return false;

            var v = attribute.Value.GetStringValue().ToLowerInvariant();
            return Evaluate(v);
        }
示例#2
0
        internal bool IsSatisfiedBy(Attribute attribute)
        {
            if (attribute == null || attribute.Value == null)
            {
                return(false);
            }

            var v = attribute.Value.GetStringValue().ToLowerInvariant();

            return(Evaluate(v));
        }
        /// <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);
        }
示例#4
0
 /// <summary>
 /// Constructor that completes initialisation from a DPoW attribute.
 /// </summary>
 /// <param name="attrib"></param>
 public RequirementDetail(Attribute attrib)
 {
     Attribute = attrib;
     Name      = attrib.Name;
     // Description = attrib.Description;
 }
        /// <summary>
        /// Converts an attribute in to an Ifc Property, still needs support for units adding
        /// </summary>
        /// <param name="attributeType"></param>
        /// <returns></returns>
        internal IfcSimpleProperty ConvertAttributeToIfcSimpleProperty(Attribute attributeType)
        {
            var attributeValue = attributeType.Value;

            IfcSimpleProperty theProperty;

            var simplePropertyType = attributeValue.SimplePropertyType();

            switch (simplePropertyType)
            {
            case XbimSimplePropertyType.SimpleDecimal:
            case XbimSimplePropertyType.SimpleInteger:
            case XbimSimplePropertyType.SimpleBoolean:
            case XbimSimplePropertyType.SimpleMonetary:
            case XbimSimplePropertyType.SimpleString:
            case XbimSimplePropertyType.SimpleDateTime:
            case XbimSimplePropertyType.Null:
                theProperty = TargetRepository.Instances.New <IfcPropertySingleValue>();
                break;

            case XbimSimplePropertyType.BoundedDecimal:
            case XbimSimplePropertyType.BoundedInteger:
                theProperty = TargetRepository.Instances.New <IfcPropertyBoundedValue>();
                break;

            case XbimSimplePropertyType.EnumerationString:
                theProperty = TargetRepository.Instances.New <IfcPropertyEnumeratedValue>();
                break;

            default:
                throw new ArgumentOutOfRangeException("attributeType", "Invalid attribute value type");
            }

            theProperty.Name        = attributeType.Name;
            theProperty.Description = attributeType.Description;

            if (attributeValue != null)
            {
                var simpleProperty = theProperty as IfcPropertySingleValue;
                if (simpleProperty != null)
                {
                    var unitConverter = new IfcUnitConverter(attributeValue.Unit);

                    if (!unitConverter.IsUndefined)
                    {
                        simpleProperty.Unit = unitConverter.IfcUnit(_units, TargetRepository);
                    }
                }
                switch (simplePropertyType)
                {
                case XbimSimplePropertyType.SimpleDecimal:
                    var decimalValue          = attributeValue as DecimalAttributeValue;
                    var simpleDecimalProperty = (IfcPropertySingleValue)theProperty;
                    if (decimalValue != null)
                    {
                        if (decimalValue.Value.HasValue)
                        {
                            simpleDecimalProperty.NominalValue = new IfcReal(decimalValue.Value.Value);
                        }
                    }
                    break;

                case XbimSimplePropertyType.BoundedDecimal:
                    var boundedDecimal = attributeValue as DecimalAttributeValue;
                    if (boundedDecimal != null)
                    {
                        var boundedProperty = (IfcPropertyBoundedValue)theProperty;
                        if (boundedDecimal.MaximalValue.HasValue)
                        {
                            boundedProperty.UpperBoundValue = new IfcReal(boundedDecimal.MaximalValue.Value);
                        }
                        if (boundedDecimal.MinimalValue.HasValue)
                        {
                            boundedProperty.LowerBoundValue = new IfcReal(boundedDecimal.MinimalValue.Value);
                        }
                    }
                    break;

                case XbimSimplePropertyType.SimpleInteger:
                    var simpleInteger = attributeValue as IntegerAttributeValue;
                    if (simpleInteger != null && simpleInteger.Value.HasValue)
                    {
                        var simpleIntProperty = (IfcPropertySingleValue)theProperty;
                        simpleIntProperty.NominalValue = new IfcInteger(simpleInteger.Value.Value);
                    }
                    break;

                case XbimSimplePropertyType.BoundedInteger:
                    var attributeBoundedIntegerValueType = attributeValue as IntegerAttributeValue;
                    if (attributeBoundedIntegerValueType != null)
                    {
                        var boundedIntegerProperty = (IfcPropertyBoundedValue)theProperty;
                        if (attributeBoundedIntegerValueType.MaximalValue.HasValue)
                        {
                            boundedIntegerProperty.UpperBoundValue =
                                new IfcInteger(attributeBoundedIntegerValueType.MaximalValue.Value);
                        }
                        if (attributeBoundedIntegerValueType.MinimalValue.HasValue)
                        {
                            boundedIntegerProperty.LowerBoundValue =
                                new IfcInteger(attributeBoundedIntegerValueType.MinimalValue.Value);
                        }
                    }
                    break;

                case XbimSimplePropertyType.SimpleBoolean:
                    var attributeBooleanValueType = attributeValue as BooleanAttributeValue;
                    if (attributeBooleanValueType != null)
                    {
                        var simpleBooleanProperty = (IfcPropertySingleValue)theProperty;
                        if (attributeBooleanValueType.Value.HasValue)
                        {
                            simpleBooleanProperty.NominalValue = new IfcBoolean(attributeBooleanValueType.Value.Value);
                        }
                    }
                    break;

                //case XbimSimplePropertyType.SimpleMonetary:
                //    var attributeMonetaryValueType = attributeValueType as AttributeMonetaryValueType;
                //    if (attributeMonetaryValueType != null)
                //    {
                //        var simpleMonetaryProperty = (IfcPropertySingleValue) theProperty;
                //        var monetaryValue = (double) attributeMonetaryValueType.MonetaryValue;
                //        simpleMonetaryProperty.NominalValue = new IfcReal(monetaryValue);
                //        IfcCurrencyEnum currencyEnum;
                //        if (Enum.TryParse(attributeMonetaryValueType.MonetaryUnit.ToString(), true, out currencyEnum))
                //            simpleMonetaryProperty.Unit = new IfcMonetaryUnit {Currency = currencyEnum};
                //    }
                //    break;
                case XbimSimplePropertyType.EnumerationString:
                    var attributeEnumStringValueType = attributeValue as StringAttributeValue;
                    if (attributeEnumStringValueType != null)
                    {
                        var simpleEnumStringProperty = (IfcPropertyEnumeratedValue)theProperty;
                        simpleEnumStringProperty.EnumerationValues.Add(
                            new IfcLabel(attributeEnumStringValueType.Value));
                        if (attributeEnumStringValueType.AllowedValues != null &&
                            attributeEnumStringValueType.AllowedValues.Any())
                        {
                            simpleEnumStringProperty.EnumerationReference =
                                TargetRepository.Instances.New <IfcPropertyEnumeration>();
                            foreach (var allowedValue in attributeEnumStringValueType.AllowedValues)
                            {
                                simpleEnumStringProperty.EnumerationReference.Name = attributeType.Name;
                                simpleEnumStringProperty.EnumerationReference.EnumerationValues.Add(
                                    new IfcLabel(allowedValue));
                            }
                        }
                    }
                    break;

                case XbimSimplePropertyType.SimpleString:
                case XbimSimplePropertyType.Null:
                    var attributeStringValueType = attributeValue as StringAttributeValue;
                    if (attributeStringValueType != null)
                    {
                        var simpleStringProperty = (IfcPropertySingleValue)theProperty;
                        simpleStringProperty.NominalValue = new IfcText(attributeStringValueType.Value);
                    }
                    break;

                case XbimSimplePropertyType.SimpleDateTime:
                    var attributeDateTimeValueType = attributeValue as DateTimeAttributeValue;
                    if (attributeDateTimeValueType != null && attributeDateTimeValueType.Value.HasValue)
                    {
                        var simpleDateTimeProperty = (IfcPropertySingleValue)theProperty;
                        simpleDateTimeProperty.NominalValue = IfcTimeStamp.ToTimeStamp(attributeDateTimeValueType.Value.Value);
                    }
                    break;

                default:
                    throw new ArgumentOutOfRangeException("attributeType", "Invalid attribute value type");
                }
            }
            return(theProperty);
        }
        internal void ConvertAttributeTypeToIfcObjectProperty(IfcObjectDefinition ifcObjectDefinition, Attribute attributeType)
        {
            //need to add in consideration for quantities not just properties
            var ifcSimpleProperty = ConvertAttributeToIfcSimpleProperty(attributeType);
            var propertySet       = GetOrCreatePropertySetDefinition(ifcObjectDefinition, attributeType.PropertySetName);

            propertySet.Add(ifcSimpleProperty);
        }
 /// <summary>
 /// Constructor that completes initialisation from a DPoW attribute.
 /// </summary>
 /// <param name="attrib"></param>
 public RequirementDetail(Attribute attrib)
 {
     Attribute = attrib;
     Name = attrib.Name;
     // Description = attrib.Description;
 }
示例#8
0
        public static IEnumerable<CAttribute> GetCOBieAttributes(this DPoWAttributableObject obj, DateTime? createdOn, string createdBy)
        {
            IEnumerable<Xbim.DPoW.Attribute> sAttributes = obj.Attributes;
            var sAttrs = sAttributes as DAttribute[] ?? sAttributes.ToArray();
            if (sAttributes == null || !sAttrs.Any())
                yield break;

            foreach (var sAttr in sAttrs)
            {
                //create attribute in target
                var tAttr = new CAttribute
                {
                    Name = sAttr.Name,
                    Description = sAttr.Definition,
                    PropertySetName = "DPoW Attributes",
                    CreatedOn = createdOn,
                    CreatedBy = new ContactKey{Email = createdBy},
                    Categories = new List<Category>(new []{new Category{Code = "Submitted"}})
                };
                switch (sAttr.ValueType)
                {
                    case ValueTypeEnum.NotDefined:
                        tAttr.Value = new StringAttributeValue { Value = sAttr.Value };
                        break;
                    case ValueTypeEnum.Boolean:
                        bool bVal;
                        if (bool.TryParse(sAttr.Value, out bVal))
                            tAttr.Value = new BooleanAttributeValue { Value = bVal };
                        break;
                    case ValueTypeEnum.DateTime:
                        DateTime dtVal;
                        if (DateTime.TryParse(sAttr.Value, out dtVal))
                            tAttr.Value = new DateTimeAttributeValue {Value = dtVal};
                        break;
                    case ValueTypeEnum.Decimal:
                        float fVal;
                        if (float.TryParse(sAttr.Value, out fVal))
                            tAttr.Value = new DecimalAttributeValue {Value = fVal};
                        break;
                    case ValueTypeEnum.Integer:
                        int iVal;
                        if (int.TryParse(sAttr.Value, out iVal))
                            tAttr.Value = new IntegerAttributeValue { Value = iVal };
                        break;
                    case ValueTypeEnum.String:
                        tAttr.Value = new StringAttributeValue { Value = sAttr.Value };
                        break;
                    default:
                        throw new ArgumentOutOfRangeException();
                }
                //default action is to create string
                if (tAttr.Value == null)
                    tAttr.Value = new StringAttributeValue { Value = sAttr.Value };
                yield return tAttr;
            }
        }
示例#9
0
        public static IEnumerable <CAttribute> GetCOBieAttributes(this DPoWAttributableObject obj, DateTime?createdOn, string createdBy)
        {
            IEnumerable <Xbim.DPoW.Attribute> sAttributes = obj.Attributes;
            var sAttrs = sAttributes as DAttribute[] ?? sAttributes.ToArray();

            if (sAttributes == null || !sAttrs.Any())
            {
                yield break;
            }

            foreach (var sAttr in sAttrs)
            {
                //create attribute in target
                var tAttr = new CAttribute
                {
                    Name            = sAttr.Name,
                    Description     = sAttr.Definition,
                    PropertySetName = "DPoW Attributes",
                    CreatedOn       = createdOn,
                    CreatedBy       = new ContactKey {
                        Email = createdBy
                    },
                    Categories = new List <Category>(new [] { new Category {
                                                                  Code = "Submitted"
                                                              } })
                };
                switch (sAttr.ValueType)
                {
                case ValueTypeEnum.NotDefined:
                    tAttr.Value = new StringAttributeValue {
                        Value = sAttr.Value
                    };
                    break;

                case ValueTypeEnum.Boolean:
                    bool bVal;
                    if (bool.TryParse(sAttr.Value, out bVal))
                    {
                        tAttr.Value = new BooleanAttributeValue {
                            Value = bVal
                        }
                    }
                    ;
                    break;

                case ValueTypeEnum.DateTime:
                    DateTime dtVal;
                    if (DateTime.TryParse(sAttr.Value, out dtVal))
                    {
                        tAttr.Value = new DateTimeAttributeValue {
                            Value = dtVal
                        }
                    }
                    ;
                    break;

                case ValueTypeEnum.Decimal:
                    float fVal;
                    if (float.TryParse(sAttr.Value, out fVal))
                    {
                        tAttr.Value = new DecimalAttributeValue {
                            Value = fVal
                        }
                    }
                    ;
                    break;

                case ValueTypeEnum.Integer:
                    int iVal;
                    if (int.TryParse(sAttr.Value, out iVal))
                    {
                        tAttr.Value = new IntegerAttributeValue {
                            Value = iVal
                        }
                    }
                    ;
                    break;

                case ValueTypeEnum.String:
                    tAttr.Value = new StringAttributeValue {
                        Value = sAttr.Value
                    };
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
                //default action is to create string
                if (tAttr.Value == null)
                {
                    tAttr.Value = new StringAttributeValue {
                        Value = sAttr.Value
                    }
                }
                ;
                yield return(tAttr);
            }
        }
    }
示例#10
0
 public ValidatedAttribute(Attribute attribute)
 {
     _attribute = attribute;
 }