Example #1
0
        private IEnumerable <CyPhy.ComponentAssembly> GetAllComponentAssemblys(IMgaProject project, bool includeLibraries = false)
        {
            var filter = project.CreateFilter();

            filter.Kind = "ComponentAssembly";

            int componentsId          = project.RootMeta.RootFolder.GetDefinedFolderByNameDisp("Components", true).MetaRef;
            int componentAssembliesId = project.RootMeta.RootFolder.GetDefinedFolderByNameDisp("ComponentAssemblies", true).MetaRef;

            IEnumerable <MgaFolder> rootFolders = new MgaFolder[] { project.RootFolder };

            if (includeLibraries)
            {
                rootFolders = rootFolders.Concat(
                    project.RootFolder.ChildFolders.Cast <MgaFolder>().Where(f => String.IsNullOrEmpty(f.LibraryName) == false));
            }
            foreach (MgaFolder rootFolder in rootFolders)
            {
                foreach (MgaFolder folder in rootFolder.ChildFolders)
                {
                    int metaRef = folder.MetaBase.MetaRef;
                    if (metaRef == componentsId || metaRef == componentAssembliesId)
                    {
                        foreach (IMgaObject fco in folder.GetDescendantFCOs(filter))
                        {
                            yield return(CyPhyClasses.ComponentAssembly.Cast(fco));
                        }
                    }
                }
            }
        }
Example #2
0
        private static string GetNamespaceName(MgaObject obj)
        {
            Contract.Requires(obj != null);
            string    ns            = "";
            MgaModel  paradigmSheet = null;
            MgaFolder rootFolder    = null;

            if (obj.MetaBase.Name == "RootFolder")
            {
                rootFolder = obj as MgaFolder;
            }
            else
            {
                paradigmSheet = (obj as MgaFCO).ParentModel;
                rootFolder    = GetLibraryRoot(paradigmSheet.ParentFolder);
            }
            try
            {
                ns = rootFolder.RegistryValue["Namespace"];
            }
            catch
            {
                // com exception...
            }
            return(ns);
        }
        private void RemoveEmptyDuplicatedFolders(MgaFolder mgaFolder)
        {
            foreach (MgaFolder childFolder in mgaFolder.ChildFolders)
            {
                if (childFolder.IsLibOrLibObject() == false)
                {
                    this.RemoveEmptyDuplicatedFolders(childFolder);
                }
            }

            var uniqueNames = mgaFolder
                              .ChildFolders
                              .Cast <MgaFolder>()
                              .Where(x => x.IsLibOrLibObject() == false)
                              .Select(x => x.Name)
                              .Distinct()
                              .ToList();

            foreach (var uniqueFolderName in uniqueNames)
            {
                var firstObj        = mgaFolder.ChildFolders.Cast <MgaFolder>().Where(x => x.IsLibOrLibObject() == false).Where(x => x.Name == uniqueFolderName).FirstOrDefault();
                var foldersToDelete = mgaFolder.ChildFolders.Cast <MgaFolder>().Where(x => x.IsLibOrLibObject() == false).Where(x => x != firstObj).Where(x => x.Name == uniqueFolderName).Where(x => x.ChildObjects.Count == 0).ToList();

                foldersToDelete.ForEach(x => x.DestroyObject());
            }
        }
Example #4
0
        private static void GenerateAssemblies(MgaFolder componentAssemblyFolder, MgaModel assembly, int level, MgaModel leaf)
        {
            var elementsOnEachLevel = 2;
            var numberOfLevels      = 6;

            if (level <= numberOfLevels)
            {
                System.Console.Out.WriteLine(level);

                MgaFolder componentAssemblyChildFolder = componentAssemblyFolder.CreateFolder(componentAssemblyFolder.Project.RootMeta.RootFolder.DefinedFolderByName["ComponentAssemblies", true]);

                componentAssemblyChildFolder.Name = string.Format("ComponentAssembly Child folder {0}", level);

                for (int i = 0; i < elementsOnEachLevel; i++)
                {
                    var childAssembly = componentAssemblyChildFolder.CreateRootObject(assembly.Meta) as MgaModel;
                    childAssembly.Name = string.Format("ChildAssembly {0} {1}", level, i);

                    var cref = assembly.CreateChildObject((assembly.Meta as GME.MGA.Meta.MgaMetaModel).RoleByName["ComponentRef"]) as MgaReference;
                    cref.Name = string.Format("ComponentRef {0} {1}", level, i);

                    if (level < numberOfLevels)
                    {
                        cref.Referred = childAssembly as MgaFCO;
                        GenerateAssemblies(componentAssemblyFolder, childAssembly, level + 1, leaf);
                    }
                    else
                    {
                        cref.Referred = leaf as MgaFCO;
                    }
                }
            }
        }
