コード例 #1
0
        public async void Post_Ok()
        {
            var widget = new TaskWidget();

            widget.CronExpression   = Longbow.Tasks.Cron.Secondly(5);
            widget.Name             = "單次任務";
            widget.TaskExecutorName = "Bootstrap.Admin.DefaultTaskExecutor";

            // 演示模式下禁止移除系統内置任務
            var resp = await client.PostAsJsonAsync <TaskWidget, bool>("/api/Tasks", widget);

            Assert.False(resp);

            resp = await client.DeleteAsJsonAsync <IEnumerable <string>, bool>("/api/Tasks", new string[] { widget.Name });

            Assert.False(resp);

            widget.Name = "Test-Widget";
            resp        = await client.PostAsJsonAsync <TaskWidget, bool>("/api/Tasks", widget);

            Assert.True(resp);

            resp = await client.DeleteAsJsonAsync <IEnumerable <string>, bool>("/api/Tasks", new string[] { widget.Name });

            Assert.True(resp);
        }
コード例 #2
0
        public bool Post([FromBody] TaskWidget widget)
        {
            // 判断 Cron 表达式
            if (string.IsNullOrEmpty(widget.CronExpression))
            {
                return(false);
            }

            // 系统内置任务禁止更改
            // 演示模式下禁止删除内置任务
            if (DictHelper.RetrieveSystemModel() && _tasks.Any(t => t.Equals(widget.Name, StringComparison.OrdinalIgnoreCase)))
            {
                return(false);
            }

            // 加载任务执行体
            // 此处可以扩展为任意 DLL 中的任意继承 ITask 接口的实体类
            var taskExecutor = LgbActivator.CreateInstance <ITask>("Bootstrap.Admin", widget.TaskExecutorName);

            if (taskExecutor == null)
            {
                return(false);
            }

            // 此处未存储到数据库中,直接送入任务中心
            TaskServicesManager.Remove(widget.Name);
            TaskServicesManager.GetOrAdd(widget.Name, token => taskExecutor.Execute(token), TriggerBuilder.Build(widget.CronExpression));
            return(true);
        }
コード例 #3
0
        public async void Post_Ok()
        {
            var widget = new TaskWidget();

            // widget Cron 表达式為 ”“
            var resp = await Client.PostAsJsonAsync <TaskWidget, bool>("/api/Tasks", widget);

            Assert.False(resp);

            // task executor 不合法
            widget.CronExpression   = Longbow.Tasks.Cron.Secondly(5);
            widget.TaskExecutorName = "UnitTest-Widget";
            resp = await Client.PostAsJsonAsync <TaskWidget, bool>("/api/Tasks", widget);

            Assert.False(resp);

            widget.TaskExecutorName = "Bootstrap.Admin.DefaultTaskExecutor";
            widget.Name             = "UnitTest-Task";
            resp = await Client.PostAsJsonAsync <TaskWidget, bool>("/api/Tasks", widget);

            Assert.True(resp);

            // Delete
            resp = await Client.DeleteAsJsonAsync <IEnumerable <string>, bool>("/api/Tasks", new string[] { widget.Name });

            Assert.True(resp);
        }
コード例 #4
0
 /// <summary>
 /// Add 'TaskWidget' object to 'TaskWidget' collection
 /// </summary>
 /// <param name="widget">'TaskWidget' object</param>
 /// <param name="collectionName">'TaskWidget' collection</param>
 /// <param name="index">Index of the 'TaskWidget' object</param>
 /// <returns>Return 'true' if the object addition was succesfull</returns>
 public bool AddToCollection(TaskWidget widget, string collectionName, int index = 0)
 {
     if (widget != null &&
         collectionName != null)
     {
         ObservableCollection<TaskWidget> collection = this.GetTaskWidgetCollection(collectionName);
         if (collection != null)
         {
             if (index < 0)
             {
                 index = 0;
             }
             else if (index >= collection.Count)
             {
                 index = collection.Count;
             }
             collection.Insert(index, widget);
         }
     }
     return false;
 }
コード例 #5
0
 /// <summary>
 /// Remove 'TaskWidget' object from 'TaskWidget' collection
 /// </summary>
 /// <param name="widget">'TaskWidget' object</param>
 /// <param name="collectionName">'TaskWidget' collection</param>
 /// <returns>Return 'true' if the object removel was succesfull</returns>
 public bool RemoveFromCollection(TaskWidget widget, string collectionName = null)
 {
     if (widget != null)
     {
         if (String.IsNullOrWhiteSpace(collectionName))
         {
             collectionName = this.FindCollectionName(widget);
         }
         if (!String.IsNullOrWhiteSpace(collectionName))
         {
             ObservableCollection<TaskWidget> collection = this.GetTaskWidgetCollection(collectionName);
             if (collectionName != null)
             {
                 collection.Remove(widget);
                 return true;
             }
         }
     }
     return false;
 }
コード例 #6
0
 /// <summary>
 /// Find item index based on 'TaskWidget' object
 /// </summary>
 /// <param name="widget">'TaskWidget' object</param>
 /// <returns>Returns item index (-1 if 'TaskWidget' object exist and belongs to collection)</returns>
 public int GetTaskWidgetIndex(TaskWidget widget)
 {
     if (widget != null)
     {
         ObservableCollection<TaskWidget> collection = this.GetTaskWidgetCollection(widget.CollectionName);
         if (collection != null)
         {
             return collection.IndexOf(widget);
         }
     }
     return -1;
 }
コード例 #7
0
 /// <summary>
 /// Find collection name based on 'TaskWidget' object
 /// </summary>
 /// <param name="widget">'TaskWidget' object</param>
 /// <returns>Returns collection name (null if collection name doesn't exist)</returns>
 public string FindCollectionName(TaskWidget widget)
 {
     Dictionary<string, ObservableCollection<TaskWidget>>.Enumerator e = _taskWidgetCollections.GetEnumerator();
     while (e.MoveNext())
     {
         if (e.Current.Value.Contains(widget))
         {
             return e.Current.Key;
         }
     }
     return null;
 }
コード例 #8
0
 /// <summary>
 /// 'ItemEditWindowViewModel' constructor
 /// </summary>
 /// <param name="taskWidget">Task widget object to edit</param>
 public ItemEditWindowViewModel(TaskWidget taskWidget)
 {
     this.SetTaskWidget(taskWidget);
 }
コード例 #9
0
 /// <summary>
 /// Set the task widget object to edit
 /// </summary>
 /// <param name="taskWidget"></param>
 public void SetTaskWidget(TaskWidget taskWidget)
 {
     _taskWidget = taskWidget;
     _itemContent = _taskWidget.TaskContent;
 }