public ListWorklistsResponse ListWorklists(ListWorklistsRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            var worklistClasses = ListClassesHelper(request.ClassNames, request.Categories, request.IncludeStatic);

            // grab the persistent worklists
            var broker = PersistenceContext.GetBroker <IWorklistBroker>();
            var persistentClassNames = CollectionUtils.Select(worklistClasses, t => !Worklist.GetIsStatic(t))
                                       .ConvertAll(Worklist.GetClassName);

            var worklists = broker.Find(request.WorklistName, request.IncludeUserDefinedWorklists, persistentClassNames, request.Page);

            // optionally include the static ones
            if (request.IncludeStatic)
            {
                foreach (var worklistClass in worklistClasses)
                {
                    if (Worklist.GetIsStatic(worklistClass))
                    {
                        worklists.Add(WorklistFactory.Instance.CreateWorklist(worklistClass));
                    }
                }
            }

            var adminAssembler = new WorklistAdminAssembler();

            return(new ListWorklistsResponse(
                       CollectionUtils.Map <Worklist, WorklistAdminSummary, List <WorklistAdminSummary> >(
                           worklists,
                           worklist => adminAssembler.CreateWorklistSummary(worklist, this.PersistenceContext))));
        }
        public AddWorklistResponse AddWorklist(AddWorklistRequest request)
        {
            if (string.IsNullOrEmpty(request.Detail.Name))
            {
                throw new RequestValidationException(SR.ExceptionWorklistNameRequired);
            }

            // create instance of worklist owner
            var owner = CreateOwner(request.Detail, request.IsUserWorklist);

            // ensure user has access to create this worklist
            CheckAccess(owner);

            CheckWorklistCountRestriction(owner);

            // create instance of appropriate class
            var worklist = WorklistFactory.Instance.CreateWorklist(request.Detail.WorklistClass.ClassName);

            // set owner
            worklist.Owner = owner;

            // update properties
            UpdateWorklistHelper(request.Detail, worklist);

            PersistenceContext.Lock(worklist, DirtyState.New);
            PersistenceContext.SynchState();

            var adminAssembler = new WorklistAdminAssembler();

            return(new AddWorklistResponse(adminAssembler.CreateWorklistSummary(worklist, this.PersistenceContext)));
        }
        public UpdateWorklistResponse UpdateWorklist(UpdateWorklistRequest request)
        {
            var worklist = this.PersistenceContext.Load <Worklist>(request.EntityRef);

            // check if user can update
            CheckAccess(worklist.Owner);

            // update
            UpdateWorklistHelper(request.Detail, worklist);

            var adminAssembler = new WorklistAdminAssembler();

            return(new UpdateWorklistResponse(adminAssembler.CreateWorklistSummary(worklist, this.PersistenceContext)));
        }