private void WriteTypeValue(Type ft, object v)
{
string owlClass = ft.Name;
if (owlClass.StartsWith("Nullable"))
owlClass = ft.GetGenericArguments()[0].Name;
if (ft.IsGenericType && ft.GetGenericTypeDefinition() == typeof(Nullable<>))
{
// special case for Nullable types
ft = ft.GetGenericArguments()[0];
}
Type typewrap = null;
while (ft.IsValueType && !ft.IsPrimitive)
{
FieldInfo fieldValue = ft.GetField("Value");
if (fieldValue != null)
{
v = fieldValue.GetValue(v);
if (typewrap == null)
{
typewrap = ft;
}
ft = fieldValue.FieldType;
}
else
{
break;
}
}
if (ft.IsEnum)
{
//write enumproperty
m_writer.Write("ifcowl:" + v);
}
if (ft == typeof(bool))
{
v = v.ToString().ToLowerInvariant();
}
if (v is System.Collections.IList)
{
// IfcBinary!!
Console.Out.WriteLine("WARNING-TOCHECK: Write IfcBinary 3");
System.Collections.IList list = (System.Collections.IList)v;
//TODO: make sure this is also valid for othter Types with Lists
if (owlClass == "IfcCompoundPlaneAngleMeasure")
{
List<String> valuelist = new List<String>();
for (int i = 0; i < list.Count; i++)
{
object elem = list[i];
if (elem != null) // should never be null, but be safe
{
string encodedvalue = System.Security.SecurityElement.Escape(elem.ToString());
valuelist.Add(encodedvalue);
}
}
ft = ft.GetGenericArguments()[0];
string s = ft.Name;
if (s == "Int64" || s == "Double" || s == "String" || s == "Number" || s == "Real" || s == "Integer" || s == "Logical" || s == "Boolean" || s == "Binary")
s = CheckForExpressPrimaryTypes(s);
Console.Out.WriteLine("Message: Creating IfcCompoundPlaneAngleMeasure list with XSDType : " + ft.Name);
ListObject newListObject = GetListObject(owlClass + "_List_", s, valuelist, ft.Name);
m_writer.Write("inst:" + newListObject.URI);
}
else
{
string fullvalue = "";
for (int i = 0; i < list.Count; i++)
{
object elem = list[i];
if (elem != null) // should never be null, but be safe
{
string encodedvalue = System.Security.SecurityElement.Escape(elem.ToString());
fullvalue += Int32.Parse(encodedvalue).ToString("X");
}
}
this.m_writer.Write(fullvalue);
}
}
else if (v != null && !ft.IsEnum)
{
string encodedvalue = System.Security.SecurityElement.Escape(v.ToString());
if (owlClass == "Int64" || owlClass == "Double" || owlClass == "String" || owlClass == "Number" || owlClass == "Real" || owlClass == "Integer" || owlClass == "Logical" || owlClass == "Boolean" || owlClass == "Binary")
owlClass = CheckForExpressPrimaryTypes(owlClass);
Console.Out.WriteLine("WriteTypeValue.GetURIObject()");
URIObject newUriObject = GetURIObject(owlClass, encodedvalue, ft.Name);
m_writer.Write("inst:" + newUriObject.URI);
}
}