模型可以通过手工编写,也可以用程序自动生成。手工编写模型的话可以用XML格式,程序自动生成一般用Properties格式。
import org.xmeta.World; //World对象是用来管理模型的容器,它只有一个唯一的实例 World world = World.getInstance(); //在系统启动时初始化world,指定一个引擎的工作路径 world.init(".");
World对象初始化需要一个路径,默认为当前Java应用的工作路径。这个路径用于查找模型和生成临时文件等用途,比如模型引擎在运行时可能会动态编译Java,而生成的Java类是放到这个路径下的某个目录下的。
import org.xmeta.Thing; //通过模型的路径来获取模型 Thing helloWorld = world.getThing("org.xmeta.HelloWorld"); Thing browser = world.getThing("org.xmeta.HelloWorld/@Browser"); Thing browser1 = world.getThing("org.xmeta.HelloWorld/@Browser1");
模型也称为事物(Thing),World的getThing(String path)方法用于获取一个模型,其中path是模型的路径。在上面的示例中browser是第一个name="Browser"的子节点,browser1是那个_xmeta_id="Browser1"的子节点。
在Thing对象里,模型的属性是存放在一个Map<String, Object>中的,可以通过put、get和getXXX方法来操作它。
//设置属性 thing.put("name", "zhangsan"); thing.put("age", 40); //获取属性的值 Object name = thing.get("name"); Object age = thing.get("age"); int age = thing.getInt("age");
属性的值的类型是Java对象,但通常建议只使用Java的基本类型,因为存储时需要序列化属性的值。获取属性是可以通过getXXX方法来获取,其中XXX代表类型,它可以把属性值转化为指定的XXX类型。
//遍历模型子节点 for(Thing child : thing.getChilds()){ ...... } //通过子路径获取指定的子节点 Thing browser = thing.getThing("@Browser"); //添加子节点 Thing child = new Thing(); thing.addChild(child); //子节点是存储在List中的,也可以添加到指定索引位置 thing.addChild(child, index);
import org.xmeta.Action; import org.xmeta.ActionContext; import org.xmeta.Thing; //动作上下文,用来存储变量和线程执行状态等 ActionContext actionContext = new ActionContext(); //转化为动作来执行 Action action = thing.getAction(); ation.run(actionContext); //执行模型的行为,根据行为的名字来执行 thing.doAction("run", actionContext);
Copyright © 2007-2017 XWorker.org 版权所有