public void execute() {
		this.validateConnectionParams();
		
		// validate input folder names
    	if(this.srcFolder == null){
    		throw new BuildException("Missing srcFolder param");
    	}
     	if(this.destFolder == null){
    		throw new BuildException("Missing destFolder param");
    	}
     	if(this.outFolder == null){
    		throw new BuildException("Missing outFolder param");
    	}
     	
		File srcFile = new File(srcFolder);
		File destFile = new File(destFolder);
		File outFile = new File(outFolder);
		
		if (!srcFile.exists()) {
			throw new BuildException("The srcFolder does not exist");
		}
		
		// clear out folder, prompt if exist
		if (outFile.exists() && outFile.list().length > 0) {
			Console console = System.console();
			String input = console.readLine("The outFolder is not empty, do you want to delete? Answer yes or no:");
			if (input.equalsIgnoreCase("yes")) {
				LeapUtils.deleteFile(outFile);
			} else {
				System.out.println("Can not perform leapmetadiff task, exiting");
				return;
			}
		}
		
		// create out folder
		outFile.mkdirs();
		
		try {
			// traverse srcFolder recursively and copy a file to out folder
			traverseFileRecursively(srcFile, destFile, outFile);
		} catch (IOException e) {
			throw new BuildException("Got an exception while traversing src folder, " + e.getMessage());
		}
		
		System.out.println("Done. Copied "+numCopied+" files.");
	}