import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

import org.apache.bsf.*;
import org.apache.bsf.util.*;

public class TestCalc extends Frame {

  static final protected Hashtable extensionmap= new Hashtable();
  static
  {
    extensionmap.put("pl", "perlscript");
    extensionmap.put("vbs", "vbscript");
    extensionmap.put("js", "jscript");
    extensionmap.put("rex", "rexx");
    extensionmap.put("rxs", "ObjectRexxScript");
  }
  static final String languageFromExtension( String s) throws Exception
  {
    int dot= s.lastIndexOf('.');
    if(dot != -1) s= s.substring( dot+1);
    String lang= (String) extensionmap.get(s);
    if(null == lang) throw new BSFException(BSFException.REASON_OTHER_ERROR, "File extension " + s + " unknown language!");

    return lang;

  }

  public TestCalc (String fileName) throws Exception {
    BSFManager manager = new BSFManager ();
    manager.declareBean("frame", this, this.getClass());
    try
    {
     manager.exec(manager.getLangFromFilename(fileName), fileName, 0, 0,
                 IOUtils.getStringFromReader(new FileReader(fileName)));
    }catch(BSFException e )
    {

     System.out.println("exception: " + e.getMessage());
     Throwable oe= e.getTargetException();
     if(null != oe) System.out.println("\nOriginal Exception:"+ oe.getMessage());
              e.printStackTrace();

    }
  }

  public static void main (String[] args) throws Exception {
    if (args.length != 1) {
      System.err.println("Missing file name");
      System.exit(1);
    }

    Frame f = new TestCalc (args[0]);
    f.show();

    f.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) { System.exit(0); }
    } );
  }

}