Example #5
0
 private bool willBeMigrated(MgaFolder folder)
 {
     if (folder == RootFolder)
     {
         return(true);
     }
     return(folder.ParentFolder != null && willBeMigrated(folder.ParentFolder));
 }
Example #6
0
        public void migrateModel(MgaModel rootmodel)
        {
            RootFolder = null;
            RootModel  = rootmodel;

            createNewFCOs(rootmodel);
            directFCOs();
            copyOldLayout();
            deleteOldFCOs();
        }
Example #7
0
        private List <MgaFolder> getAllFolders(MgaFolder folder)
        {
            List <MgaFolder> rtn = new List <MgaFolder>();

            rtn.Add(folder);
            foreach (MgaFolder subfolder in folder.ChildFolders)
            {
                rtn.AddRange(getAllFolders(subfolder));
            }
            return(rtn);
        }
Example #8
0
        public void migrateProject()
        {
            RootFolder = project.RootFolder;
            RootModel = null;

            List<MgaFolder> folders = getAllFolders(project.RootFolder);
            List<MgaFolder> C = new List<MgaFolder>(); //components
            List<MgaFolder> DS = new List<MgaFolder>(); //design spaces
            List<MgaFolder> CA = new List<MgaFolder>(); // component assemblies
            List<MgaFolder> TC = new List<MgaFolder>(); //test components
            List<MgaFolder> T = new List<MgaFolder>(); //testing
            List<MgaFolder> other = new List<MgaFolder>();

            foreach (MgaFolder folder in folders)
            {
                if (folder == null)
                    continue;
                if (folder.MetaFolder.DisplayedName == "Components")
                    C.Add(folder);
                else if (folder.MetaFolder.DisplayedName == "Design Spaces")
                    DS.Add(folder);
                else if (folder.MetaFolder.DisplayedName == "Component Assemblies")
                    CA.Add(folder);
                else if (folder.MetaFolder.DisplayedName == "Test Components")
                    TC.Add(folder);
                else if (folder.MetaFolder.DisplayedName == "Testing")
                    T.Add(folder);
                else
                    other.Add(folder);
            }
            
            foreach (MgaFolder folder in C)
                foreach (MgaModel model in folder.ChildObjects.OfType<MgaModel>())
                    createNewFCOs(model);
            foreach (MgaFolder folder in DS)
                foreach (MgaModel model in folder.ChildObjects.OfType<MgaModel>())
                    createNewFCOs(model);
            foreach (MgaFolder folder in CA)
                foreach (MgaModel model in folder.ChildObjects.OfType<MgaModel>())
                    createNewFCOs(model);
            foreach (MgaFolder folder in TC)
                foreach (MgaModel model in folder.ChildObjects.OfType<MgaModel>())
                    createNewFCOs(model);
            foreach (MgaFolder folder in T)
                foreach (MgaModel model in folder.ChildObjects.OfType<MgaModel>())
                    createNewFCOs(model);
            foreach (MgaFolder folder in other)
                foreach (MgaModel model in folder.ChildObjects.OfType<MgaModel>())
                    createNewFCOs(model);
            directFCOs();
            copyOldLayout();
            deleteOldFCOs();
        }
Example #9
0
 private static MgaFolder GetLibraryRoot(MgaFolder mgaFolder)
 {
     Contract.Requires(mgaFolder != null);
     if (mgaFolder.MetaBase.Name == "RootFolder")
     {
         return(mgaFolder);
     }
     else
     {
         return(GetLibraryRoot(mgaFolder.ParentFolder));
     }
 }
        private void CollapseFolders(MgaFolder mgaFolder)
        {
            Func <IMgaObject, Tuple <string, string> > nameAndKind = x => new Tuple <string, string>(x.Name, x.MetaBase.Name);
            var uniqueNames = mgaFolder
                              .ChildFolders
                              .Cast <MgaFolder>()
                              .Where(x => x.IsLibOrLibObject() == false)
                              .Where(x => x.MetaBase.Name != "RootFolder")
                              .GroupBy(x => nameAndKind(x))
                              .ToList();

            foreach (var group in uniqueNames.Where(x => x.Any()))
            {
                var firstObj      = group.First();
                var foldersToMove = group.Skip(1).SelectMany(x => x.ChildFolders.Cast <MgaFolder>()).Where(x => x.IsLibOrLibObject() == false);
                var fcosToMove    = group.Skip(1).SelectMany(x => x.ChildFCOs.Cast <MgaFCO>()).Where(x => x.IsLibObject == false);

                //GMEConsole.Info.WriteLine(" -- {0}", firstObj.AbsPath);

                foreach (var item in foldersToMove)
                {
                    if (item.IsLibOrLibObject())
                    {
                        GMEConsole.Error.WriteLine(" - Lib object! {0}", item.AbsPath);
                        continue;
                    }
                    var moved = firstObj.MoveFolderDisp(item);
                    //GMEConsole.Info.WriteLine(" ----- {0} -> {1}", item.AbsPath, moved.AbsPath);
                }

                foreach (var item in fcosToMove)
                {
                    if (item.IsLibObject)
                    {
                        GMEConsole.Error.WriteLine(" - Lib object! {0}", item.AbsPath);
                        continue;
                    }
                    var moved = firstObj.MoveFCODisp(item);
                    //GMEConsole.Info.WriteLine(" ----- {0} -> {1}", item.AbsPath, moved.AbsPath);
                }
            }

            foreach (MgaFolder childFolder in mgaFolder.ChildFolders)
            {
                if (childFolder.IsLibOrLibObject() == false)
                {
                    this.CollapseFolders(childFolder);
                }
            }
        }
