IfcDoc.FormatTTL_Stream.WriteTypeValue C# (CSharp) Method

WriteTypeValue() private method

private WriteTypeValue ( Type ft, object v ) : void
ft System.Type
v object
return void
        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);
            }
        }