public DustDataReference(DustDataEntity eLinkDef, DustDataEntity eSrc, DustDataEntity eTarget, Object id) { this.eLinkDef = eLinkDef; this.eSrc = eSrc; this.eTarget = eTarget; this.id = id; }
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); }
public void accessImpl(DustAccessCommand op, DustInfoTray tray) { var session = getCurrentSession(); DustDataEntity ei = (tray.entity is DustContext) ? session.ctx[((DustContext)tray.entity)] : (DustDataEntity)tray.entity; var eKey = tray.key as DustDataEntity; if (null == eKey) { var key = tray.key as DustKey; if (null != key) { eKey = modules[key.module][key.key]; } } switch (op) { case DustAccessCommand.read: tray.value = ei.getValue(eKey, tray.value, tray.dustHint); if ((null == tray.value) && DustUtils.isEnumRef(eKey.optValType)) { foreach (DustProcCursor drc in rootSession.cursors) { if ((drc.owner == ei) && (drc.key == eKey)) { tray.value = drc.Current.eTarget; return; } } } break; case DustAccessCommand.write: tray.value = ei.setValue(eKey, tray.value, tray.dustHint); break; case DustAccessCommand.visit: var vp = new DustProcVisitProcess(session, tray); var vt = tray as DustVisitTray; if (null == vt) { vp.visitRef(ei, eKey, null, true); } else { vp.visitEntity(null); } break; } }
public DustProcCursor optSetCursor(DustDataEntity ei, DustDataEntity eKey) { DustProcCursor cursor = DustProcCursor.optSet(ei, eKey); if (null != cursor) { cursors.Insert(0, cursor); } return(cursor); }
public static async Task <DustEntity> loadRemote(String serverAddr, String module, String entityId) { try { // var tcs = new TaskCompletionSource<DustEntity>(); string responseBody = await HttpClient.GetStringAsync("http://" + serverAddr + "/GetEntity?RemoteRefModuleName=" + module + "&RemoteRefItemModuleId=" + entityId); File.WriteAllText(module + "." + entityId + ".json", responseBody); DustDataEntity entity = DustCommSerializerJson.loadSingleFromText(responseBody, module, entityId); // proc.processEntity(entity); // tcs.TrySetResult(entity); return(entity); } catch (HttpRequestException e) { Console.WriteLine("\nException Caught!"); Console.WriteLine("Message :{0} ", e.Message); return(null); } }
public Object setValue(DustDataEntity key, Object val, Object hint) { Object newVal = null; Object oldVal; if (!content.TryGetValue(key, out oldVal)) { oldVal = null; } switch (key.optValType) { case DustValType.AttDefBool: case DustValType.AttDefIdentifier: case DustValType.AttDefDouble: case DustValType.AttDefLong: case DustValType.AttDefRaw: newVal = val; break; case DustValType.LinkDefSingle: newVal = new DustDataReference(key, this, (DustDataEntity)val, hint); break; case DustValType.LinkDefSet: case DustValType.LinkDefArray: case DustValType.LinkDefMap: newVal = (null == oldVal) ? new DustDataReference(key, this, (DustDataEntity)val, hint) : ((DustDataReference)oldVal).addItem((DustDataEntity)val, hint); break; } content[key] = newVal; var oldRef = oldVal as DustDataReference; return((null == oldRef) ? oldVal : oldRef.eTarget); }
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 DustDataReference addItem(DustDataEntity target, Object hint) { DustDataReference refAdd = null; switch (eLinkDef.optValType) { case DustValType.LinkDefSet: var hs = coll as HashSet <DustDataReference>; if (null == hs) { if (this.eTarget == target) { return(this); } coll = hs = new HashSet <DustDataReference>(); hs.Add(this); } else { foreach (var rr in hs) { if (rr.eTarget == target) { return(rr); } } } refAdd = new DustDataReference(eLinkDef, eSrc, target, hint); refAdd.coll = coll; hs.Add(refAdd); break; case DustValType.LinkDefArray: var lst = coll as List <DustDataReference>; if (null == lst) { coll = lst = new List <DustDataReference>(); lst.Add(this); this.id = 0; } refAdd = new DustDataReference(eLinkDef, eSrc, target, hint); refAdd.coll = coll; if (hint is int) { int idx = (int)hint; if ((-1 != idx) && (idx < lst.Count)) { lst[idx] = refAdd; refAdd.id = idx; return(refAdd); } } refAdd.id = lst.Count; lst.Add(refAdd); break; case DustValType.LinkDefMap: var map = coll as Dictionary <DustDataEntity, DustDataReference>; var key = hint as DustDataEntity; if (key == null) { throw new System.ArgumentException("Invalid parameter", "hint"); } refAdd = new DustDataReference(eLinkDef, eSrc, target, hint); refAdd.id = key; if (key != this.id) { if (null == map) { coll = map = new Dictionary <DustDataEntity, DustDataReference>(); map[(DustDataEntity)this.id] = this; } refAdd.coll = coll; map[key] = refAdd; } break; } return(refAdd); }
DustProcCursor(DustDataReference ddr) : base(ddr.getMembers()) { this.owner = ddr.eSrc; this.key = ddr.eLinkDef; }
public static DustProcCursor optSet(DustDataEntity owner, DustDataEntity key) { DustDataReference ddr = owner.getRef(key); return((null == ddr) ? null : new DustProcCursor(ddr)); }
public DustDataReference getRef(DustDataEntity key) { Object ret; return((content.TryGetValue(key, out ret)) ? ret as DustDataReference : null); }
public bool visitRef(DustDataEntity ei, DustDataEntity eKey, object readerParent, bool close) { bool first = true; DustProcCursor cursor = session.optSetCursor(ei, eKey); if (null != cursor) { Exception procEx = null; try { foreach (DustDataReference ddr in cursor) { callbackTray.entity = ei; callbackTray.value = ddr.eTarget; callbackTray.key = eKey; if (null != dvp) { if (first) { first = false; } else { sendVisitEvent(VisitEvent.refSep); } } if (null != dvp) { object mapId = (DustValType.LinkDefMap == ddr.eLinkDef.optValType) ? ddr.getId() : null; if (null != mapId) { callbackTray.key = mapId; callbackTray.readerParent = readerParent; callbackTray.entity = ddr.eTarget; if (!sendVisitEvent(VisitEvent.keyStartOpt)) { callbackTray.entity = ei; continue; } } callbackTray.entity = ddr.eTarget; visitEntity(readerParent); if (null != mapId) { callbackTray.key = mapId; callbackTray.readerParent = readerParent; callbackTray.entity = ddr.eTarget; sendVisitEvent(VisitEvent.keyEnd); } callbackTray.key = eKey; callbackTray.entity = ddr.eTarget; callbackTray.readerParent = readerParent; sendVisitEvent(VisitEvent.keyEnd); } } if (!first && close) { sendVisitEvent(VisitEvent.visitEnd); } } catch (Exception ex) { callbackTray.readerObject = procEx = ex; sendVisitEvent((ex is DustException) ? VisitEvent.visitAborted : VisitEvent.visitInternalError); } finally { session.cursors.Remove(cursor); } if (null != procEx) { throw procEx; } } return(!first); }
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); } } } } }