Beispiel #1
0
        internal BitwiseExpression this[ExpressionKind type]
        {
            get
            {
                if (!type.IsBitwise())
                {
                    throw new InvalidEnumArgumentException(nameof(type), (int)type, typeof(ExpressionKind));
                }

                if (_operations.ContainsKey(type))
                {
                    return(_operations[type]);
                }

                Type concreteType = Type.GetType(GetType().Namespace + "." + Enum.GetName(typeof(ExpressionKind), type) + "Expression");
                if ((concreteType == null) || !concreteType.IsBitwiseExpression())
                {
                    throw new InvalidBitwiseTypeException();
                }

                BitwiseExpression obj = (BitwiseExpression)Activator.CreateInstance(concreteType);
                _operations.Add(type, obj);
                return(obj);
            }
        }
Beispiel #2
0
        public virtual IList <long> GetProjectIds(BookTypeEnum bookType, int userId, ProjectTypeEnum projectType, IList <long> projectIds,
                                                  IList <int> categoryIds)
        {
            Project    projectAlias    = null;
            BookType   bookTypeAlias   = null;
            Category   categoryAlias   = null;
            Permission permissionAlias = null;
            UserGroup  userGroupAlias  = null;
            User       userAlias       = null;

            var query = GetSession().QueryOver <Snapshot>()
                        .JoinAlias(x => x.Project, () => projectAlias)
                        .JoinAlias(x => x.BookTypes, () => bookTypeAlias)
                        .JoinAlias(() => projectAlias.Categories, () => categoryAlias, JoinType.LeftOuterJoin)
                        .JoinAlias(() => projectAlias.Permissions, () => permissionAlias)
                        .JoinAlias(() => permissionAlias.UserGroup, () => userGroupAlias)
                        .JoinAlias(() => userGroupAlias.Users, () => userAlias)
                        .And(() => bookTypeAlias.Type == bookType && userAlias.Id == userId && projectAlias.ProjectType == projectType && projectAlias.IsRemoved == false)
                        .And(BitwiseExpression.On(() => permissionAlias.Flags).HasBit(PermissionFlag.ShowPublished))
                        .Select(Projections.Distinct(Projections.Property(() => projectAlias.Id)));

            if (projectIds != null && categoryIds != null)
            {
                query = query.Where(Restrictions.Or(
                                        Restrictions.InG(Projections.Property(() => projectAlias.Id), projectIds),
                                        Restrictions.InG(Projections.Property(() => categoryAlias.Id), categoryIds)
                                        ));
            }

            return(query.List <long>());
        }
Beispiel #3
0
        public override Object Visit(BitwiseExpression node, Object obj)
        {
            node.FirstOperand.Accept(this, obj);
            node.SecondOperand.Accept(this, obj);

            return(null);
        }
Beispiel #4
0
        public void NotHasBit_WithMatch_ReturnsMatchedUser()
        {
            CreateUser(Permissions.Read);
            var criteria = BitwiseExpression.On <User>(x => x.Permissions).NotHasBit(Permissions.Write);
            var users    = Query(session => session.QueryOver <User>().Where(criteria).List());

            Assert.That(users.Count == 1);
        }
Beispiel #5
0
        public void HasBit_WithoutMatch_ReturnsNoUser()
        {
            CreateUser(Permissions.Read | Permissions.Full);
            var criteria = BitwiseExpression.On <User>(x => x.Permissions).HasBit(Permissions.Write);
            var users    = Query(session => session.QueryOver <User>().Where(criteria).List());

            Assert.IsEmpty(users);
        }
Beispiel #6
0
        public override Object Visit(BitwiseExpression node, Object obj)
        {
            Expression        clonedFirstOperand      = (Expression)node.FirstOperand.Accept(this, obj);
            Expression        clonedSecondOperand     = (Expression)node.SecondOperand.Accept(this, obj);
            BitwiseExpression clonedBitwiseExpression = new BitwiseExpression(clonedFirstOperand, clonedSecondOperand, node.Operator, node.Location);

            return(clonedBitwiseExpression);
        }
