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