예제 #1
0
        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);
        }
예제 #4
0
 public DustSession(DustSession p)
 {
     this.parent = p;
     this.system = p.system;
 }
예제 #5
0
 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);
                        }
                    }
                }
            }
        }