예제 #1
0
 /// ------------------------------------------------------------------------------------
 /// <summary>
 /// Adds the sub nodes.
 /// </summary>
 /// <param name="parentNodes">The parent node collection.</param>
 /// <param name="superClassId">The super class clid.</param>
 /// ------------------------------------------------------------------------------------
 private void AddSubNodes(TreeNodeCollection parentNodes, int superClassId)
 {
     foreach (var subclassClid in m_mdc.GetDirectSubclasses(superClassId))
     {
         AddNode(parentNodes, m_mdc.GetClassName(subclassClid), subclassClid);
     }
 }
예제 #2
0
        IEnumerable <int> AllSubclasses(int clsid)
        {
            yield return(clsid);

            foreach (var subclassId in m_mdc.GetDirectSubclasses(clsid))
            {
                foreach (var item in AllSubclasses(subclassId))
                {
                    yield return(item);
                }
            }
        }
예제 #3
0
 /// <summary> Gets the direct subclasses of the given class (not including itself). </summary>
 /// <param name='luClid'> </param>
 /// <param name='cluMax'> </param>
 /// <param name='_cluOut'> </param>
 /// <param name='_rgluSubclasses'> </param>
 public virtual void GetDirectSubclasses(int luClid, int cluMax, out int _cluOut, ArrayPtr _rgluSubclasses)
 {
     m_metaDataCache.GetDirectSubclasses(luClid, cluMax, out _cluOut, _rgluSubclasses);
 }
