Since CArtAgO data model is based on Java object (POJO), a set of internal actions is provided on the agent side to create/manipulate Java objects. In particular:
cartago.new_obj(ClassName,ParamList,?ObjRef)
: instantiate a new object of the specified class, retrieving its referencecartago.invoke_obj{ObjRef,MethodName{(Params)},RetValue}
: call a method, possibly getting the return valuecartago.invoke_obj{ClassName,MethodName{(Params)},RetValue}
: call a static method, possibly getting the return valueIt follows a simple example:
MAS example09_java_data_binding { environment: c4jason.CartagoEnvironment agents: java_data_binding_tester agentArchClass c4jason.CAgentArch; classpath: "../../../lib/cartago.jar";"../../../lib/c4jason.jar"; }
The agent source code:
!test_java_api. +!test_java_api <- cartago.new_obj("c4jexamples.FlatCountObject",[10],Id); cartago.invoke_obj(Id,inc); cartago.invoke_obj(Id,getValue,Res); println(Res); cartago.invoke_obj("java.lang.System",currentTimeMillis,T); println(T); cartago.invoke_obj("java.lang.Class", forName("c4jexamples.FlatCountObject"),Class); println(Class).
Where the class FlatCountObject
is defined as follows:
package c4jexamples; public class FlatCountObject { private int count; public FlatCountObject(int v){ count = v; } public FlatCountObject(){ count = 0; } public void inc(){ count++; } public void inc(int dv){ count+=dv; } public int getValue(){ return count; } }
Highlights:
_
) is used to represent the null value.