Beispiel #7
0
        public void MaskNotMatch_ReturnsNoUser()
        {
            CreateUser(Permissions.Read | Permissions.Write | Permissions.Full);
            var permissionValue = Permissions.Read | Permissions.Write;
            var criteria        = BitwiseExpression.On <User>(x => x.Permissions).NotHasBit(permissionValue);
            var users           = Query(session => session.QueryOver <User>().Where(criteria).List());

            Assert.That(users.Count == 0);
        }
Beispiel #8
0
        public virtual int GetRequiredPermissionCountForProject(long projectId, PermissionFlag requiredPermission)
        {
            var resultCount = GetSession().QueryOver <Permission>()
                              .Where(x => x.Project.Id == projectId)
                              .And(BitwiseExpression.On <Permission>(x => x.Flags).HasBit(requiredPermission))
                              .RowCount();

            return(resultCount);
        }
 public override object Visit(BitwiseExpression node, object obj)
 {
     if (node.Location == ((AstNode)obj).Location || found)
     {
         found = true;
         return(this.table);
     }
     return(base.Visit(node, obj));
 }
Beispiel #10
0
        public virtual ListWithTotalCountResult <Project> GetProjectList(int start, int count, ProjectTypeEnum?projectType,
                                                                         string filterByName = null, int?includeUserId = null, int?excludeUserId = null)
        {
            Permission permissionAlias = null;
            UserGroup  userGroupAlias  = null;
            User       userAlias       = null;

            var query = GetSession().QueryOver <Project>()
                        .Where(x => x.IsRemoved == false)
                        .Fetch(SelectMode.Fetch, x => x.CreatedByUser);

            if (projectType != null)
            {
                query.Where(x => x.ProjectType == projectType.Value);
            }

            if (!string.IsNullOrEmpty(filterByName))
            {
                query.WhereRestrictionOn(x => x.Name).IsInsensitiveLike(filterByName, MatchMode.Anywhere);
            }

            var permissionSubquery = QueryOver.Of <Project>()
                                     .JoinAlias(x => x.Permissions, () => permissionAlias)
                                     .JoinAlias(() => permissionAlias.UserGroup, () => userGroupAlias)
                                     .JoinAlias(() => userGroupAlias.Users, () => userAlias)
                                     .Where(BitwiseExpression.On(() => permissionAlias.Flags).HasBit(PermissionFlag.ReadProject));

            if (includeUserId != null)
            {
                query.WithSubquery.WhereProperty(x => x.Id)
                .In(permissionSubquery.Where(() => userAlias.Id == includeUserId.Value)
                    .Select(x => x.Id));
            }

            if (excludeUserId != null)
            {
                query.WithSubquery.WhereProperty(x => x.Id)
                .NotIn(permissionSubquery.Where(() => userAlias.Id == excludeUserId.Value)
                       .Select(x => x.Id));
            }

            query.OrderBy(x => x.Name).Asc
            .Skip(start)
            .Take(count);

            var list       = query.Future();
            var totalCount = query.ToRowCountQuery().FutureValue <int>();

            return(new ListWithTotalCountResult <Project>
            {
                List = list.ToList(),
                Count = totalCount.Value
            });
        }
Beispiel #11
0
        public void HasAny_WithMatch_ReturnsMatchedUsers()
        {
            CreateUser(Permissions.Read | Permissions.Write | Permissions.Full);
            CreateUser(Permissions.Write);
            CreateUser(Permissions.Read);

            var criteria = BitwiseExpression.On <User>(x => x.Permissions).HasAny(Permissions.Read, Permissions.Write);
            var users    = Query(session => session.QueryOver <User>().Where(criteria).List());

            Assert.That(users.Count == 3);
        }