Example #11
0
        public void migrateFolder(MgaFolder rootfolder)
        {
            RootFolder = rootfolder;
            RootModel  = null;

            List <MgaFolder> folders = getAllFolders(rootfolder);

            foreach (MgaFolder folder in folders)
            {
                foreach (MgaModel model in folder.ChildObjects.OfType <MgaModel>())
                {
                    createNewFCOs(model);
                }
            }
            directFCOs();
            copyOldLayout();
            deleteOldFCOs();
        }
        private void CollapseLibraries(MgaFolder mgaFolder)
        {
            var libraries = mgaFolder
                            .ChildFolders
                            .Cast <MgaFolder>()
                            .Where(x => string.IsNullOrEmpty(x.LibraryName) == false)
                            .GroupBy(lib => libInfos.Where(inf => lib.Name.Contains(inf.DisplayName)).FirstOrDefault())
                            .ToList();

            foreach (IGrouping <LibraryInfo, MgaFolder> group in libraries.Where(gr => gr.Key != null))
            {
                var orderedLibraries = group.OrderBy(f => f.RelID);
                var library          = orderedLibraries.First();
                foreach (var dup in orderedLibraries.Skip(1))
                {
                    ReferenceSwitcher.Switcher sw = new ReferenceSwitcher.Switcher(dup, library, null);
                    sw.UpdateSublibrary();
                    dup.DestroyObject();
                }
            }
        }
Example #13
0
        private void CreateMaterialObjects(MgaFolder materialFolder,
                                           List <string> materialsList)
        {
            List <string> existingMaterials = new List <string>();

            foreach (MgaFCO item in materialFolder.ChildFCOs)
            {
                existingMaterials.Add(item.StrAttrByName["Name"]);
            }

            foreach (var materialName in materialsList)
            {
                if (!existingMaterials.Contains(materialName))
                {
                    MgaMetaFCO role      = (materialFolder.MetaFolder as MgaMetaFolder).get_LegalRootObjectByName("Material");
                    MgaFCO     aMaterial = materialFolder.CreateRootObject(role);
                    aMaterial.Name = materialName;
                    aMaterial.StrAttrByName["Name"] = materialName;
                }
            }
        }
Example #14
0
        private static MgaFCO GenerateTestModel(MgaProject project, MgaFCO currentobj)
        {
            MgaFolder folderComponentAssemblies = project.RootFolder.CreateFolder(project.RootMeta.RootFolder.DefinedFolderByName["ComponentAssemblies", true]);

            folderComponentAssemblies.Name = "00 ComponentAssemblies";

            MgaModel ca = folderComponentAssemblies.CreateRootObject(project.RootMeta.RootFolder.DefinedFCOByName["ComponentAssembly", true]) as MgaModel;

            ca.Name = string.Format("00 Generated Component Assembly {0}", DateTime.Now);

            MgaFolder folderComponents = project.RootFolder.CreateFolder(project.RootMeta.RootFolder.DefinedFolderByName["Components", true]);

            folderComponents.Name = "00 Components";

            MgaModel leaf = folderComponents.CreateRootObject(project.RootMeta.RootFolder.DefinedFCOByName["Component", true]) as MgaModel;

            leaf.Name = string.Format("00 Generated Component {0}", DateTime.Now);

            // generate syntetic model
            GenerateAssemblies(folderComponentAssemblies, ca, 0, leaf);

            currentobj = ca as MgaFCO;
            return(currentobj);
        }
