using Tango.BL.Interfaces; using System; using System.Collections.Generic; using System.Collections.Specialized; using System.ComponentModel; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media; using Tango.Core; using Tango.Core.Threading; using Newtonsoft.Json; using System.Collections.ObjectModel; namespace Tango.BL.Entities { public class SegmentsGroup: SegmentsGroupBase, ISegment { [NotMapped] [JsonIgnore] public ObservableCollection OrderedSegments { get { return Segments.OrderBy(x => x.SegmentIndex).ToObservableCollection(); } } [NotMapped] [JsonIgnore] public virtual SynchronizedObservableCollection BrushStops { get { return OrderedSegments.SelectMany(x => x.BrushStops).OrderBy(x => x.StopIndex).ToSynchronizedObservableCollection(); } } public SegmentsGroup() : base() { } public override SegmentsGroup Clone() { SegmentsGroup cloned = base.Clone(); cloned.Segments = Segments.Select(x => x.Clone()).ToSynchronizedObservableCollection(); foreach (var stop in cloned.Segments) { stop.SegmentsGroupGuid = cloned.Guid; stop.SegmentsGroup = cloned; } return cloned; } /// /// Clones this segment and assigns it to the specified job. /// /// The job. /// public SegmentsGroup Clone(Job job) { SegmentsGroup cloned = base.Clone(); cloned.Segments = Segments.Select(x => x.Clone(job)).ToSynchronizedObservableCollection(); foreach (var segment in cloned.Segments) { segment.SegmentsGroupGuid = cloned.Guid; segment.SegmentsGroup = cloned; } cloned.Job = job; cloned.JobGuid = job.Guid; return cloned; } ISegment ISegment.Clone() { return Clone() as ISegment; } ISegment ISegment.Clone(Job job) { return Clone(job) as ISegment; } } }