Beispiel #12
0
        public virtual IList <string> GetTitleAutocomplete(string queryString, BookTypeEnum?bookType, ProjectTypeEnum?projectType,
                                                           IList <int> selectedCategoryIds, IList <long> selectedProjectIds, int count, int userId)
        {
            queryString = EscapeQuery(queryString);

            Resource   resourceAlias   = null;
            Project    projectAlias    = null;
            Snapshot   snapshotAlias   = null;
            Permission permissionAlias = null;
            UserGroup  userGroupAlias  = null;
            User       userAlias       = null;
            BookType   bookTypeAlias   = null;
            Category   categoryAlias   = null;

            var query = GetSession().QueryOver <MetadataResource>()
                        .JoinAlias(x => x.Resource, () => resourceAlias)
                        .JoinAlias(() => resourceAlias.Project, () => projectAlias)
                        .JoinAlias(() => projectAlias.LatestPublishedSnapshot, () => snapshotAlias)
                        .JoinAlias(() => projectAlias.Permissions, () => permissionAlias)
                        .JoinAlias(() => permissionAlias.UserGroup, () => userGroupAlias)
                        .JoinAlias(() => userGroupAlias.Users, () => userAlias)
                        .Where(x => x.Id == resourceAlias.LatestVersion.Id && !resourceAlias.IsRemoved && userAlias.Id == userId && projectAlias.IsRemoved == false)
                        .And(BitwiseExpression.On(() => permissionAlias.Flags).HasBit(PermissionFlag.ShowPublished))
                        .AndRestrictionOn(x => x.Title).IsLike(queryString, MatchMode.Anywhere)
                        .Select(Projections.Distinct(Projections.Property <MetadataResource>(x => x.Title)))
                        .OrderBy(x => x.Title).Asc;

            if (bookType != null)
            {
                query.JoinAlias(() => snapshotAlias.BookTypes, () => bookTypeAlias)
                .Where(() => bookTypeAlias.Type == bookType.Value);
            }

            if (projectType != null)
            {
                query.Where(() => projectAlias.ProjectType == projectType.Value);
            }

            if (selectedCategoryIds.Count > 0 || selectedProjectIds.Count > 0)
            {
                query.JoinAlias(() => projectAlias.Categories, () => categoryAlias, JoinType.LeftOuterJoin)
                .Where(Restrictions.Or(
                           Restrictions.InG(Projections.Property(() => categoryAlias.Id), selectedCategoryIds),
                           Restrictions.InG(Projections.Property(() => projectAlias.Id), selectedProjectIds)
                           ));
            }

            return(query
                   .Take(count)
                   .List <string>());
        }
Beispiel #13
0
        public virtual Resource GetResourceByUserGroupPermissions(int groupId, long resourceId, PermissionFlag permission)
        {
            Resource   resourceAlias   = null;
            Project    projectAlias    = null;
            Permission permissionAlias = null;
            UserGroup  groupAlias      = null;

            var filteredResource = GetSession().QueryOver(() => resourceAlias)
                                   .JoinQueryOver(x => x.Project, () => projectAlias)
                                   .JoinQueryOver(x => x.Permissions, () => permissionAlias)
                                   .JoinQueryOver(x => x.UserGroup, () => groupAlias)
                                   .Where(() => groupAlias.Id == groupId && resourceAlias.Id == resourceId && projectAlias.IsRemoved == false)
                                   .And(BitwiseExpression.On(() => permissionAlias.Flags).HasBit(permission))
                                   .SingleOrDefault();

            return(filteredResource);
        }
Beispiel #14
0
        public virtual IList <long> GetFilteredBookIdListByGroupPermissions(int groupId, IEnumerable <long> bookIds, PermissionFlag permission)
        {
            Project    projectAlias    = null;
            Permission permissionAlias = null;
            UserGroup  groupAlias      = null;

            var filteredBookIds = GetSession().QueryOver(() => projectAlias)
                                  .JoinQueryOver(x => x.Permissions, () => permissionAlias)
                                  .JoinQueryOver(x => permissionAlias.UserGroup, () => groupAlias)
                                  .Select(Projections.Distinct(Projections.Property(() => projectAlias.Id)))
                                  .Where(() => groupAlias.Id == groupId && projectAlias.IsRemoved == false)
                                  .AndRestrictionOn(() => projectAlias.Id).IsInG(bookIds)
                                  .And(BitwiseExpression.On(() => permissionAlias.Flags).HasBit(permission))
                                  .List <long>();

            return(filteredBookIds);
        }
