method deploy n =
assert (self#is_root n);
let s = self#service n in
Hashtbl.add deployed s true;
self#iter_service_nodes (fun n' -> n'#show ()) n;
let show_or_hide_edge e =
let n1, n2 = self#src e, self#dst e in
if self#service n1 = s && self#service n2 = s then begin
match self#edge_type e with
| Service.Inter_functions -> e#show ()
| _ -> assert false
end else
if self#service n1 = s then begin
match self#edge_type e with
| Service.Inter_functions ->
if self#is_deployed (self#service n2) then e#show ()
| Service.Function_to_service ->
if not (self#is_deployed (self#service n2)) then e#show ()
| Service.Inter_services ->
e#hide ()
end else
if self#service n2 = s then begin
match self#edge_type e with
| Service.Inter_functions ->
if self#is_deployed (self#service n1) then
e#show ()
| Service.Function_to_service ->
e#hide ()
| Service.Inter_services ->
if self#is_deployed (self#service n1) then
e#hide ()
end
in
self#iter_edges_e show_or_hide_edge