public T Get <T>(TaskField <T> field, TaskId id)
        {
            Debug.Assert(field != null);
            Debug.Assert(!id.IsDefault);

            return(_taskMap[id].GetValue(field));
        }
        public ProjectData SetRaw(TaskField field, TaskId id, object value)
        {
            Debug.Assert(field != null);
            Debug.Assert(!id.IsDefault);

            var task = _taskMap[id].SetValue(field, value);

            return(WithTaskMap(_taskMap.SetItem(task.Id, task)));
        }
        public object GetValue(TaskField field)
        {
            if (field == null)
            {
                throw new ArgumentNullException(nameof(field));
            }

            if (!_fields.TryGetValue(field, out var result))
            {
                return(field.DefaultValue);
            }

            return(result);
        }
        public Task SetValue(TaskField field, object value)
        {
            if (field == null)
            {
                throw new ArgumentNullException(nameof(field));
            }

            if (field.IsReadOnly ||
                value == null && !field.Type.IsClass ||
                value != null && !field.Type.IsAssignableFrom(value.GetType()))
            {
                throw new ArgumentException(nameof(value));
            }

            return(Project.SetTaskField(this, field, value));
        }
        public ProjectData Set(TaskField field, TaskId id, object value)
        {
            Debug.Assert(field != null);
            Debug.Assert(!id.IsDefault);

            if (field == TaskFields.Ordinal)
            {
                return(SetTaskOrdinal(this, id, (int)value));
            }
            else if (field == TaskFields.Name)
            {
                return(SetTaskName(this, id, (string)value));
            }
            else if (field == TaskFields.Duration)
            {
                return(SetTaskDuration(this, id, (TimeSpan)value));
            }
            else if (field == TaskFields.Work)
            {
                return(SetTaskWork(this, id, (TimeSpan)value));
            }
            else if (field == TaskFields.Predecessors)
            {
                return(SetTaskPredecessors(this, id, (string)value));
            }
            else if (field == TaskFields.Successors)
            {
                return(SetTaskSuccessors(this, id, (string)value));
            }
            else if (field == TaskFields.ResourceNames)
            {
                return(SetTaskResourceNames(this, id, (string)value));
            }
            else if (field == TaskFields.ResourceInitials)
            {
                return(SetTaskResourceInitials(this, id, (string)value));
            }
            else
            {
                return(SetRaw(field, id, value));
            }
        }
        public TaskData SetValue(TaskField field, object value)
        {
            if (field == null)
            {
                throw new ArgumentNullException(nameof(field));
            }

            if (value == null && !field.Type.IsClass ||
                value != null && !field.Type.IsAssignableFrom(value.GetType()))
            {
                throw new ArgumentException(nameof(value));
            }

            var existingValue = GetValue(field);

            if (Equals(value, existingValue))
            {
                return(this);
            }

            var fields = _fields.SetItem(field, value);

            if (field == TaskFields.Duration)
            {
                var oldValue = (TimeSpan)existingValue;
                var newValue = (TimeSpan)value;

                if (oldValue == TimeSpan.Zero && newValue != TimeSpan.Zero)
                {
                    fields = fields.SetItem(TaskFields.IsMilestone, false);
                }
                else if (oldValue != TimeSpan.Zero && newValue == TimeSpan.Zero)
                {
                    fields = fields.SetItem(TaskFields.IsMilestone, true);
                }
            }

            return(new TaskData(fields));
        }
 public ProjectData Reset(TaskField field, TaskId id)
 {
     if (field == TaskFields.Predecessors)
     {
         return(ResetTaskPredecessors(this, id));
     }
     else if (field == TaskFields.Successors)
     {
         return(ResetTaskSuccessors(this, id));
     }
     else if (field == TaskFields.ResourceNames)
     {
         return(ResetTaskResourceNames(this, id));
     }
     else if (field == TaskFields.ResourceInitials)
     {
         return(ResetTaskResourceInitials(this, id));
     }
     else
     {
         Debug.Assert(false, $"Unexpected field passed to Reset: {field}");
         return(this);
     }
 }
 public object GetValue(TaskField field)
 {
     return(_data.GetValue(field));
 }
 public Task SetValue <T>(TaskField <T> field, T value)
 {
     return(SetValue((TaskField)field, value));
 }
 public T GetValue <T>(TaskField <T> field)
 {
     return((T)GetValue((TaskField)field));
 }
 public bool HasValue(TaskField field)
 {
     return(_data.HasValue(field));
 }
 public bool HasValue(TaskField field)
 {
     return(_fields.ContainsKey(field));
 }
Exemple #13
0
        internal Task SetTaskField(Task task, TaskField field, object value)
        {
            var project = Data.Set(field, task.Id, value);

            return(UpdateProject(project).GetTask(task.Id));
        }