Identifies a custom class defined in Glue which is populated during code gen from columns in CSVs.
        public void HandleUseThisClassClick(CustomClassSave classToUse)
        {
            ReferencedFileSave currentReferencedFile = EditorLogic.CurrentReferencedFile;

            if (EditorLogic.CurrentReferencedFile != null)
            {
                if (classToUse != null)
                {
                    CustomClassController.Self.SetCsvRfsToUseCustomClass(currentReferencedFile, classToUse);
                }

            }
        }
Example #2
0
        public ValidationResponse AddNewCustomClass(string className, out CustomClassSave customClassSave)
        {
            ValidationResponse validationResponse = new ValidationResponse();
            customClassSave = null;
            string whyIsntValid;
            if (!NameVerifier.IsCustomClassNameValid(className, out whyIsntValid))
            {
                validationResponse.OperationResult = OperationResult.Failure;
                validationResponse.Message = whyIsntValid;
            }
            else if (ProjectManager.GlueProjectSave.GetCustomClass(className) != null)
            {
                validationResponse.OperationResult = OperationResult.Failure;
                validationResponse.Message = $"The custom class {className} already exists";
            }
            else
            {
                validationResponse.OperationResult = OperationResult.Success;
                customClassSave = new CustomClassSave();
                customClassSave.Name = className;
                ProjectManager.GlueProjectSave.CustomClasses.Add(customClassSave);

                GlueCommands.Self.GluxCommands.SaveGlux();
                GlueCommands.Self.GenerateCodeCommands.GenerateCustomClassesCode();

            }

            return validationResponse;
        }
        private void NewClassButton_Click(object sender, EventArgs e)
        {
            TextInputWindow tiw = new TextInputWindow();
            tiw.DisplayText = "Enter new class name";

            DialogResult result = tiw.ShowDialog(this);

            if (result == DialogResult.OK)
            {
                string newClassName = tiw.Result;

                string whyIsntValid;

                if (!NameVerifier.IsScreenNameValid(tiw.Result, null, out whyIsntValid))
                {
                    MessageBox.Show(whyIsntValid);
                }
                else
                {
                    if (ProjectManager.GlueProjectSave.GetCustomClass(newClassName) == null)
                    {
                        CustomClassSave ccs = new CustomClassSave();
                        ccs.Name = newClassName;
                        ProjectManager.GlueProjectSave.CustomClasses.Add(ccs);

                        UpdateTreeView();
                    }
                }
            }
        }
Example #4
0
        public static string GetTypeForCsvFile(this ReferencedFileSave referencedFileSave, string alternativeFileName = null)//string fileName)
        {
            if (referencedFileSave == null)
            {
                throw new ArgumentNullException("ReferencedFileSave is null - it can't be.");
            }

            string fileName = referencedFileSave.Name;

            if (!string.IsNullOrEmpty(alternativeFileName))
            {
                fileName = alternativeFileName;
            }

            if (!string.IsNullOrEmpty(referencedFileSave.UniformRowType))
            {
                return(referencedFileSave.UniformRowType);
            }
            else
            {
                string className = null;

                // Make sure that the fileName is relative:
                // Wait!  There's no reason to do this.  The
                // RFS's Name property will always be relative
                // to the content project.  This is a must to make
                // projects portable so we don't have to do any processing
                // on the file name.
                //if (!FileManager.IsRelative(fileName))
                //{
                //    if (ProjectManager.ContentProject.Directory != null &&
                //        !FileManager.IsRelativeTo(ProjectManager.ContentProject.Directory, FileManager.RelativeDirectory))
                //    {
                //        fileName = FileManager.MakeRelative(fileName, ProjectManager.ContentProject.Directory);
                //    }
                //    else
                //    {
                //        fileName = FileManager.MakeRelative(fileName);
                //    }
                //}

                // Is this file using a custom class?
                CustomClassSave ccs = ObjectFinder.Self.GlueProject.GetCustomClassReferencingFile(fileName);
                if (ccs == null)
                {
                    className = FileManager.RemovePath(FileManager.RemoveExtension(fileName));
                    if (className.EndsWith("File"))
                    {
                        className = className.Substring(0, className.Length - "File".Length);
                    }

                    className = EditorObjects.IoC.Container.Get <IVsProjectState>().DefaultNamespace + ".DataTypes." + className;
                }
                else
                {
                    if (!string.IsNullOrEmpty(ccs.CustomNamespace))
                    {
                        className = ccs.CustomNamespace + "." + ccs.Name;
                    }
                    else
                    {
                        className = EditorObjects.IoC.Container.Get <IVsProjectState>().DefaultNamespace + ".DataTypes." + ccs.Name;
                    }
                }
                return(className);
            }
        }
