'use strict'; var console = require('./console'), File = java.io.File, FileWriter = java.io.FileWriter, PrintWriter = java.io.PrintWriter; /* plugin management */ var _plugins = {}; var _plugin = function(/* String */ moduleName, /* Object */ moduleObject, isPersistent ) { // // don't load plugin more than once // if ( typeof _plugins[moduleName] != 'undefined' ) { return _plugins[moduleName].module; } var pluginData = { persistent: isPersistent, module: moduleObject }; if ( typeof moduleObject.store == 'undefined' ) { moduleObject.store = {}; } _plugins[moduleName] = pluginData; if ( isPersistent ) { moduleObject.store = persist( moduleName, moduleObject.store ); } return moduleObject; }; exports.plugin = _plugin; var scriptCraftDir = null; var pluginDir = null; var dataDir = null; exports.autoload = function( dir, logger ) { scriptCraftDir = dir; pluginDir = new File( dir, 'plugins' ); dataDir = new File( dir, 'data' ); var _canonize = function( file ) { return '' + file.canonicalPath.replaceAll('\\\\','/'); }; /* recursively walk the given directory and return a list of all .js files */ var _listSourceFiles = function( store, dir ) { var files = dir.listFiles(), file; if ( !files ) { return; } for ( var i = 0; i < files.length; i++ ) { file = files[i]; if ( file.isDirectory( ) ) { _listSourceFiles( store, file ); }else{ if ( file.canonicalPath.endsWith( '.js' ) ) { store.push( file ); } } } }; /* Reload all of the .js files in the given directory */ (function( pluginDir ) { var sourceFiles = [], property, module, pluginPath; _listSourceFiles( sourceFiles, pluginDir ); var len = sourceFiles.length; if ( config.verbose ) { console.info( len + ' scriptcraft plugins found.' ); } for ( var i = 0; i < len; i++ ) { pluginPath = _canonize( sourceFiles[i] ); module = {}; try { module = require( pluginPath ); for ( property in module ) { /* all exports in plugins become global */ global[property] = module[property]; } } catch ( e ) { logger.severe( 'Plugin ' + pluginPath + ' ' + e ); } } }(pluginDir)); };