Beispiel #15
0
        public override Object Visit(BitwiseExpression node, Object obj)
        {
            int indent = Convert.ToInt32(obj);

            this.printIndentation(indent);
            this.output.Write("BitwiseExpression ");
            switch (node.Operator)
            {
            case BitwiseOperator.BitwiseOr: this.output.Write("|"); break;

            case BitwiseOperator.BitwiseAnd: this.output.Write("&"); break;

            case BitwiseOperator.BitwiseXOr: this.output.Write("^"); break;

            case BitwiseOperator.ShiftLeft: this.output.Write("<<"); break;

            case BitwiseOperator.ShiftRight: this.output.Write(">>"); break;
            }
            this.output.WriteLine(" Type: {0} [{1}:{2}]", printType(node.ExpressionType), node.Location.Line, node.Location.Column);
            node.FirstOperand.Accept(this, indent + 1);
            node.SecondOperand.Accept(this, indent + 1);
            return(null);
        }
 public CGBitwiseOperation(VisitorILCodeGeneration <T> visitor, object obj, int indent, BitwiseExpression node) : base(visitor, obj, indent, node)
 {
 }
Beispiel #17
0
        public void VisitBitwiseExpression(BitwiseExpression bitwiseExpression)
        {
            VisitExpression(bitwiseExpression.Left);
            object left = ReturnValue;

            VisitExpression(bitwiseExpression.Right);
            object right = ReturnValue;

            ReturnValue = double.NaN;
            if (left != null && right != null) {
                switch (bitwiseExpression.Operator) {
                    case TokenType.BitOr:
                        int i = ConvertToInteger(left) | ConvertToInteger(right);
                        if (i != 0)
                            ReturnValue = (double)i;
                        break;
                    case TokenType.BitXor:
                        int j = ConvertToInteger(left) ^ ConvertToInteger(right);
                        if (j != 0)
                            ReturnValue = (double)j;
                        break;
                    case TokenType.BitAnd:
                        int k = ConvertToInteger(left) & ConvertToInteger(right);
                        if (k != 0)
                            ReturnValue = (double)k;
                        break;
                }
            }
        }
Beispiel #18
0
        public virtual IList <MetadataResource> GetMetadataByBookTypeWithCategories(BookTypeEnum bookTypeEnum, int userId, ProjectTypeEnum projectType,
                                                                                    int start, int count)
        {
            Resource   resourceAlias   = null;
            Snapshot   snapshotAlias   = null;
            BookType   bookTypeAlias   = null;
            Permission permissionAlias = null;
            UserGroup  userGroupAlias  = null;
            User       userAlias       = null;

            var resultList = GetSession().QueryOver <MetadataResource>()
                             .JoinAlias(x => x.Resource, () => resourceAlias)
                             .Where(x => x.Id == resourceAlias.LatestVersion.Id && !resourceAlias.IsRemoved)
                             .WithSubquery.WhereProperty(() => resourceAlias.Project.Id).In(QueryOver.Of <Project>()
                                                                                            .Where(x => x.ProjectType == projectType && x.IsRemoved == false)
                                                                                            .JoinAlias(x => x.LatestPublishedSnapshot, () => snapshotAlias)
                                                                                            .JoinAlias(() => snapshotAlias.BookTypes, () => bookTypeAlias)
                                                                                            .Where(() => bookTypeAlias.Type == bookTypeEnum)
                                                                                            .JoinAlias(x => x.Permissions, () => permissionAlias)
                                                                                            .JoinAlias(() => permissionAlias.UserGroup, () => userGroupAlias)
                                                                                            .JoinAlias(() => userGroupAlias.Users, () => userAlias)
                                                                                            .Where(() => userAlias.Id == userId)
                                                                                            .And(BitwiseExpression.On(() => permissionAlias.Flags).HasBit(PermissionFlag.ShowPublished))
                                                                                            .Select(x => x.Id))
                             .OrderBy(x => x.Title).Asc
                             .Skip(start)
                             .Take(count)
                             .List();

            GetSession().QueryOver <Project>()
            .WhereRestrictionOn(x => x.Id).IsInG(resultList.Select(x => x.Resource.Project.Id))
            .Fetch(SelectMode.Fetch, x => x.Categories)
            .List();

            return(resultList);
        }
 public abstract Object Visit(BitwiseExpression node, Object obj);