コード例 #1
0
ファイル: TaskController.cs プロジェクト: jango2015/cooper
        protected virtual void ApplyUpdate(Task t, ChangeLog c)
        {
            var n = c.Name.ToLower();

            if (n.Equals("subject"))
            {
                t.SetSubject(c.Value);
            }
            else if (n.Equals("body"))
            {
                t.SetBody(c.Value);
            }
            else if (n.Equals("priority"))
            {
                t.SetPriority((Priority)Convert.ToInt32(c.Value));
            }
            else if (n.Equals("duetime"))
            {
                t.SetDueTime(string.IsNullOrWhiteSpace(c.Value) ? new DateTime?() : Convert.ToDateTime(c.Value));
            }
            else if (n.Equals("iscompleted"))
            {
                if (Convert.ToBoolean(c.Value))
                {
                    t.MarkAsCompleted();
                }
                else
                {
                    t.MarkAsInCompleted();
                }
            }
            else if (n.Equals("tags"))
            {
                if (c.Type == ChangeType.Insert)
                {
                    t.AddTag(c.Value);
                }
                else if (c.Type == ChangeType.Delete)
                {
                    t.RemoveTag(c.Value);
                }
            }
        }
コード例 #2
0
        protected override void ApplyUpdate(Task task, ChangeLog c)
        {
            base.ApplyUpdate(task, c);

            var teamTask = task as Teams.Task;
            var team     = this.GetTeamOfCurrentAccount <Teams.Member>(teamTask.TeamId);//普通成员即可

            switch (c.Name.ToLower())
            {
            case "assigneeid":
                if (string.IsNullOrWhiteSpace(c.Value))
                {
                    teamTask.RemoveAssignee();
                }
                else
                {
                    teamTask.AssignTo(this.GetMember(team, c.Value));
                }
                break;

            case "projects":
                var p = this.GetProject(team, c.Value);
                if (c.Type == ChangeType.Insert)
                {
                    teamTask.AddToProject(p);
                }
                else if (c.Type == ChangeType.Delete)
                {
                    teamTask.RemoveFromProject(p);
                }
                break;

            case "comments":
                if (c.Type == ChangeType.Insert)
                {
                    teamTask.AddComment(this.GetCurrentMember(team), c.Value);
                }
                //HACK:目前暂不支持删除评论
                break;
            }
        }
コード例 #3
0
 protected override void ApplyUpdate(Task t, ChangeLog c)
 {
     base.ApplyUpdate(t, c);
     //目前暂不支持修改folder
     if (c.Name.Equals("taskfolderid", StringComparison.InvariantCultureIgnoreCase))
         (t as PersonalTask).SetTaskFolder(this.GetTaskFolder(c.Value));
 }
コード例 #4
0
ファイル: TaskController.cs プロジェクト: jango2015/cooper
 private bool IsTaskDelete(ChangeLog c)
 {
     return(c.Type == ChangeType.Delete && string.IsNullOrWhiteSpace(c.Name));
 }
コード例 #5
0
ファイル: PersonalController.cs プロジェクト: sunleepy/cooper
        private void ApplyUpdate(Task t, ChangeLog c)
        {
            if (c.Name.Equals("subject", StringComparison.InvariantCultureIgnoreCase))
                t.SetSubject(c.Value);
            if (c.Name.Equals("body", StringComparison.InvariantCultureIgnoreCase))
                t.SetBody(c.Value);
            if (c.Name.Equals("priority", StringComparison.InvariantCultureIgnoreCase))
                t.SetPriority((Priority)Convert.ToInt32(c.Value));
            if (c.Name.Equals("duetime", StringComparison.InvariantCultureIgnoreCase))
                t.SetDueTime(string.IsNullOrWhiteSpace(c.Value) ? new DateTime?() : Convert.ToDateTime(c.Value));
            if (c.Name.Equals("iscompleted", StringComparison.InvariantCultureIgnoreCase))
                if (Convert.ToBoolean(c.Value))
                    t.MarkAsCompleted();
                else
                    t.MarkAsInCompleted();
            this._taskService.Update(t);

            if (this._log.IsDebugEnabled)
                this._log.DebugFormat("为任务#{0}执行变更{1}|{2}|{3}", t.ID, c.ID, c.Name, c.Value);
        }
