public override void Load()
        {
            base.Load();

            ShellAction refreshAction = new ShellAction(this._rootWorkItem);

            refreshAction.Caption      = StringResources.Dashboard_Refresh;
            refreshAction.IsEnabled    = true;
            refreshAction.IsAuthorized = true;
            refreshAction.Id           = "action://Imi.SupplyChain.UX.Shell/DashboardRefresh";

            ActionCatalogService.RegisterActionImplementation(refreshAction.Id, OnDashboardRefresh);

            ShellInteractionService.Actions.Add(refreshAction);

            ShellAction arrangeAction = new ShellAction(this._rootWorkItem);

            arrangeAction.Caption      = StringResources.Dashboard_Arrange;
            arrangeAction.IsEnabled    = true;
            arrangeAction.IsAuthorized = true;
            arrangeAction.Id           = "action://Imi.SupplyChain.UX.Shell/DashboardArrange";

            ActionCatalogService.RegisterActionImplementation(arrangeAction.Id, OnDashboardArrange);

            ShellInteractionService.Actions.Add(arrangeAction);

            ControlledWorkItem <ShellController> shellWorkItem = _rootWorkItem.WorkItems.FindByType <ControlledWorkItem <ShellController> >().Last();

            _dashboardView = shellWorkItem.SmartParts.FindByType <IDashboardView>().Last();
        }
        public void UpdateActions(object owner)
        {
            if (unauthorizedActions.Count > 0 || unauthorizedDrillDownActions.Count > 0)
            {
                List <AuthOperation> operationsList = new List <AuthOperation>();

                operationsList.AddRange(unauthorizedActions.Select(a => new AuthOperation()
                {
                    Operation = a.Operation, Action = a, isDrillDown = false
                }));

                operationsList.AddRange(unauthorizedDrillDownActions.Select(a => new AuthOperation()
                {
                    Operation = a.Operation, Action = a, isDrillDown = true
                }));

                unauthorizedActions.Clear();
                unauthorizedDrillDownActions.Clear();

                ThreadPool.QueueUserWorkItem(CheckAuthorization, operationsList);
            }

            if (actionsDictionary.ContainsKey(owner))
            {
                foreach (ShellAction action in actionsDictionary[owner].Intersect(authorizedActions))
                {
                    action.IsEnabled = ActionCatalogService.CanExecute(action.Id, action.WorkItem, this, action) && action.IsAuthorized;
                }
            }
        }
        public object ExecuteSpecialFunction(string action, string name, object[] args, WorkItem context)
        {
            if (ActionCatalogService != null)
            {
                return(ActionCatalogService.ExecuteSpecialFunction(action, name, args, context));
            }

            return(null);
        }
        private void CheckAuthorization(object state)
        {
            //IList<ShellAction> actions = state as IList<ShellAction>;

            //var ops = (from a in actions
            //select new AuthOperation() { Operation = a.Operation, Action = a } as IAuthOperation).ToArray();

            IAuthOperation[] ops = ((List <AuthOperation>)state).ToArray();

            try
            {
                AuthorizationService.CheckAuthorization(applicationName, ops);

                currentContext.Send(delegate(object data)
                {
                    foreach (AuthOperation operation in ops)
                    {
                        ShellAction action = operation.Action;

                        if (operation.isDrillDown)
                        {
                            authorizedDrillDownActions.Add(action);
                        }
                        else
                        {
                            authorizedActions.Add(action);
                        }

                        action.IsAuthorized = operation.IsAuthorized;
                        action.IsEnabled    = ActionCatalogService.CanExecute(action.Id, action.WorkItem, this, action);
                    }
                }, null);
            }
            catch (Exception ex)
            {
                currentContext.Send(delegate(object data)
                {
                    throw ex;
                }, null);
            }
        }
 public void Initialize()
 {
     catalog = new ActionCatalogService();
 }