public override ProjectTemplateResult CreateProjects(ProjectTemplateOptions options)
        {
            var result = new ProjectTemplateResult(options);

            StandardHeader.SetHeaders();
            if (solutionDescriptor != null)
            {
                if (!solutionDescriptor.AddContents(options.SolutionFolder, result, languagename))
                {
                    return(null);
                }
            }
            if (projectDescriptor != null)
            {
                bool success = projectDescriptor.CreateProject(result, languagename, options.SolutionFolder);
                if (!success)
                {
                    return(null);
                }
            }
            return(result);
        }
Example #2
0
        public override FileTemplateResult Create(FileTemplateOptions options)
        {
            FileTemplateResult result = new FileTemplateResult(options);

            StandardHeader.SetHeaders();
            StringParserPropertyContainer.FileCreation["StandardNamespace"]        = options.Namespace;
            StringParserPropertyContainer.FileCreation["FullName"]                 = options.FileName;
            StringParserPropertyContainer.FileCreation["FileName"]                 = Path.GetFileName(options.FileName);
            StringParserPropertyContainer.FileCreation["FileNameWithoutExtension"] = Path.GetFileNameWithoutExtension(options.FileName);
            StringParserPropertyContainer.FileCreation["Extension"]                = Path.GetExtension(options.FileName);
            StringParserPropertyContainer.FileCreation["Path"] = Path.GetDirectoryName(options.FileName);

            StringParserPropertyContainer.FileCreation["ClassName"] = options.ClassName;

            // when adding a file to a project (but not when creating a standalone file while a project is open):
            var project = options.Project;

            if (project != null && !options.IsUntitled)
            {
                // add required assembly references to the project
                foreach (ReferenceProjectItem reference in RequiredAssemblyReferences)
                {
                    IEnumerable <ProjectItem> refs = project.GetItemsOfType(ItemType.Reference);
                    if (!refs.Any(projItem => string.Equals(projItem.Include, reference.Include, StringComparison.OrdinalIgnoreCase)))
                    {
                        ReferenceProjectItem projItem = (ReferenceProjectItem)reference.CloneFor(project);
                        ProjectService.AddProjectItem(project, projItem);
                        //ProjectBrowserPad.RefreshViewAsync();
                    }
                }
            }

            foreach (FileDescriptionTemplate newfile in FileDescriptionTemplates)
            {
                if (!IsFilenameAvailable(StringParser.Parse(newfile.Name)))
                {
                    MessageService.ShowError(string.Format("Filename {0} is in use.\nChoose another one", StringParser.Parse(newfile.Name)));                     // TODO : translate
                    return(null);
                }
            }
            try {
                var          filesToOpen  = new List <FileName>();
                ScriptRunner scriptRunner = new ScriptRunner();
                foreach (FileDescriptionTemplate newFile in FileDescriptionTemplates)
                {
                    FileOperationResult opresult = FileUtility.ObservedSave(
                        () => {
                        OpenedFile resultFile;
                        bool shouldOpen;
                        if (!String.IsNullOrEmpty(newFile.BinaryFileName))
                        {
                            resultFile = SaveFile(newFile, null, newFile.BinaryFileName, options, out shouldOpen);
                        }
                        else
                        {
                            resultFile = SaveFile(newFile, scriptRunner.CompileScript(this, newFile), null, options, out shouldOpen);
                        }
                        if (resultFile != null)
                        {
                            result.NewOpenedFiles.Add(resultFile);
                            result.NewFiles.Add(resultFile.FileName);
                            if (shouldOpen)
                            {
                                filesToOpen.Add(resultFile.FileName);
                            }
                        }
                    }, FileName.Create(StringParser.Parse(newFile.Name))
                        );
                    if (opresult != FileOperationResult.OK)
                    {
                        return(null);
                    }
                }

                // Run creation actions
                if (createActions != null)
                {
                    createActions(result);
                }

                foreach (var filename in filesToOpen.Intersect(result.NewFiles))
                {
                    SD.FileService.OpenFile(filename);
                }
            } finally {
                // Now that the view contents
                foreach (var file in result.NewOpenedFiles)
                {
                    file.CloseIfAllViewsClosed();
                }
                result.NewOpenedFiles.RemoveAll(f => f.RegisteredViewContents.Count == 0);
            }
            // raise FileCreated event for the new files.
            foreach (var fileName in result.NewFiles)
            {
                FileService.FireFileCreated(fileName, false);
            }

            if (project != null)
            {
                project.Save();
            }

            return(result);
        }