internal bool IsSatisfiedBy(Attribute attribute) { if (attribute == null || attribute.Value == null) return false; var v = attribute.Value.GetStringValue().ToLowerInvariant(); return Evaluate(v); }
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); }
/// <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); }
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; } }
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); } } }
public ValidatedAttribute(Attribute attribute) { _attribute = attribute; }