/**
     * Generates an MVC mapping and returns it's
     * logical structure as array.
     *
     * @return array
     */
    public static function generateMVCProviders()
    {
        // Append all library/Direct classes to the
        $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/direct.ini', APPLICATION_ENV);

        // Get the modules
        $modules = Extzf_ExtDirect_ProviderGenerator::getModules();

        // Walk modules, build API
        $apis = array();
        foreach ($modules as $moduleName => $controllerNames) {

            // Generate module provider API
            $apis[] = Extzf_ExtDirect_ProviderGenerator::generateModuleProvider($config->direct->namespace, $moduleName, $controllerNames);

            // Dynamically add the provider
            $addProviderStmt = "Ext.Direct.addProvider(". $config->direct->namespace .".". $moduleName .".REMOTING_API);";
            $apis[] = $addProviderStmt;
        }
        return $apis;
    }
require_once BASE_PATH . '/thirdparty/ExtDirect/CacheProvider.php';
require_once BASE_PATH . '/library/Extzf/Controller.php';
require_once BASE_PATH . '/library/Extzf/ExtDirect/ProviderGenerator.php';
require_once BASE_PATH . '/library/Extzf/ExtDirect/API.php';


if(false === file_exists(APPLICATION_PATH . '/data'))
{
    mkdir(APPLICATION_PATH . '/data');
}
// --- Regenerate /application/public/javascripts/Provider.js
$providers = Extzf_ExtDirect_ProviderGenerator::generateMVCProviders();
$rawCode = Extzf_ExtDirect_ProviderGenerator::providersToJson($providers);


// Create the provider directories if not present.
$provider_path = BASE_PATH . '/release/public/javascript/';
if(false === file_exists($provider_path))
{
    mkdir($provider_path, 0755,true);
}

@file_put_contents($provider_path . "Provider.js", $rawCode);

if(file_exists($provider_path. "Provider.js"))
{
    echo "Ext JS direct provider generator:\n";
    echo "Generated new Ext JS direct provider {$provider_path}Provider.js - Controllers: \n";
    echo implode(",\n", array_map(create_function('$a','return implode(", ",$a);'), Extzf_ExtDirect_ProviderGenerator::getModules()));
}