예제 #4
0
        private readonly IFwMetaDataCacheManaged m_mdc;         // needed for some data migrations changing over to custom fields.

        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="startingModelVersionNumber">The starting model version number for the
        /// migration.</param>
        /// <param name="dtos">DTOs from BEP-land.</param>
        /// <param name="mdc">The MDC.</param>
        /// <param name="projectFolder">The project folder (don't even think about trying to
        /// pass a path on a server other than the local machine, and -- yes -- I CAN control
        /// your thoughts!).</param>
        /// <param name="dirs"></param>
        /// ------------------------------------------------------------------------------------
        internal DomainObjectDtoRepository(int startingModelVersionNumber, HashSet <DomainObjectDTO> dtos,
                                           IFwMetaDataCacheManaged mdc, string projectFolder, ILcmDirectories dirs)
        {
            if (dtos == null)
            {
                throw new ArgumentNullException("dtos");
            }
            if (mdc == null)
            {
                throw new ArgumentNullException("mdc");
            }

            m_currentModelVersionNumber = startingModelVersionNumber;
            m_dtos          = dtos;
            m_mdc           = mdc;
            m_projectFolder = projectFolder;
            m_dirs          = dirs;

            // Add classes from MDC
            foreach (var clsid in mdc.GetClassIds())
            {
                // Leaf classes will have nothing in 'subclasses'.
                var className = mdc.GetClassName(clsid);
                m_dtosByClass.Add(className, new HashSet <DomainObjectDTO>());
                if (className == "CmObject")
                {
                    m_classAndSuperClass.Add(className, null);
                }
                var subclasses = new HashSet <string>();
                m_classesAndTheirDirectSubclasses.Add(className, subclasses);
                var subclassIds = mdc.GetDirectSubclasses(clsid);
                if (subclassIds.Count() == 0)
                {
                    if (!m_classAndSuperClass.ContainsKey(className))
                    {
                        m_classAndSuperClass.Add(className, mdc.GetBaseClsName(clsid));
                    }
                    continue;
                }
                foreach (var directSubClsid in subclassIds)
                {
                    var directSubclassName = mdc.GetClassName(directSubClsid);
                    subclasses.Add(directSubclassName);

                    // added ContainsKey check because of mono bug https://bugzilla.novell.com/show_bug.cgi?id=539288
                    // see also change in LcmMetaDataCache.cs (AddClass methods replaced with AddClass1, AddClass2)
                    // for simular reasons (order of types obtains via reflection)https://bugzilla.novell.com/show_bug.cgi?id=539288.
                    if (!m_classAndSuperClass.ContainsKey(directSubclassName))
                    {
                        m_classAndSuperClass.Add(directSubclassName, className);
                    }
                }
            }

#if ORIGINAL
            foreach (var classname in m_classesAndTheirDirectSubclasses.Keys)
            {
                // Some may have no instances.
                m_dtosByClass.Add(classname, (from dto in m_dtos
                                              where dto.Classname == classname
                                              select dto).ToList());
            }

            foreach (var dto in m_dtos)
            {
                m_dtoByGuid.Add(dto.Guid.ToLower(), dto);
            }
#else
            m_dtoByGuid = new Dictionary <string, DomainObjectDTO>(m_dtos.Count);
            foreach (var dto in m_dtos)
            {
                m_dtoByGuid.Add(dto.Guid.ToLower(), dto);
                AddToClassList(dto);
            }
#endif
        }
		private readonly IFwMetaDataCacheManaged m_mdc;	// needed for some data migrations changing over to custom fields.

		/// ------------------------------------------------------------------------------------
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="startingModelVersionNumber">The starting model version number for the
		/// migration.</param>
		/// <param name="dtos">DTOs from BEP-land.</param>
		/// <param name="mdc">The MDC.</param>
		/// <param name="projectFolder">The project folder (don't even think about trying to
		/// pass a path on a server other than the local machine, and -- yes -- I CAN control
		/// your thoughts!).</param>
		/// <param name="dirs"></param>
		/// ------------------------------------------------------------------------------------
		internal DomainObjectDtoRepository(int startingModelVersionNumber, HashSet<DomainObjectDTO> dtos,
			IFwMetaDataCacheManaged mdc, string projectFolder, IFdoDirectories dirs)
		{
			if (dtos == null) throw new ArgumentNullException("dtos");
			if (mdc == null) throw new ArgumentNullException("mdc");

			m_currentModelVersionNumber = startingModelVersionNumber;
			m_dtos = dtos;
			m_mdc = mdc;
			m_projectFolder = projectFolder;
			m_dirs = dirs;

			// Add classes from MDC
			foreach (var clsid in mdc.GetClassIds())
			{
				// Leaf classes will have nothing in 'subclasses'.
				var className = mdc.GetClassName(clsid);
				m_dtosByClass.Add(className, new HashSet<DomainObjectDTO>());
				if (className == "CmObject")
					m_classAndSuperClass.Add(className, null);
				var subclasses = new HashSet<string>();
				m_classesAndTheirDirectSubclasses.Add(className, subclasses);
				var subclassIds = mdc.GetDirectSubclasses(clsid);
				if (subclassIds.Count() == 0)
				{
					if (!m_classAndSuperClass.ContainsKey(className))
						m_classAndSuperClass.Add(className, mdc.GetBaseClsName(clsid));
					continue;
				}
				foreach (var directSubClsid in subclassIds)
				{
					var directSubclassName = mdc.GetClassName(directSubClsid);
					subclasses.Add(directSubclassName);

					// added ContainsKey check because of mono bug https://bugzilla.novell.com/show_bug.cgi?id=539288
					// see also change in FdoIFwMetaDataCache.cs (AddClass methods replaced with AddClass1, AddClass2)
					// for simular reasons (order of types obtains via reflection)https://bugzilla.novell.com/show_bug.cgi?id=539288.
					if (!m_classAndSuperClass.ContainsKey(directSubclassName))
					{
						m_classAndSuperClass.Add(directSubclassName, className);
					}
				}
			}

#if ORIGINAL
			foreach (var classname in m_classesAndTheirDirectSubclasses.Keys)
			{
				// Some may have no instances.
				m_dtosByClass.Add(classname, (from dto in m_dtos
											  where dto.Classname == classname
											  select dto).ToList());
			}

			foreach (var dto in m_dtos)
				m_dtoByGuid.Add(dto.Guid.ToLower(), dto);
#else
			m_dtoByGuid = new Dictionary<string, DomainObjectDTO>(m_dtos.Count);
			foreach (var dto in m_dtos)
			{
				m_dtoByGuid.Add(dto.Guid.ToLower(), dto);
				AddToClassList(dto);
			}
#endif
		}