Example #15
0
        private MgaFCO SurrogateMaster(
            MgaProject project,
            MgaFCO currentobj,
            MgaFCOs selectedobjs,
            int param,
            bool expand = true)
        {
            MgaFolder f = currentobj.ParentFolder;

            if (f == null)
            {
                throw new Exception("Testbench does not have a TestFolder parent!");
            }

            MgaFolder fNew = f.CreateFolder(f.MetaFolder);

            fNew.Name = currentobj.Name + DateTime.Now.ToString(" (MM-dd-yyyy HH:mm:ss)");

            MgaFCO newTestbench = fNew.CopyFCODisp(currentobj);

            //newTestbench.Name += " TestName";

            return(newTestbench);
        }
Example #16
0
        public void Main(MgaProject project, MgaFCO currentobj, MgaFCOs selectedobjs, ComponentStartMode startMode)
        {
            // TODO: Add your interpreter code
            GMEConsole.Clear();
            GMEConsole.Out.WriteLine("Running interpreter...");

            // Get RootFolder
            IMgaFolder rootFolder = project.RootFolder;

            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            openFileDialog1.Filter = "Json Files (*.json)|*.json";

            var userClickedOK = openFileDialog1.ShowDialog();

            // Process input if the user clicked OK.
            if (userClickedOK == System.Windows.Forms.DialogResult.OK)
            {
                string fileName = openFileDialog1.FileName;

                // parse Json
                if (File.Exists(fileName))
                {
                    List <string> materialKeys = new List <string>();
                    using (StreamReader reader = new StreamReader(fileName))
                    {
                        string  materialStr = reader.ReadToEnd();
                        JObject o           = JObject.Parse(materialStr);
                        JObject materialLib = o["Material library"].Value <JObject>();
                        if (materialLib != null)
                        {
                            materialKeys = materialLib.Properties().Select(p => p.Name).ToList();
                        }
                    }


                    // create material folders
                    if (materialKeys.Count() > 0)
                    {
                        int count = rootFolder.ChildFolders.OfType <GME.MGA.MgaFolder>().Where(f => f.MetaBase.Name == "MaterialsDefinition").Count();
                        if (count > 1)
                        {
                            GMEConsole.Error.WriteLine("There should only be 1 materials definition folder!");
                            return;
                        }
                        else if (count < 1)
                        {
                            var       role           = (rootFolder.MetaFolder as MgaMetaFolder).get_LegalChildFolderByName("MaterialsDefinition");
                            MgaFolder materialFolder = rootFolder.CreateFolder(role);
                            materialFolder.Name = "MaterialDefinitions";
                            CreateMaterialObjects(materialFolder,
                                                  materialKeys);
                        }
                        else
                        {
                            MgaFolder materialFolder = rootFolder.ChildFolders.OfType <GME.MGA.MgaFolder>().Where(f => f.MetaBase.Name == "MaterialsDefinition").First();
                            CreateMaterialObjects(materialFolder,
                                                  materialKeys);
                        }
                    }
                }
            }
            else
            {
                return;
            }

            // To use the domain-specific API:
            //  Create another project with the same name as the paradigm name
            //  Copy the paradigm .mga file to the directory containing the new project
            //  In the new project, install the GME DSMLGenerator NuGet package (search for DSMLGenerator)
            //  Add a Reference in this project to the other project
            //  Add "using [ParadigmName] = ISIS.GME.Dsml.[ParadigmName].Classes.Interfaces;" to the top of this file
            // if (currentobj.Meta.Name == "KindName")
            // [ParadigmName].[KindName] dsCurrentObj = ISIS.GME.Dsml.[ParadigmName].Classes.[KindName].Cast(currentobj);
        }
