Copy a directory to generated output

Posts   
 
    
worldspawn avatar
worldspawn
User
Posts: 321
Joined: 26-Aug-2006
# Posted on: 25-Sep-2006 03:12:01   

Hi folks,

Heres the source for the task performer I wrote that copies a directory to the project output.


using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
using SD.LLBLGen.Pro.ApplicationCore;
using SD.LLBLGen.Pro.GeneratorCore;

namespace OAMPS.TaskPerformers
{
    public class DirectoryCopier : TaskPerformerBase
    {
        bool result = false;

        public override void Perform(SD.LLBLGen.Pro.ApplicationCore.IGenerator executingGenerator, SD.LLBLGen.Pro.ApplicationCore.ITask taskDefinition, Dictionary<string, SD.LLBLGen.Pro.ApplicationCore.Tasks.TaskParameter> parameters)
        {
            if (parameters == null)
            {
                throw new GeneratorAbortException("No parameters have been specified. Aborting generator.", taskDefinition);
            }
            if (parameters.Count <= 0)
            {
                throw new GeneratorAbortException("No parameters have been specified. Aborting generator.", taskDefinition);
            }
            if (!parameters.ContainsKey("folderToCopy"))
            {
                throw new GeneratorAbortException("Mandatory parameter 'folderToCopy' not found. Aborting generator.", taskDefinition);
            }
            if (!parameters.ContainsKey("outputPath"))
            {
                throw new GeneratorAbortException("Mandatory parameter 'outputPath' not found. Aborting generator.", taskDefinition);
            }

            string folderToCopy = parameters["folderToCopy"].Value;
            string outputPath = parameters["outputPath"].Value;
            outputPath = Path.Combine(executingGenerator.ProjectDefinition.DestinationFolder, outputPath);

            bool failWhenExistant = false;

            if (parameters.ContainsKey("failWhenExistent"))
                failWhenExistant = parameters["failWhenExistent"].Value.ToLower(CultureInfo.InvariantCulture) == "true";

            if (Directory.Exists(outputPath) && failWhenExistant)
                throw new GeneratorAbortException("Folder '" + outputPath + "' already exists and 'failWhenExistent' is set true. Aborting generator.", taskDefinition);

            CopyDirectory(folderToCopy, outputPath);

            result = true;
        }

        public static void CopyDirectory(String src, String dest)
        {
            DirectoryInfo di = new DirectoryInfo(src);

            foreach (FileSystemInfo fsi in di.GetFileSystemInfos())
            {
                String destName = Path.Combine(dest, fsi.Name);
                if (fsi is FileInfo)
                    File.Copy(fsi.FullName, destName, true);
                else
                {
                    Directory.CreateDirectory(destName);
                    CopyDirectory(fsi.FullName, destName);
                }
            }
        }

        public override void Perform(SD.LLBLGen.Pro.ApplicationCore.IGenerator executingGenerator, SD.LLBLGen.Pro.ApplicationCore.ITask taskDefinition)
        {
            throw new GeneratorAbortException("No parameters have been specified. Aborting generator.", taskDefinition);
        }

        public override bool PerformResult
        {
            get { return result; }
        }
    }
}

Note to build u'll need a reference to SD.LLBLGen.Pro.ApplicationCore and SD.LLBLGen.Pro.GeneratorCore.

Put this in your tasks file:


<taskGroup name="Copy Project Template">
    <task name="Copy Project Template Folder Tree" assemblyFilename="OAMPS.TaskPerformers.dll" taskPerformerClass="OAMPS.TaskPerformers.DirectoryCopier">
      <parameters>
        <parameter name="folderToCopy" isOptional="false" description="The folder to copy." />
        <parameter name="outputPath" defaultValue="WebUI" isOptional="false" description="The path to copy the folder to." />
        <parameter name="failWhenExistent" defaultValue="false" isOptional="true" description="Flag to signal what to do when the folder already exists. Overrules clearWhenExistent" valueType="boolean"/>
      </parameters>
    </task>
  </taskGroup>

Otis avatar
Otis
LLBLGen Pro Team
Posts: 39927
Joined: 17-Aug-2003
# Posted on: 25-Sep-2006 09:43:45   

Thanks Sam, I received it via email as well. I'll put it up in the 3rd party section this morning simple_smile

Frans Bouma | Lead developer LLBLGen Pro