public Object getValue(DustDataEntity key, Object defVal, object hint) { Object ret = defVal; DustDataReference er = null; if (content.TryGetValue(key, out ret)) { er = ret as DustDataReference; ret = (null == er) ? ret : er.getAt(hint); } if ((null == ret) && (DustValType.LinkDefMap == key.optValType)) { Object refPT; if (content.TryGetValue(DustSystem.getEntity(MetaLinks.LinkDefItemTypePrimary), out refPT)) { DustDataEntity ePT = ((DustDataReference)refPT).eTarget; var eNew = new DustDataEntity(); eNew.setValue(DustSystem.getEntity(DataLinks.EntityPrimaryType), ePT, null); ret = eNew; } } return(ret ?? defVal); }
DustDataEntity resolveRef(DustSystem system, DustDataStore store, String key) { if (isLocal(key)) { return(store[key]); } else { var keyModName = (String)((JObject)data[key])[header.EntityUnit]; var keyId = (String)((JObject)data[key])[header.EntityId]; return(system.modules[keyModName][keyId]); } }
public static DustDataEntity loadSingleFromText(string jsonText, string mod, string id) { DustSystem system = DustSystem.getSystem(); DustSession session = system.getCurrentSession(); Dictionary <string, JsonUnitWrapper> js; js = JsonConvert.DeserializeObject <Dictionary <string, JsonUnitWrapper> >(jsonText); foreach (string k in js.Keys) { JsonUnitWrapper jw = js[k]; Console.WriteLine("Unit read " + k); jw.populate(js, system, k); } DustDataEntity eRoot = system.getEntity(mod, id); session.ctx[DustContext.SELF] = eRoot; return(eRoot); }
public DustSession(DustSession p) { this.parent = p; this.system = p.system; }
public DustSession(DustSystem system) { this.system = system; this.parent = null; }
public void populate(Dictionary <string, JsonUnitWrapper> js, DustSystem system, String name) { DustDataStore store = system.modules[name]; foreach (var c in data.Children()) { var p = (JProperty)c; var id = p.Name; if (isLocal(id)) { var eTarget = store[id]; var o = (JObject)p.Value; foreach (var cc in o.Children()) { var pp = (JProperty)cc; var key = pp.Name; DustDataEntity eKey = resolveRef(system, store, key); eKey.optValType = getValType(key); Object val = null; switch (eKey.optValType) { case DustValType.AttDefBool: case DustValType.AttDefIdentifier: case DustValType.AttDefDouble: case DustValType.AttDefLong: case DustValType.AttDefRaw: val = ((JValue)pp.Value).Value; break; case DustValType.LinkDefSingle: val = ((JValue)pp.Value).Value; val = resolveRef(system, store, (String)val); break; case DustValType.LinkDefSet: case DustValType.LinkDefArray: var a = (JArray)pp.Value; int idx = 0; foreach (var r in a.Children()) { eTarget.setValue(eKey, resolveRef(system, store, (String)r), idx++); } break; case DustValType.LinkDefMap: var m = (JObject)pp.Value; foreach (var mc in m.Children()) { var mp = (JProperty)mc; var mk = mp.Name; DustDataEntity eMK = resolveRef(system, store, mk); var mv = ((JValue)mp.Value).Value; mv = resolveRef(system, store, (String)mv); eTarget.setValue(eKey, mv, eMK); } break; } if (null != val) { eTarget.setValue(eKey, val, null); } } } } }