private PropertiesOptimization CreateOptimization(string key, Dictionary <string, SortedDictionary <Guid, DomainClass> > dict, Dictionary <string, List <DomainProperty> > dictProperties, bool isInheritance)
        {
            PropertiesOptimization pO = new PropertiesOptimization(this.MetaModel, this.ModelContext);

            pO.InvolvedProperties.AddRange(dictProperties[key]);
            foreach (Guid id in dict[key].Keys)
            {
                pO.InvolvedClasses.Add(dict[key][id]);
                if (isInheritance)
                {
                    // add inheritance relationship
                    ReadOnlyCollection <DomainClassReferencesBaseClass> col = DomainRoleInfo.GetElementLinks <DomainClassReferencesBaseClass>(dict[key][id], DomainClassReferencesBaseClass.DerivedClassDomainRoleId);
                    pO.InvolvedInheritancesRelationships.Add(col[0]);
                }
            }
            if (isInheritance)
            {
                pO.Description = "Move properties from derived class to basis class:";
            }
            else
            {
                pO.Description = "Creates a new base class containing properties for derived classes:";
            }
            pO.Title         = "Properties Optimization";
            pO.IsInheritance = isInheritance;
            if (pO.IsInheritance)
            {
                // add base class
                DomainClass d = dict[key][dict[key].Keys.ElementAt(0)];
                pO.BaseClass = d.BaseClass;

                bool bCreateIntermediate = false;
                if (pO.InvolvedClasses.Count != d.DerivedClasses.Count)
                {
                    bCreateIntermediate = true;
                }
                pO.CreateIntermediate = bCreateIntermediate;

                pO.InvolvedClasses.Add(d.BaseClass);
            }

            return(pO);
        }
        private PropertiesOptimization CreateOptimization(string key, Dictionary<string, SortedDictionary<Guid, DomainClass>> dict, Dictionary<string, List<DomainProperty>> dictProperties, bool isInheritance)
        {
            PropertiesOptimization pO = new PropertiesOptimization(this.MetaModel, this.ModelContext);
            pO.InvolvedProperties.AddRange(dictProperties[key]);
            foreach (Guid id in dict[key].Keys)
            {
                pO.InvolvedClasses.Add(dict[key][id]);
                if (isInheritance)
                {
                    // add inheritance relationship
                    ReadOnlyCollection<DomainClassReferencesBaseClass> col = DomainRoleInfo.GetElementLinks<DomainClassReferencesBaseClass>(dict[key][id], DomainClassReferencesBaseClass.DerivedClassDomainRoleId);
                    pO.InvolvedInheritancesRelationships.Add(col[0]);
                }
            }
            if (isInheritance)
                pO.Description = "Move properties from derived class to basis class:";
            else
                pO.Description = "Creates a new base class containing properties for derived classes:";
            pO.Title = "Properties Optimization";
            pO.IsInheritance = isInheritance;
            if (pO.IsInheritance)
            {
                // add base class 
                DomainClass d = dict[key][dict[key].Keys.ElementAt(0)];
                pO.BaseClass = d.BaseClass;

                bool bCreateIntermediate = false;
                if (pO.InvolvedClasses.Count != d.DerivedClasses.Count)
                    bCreateIntermediate = true;
                pO.CreateIntermediate = bCreateIntermediate;

                pO.InvolvedClasses.Add(d.BaseClass);
            }

            return pO;
        }