Exemplo n.º 1
0
        /// <summary>
        /// Recursive function which creates URNs for all maintainables, versionables and identifiables.
        /// </summary>
        /// <param name="o">The element to test and create an URN for.</param>
        /// <param name="maintainable">The parent maintainable.</param>
        /// <param name="maintainableID">The parent maintainable ID.</param>
        /// <param name="maintainableVersion">The parent maintainable version.</param>
        private void CreateElementURNs(object o, string maintainable, string maintainableID, string maintainableVersion)
        {
            //if (!o.GetType().Namespace.StartsWith("DDIClassLibrary"))
            //    return;
            if (o.GetType().IsValueType || o is String || o is Enum)
            {
                return;
            }

            if (o is MaintainableType)
            {
                MaintainableType m = o as MaintainableType;
                m.CreateURN(AgencyID);
                maintainable        = m.ObjectType;
                maintainableID      = m.id;
                maintainableVersion = m.version;
            }
            else if (o is VersionableType)
            {
                (o as VersionableType).CreateURN(AgencyID, maintainable, maintainableID, maintainableVersion);
            }
            else if (o is IdentifiableType)
            {
                (o as IdentifiableType).CreateURN(AgencyID, maintainable, maintainableID, maintainableVersion);
            }

            foreach (var p in o.GetType().GetProperties())
            {
                if (o.GetType().IsGenericType)
                {
                    foreach (var v in o as IList)
                    {
                        CreateElementURNs(v, maintainable, maintainableID, maintainableVersion);
                    }
                }
                else
                {
                    Object propvalue = p.GetValue(o, null);

                    if (propvalue != null)
                    {
                        if (propvalue.GetType().IsGenericType&& propvalue.GetType().GetGenericTypeDefinition() == typeof(List <>))
                        {
                            foreach (var v in propvalue as IList)
                            {
                                CreateElementURNs(v, maintainable, maintainableID, maintainableVersion);
                            }
                        }
                        else
                        {
                            CreateElementURNs(propvalue, maintainable, maintainableID, maintainableVersion);
                        }
                    }
                }
            }
        }