private bool CheckLink(UseCaseDiagramNodeData fromData, UseCaseDiagramNodeData toData, UseCaseDiagramLinkData linkData, string category) { if ( (category == Constants.UML_UCD_ANCHOR) && (fromData.Category == Constants.UML_UCD_EDITABLE_NOTE || toData.Category == Constants.UML_UCD_EDITABLE_NOTE) && (fromData.Category != toData.Category) && (fromData.Category != Constants.UML_UCD_NOTE) && (toData.Category != Constants.UML_UCD_NOTE) ) { linkData.Category = category; linkData.Color = Constants.VALID_COLOR; return(IsLinkUniqueBothWays(linkData, category)); } else { string relationship = Uml4Upmm.CheckUCDRelationship(fromData.IRI, toData.IRI, UseCaseDiagramPage.IsValidatingWithModel, out string color, category); if (relationship == null) { return(false); } else { linkData.Category = category; linkData.Text = relationship == "" ? relationship : "<<" + relationship + ">>"; linkData.Color = color; } } return(IsLinkUnique(linkData, category)); }
// vynucení validace diagramu private void Validate_Click(object sender, RoutedEventArgs e) { var originalLinksSource = new ObservableCollection <UseCaseDiagramLinkData>(diagram.LinksSource as ObservableCollection <UseCaseDiagramLinkData>); diagram.LinksSource = new ObservableCollection <UseCaseDiagramLinkData>(); foreach (var linkData in originalLinksSource) { var fromData = (diagram.Model.NodesSource as ObservableCollection <UseCaseDiagramNodeData>).First(x => x.Key == linkData.From); var toData = (diagram.Model.NodesSource as ObservableCollection <UseCaseDiagramNodeData>).First(x => x.Key == linkData.To); var isValid = CheckLink(fromData, toData, linkData, category: linkData.Category); if (isValid) { (diagram.LinksSource as ObservableCollection <UseCaseDiagramLinkData>).Add(linkData); } } // kontrola všech elementů, které jsou ve swimlane var originalNodesSource = (diagram.Model.NodesSource as ObservableCollection <UseCaseDiagramNodeData>); foreach (var nodeData in originalNodesSource) { if (nodeData.Category == Constants.UML_UCD_ACTOR || nodeData.SubGraphKey == null || nodeData.SubGraphKey == "" || nodeData.Category == Constants.UML_UCD_SYSTEM) { nodeData.BorderColor = Constants.VALID_COLOR; nodeData.Text = null; continue; } string groupIRI = (diagram.Model.NodesSource as ObservableCollection <UseCaseDiagramNodeData>).Where(x => x.Key == nodeData.SubGraphKey).Select(x => x.IRI).FirstOrDefault(); if (groupIRI == "" || groupIRI == null) { continue; } if (nodeData != null) { if (nodeData.Category == Constants.UML_UCD_EDITABLE_NOTE || nodeData.Category == Constants.UML_UCD_SYSTEM || nodeData.Category == Constants.UML_UCD_ACTOR) { continue; } else { string elementIRI = nodeData.IRI; if (elementIRI != null && groupIRI != null) { string relationship = Uml4Upmm.CheckUCDSystemRelationship(groupIRI, elementIRI, UseCaseDiagramPage.IsValidatingWithModel, out string color); if (relationship != null) { nodeData.BorderColor = color; nodeData.Text = null; } else { nodeData.BorderColor = Constants.INVALID_COLOR; nodeData.Text = Constants.UML_UCD_UNSUPPORTED; } } } } } }