Example #17
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="parent"></param>
        /// <param name="metaRef">meta ref of the new object</param>
        /// <param name="roleMetaRef">meta ref of the role (if the parent is a model)</param>
        /// <returns></returns>
        public static T CreateObject <T>(
            ISIS.GME.Common.Interfaces.Container parent,
            int metaRef,
            int roleMetaRef = 0)
            where T : ISIS.GME.Common.Classes.Base, new()
        {
            Contract.Requires(parent != null);

            T result = new T();

            if (parent.Impl is MgaModel)
            {
                MgaModel    model = parent.Impl as MgaModel;
                MgaMetaRole role  = null;
                try
                {
                    // try to use user defined role
                    role = (model.MetaBase as MgaMetaModel).
                           Roles.
                           Cast <MgaMetaRole>().
                           FirstOrDefault(x => x.MetaRef == roleMetaRef);
                }
                catch (Exception ex)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("Role was not found in the container.");
                    sb.AppendLine("Paradigm violation.");
                    sb.AppendFormat("Container type: {0} Requested role: {1}",
                                    parent.Kind,
                                    result.GetType().Name);
                    throw new Exception(sb.ToString(), ex);
                }

                try
                {
                    IMgaFCO fco = model.CreateChildObject(role);
                    result.Impl = fco as IMgaObject;
                    return(result);
                }
                catch (Exception ex)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("New element could not be created.");
                    sb.AppendFormat("Container type: {0} Requested role: {1}",
                                    parent.Kind,
                                    result.GetType().Name);
                    throw new Exception(sb.ToString(), ex);
                }
            }
            else if (parent.Impl is MgaFolder)
            {
                try
                {
                    MgaFolder folder = parent.Impl as MgaFolder;

                    MgaMetaFolder item = folder.MetaFolder.
                                         LegalChildFolders.
                                         Cast <MgaMetaFolder>().
                                         FirstOrDefault(x => x.MetaRef == metaRef);

                    if (item != null)
                    {
                        // create new folder
                        MgaFolder f = folder.CreateFolder(item);
                        result.Impl = f as IMgaObject;
                        return(result);
                    }
                    else
                    {
                        MgaMetaFCO itemFco = folder.MetaFolder.
                                             LegalRootObjects.
                                             Cast <MgaMetaFCO>().
                                             FirstOrDefault(x => x.MetaRef == metaRef);

                        if (itemFco != null)
                        {
                            IMgaFCO f = folder.CreateRootObject(itemFco);
                            result.Impl = f as IMgaObject;
                            return(result);
                        }
                    }
                }
                catch (Exception ex)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("New element could not be created in folder.");
                    sb.AppendFormat("Container type: {0} Requested child type: {1}",
                                    parent.Kind,
                                    result.GetType().Name);
                    throw new Exception(sb.ToString(), ex);
                }
            }

            return(null);
        }
Example #18
0
        public void migrateProject()
        {
            RootFolder = project.RootFolder;
            RootModel  = null;

            List <MgaFolder> folders = getAllFolders(project.RootFolder);
            List <MgaFolder> C       = new List <MgaFolder>(); //components
            List <MgaFolder> DS      = new List <MgaFolder>(); //design spaces
            List <MgaFolder> CA      = new List <MgaFolder>(); // component assemblies
            List <MgaFolder> TC      = new List <MgaFolder>(); //test components
            List <MgaFolder> T       = new List <MgaFolder>(); //testing
            List <MgaFolder> other   = new List <MgaFolder>();

            foreach (MgaFolder folder in folders)
            {
                if (folder == null)
                {
                    continue;
                }
                if (folder.MetaFolder.DisplayedName == "Components")
                {
                    C.Add(folder);
                }
                else if (folder.MetaFolder.DisplayedName == "Design Spaces")
                {
                    DS.Add(folder);
                }
                else if (folder.MetaFolder.DisplayedName == "Component Assemblies")
                {
                    CA.Add(folder);
                }
                else if (folder.MetaFolder.DisplayedName == "Test Components")
                {
                    TC.Add(folder);
                }
                else if (folder.MetaFolder.DisplayedName == "Testing")
                {
                    T.Add(folder);
                }
                else
                {
                    other.Add(folder);
                }
            }

            foreach (MgaFolder folder in C)
            {
                foreach (MgaModel model in folder.ChildObjects.OfType <MgaModel>())
                {
                    createNewFCOs(model);
                }
            }
            foreach (MgaFolder folder in DS)
            {
                foreach (MgaModel model in folder.ChildObjects.OfType <MgaModel>())
                {
                    createNewFCOs(model);
                }
            }
            foreach (MgaFolder folder in CA)
            {
                foreach (MgaModel model in folder.ChildObjects.OfType <MgaModel>())
                {
                    createNewFCOs(model);
                }
            }
            foreach (MgaFolder folder in TC)
            {
                foreach (MgaModel model in folder.ChildObjects.OfType <MgaModel>())
                {
                    createNewFCOs(model);
                }
            }
            foreach (MgaFolder folder in T)
            {
                foreach (MgaModel model in folder.ChildObjects.OfType <MgaModel>())
                {
                    createNewFCOs(model);
                }
            }
            foreach (MgaFolder folder in other)
            {
                foreach (MgaModel model in folder.ChildObjects.OfType <MgaModel>())
                {
                    createNewFCOs(model);
                }
            }
            directFCOs();
            copyOldLayout();
            deleteOldFCOs();
        }
        private void RemoveEmptyDuplicatedFolders(MgaFolder mgaFolder)
        {
            foreach (MgaFolder childFolder in mgaFolder.ChildFolders)
            {
                if (childFolder.IsLibOrLibObject() == false)
                {
                    this.RemoveEmptyDuplicatedFolders(childFolder);
                }
            }

            var uniqueNames = mgaFolder
                .ChildFolders
                .Cast<MgaFolder>()
                .Where(x => x.IsLibOrLibObject() == false)
                .Select(x => x.Name)
                .Distinct()
                .ToList();

            foreach (var uniqueFolderName in uniqueNames)
            {
                var firstObj = mgaFolder.ChildFolders.Cast<MgaFolder>().Where(x => x.IsLibOrLibObject() == false).Where(x => x.Name == uniqueFolderName).FirstOrDefault();
                var foldersToDelete = mgaFolder.ChildFolders.Cast<MgaFolder>().Where(x => x.IsLibOrLibObject() == false).Where(x => x != firstObj).Where(x => x.Name == uniqueFolderName).Where(x => x.ChildObjects.Count == 0).ToList();

                foldersToDelete.ForEach(x => x.DestroyObject());
            }
        }
 public static bool IsLibOrLibObject(this MgaFolder o)
 {
     return(IsLibOrLibObject(((IMgaObject)o)));
 }
