Beispiel #1
0
        private static Dictionary <string, List <PropertyInfo> > CacheBasicProperties(IFwMetaDataCacheManaged mdc)
        {
            var cachedBasicProperties = new Dictionary <string, List <PropertyInfo> >();

            foreach (var classId in mdc.GetClassIds())
            {
                var className = mdc.GetClassName(classId);
                List <PropertyInfo> basicProps;
                if (!cachedBasicProperties.TryGetValue(className, out basicProps))
                {
                    basicProps = new List <PropertyInfo>();
                    cachedBasicProperties.Add(className, basicProps);
                }
                basicProps.AddRange(mdc.GetFields(classId, className != "CmObject", (int)CellarPropertyTypeFilter.AllBasic).Select(propId => new PropertyInfo
                {
                    m_propertyName = mdc.GetFieldName(propId),
                    m_propertyType = (CellarPropertyType)mdc.GetFieldType(propId),
                    m_isCustom     = mdc.IsCustom(propId),
                    m_isVirtual    = mdc.get_IsVirtual(propId)
                }));
                if (basicProps.Count == 0)
                {
                    cachedBasicProperties.Remove(className);
                }
            }
            return(cachedBasicProperties);
        }
        /// <summary>
        /// Constructor
        /// </summary>
        internal IdentityMap(IFwMetaDataCacheManaged mdc)
        {
            if (mdc == null)
            {
                throw new ArgumentNullException("mdc");
            }

            m_mdc = mdc;
            foreach (var clsid in mdc.GetClassIds())
            {
                m_clsid2Surrogates.Add(clsid, new HashSet <ICmObjectOrSurrogate>(new ObjectSurrogateEquater()));
            }
        }
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Loads the list of all FDO class names from the meta data cache.
        /// </summary>
        /// ------------------------------------------------------------------------------------
        private static void LoadFDOClassNames()
        {
            if (s_allFDOClassNames != null)
            {
                return;
            }

            using (FdoCache cache = FdoCache.CreateCacheWithNoLangProj(new BrowserProjectId(FDOBackendProviderType.kMemoryOnly, null), "en", null))
            {
                IFwMetaDataCacheManaged mdc = (IFwMetaDataCacheManaged)cache.MainCacheAccessor.MetaDataCache;
                s_allFDOClassNames = new List <string>();

                foreach (int clsid in mdc.GetClassIds())
                {
                    s_allFDOClassNames.Add(mdc.GetClassName(clsid));
                }

                s_allFDOClassNames.Sort((x, y) => x.CompareTo(y));
            }
        }
Beispiel #4
0
        /// ------------------------------------------------------------------------------------
        /// <summary>
        /// Loads the list of all FDO class names from the meta data cache.
        /// </summary>
        /// ------------------------------------------------------------------------------------
        private static void LoadFDOClassNames()
        {
            if (s_allLCMClassNames != null)
            {
                return;
            }

            using (var threadHelper = new ThreadHelper())
                using (LcmCache cache = LcmCache.CreateCacheWithNoLangProj(new BrowserProjectId(BackendProviderType.kMemoryOnly, null), "en",
                                                                           new SilentLcmUI(threadHelper), FwDirectoryFinder.LcmDirectories, new LcmSettings()))
                {
                    IFwMetaDataCacheManaged mdc = (IFwMetaDataCacheManaged)cache.MainCacheAccessor.MetaDataCache;
                    s_allLCMClassNames = new List <string>();

                    foreach (int clsid in mdc.GetClassIds())
                    {
                        s_allLCMClassNames.Add(mdc.GetClassName(clsid));
                    }

                    s_allLCMClassNames.Sort((x, y) => x.CompareTo(y));
                }
        }
Beispiel #5
0
 /// <summary>
 /// Gets the list of class identification numbers (in no particular order). If the array
 /// provided is too small, only an arbitrary subset of cclid values is returned. If the
 /// array provided is too large, the excess entries are set to zero.
 ///</summary>
 /// <param name='cclid'>The size of the output array. </param>
 /// <param name='rgclid'>An integer array for returning the class identification numbers. </param>
 public virtual void GetClassIds(int cclid, ArrayPtr rgclid)
 {
     m_metaDataCache.GetClassIds(cclid, rgclid);
 }
Beispiel #6
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 static Dictionary<string, List<PropertyInfo>> CacheBasicProperties(IFwMetaDataCacheManaged mdc)
		{
			var cachedBasicProperties = new Dictionary<string, List<PropertyInfo>>();
			foreach (var classId in mdc.GetClassIds())
			{
				var className = mdc.GetClassName(classId);
				List<PropertyInfo> basicProps;
				if (!cachedBasicProperties.TryGetValue(className, out basicProps))
				{
					basicProps = new List<PropertyInfo>();
					cachedBasicProperties.Add(className, basicProps);
				}
				basicProps.AddRange(mdc.GetFields(classId, className != "CmObject", (int)CellarPropertyTypeFilter.AllBasic).Select(propId => new PropertyInfo
					{
						m_propertyName = mdc.GetFieldName(propId),
						m_propertyType = (CellarPropertyType)mdc.GetFieldType(propId),
						m_isCustom = mdc.IsCustom(propId),
						m_isVirtual = mdc.get_IsVirtual(propId)
					}));
				if (basicProps.Count == 0)
					cachedBasicProperties.Remove(className);
			}
			return cachedBasicProperties;
		}
		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
		}