public static void main(String[] args) { KMetaModel metaModel = new MetaModel("SmartCityMetaModel"); KMetaClass metaClassCity = metaModel.addMetaClass("City"); KMetaClass metaClassDistrict = metaModel.addMetaClass("District"); metaClassCity.addAttribute("name", KPrimitiveTypes.STRING); metaClassDistrict.addAttribute("name", KPrimitiveTypes.STRING); metaClassDistrict.addAttribute("nbcitizen", KPrimitiveTypes.LONG); // create the reference districts from City to district with multiplicity 0..* metaClassCity.addRelation("districts", metaClassDistrict, null); KModel model = metaModel.createModel( DataManagerBuilder.create().withScheduler(new DirectScheduler()).build()); model.connect( o -> { // Create reflexively a model object using the metaClass name KObject city = model.createByName("City", BASE_UNIVERSE, BASE_TIME); city.setByName("name", "MySmartCity"); // Create reflexively a model object using the metaClass KObject district_1 = model.create(metaClassDistrict, BASE_UNIVERSE, BASE_TIME); district_1.setByName("name", "District_1"); district_1.setByName("nbcitizen", 10000); // Create reflexively a model object using the metaClass KObject district_2 = model.createByName("District", BASE_UNIVERSE, BASE_TIME); district_2.setByName("name", "District_2"); district_2.setByName("nbcitizen", 50000); // Add the two district to the City city.addByName("districts", district_1); city.addByName("districts", district_2); // Save the full model as JSON in the console model.universe(BASE_UNIVERSE).time(BASE_TIME).json().save(city, System.out::println); // Visiting all reachable objects from the city city.visit( elem -> { System.out.println("Visiting..." + elem.toJSON()); return KVisitResult.CONTINUE; }, o1 -> System.out.println("End of the visit")); // Visiting all attributes of an object city.visitAttributes( (metaAttribute, value) -> { System.out.println( "City attribute " + metaAttribute.metaName() + ", type=" + metaAttribute.attributeTypeId() + "=" + value); }); // Finally any object have a UUID and can be retrieve from it long cityUUID = city.uuid(); System.out.println("City uuid=" + cityUUID); model.lookup( BASE_UNIVERSE, BASE_TIME, cityUUID, new KCallback<KObject>() { @Override public void on(KObject resolvedObject) { System.out.println("Resolved=" + resolvedObject.toJSON()); } }); }); }