示例#1
0
        public static IEnumerable <IGraphElementModel> DeleteElements(this IGraphModel self, IReadOnlyCollection <IGraphElementModel> graphElementModels)
        {
            var stickyNoteModels           = new HashSet <IStickyNoteModel>();
            var placematModels             = new HashSet <IPlacematModel>();
            var variableDeclarationsModels = new HashSet <IVariableDeclarationModel>();
            var edgeModels = new HashSet <IEdgeModel>();
            var nodeModels = new HashSet <INodeModel>();

            foreach (var element in graphElementModels)
            {
                switch (element)
                {
                case IStickyNoteModel stickyNoteModel:
                    stickyNoteModels.Add(stickyNoteModel);
                    break;

                case IPlacematModel placematModel:
                    placematModels.Add(placematModel);
                    break;

                case IVariableDeclarationModel variableDeclarationModel:
                    variableDeclarationsModels.Add(variableDeclarationModel);
                    break;

                case IEdgeModel edgeModel:
                    edgeModels.Add(edgeModel);
                    break;

                case INodeModel nodeModel:
                    nodeModels.Add(nodeModel);
                    break;
                }
            }

            // Add nodes that would be backed by declaration models.
            nodeModels.AddRangeInternal(variableDeclarationsModels.SelectMany(d => self.FindReferencesInGraph <IHasDeclarationModel>(d).OfType <INodeModel>()));

            // Add edges connected to the deleted nodes.
            foreach (var portModel in nodeModels.OfType <IPortNodeModel>().SelectMany(n => n.Ports))
            {
                edgeModels.AddRangeInternal(self.EdgeModels.Where(e => e.ToPort == portModel || e.FromPort == portModel));
            }

            return(self.DeleteStickyNotes(stickyNoteModels)
                   .Concat(self.DeletePlacemats(placematModels))
                   .Concat(self.DeleteEdges(edgeModels))
                   .Concat(self.DeleteVariableDeclarations(variableDeclarationsModels, deleteUsages: false))
                   .Concat(self.DeleteNodes(nodeModels, deleteConnections: false)).ToList());
        }
示例#2
0
 public static IReadOnlyCollection <IGraphElementModel> DeleteEdge(this IGraphModel self, IEdgeModel edgeToDelete)
 {
     return(self.DeleteEdges(new[] { edgeToDelete }));
 }