コード例 #6
0
ファイル: TaskController.cs プロジェクト: codesharp/cooper
 private bool IsTaskDelete(ChangeLog c)
 {
     return c.Type == ChangeType.Delete && string.IsNullOrWhiteSpace(c.Name);
 }
コード例 #7
0
ファイル: TaskController.cs プロジェクト: codesharp/cooper
        protected virtual void ApplyUpdate(Task t, ChangeLog c)
        {
            var n = c.Name.ToLower();

            if (n.Equals("subject"))
                t.SetSubject(c.Value);
            else if (n.Equals("body"))
                t.SetBody(c.Value);
            else if (n.Equals("priority"))
                t.SetPriority((Priority)Convert.ToInt32(c.Value));
            else if (n.Equals("duetime"))
                t.SetDueTime(string.IsNullOrWhiteSpace(c.Value) ? new DateTime?() : Convert.ToDateTime(c.Value));
            else if (n.Equals("iscompleted"))
                if (Convert.ToBoolean(c.Value))
                    t.MarkAsCompleted();
                else
                    t.MarkAsInCompleted();
            else if (n.Equals("tags"))
                if (c.Type == ChangeType.Insert)
                    t.AddTag(c.Value);
                else if (c.Type == ChangeType.Delete)
                    t.RemoveTag(c.Value);
        }
コード例 #8
0
        private void ApplyChanges(Account account
            , ChangeLog[] list
            , IDictionary<string, string> idChanges
            , Func<Task> ifNew
            , Action<Task, ChangeLog> verify)
        {
            foreach (var c in list)
            {
                try
                {
                    //临时记录无需删除
                    if (this.IsTaskDelete(c) && c.ID.StartsWith(TEMP))
                        continue;

                    Task t;
                    if (idChanges.ContainsKey(c.ID))
                        t = this._taskService.GetTask(long.Parse(idChanges[c.ID]));
                    else if (c.ID.StartsWith(TEMP))
                    {
                        t = ifNew();
                        this._taskService.Create(t);
                        idChanges.Add(c.ID, t.ID.ToString());//添加到id变更
                    }
                    else
                        t = this._taskService.GetTask(long.Parse(c.ID));

                    if (t == null)
                    {
                        this._log.WarnFormat("执行变更时出现不存在的任务#{0}", c.ID);
                        continue;
                    }

                    //执行变更权限验证
                    verify(t, c);

                    //UNDONE:根据最后更新时间判断变更记录有效性,时间间隔过长的变更会被丢弃?
                    //由于LastUpdateTime粒度过大,不适合这种细粒度变更比对,需要引入Merge机制来处理文本更新合并问题
                    DateTime createTime;
                    if (DateTime.TryParse(c.CreateTime, out createTime))
                        if (t.LastUpdateTime - createTime > TimeSpan.FromMinutes(5))
                            this._log.WarnFormat("变更创建时间{0}与任务最后更新时间{1}的隔间过长", c.CreateTime, t.LastUpdateTime);

                    if (this.IsTaskDelete(c))
                        this._taskService.Delete(t);
                    else
                    {
                        this.ApplyUpdate(t, c);
                        this._taskService.Update(t);
                    }
                    if (this._log.IsInfoEnabled)
                        this._log.InfoFormat("为任务#{0}执行变更{1}|{2}|{3}|{4}|{5}", t.ID, c.Type, c.ID, c.Name, c.Value, c.CreateTime);
                }
                catch (Exception e)
                {
                    this._log.Error(string.Format("执行变更时异常:{0}|{1}|{2}|{3}", c.Type, c.ID, c.Name, c.Value), e);
                }
            }
        }