/*
 * Copyright 2010-2015 Institut Pasteur.
 * 
 * This file is part of Icy.
 * 
 * Icy is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * Icy is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with Icy. If not, see <http://www.gnu.org/licenses/>.
 */
package icy.script;

/**
 * @author fab
 */
public class ScriptReader
{

    // import java.io.InputStream;
    // import java.io.InputStreamReader;
    // import java.io.Reader;
    // import java.util.ArrayList;
    // import java.util.List;
    //
    // import javax.script.Invocable;
    // import javax.script.ScriptEngine;
    // import javax.script.ScriptEngineFactory;
    // import javax.script.ScriptEngineManager;
    // import javax.script.ScriptException;
    //

    // System.out.println("");
    // System.out.println("------ Script supportés: ");
    //
    //
    // {
    //
    // ScriptEngineManager mgr = new ScriptEngineManager();
    // List<ScriptEngineFactory> factories =
    // mgr.getEngineFactories();
    // for (ScriptEngineFactory factory: factories) {
    // System.out.println("ScriptEngineFactory Info");
    // String engName = factory.getEngineName();
    // String engVersion = factory.getEngineVersion();
    // String langName = factory.getLanguageName();
    // String langVersion = factory.getLanguageVersion();
    // System.out.printf("\tScript Engine: %s (%s)\n",
    // engName, engVersion);
    // List<String> engNames = factory.getNames();
    // for(String name: engNames) {
    // System.out.printf("\tEngine Alias: %s\n", name);
    // }
    // System.out.printf("\tLanguage: %s (%s)\n",
    // langName, langVersion);
    // }
    // }
    //
    // System.out.println("");
    // System.out.println("------ Script test : ");
    //
    // {
    //
    // ScriptEngineManager mgr = new ScriptEngineManager();
    // ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
    // try {
    // jsEngine.eval("print('Hello, world!')");
    // } catch (ScriptException ex) {
    // ex.printStackTrace();
    // }
    // }

    // System.out.println("------ Script loading  test : ");

    // {
    // ScriptEngineManager engineMgr = new ScriptEngineManager();
    // ScriptEngine engine = engineMgr.getEngineByName("JavaScript");
    // InputStream is =
    // this.getClass().getResourceAsStream("/script/test.js");
    // try {
    // Reader reader = new InputStreamReader(is);
    // engine.eval(reader);
    // } catch (ScriptException ex) {
    // ex.printStackTrace();
    // }
    // }

    // System.out.println("");
    // System.out.println("------ Script test : using invocable to call function in a script.");
    //
    // {
    // ScriptEngineManager mgr = new ScriptEngineManager();
    // ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
    // try {
    // jsEngine.eval("function sayHello() {" +
    // "  println('Hello, world!');" +
    // "}");
    // } catch (ScriptException e) {
    // // TODO Auto-generated catch block
    // e.printStackTrace();
    // }
    // Invocable invocableEngine = (Invocable) jsEngine;
    // try {
    // invocableEngine.invokeFunction("sayHello");
    // } catch (ScriptException e) {
    // // TODO Auto-generated catch block
    // e.printStackTrace();
    // } catch (NoSuchMethodException e) {
    // // TODO Auto-generated catch block
    // e.printStackTrace();
    // }
    // }
    //
    // System.out.println("");
    // System.out.println("------ Script test : using script to access java host.");
    //
    // {
    // List<String> namesList = new ArrayList<String>();
    // namesList.add("Jill");
    // namesList.add("Bob");
    // namesList.add("Laureen");
    // namesList.add("Ed");
    //
    // ScriptEngineManager mgr = new ScriptEngineManager();
    // ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
    //
    // jsEngine.put("namesListKey", namesList);
    // System.out.println("Executing in script environment...");
    // try {
    // jsEngine.eval("var x;" +
    // "var names = namesListKey.toArray();" +
    // "for(x in names) {" +
    // "  println(names[x]);" +
    // "}" +
    // "namesListKey.add(\"Dana\");");
    // } catch (ScriptException ex) {
    // ex.printStackTrace();
    // }
    // System.out.println("Executing in Java environment...");
    // for (String name: namesList) {
    // System.out.println(name);
    // }
    //
    //
    // }
    //
    // System.out.println("");
    // System.out.println("------ Script test : using script function with java's host object as Input.");
    //
    // {
    // List<String> namesList = new ArrayList<String>();
    // namesList.add("Jill");
    // namesList.add("Bob");
    // namesList.add("Laureen");
    // namesList.add("Ed");
    //
    // ScriptEngineManager mgr = new ScriptEngineManager();
    // ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
    //
    // Invocable invocableEngine = (Invocable)jsEngine;
    // try {
    // jsEngine.eval("function printNames1(namesList) {" +
    // "  var x;" +
    // "  var names = namesList.toArray();" +
    // "  for(x in names) {" +
    // "    println(names[x]);" +
    // "  }" +
    // "}" +
    //
    // "function addName(namesList, name) {" +
    // "  namesList.add(name);" +
    // "}");
    // invocableEngine.invokeFunction("printNames1", namesList);
    // invocableEngine.invokeFunction("addName", namesList, "Dana");
    // } catch (ScriptException ex) {
    // ex.printStackTrace();
    // } catch (NoSuchMethodException ex) {
    // ex.printStackTrace();
    // }
    // }
    //
    // // System.out.println("");
    // // System.out.println("------ Script test : script import a java package.");
    // // {
    // // try {
    // // ScriptEngineManager mgr = new ScriptEngineManager();
    // // ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
    // //
    // // jsEngine.eval("importPackage(javax.swing);" +
    // // "var optionPane = " +
    // // "  JOptionPane.showMessageDialog(null, 'Hello, world!');");
    // // } catch (ScriptException ex) {
    // // ex.printStackTrace();
    // // }
    // // }
    //
    // System.out.println("");
    // System.out.println("------ Script test : Using with a script.");
    // {
    //
    // // Code Equivalent in icy :
    // Sequence s = getSequenceAt( 0 );
    // // s.setName("name changed !");
    // // for ( int x = 0 ; x < 400 ; x ++ )
    // // for ( int y = 0 ; y < 400 ; y ++ )
    // // s.getImageAt(0).setRGB(x, y, 0 , s.getImageAt( 0 ).getGray8( x, y, 0 )/2 );
    //
    //
    // try
    // {
    //
    // ScriptEngineManager mgr = new ScriptEngineManager();
    // ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
    // Invocable invocableEngine = (Invocable)jsEngine;
    //
    // jsEngine.eval(
    // "importPackage(javax.swing);" +
    // "function changeName( sequence ) {" +
    // "sequence.setName('new name given by script');"+
    // "image = sequence.getImageAt( 0 ); "+
    // "for ( x = 0 ; x < 400 ; x ++ )"+
    // "for ( y = 0 ; y < 400 ; y ++ )"+
    // "image.setRGB( x , y , 0 ," +
    // "image.getRGB(x, y, 0) / 2"+
    // ");"+
    // "}" );
    //
    // invocableEngine.invokeFunction("changeName", getSequenceAt( 0 ) );
    //
    // } catch (ScriptException ex)
    // {
    // ex.printStackTrace();
    // } catch (NoSuchMethodException e) {
    // // TODO Auto-generated catch block
    // e.printStackTrace();
    // }
    //
    // s.overlayChanged();
    // }
    //
    // System.out.println("");
    // System.out.println("------ Script test : End.");

}