## page was renamed from rhino
= rhino =
Rhino is an open-source implementation of JavaScript written entirely in Java. 

It is typically embedded into Java applications to provide scripting to end users. 

It is embedded in J2SE 6 as the default Java scripting engine.

[[https://developer.mozilla.org/en-US/docs/Rhino]]

== Invoke JavaScript from Java example ==
{{{#!highlight javascript
// /tmp/test.js
function isOdd(number) { 
  if(number % 2){
    return false;
  }
  else{
  return  true;  
  }
};
}}}

{{{#!highlight java
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.FileNotFoundException;
import java.io.FileReader;

public class JSTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ScriptEngineManager sem = new ScriptEngineManager();
		ScriptEngine engine = sem.getEngineByName("ECMAScript");
		FileReader fr = null;
		String path = "/tmp/test.js";
		try {
			fr = new FileReader(path);
		} catch (FileNotFoundException e) {
			System.out.println(String.format("File %s not found", path));
		}

		if (fr != null) {
			try {
				engine.eval(fr);
				if (engine instanceof Invocable) {
					Invocable iv = (Invocable) engine;

					try {
						System.out.println(iv.invokeFunction("isOdd", new Integer(4)));
						System.out.println(iv.invokeFunction("isOdd", new Integer(5)));
					} catch (NoSuchMethodException ex) {
						ex.printStackTrace();
					} catch (ScriptException ex) {
						ex.printStackTrace();
					}
				}
			} catch (ScriptException ex) {
				ex.printStackTrace();
			}
		}
	}

}

}}}

== switch case example ==
 * rhino -require -strict test.js
 * uses CommonJS (-require) http://wiki.commonjs.org/wiki/Modules/1.1 
 * http://wiki.commonjs.org/wiki/Modules
'''test.js'''
{{{#!highlight javascript
dict = require('./modulex.js');
console = require('./console.js');

var caseA = ["a","e","i","o","u"];
var caseB = ["b","c","d","f","g"];
var caseC = ["h","j","k","l","m"];
var caseD = ["n","p","q","r","s","t","v","w","x","y","z"];

function check_if(string){
  var letter = string[0];
  if( caseA.indexOf(letter) >=0) return "A";
  if( caseB.indexOf(letter) >=0) return "B";
  if( caseC.indexOf(letter) >=0) return "C";
  if( caseD.indexOf(letter) >=0) return "D";
}

function check_case2(string){
  var letter = string[0];

  switch(true){
    case caseA.indexOf(letter) >=0: return "A";
    case caseB.indexOf(letter) >=0: return "B";
    case caseC.indexOf(letter) >=0: return "C";
    case caseD.indexOf(letter) >=0: return "D" ; 
  }

}

function check_case(string){
  var letter = string[0];
  switch(letter){
    case "a":
    case "e": 
    case "i":
    case "o":
    case "u":
      return "A";
    case "b":
    case "c":
    case "d":
    case "f":
    case "g":
      return "B";
    case "h":
    case "j":
    case "k":
    case "l":
    case "m":
      return "C";
    default:
      return "D";
   }
}

console.log( check_if("adfgt") );
console.log( check_if("fdfgt") );
console.log( check_if("kdfgt") );
console.log( check_if("wdfgt") );
console.log("####");
console.log( check_case("adfgt") );
console.log( check_case("fdfgt") );
console.log( check_case("kdfgt") );
console.log( check_case("wdfgt") );
console.log("####");
console.log( check_case2("adfgt") );
console.log( check_case2("fdfgt") );
console.log( check_case2("kdfgt") );
console.log( check_case2("wdfgt") );
console.log("####");

console.log( JSON.stringify(dict) );
dict.info( dict.a );
}}}

'''modulex.js'''
{{{#!highlight javascript
function console(){}

console.info = function(message){
  print(message);
};

exports.info = console.info;
exports.a = 1;
exports.b = 2;
exports.c = 3;
}}}

'''console.js'''
{{{#!highlight javascript
exports.log = function(message){
  print(message);
};;
}}}