public function generate_script_object_runners()
 {
     HaddockProjectOrganisation_AutoloadFilesHelper::refresh_autoload_file();
     /*
      * Get rid of the old files.
      */
     $this->delete_files();
     /*
      * Get all files for the non-abstract subclasses of 'CLIScripts_CLIScript'.
      */
     $cli_script_class_files = CLIScripts_CLIScriptFilesHelper::get_cli_script_class_files();
     #print_r($cli_script_class_files); exit;
     array_walk($cli_script_class_files, create_function('$cli_script_class_file', '$cli_script_class_file->generate_script_object_runner();'));
 }
    public static function create_haddock_class_name_validator($new_haddock_class_name_validator_name, HaddockProjectOrganisation_ModuleDirectory $module_directory)
    {
        $classes_directory = $module_directory->get_classes_directory();
        $input_validators_directory_name = $classes_directory->get_name() . DIRECTORY_SEPARATOR . 'input-validation';
        #echo '$input_validators_directory_name: ' . $input_validators_directory_name . PHP_EOL;
        FileSystem_DirectoryHelper::mkdir_parents($input_validators_directory_name);
        $input_validator_class_name = $module_directory->get_camel_case_root() . '_' . $new_haddock_class_name_validator_name . 'ClassNameValidator';
        #echo '$input_validator_class_name: ' . $input_validator_class_name . PHP_EOL;
        $input_validator_file_name = $input_validators_directory_name . DIRECTORY_SEPARATOR . $input_validator_class_name . '.inc.php';
        #echo '$input_validator_file_name: ' . $input_validator_file_name . PHP_EOL;
        if (is_file($input_validator_file_name)) {
            throw new ErrorHandling_SprintfException('\'%s\' already exists!', array($input_validator_file_name));
        } else {
            $date = date('Y-m-d');
            $copyright_holder = $module_directory->get_copyright_holder();
            $file_contents = <<<CNT
<?php
/**
 * {$input_validator_class_name}
 *
 * @copyright {$date}, {$copyright_holder}
 */

class
\t{$input_validator_class_name}
extends
\tHaddockProjectOrganisation_HaddockClassNameValidator
{
\tprotected function
\t\tget_class_name_stem()
\t{
\t\treturn '{$new_haddock_class_name_validator_name}';
\t}
}
?>
CNT;
            if ($fh = fopen($input_validator_file_name, 'w')) {
                fwrite($fh, $file_contents);
                fclose($fh);
                HaddockProjectOrganisation_AutoloadFilesHelper::refresh_autoload_file();
            }
        }
    }
    public static function create_directory_class($new_directory_class_name, HaddockProjectOrganisation_ModuleDirectory $module_directory)
    {
        $classes_directory = $module_directory->get_classes_directory();
        $directory_classes_directory_name = $classes_directory->get_name() . DIRECTORY_SEPARATOR . 'file-system' . DIRECTORY_SEPARATOR . 'directories';
        echo '$directory_classes_directory_name: ' . $directory_classes_directory_name . PHP_EOL;
        FileSystem_DirectoryHelper::mkdir_parents($directory_classes_directory_name);
        $directory_class_name = $module_directory->get_camel_case_root() . '_' . $new_directory_class_name . 'Directory';
        echo '$directory_class_name: ' . $directory_class_name . PHP_EOL;
        $directory_class_file_name = $directory_classes_directory_name . DIRECTORY_SEPARATOR . $directory_class_name . '.inc.php';
        echo '$directory_class_file_name: ' . $directory_class_file_name . PHP_EOL;
        if (is_file($directory_class_file_name)) {
            throw new ErrorHandling_SprintfException('\'%s\' already exists!', array($directory_class_file_name));
        } else {
            $date = date('Y-m-d');
            $copyright_holder = $module_directory->get_copyright_holder();
            $file_contents = <<<CNT
<?php
/**
 * {$directory_class_name}
 *
 * @copyright {$date}, {$copyright_holder}
 */

class
\t{$directory_class_name}
extends
\tFileSystem_Directory
{
\t/*
\t * Write code here.
\t */
}
?>
CNT;
            if ($fh = fopen($directory_class_file_name, 'w')) {
                fwrite($fh, $file_contents);
                fclose($fh);
                HaddockProjectOrganisation_AutoloadFilesHelper::refresh_autoload_file();
            }
        }
    }
    public static function create_project_specific_html_page_class()
    {
        $project_specific_directory = HaddockProjectOrganisation_ProjectSpecificDirectoryHelper::get_project_specific_directory();
        $project_specific_directory->make_sure_classes_directory_exists();
        $classes_directory = $project_specific_directory->get_classes_directory();
        $html_pages_directory_name = $classes_directory->get_name() . DIRECTORY_SEPARATOR . 'pages' . DIRECTORY_SEPARATOR . 'html';
        #echo '$html_pages_directory_name: ' . $html_pages_directory_name . PHP_EOL;
        FileSystem_DirectoryHelper::mkdir_parents($html_pages_directory_name);
        $project_specific_html_page_class_name = $project_specific_directory->get_camel_case_root() . '_' . 'HTMLPage';
        #echo '$project_specific_html_page_class_name: ' . $project_specific_html_page_class_name . PHP_EOL;
        $project_specific_html_page_class_file_name = $html_pages_directory_name . DIRECTORY_SEPARATOR . $project_specific_html_page_class_name . '.inc.php';
        #echo '$project_specific_html_page_class_file_name: ' . $project_specific_html_page_class_file_name . PHP_EOL;
        if (is_file($project_specific_html_page_class_file_name)) {
            throw new ErrorHandling_SprintfException('\'%s\' already exists!', array($project_specific_html_page_class_file_name));
        } else {
            $date = date('Y-m-d');
            $copyright_holder = $project_specific_directory->get_copyright_holder();
            $file_contents = <<<CNT
<?php
/**
 * {$project_specific_html_page_class_name}
 *
 * @copyright {$date}, {$copyright_holder}
 */

abstract class
\t{$project_specific_html_page_class_name}
extends
\tPublicHTML_HTMLPage
{
}
?>
CNT;
            if ($fh = fopen($project_specific_html_page_class_file_name, 'w')) {
                fwrite($fh, $file_contents);
                fclose($fh);
                HaddockProjectOrganisation_AutoloadFilesHelper::refresh_autoload_file();
            }
        }
    }
 public function do_actions()
 {
     HaddockProjectOrganisation_AutoloadFilesHelper::refresh_autoload_file();
 }
    public static function create_html_pages()
    {
        /* 
         * Find the project specific directory for the classes.
         */
        $project_specific_directory = HaddockProjectOrganisation_ProjectSpecificDirectoryHelper::get_project_specific_directory();
        $project_specific_directory->make_sure_classes_directory_exists();
        $classes_directory = $project_specific_directory->get_classes_directory();
        $html_pages_directory_name = $classes_directory->get_name() . DIRECTORY_SEPARATOR . 'pages' . DIRECTORY_SEPARATOR . 'html';
        FileSystem_DirectoryHelper::mkdir_parents($html_pages_directory_name);
        $project_specific_html_page_class_name = $project_specific_directory->get_camel_case_root() . '_' . 'HTMLPage';
        /* 
         * Create the abstract class for the user login pages.
         */
        $project_specific_user_login_html_page_class_name = $project_specific_directory->get_camel_case_root() . '_' . 'UserLoginHtmlPage';
        $project_specific_user_login_html_page_class_file_name = $html_pages_directory_name . DIRECTORY_SEPARATOR . $project_specific_user_login_html_page_class_name . '.inc.php';
        if (is_file($project_specific_user_login_html_page_class_file_name)) {
            echo "'{$project_specific_user_login_html_page_class_file_name}' already exists!" . PHP_EOL;
        } else {
            $date = date('Y-m-d');
            $copyright_holder = $project_specific_directory->get_copyright_holder();
            $file_contents = <<<CNT
<?php
/**
 * {$project_specific_user_login_html_page_class_name}
 *
 * @copyright {$date}, {$copyright_holder}
 */

abstract class
\t{$project_specific_user_login_html_page_class_name}
extends
\t{$project_specific_html_page_class_name}
{
    public function
        get_error_message_div()
    {
        return UserLogin_DisplayHelper::get_error_message_div();
    }

    public function
        get_login_status_div()
    {
        return UserLogin_DisplayHelper::get_login_status_div();
    }
}
?>
CNT;
            if ($fh = fopen($project_specific_user_login_html_page_class_file_name, 'w')) {
                fwrite($fh, $file_contents);
                fclose($fh);
                HaddockProjectOrganisation_AutoloadFilesHelper::refresh_autoload_file();
            }
        }
        /* 
         * Create the registration page.
         */
        $project_specific_registration_html_page_class_name = $project_specific_directory->get_camel_case_root() . '_' . 'UserLoginRegistrationHtmlPage';
        $project_specific_registration_html_page_class_file_name = $html_pages_directory_name . DIRECTORY_SEPARATOR . $project_specific_registration_html_page_class_name . '.inc.php';
        if (is_file($project_specific_registration_html_page_class_file_name)) {
            echo "'{$project_specific_registration_html_page_class_file_name}' already exists!" . PHP_EOL;
        } else {
            $date = date('Y-m-d');
            $copyright_holder = $project_specific_directory->get_copyright_holder();
            $file_contents = <<<CNT
<?php
/**
 * {$project_specific_registration_html_page_class_name}
 *
 * @copyright {$date}, {$copyright_holder}
 */

class
\t{$project_specific_registration_html_page_class_name}
extends
\t{$project_specific_user_login_html_page_class_name}
{
    public function
        content()
    {
        \$div = new HTMLTags_Div();
        \$div->append(\$this->get_error_message_div());
        \$div->append(\$this->get_registration_div());
        echo \$div->get_as_string();
    }

    public function
        get_registration_div()
    {
        return UserLogin_DisplayHelper::get_registration_div();
    }
}
?>
CNT;
            if ($fh = fopen($project_specific_registration_html_page_class_file_name, 'w')) {
                fwrite($fh, $file_contents);
                fclose($fh);
                HaddockProjectOrganisation_AutoloadFilesHelper::refresh_autoload_file();
            }
        }
    }
    public static function create_unit_tests_class($new_unit_tests_class_name, HaddockProjectOrganisation_ModuleDirectory $module_directory)
    {
        $classes_directory = $module_directory->get_classes_directory();
        $unit_tests_directory_name = $classes_directory->get_name() . DIRECTORY_SEPARATOR . 'unit-tests';
        #echo '$unit_tests_directory_name: ' . $unit_tests_directory_name . PHP_EOL;
        FileSystem_DirectoryHelper::mkdir_parents($unit_tests_directory_name);
        $unit_tests_class_name = $module_directory->get_camel_case_root() . '_' . $new_unit_tests_class_name . 'Tests';
        #echo '$unit_tests_class_name: ' . $unit_tests_class_name . PHP_EOL;
        $unit_tests_class_file_name = $unit_tests_directory_name . DIRECTORY_SEPARATOR . $unit_tests_class_name . '.inc.php';
        #echo '$unit_tests_class_file_name: ' . $unit_tests_class_file_name . PHP_EOL;
        if (is_file($unit_tests_class_file_name)) {
            throw new ErrorHandling_SprintfException('\'%s\' already exists!', array($unit_tests_class_file_name));
        } else {
            $date = date('Y-m-d');
            $copyright_holder = $module_directory->get_copyright_holder();
            $file_contents = <<<CNT
<?php
/**
 * {$unit_tests_class_name}
 *
 * @copyright {$date}, {$copyright_holder}
 */

class
\t{$unit_tests_class_name}
extends
\tUnitTests_UnitTests
{
\tpublic static function
\t\tset_up()
\t{
\t\t/*
\t\t * Prepare the environment for each test in this class.
\t\t */
\t}
\t
\tpublic static function
\t\ttear_down()
\t{
\t\t/*
\t\t * Return the environment to a pristine state after
\t\t * each test in this class.
\t\t */
\t}
\t
\t/*
\t * ----------------------------------------
\t * The tests.
\t * ----------------------------------------
\t */
\t
\t/*
\t * Write public static test functions here.
\t */
}
?>
CNT;
            if ($fh = fopen($unit_tests_class_file_name, 'w')) {
                fwrite($fh, $file_contents);
                fclose($fh);
                HaddockProjectOrganisation_AutoloadFilesHelper::refresh_autoload_file();
            }
        }
    }