public void Check() { if (_items.Any(p => p.Kind == KindOfLinguisticVariableConstraintItem.Unknown)) { throw new Exception("Linguistic variable constraints can not be Unknown!"); } if (_items.Any(p => p.Kind == KindOfLinguisticVariableConstraintItem.Inheritance)) { if (_items.Count(p => p.Kind == KindOfLinguisticVariableConstraintItem.Inheritance) > 1) { throw new Exception("Linguistic variable's constraints for inheritance is duplicated!"); } if (!_items.Any(p => p.Kind == KindOfLinguisticVariableConstraintItem.Relation && p.RelationName.NameValue == "is")) { var relationItem = new LinguisticVariableConstraintItem() { Kind = KindOfLinguisticVariableConstraintItem.Relation }; relationItem.RelationName = NameHelper.CreateName("is"); _items.Add(relationItem); } } if (_items.Any(p => p.Kind == KindOfLinguisticVariableConstraintItem.Relation)) { var groppedItems = _items.Where(p => p.Kind == KindOfLinguisticVariableConstraintItem.Relation).GroupBy(p => p.RelationName).Where(p => p.Count() > 1).Select(p => $"`{p.Key.NameValue}`"); if (groppedItems.Any()) { if (groppedItems.Count() == 1) { throw new Exception($"Linguistic variable's constraint for relation {groppedItems.First()} is duplicated!"); } else { throw new Exception($"Linguistic variable's constraints for relation {string.Join(", ", groppedItems)} are duplicated!"); } } if (_items.Any(p => p.Kind == KindOfLinguisticVariableConstraintItem.Relation && p.RelationName.NameValue == "is") && !_items.Any(p => p.Kind == KindOfLinguisticVariableConstraintItem.Inheritance)) { var inheritanceItem = new LinguisticVariableConstraintItem() { Kind = KindOfLinguisticVariableConstraintItem.Inheritance }; _items.Add(inheritanceItem); } } }
public void AddItem(LinguisticVariableConstraintItem item) { if (item == null) { throw new ArgumentNullException(nameof(item)); } if (_items.Contains(item)) { return; } _items.Add(item); }
/// <summary> /// Clones the instance using special context and returns cloned instance. /// </summary> /// <param name="context">Special context for providing references continuity.</param> /// <returns>Cloned instance.</returns> public LinguisticVariableConstraintItem Clone(Dictionary <object, object> context) { if (context.ContainsKey(this)) { return((LinguisticVariableConstraintItem)context[this]); } var result = new LinguisticVariableConstraintItem(); context[this] = result; result.Kind = Kind; result.RelationName = RelationName.Clone(context); return(result); }