Example #5
0
        private static void GenerateCustomClass(CustomClassSave customClass)
        {
            if (customClass.GenerateCode)
            {
                string fileName = "";


                ICodeBlock codeBlock = new CodeDocument();
                List<TypedMemberBase> members;
                Dictionary<string, string> untypedMembers;

                ReferencedFileSave rfs = null;
                if (customClass.CsvFilesUsingThis.Count != 0)
                {
                    rfs = ObjectFinder.Self.GetReferencedFileSaveFromFile(customClass.CsvFilesUsingThis[0]);
                }

                if (rfs != null)
                {
                    // let's just use the existing code flow, even though it's less efficient:
                    GenerateAndSaveDataClass(rfs, rfs.CsvDelimiter);
                }
                else
                {


                    fileName = GetClassInfo(fileName, null, customClass, out members, out untypedMembers);



                    bool succeeded = GenerateClassFromMembers(rfs, true, customClass.Name, members, untypedMembers);
                }
            }
            //return fileName;
        }
Example #6
0
        private static void GetClassInfoFromCsv(List<RuntimeCsvRepresentation> rcrsForClass, CustomClassSave customClass,
            out List<TypedMemberBase> members, out Dictionary<string, string> untypedMembers)
        {
            members = new List<TypedMemberBase>();
            untypedMembers = new Dictionary<string, string>();

            //List<RuntimeCsvRepresentation> rcrsForClass = new List<RuntimeCsvRepresentation>();

            List<string> membersAlreadyAdded = new List<string>();
            //rcrsForClass.Add(rcr);

            foreach (RuntimeCsvRepresentation rcr in rcrsForClass)
            {
                GetMembersForRcr(members, untypedMembers, membersAlreadyAdded, rcr);
            }


            if (customClass != null)
            {
                foreach (var item in customClass.RequiredProperties)
                {
                    string memberName = item.Member;
                    string type = item.Type;

                    TryAddMember(members, untypedMembers, membersAlreadyAdded, memberName, null, type);
                }

            }
        }
Example #7
0
        private static string GetClassInfo(string fileName, RuntimeCsvRepresentation rcr, CustomClassSave customClass, out List<TypedMemberBase> members, out Dictionary<string, string> untypedMembers)
        {
            bool usesCustomClass = customClass != null;
            List<RuntimeCsvRepresentation> rcrsForClass = new List<RuntimeCsvRepresentation>();

            if (usesCustomClass)
            {
                foreach (string name in customClass.CsvFilesUsingThis)
                {
                    ReferencedFileSave foundRfs = ObjectFinder.Self.GetReferencedFileSaveFromFile(name);

                    if (foundRfs == null)
                    {
                        int m = 3;
                    }
                    else
                    {
                        fileName = foundRfs.Name;
                        fileName = ProjectManager.MakeAbsolute(fileName);

                        RuntimeCsvRepresentation runtimeToAdd = null;
                        try
                        {
                            runtimeToAdd = CsvFileManager.CsvDeserializeToRuntime(fileName);
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show("Error trying to parse CSV:\n" + e.ToString());
                        }

                        if (runtimeToAdd != null)
                        {
                            rcrsForClass.Add(runtimeToAdd);
                        }
                    }
                }
            }
            else if(rcr != null)
            {
                rcrsForClass.Add(rcr);
            }




            GetClassInfoFromCsv(rcrsForClass, customClass, out members, out untypedMembers);
            return fileName;
        }