src/Tools/Graphview/mutator.scala
changeset 59228 56b34fc7a015
parent 59221 f779f83ef4ec
child 59240 e411afcfaa29
equal deleted inserted replaced
59227:0df87ade7052 59228:56b34fc7a015
    23   class Graph_Filter(
    23   class Graph_Filter(
    24     val name: String,
    24     val name: String,
    25     val description: String,
    25     val description: String,
    26     pred: Model.Graph => Model.Graph) extends Filter
    26     pred: Model.Graph => Model.Graph) extends Filter
    27   {
    27   {
    28     def filter(sub: Model.Graph) : Model.Graph = pred(sub)
    28     def filter(graph: Model.Graph) : Model.Graph = pred(graph)
    29   }
    29   }
    30 
    30 
    31   class Graph_Mutator(
    31   class Graph_Mutator(
    32     val name: String,
    32     val name: String,
    33     val description: String,
    33     val description: String,
    34     pred: (Model.Graph, Model.Graph) => Model.Graph) extends Mutator
    34     pred: (Model.Graph, Model.Graph) => Model.Graph) extends Mutator
    35   {
    35   {
    36     def mutate(complete: Model.Graph, sub: Model.Graph): Model.Graph = pred(complete, sub)
    36     def mutate(complete_graph: Model.Graph, graph: Model.Graph): Model.Graph =
       
    37       pred(complete_graph, graph)
    37   }
    38   }
    38 
    39 
    39   class Node_Filter(
    40   class Node_Filter(
    40     name: String,
    41     name: String,
    41     description: String,
    42     description: String,
   139   case class Add_Node_Expression(regex: String)
   140   case class Add_Node_Expression(regex: String)
   140     extends Graph_Mutator(
   141     extends Graph_Mutator(
   141       "Add by name",
   142       "Add by name",
   142       "Adds every node whose name matches the regex. " +
   143       "Adds every node whose name matches the regex. " +
   143       "Adds all relevant edges.",
   144       "Adds all relevant edges.",
   144       (complete, sub) =>
   145       (complete_graph, graph) =>
   145         add_node_group(complete, sub,
   146         add_node_group(complete_graph, graph,
   146           complete.keys.filter(k => (regex.r findFirstIn k).isDefined).toList))
   147           complete_graph.keys.filter(k => (regex.r findFirstIn k).isDefined).toList))
   147 
   148 
   148   case class Add_Transitive_Closure(parents: Boolean, children: Boolean)
   149   case class Add_Transitive_Closure(parents: Boolean, children: Boolean)
   149     extends Graph_Mutator(
   150     extends Graph_Mutator(
   150       "Add transitive closure",
   151       "Add transitive closure",
   151       "Adds all family members of all current nodes.",
   152       "Adds all family members of all current nodes.",
   152       (complete, sub) => {
   153       (complete_graph, graph) => {
   153         val withparents =
   154         val withparents =
   154           if (parents) add_node_group(complete, sub, complete.all_preds(sub.keys))
   155           if (parents) add_node_group(complete_graph, graph, complete_graph.all_preds(graph.keys))
   155           else sub
   156           else graph
   156         if (children) add_node_group(complete, withparents, complete.all_succs(sub.keys))
   157         if (children)
       
   158           add_node_group(complete_graph, withparents, complete_graph.all_succs(graph.keys))
   157         else withparents
   159         else withparents
   158       })
   160       })
   159 }
   161 }
   160 
   162 
   161 trait Mutator
   163 trait Mutator
   162 {
   164 {
   163   val name: String
   165   val name: String
   164   val description: String
   166   val description: String
   165   def mutate(complete: Model.Graph, sub: Model.Graph): Model.Graph
   167   def mutate(complete_graph: Model.Graph, graph: Model.Graph): Model.Graph
   166 
   168 
   167   override def toString: String = name
   169   override def toString: String = name
   168 }
   170 }
   169 
   171 
   170 trait Filter extends Mutator
   172 trait Filter extends Mutator
   171 {
   173 {
   172   def mutate(complete: Model.Graph, sub: Model.Graph) = filter(sub)
   174   def mutate(complete_graph: Model.Graph, graph: Model.Graph) = filter(graph)
   173   def filter(sub: Model.Graph) : Model.Graph
   175   def filter(graph: Model.Graph) : Model.Graph
   174 }
   176 }