Example: fieldGetter and fieldSetter

Below are a short example of fieldGetter and fieldSetter and a larger example showing the script context.

Short example

    RemoteInvocation RemoteInvocation2 =
        (RemoteInvocation) JavaHTTP.readObject(RemoteInvocationBA0);
    RemoteInvocation.methodName="applyToSchool";
    Student student=RemoteInvocation.arguments[0];

    //grades is a private member of Student
    Map grades=lr2.fieldGetter(student,"grades");
    grades.put("Math","95");

    //Student class inherits the name field from Person. name field is a string
    lr2.fieldSetter(student,"super.name","Tom");

    //Student class inherits the ID field from Person. ID field is an int
    lr2.fieldSetter(student,"super.ID","98764321");

    RemoteInvocationResult RemoteInvocationResult_ArrayList2 =
        (RemoteInvocationResult) JavaHTTP.sendSerialized(
            RemoteInvocation2, 2, "ObjectsDeserializerDefaultImpl"0;

Sample script

import lrapi.lr2;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
public class Actions {
    public int init() throws Throwable {
        return 0;
    }//end of init
    public int action() throws Throwable {
        //part1
        {
            ExObj1 exObj1 = new ExObj1(0);
            System.out.println(exObj1);
            lr2.fieldSetter(exObj1, "dbl", "1.23");
            lr2.fieldSetter(exObj1, "integer", "1234");
            List<String> lst =
                (List<String>) lr2.fieldGetter(exObj1, "list");
            lst.add("four");
            System.out.println(exObj1);
        }
        //part2
        ExObj2 exObj2 = new ExObj2();
        ExObj3 exObj3 = new ExObj3();
        System.out.println(exObj3);
        lr2.fieldSetter(exObj3,
            "super.privateObj", "parent access!");
        lr2.fieldSetter(exObj2,
            "objArray[1]", "array access");
        lr2.fieldSetter(exObj2,
            "objArray[2].privateObj",
            "through array & access to private field");
        lr2.fieldSetter(exObj2,
            "objArray[2].publicObj", new Object[20]);
        lr2.fieldSetter(exObj2,
            "objArray[2].publicObj[10]", new Object[10]);
        lr2.fieldSetter(exObj2,
            "objArray[2].publicObj[10][5]", new Object[5]);
        lr2.fieldSetter(exObj2,
            "objArray[2].publicObj[10][5][2]", exObj3);
        lr2.fieldSetter(exObj2,
            "objArray[2].publicObj[10][5][2].privateObj",
            "set from outside!");
        lr2.fieldSetter(exObj2,
            "objArray[2].publicObj[10][5][2].super.privateObj",
            "super set from outside!");
        System.out.println(exObj3);
        return 0;
    }//end of action
    public int end() throws Throwable {
        return 0;
    }//end of end
    class ExObj1 {
        private String str = "preset string";
        private double dbl;
        private int integer;
        private List<String> list = new LinkedList<String>();
        public ExObj1(int integer) {
            this.integer = integer;
            list.addAll(Arrays.asList("one", "two", "three"));
        }
        public String toString() {
            String ans = this.getClass().getName() + "\n"
                + "\tinteger:{\n\t" + integer + "\n\t}\n"
                + "\tdbl:{\n\t" + dbl + "\n\t}\n";
            ans += "\tlist:{\n\t";
            for (String str : list) {
                ans += str + "\n\t";
            }
            ans += "}\n";
            return ans;
        }
    }
    static class ExObj2 {
        public Object publicObj;
        private Object privateObj;
        public static Object[] objArray =
            new Object[]{"1", "12", new ExObj2()};
        public String toString() {
            return this.getClass().getName() + "\n"
                + "\t{publicObj:\t" + publicObj
                + "\n\tprivateObj:" + privateObj
                + "\n\t}\n";
        }
    }
    class ExObj3 extends ExObj2 {
        private Object privateObj;
        public Object publicObj;
        public String toString() {
            return this.getClass().getName() + "\n"
                + "\t{publicObj:" + publicObj
                + "\n\tprivateObj:" + privateObj
                + "\n\t" + super.toString() + "}\n";
        }
    }
}