コード例 #1
0
        void AddRecordToGroup(ExpandoObject currentRecord, FieldInfo field, List <Boolean> groupKeys)
        {
            if (groupKeys == null)
            {
                throw new DataLoaderException($"There is no groups property for '{field.TypeName}");
            }
            ElementMetadata elemMeta = GetOrCreateMetadata(field.TypeName);

            if (String.IsNullOrEmpty(elemMeta.Items))
            {
                throw new DataLoaderException($"There is no 'Items' property for '{field.TypeName}");
            }
            GroupMetadata groupMeta = GetOrCreateGroupMetadata(field.TypeName);

            if (groupMeta.IsRoot(groupKeys))
            {
                _root.Add(field.PropertyName, currentRecord);
                groupMeta.CacheElement(groupMeta.RootKey, currentRecord);                 // current
            }
            else
            {
                // item1 - elemKey, item2 -> parentKey
                var keys      = groupMeta.GetKeys(groupKeys, currentRecord);
                var parentRec = groupMeta.GetCachedElement(keys.Item2);                 // parent
                parentRec.AddToArray(elemMeta.Items, currentRecord);
                if (!groupMeta.IsLeaf(groupKeys))
                {
                    groupMeta.CacheElement(keys.Item1, currentRecord);                     // current
                }
            }
        }
コード例 #2
0
        void ProcessMapObjectMetadata(FieldInfo fieldInfo, ElementMetadata elem)
        {
            var mapType   = fieldInfo.TypeName + "Map";
            var innerElem = GetOrCreateMetadata(mapType);

            foreach (var f in fieldInfo.MapFields)
            {
                innerElem.AddField(new FieldInfo($"{f}!{fieldInfo.TypeName}"), DataType.Undefined);
            }
            elem.AddField(new FieldInfo($"{fieldInfo.PropertyName}!{mapType}"), DataType.Undefined);
        }
コード例 #3
0
        void ProcessComplexMetadata(FieldInfo fieldInfo, ElementMetadata elem, DataType dt, Int32 fieldLen)
        {
            // create metadata for nested type
            var innerElem = GetOrCreateMetadata(fieldInfo.TypeName);
            var fna       = fieldInfo.PropertyName.Split('.');

            if (fna.Length != 2)
            {
                throw new DataLoaderException($"Invalid complex name {fieldInfo.PropertyName}");
            }
            elem.AddField(new FieldInfo($"{fna[0]}!{fieldInfo.TypeName}"), DataType.Undefined);
            innerElem.AddField(new FieldInfo(fieldInfo, fna[1]), dt, fieldLen);
        }
コード例 #4
0
        ElementMetadata GetOrCreateMetadata(String typeName)
        {
            if (_metadata == null)
            {
                _metadata = new Dictionary <String, IDataMetadata>();
            }
            if (_metadata.TryGetValue(typeName, out IDataMetadata elemMeta))
            {
                return(elemMeta as ElementMetadata);
            }
            var newMeta = new ElementMetadata();

            _metadata.Add(typeName, newMeta);
            return(newMeta);
        }