work on node deletion

This commit is contained in:
Huy Pham 2019-11-07 15:19:01 -08:00
parent dcfd7f8795
commit 707201ce54
4 changed files with 46 additions and 31 deletions

View file

@ -308,7 +308,6 @@ class CoreClient:
logging.info("delete nodes %s", response) logging.info("delete nodes %s", response)
def delete_links(self, delete_session=None): def delete_links(self, delete_session=None):
# sid = None
if delete_session is None: if delete_session is None:
sid = self.session_id sid = self.session_id
else: else:
@ -430,23 +429,6 @@ class CoreClient:
else: else:
return self.reusable.pop(0) return self.reusable.pop(0)
# def add_node(self, node_type, model, x, y, name, node_id):
# position = core_pb2.Position(x=x, y=y)
# node = core_pb2.Node(id=node_id, type=node_type, position=position, model=model)
# self.node_ids.append(node_id)
# response = self.client.add_node(self.session_id, node)
# logging.info("created node: %s", response)
# if node_type == core_pb2.NodeType.WIRELESS_LAN:
# d = OrderedDict()
# d["basic_range"] = "275"
# d["bandwidth"] = "54000000"
# d["jitter"] = "0"
# d["delay"] = "20000"
# d["error"] = "0"
# r = self.client.set_wlan_config(self.session_id, node_id, d)
# logging.debug("set wlan config %s", r)
# return response.node_id
def add_graph_node(self, session_id, canvas_id, x, y, name): def add_graph_node(self, session_id, canvas_id, x, y, name):
""" """
Add node, with information filled in, to grpc manager Add node, with information filled in, to grpc manager
@ -510,12 +492,13 @@ class CoreClient:
""" """
# keep reference to the core ids # keep reference to the core ids
core_node_ids = [self.nodes[x].node_id for x in canvas_ids] core_node_ids = [self.nodes[x].node_id for x in canvas_ids]
node_interface_pairs = []
# delete the nodes # delete the nodes
for i in canvas_ids: for i in canvas_ids:
try: try:
self.nodes.pop(i) n = self.nodes.pop(i)
self.reusable.append(i) self.reusable.append(n.node_id)
except KeyError: except KeyError:
logging.error("coreclient.py INVALID NODE CANVAS ID") logging.error("coreclient.py INVALID NODE CANVAS ID")
@ -524,16 +507,33 @@ class CoreClient:
# delete the edges and interfaces # delete the edges and interfaces
for i in tokens: for i in tokens:
try: try:
self.edges.pop(i) e = self.edges.pop(i)
if e.interface_1 is not None:
node_interface_pairs.append(tuple([e.id1, e.interface_1.id]))
if e.interface_2 is not None:
node_interface_pairs.append(tuple([e.id2, e.interface_2.id]))
except KeyError: except KeyError:
logging.error("coreclient.py invalid edge token ") logging.error("coreclient.py invalid edge token ")
# delete any configurations # delete global emane config if there no longer exist any emane cloud
if core_pb2.NodeType.EMANE not in [x.type for x in self.nodes.values()]:
self.emane_config = None
# delete any mobility configuration, wlan configuration
for i in core_node_ids: for i in core_node_ids:
if i in self.mobilityconfig_management.configurations: if i in self.mobilityconfig_management.configurations:
self.mobilityconfig_management.pop(i) self.mobilityconfig_management.configurations.pop(i)
if i in self.wlanconfig_management.configurations: if i in self.wlanconfig_management.configurations:
self.wlanconfig_management.pop(i) self.wlanconfig_management.configurations.pop(i)
# delete emane configurations
for i in node_interface_pairs:
if i in self.emaneconfig_management.configurations:
self.emaneconfig_management.configurations.pop(i)
for i in core_node_ids:
if tuple([i, None]) in self.emaneconfig_management.configurations:
self.emaneconfig_management.configurations.pop(tuple([i, None]))
def add_preexisting_node(self, canvas_node, session_id, core_node, name): def add_preexisting_node(self, canvas_node, session_id, core_node, name):
""" """

View file

@ -97,7 +97,10 @@ class CoreToolbarHelp:
# get emane config (global configuration) # get emane config (global configuration)
pb_emane_config = self.app.core.emane_config pb_emane_config = self.app.core.emane_config
emane_config = {x: pb_emane_config[x].value for x in pb_emane_config} if pb_emane_config is not None:
emane_config = {x: pb_emane_config[x].value for x in pb_emane_config}
else:
emane_config = None
# get emane configuration list # get emane configuration list
emane_model_configs = self.get_emane_configuration_list() emane_model_configs = self.get_emane_configuration_list()

View file

@ -24,7 +24,7 @@ class WlanConfigDialog(Dialog):
self.config = config self.config = config
self.name = tk.StringVar(value=canvas_node.name) self.name = tk.StringVar(value=canvas_node.name)
self.range_var = tk.StringVar(value=config["basic_range"]) self.range_var = tk.StringVar(value=config["range"])
self.bandwidth_var = tk.StringVar(value=config["bandwidth"]) self.bandwidth_var = tk.StringVar(value=config["bandwidth"])
self.delay_var = tk.StringVar(value=config["delay"]) self.delay_var = tk.StringVar(value=config["delay"])
self.loss_var = tk.StringVar(value=config["error"]) self.loss_var = tk.StringVar(value=config["error"])

View file

@ -383,7 +383,14 @@ class CanvasGraph(tk.Canvas):
self.node_context.unpost() self.node_context.unpost()
self.is_node_context_opened = False self.is_node_context_opened = False
# TODO rather than delete, might move the data to somewhere else in order to reuse
# TODO when the user undo
def press_delete(self, event): def press_delete(self, event):
"""
delete selected nodes and any data that relates to it
:param event:
:return:
"""
# hide nodes, links, link information that shows on the GUI # hide nodes, links, link information that shows on the GUI
to_delete_nodes, to_delete_edge_tokens = ( to_delete_nodes, to_delete_edge_tokens = (
self.canvas_management.delete_selected_nodes() self.canvas_management.delete_selected_nodes()
@ -395,12 +402,17 @@ class CanvasGraph(tk.Canvas):
for token in to_delete_edge_tokens: for token in to_delete_edge_tokens:
self.edges.pop(token) self.edges.pop(token)
# delete the edge data inside of canvas node
canvas_node_link_to_delete = []
for canvas_id, node in self.nodes.items():
for e in node.edges:
if e.token in to_delete_edge_tokens:
canvas_node_link_to_delete.append(tuple([canvas_id, e]))
for nid, edge in canvas_node_link_to_delete:
self.nodes[nid].edges.remove(edge)
# delete the related data from core
self.core.delete_wanted_graph_nodes(to_delete_nodes, to_delete_edge_tokens) self.core.delete_wanted_graph_nodes(to_delete_nodes, to_delete_edge_tokens)
# delete any configuration related to the links and nodes
# delete selected node
# delete links connected to the selected nodes
def add_node(self, x, y, image, node_name): def add_node(self, x, y, image, node_name):
plot_id = self.find_all()[0] plot_id = self.find_all()[0]