X-Meta引擎是使用Java实现的动态模型引擎。
可以通过World类来初始化模型引擎,其中path参数是模型应用的目录,一般是引擎的工作目录,目录下可以包含类库、模型库和生成的临时文件等。
import org.xmeta.World; //Java项目可以使用当前目录作为引擎的工作目录 World world = World.getInstance(); world.init(".");
可以通过模型的路径来获取一个模型.模型的路径规则基本同Java类名的规则,只是模型的路径还可以包含子节点的路径。如test.HelloWorldModel是描述者模型的路径。
import org.xmeta.Thing; //获得描述者模型 Thing thing = world.getThing("test.HelloWorldModel");
//获取属性的值 Object value = thing.get("name"); //设置属性的值 thing.set("name", "Hello World"); //获取属性的值并转为相应的类型,支持常见类型的转换 //一般是getX(Stirng name)方法,其中X是对应的类型 int age = thing.getInt("age"); //注:属性未必需要在模型(XML)中定义,但序列化存储时未定义的属性不会被保存到XML中 //获取模型的子节点 List<Thing> childs = thing.getChilds();
把模型转化为动作执行。
import org.xmeta.Thing; import org.xmeta.Aciton; import org.xmeta.ActionContext; //获取HelloWorldExample模型 Thing helloWorldExample = world.getThing("test.HelloWorldExample"); //转化为动作,和Java做对比动作类似于静态方法 Action helloWorldAction = helloWorldExample .getAction(); //执行动作 //动作和对象的行为执行时需要动作上下文(ActionContext),动作上下文用于管理变量和线程状态等 helloWorldAction.run(new ActionContext());
把模型作为对象,执行它的行为
import org.xmeta.Thing; import org.xmeta.ActionContext; //获取HelloWorldExample模型 Thing helloWorldExample = world.getThing("test.HelloWorldExample"); //执行HelloWorldExample的run方法。 //执行对象的行为时,对象本身会以变量名self(相当于this变量)放到动作上下文中,动作可以通过self变量访问对象模型。 helloWorldExample.doAction("run", new ActionContext());
传参数的方法,动作执行时也适用。
//传参,方法1,参数名+参数值,可以设置多个,参数名和参数值成对出现 Object result = thing.doAction("xxx", new ActionContext(), "p1", p1Value, "p2", p2Value...); //传参,方法2,通过ActionContext设置参数 ActionContext actionContext = new ActionContext(); actionContext.peek().put("p1", p1Value); actionContext.peek().put("p2", p2Value); ...... Object result = thing.doAction("xxx", actionContext);
动作和行为的区别,执行动作时模型不会把自己作为self变量传入到动作上下文中,而作为对象执行时会。因此动作执行时没有self变量(或self变量不是它自己),而执行对象的行为时self变量是对象模型自身。
如下面代码中self变量,在执行HelloWorldExample模型对象的run行为时,self变量时HelloWorldExample模型自身。
public static void run(ActionContext actionContext){ //模型实例,相当于Java的this变量的作用 Thing self = actionContext.getObject("self"); System.out.println(self.getString("message")); }
//获取首要描述者(类) Thing descriptor = thing.getDescriptor(); //获取所有描述者(类) List<Thing> descriptors = thing.getDescriptors(); //获取事物名,相当于Java的object.getClass().getSimpleName() String thingName = thing.getThingName(); //获取继承列表 List<Thing> extends = thing.getExtends(); //获取动作行为列表 List<Thing> actions = thing.getActionThings();
Copyright © 2007-2017 XWorker.org 版权所有