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;
                            }
                        }
                    }
                }
            }
        }