Example #21
0
 private List<MgaFolder> getAllFolders(MgaFolder folder)
 {
     List<MgaFolder> rtn = new List<MgaFolder>();
     rtn.Add(folder);
     foreach (MgaFolder subfolder in folder.ChildFolders)
         rtn.AddRange(getAllFolders(subfolder));
     return rtn;
 }
Example #22
0
        public void migrateModel(MgaModel rootmodel)
        {
            RootFolder = null;
            RootModel = rootmodel;

            createNewFCOs(rootmodel);
            directFCOs();
            copyOldLayout();
            deleteOldFCOs();
        }
        // Your basic recursive folder-gatherer.
        private List<MgaFolder> RecursivelyGetAllFolders(MgaFolder folder)
        {
            List<MgaFolder> rtn = new List<MgaFolder>();

            if (folder.MetaBase.Name == "RootFolder")
            {
                GMEConsole.Info.WriteLine(
                    "Omitted {0} - it is a RootFolder and contains no valid models",
                    folder.Name);
            }
            else
            {
                rtn.Add(folder);
            }

            foreach (MgaFolder subfolder in folder.ChildFolders)
                rtn.AddRange(RecursivelyGetAllFolders(subfolder));

            return rtn;
        }
        private static void GenerateAssemblies(MgaFolder componentAssemblyFolder, MgaModel assembly, int level, MgaModel leaf)
        {
            var elementsOnEachLevel = 2;
            var numberOfLevels = 6;

            if (level <= numberOfLevels)
            {
                System.Console.Out.WriteLine(level);

                MgaFolder componentAssemblyChildFolder = componentAssemblyFolder.CreateFolder(componentAssemblyFolder.Project.RootMeta.RootFolder.DefinedFolderByName["ComponentAssemblies", true]);

                componentAssemblyChildFolder.Name = string.Format("ComponentAssembly Child folder {0}", level);

                for (int i = 0; i < elementsOnEachLevel; i++)
                {
                    var childAssembly = componentAssemblyChildFolder.CreateRootObject(assembly.Meta) as MgaModel;
                    childAssembly.Name = string.Format("ChildAssembly {0} {1}", level, i);

                    var cref = assembly.CreateChildObject((assembly.Meta as GME.MGA.Meta.MgaMetaModel).RoleByName["ComponentRef"]) as MgaReference;
                    cref.Name = string.Format("ComponentRef {0} {1}", level, i);

                    if (level < numberOfLevels)
                    {
                        cref.Referred = childAssembly as MgaFCO;
                        GenerateAssemblies(componentAssemblyFolder, childAssembly, level + 1, leaf);
                    }
                    else
                    {
                        cref.Referred = leaf as MgaFCO;
                    }
                }
            }
        }
