Inheritance: BaseTemplateGenerator
コード例 #1
0
        protected override void GenerateInternal(OperationStatus op, BuildType buildType)
        {
            if (OrmPackages.Length == 0)
            {
                return;
            }

            EnsureLibraries();

            IFileInfo   projectInfoPath = FileSystem.GetFileInfo(Path.Combine(FullProjectDirectory, "project.info.xml"));
            ProjectInfo local           = ProjectInfo.Load(projectInfoPath);

            if (local == null || local.InstanceId != Project.InstanceId)
            {
                if (buildType == BuildType.Build)
                {
                    Logging.BuildLog.Info("Full build required");
                }

                buildType = BuildType.BuildAll;
                local     = new ProjectInfo {
                    InstanceId = Project.InstanceId
                };

                if (projectInfoPath.Directory.Exists)
                {
                    foreach (var file in projectInfoPath.Directory.GetFiles())
                    {
                        file.Delete();
                    }
                }
            }

            CopyEntityInterfacesAssembly();

            string path = FullProjectDirectory;

            var generatorList = new List <BaseEntityGenerator>();

            // generate entities
            BaseEntityGenerator baseGen = new SDataClientEntityCodeGenerator();

            baseGen.Initialize(WorkingDirectoryPath);
            generatorList.Add(baseGen);

            // Ensure all paths are created
            foreach (var gen in generatorList)
            {
                string relPath = Path.Combine(path, gen.RelativePath);
                if (!Directory.Exists(relPath))
                {
                    Directory.CreateDirectory(relPath);
                }
            }

            var model = (OrmModel)OrmPackages[0].Model;

            var engine = new Engine {
                DefaultToolsVersion = "3.5"
            };
            bool atLeastOneFileWasGenerated = false;
            var  buildItemFiles             = new List <BuildItemFileInfo>();

            foreach (var entity in OrmEntity.GetAll(model.Project).Where(item => item.Generate && item.GenerateSDataFeed))
            {
                if (!op.CanContinue)
                {
                    return;
                }

                foreach (var generator in generatorList)
                {
                    string fullPath = Path.Combine(Path.Combine(path, generator.RelativePath), generator.FormatFileName(entity.Name));
                    var    fi       = new FileInfo(fullPath);

                    if (BuildHelper.IsEntityNewer(buildType, fi.LastWriteTimeUtc, entity))
                    {
                        using (var writer = new StreamWriter(fullPath))
                        {
                            generator.Generate(entity, writer);
                        }
                        atLeastOneFileWasGenerated = true;
                    }

                    buildItemFiles.Add(new BuildItemFileInfo(generator, fullPath));
                }
            }

            if (atLeastOneFileWasGenerated)
            {
                BuildProject(buildItemFiles, engine);
            }

            if (op.CanContinue)
            {
                local.Save(projectInfoPath);
            }
        }
コード例 #2
0
        protected override void GenerateInternal(OperationStatus op, BuildType buildType)
        {
            if (OrmPackages.Length == 0) return;

            EnsureLibraries();

            IFileInfo projectInfoPath = FileSystem.GetFileInfo(Path.Combine(FullProjectDirectory, "project.info.xml"));
            ProjectInfo local = ProjectInfo.Load(projectInfoPath);
            if (local == null || local.InstanceId != Project.InstanceId)
            {
                if (buildType == BuildType.Build)
                    Logging.BuildLog.Info("Full build required");

                buildType = BuildType.BuildAll;
                local = new ProjectInfo { InstanceId = Project.InstanceId };

                if (projectInfoPath.Directory.Exists)
                {
                    foreach (var file in projectInfoPath.Directory.GetFiles())
                    {
                        file.Delete();
                    }
                }
            }

            CopyEntityInterfacesAssembly();

            string path = FullProjectDirectory;

            var generatorList = new List<BaseEntityGenerator>();

            // generate entities
            BaseEntityGenerator baseGen = new SDataClientEntityCodeGenerator();
            baseGen.Initialize(WorkingDirectoryPath);
            generatorList.Add(baseGen);

            // Ensure all paths are created
            foreach (var gen in generatorList)
            {
                string relPath = Path.Combine(path, gen.RelativePath);
                if (!Directory.Exists(relPath))
                    Directory.CreateDirectory(relPath);
            }

            var model = (OrmModel)OrmPackages[0].Model;

            var engine = new Engine { DefaultToolsVersion = "3.5" };
            bool atLeastOneFileWasGenerated = false;
            var buildItemFiles = new List<BuildItemFileInfo>();

            foreach (var entity in OrmEntity.GetAll(model.Project).Where(item => item.Generate && item.GenerateSDataFeed))
            {
                if (!op.CanContinue)
                    return;

                foreach (var generator in generatorList)
                {
                    string fullPath = Path.Combine(Path.Combine(path, generator.RelativePath), generator.FormatFileName(entity.Name));
                    var fi = new FileInfo(fullPath);

                    if (BuildHelper.IsEntityNewer(buildType, fi.LastWriteTimeUtc, entity))
                    {
                        using (var writer = new StreamWriter(fullPath))
                        {
                            generator.Generate(entity, writer);
                        }
                        atLeastOneFileWasGenerated = true;
                    }

                    buildItemFiles.Add(new BuildItemFileInfo(generator, fullPath));
                }
            }

            if (atLeastOneFileWasGenerated)
            {
                BuildProject(buildItemFiles, engine);
            }

            if (op.CanContinue)
            {
                local.Save(projectInfoPath);
            }
        }