1 jls.loader.provide('jls.lang.System');
  2 
  3 jls.loader.requireLibrary('jls_io');
  4 jls.loader.require('jls.lang.Runtime');
  5 jls.loader.require('jls.io.PrintStream');
  6 jls.loader.require('jls.io.FileInputStream');
  7 
  8 /**
  9  * @class The System class provides access to data and operations of the underlying OS.
 10  * Access to system properties, environnement variables and default standard IO streams.
 11  * Operation such as the exit method, the garbage collection and the ability to load native library.
 12  */
 13 jls.lang.System = jls.lang.Class.create({});
 14 
 15 Object.extend(jls.lang.System, /** @lends jls.lang.System */
 16 {
 17     _systemProperties : null,
 18     _commandLineArguments : null,
 19     _mainClassname : null,
 20     /**
 21      * Initialize the system class.
 22      * @private
 23      */
 24     _initialize : function() {
 25         jls.lang.System.err = new jls.io.PrintStream(new jls.io.FileOutputStream(_native.io.stderr));
 26         jls.lang.System.in = new jls.io.FileInputStream(_native.io.stdin);
 27         jls.lang.System.out = new jls.io.PrintStream(new jls.io.FileOutputStream(_native.io.stdout));
 28         jls.lang.System._systemProperties = _native.core.properties;
 29         jls.lang.System._commandLineArguments = Array.from(_native.core.arguments);
 30         jls.lang.System._mainClassname = jls.lang.System._commandLineArguments.shift();
 31     },
 32     /**
 33      * Gets the system command-line arguments.
 34      * 
 35      * @returns {Array} The system arguments.
 36      */
 37     getArguments : function() {
 38         return jls.lang.System._commandLineArguments;
 39     },
 40     /**
 41      * Gets the system properties.
 42      * 
 43      * @returns {Object} The system properties.
 44      */
 45     getProperties : function() {
 46         return jls.lang.System._systemProperties;
 47     },
 48     /**
 49      * Gets a specific system property.
 50      * 
 51      * @param {String} name The name of the property to get.
 52      * @returns {String} The system property.
 53      */
 54     getProperty : function(name, def) {
 55     	if (name in jls.lang.System._systemProperties) {
 56             return jls.lang.System._systemProperties[name];
 57     	}
 58     	return def;
 59     },
 60     /**
 61      * Removes a specific system property.
 62      * 
 63      * @param {String} name The name of the property to remove.
 64      * @returns {String} The system property removed.
 65      */
 66     clearProperty : function(name) {
 67         var cleared = null;
 68         if (name in jls.lang.System._systemProperties) {
 69             cleared = jls.lang.System._systemProperties[name];
 70             delete jls.lang.System._systemProperties[name];
 71         }
 72         return cleared;
 73     },
 74     /**
 75      * Sets a specific system property.
 76      * 
 77      * @param {String} name The name of the property to set.
 78      * @param {String} value The value of the property to set.
 79      */
 80     setProperty : function(name, value) {
 81         jls.lang.System._systemProperties[name] = value;
 82     },
 83     /**
 84      * Gets a specific environnement property.
 85      * 
 86      * @param {String} name The name of the property to get.
 87      * @returns {String} The environnement property.
 88      */
 89     getenv : function(name) {
 90         return _native.core.getEnv(name);
 91     },
 92     /**
 93      * Returns the current time in milliseconds.
 94      * 
 95      * @returns {Number} The current time in milliseconds.
 96      */
 97     currentTimeMillis : function() {
 98         return new Date().getTime();
 99     },
100     /**
101      * The standard error stream.
102      * @type jls.io.PrintStream
103      */
104     err : null,
105     /**
106      * The standard input stream.
107      * @type jls.io.FileInputStream
108      * @fieldOf jls.lang.System
109      * @name in
110      */
111     'in' : null,
112     /**
113      * The standard output stream.
114      * @type jls.io.PrintStream
115      */
116     out : null,
117 
118     /**
119      * Terminates the program and returns a value to the OS.
120      * 
121      * @param {Number} status The exit status to return to the OS.
122      * @function
123      */
124     exit : jls.lang.Runtime.exit,
125     /**
126      * Runs the garbage collector.
127      * @function
128      */
129     gc : jls.lang.Runtime.gc,
130     /**
131      * Loads a native library compliant with the JLS native engine.
132      * 
133      * @param {String} name The name of the library to load.
134      * @function
135      */
136     loadLibrary : jls.lang.Runtime.loadLibrary
137 });
138 
139