Example #25
0
        public static T CreateObject <T>(
            ISIS.GME.Common.Interfaces.Container parent,
            string roleStr = null)
            where T : ISIS.GME.Common.Classes.Base, new()
        {
            Contract.Requires(parent != null);

            T      result = new T();
            string Kind   = typeof(T).Name;

            if (parent.Impl is IMgaModel)
            {
                IMgaModel   model = parent.Impl as IMgaModel;
                MgaMetaRole role  = null;

                if (string.IsNullOrEmpty(roleStr))
                {
                    try
                    {
                        // try to use user defined role
                        role = (model.MetaBase as IMgaMetaModel).RoleByName[Kind];
                    }
                    catch (Exception ex)
                    {
                        StringBuilder sb = new StringBuilder();
                        sb.AppendLine("Role was not found in the container.");
                        sb.AppendLine("Paradigm violation.");
                        sb.AppendFormat("Container type: {0} Requested role: {1}",
                                        parent.Kind,
                                        result.GetType().Name);
                        throw new Exception(sb.ToString(), ex);
                    }
                }
                else
                {
                    try
                    {
                        // try to use user defined role
                        role = (model.MetaBase as IMgaMetaModel).RoleByName[roleStr];
                    }
                    catch (Exception ex)
                    {
                        StringBuilder sb = new StringBuilder();
                        sb.AppendLine("Role was not found in the container.");
                        sb.AppendLine("Paradigm violation.");
                        sb.AppendFormat("Container type: {0} Requested role: {1}",
                                        parent.Kind,
                                        result.GetType().Name);
                        throw new Exception(sb.ToString(), ex);
                    }
                }
                try
                {
                    MgaFCO fco = model.CreateChildObject(role);
                    result.Impl = fco as IMgaObject;
                    return(result);
                }
                catch (Exception ex)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("New element could not be created.");
                    sb.AppendFormat("Container type: {0} Requested role: {1}",
                                    parent.Kind,
                                    result.GetType().Name);
                    throw new Exception(sb.ToString(), ex);
                }
            }
            else if (parent.Impl is MgaFolder)
            {
                if (string.IsNullOrEmpty(roleStr))
                {
                    MgaFolder folder = parent.Impl as MgaFolder;

                    foreach (MgaMetaFolder item in folder.MetaFolder.LegalChildFolders)
                    {
                        if (item.Name == Kind)
                        {
                            MgaFolder f = folder.CreateFolder(item);
                            result.Impl = f as IMgaObject;
                            return(result);
                        }
                    }
                    if (result.Impl == null)
                    {
                        foreach (MgaMetaFCO item in folder.MetaFolder.LegalRootObjects)
                        {
                            if (item.Name == Kind)
                            {
                                IMgaFCO fco = folder.CreateRootObject(item);
                                result.Impl = fco as IMgaObject;
                                return(result);
                            }
                        }
                    }
                }
                else
                {
                    MgaFolder folder = parent.Impl as MgaFolder;

                    foreach (MgaMetaFolder item in folder.MetaFolder.LegalChildFolders)
                    {
                        if (item.Name == roleStr)
                        {
                            MgaFolder f = folder.CreateFolder(item);
                            result.Impl = f as IMgaObject;
                            return(result);
                        }
                    }
                    if (result.Impl == null)
                    {
                        foreach (MgaMetaFCO item in folder.MetaFolder.LegalRootObjects)
                        {
                            if (item.Name == roleStr)
                            {
                                IMgaFCO fco = folder.CreateRootObject(item);
                                result.Impl = fco as IMgaObject;
                                return(result);
                            }
                        }
                    }
                }
            }

            return(null);
        }
Example #26
0
 public MgaMetaFCO GetKindByStrDisp(MgaFolder parent, string kindname, objtype_enum objtype)
 {
     return(delegate_.GetKindByStrDisp(parent, kindname, objtype));
 }
Example #27
0
 private bool willBeMigrated(MgaFolder folder)
 {
     if (folder == RootFolder)
         return true;
     return folder.ParentFolder != null && willBeMigrated(folder.ParentFolder);
 }
Example #28
0
 public MgaMetaFolder GetFolderByStrDisp(MgaFolder parent, string kindname)
 {
     return(delegate_.GetFolderByStrDisp(parent, kindname));
 }
