private JObject?GetStructDefaultValue(SimpleMember m)
        {
            if (m.Type != DataType.Struct)
            {
                return(null);
            }
            string     structName = m.TypeConstraints;
            StructInfo structInfo = structTypes[structName];
            JObject    obj        = new JObject();

            foreach (var sm in structInfo.Member)
            {
                string dv;
                if (sm.DefaultValue.HasValue)
                {
                    dv = sm.DefaultValue.Value.JSON;
                }
                else if (sm.Dimension == Dimension.Optional)
                {
                    dv = "null";
                }
                else
                {
                    dv = DataValue.FromDataType(sm.Type, 1).JSON;
                }
                obj[sm.Name] = new JRaw(dv);
            }
            return(obj);
        }
        private async Task <List <ObjectMember> > GetObjectMembers(string id, string type)
        {
            ObjectRef obj  = ObjectRef.FromEncodedString(id);
            ClassInfo info = objTypes[type];

            MemberRef[]        members   = info.SimpleMember.Select(m => MemberRef.Make(obj, m.Name)).ToArray();
            List <MemberValue> memValues = await Connection.GetMemberValues(members);

            var values = new List <ObjectMember>();

            for (int i = 0; i < info.SimpleMember.Count; ++i)
            {
                SimpleMember m = info.SimpleMember[i];
                if (m.Type == DataType.LocationRef && !hasLocations)
                {
                    continue;
                }

                MemberValue v            = memValues[i];
                string      defaultValue = "";
                if (m.DefaultValue.HasValue && m.Dimension != Dimension.Array)
                {
                    defaultValue = m.DefaultValue.Value.JSON;
                }
                else if (m.Type == DataType.Struct)
                {
                    defaultValue = StdJson.ObjectToString(GetStructDefaultValue(m) !, indented: true, ignoreShouldSerializeMembers: false);
                    //Console.WriteLine("=> " + m.Name + ": " + defaultValue);
                }
                else if (m.Type == DataType.LocationRef && rootLocation.HasValue)
                {
                    defaultValue = DataValue.FromLocationRef(rootLocation.Value).JSON;
                }
                else
                {
                    defaultValue = DataValue.FromDataType(m.Type, 1).JSON;
                }
                var member = new ObjectMember()
                {
                    Key           = obj.ToEncodedString() + "__" + m.Name,
                    Name          = m.Name,
                    Type          = m.Type.ToString(),
                    IsScalar      = m.Dimension == Dimension.Scalar,
                    IsOption      = m.Dimension == Dimension.Optional,
                    IsArray       = m.Dimension == Dimension.Array,
                    Category      = m.Category,
                    Browseable    = m.Browseable,
                    Value         = new JRaw(v.Value.JSON),
                    ValueOriginal = new JRaw(v.Value.JSON),
                    EnumValues    = ResolveEnum(m),
                    StructMembers = ResolveStruct(m),
                    DefaultValue  = defaultValue
                };
                values.Add(member);
            }
            return(values);
        }
        private string[] ResolveEnum(SimpleMember m)
        {
            if (m.Type != DataType.Enum)
            {
                return(new string[0]);
            }
            string   enumName = m.TypeConstraints;
            EnumInfo enumInfo = enumTypes[enumName];

            return(enumInfo.Values.Select(ev => ev.Description).ToArray());
        }
Esempio n. 4
0
        /// <summary>
        /// </summary>
        /// <param name="member"></param>
        /// <param name="attributes"></param>
        /// <returns></returns>
        private bool CheckRole(SimpleMember member, IReadOnlyCollection <AdminAuthAttribute> attributes)
        {
            var allRoles = attributes.Where(t => !t.Roles.IsNullOrEmpty()).SelectMany(t =>
            {
                var rolesAry = new[] { t.Roles };
                if (t.Roles.Contains(","))
                {
                    rolesAry = t.Roles.Split(",");
                }
                return(rolesAry);
            }).ToList();

            return(!allRoles.Any() || allRoles.Any(member.InRole));
        }
Esempio n. 5
0
        private bool CheckPermission(SimpleMember member, IEnumerable <AdminAuthAttribute> attributes)
        {
            var allPermissions = attributes
                                 .Where(t => !t.Permissions.IsNullOrEmpty())
                                 .SelectMany(t =>
            {
                var permissionNameAry = new[] { t.Permissions };
                if (t.Permissions.Contains(","))
                {
                    permissionNameAry = t.Permissions.Split(",");
                }
                return(permissionNameAry);
            }).ToList();

            return(allPermissions.All(member.HasPermission));
        }
Esempio n. 6
0
        public void TestSimpleMember()
        {
            var instance = new SimpleMember {
                FloatValue = 1.0f
            };
            var context = BuildContext(instance);
            var root    = context.Factory.CreateNodeHierarchy(context.RootNode, new GraphNodePath(context.RootNode));
            var member  = root[nameof(SimpleMember.FloatValue)];

            Assert.Equal(0, member.Children.Count);
            Assert.Equal(nameof(SimpleMember.FloatValue), member.DisplayName);
            Assert.Equal(Index.Empty, member.Index);
            Assert.False(member.IsEnumerable);
            Assert.False(member.IsReadOnly);
            Assert.True(member.IsVisible);
            Assert.Equal(nameof(SimpleMember.FloatValue), member.Name);
            Assert.Null(member.Order);
            Assert.Equal(root, member.Parent);
            Assert.Equal(1.0f, member.Value);
        }
        private StructMember[] ResolveStruct(SimpleMember m)
        {
            if (m.Type != DataType.Struct)
            {
                return(new StructMember[0]);
            }
            string     structName = m.TypeConstraints;
            StructInfo structInfo = structTypes[structName];

            return(structInfo.Member.Select(sm => new StructMember()
            {
                Name = sm.Name,
                Type = sm.Type.ToString(),
                IsScalar = sm.Dimension == Dimension.Scalar,
                IsOption = sm.Dimension == Dimension.Optional,
                IsArray = sm.Dimension == Dimension.Array,
                EnumValues = ResolveEnum(sm),
                StructMembers = ResolveStruct(sm)
            }).ToArray());
        }