public void AddIncomingRelation(IClassRelation relation) { if (_incomingRelations.Any(x => x.Name == relation.Name)) { throw new DesignModelException(this, $"Design model already contains relation '{relation.Name}'"); } _incomingRelations.Add(relation); }
/// <summary> /// Returns an attribute with the given name. Throws an exception if not found. /// </summary> /// <param name="relation"></param> /// <param name="name"></param> /// <returns></returns> public static IClassAttribute GetAttribute(this IClassRelation relation, string name) { var attribute = relation.Attributes.FirstOrDefault(x => x.Name == name); if (attribute == null) { throw new ParseException(((IDesignModel)relation).ParseLocation, $"Attribute '{name}' not found in relation '{relation.Name}'"); } return(attribute); }
public virtual IClassRelation CloneRelation(IClassRelation sourceRelation, IClassModel destinationClassModel, IParseLocationInfo parseLocation) { var relation = new ClassRelation(sourceRelation.Name, parseLocation: parseLocation); relation.CopyPropertiesFrom(sourceRelation, parseLocation); relation.Destination = destinationClassModel; AddOutgoingRelation(relation); destinationClassModel.AddIncomingRelation(relation); return(relation); }
public static void Resolve(this ClassAttributeReference reference, IClassRelation relation) { if (reference.Target != null) { return; } var attribute = relation.Attributes.FirstOrDefault(x => x.Name == reference.Name); if (attribute == null) { throw new ParseException(reference.ParseLocation, $"Attribute '{reference.Name}' not found from relation '{relation.Name}'."); } reference.Target = attribute; }
public static ClassAttributeReference CreateRelationAttributeReference(this IClassRelation classRelation, string attributeName, IParseLocationInfo parseLocation) { return(new ClassAttributeReference(attributeName, parseLocation)); }