Example #29
0
 public MgaMetaFCO get_KindByStr(MgaFolder parent, string kindname, objtype_enum objtype)
 {
     return(delegate_.KindByStr[parent, kindname, objtype]);
 }
        private void CollapseLibraries(MgaFolder mgaFolder)
        {
            var libraries = mgaFolder
                .ChildFolders
                .Cast<MgaFolder>()
                .Where(x => string.IsNullOrEmpty(x.LibraryName) == false)
                .GroupBy(lib => libInfos.Where(inf => lib.Name.Contains(inf.DisplayName)).FirstOrDefault())
                .ToList();

            foreach (IGrouping<LibraryInfo, MgaFolder> group in libraries.Where(gr => gr.Key != null))
            {
                var orderedLibraries = group.OrderBy(f => f.RelID);
                var library = orderedLibraries.First();
                foreach (var dup in orderedLibraries.Skip(1))
                {
                    ReferenceSwitcher.Switcher sw = new ReferenceSwitcher.Switcher(dup, library, null);
                    sw.UpdateSublibrary();
                    dup.DestroyObject();
                }
            }
        }
        private IEnumerable<CyPhy.ComponentAssembly> GetAllComponentAssemblys(IMgaProject project, bool includeLibraries = false)
        {
            var filter = project.CreateFilter();
            filter.Kind = "ComponentAssembly";

            int componentsId = project.RootMeta.RootFolder.GetDefinedFolderByNameDisp("Components", true).MetaRef;
            int componentAssembliesId = project.RootMeta.RootFolder.GetDefinedFolderByNameDisp("ComponentAssemblies", true).MetaRef;

            IEnumerable<MgaFolder> rootFolders = new MgaFolder[] { project.RootFolder };
            if (includeLibraries)
            {
                rootFolders = rootFolders.Concat(
                    project.RootFolder.ChildFolders.Cast<MgaFolder>().Where(f => String.IsNullOrEmpty(f.LibraryName) == false));
            }
            foreach (MgaFolder rootFolder in rootFolders)
            {
                foreach (MgaFolder folder in rootFolder.ChildFolders)
                {
                    int metaRef = folder.MetaBase.MetaRef;
                    if (metaRef == componentsId || metaRef == componentAssembliesId)
                    {
                        foreach (IMgaObject fco in folder.GetDescendantFCOs(filter))
                        {
                            yield return CyPhyClasses.ComponentAssembly.Cast(fco);
                        }
                    }
                }
            }
        }
        private void CollapseFolders(MgaFolder mgaFolder)
        {
            Func<IMgaObject, Tuple<string, string>> nameAndKind = x => new Tuple<string, string>(x.Name, x.MetaBase.Name);
            var uniqueNames = mgaFolder
                .ChildFolders
                .Cast<MgaFolder>()
                .Where(x => x.IsLibOrLibObject() == false)
                .Where(x => x.MetaBase.Name != "RootFolder")
                .GroupBy(x => nameAndKind(x))
                .ToList();

            foreach (var group in uniqueNames.Where(x => x.Any()))
            {
                var firstObj = group.First();
                var foldersToMove = group.Skip(1).SelectMany(x => x.ChildFolders.Cast<MgaFolder>()).Where(x => x.IsLibOrLibObject() == false);
                var fcosToMove = group.Skip(1).SelectMany(x => x.ChildFCOs.Cast<MgaFCO>()).Where(x => x.IsLibObject == false);

                //GMEConsole.Info.WriteLine(" -- {0}", firstObj.AbsPath);

                foreach (var item in foldersToMove)
                {
                    if (item.IsLibOrLibObject())
                    {
                        GMEConsole.Error.WriteLine(" - Lib object! {0}", item.AbsPath);
                        continue;
                    }
                    var moved = firstObj.MoveFolderDisp(item);
                    //GMEConsole.Info.WriteLine(" ----- {0} -> {1}", item.AbsPath, moved.AbsPath);
                }

                foreach (var item in fcosToMove)
                {
                    if (item.IsLibObject)
                    {
                        GMEConsole.Error.WriteLine(" - Lib object! {0}", item.AbsPath);
                        continue;
                    }
                    var moved = firstObj.MoveFCODisp(item);
                    //GMEConsole.Info.WriteLine(" ----- {0} -> {1}", item.AbsPath, moved.AbsPath);
                }

            }

            foreach (MgaFolder childFolder in mgaFolder.ChildFolders)
            {
                if (childFolder.IsLibOrLibObject() == false)
                {
                    this.CollapseFolders(childFolder);
                }
            }
        }
Example #33
0
 public MgaMetaFolder get_FolderByStr(MgaFolder parent, string kindname)
 {
     return(delegate_.FolderByStr[parent, kindname]);
 }
Example #34
0
        public void migrateFolder(MgaFolder rootfolder)
        {
            RootFolder = rootfolder;
            RootModel = null;

            List<MgaFolder> folders = getAllFolders(rootfolder);
            foreach (MgaFolder folder in folders)
                foreach (MgaModel model in folder.ChildObjects.OfType<MgaModel>())
                    createNewFCOs(model);
            directFCOs();
            copyOldLayout();
            deleteOldFCOs();
        }
Example #35
0
        private void CreateMaterialObjects(MgaFolder materialFolder,
                                           List<string> materialsList)
        {
            List<string> existingMaterials = new List<string>();
            foreach (MgaFCO item in materialFolder.ChildFCOs)
            {
                existingMaterials.Add(item.StrAttrByName["Name"]);
            }

            foreach (var materialName in materialsList)
            {
                if (!existingMaterials.Contains(materialName))
                {
                    MgaMetaFCO role = (materialFolder.MetaFolder as MgaMetaFolder).get_LegalRootObjectByName("Material");
                    MgaFCO aMaterial = materialFolder.CreateRootObject(role);
                    aMaterial.Name = materialName;
                    aMaterial.StrAttrByName["Name"] = materialName;
                }
            }
        }