示例#1
0
 public void AnnotateGraphElements(YCompClient ycompClient)
 {
     foreach (KeyValuePair <INode, string> nodeToName in annotatedNodes)
     {
         ycompClient.AnnotateElement(nodeToName.Key, nodeToName.Value);
     }
     foreach (KeyValuePair <IEdge, string> edgeToName in annotatedEdges)
     {
         ycompClient.AnnotateElement(edgeToName.Key, edgeToName.Value);
     }
 }
示例#2
0
        private void HighlightNode(INode node, string name, bool addAnnotation)
        {
            if (addAnnotation)
            {
                if (ycompClient.dumpInfo.IsExcludedGraph())
                {
                    ycompClient.AddNodeEvenIfGraphExcluded(node);
                }

                ycompClient.ChangeNode(node, realizers.MatchedNodeRealizer);
                renderRecorder.AddNodeAnnotation(node, name);
            }
            else
            {
                ycompClient.ChangeNode(node, null);
                ycompClient.AnnotateElement(node, null);
                renderRecorder.RemoveNodeAnnotation(node);
            }
        }
示例#3
0
        // applies changes recorded so far, leaving a graph without visible changes behind (e.g. no annotations)
        public void ApplyChanges(YCompClient ycompClient)
        {
            foreach (INode node in addedNodes.Keys)
            {
                ycompClient.ChangeNode(node, null);
                ycompClient.AnnotateElement(node, null);
            }
            foreach (IEdge edge in addedEdges.Keys)
            {
                ycompClient.ChangeEdge(edge, null);
                ycompClient.AnnotateElement(edge, null);
            }

            foreach (String edgeName in deletedEdges)
            {
                ycompClient.DeleteEdge(edgeName);
            }
            foreach (String nodeName in deletedNodes)
            {
                ycompClient.DeleteNode(nodeName);
            }

            foreach (INode node in retypedNodes.Keys)
            {
                ycompClient.ChangeNode(node, null);
            }
            foreach (IEdge edge in retypedEdges.Keys)
            {
                ycompClient.ChangeEdge(edge, null);
            }

            foreach (INode node in annotatedNodes.Keys)
            {
                ycompClient.AnnotateElement(node, null);
            }
            foreach (IEdge edge in annotatedEdges.Keys)
            {
                ycompClient.AnnotateElement(edge, null);
            }
        }
        private void AnnotateMatch(IMatch match, bool addAnnotation, string prefix, int nestingLevel, bool topLevel)
        {
            const int PATTERN_NESTING_DEPTH_FROM_WHICH_ON_TO_CLIP_PREFIX = 7;

            for (int i = 0; i < match.NumberOfNodes; ++i)
            {
                INode        node        = match.getNodeAt(i);
                IPatternNode patternNode = match.Pattern.Nodes[i];
                if (addAnnotation)
                {
                    if (patternNode.PointOfDefinition == match.Pattern ||
                        patternNode.PointOfDefinition == null && topLevel)
                    {
                        String name = match.Pattern.Nodes[i].UnprefixedName;
                        if (nestingLevel > 0)
                        {
                            if (nestingLevel < PATTERN_NESTING_DEPTH_FROM_WHICH_ON_TO_CLIP_PREFIX)
                            {
                                name = prefix + "/" + name;
                            }
                            else
                            {
                                name = "/|...|=" + nestingLevel + "/" + name;
                            }
                        }
                        renderRecorder.AddNodeAnnotation(node, name);
                    }
                }
                else
                {
                    ycompClient.AnnotateElement(node, null);
                    renderRecorder.RemoveNodeAnnotation(node);
                }
            }
            for (int i = 0; i < match.NumberOfEdges; ++i)
            {
                IEdge        edge        = match.getEdgeAt(i);
                IPatternEdge patternEdge = match.Pattern.Edges[i];
                if (addAnnotation)
                {
                    if (patternEdge.PointOfDefinition == match.Pattern ||
                        patternEdge.PointOfDefinition == null && topLevel)
                    {
                        String name = match.Pattern.Edges[i].UnprefixedName;
                        if (nestingLevel > 0)
                        {
                            if (nestingLevel < PATTERN_NESTING_DEPTH_FROM_WHICH_ON_TO_CLIP_PREFIX)
                            {
                                name = prefix + "/" + name;
                            }
                            else
                            {
                                name = "/|...|=" + nestingLevel + "/" + name;
                            }
                        }
                        renderRecorder.AddEdgeAnnotation(edge, name);
                    }
                }
                else
                {
                    ycompClient.AnnotateElement(edge, null);
                    renderRecorder.RemoveEdgeAnnotation(edge);
                }
            }
            AnnotateSubpatternMatches(match, addAnnotation, prefix, nestingLevel);
            AnnotateIteratedsMatches(match, addAnnotation, prefix, nestingLevel);
            AnnotateAlternativesMatches(match, addAnnotation, prefix, nestingLevel);
            AnnotateIndependentsMatches(match, addAnnotation, prefix, nestingLevel);
        }