public static bool VerifyAnyOverlap(this Term source, TimeBox timeBox) { var lowestTerm = source.GetLowestTerm() as Term; var convertTerms = timeBox.GetCoveredTermsWithAbsent(lowestTerm).ToArray(); if (lowestTerm == source) { return(timeBox.TermSet.Where(o => o != source && o.Level == source.Level).Any(o => { var overlap = source.AnyOverlap(o); return overlap; })); } var closestBottomTerm = timeBox.GetClosestBottom(source); if (closestBottomTerm != source.Bottom) { return(true); } return(convertTerms.Where(o => o != source || o.Id != source.Id).OrderBy(o => o.Start).Any(o => o.Id != source.Id && o.Level > source.Level ? source.OverlapNotEnclosed(o) : o.OverlapNotEnclosed(source))); }
private static bool DependencyTermCreation(TimeBox sender, Term other, IOrderedEnumerable<Term> orderedTerms) { var newTermType = other.GetType(); var closestBottom = sender.GetClosestBottom(other); var overlapping = false; var canLandingOn = false; foreach (var t in orderedTerms) { var insiede = other.IsInTheRange(t.Start, t.End); overlapping = t.AnyOverlap(other) && !insiede; //oh! No~ if (overlapping) { other.Exception = new TermException(t, "AnyOverlap"); break; } canLandingOn = t.CanBeOverlap(newTermType); if (!canLandingOn && insiede) { other.Exception = new TermException(t, "RelationIncorrect"); break; }// find right position but no right relation if (canLandingOn && insiede) { other.Bottom = closestBottom; break; } } return overlapping == false && canLandingOn; }
private static bool DependencyTermCreation(TimeBox sender, Term other, IOrderedEnumerable <Term> orderedTerms) { var newTermType = other.GetType(); var closestBottom = sender.GetClosestBottom(other); var overlapping = false; var canLandingOn = false; foreach (var t in orderedTerms) { var insiede = other.IsInTheRange(t.Start, t.End); overlapping = t.AnyOverlap(other) && !insiede; //oh! No~ if (overlapping) { other.Exception = new TermException(t, "AnyOverlap"); break; } canLandingOn = t.CanBeOverlap(newTermType); if (!canLandingOn && insiede) { other.Exception = new TermException(t, "RelationIncorrect"); break; }// find right position but no right relation if (canLandingOn && insiede) { other.Bottom = closestBottom; break; } } return(overlapping == false && canLandingOn); }