private static function get_name_file_name(HaddockProjectOrganisation_ModuleDirectory $module_directory)
 {
     $config_directory_name = $module_directory->get_config_directory_name();
     $haddock_project_organisation_config_directory_name = $config_directory_name . DIRECTORY_SEPARATOR . 'haddock-project-organisation';
     $name_file_name = $haddock_project_organisation_config_directory_name . DIRECTORY_SEPARATOR . 'name.txt';
     return $name_file_name;
 }
    public static function create_regex_validator($new_regex_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_regex_validator_name . 'Validator';
        #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
\tInputValidation_RegexValidator
{
\tprotected function
\t\tget_regex()
\t{
\t\t/*
\t\t * Write the regex here.
\t\t */
\t\treturn '/^\$/';
\t}
\t
\tprotected function
\t\tget_exception_message()
\t{
\t\t/*
\t\t * Write a more informative exception message here.
\t\t */
\t\treturn 'Regex validation error!';
\t}
}
?>
CNT;
            if ($fh = fopen($input_validator_file_name, 'w')) {
                fwrite($fh, $file_contents);
                fclose($fh);
                HaddockProjectOrganisation_AutoloadFilesHelper::refresh_autoload_file();
            }
        }
    }
 private static function get_camel_case_root_file_name(HaddockProjectOrganisation_ModuleDirectory $module_directory)
 {
     $config_directory_name = $module_directory->get_config_directory_name();
     $haddock_project_organisation_config_directory_name = $config_directory_name . DIRECTORY_SEPARATOR . 'haddock-project-organisation';
     #if (!is_dir($haddock_project_organisation_config_directory_name)) {
     #	FileSystem_DirectoryHelper
     #		::mkdir_parents(
     #			$haddock_project_organisation_config_directory_name
     #		);
     #}
     $camel_case_root_file_name = $haddock_project_organisation_config_directory_name . DIRECTORY_SEPARATOR . 'camel-case-root.txt';
     return $camel_case_root_file_name;
 }
    public static function create_cli_script($new_script_name, HaddockProjectOrganisation_ModuleDirectory $module_directory)
    {
        /*
         * TODO Make sure that the module directory has a classes directory first.
         *
         * If there is no classes directory, then such a directory should created.
         */
        $module_directory->make_sure_classes_directory_exists();
        $classes_directory = $module_directory->get_classes_directory();
        $cli_scripts_directory_name = $classes_directory->get_name() . DIRECTORY_SEPARATOR . 'cli-scripts';
        #echo '$cli_scripts_directory_name: ' . $cli_scripts_directory_name . PHP_EOL;
        FileSystem_DirectoryHelper::mkdir_parents($cli_scripts_directory_name);
        $script_class_name = $module_directory->get_camel_case_root() . '_' . $new_script_name . 'CLIScript';
        #echo '$script_class_name: ' . $script_class_name . PHP_EOL;
        $cli_script_file_name = $cli_scripts_directory_name . DIRECTORY_SEPARATOR . $script_class_name . '.inc.php';
        #echo '$cli_script_file_name: ' . $cli_script_file_name . PHP_EOL;
        if (is_file($cli_script_file_name)) {
            throw new ErrorHandling_SprintfException('\'%s\' already exists!', array($cli_script_file_name));
        } else {
            $date = date('Y-m-d');
            $copyright_holder = $module_directory->get_copyright_holder();
            $file_contents = <<<CNT
<?php
/**
 * {$script_class_name}
 *
 * @copyright {$date}, {$copyright_holder}
 */

class
\t{$script_class_name}
extends
\tCLIScripts_CLIScript
{
\tpublic function
\t\tdo_actions()
\t{
\t\t/*
\t\t * Write code here.
\t\t */
\t}
}
?>
CNT;
            if ($fh = fopen($cli_script_file_name, 'w')) {
                fwrite($fh, $file_contents);
                fclose($fh);
                CLIScripts_ScriptObjectRunnersHelper::generate_script_object_runners();
            }
        }
    }
    public function create_file_for_table(Database_Table $table, HaddockProjectOrganisation_ModuleDirectory $module_directory)
    {
        if (!$module_directory->has_table_specification_directory()) {
            $module_directory->create_table_specification_directory();
        }
        $table_specification_directory = $module_directory->get_table_specification_directory();
        if ($table_specification_directory->has_file_for_table($table)) {
            $table_name = $table->get_name();
            $table_specification_directory_name = $table_specification_directory->get_name();
            $msg = <<<SQL
There is already a table specification file for {$table_name}
in {$table_specification_directory_name}!
Unable to create another!
SQL;
            throw new Exception($msg);
        }
        $table_specification_directory->create_file_for_table($table);
        $table_specification_file = $table_specification_directory->get_file_for_table($table);
        $table_specification_file->save_table_structure($table);
    }
    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 function __construct($name, HaddockProjectOrganisation_PlugInModulesDirectory $plug_in_modules_directory)
 {
     parent::__construct($name, $plug_in_modules_directory->get_project_directory());
     $this->plug_in_modules_directory = $plug_in_modules_directory;
 }
 public function __construct($name, HaddockProjectOrganisation_CoreModulesDirectory $core_modules_directory)
 {
     parent::__construct($name, $core_modules_directory->get_project_directory());
     $this->core_modules_directory = $core_modules_directory;
 }
 public function add_module_directory(HaddockProjectOrganisation_ModuleDirectory $module_directory)
 {
     $this->required_modules[] = $module_directory->get_identifying_name();
 }
    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();
            }
        }
    }
 public static function get_delta_files_directory_name(HaddockProjectOrganisation_ModuleDirectory $module_directory)
 {
     $delta_files_directory_name = $module_directory->get_name() . DIRECTORY_SEPARATOR . 'database' . DIRECTORY_SEPARATOR . 'deltas';
     #echo '$delta_files_directory_name: ' . $delta_files_directory_name . PHP_EOL;
     return $delta_files_directory_name;
 }