コード例 #1
0
        private void CreateRelationship(string idParent, string idChild, IfdRelationshipTypeEnum reltype)
        {
            string url = this.m_uri + "api/4.0/IfdConcept/" + idParent + "/child?childGuid=" + idChild + "&relationshipType=" + reltype; // context guids???

            if (this.m_context != null)
            {
                url += "&contextGuids=" + this.m_context; // verify...
            }

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

            request.Method        = "POST";
            request.ContentType   = "application/x-www-form-urlencoded";
            request.ContentLength = 0;
            request.Accept        = "application/json";
            request.Headers.Add("cookie", "peregrineapisessionid=" + this.m_session);

            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            }
            catch (Exception xx)
            {
                System.Diagnostics.Debug.WriteLine(xx.Message);
            }
        }
コード例 #2
0
ファイル: DataDictionary.cs プロジェクト: sta1216/IfcDoc
        /// <summary>
        /// Writes a data type and all public instance properties.
        /// Such type may correspond to an IFC entity or a ConceptRoot of a model view definition (which may also correspond to a property set)
        /// The type is nested according to namespace tokens.
        /// The type is linked to superclass according to base type.
        /// The type is expanded into subclasses if the last property is an enumeration for a classification (e.g. PredefinedType).
        /// Any referenced types are also retrieved and written if they don't yet exist.
        /// Localized names and descriptions are extracted from .NET resources.
        /// </summary>
        /// <param name="type"></param>
        public void WriteType(Type type)
        {
            if (type == null)
            {
                return;
            }

            if (m_mapTypes.ContainsKey(type))
            {
                return; // already written
            }
            string name = type.Name;
            DisplayNameAttribute attrName = (DisplayNameAttribute)type.GetCustomAttribute <DisplayNameAttribute>();

            if (attrName != null)
            {
                name = attrName.DisplayName;
            }

            string desc = null;
            DescriptionAttribute attrDesc = (DescriptionAttribute)type.GetCustomAttribute <DescriptionAttribute>();

            if (attrDesc != null)
            {
                desc = attrDesc.Description;
            }

            IfdConceptTypeEnum      conctype = IfdConceptTypeEnum.SUBJECT;
            IfdRelationshipTypeEnum relbase  = IfdRelationshipTypeEnum.SPECIALIZES;

            if (type.Name.StartsWith("Pset") || type.Name.StartsWith("Qto"))
            {
                // hack
                conctype = IfdConceptTypeEnum.BAG;
                relbase  = IfdRelationshipTypeEnum.ASSIGNS_COLLECTIONS;
            }
            else if (type.IsValueType || type.IsEnum)
            {
                conctype = IfdConceptTypeEnum.MEASURE;
            }

            // retrieve existing -- enable once final uploaded correctly!
#if false
            IfdConcept conc = SearchConcept(type.Name, conctype);
            if (conc != null)
            {
                this.m_mapTypes.Add(type, conc.guid);
                return;
            }
#endif

            DisplayAttribute[] localize = (DisplayAttribute[])type.GetCustomAttributes(typeof(DisplayAttribute), false);
            IfdBase            ifdThis  = CreateConcept(type.Name, name, desc, conctype, localize);
            if (ifdThis == null)
            {
                return;
            }

            this.m_mapTypes.Add(type, ifdThis.guid);

            // get namespace
            string[] namespaces       = type.Namespace.Split('.');
            string   guidSchemaParent = null;
            string   guidSchemaChild  = null;
            for (int iNS = 0; iNS < namespaces.Length; iNS++)
            {
                string ns = namespaces[iNS];
                if (!this.m_mapNamespaces.TryGetValue(ns, out guidSchemaChild))
                {
                    StringBuilder sbQual = new StringBuilder();
                    for (int x = 0; x <= iNS; x++)
                    {
                        if (x > 0)
                        {
                            sbQual.Append(".");
                        }
                        sbQual.Append(namespaces[x]);
                    }
                    string qualname = sbQual.ToString();

                    // call server to find namespace
                    IfdConcept ifdNamespace = SearchConcept(qualname, IfdConceptTypeEnum.BAG);
                    if (ifdNamespace != null)
                    {
                        guidSchemaChild = ifdNamespace.guid;
                    }
                    else
                    {
                        IfdBase ifdNS = CreateConcept(qualname, ns, String.Empty, IfdConceptTypeEnum.BAG, null);
                        guidSchemaChild = ifdNS.guid;
                    }

                    this.m_mapNamespaces.Add(ns, guidSchemaChild);

                    if (guidSchemaParent != null)
                    {
                        CreateRelationship(guidSchemaParent, guidSchemaChild, IfdRelationshipTypeEnum.COLLECTS);
                    }
                }

                if (iNS == namespaces.Length - 1)
                {
                    CreateRelationship(guidSchemaChild, ifdThis.guid, IfdRelationshipTypeEnum.COLLECTS);
                }

                guidSchemaParent = guidSchemaChild;
            }

            // get base type
            if (type.IsClass && type.BaseType != typeof(object))
            {
                WriteType(type.BaseType);

                string guidbase = null;
                if (m_mapTypes.TryGetValue(type.BaseType, out guidbase))
                {
                    CreateRelationship(guidbase, ifdThis.guid, relbase);
                }
            }

            //PropertyInfo[] props = type.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public);
            //foreach (PropertyInfo prop in props)
            FieldInfo[] fields = type.GetFields(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public);
            foreach (FieldInfo prop in fields)
            {
                // write the property itself

                // resolve property type
                Type typeProp = prop.FieldType;
                if (typeProp.IsGenericType && typeProp.GetGenericTypeDefinition() == typeof(Nullable <>))
                {
                    typeProp = typeProp.GetGenericArguments()[0];
                }

                if (typeProp.IsGenericType && typeProp.GetGenericTypeDefinition() == typeof(IList <>))
                {
                    typeProp = typeProp.GetGenericArguments()[0];
                }

                if (typeProp.IsGenericType && typeProp.GetGenericTypeDefinition() == typeof(ISet <>))
                {
                    typeProp = typeProp.GetGenericArguments()[0];
                }

                if (typeProp.IsArray)
                {
                    typeProp = typeProp.GetElementType();
                }

                // special case for specialization
                if (prop.Name.Equals("_PredefinedType"))
                {
                    FieldInfo[] enumvals = typeProp.GetFields(BindingFlags.Public | BindingFlags.Static);
                    foreach (FieldInfo f in enumvals)
                    {
                        if (f.Name != "USERDEFINED" && f.Name != "NOTDEFINED")
                        {
                            string fname = f.Name;
                            DisplayNameAttribute attrFName = (DisplayNameAttribute)f.GetCustomAttribute <DisplayNameAttribute>();
                            if (attrName != null)
                            {
                                fname = attrName.DisplayName;
                            }

                            string fdesc = null;
                            DescriptionAttribute attrFDesc = (DescriptionAttribute)f.GetCustomAttribute <DescriptionAttribute>();
                            if (attrDesc != null)
                            {
                                fdesc = attrDesc.Description;
                            }

                            DisplayAttribute[] localizePredef = (DisplayAttribute[])f.GetCustomAttributes(typeof(DisplayAttribute), false);
                            IfdBase            ifdPredef      = CreateConcept(type.Name + "." + f.Name, fname, fdesc, IfdConceptTypeEnum.SUBJECT, localizePredef);
                            if (ifdPredef != null)
                            {
                                CreateRelationship(ifdThis.guid, ifdPredef.guid, IfdRelationshipTypeEnum.SPECIALIZES);
                            }
                        }
                    }
                }
                else if (conctype == IfdConceptTypeEnum.BAG)// psetprop.FieldType.IsValueType) //!!!
                {
                    name     = type.Name;
                    attrName = (DisplayNameAttribute)prop.GetCustomAttribute <DisplayNameAttribute>();
                    if (attrName != null)
                    {
                        name = attrName.DisplayName;
                    }

                    desc     = null;
                    attrDesc = (DescriptionAttribute)prop.GetCustomAttribute <DescriptionAttribute>();
                    if (attrDesc != null)
                    {
                        desc = attrDesc.Description;
                    }

                    string  propidentifier = type.Name + "." + prop.Name.Substring(1);
                    IfdBase ifdProp        = CreateConcept(propidentifier, name, desc, IfdConceptTypeEnum.PROPERTY, null);
                    if (ifdProp == null)
                    {
                        return;
                    }

                    // include the property
                    CreateRelationship(ifdThis.guid, ifdProp.guid, IfdRelationshipTypeEnum.COLLECTS);

                    WriteType(typeProp);

                    if (typeProp.IsValueType)
                    {
                        string guidDataType = null;
                        if (m_mapTypes.TryGetValue(typeProp, out guidDataType))
                        {
                            CreateRelationship(ifdProp.guid, guidDataType, IfdRelationshipTypeEnum.ASSIGNS_MEASURES);//...verify
                        }
                    }
                }
            }
        }
コード例 #3
0
ファイル: DataDictionary.cs プロジェクト: sta1216/IfcDoc
        public static void CreateRelationship(string baseurl, string sessionid, string idParent, string idChild, IfdRelationshipTypeEnum reltype)
        {
            //// requires admin access: string url = baseurl + "api/4.0/IfdRelationship?relationshipType=" + reltype + "&parentGuid=" + idParent + "&childGuid=" + idChild; // contextGuids=,
            string         url     = baseurl + "api/4.0/IfdConcept/" + idParent + "/child?childGuid=" + idChild + "&relationshipType=" + reltype; // context guids???
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

            request.Method        = "POST";
            request.ContentType   = "application/x-www-form-urlencoded";
            request.ContentLength = 0;
            request.Accept        = "application/json";
            request.Headers.Add("cookie", "peregrineapisessionid=" + sessionid);

            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            }
            catch (Exception xx)
            {
                System.Diagnostics.Debug.WriteLine(xx.Message);
            }
        }