/*
 * Copyright (c) 2014 Paul Scherrer Institute. All rights reserved.
 */

package test;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class Final {
    public static class TestClass {
        protected void method1() {
            System.out.println("On protected");
        }
        final public void method2() {
            System.out.println("On final public");
        }        
        final protected void method3() {
            System.out.println("On final protected");
        }        
    }

    public static void main(String[] args) throws Exception {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");

        engine.eval("import test.Final.TestClass");
        
        engine.eval("class MyClass(test.Final.TestClass):\n"
                + "   def m1(self):\n"
                + "       self.method1()\n"
                + "   def m2(self):\n"
                + "       self.method2()\n"
                + "   def m3(self):\n"
                + "       self.method3()\n");
        engine.eval("o = MyClass()");        
        
        engine.eval("o.m1()");
        engine.eval("o.m2()");
        engine.eval("o.m3()");
    }
}